• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

[JASS] Items lost upon death in Jungle Trolls Reborn

Level 11
Joined
Apr 11, 2006
Messages
338
Hello,

I've been keeping a huge little game alive for about 17 years (sic!) - it's Jungle Trolls Reborn.
Many people have helped to keep it running, and from time to time I just have to ask for help here when there is a problem that is beyond my capabilities.

This time, there is this issue with lost items that is pestering the game for years and I seem to be unable to solve it.

The problem is the following: when a hero troll dies, most of his items are dropped, except for certain item classes (Artifact and PowerUP, essencially weapons and armor) that are instead hidden with SetItemVisibleBJ and stored as an array variable. When he is revived, that variable is used to give him back the items - but at times it seems that one of the functions fails and part of the items are lost instead.

The trigger wasn't scripted by me and it was eventually converted to JASS, so it's rather unreadable. I'll do whatever I can to clarify.

This is the function that handles troll death:

JASS:
    // ==========   Hero Die  Special Action   ==========
    if ( Trig_Global_Unit_Die_Func014C() ) then
        if ( Trig_Global_Unit_Die_Func014Func001C() ) then
            set udg_ChainsawOn[udg_TempIntegerArray[3]] = false
            call UnitRemoveItemSwapped( udg_ChainSawItem[udg_TempIntegerArray[3]], udg_TempUnitArray[1] )
            call RemoveItem( udg_ChainSawItem[udg_TempIntegerArray[3]] )
            call UnitAddItemByIdSwapped( 'I05S', udg_TempUnitArray[1] )
            call SetItemUserData( GetLastCreatedItem(), udg_ChainSawValue[udg_TempIntegerArray[3]] )
        else
        endif
        set udg_N = 1
        loop
            exitwhen udg_N > 6
            if ( Trig_Global_Unit_Die_Func014Func002Func001C() ) then
                if ( Trig_Global_Unit_Die_Func014Func002Func001Func001C() ) then
                    set udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] = null
                    call UnitRemoveItemFromSlotSwapped( udg_N, udg_TempUnitArray[1] )
                else
                    call DisableTrigger( gg_trg_Global_Item_Drop )
                    set udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] = UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)
                    call UnitRemoveItemFromSlotSwapped( udg_N, udg_TempUnitArray[1] )
                    call SetItemVisibleBJ( false, udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] )
                    call EnableTrigger( gg_trg_Global_Item_Drop )
                endif
            else
                set udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] = null
            endif
            set udg_N = udg_N + 1
        endloop
        set udg_RightHand[udg_TempIntegerArray[3]] = 0
        set udg_LeftHand[udg_TempIntegerArray[3]] = 0
        set udg_SpellBook_Owned[udg_TempIntegerArray[3]] = 0
        set udg_DollOwned[udg_TempIntegerArray[3]] = 0
        set udg_ArmorOwned[udg_TempIntegerArray[3]] = 0
        set udg_BootsOwned[udg_TempIntegerArray[3]] = 0
        set udg_GauntletsOwned[udg_TempIntegerArray[3]] = 0
        set udg_MaskOwned[udg_TempIntegerArray[3]] = 0
        set udg_Headpiece_owned[udg_TempIntegerArray[3]] = 0
        set udg_Hero_Xp[udg_TempIntegerArray[3]] = GetHeroXP(udg_TempUnitArray[1])
        set udg_Hero_Agility[udg_TempIntegerArray[3]] = GetHeroStatBJ(bj_HEROSTAT_AGI, udg_TempUnitArray[1], false)
        set udg_Hero_Intelligence[udg_TempIntegerArray[3]] = GetHeroStatBJ(bj_HEROSTAT_INT, udg_TempUnitArray[1], false)
        set udg_Hero_Strength[udg_TempIntegerArray[3]] = GetHeroStatBJ(bj_HEROSTAT_STR, udg_TempUnitArray[1], false)
        set udg_DiseaseResist[udg_TempIntegerArray[3]] = 50
        set udg_run_energy[udg_TempIntegerArray[3]] = 10.00
        set udg_Loc = GetUnitLoc(udg_TempUnitArray[1])
        call CreateNUnitsAtLoc( 1, 'n000', udg_TempPlayerArray[1], udg_Loc, bj_UNIT_FACING )
        if ( Trig_Global_Unit_Die_Func014Func020C() ) then
            call DisplayTimedTextToForce( GetPlayersAll(), 6.00, ( ( "|c009966ffOld Troll:|r |c00ffff64" + GetPlayerName(udg_TempPlayerArray[1]) ) + " troll be dead!|r" ) )
            call DisplayTimedTextToPlayer( udg_TempPlayerArray[1], 0, 0, 6.00, "TRIGSTR_2343" )
            set udg_Hero_Deaths[udg_TempIntegerArray[3]] = 1
        else
            if ( Trig_Global_Unit_Die_Func014Func020Func001C() ) then
                call DisplayTimedTextToForce( GetPlayersAll(), 6.00, ( ( "|c009966ffOld Troll:|r |c00ffff64" + GetPlayerName(udg_TempPlayerArray[1]) ) + " troll be dead!|r" ) )
                call DisplayTimedTextToPlayer( udg_TempPlayerArray[1], 0, 0, 6.00, "TRIGSTR_1855" )
                set udg_Hero_Deaths[udg_TempIntegerArray[3]] = ( udg_Hero_Deaths[udg_TempIntegerArray[3]] + 1 )
                call UnitRemoveAbilityBJ( 'A084', GetLastCreatedUnit() )
                call UnitAddAbilityBJ( 'A01A', GetLastCreatedUnit() )
            else
            endif
        endif
        call RemoveLocation(udg_Loc)
        set udg_Troll_Spirit[udg_TempIntegerArray[3]] = GetLastCreatedUnit()
        call SelectUnitForPlayerSingle( GetLastCreatedUnit(), udg_TempPlayerArray[1] )
        set udg_Heat[udg_TempIntegerArray[3]] = 0
        call SetPlayerStateBJ( ConvertedPlayer(udg_TempIntegerArray[3]), PLAYER_STATE_RESOURCE_GOLD, 0 )
        call SetPlayerStateBJ( ConvertedPlayer(udg_TempIntegerArray[3]), PLAYER_STATE_RESOURCE_LUMBER, 0 )
        call UnitRemoveAbilityBJ( 'A0DQ', udg_Score_Memorial[udg_TempIntegerArray[3]] )
        call UnitAddAbilityBJ( 'A0DS', udg_Score_Memorial[udg_TempIntegerArray[3]] )
        if ( Trig_Global_Unit_Die_Func014Func029C() ) then
            call KillUnit( GetLastCreatedUnit() )
        else
        endif
        if ( Trig_Global_Unit_Die_Func014Func030C() ) then
            call UnitAddAbilityBJ( 'S004', udg_BoatLoaded[udg_TempIntegerArray[3]] )
        else
        endif
    else
    endif

These are the temp variables defined by the trigger:

JASS:
function Trig_Global_Unit_Die_Actions takes nothing returns nothing
    set udg_TempUnitArray[0] = GetKillingUnitBJ()
    set udg_TempUnitType[0] = GetUnitTypeId(GetKillingUnitBJ())
    set udg_TempIntegerArray[0] = GetUnitPointValueByType(udg_TempUnitType[0])
    set udg_TempPlayerArray[0] = GetOwningPlayer(udg_TempUnitArray[0])
    set udg_TempIntegerArray[2] = GetConvertedPlayerId(udg_TempPlayerArray[0])
    set udg_TempUnitArray[1] = GetTriggerUnit()
    set udg_TempUnitType[1] = GetUnitTypeId(GetTriggerUnit())
    set udg_TempIntegerArray[1] = GetUnitPointValueByType(udg_TempUnitType[1])
    set udg_TempPlayerArray[1] = GetOwningPlayer(udg_TempUnitArray[1])
    set udg_TempIntegerArray[3] = GetConvertedPlayerId(udg_TempPlayerArray[1])


List of functions referred in the snippet above:

  • Trig_Global_Unit_Die_Func014C - checks if that's a hero
  • Trig_Global_Unit_Die_Func014Func001C - this is a special case when the troll holds a chainsaw
  • Trig_Global_Unit_Die_Func014Func002Func001Func003C - checks if there are items that need to be preserved
  • Trig_Global_Unit_Die_Func014Func002Func001Func001C - this is a special case that checks if hardcore mode is enabled
  • Trig_Global_Unit_Die_Func014Func020C - checks if the hero dies for the first time, as there is a free revive
  • Trig_Global_Unit_Die_Func014Func020Func001C - when the troll died again
  • Trig_Global_Unit_Die_Func014Func030C - special case when dying troll is in a boat


And this is the trigger that handles the revive of the troll and uses the variables mentioned above to restore his items:

JASS:
function Trig_Troll_Revive_Func003C takes nothing returns boolean
    if ( ( GetUnitTypeId(GetSpellAbilityUnit()) == 'n000' ) ) then
        return true
    endif
    if ( ( GetUnitTypeId(GetSpellTargetUnit()) == 'n000' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Troll_Revive_Conditions takes nothing returns boolean
    if ( not Trig_Troll_Revive_Func003C() ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func001Func003001 takes nothing returns boolean
    return ( udg_Hero_Type[udg_A] == 'H001' )
endfunction

function Trig_Troll_Revive_Func004Func001Func004001 takes nothing returns boolean
    return ( udg_Hero_Type[udg_A] == 'H000' )
endfunction

function Trig_Troll_Revive_Func004Func001Func007Func001Func001C takes nothing returns boolean
    if ( not ( IsPlayerInForce(GetOwningPlayer(udg_Hero_Troll[udg_A]), udg_Team[3]) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func001Func007Func001C takes nothing returns boolean
    if ( not ( IsPlayerInForce(GetOwningPlayer(udg_Hero_Troll[udg_A]), udg_Team[2]) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func001Func007C takes nothing returns boolean
    if ( not ( IsPlayerInForce(GetOwningPlayer(udg_Hero_Troll[udg_A]), udg_Team[1]) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func001Func020C takes nothing returns boolean
    if ( not ( udg_Heart_Grizzly[udg_A] == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func001Func021Func002C takes nothing returns boolean
    if ( not ( GetUnitTypeId(udg_Hero_Troll[udg_A]) == 'H001' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func001Func021C takes nothing returns boolean
    if ( not ( udg_Heart_Snake[udg_A] == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func001Func022C takes nothing returns boolean
    if ( not ( udg_Heart_Werewolf[udg_A] == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func001Func026Func001C takes nothing returns boolean
    if ( not ( udg_EquipItem[( ( udg_N * 100 ) + udg_A )] != null ) ) then
        return false
    endif
    return true
endfunction

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

function Trig_Troll_Revive_Func004Func004C takes nothing returns boolean
    if ( ( GetSpellAbilityId() == 'A008' ) ) then
        return true
    endif
    if ( ( GetSpellAbilityId() == 'A08Z' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Troll_Revive_Func004Func005001 takes nothing returns boolean
    return ( udg_Hero_Type[udg_A] == 'H001' )
endfunction

function Trig_Troll_Revive_Func004Func006001 takes nothing returns boolean
    return ( udg_Hero_Type[udg_A] == 'H000' )
endfunction

function Trig_Troll_Revive_Func004Func011Func001Func001C takes nothing returns boolean
    if ( not ( IsPlayerInForce(GetOwningPlayer(udg_Hero_Troll[udg_A]), udg_Team[3]) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func011Func001C takes nothing returns boolean
    if ( not ( IsPlayerInForce(GetOwningPlayer(udg_Hero_Troll[udg_A]), udg_Team[2]) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func011C takes nothing returns boolean
    if ( not ( IsPlayerInForce(GetOwningPlayer(udg_Hero_Troll[udg_A]), udg_Team[1]) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func024C takes nothing returns boolean
    if ( not ( udg_Heart_Grizzly[udg_A] == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func025Func002C takes nothing returns boolean
    if ( not ( GetUnitTypeId(udg_Hero_Troll[udg_A]) == 'H001' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func025C takes nothing returns boolean
    if ( not ( udg_Heart_Snake[udg_A] == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004Func026C takes nothing returns boolean
    if ( not ( udg_Heart_Werewolf[udg_A] == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Func004C takes nothing returns boolean
    if ( not Trig_Troll_Revive_Func004Func004C() ) then
        return false
    endif
    return true
endfunction

function Trig_Troll_Revive_Actions takes nothing returns nothing
    local unit u
    local integer id
    if ( Trig_Troll_Revive_Func004C() ) then
        set udg_A = GetConvertedPlayerId(GetOwningPlayer(GetSpellTargetUnit()))
        call UnitRemoveItemFromSlotSwapped( 1, udg_Troll_Spirit[udg_A] )
        if ( Trig_Troll_Revive_Func004Func005001() ) then
            call SetPlayerStateBJ( ConvertedPlayer(udg_A), PLAYER_STATE_RESOURCE_GOLD, 250 )
        else
            call SetPlayerStateBJ( ConvertedPlayer(udg_A), PLAYER_STATE_RESOURCE_GOLD, 200 )
        endif
        if ( Trig_Troll_Revive_Func004Func006001() ) then
            call SetPlayerStateBJ( ConvertedPlayer(udg_A), PLAYER_STATE_RESOURCE_LUMBER, 125 )
        else
            call SetPlayerStateBJ( ConvertedPlayer(udg_A), PLAYER_STATE_RESOURCE_LUMBER, 100 )
        endif
        call ReplaceUnitBJ( udg_Troll_Spirit[udg_A], udg_Hero_Type[udg_A], bj_UNIT_STATE_METHOD_MAXIMUM )
        set udg_Hero_Troll[udg_A] = GetLastReplacedUnitBJ()
        set u = udg_Hero_Troll[udg_A]
        set id = 1+GetPlayerId(GetOwningPlayer(GetSpellTargetUnit()))
        if ( Trig_Troll_Revive_Func004Func011C() ) then
            set udg_Loc = GetUnitLoc(udg_Totem[1])
        else
            if ( Trig_Troll_Revive_Func004Func011Func001C() ) then
                set udg_Loc = GetUnitLoc(udg_Totem[2])
            else
                if ( Trig_Troll_Revive_Func004Func011Func001Func001C() ) then
                    set udg_Loc = GetUnitLoc(udg_Totem[3])
                else
                    set udg_Loc = GetUnitLoc(udg_Hero_Troll[udg_A])
                endif
            endif
        endif
        call SetUnitPositionLoc( udg_Hero_Troll[udg_A], udg_Loc )
        call AddSpellEffectByIdLoc( 'AHhb', EFFECT_TYPE_TARGET, udg_Loc )
        set udg_Revive[udg_A] = GetLastCreatedEffectBJ()
        call RemoveLocation(udg_Loc)
        call AddHeroXPSwapped( udg_Hero_Xp[udg_A], udg_Hero_Troll[udg_A], false )
        call SetHeroStr( udg_Hero_Troll[udg_A], udg_Hero_Strength[udg_A], true )
        call SetHeroInt( udg_Hero_Troll[udg_A], udg_Hero_Intelligence[udg_A], true )
        call SetHeroAgi( udg_Hero_Troll[udg_A], udg_Hero_Agility[udg_A], true )
        call SetUnitAbilityLevelSwapped( 'ACba', udg_Hero_Troll[udg_A], udg_GameDiff )
        call SetUnitAbilityLevelSwapped( 'ACnr', udg_Hero_Troll[udg_A], udg_GameDiff )
        call SelectUnitForPlayerSingle( udg_Hero_Troll[udg_A], ConvertedPlayer(udg_A) )
        call IssueImmediateOrder( udg_Hero_Troll[udg_A], "replenishon" )
        if ( Trig_Troll_Revive_Func004Func024C() ) then
            set udg_Heat[udg_A] = ( udg_Heat[udg_A] + 10 )
        else
        endif
        if ( Trig_Troll_Revive_Func004Func025C() ) then
            set udg_Crit_block[udg_A] = ( udg_Crit_block[udg_A] + 1 )
            if ( Trig_Troll_Revive_Func004Func025Func002C() ) then
                call SetUnitAbilityLevelSwapped( 'A07Z', udg_Hero_Troll[udg_A], 2 )
            else
                call SetUnitAbilityLevelSwapped( 'Arpb', udg_Hero_Troll[udg_A], 2 )
            endif
        else
        endif
        if ( Trig_Troll_Revive_Func004Func026C() ) then
            set udg_Crit_power[udg_A] = ( udg_Crit_power[udg_A] + 1 )
        else
        endif
        call DisplayTimedTextToPlayer( ConvertedPlayer(udg_A), 0, 0, 6.00, "TRIGSTR_1453" )
        call UnitRemoveAbilityBJ( 'A0DS', udg_Score_Memorial[udg_A] )
        call UnitAddAbilityBJ( 'A0DQ', udg_Score_Memorial[udg_A] )
        set id = 1+GetPlayerId(GetOwningPlayer(GetSpellTargetUnit()))
        set udg_N = 1
        loop
            exitwhen udg_N > 6
            call DisableTrigger( gg_trg_Global_Item_Drop )
            call SetItemVisibleBJ( true, udg_EquipItem[( ( udg_N * 100 ) + udg_A )] )
            call UnitAddItemSwapped( udg_EquipItem[( ( udg_N * 100 ) + udg_A )], udg_Hero_Troll[udg_A] )
            call EnableTrigger( gg_trg_Global_Item_Drop )
            set udg_N = udg_N + 1
        endloop
        call TriggerSleepAction( 1.00 )
        call DestroyEffectBJ( udg_Revive[udg_A] )
    else
        if ( Trig_Troll_Revive_Func004Func001C() ) then
            set udg_A = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
            call UnitRemoveItemFromSlotSwapped( 1, udg_Troll_Spirit[udg_A] )
            if ( Trig_Troll_Revive_Func004Func001Func003001() ) then
                call SetPlayerStateBJ( ConvertedPlayer(udg_A), PLAYER_STATE_RESOURCE_GOLD, 250 )
            else
                call SetPlayerStateBJ( ConvertedPlayer(udg_A), PLAYER_STATE_RESOURCE_GOLD, 200 )
            endif
            if ( Trig_Troll_Revive_Func004Func001Func004001() ) then
                call SetPlayerStateBJ( ConvertedPlayer(udg_A), PLAYER_STATE_RESOURCE_LUMBER, 125 )
            else
                call SetPlayerStateBJ( ConvertedPlayer(udg_A), PLAYER_STATE_RESOURCE_LUMBER, 100 )
            endif
            call ReplaceUnitBJ( udg_Troll_Spirit[udg_A], udg_Hero_Type[udg_A], bj_UNIT_STATE_METHOD_MAXIMUM )
            set udg_Hero_Troll[udg_A] = GetLastReplacedUnitBJ()
            if ( Trig_Troll_Revive_Func004Func001Func007C() ) then
                set udg_Loc = GetUnitLoc(udg_Totem[1])
            else
                if ( Trig_Troll_Revive_Func004Func001Func007Func001C() ) then
                    set udg_Loc = GetUnitLoc(udg_Totem[2])
                else
                    if ( Trig_Troll_Revive_Func004Func001Func007Func001Func001C() ) then
                        set udg_Loc = GetUnitLoc(udg_Totem[3])
                    else
                        set udg_Loc = GetUnitLoc(udg_Hero_Troll[udg_A])
                    endif
                endif
            endif
            call SetUnitPositionLoc( udg_Hero_Troll[udg_A], udg_Loc )
            call AddSpellEffectByIdLoc( 'AHhb', EFFECT_TYPE_TARGET, udg_Loc )
            set udg_Revive[udg_A] = GetLastCreatedEffectBJ()
            call RemoveLocation(udg_Loc)
            call AddHeroXPSwapped( udg_Hero_Xp[udg_A], udg_Hero_Troll[udg_A], false )
            call SetHeroStr( udg_Hero_Troll[udg_A], udg_Hero_Strength[udg_A], true )
            call SetHeroInt( udg_Hero_Troll[udg_A], udg_Hero_Intelligence[udg_A], true )
            call SetHeroAgi( udg_Hero_Troll[udg_A], udg_Hero_Agility[udg_A], true )
            call SetUnitAbilityLevelSwapped( 'ACba', udg_Hero_Troll[udg_A], udg_GameDiff )
            call SetUnitAbilityLevelSwapped( 'ACnr', udg_Hero_Troll[udg_A], udg_GameDiff )
            call SelectUnitForPlayerSingle( udg_Hero_Troll[udg_A], ConvertedPlayer(udg_A) )
            call IssueImmediateOrder( udg_Hero_Troll[udg_A], "replenishon" )
            if ( Trig_Troll_Revive_Func004Func001Func020C() ) then
                set udg_Heat[udg_A] = ( udg_Heat[udg_A] + 10 )
            else
            endif
            if ( Trig_Troll_Revive_Func004Func001Func021C() ) then
                set udg_Crit_block[udg_A] = ( udg_Crit_block[udg_A] + 1 )
                if ( Trig_Troll_Revive_Func004Func001Func021Func002C() ) then
                    call SetUnitAbilityLevelSwapped( 'A07Z', udg_Hero_Troll[udg_A], 2 )
                else
                    call SetUnitAbilityLevelSwapped( 'Arpb', udg_Hero_Troll[udg_A], 2 )
                endif
            else
            endif
            if ( Trig_Troll_Revive_Func004Func001Func022C() ) then
                set udg_Crit_power[udg_A] = ( udg_Crit_power[udg_A] + 1 )
            else
            endif
            call DisplayTimedTextToPlayer( ConvertedPlayer(udg_A), 0, 0, 6.00, "TRIGSTR_1453" )
            call UnitRemoveAbilityBJ( 'A0DS', udg_Score_Memorial[udg_A] )
            call UnitAddAbilityBJ( 'A0DQ', udg_Score_Memorial[udg_A] )
            set udg_N = 1
            loop
                exitwhen udg_N > 6
                if ( Trig_Troll_Revive_Func004Func001Func026Func001C() ) then
                    call DisableTrigger( gg_trg_Global_Item_Drop )
                    call SetItemVisibleBJ( true, udg_EquipItem[( ( udg_N * 100 ) + udg_A )] )
                    call UnitAddItemSwapped( udg_EquipItem[( ( udg_N * 100 ) + udg_A )], udg_Hero_Troll[udg_A] )
                    call EnableTrigger( gg_trg_Global_Item_Drop )
                else
                endif
                set udg_N = udg_N + 1
            endloop
            call TriggerSleepAction( 1.00 )
            call DestroyEffectBJ( udg_Revive[udg_A] )
        else
        endif
    endif
endfunction

//===========================================================================
function InitTrig_Troll_Revive takes nothing returns nothing
    set gg_trg_Troll_Revive = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Troll_Revive, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Troll_Revive, Condition( function Trig_Troll_Revive_Conditions ) )
    call TriggerAddAction( gg_trg_Troll_Revive, function Trig_Troll_Revive_Actions )
endfunction


More clarifications:

  • n000 is a Troll Soul unit.
  • A084, A008 and A08Z are abilities that can revive a troll soul and replace it with a Troll.
  • H000, H001, H002, H003 are troll classes - some of them have specific initial values of Gold and Lumber that are used to track Food and Heat.
  • Score_Memorial is used to show "profession" expertise and current dead/alive status.
 
Last edited:
Level 12
Joined
Jan 10, 2023
Messages
191
What is Trig_Global_Unit_Die_Func014Func002Func001C?
Other than Blizzard generated garbage that I intend to clean up, that's a good question.

@gadina_prokleta we are missing some parts here:
JASS:
function Trig_Global_Unit_Die_Actions takes nothing returns nothing
    set udg_TempUnitArray[0] = GetKillingUnitBJ()
    set udg_TempUnitType[0] = GetUnitTypeId(GetKillingUnitBJ())
    set udg_TempIntegerArray[0] = GetUnitPointValueByType(udg_TempUnitType[0])
    set udg_TempPlayerArray[0] = GetOwningPlayer(udg_TempUnitArray[0])
    set udg_TempIntegerArray[2] = GetConvertedPlayerId(udg_TempPlayerArray[0])
    set udg_TempUnitArray[1] = GetTriggerUnit()
    set udg_TempUnitType[1] = GetUnitTypeId(GetTriggerUnit())
    set udg_TempIntegerArray[1] = GetUnitPointValueByType(udg_TempUnitType[1])
    set udg_TempPlayerArray[1] = GetOwningPlayer(udg_TempUnitArray[1])
    set udg_TempIntegerArray[3] = GetConvertedPlayerId(udg_TempPlayerArray[1])
// endfunction? or is there more?
We seem to be missing more, like the function [db]east mentioned and the function this IF/THEN belongs to:
JASS:
    // ==========   Hero Die  Special Action   ==========
    if ( Trig_Global_Unit_Die_Func014C() ) then
        if ( Trig_Global_Unit_Die_Func014Func001C() ) then
            set udg_ChainsawOn[udg_TempIntegerArray[3]] = false
            call UnitRemoveItemSwapped( udg_ChainSawItem[udg_TempIntegerArray[3]], udg_TempUnitArray[1] )
            call RemoveItem( udg_ChainSawItem[udg_TempIntegerArray[3]] )
            call UnitAddItemByIdSwapped( 'I05S', udg_TempUnitArray[1] )
            call SetItemUserData( GetLastCreatedItem(), udg_ChainSawValue[udg_TempIntegerArray[3]] )
        else
        endif
        set udg_N = 1
        loop
            exitwhen udg_N > 6
            if ( Trig_Global_Unit_Die_Func014Func002Func001C() ) then
                if ( Trig_Global_Unit_Die_Func014Func002Func001Func001C() ) then
                    set udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] = null
                    call UnitRemoveItemFromSlotSwapped( udg_N, udg_TempUnitArray[1] )
                else
                    call DisableTrigger( gg_trg_Global_Item_Drop )
                    set udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] = UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)
                    call UnitRemoveItemFromSlotSwapped( udg_N, udg_TempUnitArray[1] )
                    call SetItemVisibleBJ( false, udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] )
                    call EnableTrigger( gg_trg_Global_Item_Drop )
                endif
            else
                set udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] = null
            endif
            set udg_N = udg_N + 1
        endloop
        set udg_RightHand[udg_TempIntegerArray[3]] = 0
        set udg_LeftHand[udg_TempIntegerArray[3]] = 0
        set udg_SpellBook_Owned[udg_TempIntegerArray[3]] = 0
        set udg_DollOwned[udg_TempIntegerArray[3]] = 0
        set udg_ArmorOwned[udg_TempIntegerArray[3]] = 0
        set udg_BootsOwned[udg_TempIntegerArray[3]] = 0
        set udg_GauntletsOwned[udg_TempIntegerArray[3]] = 0
        set udg_MaskOwned[udg_TempIntegerArray[3]] = 0
        set udg_Headpiece_owned[udg_TempIntegerArray[3]] = 0
        set udg_Hero_Xp[udg_TempIntegerArray[3]] = GetHeroXP(udg_TempUnitArray[1])
        set udg_Hero_Agility[udg_TempIntegerArray[3]] = GetHeroStatBJ(bj_HEROSTAT_AGI, udg_TempUnitArray[1], false)
        set udg_Hero_Intelligence[udg_TempIntegerArray[3]] = GetHeroStatBJ(bj_HEROSTAT_INT, udg_TempUnitArray[1], false)
        set udg_Hero_Strength[udg_TempIntegerArray[3]] = GetHeroStatBJ(bj_HEROSTAT_STR, udg_TempUnitArray[1], false)
        set udg_DiseaseResist[udg_TempIntegerArray[3]] = 50
        set udg_run_energy[udg_TempIntegerArray[3]] = 10.00
        set udg_Loc = GetUnitLoc(udg_TempUnitArray[1])
        call CreateNUnitsAtLoc( 1, 'n000', udg_TempPlayerArray[1], udg_Loc, bj_UNIT_FACING )
        if ( Trig_Global_Unit_Die_Func014Func020C() ) then
            call DisplayTimedTextToForce( GetPlayersAll(), 6.00, ( ( "|c009966ffOld Troll:|r |c00ffff64" + GetPlayerName(udg_TempPlayerArray[1]) ) + " troll be dead!|r" ) )
            call DisplayTimedTextToPlayer( udg_TempPlayerArray[1], 0, 0, 6.00, "TRIGSTR_2343" )
            set udg_Hero_Deaths[udg_TempIntegerArray[3]] = 1
        else
            if ( Trig_Global_Unit_Die_Func014Func020Func001C() ) then
                call DisplayTimedTextToForce( GetPlayersAll(), 6.00, ( ( "|c009966ffOld Troll:|r |c00ffff64" + GetPlayerName(udg_TempPlayerArray[1]) ) + " troll be dead!|r" ) )
                call DisplayTimedTextToPlayer( udg_TempPlayerArray[1], 0, 0, 6.00, "TRIGSTR_1855" )
                set udg_Hero_Deaths[udg_TempIntegerArray[3]] = ( udg_Hero_Deaths[udg_TempIntegerArray[3]] + 1 )
                call UnitRemoveAbilityBJ( 'A084', GetLastCreatedUnit() )
                call UnitAddAbilityBJ( 'A01A', GetLastCreatedUnit() )
            else
            endif
        endif
        call RemoveLocation(udg_Loc)
        set udg_Troll_Spirit[udg_TempIntegerArray[3]] = GetLastCreatedUnit()
        call SelectUnitForPlayerSingle( GetLastCreatedUnit(), udg_TempPlayerArray[1] )
        set udg_Heat[udg_TempIntegerArray[3]] = 0
        call SetPlayerStateBJ( ConvertedPlayer(udg_TempIntegerArray[3]), PLAYER_STATE_RESOURCE_GOLD, 0 )
        call SetPlayerStateBJ( ConvertedPlayer(udg_TempIntegerArray[3]), PLAYER_STATE_RESOURCE_LUMBER, 0 )
        call UnitRemoveAbilityBJ( 'A0DQ', udg_Score_Memorial[udg_TempIntegerArray[3]] )
        call UnitAddAbilityBJ( 'A0DS', udg_Score_Memorial[udg_TempIntegerArray[3]] )
        if ( Trig_Global_Unit_Die_Func014Func029C() ) then
            call KillUnit( GetLastCreatedUnit() )
        else
        endif
        if ( Trig_Global_Unit_Die_Func014Func030C() ) then
            call UnitAddAbilityBJ( 'S004', udg_BoatLoaded[udg_TempIntegerArray[3]] )
        else
        endif
    else
    endif
I can understand if this is sensitive information to you, and I'm going to take a look and see if I can find the solution without this information, but I'm afraid I'm just going to be coming right back to you with a list of functions I need to know.

At the very least I was going to clean up the GUI converted garbage I disrespected at the top of my post. I'd really like to do that instead of leaving you with Trig_Garbage_Ugly_Names_1331_343_125_027_008P.[/spoiler][/spoiler]

EDIT: @[db]east you are un-@-able to me (I wonder if it is because your name starts with a bracket '['... ? ) I'm guessing if I had your user # I could just type it in myself, but I spent like 5 minutes trying to tag you only to fail... XD
 
Last edited:
Level 11
Joined
Apr 11, 2006
Messages
338
Ah, Trig_Global_Unit_Die_Func014Func002Func001C just refers to Trig_Global_Unit_Die_Func014Func002Func001Func003C:
JASS:
function Trig_Global_Unit_Die_Func014Func002Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func014Func002Func001Func003C() ) then
        return false
    endif
    return true
endfunction

Gosh, no, it isn't sensitive and I'm thankful you are taking the time to help. I just tried to filter a bit of the junk code so it would be easier for you.
This is the whole trigger:

JASS:
function Trig_Global_Unit_Die_Conditions takes nothing returns boolean
    if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_SUMMONED) == false ) ) then
        return false
    endif
    if ( not ( IsUnitIllusionBJ(GetTriggerUnit()) == false ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func001Func001C takes nothing returns boolean
    if ( not ( IsUnitInForce(udg_TempUnitArray[0], udg_Team[udg_N]) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func002C takes nothing returns boolean
    if ( ( udg_TempUnitType[0] == 'h01I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'h01K' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'h01M' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'h01L' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func004Func004Func004C takes nothing returns boolean
    if ( ( udg_TempUnitType[0] == 'n007' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'nskg' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n017' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01J' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01M' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02B' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n008' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02L' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n002' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02R' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02G' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00O' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00E' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00H' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n001' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n016' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02N' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00C' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n014' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02M' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n004' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01A' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02P' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00D' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00F' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02C' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n009' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02K' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02F' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n003' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02Q' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'h02H' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'h01O' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'njg1' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'nwen' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'nwlg' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'nwwg' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'ntrg' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func004Func004C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func004Func004Func004C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func004Func005C takes nothing returns boolean
    if ( ( udg_TempUnitType[0] == 'h00V' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'h011' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01N' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00G' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00S' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func004C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func004Func005C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001C takes nothing returns boolean
    if ( not ( udg_TempUnitType[0] == 'n00S' ) ) then
        return false
    endif
    if ( not ( udg_TempPlayerArray[0] != Player(PLAYER_NEUTRAL_AGGRESSIVE) ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func002C takes nothing returns boolean
    if ( ( udg_TempUnitType[0] == 'ndwm' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00G' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'nskk' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func002C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func003C takes nothing returns boolean
    if ( ( IsUnitType(udg_TempUnitArray[0], UNIT_TYPE_HERO) == true ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002Func005C takes nothing returns boolean
    if ( not ( udg_TempUnitType[0] == 'H003' ) ) then
        return false
    endif
    if ( not ( udg_TempIntegerArray[1] > 10 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func002C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func012Func002Func004Func002Func003C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004Func003C takes nothing returns boolean
    if ( ( udg_TempUnitType[0] == 'n00Y' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01R' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01Q' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01P' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01S' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00V' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01H' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01U' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01T' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00U' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00X' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n015' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func012Func002Func004C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func012Func002Func004Func003C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func012Func002Func005C takes nothing returns boolean
    if ( ( udg_TempUnitType[0] == 'n024' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02T' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n020' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'u000' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01X' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n00I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01W' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n022' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n023' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n029' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n021' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n026' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01Z' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n01V' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'n02S' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[0] == 'h01P' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func012Func002C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func012Func002Func005C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func012C takes nothing returns boolean
    if ( not ( HasUnitAbility(GetTriggerUnit(), 'A05G') == false ) ) then
        return false
    endif
    if ( not ( GetPlayerController(udg_TempPlayerArray[0]) == MAP_CONTROL_USER ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func014Func001C takes nothing returns boolean
    if ( not ( udg_ChainsawOn[udg_TempIntegerArray[3]] == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func014Func002Func001Func001C takes nothing returns boolean
    if ( not ( udg_Hardcore == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func014Func002Func001Func003C takes nothing returns boolean
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_POWERUP ) ) then
        return true
    endif
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_ARTIFACT ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func014Func002Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func014Func002Func001Func003C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func014Func020Func001C takes nothing returns boolean
    if ( not ( udg_Hero_Deaths[udg_TempIntegerArray[3]] > 0 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func014Func020C takes nothing returns boolean
    if ( not ( udg_Hero_Deaths[udg_TempIntegerArray[3]] == 0 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func014Func029C takes nothing returns boolean
    if ( not ( GetPlayerController(udg_TempPlayerArray[1]) == MAP_CONTROL_COMPUTER ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func014Func030C takes nothing returns boolean
    if ( not ( udg_Boat[udg_TempIntegerArray[3]] == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func014C takes nothing returns boolean
    if ( not ( IsUnitType(udg_TempUnitArray[1], UNIT_TYPE_HERO) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func016Func007Func001C takes nothing returns boolean
    if ( not ( udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] != null ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func016C takes nothing returns boolean
    if ( not ( udg_TempUnitType[1] == 'n000' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func001Func002Func001Func002C takes nothing returns boolean
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_POWERUP ) ) then
        return true
    endif
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_ARTIFACT ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func001Func002Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func001Func002Func001Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func001Func003C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'n026' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01Z' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01X' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'u000' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func001Func003C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func002C takes nothing returns boolean
    if ( not ( GetRandomInt(1, 4) <= udg_Job_PuppetMaster_Lvl[udg_TempIntegerArray[3]] ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func001Func001C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'n00C' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n014' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02M' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func001Func003Func001Func002C takes nothing returns boolean
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_POWERUP ) ) then
        return true
    endif
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_ARTIFACT ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func001Func003Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func001Func003Func001Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func001Func001C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func001Func001C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'n00Y' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01R' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01Q' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01P' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01S' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00V' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01H' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01U' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01T' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00T' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00W' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n013' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n019' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func001Func003Func001Func002C takes nothing returns boolean
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_POWERUP ) ) then
        return true
    endif
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_ARTIFACT ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func001Func003Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func002Func001Func003Func001Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func001Func004Func003C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'n01H' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01U' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01T' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00T' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00W' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n013' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n019' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func001Func004C takes nothing returns boolean
    if ( not ( udg_Hawk[udg_TempIntegerArray[3]] == true ) ) then
        return false
    endif
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func002Func001Func004Func003C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func002Func001Func001C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func001Func001C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'n01K' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01J' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01M' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'njg1' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'u001' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func001Func003Func001Func002C takes nothing returns boolean
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_POWERUP ) ) then
        return true
    endif
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_ARTIFACT ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func001Func003Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func001Func003Func001Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func001Func001C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func002Func001Func002C takes nothing returns boolean
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_POWERUP ) ) then
        return true
    endif
    if ( ( GetItemType(UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)) == ITEM_TYPE_ARTIFACT ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func002Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func002Func001Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func003Func001Func004C takes nothing returns boolean
    if ( not ( udg_TempUnitType[1] == 'h01H' ) ) then
        return false
    endif
    if ( not ( GetUnitStateSwap(UNIT_STATE_MANA, GetDyingUnit()) == 1.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func003Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func003Func001Func004C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func003C takes nothing returns boolean
    if ( not ( udg_TempUnitType[1] == 'h02L' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func006C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'h016' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h015' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00K' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00Z' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00Y' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00G' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h005' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h02J' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00H' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h02Y' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01K' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01M' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01L' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00L' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h021' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h022' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00O' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h02G' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h006' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h024' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00C' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h008' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h023' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h013' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01Z' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00J' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func006C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func002C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'h00B' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00A' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01X' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00X' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h012' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h011' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00V' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'o000' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n011' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00P' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00Q' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'ndwm' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00N' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00G' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'nskk' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00Z' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n025' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'opeo' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00S' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00R' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func003C takes nothing returns boolean
    if ( not ( udg_TempUnitType[1] == 'n00S' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func003C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'n02B' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02D' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02E' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02F' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02G' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02J' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02O' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'nwlg' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02L' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'nwwg' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02Q' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02R' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'nwen' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01K' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01J' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01M' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'njg1' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h02U' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h032' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h02V' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h033' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00O' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00H' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'u001' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01O' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func002C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func003C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002Func003C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'H003' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'H002' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'H000' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'H001' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n002' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02A' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n005' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n003' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n008' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n006' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00E' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n004' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01A' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02P' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01C' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00D' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00F' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00J' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h019' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00Y' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01R' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01Q' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01P' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01S' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00V' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01H' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00T' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01U' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00W' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01T' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n013' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n019' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h02H' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01Q' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func002C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func002Func003C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002Func004C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'n007' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'nskg' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n017' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01B' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01D' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n001' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n016' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02N' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'ntrg' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02K' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n009' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02C' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00A' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00B' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n012' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'nska' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01Y' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n018' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h02I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00C' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n014' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02M' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003Func002C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func002Func004C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func003Func003C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'n01L' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01E' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01C' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n010' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01G' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00M' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h036' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h028' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h029' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h02A' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h02B' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h02C' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h02D' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00W' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01J' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01N' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01W' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h025' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h026' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00E' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00S' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00T' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h00U' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01O' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01G' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n027' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018Func003C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func003Func003C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Func018Func004C takes nothing returns boolean
    if ( ( udg_TempUnitType[1] == 'n02T' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n026' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01X' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n021' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n029' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n020' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n02S' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n024' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01Z' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01V' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n01W' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n022' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n023' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'u000' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'n00I' ) ) then
        return true
    endif
    if ( ( udg_TempUnitType[1] == 'h01P' ) ) then
        return true
    endif
    return false
endfunction

function Trig_Global_Unit_Die_Func018C takes nothing returns boolean
    if ( not Trig_Global_Unit_Die_Func018Func004C() ) then
        return false
    endif
    return true
endfunction

function Trig_Global_Unit_Die_Actions takes nothing returns nothing
    set udg_TempUnitArray[0] = GetKillingUnitBJ()
    set udg_TempUnitType[0] = GetUnitTypeId(GetKillingUnitBJ())
    set udg_TempIntegerArray[0] = GetUnitPointValueByType(udg_TempUnitType[0])
    set udg_TempPlayerArray[0] = GetOwningPlayer(udg_TempUnitArray[0])
    set udg_TempIntegerArray[2] = GetConvertedPlayerId(udg_TempPlayerArray[0])
    set udg_TempUnitArray[1] = GetTriggerUnit()
    set udg_TempUnitType[1] = GetUnitTypeId(GetTriggerUnit())
    set udg_TempIntegerArray[1] = GetUnitPointValueByType(udg_TempUnitType[1])
    set udg_TempPlayerArray[1] = GetOwningPlayer(udg_TempUnitArray[1])
    set udg_TempIntegerArray[3] = GetConvertedPlayerId(udg_TempPlayerArray[1])
    // ==========   Killing Unit Check and XP   ==========
    if ( Trig_Global_Unit_Die_Func012C() ) then
        // Rotten Beast
        if ( Trig_Global_Unit_Die_Func012Func002C() ) then
            set udg_Job_PuppetMaster_XP[udg_TempIntegerArray[2]] = ( udg_Job_PuppetMaster_XP[udg_TempIntegerArray[2]] + udg_TempIntegerArray[1] )
            call ConditionalTriggerExecute( gg_trg_Puppet_Master_Lvl )
        else
            // Pets
            if ( Trig_Global_Unit_Die_Func012Func002Func004C() ) then
                call SetUnitManaBJ( udg_TempUnitArray[0], ( GetUnitStateSwap(UNIT_STATE_MANA, udg_TempUnitArray[0]) + I2R(udg_TempIntegerArray[1]) ) )
            else
                // Troll
                if ( Trig_Global_Unit_Die_Func012Func002Func004Func002C() ) then
                    call AddHeroXPSwapped( udg_TempIntegerArray[1], udg_TempUnitArray[0], false )
                    if ( Trig_Global_Unit_Die_Func012Func002Func004Func002Func005C() ) then
                        set udg_Job_TacticalMaster_XP[udg_TempIntegerArray[2]] = ( udg_Job_TacticalMaster_XP[udg_TempIntegerArray[2]] + 22 )
                        call ConditionalTriggerExecute( gg_trg_Tactical_Master_Lvl )
                    else
                    endif
                else
                    // Dummy
                    if ( Trig_Global_Unit_Die_Func012Func002Func004Func002Func002C() ) then
                        call AddHeroXPSwapped( udg_TempIntegerArray[1], udg_Hero_Troll[udg_TempIntegerArray[2]], false )
                    else
                        if ( Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001C() ) then
                            call AddHeroXPSwapped( udg_TempIntegerArray[1], udg_Hero_Troll[udg_TempIntegerArray[2]], false )
                        else
                            // Towers
                            if ( Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005C() ) then
                                set udg_N = 1
                                loop
                                    exitwhen udg_N > 3
                                    if ( Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func001Func001C() ) then
                                        set udg_Job_Ballistic_Xp[udg_N] = ( udg_Job_Ballistic_Xp[udg_N] + udg_TempIntegerArray[1] )
                                        call ConditionalTriggerExecute( gg_trg_Ballistics_Lvl )
                                    else
                                    endif
                                    set udg_N = udg_N + 1
                                endloop
                            else
                                // Bombs
                                if ( Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func004C() ) then
                                    set udg_Job_Bomber_XP[udg_TempIntegerArray[2]] = ( udg_Job_Bomber_XP[udg_TempIntegerArray[2]] + udg_TempIntegerArray[1] )
                                    call ConditionalTriggerExecute( gg_trg_Bomber_Lvl )
                                else
                                    // Wild Animals
                                    if ( Trig_Global_Unit_Die_Func012Func002Func004Func002Func002Func001Func005Func004Func004C() ) then
                                        set udg_Job_BeastMaster_XP[udg_TempIntegerArray[2]] = ( udg_Job_BeastMaster_XP[udg_TempIntegerArray[2]] + udg_TempIntegerArray[1] )
                                        set udg_Job1 = udg_TempIntegerArray[2]
                                        call ConditionalTriggerExecute( gg_trg_Beast_Master_Lvl )
                                    else
                                    endif
                                endif
                            endif
                        endif
                    endif
                endif
            endif
        endif
    else
    endif
    // ==========   Hero Die  Special Action   ==========
    if ( Trig_Global_Unit_Die_Func014C() ) then
        if ( Trig_Global_Unit_Die_Func014Func001C() ) then
            set udg_ChainsawOn[udg_TempIntegerArray[3]] = false
            call UnitRemoveItemSwapped( udg_ChainSawItem[udg_TempIntegerArray[3]], udg_TempUnitArray[1] )
            call RemoveItem( udg_ChainSawItem[udg_TempIntegerArray[3]] )
            call UnitAddItemByIdSwapped( 'I05S', udg_TempUnitArray[1] )
            call SetItemUserData( GetLastCreatedItem(), udg_ChainSawValue[udg_TempIntegerArray[3]] )
        else
        endif
        set udg_N = 1
        loop
            exitwhen udg_N > 6
            if ( Trig_Global_Unit_Die_Func014Func002Func001C() ) then
                if ( Trig_Global_Unit_Die_Func014Func002Func001Func001C() ) then
                    set udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] = null
                    call UnitRemoveItemFromSlotSwapped( udg_N, udg_TempUnitArray[1] )
                else
                    call DisableTrigger( gg_trg_Global_Item_Drop )
                    set udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] = UnitItemInSlotBJ(udg_TempUnitArray[1], udg_N)
                    call UnitRemoveItemFromSlotSwapped( udg_N, udg_TempUnitArray[1] )
                    call SetItemVisibleBJ( false, udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] )
                    call EnableTrigger( gg_trg_Global_Item_Drop )
                endif
            else
                set udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] = null
            endif
            set udg_N = udg_N + 1
        endloop
        set udg_RightHand[udg_TempIntegerArray[3]] = 0
        set udg_LeftHand[udg_TempIntegerArray[3]] = 0
        set udg_SpellBook_Owned[udg_TempIntegerArray[3]] = 0
        set udg_DollOwned[udg_TempIntegerArray[3]] = 0
        set udg_ArmorOwned[udg_TempIntegerArray[3]] = 0
        set udg_BootsOwned[udg_TempIntegerArray[3]] = 0
        set udg_GauntletsOwned[udg_TempIntegerArray[3]] = 0
        set udg_MaskOwned[udg_TempIntegerArray[3]] = 0
        set udg_Headpiece_owned[udg_TempIntegerArray[3]] = 0
        set udg_Hero_Xp[udg_TempIntegerArray[3]] = GetHeroXP(udg_TempUnitArray[1])
        set udg_Hero_Agility[udg_TempIntegerArray[3]] = GetHeroStatBJ(bj_HEROSTAT_AGI, udg_TempUnitArray[1], false)
        set udg_Hero_Intelligence[udg_TempIntegerArray[3]] = GetHeroStatBJ(bj_HEROSTAT_INT, udg_TempUnitArray[1], false)
        set udg_Hero_Strength[udg_TempIntegerArray[3]] = GetHeroStatBJ(bj_HEROSTAT_STR, udg_TempUnitArray[1], false)
        set udg_DiseaseResist[udg_TempIntegerArray[3]] = 50
        set udg_run_energy[udg_TempIntegerArray[3]] = 10.00
        set udg_Loc = GetUnitLoc(udg_TempUnitArray[1])
        call CreateNUnitsAtLoc( 1, 'n000', udg_TempPlayerArray[1], udg_Loc, bj_UNIT_FACING )
        if ( Trig_Global_Unit_Die_Func014Func020C() ) then
            call DisplayTimedTextToForce( GetPlayersAll(), 6.00, ( ( "|c009966ffOld Troll:|r |c00ffff64" + GetPlayerName(udg_TempPlayerArray[1]) ) + " troll be dead!|r" ) )
            call DisplayTimedTextToPlayer( udg_TempPlayerArray[1], 0, 0, 6.00, "TRIGSTR_2343" )
            set udg_Hero_Deaths[udg_TempIntegerArray[3]] = 1
        else
            if ( Trig_Global_Unit_Die_Func014Func020Func001C() ) then
                call DisplayTimedTextToForce( GetPlayersAll(), 6.00, ( ( "|c009966ffOld Troll:|r |c00ffff64" + GetPlayerName(udg_TempPlayerArray[1]) ) + " troll be dead!|r" ) )
                call DisplayTimedTextToPlayer( udg_TempPlayerArray[1], 0, 0, 6.00, "TRIGSTR_1855" )
                set udg_Hero_Deaths[udg_TempIntegerArray[3]] = ( udg_Hero_Deaths[udg_TempIntegerArray[3]] + 1 )
                call UnitRemoveAbilityBJ( 'A084', GetLastCreatedUnit() )
                call UnitAddAbilityBJ( 'A01A', GetLastCreatedUnit() )
            else
            endif
        endif
        call RemoveLocation(udg_Loc)
        set udg_Troll_Spirit[udg_TempIntegerArray[3]] = GetLastCreatedUnit()
        call SelectUnitForPlayerSingle( GetLastCreatedUnit(), udg_TempPlayerArray[1] )
        set udg_Heat[udg_TempIntegerArray[3]] = 0
        call SetPlayerStateBJ( ConvertedPlayer(udg_TempIntegerArray[3]), PLAYER_STATE_RESOURCE_GOLD, 0 )
        call SetPlayerStateBJ( ConvertedPlayer(udg_TempIntegerArray[3]), PLAYER_STATE_RESOURCE_LUMBER, 0 )
        call UnitRemoveAbilityBJ( 'A0DQ', udg_Score_Memorial[udg_TempIntegerArray[3]] )
        call UnitAddAbilityBJ( 'A0DS', udg_Score_Memorial[udg_TempIntegerArray[3]] )
        if ( Trig_Global_Unit_Die_Func014Func029C() ) then
            call KillUnit( GetLastCreatedUnit() )
        else
        endif
        if ( Trig_Global_Unit_Die_Func014Func030C() ) then
            call UnitAddAbilityBJ( 'S004', udg_BoatLoaded[udg_TempIntegerArray[3]] )
        else
        endif
    else
    endif
    // ==========   Troll Soul   ==========
    if ( Trig_Global_Unit_Die_Func016C() ) then
        call DisplayTimedTextToPlayer( udg_TempPlayerArray[1], 0, 0, 6.00, "TRIGSTR_2475" )
        call DisplayTimedTextToForce( GetPlayersAll(), 10.00, ( ( "|c009966ffOld Troll:|r |c00ffff64 " + ( GetPlayerName(udg_TempPlayerArray[1]) + " troll survived for " ) ) + ( I2S(( R2I(GetUnitStateSwap(UNIT_STATE_LIFE, udg_Score_Memorial[udg_TempIntegerArray[3]])) / 500 )) + ( " dayz in the Jungle. He be slayed " + ( I2S(udg_Kill_worthy[udg_TempIntegerArray[3]]) + ( " worthy oponentz and ate " + ( I2S(udg_Eaten_Hearts[udg_TempIntegerArray[3]]) + " epic beast heartz!|r" ) ) ) ) ) ) )
        call SetUnitAbilityLevelSwapped( 'A0DS', udg_Score_Memorial[udg_TempIntegerArray[3]], 2 )
        call UnitRemoveItemFromSlotSwapped( 1, udg_Troll_Spirit[udg_TempIntegerArray[3]] )
        // give back and drop all equiped item hidden when the troll died
        set udg_N = 1
        loop
            exitwhen udg_N > 6
            if ( Trig_Global_Unit_Die_Func016Func007Func001C() ) then
                set udg_Loc = GetUnitLoc(udg_TempUnitArray[1])
                call SetItemVisibleBJ( true, udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )] )
                call SetItemPositionLoc( udg_EquipItem[( ( udg_N * 100 ) + udg_TempIntegerArray[3] )], udg_Loc )
                call RemoveLocation(udg_Loc)
            else
            endif
            set udg_N = udg_N + 1
        endloop
        set udg_Defeat_Loc[udg_TempIntegerArray[3]] = GetUnitLoc(udg_TempUnitArray[1])
        set udg_Defeated = ConvertedPlayer(udg_TempIntegerArray[3])
        call ConditionalTriggerExecute( gg_trg_Player_Defeat )
    else
    endif
    // ==========   Corpse Items Drop and Remove   ==========
    if ( Trig_Global_Unit_Die_Func018C() ) then
        if ( Trig_Global_Unit_Die_Func018Func001C() ) then
            set udg_A = UnitInventorySizeBJ(udg_TempUnitArray[1])
            set udg_N = 1
            loop
                exitwhen udg_N > udg_A
                if ( Trig_Global_Unit_Die_Func018Func001Func002Func001C() ) then
                    call UnitRemoveItemFromSlotSwapped( udg_N, udg_TempUnitArray[1] )
                else
                endif
                set udg_N = udg_N + 1
            endloop
        else
        endif
        if ( Trig_Global_Unit_Die_Func018Func002C() ) then
            call ConditionalTriggerExecute( gg_trg_Reanimation )
        else
            call ConditionalTriggerExecute( gg_trg_Rotten_Animal_Death )
        endif
    else
        if ( Trig_Global_Unit_Die_Func018Func003C() ) then
            call ConditionalTriggerExecute( gg_trg_Boss_and_Environment_Death )
        else
            if ( Trig_Global_Unit_Die_Func018Func003Func002C() ) then
                if ( Trig_Global_Unit_Die_Func018Func003Func002Func001C() ) then
                    set udg_A = UnitInventorySizeBJ(udg_TempUnitArray[1])
                    set udg_N = 1
                    loop
                        exitwhen udg_N > udg_A
                        if ( Trig_Global_Unit_Die_Func018Func003Func002Func001Func003Func001C() ) then
                            call UnitRemoveItemFromSlotSwapped( udg_N, udg_TempUnitArray[1] )
                        else
                        endif
                        set udg_N = udg_N + 1
                    endloop
                else
                endif
                call ConditionalTriggerExecute( gg_trg_Water_Animal_Death )
            else
                if ( Trig_Global_Unit_Die_Func018Func003Func002Func002C() ) then
                    if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func001C() ) then
                        set udg_A = UnitInventorySizeBJ(udg_TempUnitArray[1])
                        set udg_N = 1
                        loop
                            exitwhen udg_N > udg_A
                            if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func001Func003Func001C() ) then
                                call UnitRemoveItemFromSlotSwapped( udg_N, udg_TempUnitArray[1] )
                            else
                            endif
                            set udg_N = udg_N + 1
                        endloop
                        if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func001Func004C() ) then
                            call ConditionalTriggerExecute( gg_trg_Hawk_Swoop_die )
                        else
                        endif
                    else
                    endif
                    call ConditionalTriggerExecute( gg_trg_Animal_Death )
                else
                    if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func002C() ) then
                        if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func001C() ) then
                            set udg_A = UnitInventorySizeBJ(udg_TempUnitArray[1])
                            set udg_N = 1
                            loop
                                exitwhen udg_N > udg_A
                                if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func001Func003Func001C() ) then
                                    call UnitRemoveItemFromSlotSwapped( udg_N, udg_TempUnitArray[1] )
                                else
                                endif
                                set udg_N = udg_N + 1
                            endloop
                        else
                        endif
                        call ConditionalTriggerExecute( gg_trg_Animal_Death_2 )
                    else
                        if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002C() ) then
                            if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func003C() ) then
                                call ConditionalTriggerExecute( gg_trg_ForestFire_Spread_JASS )
                            else
                                call ConditionalTriggerExecute( gg_trg_Dummy_Death )
                            endif
                        else
                            if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001C() ) then
                                set udg_A = UnitInventorySizeBJ(udg_TempUnitArray[1])
                                set udg_N = 1
                                loop
                                    exitwhen udg_N > udg_A
                                    if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func002Func001C() ) then
                                        call UnitRemoveItemFromSlotSwapped( udg_N, udg_TempUnitArray[1] )
                                    else
                                    endif
                                    set udg_N = udg_N + 1
                                endloop
                                set udg_Kill_Building[udg_TempIntegerArray[2]] = ( udg_Kill_Building[udg_TempIntegerArray[2]] + 1 )
                                call ConditionalTriggerExecute( gg_trg_Building_Death )
                            else
                                if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func003C() ) then
                                    call DisplayTimedTextToForce( GetPlayersAll(), 10.00, "TRIGSTR_745" )
                                else
                                    if ( Trig_Global_Unit_Die_Func018Func003Func002Func002Func002Func002Func001Func003Func001C() ) then
                                        set udg_Loc = GetUnitLoc(GetDyingUnit())
                                        call CreateItemLoc( 'I07J', udg_Loc )
                                        call RemoveLocation(udg_Loc)
                                    else
                                    endif
                                endif
                            endif
                        endif
                    endif
                endif
            endif
        endif
    endif
endfunction

//===========================================================================
function InitTrig_Global_Unit_Die takes nothing returns nothing
    set gg_trg_Global_Unit_Die = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Global_Unit_Die, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddCondition( gg_trg_Global_Unit_Die, Condition( function Trig_Global_Unit_Die_Conditions ) )
    call TriggerAddAction( gg_trg_Global_Unit_Die, function Trig_Global_Unit_Die_Actions )
endfunction


Besides, if you're willing to help and you think it will be easier, I'd send you an unprotected file of the game.
 
Level 12
Joined
Jan 10, 2023
Messages
191
Well I certainly see why you felt the need to close in on the part you were having trouble with 😅
Still glad I asked, but you were probably wise to wait and see if anyone wanted that much info!

Looks like I found my evening plans..
 
Level 19
Joined
Feb 27, 2019
Messages
563
EDIT: @[db]east you are un-@-able to me (I wonder if it is because your name starts with a bracket '['... ? ) I'm guessing if I had your user # I could just type it in myself, but I spent like 5 minutes trying to tag you only to fail... XD
I am aware and I believe you are correct. Maybe @Ralle can have a look. Id like to change my name anyway and have started the process to do so.

In regards to the thread. It may be that items are destroyed by aoe damage but it doesnt seem likely. It would require a unit with aoe damage that specifically has aoe targets set to items.

How often does the bug occur?
 
Level 11
Joined
Apr 11, 2006
Messages
338
@Tristronic You are wonderful! I hope you'd spot something.

[db]east, I don't think AoE has something to do with that, but I've learned not to say something was impossible :D

The bug occurs often enough to reliably ruin games, but seemingly randomly, and the item loss happens at random - i.e. it's not like losing all or nothing.
It would be clearer and easier if it happened always or if all items were lost, because it would mean the trigger doesn't work at all. Instead it seems it works, but either something goes in the way, or some property is not right.

I seem unable to reproduce it in single player game, or maybe just the chance is low - but that makes me think that it could have something to do with multiplayer:

- For example, perhaps some of the variables are not properly set as array, or not reset after use, and when the next hero dies, something goes wrong?

- It's either that, or another trigger messes up this one (besides the ones it specifically turns off).
 
Level 19
Joined
Feb 27, 2019
Messages
563
I cant see what causes the error in either trigger. If something is overwriting variables it must be, to my knowledge, an action within the Global Unit Die of a unit being killed. Killing a unit within the instance would instantly trigger a new instance that overwrites all of the temp variables. Any TriggerExecute is be part of the instance.
 
Last edited:
Level 12
Joined
Jan 10, 2023
Messages
191
I'm about 1/5 of the way through cleaning up the script, but the weekend is over so I'll be going much slower now.

I'm hoping that cleaning it up will make it more clear what's wrong. At the least it won't be so ugly looking lol
 
Top