Лично я предлагаю сделать так: делаем предмет со способностью на основе спеллшилда. Если урон не смертельный, то удаляем предмет и даём новый (чтобы кд обнулить). Если урон смертельный и кд нет, то даём руну. Наличие кд можно проверять с помощью таймера+хеш, при каждом срабатывании стартуем таймер (главное, на паузу его не ставить).
Ты ничего не путаешь? Или ты специально вводишь всех в заблуждение?
Открываем common.ai и смотрим. Чтобы использовать в обычных картах, её нужно определить после блока глобалок. Если есть vJass, то в любом удобном месте.
Речь о том что юнит мёртв, а игра сообщает обратное. И это так.
В момент перед получением урона (то есть пока триггер на получение урона работает) он ещё считается живым.
И я так и не понял самые первые придирки к реализации, они же ни о чём. Был бы полный комментарий, как сделать лучше, то и разговор был бы другой.
При этом есть такой факт, что ХП юнита может быть БОЛЬШЕ 1 ед., в тот момент времени когда юнит по факту является МЁРТВЫМ
Это не так, юнит умирает только если хп меньше 0.405, доказанный тестами факт. Такие приколы возникают только в момент получения урона, ведь урон ещё не был нанесён, потому и хп больше 1.
функция IsUnitAliveBJ возвращает ответ функции IsUnitDeadBJ с приставкой not
функция IsUnitDeadBJ возвращает - ( ХП юнита <= 0 )
используя GetUnitState(whichUnit, UNIT_STATE_LIFE)
ты же говорить - про эффективность числа 0.405 в том же сравнении
И к чему это? Тут кто-то говорил про использование этих функций? Зачем их вообще их использовать, если есть IsUnitType, GetWidgetLife и UnitAlive, которые ТОЧНО лучше этих BJ?
Так что их можно суммировать и написать мегафункцию
Тоже самое делает UnitAlive.
Вот нормальные функции на все случаи жизни.
раскрыть
UnitDead и UnitIsAlive определённо сомнительные функции.
native UnitAlive takes unit id returns boolean
function UnitDead takes unit u returns boolean
return not UnitAlive(u) // returns true, if unit does not exist.
endfunction
function UnitExists takes unit u returns boolean
return GetUnitTypeId(u) != 0
endfunction
function UnitDoesNotExist takes unit u returns boolean
return GetUnitTypeId(u) == 0
endfunction
function UnitIsAlive takes unit u returns boolean
return not IsUnitType(u, UNIT_TYPE_DEAD)
endfunction
function UnitIsDead takes unit u returns boolean
return IsUnitType(u, UNIT_TYPE_DEAD) // returns false, if unit does not exist.
endfunction
Редактор - После смерти предметы могут быть брошены
А заголовок ни о чём не говорит? Это настройка ТОЛЬКО для редактора.
Чтобы после смерти выпадали предметы, нужно изменить настройки в самой способности инвентаря.
теряет итемы
Вот только это не так, предметы остаются в инвентаре уже мёртвого юнита, и после его полного разложения (по стандарту через 88 секунд после смерти) предметы выпадают и остаются на месте смерти.
Да какая разница, IsUnitType и GetWidgetLife в данной ситуации одинаковы, первая функция берёт 2 аргумента, а вторая требует сравнения с 0 или с .405, UnitAlive всё равно лучше обеих.
Недавно писал одному товарищу систему сохранения приказов на ГУИ (почти), чтобы юнит продолжал выполнять предыдущий приказ после замены.
Нужен JNGP, ибо необходим JassHelper.
Насколько мне известно, воскрешение создаёт нового юнита, но вот это я не проверял, так как практически не работаю со стандартными способностями.
А так добротно сделано, особенно передвижение точки, я сначала подумал, что для передвижения точки тоже используется точка, но там X of Unit, а не X of Point.
Единственный минус, передвижения точки нет в стандартном WE.
Так, или после Or, суть особо не поменяется.
Проверка на мёртвость вообще немного бесполезна, ведь в группе не могут быть мёртвые юниты, они сразу из неё удаляются.
Я так понял, что если дерева меньше 100 и убийств 0, то предмет удаляем. Тогда условие верно.
Но вот в триггере с прибавлением убийств героев ты накосячил.
Надо такое действие.
set УбитоГероев[Player Number of Owner of Killing Unit] = УбитоГероев[Player Number of Owner of Killing Unit] + 1
Ну и проверку на мёртвость юнита надо убрать, ведь понятно, что если юнит умирает, то он мёртв.
KaneThaumaturge, по поводу первой картинки: в конце каждого триггера оставляй как минимум 1 пустую строку, потому что в скрипте первая строка триггера n и последняя строка триггера n-1 склеиваются. n - номер триггера, если считать сверху вниз.
Меняется.
После открытия карты все новые триггеры будут располагаться ниже всех и инициализироваться последними (в порядке создания), а перетаскивание не имеет эффекта. Но после переоткрытия карты и сохранения, триггеры будут располагаться и инициализироваться как они находятся в редакторе в порядке сверху вниз.
Это легко проверить, просто сравнив скрипт карты до переоткрытия и после. Так как я скрипт заливаю на репозиторий, сравнение файлов это замечает.
Ред. PT153
» WarCraft 3 / Предмет: Божественный Щит
Ред. PT153
» WarCraft 3 / Предмет: Божественный Щит
Ред. PT153
» WarCraft 3 / Предмет: Божественный Щит
Ред. PT153
» WarCraft 3 / Выпадение предметов после смерти
» WarCraft 3 / Предмет: Божественный Щит
» WarCraft 3 / Приказ
Но вообще эта система не нужна, есть морфы, там всё нативно сохраняется.
» WarCraft 3 / Тип переменной
» WarCraft 3 / Из моба в героя
» WarCraft 3 / Приказ
Нужен JNGP, ибо необходим JassHelper.
» WarCraft 3 / Предмет: Божественный Щит
» WarCraft 3 / Спел похищение жизни!
Ред. PT153
» WarCraft 3 / Смерть в лаве
Единственный минус, передвижения точки нет в стандартном WE.
Ред. PT153
» WarCraft 3 / Смерть в лаве
Ред. PT153
» WarCraft 3 / Смерть в лаве
» WarCraft 3 / Смерть в лаве
» WarCraft 3 / Смерть в лаве
Проверка на мёртвость вообще немного бесполезна, ведь в группе не могут быть мёртвые юниты, они сразу из неё удаляются.
Ред. PT153
» WarCraft 3 / Смерть в лаве
» WarCraft 3 / Смерть в лаве
Ред. PT153
» WarCraft 3 / Проверка убийства героев
Но вот в триггере с прибавлением убийств героев ты накосячил.
Надо такое действие.
» WarCraft 3 / Проверка убийства героев
Стоит показать полностью триггер с условиями из 3-го скриншота.
» WarCraft 3 / Правильно ли проверка строки if()
» WarCraft 3 / Ошибка Missing endblock, cJass
Ред. PT153
» WarCraft 3 / Порядок инициализации
Ред. PT153
» WarCraft 3 / Порядок инициализации
После открытия карты все новые триггеры будут располагаться ниже всех и инициализироваться последними (в порядке создания), а перетаскивание не имеет эффекта. Но после переоткрытия карты и сохранения, триггеры будут располагаться и инициализироваться как они находятся в редакторе в порядке сверху вниз.
Ред. PT153
» WarCraft 3 / Как убрать функцию "Страх" у ИИ