Очень часто мертвые герои оказываются "живыми" т.к условие GetWidgetLife( unit ) > 0.405 выдает true даже когда герой абсолютно мертв. И т.к в моей карте мультиборд отображает хп героев видно что он не только "живой" но и регенит себе хп, хотя он уже минуту как умер. Изза этой проблемы постоянно возникают всякие проблемы с различными способностями и не только. Можно ли как-нибудь пофиксить это или иначе проверять жив герой или мертв? Или придется мутить костыли и запоминать текущий статус героя при помощи переменной?

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

Есть проверка IsUnitDead, где проверяется тип и состояние IsUnitType(u, UNIT_TYPE_DEAD) но никогда не было проблем с проверкой хп.
Так же насколько я помню GetWidgetLife( unit ) > 0.0 или GetUnitState( unit, UNIT_STATE_LIFE ) > 0.405.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
12
7 лет назад
Отредактирован N7_Stormreaver
0
В большинстве случаев эта проблема возникает из-за триггерных хилов, т.е. "set unit life to X", когда герой уже мертв. В такой ситуации помогает добавить логическую проверку жив ли герой на каждый подобный эффект.
1
32
7 лет назад
1
Есть проверка IsUnitDead, где проверяется тип и состояние IsUnitType(u, UNIT_TYPE_DEAD) но никогда не было проблем с проверкой хп.
Так же насколько я помню GetWidgetLife( unit ) > 0.0 или GetUnitState( unit, UNIT_STATE_LIFE ) > 0.405.
Принятый ответ
3
21
7 лет назад
3
GetWidgetLife( unit ) > 0.405 как раз и выдает true если юнит жив
а если поставить знак < то должно быть правильно
0
26
7 лет назад
0
в дополнение к сабжу
проверка на 0.405 хп является ошибочной (баговой)
точно так же как и GUI-шная проверка на "хп > 0"
Поэтому запомни навсегда - никогда не используй проверку на .405 хп , будут баги
0
22
7 лет назад
0
Только сегодня копался в этом.
Вот как у близов сделано:
GetUnitState(whichUnit, UNIT_STATE_LIFE) <= 0
function IsUnitDeadBJ takes unit whichUnit returns boolean
return GetUnitState(whichUnit, UNIT_STATE_LIFE) <= 0
endfunction
function IsUnitAliveBJ takes unit whichUnit returns boolean
return not IsUnitDeadBJ(whichUnit)
endfunction
0
26
7 лет назад
0
Об этом и речь - некое количество хп не обязывает юнита быть живым.
4
32
7 лет назад
4
Extremator:
в дополнение к сабжу
проверка на 0.405 хп является ошибочной (баговой)
точно так же как и GUI-шная проверка на "хп > 0"
Поэтому запомни навсегда - никогда не используй проверку на .405 хп , будут баги
Пруф на баги?
1
22
7 лет назад
1
Я не пойму зачем проверять на какие-то 0.405, а не просто на 0?
0
26
7 лет назад
0
Proshel_Doty:
Я не пойму зачем проверять на какие-то 0.405, а не просто на 0?
потому что если вручную понижать ХП юнита от 1 до 0, то где-то на 0.4 он здохнет
quq_CCCP:
Пруф на баги?
А он тебе чем поможет?
Чтобы оставить комментарий, пожалуйста, войдите на сайт.