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
19
7 лет назад
0
Похожие вопросы:

ответ
низнаю какой спел у героя перезаряжается, на какой хватает маны, какие спелы у героя вообще есть, и в прочем на основе каких спелов они сделаны
да здравствует бд
FenikS1991:
Я знаю что это координаты умник.. пустые придирки не прокатят
я не только про координаты, я про всё
короче судя по всему ты пытаешься написать прогу которая бы думала вместо тебя
и это очень пичально
поэтому я просто оставлю это здесь
ответ
нет
no
ответ
FenikS1991, убери стоимость в 15 маны.
ответ
~8gabriel8:
mishanka122:
Если во всех картах одинаковый id, значит покопайся в хеше.
Это как, можно в личку?
Проблему решил, переделав стандартную способность, а не создавая нестандартную. Это почти что панацея от подобных случаев, когда id (ещё называют raw-code) способности меняется.
ответ
Не boolean а booexpr - это фильтр для группы, там никакие локалка не нужны.
Саму группу можно перебирать в цикле что правда дает шанс попасть в лимит операций и грохнуть поток.
Делать нужно примерно вот так :
function OnlyEnemyGroundAlive takes nothing returns boolean
    return GetUnitState( GetFilterUnit(), UNIT_STATE_LIFE )> 0.405 and IsUnitEnemy( GetFilterUnit(), bj_groupEnumOwningPlayer ) and IsUnitType( GetFilterUnit(), UNIT_TYPE_GROUND )
endfunction

function DamageEnemy takes nothing returns nothing
    call UnitDamageTarget( bj_lastReplacedUnit, GetEnumUnit(), 100.00, false, false, ATTACK_TYPE_NORMAL,  DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
endfunction

function Temp takes nothing returns nothing
    local group grp = CreateGroup( ) //создаём группу юнитов
    local real dx = 0.00   // координата x 
    local real dy = 0.00   // координата y
    
    set bj_groupEnumOwningPlayer == Player(0) // глобальная переменная чтобы передать данные в фильтр
    call GroupEnumUnitsInRange( grp, dx, dy, 512.00, Condition( function OnlyEnemyGroundAlive) )
    set bj_lastReplacedUnit = GetTriggerUnit( )// глобальная переменная чтобы передать данные в другую функцию.
    call ForGroup( grp, function DamageEnemy )
    
    call DestroyGroup( grp )
    
    set grp = null
endfunction
1 строчка бывает только у гуишников.

0
16
7 лет назад
0
Если нужно будет рассказать про идею конкретного куска, я постараюсь это сделать.
2
21
7 лет назад
Отредактирован Raised
2
GUI один раз - GUI навсегда, но для удобства переведу в код.
С каких это пор конверт с GUI - для удобства? Скрины давай.
0
26
7 лет назад
Отредактирован Hate
0
тупой конверт с гуи как раз отвратителен. скриншоты в студию
и вообще. такие вопросы решаются удалением действий до тех пор пока фатал не пропадет. так и выясняется где он был
0
16
7 лет назад
0
покажи txt от фатала, лучше - через pastebin
0
16
7 лет назад
0
Скриншоты:

Сейчас попробую поймать фатал...
0
22
7 лет назад
0
Naadir, меня сильно смущает Wait в первом скриншоте. Пробуй обойтись без него.
0
16
7 лет назад
0
DracoL1ch:
покажи txt от фатала, лучше - через pastebin
Что такое pastebin?
Нашёл .bin файл, возможно, он поможет? И дамп+txt файлы от последнего фатала.
0
16
7 лет назад
0
проверь настройки A01P, возможно, там кривые данные выше 3-го уровня
Принятый ответ
0
16
7 лет назад
Отредактирован Naadir
0
DracoL1ch:
проверь настройки A01P, возможно, там кривые данные выше 3-го уровня
A01P - способность, которая даётся одному персонажу, пока живы два других. Это просто +40 к урону из этих блоков:
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:
Там случаем не вручает абилку трупу? Обычно это заканчивается фаталом, а так же если шурудить абилки у трупов.
Вряд ли, хотя это может произойти из-за одновременного убийства, сейчас проверю.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.