| 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
|