Есть триггер в 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 триггеров в основной карте)? Сложности в вычислении пути по рельефу (пробовал пересчитать пути, не помогло)?

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

Не юзай TriggerSleepAction и будет тебе счастье. Особенно когда юзаешь глобальные переменные, вполне вероятно, что конфликт
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
5
9 лет назад
Отредактирован Uber
0
куда уж мне до тебя...ты хоть одну мапу сделал от начала до конца со сложными алгоритмами? я принял участие не в одном проекте как автор скриптов и помог профиксить многим их мапы а ты только херню пишешь. ты ответь на вопрос автора по существу лучше, чем комментить даже сам не зная что и о чем. отмороженая жаюа не одного гера украла у меня с хайва в свою вонючую доту. а ты покажи свои работы, я могу выложить свои и посмотрим кто разбирается а кто нет. и кто как что реализовывает, а то херню писать то все могут, а на деле 0
1 пункт от Uber: 1.1 (ненормативная лексика) Завуалированный мат
0
20
9 лет назад
0
pusha1999, на хайве у тебя только несколько тех же пафосных сообщений, какой у тебя ник тогда был?
0
28
9 лет назад
0
смотри карту и не неси бред
2 триггера выполняются одновременно
из за этого предмет исчезает но его эффект остаётся
перед тем как писать что либо хотя бы посмотри как в вар3 реализованы триггеры
Загруженные файлы
Этот комментарий удален
0
11
9 лет назад
Отредактирован Impertus
0
Ну вы и наваяли холивара :)
По сути, переделал на таймеры, только вот с ними еще не работал, а гайдов по работе с таймерами нет вообще
function New takes nothing returns nothing
    local unit BET = GetSpellTargetUnit()
    local unit BEC = GetSpellAbilityUnit()
    local integer BECount = 1
    local timer t = CreateTimer()
    call SetUnitMoveSpeed( BET, 500.00 )
    call TimerStart(t, 0.5, true, function New )
    loop
        exitwhen BECount > 20
        call TimerGetElapsed ( t )
        call IssuePointOrderLocBJ( BET, "move", GetRandomLocInRect(GetPlayableMapRect()) )
        call UnitDamageTargetBJ( BEC, BET, 5, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL )
        set BECount = BECount + 1
    endloop
    call SetUnitMoveSpeed( BET, GetUnitDefaultMoveSpeed(BET) )
    call IssueImmediateOrderBJ( BET, "stop" )
    set BET = null
    set BEC = null
    set BECount = 0
    call DestroyTimer ( t )
endfunction
Сейчас вот в таком виде, но не работает) Наносит весь урон сразу, и завершается тоже сразу. Как поправить? Каждый раз стартовать таймер (засунуть его в цикл) не помогает
0
37
9 лет назад
0
Я тут даже рисунок рисовал, как это происходит) xgm.guru/p/wc3/code-flow-and-data-access-thread
Impertus:
гайдов по работе с таймерами нет вообще
У нас 30% форума - гайды по работе с таймерами =\
И статьи есть xgm.guru/p/wc3/w3_special_programming
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.