GUI один раз - GUI навсегда, но для удобства переведу в код.

По причине своей некомпетентности в вопросах фатала не могу разобраться сам, почему и прошу помощи. Где-то в этом коде вызывается фатал. Про блок я уверен абсолютно, так как это способности, принадлежащие одному герою. Без него карта не фаталит, с ним - через некоторое время после начала игры. Закономерный вопрос: что же не так?
Код:
function Trig_ElementsHammer1_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A02C' ) ) then
        return false
    endif
    return true
endfunction

function Trig_ElementsHammer1_Func005Func002Func002C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 2) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_ElementsHammer1_Func005Func002C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 3) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_ElementsHammer1_Func005C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 4) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_ElementsHammer1_Actions takes nothing returns nothing
    call TriggerSleepAction( ( ( DistanceBetweenPoints(GetUnitLoc(GetSpellAbilityUnit()), GetUnitLoc(GetSpellTargetUnit())) / 1350.00 ) + 0.50 ) )
    call CreateNUnitsAtLoc( 1, 'e009', GetOwningPlayer(GetSpellAbilityUnit()), GetUnitLoc(GetSpellAbilityUnit()), bj_UNIT_FACING )
    call UnitApplyTimedLifeBJ( 3.00, 'BTLF', GetLastCreatedUnit() )
    if ( Trig_ElementsHammer1_Func005C() ) then
        call IssueTargetOrderBJ( GetLastCreatedUnit(), "cyclone", GetSpellTargetUnit() )
    else
        if ( Trig_ElementsHammer1_Func005Func002C() ) then
            call IssueTargetOrderBJ( GetLastCreatedUnit(), "chainlightning", GetSpellTargetUnit() )
        else
            if ( Trig_ElementsHammer1_Func005Func002Func002C() ) then
                call IssuePointOrderLocBJ( GetLastCreatedUnit(), "breathoffire", GetUnitLoc(GetSpellTargetUnit()) )
            else
                call IssuePointOrderLocBJ( GetLastCreatedUnit(), "carrionswarm", GetUnitLoc(GetSpellTargetUnit()) )
            endif
        endif
    endif
endfunction

//===========================================================================
function InitTrig_ElementsHammer1 takes nothing returns nothing
    set gg_trg_ElementsHammer1 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_ElementsHammer1, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_ElementsHammer1, Condition( function Trig_ElementsHammer1_Conditions ) )
    call TriggerAddAction( gg_trg_ElementsHammer1, function Trig_ElementsHammer1_Actions )
endfunction

function Trig_ThunderStrike1_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A02H' ) ) then
        return false
    endif
    return true
endfunction

function Trig_ThunderStrike1_Func004Func001Func001C takes nothing returns boolean
    if ( not ( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_ThinderStrikeCaster)) == true ) ) then
        return false
    endif
    if ( not ( IsUnitAliveBJ(GetEnumUnit()) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_ThunderStrike1_Func004Func001C takes nothing returns boolean
    if ( not Trig_ThunderStrike1_Func004Func001Func001C() ) then
        return false
    endif
    return true
endfunction

function Trig_ThunderStrike1_Func004A takes nothing returns nothing
    if ( Trig_ThunderStrike1_Func004Func001C() ) then
        set udg_ThunderStrikeInt = ( udg_ThunderStrikeInt + 1 )
    else
        call DoNothing(  )
    endif
endfunction

function Trig_ThunderStrike1_Actions takes nothing returns nothing
    set udg_ThunderStrikeInt = 0
    set udg_ThinderStrikeCaster = GetSpellAbilityUnit()
    call ForGroupBJ( GetUnitsInRangeOfLocAll(300.00, GetUnitLoc(udg_ThinderStrikeCaster)), function Trig_ThunderStrike1_Func004A )
    call StartTimerBJ( udg_ThunderStrikeTimer, false, 2.50 )
endfunction

//===========================================================================
function InitTrig_ThunderStrike1 takes nothing returns nothing
    set gg_trg_ThunderStrike1 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_ThunderStrike1, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_ThunderStrike1, Condition( function Trig_ThunderStrike1_Conditions ) )
    call TriggerAddAction( gg_trg_ThunderStrike1, function Trig_ThunderStrike1_Actions )
endfunction

function Trig_ThunderStrikeTimer1_Actions takes nothing returns nothing
    call AddSpecialEffectTargetUnitBJ( "chest", udg_ThinderStrikeCaster, "Abilities\\Spells\\Human\\Heal\\HealTarget.mdl" )
    call SetUnitLifePercentBJ( udg_ThinderStrikeCaster, ( GetUnitLifePercent(udg_ThinderStrikeCaster) + I2R(udg_ThunderStrikeInt) ) )
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
endfunction

//===========================================================================
function InitTrig_ThunderStrikeTimer1 takes nothing returns nothing
    set gg_trg_ThunderStrikeTimer1 = CreateTrigger(  )
    call TriggerRegisterTimerExpireEventBJ( gg_trg_ThunderStrikeTimer1, udg_ThunderStrikeTimer )
    call TriggerAddAction( gg_trg_ThunderStrikeTimer1, function Trig_ThunderStrikeTimer1_Actions )
endfunction

function Trig_ElementsAura1_Func001C takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A02I', GetAttackedUnitBJ()) >= 1 ) ) then
        return false
    endif
    if ( not ( GetRandomInt(1, 100) <= ( 5 * GetUnitAbilityLevelSwapped('A02I', GetAttackedUnitBJ()) ) ) ) then
        return false
    endif
    return true
endfunction

function Trig_ElementsAura1_Conditions takes nothing returns boolean
    if ( not Trig_ElementsAura1_Func001C() ) then
        return false
    endif
    return true
endfunction

function Trig_ElementsAura1_Func004Func002Func002C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 2) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_ElementsAura1_Func004Func002C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 3) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_ElementsAura1_Func004C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 4) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_ElementsAura1_Actions takes nothing returns nothing
    call CreateNUnitsAtLoc( 1, 'e009', GetOwningPlayer(GetAttackedUnitBJ()), GetUnitLoc(GetAttackedUnitBJ()), bj_UNIT_FACING )
    call UnitApplyTimedLifeBJ( 3.00, 'BTLF', GetLastCreatedUnit() )
    if ( Trig_ElementsAura1_Func004C() ) then
        call IssueTargetOrderBJ( GetLastCreatedUnit(), "cyclone", GetAttacker() )
    else
        if ( Trig_ElementsAura1_Func004Func002C() ) then
            call IssueTargetOrderBJ( GetLastCreatedUnit(), "chainlightning", GetAttacker() )
        else
            if ( Trig_ElementsAura1_Func004Func002Func002C() ) then
                call IssuePointOrderLocBJ( GetLastCreatedUnit(), "breathoffire", GetUnitLoc(GetAttacker()) )
            else
                call IssuePointOrderLocBJ( GetLastCreatedUnit(), "carrionswarm", GetUnitLoc(GetAttacker()) )
            endif
        endif
    endif
endfunction

//===========================================================================
function InitTrig_ElementsAura1 takes nothing returns nothing
    set gg_trg_ElementsAura1 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_ElementsAura1, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_ElementsAura1, Condition( function Trig_ElementsAura1_Conditions ) )
    call TriggerAddAction( gg_trg_ElementsAura1, function Trig_ElementsAura1_Actions )
endfunction
function Trig_RandomTotem1_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A02K' ) ) then
        return false
    endif
    return true
endfunction

function Trig_RandomTotem1_Func002Func001Func001Func001C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 2) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_RandomTotem1_Func002Func001Func001C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 3) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_RandomTotem1_Func002Func001C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 4) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_RandomTotem1_Func002C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 5) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_RandomTotem1_Actions takes nothing returns nothing
    if ( Trig_RandomTotem1_Func002C() ) then
        call CreateNUnitsAtLoc( 1, 'n00L', GetOwningPlayer(GetSpellAbilityUnit()), GetUnitLoc(GetSpellAbilityUnit()), bj_UNIT_FACING )
    else
        if ( Trig_RandomTotem1_Func002Func001C() ) then
            call CreateNUnitsAtLoc( 1, 'n00M', GetOwningPlayer(GetSpellAbilityUnit()), GetUnitLoc(GetSpellAbilityUnit()), bj_UNIT_FACING )
        else
            if ( Trig_RandomTotem1_Func002Func001Func001C() ) then
                call CreateNUnitsAtLoc( 1, 'n00N', GetOwningPlayer(GetSpellAbilityUnit()), GetUnitLoc(GetSpellAbilityUnit()), bj_UNIT_FACING )
            else
                if ( Trig_RandomTotem1_Func002Func001Func001Func001C() ) then
                    call CreateNUnitsAtLoc( 1, 'n00O', GetOwningPlayer(GetSpellAbilityUnit()), GetUnitLoc(GetSpellAbilityUnit()), bj_UNIT_FACING )
                else
                    call CreateNUnitsAtLoc( 1, 'n00P', GetOwningPlayer(GetSpellAbilityUnit()), GetUnitLoc(GetSpellAbilityUnit()), bj_UNIT_FACING )
                endif
            endif
        endif
    endif
    call UnitApplyTimedLifeBJ( 40.00, 'BFig', GetLastCreatedUnit() )
endfunction

//===========================================================================
function InitTrig_RandomTotem1 takes nothing returns nothing
    set gg_trg_RandomTotem1 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_RandomTotem1, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_RandomTotem1, Condition( function Trig_RandomTotem1_Conditions ) )
    call TriggerAddAction( gg_trg_RandomTotem1, function Trig_RandomTotem1_Actions )
endfunction

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

проверь настройки A01P, возможно, там кривые данные выше 3-го уровня

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
16
7 лет назад
0
ну у тебя в куче последней абилкой вызывалась она, стоит проверить корректность её полей в целом или убрать вообще её и попробовать снова
0
16
7 лет назад
0
DracoL1ch:
ну у тебя в куче последней абилкой вызывалась она, стоит проверить корректность её полей в целом или убрать вообще её и попробовать снова
Ты имеешь в виду, последней абилкой перед вылетом или она вызывалась другой абилкой?
Поля я проверил, всё чин-чином: отсутствует суффикс редактора и классификация (не герой, не предмет), переделано название. Остальные поля - без изменений.
0
16
7 лет назад
0
игра сканировала её данные, что-то еще об этом - тебе даже сам бог не ответит
ну либо движок решил пустить меня по ложному следу, как опытный маньяк
0
16
7 лет назад
Отредактирован Naadir
0
DracoL1ch:
игра сканировала её данные, что-то еще об этом - тебе даже сам бог не ответит
ну либо движок решил пустить меня по ложному следу, как опытный маньяк
А как понять по .txt что делала игра перед вылетом? Я хочу попробовать просмотреть весь файл на предмет странных совпадений, т.к. скан данных этой способности происходит, скорее всего, каждую секунду, как и прописано в одном из скриншотов.
0
16
7 лет назад
0
конкретно по этому типу фатала - никак. удали абилку целиком и проверь, будет ли фатал
0
21
7 лет назад
0
Весь код нет желания смотреть, триггерного повышения уровня способности у мертвой боевой единицы нигде не могло быть?
0
32
7 лет назад
0
Там случаем не вручает абилку трупу? Обычно это заканчивается фаталом, а так же если шурудить абилки у трупов.
0
16
7 лет назад
Отредактирован Naadir
0
ClotPh:
Весь код нет желания смотреть, триггерного повышения уровня способности у мертвой боевой единицы нигде не могло быть?
Нет, нигде.

quq_CCCP:
Там случаем не вручает абилку трупу? Обычно это заканчивается фаталом, а так же если шурудить абилки у трупов.
Вряд ли, хотя это может произойти из-за одновременного убийства, сейчас проверю.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.