Добавлен Impertus
Есть триггер в Jass
function Trig_fire_Actions takes nothing returns nothing
local unit BET
local unit BEC
set BET = GetSpellTargetUnit()
set BEC = GetSpellAbilityUnit()
call TriggerSleepAction( ( DistanceBetweenPoints(GetUnitLoc(BEC), GetUnitLoc(BET)) / 1000.00 ) )
call SetUnitMoveSpeed( BET, 500.00 )
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 20
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call IssuePointOrderLocBJ( BET, "move", GetRandomLocInRect(RectFromCenterSizeBJ(GetUnitLoc(BET), 500.00, 500.00)) )
call UnitDamageTargetBJ( BEC, BET, 5, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL )
call TriggerSleepAction( 0.50 )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
call SetUnitMoveSpeed( BET, GetUnitDefaultMoveSpeed(BET) )
call IssueImmediateOrderBJ( BET, "stop" )
endfunction
На пустой карте любых размеров работает корректно, даже при выборе области всей карты, а не только вокруг юнита, количество войск на карте не влияет, рельеф карты не пробовал. Принадлежность цели не важна, хоть игрок, хоть комп, хоть нейтрал.
При использовании в точно таком же виде на основной карте вызывает дикие тормоза, вплоть до зависания игы на все время действия триггера, потом отлагивает, чем меньше периодичность - тем сильнее лаги (при >2 cек периода лагает заметно слабее, чем при 0.3).
В чем может быть проблема? Конфликт с другими триггерами (выключать по одному и тестить долго и нудно, больше 50 триггеров в основной карте)? Сложности в вычислении пути по рельефу (пробовал пересчитать пути, не помогло)?
При использовании в точно таком же виде на основной карте вызывает дикие тормоза, вплоть до зависания игы на все время действия триггера, потом отлагивает, чем меньше периодичность - тем сильнее лаги (при >2 cек периода лагает заметно слабее, чем при 0.3).
В чем может быть проблема? Конфликт с другими триггерами (выключать по одному и тестить долго и нудно, больше 50 триггеров в основной карте)? Сложности в вычислении пути по рельефу (пробовал пересчитать пути, не помогло)?
Принятый ответ
Не юзай TriggerSleepAction и будет тебе счастье. Особенно когда юзаешь глобальные переменные, вполне вероятно, что конфликт
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Impertus
И почему на пустой карте все в порядке тогда?
Может ли быть конфликт с Custom Value, так в списке реакций на урон 6-7 триггеров? Или с каким действием\условием может быть конфликт, чтобы сузить круг подозреваемых?
Кстати заметил, что в лагах приказ цели двигаться в рандомную точку не выполняется, она продолжает делать что делала, может там баг какой?
при >2 cек периода лагает заметно слабее, чем при 0.3 => это вообще жесть, так как ты юзаешь вейты с задержкой большей чем периодичность триггера...отсюда и вообще черт знает что может вылезти, даже фатал иногда.
"Impertus, оба, используй таймеры. Конфликт с каким то другим триггером. Попробуй заменить bj_forLoopAIndex на локалки.
IssuePointOrderLocBJ
Тут вообще утечка
DistanceBetweenPoints
на этой строчке целых 2"
блин оказывается куча систем основанных на параллельном выполнении триггерров не работает на самом деле
похоже 80% наработок кажутся рабочими лишь потому что я под лсд
пойду повешусь
Отредактирован Uber
из за этого предмет исчезает но его эффект остаётся
перед тем как писать что либо хотя бы посмотри как в вар3 реализованы триггеры
Отредактирован Impertus
По сути, переделал на таймеры, только вот с ними еще не работал, а гайдов по работе с таймерами нет вообще
Impertus:
И статьи есть xgm.guru/p/wc3/w3_special_programming