Function MeleeInitVictoryDefeat

Line
9922
Location
blizzard.j
Constant?
no
Type
function
Arguments
nothing
Returns
nothing
9922
function MeleeInitVictoryDefeat takes nothing returns nothing
9923
    local trigger    trig
9924
    local integer    index
9925
    local player     indexPlayer
9926
9927
    // Create a timer window for the "finish soon" timeout period, it has no timer
9928
    // because it is driven by real time (outside of the game state to avoid desyncs)
9929
    set bj_finishSoonTimerDialog = CreateTimerDialog(null)
9930
9931
    // Set a trigger to fire when we receive a "finish soon" game event
9932
    set trig = CreateTrigger()
9933
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_SOON)
9934
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishSoon)
9935
9936
    // Set a trigger to fire when we receive a "finish now" game event
9937
    set trig = CreateTrigger()
9938
    call TriggerRegisterGameEvent(trig, EVENT_GAME_TOURNAMENT_FINISH_NOW)
9939
    call TriggerAddAction(trig, function MeleeTriggerTournamentFinishNow)
9940
9941
    // Set up each player's mortality code.
9942
    set index = 0
9943
    loop
9944
        set indexPlayer = Player(index)
9945
9946
        // Make sure this player slot is playing.
9947
        if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
9948
            set bj_meleeDefeated[index] = false
9949
            set bj_meleeVictoried[index] = false
9950
9951
            // Create a timer and timer window in case the player is crippled.
9952
            set bj_playerIsCrippled[index] = false
9953
            set bj_playerIsExposed[index] = false
9954
            set bj_crippledTimer[index] = CreateTimer()
9955
            set bj_crippledTimerWindows[index] = CreateTimerDialog(bj_crippledTimer[index])
9956
            call TimerDialogSetTitle(bj_crippledTimerWindows[index], MeleeGetCrippledTimerMessage(indexPlayer))
9957
9958
            // Set a trigger to fire whenever a building is cancelled for this player.
9959
            set trig = CreateTrigger()
9960
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL, null)
9961
            call TriggerAddAction(trig, function MeleeTriggerActionConstructCancel)
9962
9963
            // Set a trigger to fire whenever a unit dies for this player.
9964
            set trig = CreateTrigger()
9965
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_DEATH, null)
9966
            call TriggerAddAction(trig, function MeleeTriggerActionUnitDeath)
9967
9968
            // Set a trigger to fire whenever a unit begins construction for this player
9969
            set trig = CreateTrigger()
9970
            call TriggerRegisterPlayerUnitEvent(trig, indexPlayer, EVENT_PLAYER_UNIT_CONSTRUCT_START, null)
9971
            call TriggerAddAction(trig, function MeleeTriggerActionUnitConstructionStart)
9972
9973
            // Set a trigger to fire whenever this player defeats-out
9974
            set trig = CreateTrigger()
9975
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_DEFEAT)
9976
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerDefeated)
9977
9978
            // Set a trigger to fire whenever this player leaves
9979
            set trig = CreateTrigger()
9980
            call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
9981
            call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
9982
9983
            // Set a trigger to fire whenever this player changes his/her alliances.
9984
            set trig = CreateTrigger()
9985
            call TriggerRegisterPlayerAllianceChange(trig, indexPlayer, ALLIANCE_PASSIVE)
9986
            call TriggerRegisterPlayerStateEvent(trig, indexPlayer, PLAYER_STATE_ALLIED_VICTORY, EQUAL, 1)
9987
            call TriggerAddAction(trig, function MeleeTriggerActionAllianceChange)
9988
        else
9989
            set bj_meleeDefeated[index] = true
9990
            set bj_meleeVictoried[index] = false
9991
9992
            // Handle leave events for observers
9993
            if (IsPlayerObserver(indexPlayer)) then
9994
                // Set a trigger to fire whenever this player leaves
9995
                set trig = CreateTrigger()
9996
                call TriggerRegisterPlayerEvent(trig, indexPlayer, EVENT_PLAYER_LEAVE)
9997
                call TriggerAddAction(trig, function MeleeTriggerActionPlayerLeft)
9998
            endif
9999
        endif
10000
10001
        set index = index + 1
10002
        exitwhen index == bj_MAX_PLAYERS
10003
    endloop
10004
10005
    // Test for victory / defeat at startup, in case the user has already won / lost.
10006
    // Allow for a short time to pass first, so that the map can finish loading.
10007
    call TimerStart(CreateTimer(), 2.0, false, function MeleeTriggerActionAllianceChange)
10008
endfunction