Получается эта функция не сразу удаляет юнита?
Пишу вот так:
function RemoveUnit_Actions takes nothing returns nothing
    call BJDebugMsg(R2S(GetUnitState(Unit, UNIT_STATE_LIFE)))
    call RemoveUnit(Unit)
    call BJDebugMsg(R2S(GetUnitState(Unit, UNIT_STATE_LIFE)))
endfunction
И он показывает одинаковые жизни.
Пишу вот так:
function RemoveUnit_Actions takes nothing returns nothing
    call BJDebugMsg(R2S(GetUnitState(Unit, UNIT_STATE_LIFE)))
    call KillUnit(Unit)
    call BJDebugMsg(R2S(GetUnitState(Unit, UNIT_STATE_LIFE)))
endfunction
И в первом он показывает ХП юнита, а во втором уже 0.
Кто знает, подскажите пожалуйста.

Принятый ответ

KillUnit - устанавливает текущее значение хп на 0 и вызывает событие смерти и устанавливает юниту флаг смерти, который можно проверить через UnitAlive нативку из common.ai, даст false.
RemoveUnit - не трогает текущее хп, оно скрывает текущего юнита и создаёт внутренний таймер очистки данных. Однако оно не меняет стейт юнита. UnitAlive нативка из common.ai и тут должна дать false.

Однако, ни одна из переменных не меняет значение сохранённое в переменную, то бишь Unit всегда будет иметь какой-то хендл, который является индексом объекта. Сами же объекты обычно утилизируются игрой, потому указатель на этот объект останется активным.
Если простым языком, то ни KillUnit, ни RemoveUnit не меняют что под капотом, ибо в Джасс мы работаем с псевдоданными и используем индексы (ссылки) для работы с объектами.
И повторно ответив на твой вопрос, проверка через GetUnitState - не является де факто "подтверждением" существования юнита или же его жизни. (Можно убить юнита и насильно поставить здоровье > 0) или же установить герою отрицательное значение силы, и игра будет думать, что хп 4 миллиарда, и т.д. и т.п.
Хочешь 100% вариант? То при любом RemoveUnit - обнуляй переменную или же используй UnitAlive из common.ai. То бишь Unit = null. KillUnit же, позволяет воскрешать героя, а с юнитами - отвечает за труп.
`
ОЖИДАНИЕ РЕКЛАМЫ...
7
20
1 месяц назад
Отредактирован Unryze
7
KillUnit - устанавливает текущее значение хп на 0 и вызывает событие смерти и устанавливает юниту флаг смерти, который можно проверить через UnitAlive нативку из common.ai, даст false.
RemoveUnit - не трогает текущее хп, оно скрывает текущего юнита и создаёт внутренний таймер очистки данных. Однако оно не меняет стейт юнита. UnitAlive нативка из common.ai и тут должна дать false.

Однако, ни одна из переменных не меняет значение сохранённое в переменную, то бишь Unit всегда будет иметь какой-то хендл, который является индексом объекта. Сами же объекты обычно утилизируются игрой, потому указатель на этот объект останется активным.
Если простым языком, то ни KillUnit, ни RemoveUnit не меняют что под капотом, ибо в Джасс мы работаем с псевдоданными и используем индексы (ссылки) для работы с объектами.
И повторно ответив на твой вопрос, проверка через GetUnitState - не является де факто "подтверждением" существования юнита или же его жизни. (Можно убить юнита и насильно поставить здоровье > 0) или же установить герою отрицательное значение силы, и игра будет думать, что хп 4 миллиарда, и т.д. и т.п.
Хочешь 100% вариант? То при любом RemoveUnit - обнуляй переменную или же используй UnitAlive из common.ai. То бишь Unit = null. KillUnit же, позволяет воскрешать героя, а с юнитами - отвечает за труп.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.