Добавлен
Вот такой код (в этом случае три точки), не всегда, но может сработать, даже если один из юнитов мертв.
if not IsUnitDeadBJ(udg_CAPITAN) and not IsUnitDeadBJ(udg_CAPITAN_SC) then
...
endif
P.S. Никаких вейтов не юзал в коде, он мгновенный.
В чем может быть причина?

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

не юзайте бж говно функции
 GetWidgetLife( unit ) < 0.405 or IsUnitType( unit, UNIT_TYPE_DEAD )
Вот это должно помочь.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
19
7 лет назад
0
Похожие вопросы:

ответ
Impertus:
quq_CCCP:
Без локейшенов, набери
	GetRandomReal( GetRectMinX( bj_mapInitialPlayableArea ), GetRectMaxX( bj_mapInitialPlayableArea )  )
Для Y думаю догадаешся как найти...
Размер карты-то изначально известен, можно обойтись и рандомом между статичными цифирями. Думал над этим вариантом тоже, значит будем пользовать его.
nvc123:
к слову этот вообще не рабочий ибо количество итераций циклов может превысить лимит потока и тогда триггер просто обрубится
Ставить таймеры по 0.5 сек? Такого вида?
loop
        exitwhen  IsUnitDeadBJ(BET) or BECo > 20
        if (TimerGetRemaining(t) <= 0) then
            call MoveLocation( p, GetRandomReal ( X1, X2), GetRandomReal (Y1, Y2))
            call SetUnitMoveSpeed( BET, 500.00 )
            call IssuePointOrderLocBJ( BET, "move", p )
            set BECo = BECo + 0.5
            call TimerStart(t, 0.5, false, null)
        endif     
endloop
Таймер не вейт, он запустить новый Поток когда истечет, в функции старта таймера 4 параметра, таймер, время, периодичный буль и ссылка на код .
вместо null нужно вписать function Имя функции
functiom Timer_UnitMove_Expires takes nothing returns nothing
    // эта функция будет вызыватся каждые 0.50 сек. пока не остановить таймер
endfunction


function A takes nothing returns nothing
local timer t = CreateTimer( )

call TimerStart( t, 0.50, true, function Timer_UnitMove_Expires )

set t = null
endfunction
Чтобы передавать информацию между функциями нужны так называемые Аттачи, нужно прикрепить данные к триггеру или таймеру, потому что мы можем получить ссылку на них в запущенных ими потоками.
Про хештаблицу куча данных на сайте, SaveUnitHandle( хештаблица, ключ 1, ключ 2, сам юнит )
ответ
FenikS1991, убери стоимость в 15 маны.

5
32
7 лет назад
5
не юзайте бж говно функции
 GetWidgetLife( unit ) < 0.405 or IsUnitType( unit, UNIT_TYPE_DEAD )
Вот это должно помочь.
Принятый ответ
0
8
7 лет назад
0
quq_CCCP:
не юзайте бж говно функции
 GetWidgetLife( unit ) < 0.405 or IsUnitType( unit, UNIT_TYPE_DEAD )
Вот это должно помочь.
В принципе IsUnitDeadBJ проверяет GetUnitState(whichUnit, UNIT_STATE_LIFE) <= 0
Может причина в том, что здоровье юнита не обязательно 0 или меньше, а может быть в диапазоне от 0.001 и до 0.405
Окей, буду юзать GetWidgetLife( unit ) < 0.405
Спасибо!
0
30
7 лет назад
0
GetWidgetLife( unit ) < 0.405
Неоднократно было показано, что такое количество здоровья у юнита может быть только если его специально задать триггерно.
Кроме того, число "0.4" ничем не хуже числа "0.405", и даже лучше: в нём меньше знаков.
0
32
7 лет назад
0
Clamp, ой да всем насрать, это копипаст IsUnitDead описную 10 лет назад вексом в спелл систем.
Щяс там из за 2х знаков все сломается.
0
21
7 лет назад
0
После юзания функции от драколича все подобные проблемы, что мёртвый иногда не мёртвый, испарились
0
30
7 лет назад
0
Щяс там из за 2х знаков все сломается.
Именно в результате такого подхода растущие в геометрической прогрессии мощности железа постоянно не успевают за растущими требованиями софта. Существует антипаттерн преждевременной оптимизации, но это определённо не тот случай.
0
12
7 лет назад
0
Мне вот до сих пор интерестно, что там близзы наворотили в алгоритме такого, что юнит мертвый не при хп меньше 0.5, как при стандартном округлении, а при 0.405. Как такое вообще можно ухитриться сделать, а?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.