XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Daro

offline
Опыт: 4,782
Активность:
Неуязвимость юнита
Здравствуйте,у меня такой вопрос:Как отловить неуязвимость нужного юнита ?такого в условиях на ГУИ нету .Также я перерыл нативки,там только неуязвимость на предметы и декор. Как мне быть?А то мне приходится велосипедить и проверять юнита на паузу (приостановление) ,что не всегда подходит.прошу прощения ,если уже были подобные темы
Старый 10.03.2014, 13:41
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
function IsUnitInvulnerable takes unit Unit returns boolean
    
    local real    Health_Current = GetWidgetLife(Unit)
    local real    Mana_Current   = GetUnitState(Unit,UNIT_STATE_MANA)
    local boolean Check_Health
    
    call SetWidgetLife(Unit,Health_Current + 0.001)    
    if Health_Current != GetWidgetLife(Unit) then
        call UnitDamageTarget(Unit,Unit,0.001,false,true,null,null,null)
        set Check_Health = (GetWidgetLife(Unit) == Health_Current + 0.001)
    else
        call UnitDamageTarget(Unit,Unit,0.001,false,true,null,null,null)
        set Check_Health = (GetWidgetLife(Unit) == Health_Current)
        call SetWidgetLife(Unit,Health_Current)
    endif
    
    if Check_Health then
        return not (GetUnitState(Unit,UNIT_STATE_MANA) != Mana_Current)
    endif
    return Check_Health
    
endfunction
Старый 10.03.2014, 13:54
Daro

offline
Опыт: 4,782
Активность:
Спасибо, но насколько удобна эта функция и как ей пользоваться на конкретном примере?Как я понимаю наносится чистый урон,а что если он не на несется?(блок,уворот,триг реген+полученый урон)?
Старый 10.03.2014, 14:43
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Daro, проверяешь этой функцией неуязвимость через условие:
((код jass
if IsUnitInvulnerable( GetTriggerUnit() ) then
call BJDebugMsg( "неуязвим!" )
endif
))
Вместо GetTriggerUnit() можно поставить переменную, функция проверяет можно ли отнять здоровье юниту или нет с помощью чистого урона или нет...
Старый 10.03.2014, 15:53
Extremator

offline
Опыт: 39,428
Активность:
Есть один способ проверить юнита на неуязвимость,
и поскольку о нём не было сказано - расскажу я
делается это по средствам РО, через бафф от ауры
ЧАСТЬ 1 - приготовления
Создаём новый бафф, на любой основе, описание и игровое название - роли не играют
так же можно убрать всяческие графические аттачи, если имеются
Берём какой нить спелл-ауру (например ауру замедления у торнадо)
Убираем замедление, ставим дальность на 0.00 или -1.00 (хотя это и не обязательно)
В графе "харки - заклинание" ставим новый бафф (тот который создали ранее)
В допустимых целях ставим "сам воин, уязвимые"
ЧАСТЬ 2 - применение
В нужный момент, когда нам потребуется проверить юнита не неуязвимость
мы просто даём этому юниту скилл-ауру для себя
если юнит уязвим - он тут же получит бафф
а если неуязвим - он не получит бафф
в случаи если бафф есть - делаем что нужно, но перед этим лишаем юнита спелла и баффа
если баффа нету - просто лишаем спелла . . . хотя баф тоже можно снять
(т.е. делать так то бы спелл и бафф отнимались в любом случаи)
ЧАСТЬ 3 - итоги
используем 1 спелл, 1 бафф, и условие на наличием баффа у юнита
при этом не нужно пытаться наносить урон по юниту
Старый 12.03.2014, 13:02
ScorpioT1000
Работаем
online
Опыт: отключен
просто предупреждаю, что код выше не будет работать в ряде случаев по причине неграмотности автора по поводу floating points
нельзя использовать математику и прямое сравнение в одной и той же логике, это не школа где 0.1 + 0.1 = 0.2
Старый 12.03.2014, 14:12
DioD

offline
Опыт: 45,134
Активность:
отмечу что высказывание выше сделано совершенно неграмотным неадекватом который не шарит вообще.
еще попрошу обосновать в каких это случаях код не будет работать.
для тех кто в танке - автор кода это я и этому коду далеко не 5 минут.
Старый 13.03.2014, 10:38
Holocauster
INRI
offline
Опыт: 4,249
Активность:
Скорпион в танке? Это что-то новое. И все равно мне больше нравится вариация кода от Экстрематора.
Старый 13.03.2014, 11:02
ScorpioT1000
Работаем
online
Опыт: отключен
конкретно здесь
set Check_Health = (GetWidgetLife(Unit) == Health_Current + 0.001)
ScorpioT1000 добавил:
если к флоату прибавить 0.001, а потом отнять 0.001, может получиться не то, что было изначально.
хотя в целом да, я проверил бегло, возможно в твоем случае будет все хорошо, конкретно потому что ты возвращаешь на то же значение, что и отнимаешь
Старый 13.03.2014, 11:38
DioD

offline
Опыт: 45,134
Активность:
то что ты считаешь себя умнее других это не хорошо и не плохо, случай который ты описываешь предусмотрен в конце
return not (GetUnitState(Unit,UNIT_STATE_MANA) != Mana_Current)
внимательно посмотри как реализована проверка, это как раз на тот случай когда для разных флотов проходит проверка на равенство и на неравенство одновременно.
дада я знал про это еще 3 года назад.
Старый 13.03.2014, 12:04
ScorpioT1000
Работаем
online
Опыт: отключен
хотя в целом да, я проверил бегло, возможно в твоем случае будет все хорошо, конкретно потому что ты возвращаешь на то же значение, что и отнимаешь
Старый 13.03.2014, 12:45
adic3x

offline
Опыт: 108,439
Активность:
А отдача приказа даммику? Она же вернет false, если цель для приказа не соответствует? Например, приказать колдовать заклинание, которое действует только на уязвимых? Принцип близкий к варианту с аурой, но мне помниться, что бафф от ауры появляется не сразу.
Старый 13.03.2014, 14:35
DioD

offline
Опыт: 45,134
Активность:
отдача приказа очень хороший вариант, более того это первый вариант реализации.
приказом можно проверять много чего настроив дамми абилки соответствующим образом, например тип разрушаемого объекта или класс\тип юнита на который нет нативки.
Старый 13.03.2014, 18:22
Extremator

offline
Опыт: 39,428
Активность:
ADOLF:
Принцип близкий к варианту с аурой, но мне помниться, что бафф от ауры появляется не сразу.
Ауры обновляются не сразу...
Но если дать юниту ауру и тут же проверить есть ли у него бафф от этой ауры - то ответ будет положительный
Старый 14.03.2014, 20:14
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 21:46.