Daro
offline
Опыт:
4,423Активность: |
Неуязвимость юнита
Здравствуйте,у меня такой вопрос:Как отловить неуязвимость нужного юнита ?такого в условиях на ГУИ нету .Также я перерыл нативки,там только неуязвимость на предметы и декор. Как мне быть?А то мне приходится велосипедить и проверять юнита на паузу (приостановление) ,что не всегда подходит.прошу прощения ,если уже были подобные темы |
10.03.2014, 13:41 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
16GB
GhostOne User
offline
Опыт:
59,317Активность: |
|
10.03.2014, 13:54 | #2
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Daro
offline
Опыт:
4,423Активность: |
Спасибо, но насколько удобна эта функция и как ей пользоваться на конкретном примере?Как я понимаю наносится чистый урон,а что если он не на несется?(блок,уворот,триг реген+полученый урон)? |
10.03.2014, 14:43 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
Daro, проверяешь этой функцией неуязвимость через условие:
((код jass
if IsUnitInvulnerable( GetTriggerUnit() ) then
call BJDebugMsg( "неуязвим!" ) endif )) Вместо GetTriggerUnit() можно поставить переменную, функция проверяет можно ли отнять здоровье юниту или нет с помощью чистого урона или нет... |
10.03.2014, 15:53 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
offline
Опыт:
40,226Активность: |
Есть один способ проверить юнита на неуязвимость,
и поскольку о нём не было сказано - расскажу я делается это по средствам РО, через бафф от ауры ЧАСТЬ 1 - приготовления
Создаём новый бафф, на любой основе, описание и игровое название - роли не играют так же можно убрать всяческие графические аттачи, если имеются Берём какой нить спелл-ауру (например ауру замедления у торнадо) Убираем замедление, ставим дальность на 0.00 или -1.00 (хотя это и не обязательно) В графе "харки - заклинание" ставим новый бафф (тот который создали ранее) В допустимых целях ставим "сам воин, уязвимые" ЧАСТЬ 2 - применение
В нужный момент, когда нам потребуется проверить юнита не неуязвимость мы просто даём этому юниту скилл-ауру для себя если юнит уязвим - он тут же получит бафф а если неуязвим - он не получит бафф в случаи если бафф есть - делаем что нужно, но перед этим лишаем юнита спелла и баффа
если баффа нету - просто лишаем спелла . . . хотя баф тоже можно снять (т.е. делать так то бы спелл и бафф отнимались в любом случаи) ЧАСТЬ 3 - итоги используем 1 спелл, 1 бафф, и условие на наличием баффа у юнита при этом не нужно пытаться наносить урон по юниту |
12.03.2014, 13:02 | #5
+2/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
просто предупреждаю, что код выше не будет работать в ряде случаев по причине неграмотности автора по поводу floating points
нельзя использовать математику и прямое сравнение в одной и той же логике, это не школа где 0.1 + 0.1 = 0.2 |
12.03.2014, 14:12 | #6
+3/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
отмечу что высказывание выше сделано совершенно неграмотным неадекватом который не шарит вообще.
еще попрошу обосновать в каких это случаях код не будет работать.
для тех кто в танке - автор кода это я и этому коду далеко не 5 минут. |
13.03.2014, 10:38 | #7
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Holocauster
INRI
offline
Опыт:
4,249Активность: |
Скорпион в танке? Это что-то новое. И все равно мне больше нравится вариация кода от Экстрематора. |
13.03.2014, 11:02 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
конкретно здесь
set Check_Health = (GetWidgetLife(Unit) == Health_Current + 0.001)
ScorpioT1000 добавил:
если к флоату прибавить 0.001, а потом отнять 0.001, может получиться не то, что было изначально. хотя в целом да, я проверил бегло, возможно в твоем случае будет все хорошо, конкретно потому что ты возвращаешь на то же значение, что и отнимаешь |
13.03.2014, 11:38 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
то что ты считаешь себя умнее других это не хорошо и не плохо, случай который ты описываешь предусмотрен в конце
return not (GetUnitState(Unit,UNIT_STATE_MANA) != Mana_Current)
внимательно посмотри как реализована проверка, это как раз на тот случай когда для разных флотов проходит проверка на равенство и на неравенство одновременно.
дада я знал про это еще 3 года назад. |
13.03.2014, 12:04 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
|
13.03.2014, 12:45 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
А отдача приказа даммику? Она же вернет false, если цель для приказа не соответствует? Например, приказать колдовать заклинание, которое действует только на уязвимых? Принцип близкий к варианту с аурой, но мне помниться, что бафф от ауры появляется не сразу. |
13.03.2014, 14:35 | #12
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
отдача приказа очень хороший вариант, более того это первый вариант реализации.
приказом можно проверять много чего настроив дамми абилки соответствующим образом, например тип разрушаемого объекта или класс\тип юнита на который нет нативки. |
13.03.2014, 18:22 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
offline
Опыт:
40,226Активность: |
ADOLF:
Ауры обновляются не сразу... Но если дать юниту ауру и тут же проверить есть ли у него бафф от этой ауры - то ответ будет положительный |
14.03.2014, 20:14 | #14
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|