Товарищи, прошу вас о помощи, у меня почему то отказали некоторые триггеры *до этого работали* а некоторые вообще работают косячно, кто бы мог помочь? Я над этой картой работаю уже где то год. Пожалуйста, СПАСИТЕ, ВЫТАЩИТЕ МЕНЯ ИЗ ЭТОЙ КЛЕТКИ!

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

Не уверен что на счет триггеров поможет исправить ошибку
Если триггеры работали без ошибок, а потом отказали по непонятной причине. То есть если не трогали эти триггеры и переменные, используемые в них, а просто добавили новые триггеры.
Как уже сказали выше, вероятная причина - принудительное завершение потока. На эту тему тоже есть статьи: про поток выполнения и лимит операций.
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
19
5 лет назад
2
Похожие вопросы:

ответ
А приказ остановиться не пробовали?
ответ
во первых
код после ретурна не выполняется и 2 ретурна писать нельзя
во вторых
ты статьи вообще читал?
в самых начальных статьях по джасс сказано что так писать нельзя
это сказано в самых начальных статьях про локальные переменные
в третьих это не стол заказов
ответ
короче, вот рабочий вариант
смотреть сюда
function Trig_HeroArcheressSkillAFirst_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'ASkA'
endfunction

function HeroArcheressSkillAFirst_SelectGroup takes nothing returns nothing
    if GetUnitAbilityLevel(GetEnumUnit(), 'B006') > 0 then
        call PauseUnit(GetEnumUnit(), true)
        call GroupAddUnit(HeroArcheressSkillAGroup, GetEnumUnit())
        call BJDebugMsg("Стан")
    endif
endfunction

function Trig_HeroArcheressSkillAFirst_Actions takes nothing returns nothing
    local group g = CreateGroup()
    
    set HeroArcheressSkillADammi = CreateUnit(GetOwningPlayer(GetTriggerUnit()), 'h003', GetSpellTargetX(), GetSpellTargetY(), bj_UNIT_FACING) //создаем дамми
    call UnitApplyTimedLife(HeroArcheressSkillADammi, 'BTLF', GetUnitAbilityLevel(GetTriggerUnit(), 'ASkA')) //таймер жизни для дамми
    
    call TriggerSleepAction (1.) //из-за ауры увеличил задержку
    //убрал утечки
    call GroupEnumUnitsInRange(g, GetSpellTargetX(), GetSpellTargetY(), 500.00, null)
    call ForGroup(g , function HeroArcheressSkillAFirst_SelectGroup )
    call DestroyGroup(g)
    set g = null
    //
    call TimerStart (HeroArcheressSkillATimer, 1., true, null) //запускаем таймер
endfunction

//===========================================================================
function InitTrig_HeroArcheressSkillABase takes nothing returns nothing
    set gg_trg_HeroArcheressSkillABase = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_HeroArcheressSkillABase, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_HeroArcheressSkillABase, Condition( function Trig_HeroArcheressSkillAFirst_Conditions ) )
    call TriggerAddAction( gg_trg_HeroArcheressSkillABase, function Trig_HeroArcheressSkillAFirst_Actions )
endfunction
globals
    integer HeroArcheressSkillACircle = 0
    timer HeroArcheressSkillATimer = CreateTimer() //таймер
endglobals

function HeroArcheressSkillAFirst_Damage takes nothing returns nothing
    if GetWidgetLife(HeroArcheressSkillADammi) > 0 then //проверяем, жив ли дамми юнит
        call BJDebugMsg("Урон" )
        call UnitDamageTarget(udg_HeroArcheress, GetEnumUnit(), 50, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
    else //иначе удаляем его из группы и снимаем паузу
        call PauseUnit(GetEnumUnit(), false)//PauseUnitBJ( false , GetEnumUnit() )
        call GroupRemoveUnit(HeroArcheressSkillAGroup, GetEnumUnit())
        call BJDebugMsg("Выход")
    endif
endfunction

function HeroArcheressSkillAFirst_Actions takes nothing returns nothing
    call ForGroup(HeroArcheressSkillAGroup, function HeroArcheressSkillAFirst_Damage)
endfunction

//===========================================================================
function InitTrig_HeroArcheressSkillAFirst takes nothing returns nothing
    set gg_trg_HeroArcheressSkillAFirst = CreateTrigger(  )
    call TriggerRegisterTimerExpireEvent(gg_trg_HeroArcheressSkillAFirst, HeroArcheressSkillATimer) //событие таймер истекает
    call TriggerAddAction( gg_trg_HeroArcheressSkillAFirst, function HeroArcheressSkillAFirst_Actions )
endfunction

2
21
5 лет назад
2
возможно, принудительное завершение потока
0
10
5 лет назад
0
ClotPh:
возможно, принудительное завершение потока
даже если так, как это исправить?
0
28
5 лет назад
0
Конкретнее опишите проблему. Какие именно триггеры не работают?
0
10
5 лет назад
0
Босс то включает огненные столбы и такаяющий урон, то нет. книжка спуаниться 2 раза из кобальда, звук у 2рого кобальда не воспроизводиться, и т.д. случилось это недавно, когда я начал разрабатывать диалог 1 и диалог 2, и в целом триггеры для башни магов.
PT153:
Конкретнее опишите проблему. Какие именно триггеры не работают?
но не сразу, а звук у кобальда не работает в триггере кобольды в корридоре. и они работали, работали, и бац, перестали. Я потом удалил пару триггеров, где то 4 переменные и перелопатил старые, чтобы сократить триггерный апокалипсис один хрен..
0
18
5 лет назад
Отредактирован Maniac_91
0
Taurenus, надеюсь, осталась копия карты ДО этих косяков? Тогда можно будет с ней поработать - сократить количество триггеров, удалить утечки памяти. Если не осталась, то придётся работать с такой версией.
Нужно объединить триггеры с одинаковыми событиями. Например, "Юнит атакован". Собрать все события атаки юнита, скопировать их в новый триггер, а в нём уже делать проверку: если атакованный юнит равен такому-то, то делать одни действия, иначе проверить, равен ли атакованный юнит другому. Периодические триггеры ("Каждые 1.0 секунд) объединить, убрав из условий триггера (Bloodkei = 1 или 2 или 3 и т. д .) в условия в действиях (If/Then/Else). Ещё можно (даже нужно) объединить триггеры с событием "Инициализация карты" и заменить это событие на "Время - прошло 0.01 с.", потому что не все действия возможно выполнить при инициализации карты. Чтобы не запутаться, можно оставлять комментарии (есть такое действие).
Насчёт утечек памяти - советую прочитать про это статью, да и вообще весь сборник статей про освоение JASS и дополнение к нему. После чего с новыми полученными знаниями оптимизировать карту.
0
10
5 лет назад
0
Maniac_91:
Taurenus, надеюсь, осталась копия карты ДО этих косяков? Тогда можно будет с ней поработать - сократить количество триггеров, удалить утечки памяти. Если не осталась, то придётся работать с такой версией.
Нужно объединить триггеры с одинаковыми событиями. Например, "Юнит атакован". Собрать все события атаки юнита, скопировать их в новый триггер, а в нём уже делать проверку: если атакованный юнит равен такому-то, то делать одни действия, иначе проверить, равен ли атакованный юнит другому. Периодические триггеры ("Каждые 1.0 секунд) объединить, убрав из условий триггера (Bloodkei = 1 или 2 или 3 и т. д .) в условия в действиях (If/Then/Else). Ещё можно (даже нужно) объединить триггеры с событием "Инициализация карты" и заменить это событие на "Время - прошло 0.01 с.", потому что не все действия возможно выполнить при инициализации карты. Чтобы не запутаться, можно оставлять комментарии (есть такое действие).
Насчёт утечек памяти - советую прочитать про это статью, да и вообще весь сборник статей про освоение JASS и дополнение к нему. После чего с новыми полученными знаниями оптимизировать карту.
Была такая, да.
Не уверен что на счет триггеров поможет исправить ошибку, но хотя может сработать. Потому что это не дало никаких результатов, ни переменные, ни триггеры, ни события, ни упрощения или удаления, ничего не помогало, хотя до этого все было чики пуки, а на счет джаза и сам понимаю, но это так сложно, и так триггеры почти всегда выглядят как если персонаж жив или нет то то то сделать а если в течении часа он сьел помидор то дайте ему способность а хп равно 467. А тут еще и программированная часть, придется писать в ручную(
Загруженные файлы
2
18
5 лет назад
Отредактирован Maniac_91
2
Не уверен что на счет триггеров поможет исправить ошибку
Если триггеры работали без ошибок, а потом отказали по непонятной причине. То есть если не трогали эти триггеры и переменные, используемые в них, а просто добавили новые триггеры.
Как уже сказали выше, вероятная причина - принудительное завершение потока. На эту тему тоже есть статьи: про поток выполнения и лимит операций.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.