Есть некий юнит (герой). Он есть на карте, он хранится в переменной. В определённый момент он умирает. Проверка на то, жив ли он показывает смерть. Но спустя некоторое время (около минуты, плюс/минус) проверка на то, жив ли этот юнит показывает то, что он жив. Хотя он никак не воскрешался и, собственно, мёртв.

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

код
    //Определяет жив или мертв юнит. 
    //Есть точный параметр определения, что юнит мертв - UNIT_TYPE_DEAD
    //Если юнит удален или его труп разложился и исчез, то тип объекта IsUnitType обнуляется. Но переменные unit u все равно могут содержать инфу, варкрафт не обнуляет значения переменных.
    function IsUnitDead takes unit u returns boolean
        return IsUnitType( u, UNIT_TYPE_DEAD ) or GetUnitTypeId( u ) < 1
    endfunction
проверять хп не всегда хорошо. пользователи пишут что у них регенится хп, даже если юнит мертв (не сталкивался, не исключено). герои могут умереть, и трупы валяются на местах их смерти до сих пор пока не воскресят. еще есть случаи с крестом перерождения (но это отдельный случай)
function IsDead takes unit u returns boolean
	return GetWidgetLife(u) < 0.405 or IsUnitType(u,UNIT_TYPE_DEAD)
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
10
5 лет назад
0
Я не понял почему, но, судя по всему, повышение уровня (триггерное) мёртвому герою делает, в некотором смысле, его живым...
1
27
5 лет назад
Отредактирован MpW
1
код
    //Определяет жив или мертв юнит. 
    //Есть точный параметр определения, что юнит мертв - UNIT_TYPE_DEAD
    //Если юнит удален или его труп разложился и исчез, то тип объекта IsUnitType обнуляется. Но переменные unit u все равно могут содержать инфу, варкрафт не обнуляет значения переменных.
    function IsUnitDead takes unit u returns boolean
        return IsUnitType( u, UNIT_TYPE_DEAD ) or GetUnitTypeId( u ) < 1
    endfunction
проверять хп не всегда хорошо. пользователи пишут что у них регенится хп, даже если юнит мертв (не сталкивался, не исключено). герои могут умереть, и трупы валяются на местах их смерти до сих пор пока не воскресят. еще есть случаи с крестом перерождения (но это отдельный случай)
function IsDead takes unit u returns boolean
	return GetWidgetLife(u) < 0.405 or IsUnitType(u,UNIT_TYPE_DEAD)
endfunction
Принятый ответ
0
10
5 лет назад
0
Steal nerves, я проверял ещё и сравнением уровня здоровья с 0.32, всё равно не помогало. Но когда добавил проверку на то, жив ли юнит в триггер где даю опыт героям, то баг исчез (вроде).
0
27
5 лет назад
Отредактирован MpW
0
ArchOracle, у тебя работает этот код (что выше)? если нет, выводи дебагом сколько у тебя хп в данный момент. Периодично раз 0.01-0.05 выводи на экран, меняется ли хп (если у тебя проверка хп. Просто интересно что происходит с хп героя).
UNIT_TYPE_DEAD - говорит что юнит мертв (лежащий трупак). Это всегда помогает.
сколько тем на форумах было на эти проверки, избитая проблема =(

не повышай тогда триггерно юниту, пока он мертв. Пробуй позже повышать.
0
10
5 лет назад
0
Steal nerves, на счёт хп проверю. Необходимую проверку на жизнь героя я сделал, там всё в порядке. Но я использовал "is alive", а не "is dead". (В гуи)
Steal nerves, кажется понял. При повышении уровня повышается в том числе и текущее здоровье. А проверка на то, жив ли юнит, видимо, именно уровень здоровья и проверяет.
0
27
5 лет назад
Отредактирован MpW
0
ArchOracle, возьми и раскрой BJ-обертки. внутри них лежат проверки хп>0 или хп<0 (is alive "юнит жив" хп>0, is dead "юнит мертв" хп<0). эти близзардские функции сравнивают хп. они не дают точно знать мертв ли сейчас (но должны, никогда не парился с этим), но по логике близзард хп равное 0 значит мертв
0
10
5 лет назад
0
Steal nerves:
ArchOracle, возьми и раскрой BJ-обертки. внутри них лежат проверки хп>0 или хп<0 (is alive "юнит жив" хп>0, is dead "юнит мертв" хп<0). эти близзардские функции сравнивают хп. они не дают точно знать мертв ли сейчас (но должны, никогда не парился с этим), но по логике близзард хп равное 0 значит мертв
В том и дело, что при повышении уровня текущий уровень хп повышается! Хп мёртвого героя после повышения становилось в районе 29, вот проверка говорила что он жив.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.