Сейчас 19:53:56 Четверг, 26 декабря, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Система] Easy Damage System
AjaccioДата: Четверг, 17 Марта 2011, 22:50:34 | Сообщение # 1
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Easy Damage System


Решил выложить используемую мной систему для отлова всякого-разного урона без лишних усилий.
Конечно, это изобретение велосипеда, но возможно кому-то подойдет, тем более альтернативы на сайте я не увидел.
И даже не поленился перевести её в vJass...





Просто скопируйте к себе в карту триггер (при этом нужно иметь JNGP и, возможно, AdicParser), способность "Метка" и её эффект...
Затем можете использовать новые функции:

1) TriggerRegisterAllUnitDamaged(<Триггер>) - новое событие, срабатывает при получении любым воинов урона.
2) GetDSSource, GetDSTarget и GetDSCounts - работают аналогично GetEventDamageSource, GetTriggerUnit и GetEventDamage соответственно.
3) GetEventAttackType и GetEventDamageType - возвращают, как ни странно, тип атаки и урона.
4) UserUnitDamageTarget - только для vJass версии, принимает те же параметры, что и UnitDamageTarget...

Вроде всё... alco
Прикрепления: EMDS.w3x (73.6 Kb)


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

lawsonДата: Четверг, 17 Марта 2011, 23:03:59 | Сообщение # 2
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
а в чем разника от
TriggerRegisterUnitEvent(t, unit ,EVENT_UNIT_DAMAGED)?


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Четверг, 17 Марта 2011, 23:04:07
 

AjaccioДата: Четверг, 17 Марта 2011, 23:38:12 | Сообщение # 3
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Действует на всех юнитов сразу...
В этом и смысл ведь, можно просто писать разные способности а-ля "ударил и случилось N" или "герой поглощает N% урона от магии" и т.д.


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

DreiiДата: Пятница, 18 Марта 2011, 10:30:18 | Сообщение # 4
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Ajaccio, а можешь сделать на простом jass?

 

AjaccioДата: Пятница, 18 Марта 2011, 11:31:40 | Сообщение # 5
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Теоретически возможно, но сам процесс крайне утомителен + станет сложнее импортировать.
Главный вопрос - зачем?


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

DreiiДата: Пятница, 18 Марта 2011, 11:48:36 | Сообщение # 6
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Ajaccio, ммм я не врубаюсь в с и в жассы)

 

SirNikolasДата: Пятница, 18 Марта 2011, 12:28:49 | Сообщение # 7
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Ajaccio)
Code
float GetDSCounts() {   
return bj_lastCountsDamage   
}

unit GetDSSource() {   
return bj_lastSourceDamage   
}

unit GetDSTarget() {   
return bj_lastTargetDamage   
}

damagetype GetEventDamageType() {   
return bj_lastDamageType   
}

attacktype GetEventAttackType() {   
return bj_lastAttackType   
}
А не проще ли дать пользователю доступ к этим переменным?
Quote (Ajaccio)
Code
group timed = CreateGroup()
Не лучше ли сделать ее глобальной приватной константой?




Сообщение отредактировал SirNikolas - Пятница, 18 Марта 2011, 12:56:54
 

AjaccioДата: Пятница, 18 Марта 2011, 12:48:54 | Сообщение # 8
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Насчёт функций...
Возможно переменными и проще, я просто старался сделать так, как это принято у Blizzard. Зачастую ведь они тоже используют переменные.
Конечно, допустимо убрать приватность, тогда сохранится выбор.
С группой всё верно, её стоит сделать глобальной и это снимет часть нагрузки. Впрочем исправляется порой строчек.


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

SirNikolasДата: Пятница, 18 Марта 2011, 13:00:08 | Сообщение # 9
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Ajaccio)
Code
if (GetUnitAbilityLevel(bj_lastTargetDamage, SPELL_BUFF) != 0) {  
UnitRemoveAbility(bj_lastTargetDamage, SPELL_BUFF)  
bj_lastDamageType = DAMAGE_TYPE_NORMAL  
if (IsUnitType(bj_lastSourceDamage, UNIT_TYPE_HERO) == true) {  
bj_lastAttackType = ATTACK_TYPE_HERO  
} else {  
bj_lastAttackType = ATTACK_TYPE_MELEE  
}  
} else {  
bj_lastDamageType = DAMAGE_TYPE_MAGIC  
bj_lastAttackType = ATTACK_TYPE_MAGIC  
}
Не совсем понял, как это работает...


 

AjaccioДата: Пятница, 18 Марта 2011, 13:12:46 | Сообщение # 10
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Я просто имитировал определение типа атаки и урона. Для начала, все на карте получают невидимую способность.
Суть её такова, что при атаке враг получает эффект-пустышку. Далее срабатывает триггер получения урона.
Если юнит имеет этот эффект, значит урон получен от атаки рукой, соответственно устанавливаю нужное значение переменной.
Дополнительно стоит проверка, является атакующий героем или нет (и записываю тип атаки "геройский удар" или "обычный удар").

Конечно, если эффекта нет, значит урон получен от магии -> DAMAGE_TYPE_MAGIC и ATTACK_TYPE_MAGIC.
Это не есть абсолютно верно, некоторые заклинания наносят другой тип урона, но они редкость.
Тем более сейчас в картах редко используется стандарт, а триггерный урон я отлавливаю функцией.

После работы эффект-пустышка удаляется и его в игре не видно.
Хотя, если наносить урон очень часто (вращение BM), то порой можно заметить мелькание в статусе.


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

SirNikolasДата: Пятница, 18 Марта 2011, 13:24:53 | Сообщение # 11
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Ajaccio, скажи, пожалуйста, на чем сделана пустышка? Просто интересно, ведь "Сфера..." работает, только если ткнуть мышкой на конкретного юнита.

 

AjaccioДата: Пятница, 18 Марта 2011, 13:38:14 | Сообщение # 12
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Это не совсем сфера, хотя тоже орб-эффект по сути. Называется "Предмет: проклятие".

XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

SirNikolasДата: Пятница, 18 Марта 2011, 13:49:06 | Сообщение # 13
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Жалко, ведь она тоже является buff-placer'ом (а значит, не будет суммироваться с другими). Я для подобного использовал "Яд".

 

AjaccioДата: Пятница, 18 Марта 2011, 13:55:37 | Сообщение # 14
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Яд, как помню, вроде отображается на панели, хотя возможно есть и невидимый.
Вообще меня страшно злят Blizzard'овские системы сфер и критов/башей. В итоге я их просто переписал с использование данной системы.
После этого всё суммируется так, как мне нужно.


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

SirNikolasДата: Пятница, 18 Марта 2011, 15:01:23 | Сообщение # 15
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Ajaccio)
Яд, как помню, вроде, отображается на панели, хотя, возможно, есть и невидимый.
Невидимый spellbook.
Quote (Ajaccio)
Хотя, если наносить урон очень часто (вращение BM), то порой можно заметить мелькание в статусе.
При вращении у него атака становится равной нулю, но он продолжает атаковать и оставлять buff'ы.
Quote (Ajaccio)
Вообще меня страшно злят Blizzard'овские системы сфер и критов/башей. В итоге я их просто переписал с использование данной системы.
Дело в том, что даммикаст (например, замедления для яда) происходит с небольшой задержкой, что не есть красиво. Ты не знаешь, как это можно нормализовать?


 

AjaccioДата: Пятница, 18 Марта 2011, 16:13:59 | Сообщение # 16
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Quote (SirNikolas)
Невидимый spellbook.

Лень. ;)

Quote (SirNikolas)
При вращении у него атака становится равной нулю, но он продолжает атаковать и оставлять buff'ы.

Вот за это спасибо, вероятно будет достаточно исправить пару строк... и глюков не будет.

Кстати, никогда не замечал задержки даммикаста. Главное сбросить у дамми время анимаций и создавать его лицом к цели.
Тогда и задержка будет -> к 0.


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

QuasarДата: Воскресенье, 20 Марта 2011, 14:01:00 | Сообщение # 17
7 уровень
Группа: Проверенные
Сообщений: 334
Награды: 0
Репутация: 41
Блокировки:
Можно на нормальном Jass эту систему выложить?

Спелмейкер ищет работу)
 

AjaccioДата: Понедельник, 21 Марта 2011, 09:14:54 | Сообщение # 18
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Вот версия для простого редактора, нужно скопировать переменные, триггер, немного из инициализации и две способности...

Надеюсь будет работать!


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

LanceloToДата: Четверг, 31 Марта 2011, 17:59:07 | Сообщение # 19
4 уровень
Группа: Проверенные
Сообщений: 94
Награды: 0
Репутация: 6
Блокировки:
От Мерзавчика:
Quote (Ajaccio)
Версия на JASS!
---- удалено
Помогите зделать условие -- если тип урона (герой) == да
 

SirNikolasДата: Четверг, 31 Марта 2011, 18:09:06 | Сообщение # 20
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Code
if GetEventAttackType() == ATTACK_TYPE_HERO then
     //
endif
А еще можно добавить функцию удаления события.


 

LanceloToДата: Четверг, 31 Марта 2011, 18:39:35 | Сообщение # 21
4 уровень
Группа: Проверенные
Сообщений: 94
Награды: 0
Репутация: 6
Блокировки:
[18:38:41] Мерзавчик: function Trig_Texttag_Conditions takes nothing returns boolean
return IsUnitType(GetAttackedUnitBJ(), UNIT_TYPE_HERO) == false and GetEventAttackType() == ATTACK_TYPE_HERO
endfunction почему неработает?
 

rixt7956Дата: Четверг, 31 Марта 2011, 19:06:46 | Сообщение # 22
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Quote (Ajaccio)
constant int SPELL_MARK = 'A003' //РАВ-код способности "Метка (Damage System)"
constant int SPELL_BUFF = 'B000' //РАВ-код эффекта для "Метка (Damage System)"

Мелочь, но всё же лучше было бы вот так :)
Code
define{
SPELL_MARK = 'A003'
SPELL_BUFF = 'B000'}
 

AjaccioДата: Суббота, 02 Апреля 2011, 00:37:28 | Сообщение # 23
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Доделал до кошерного вида, устранил > 9000 багов и глюков, как-то:


  • Определение типа урона и атаки теперь нормально работает с UnitDamageTarget(...).
  • Исправил ошибку с define, которая не давала использовать эту ^ функцию.
  • Функции определения типа урона и атаки не "ломаются" при триггерном нанесении урона.
  • Добавил функции GetAttackTypeID(attacktype a_t) и GetDamageTypeID(damagetype a_t), но только в cJass.
  • Значительно оптимизировал код (благодарю SirNikolas и rixt7956 за указания на ошибки).
  • ...

Версия для Jass тоже есть, нужно скопировать переменные и засунуть отмеченную часть кода в "Нестандартный код".



XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

QuasarДата: Суббота, 02 Апреля 2011, 01:23:29 | Сообщение # 24
7 уровень
Группа: Проверенные
Сообщений: 334
Награды: 0
Репутация: 41
Блокировки:
можно тоже самое на простом Jass если не затруднит?

Спелмейкер ищет работу)
 

AjaccioДата: Суббота, 02 Апреля 2011, 01:33:15 | Сообщение # 25
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Quote (Ajaccio)
Версия для Jass тоже есть, нужно скопировать переменные и засунуть отмеченную часть кода в "Нестандартный код".

Она в карте есть, в триггере EMDS.


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz