function MeleeTournamentFinishNowRuleA takes integer multiplier returns nothing
local integer array playerScore
local integer array teamScore
local force array teamForce
local integer teamCount
local integer index
local player indexPlayer
local integer index2
local player indexPlayer2
local integer bestTeam
local integer bestScore
local boolean draw
// Compute individual player scores
set index = 0
loop
set indexPlayer = Player(index)
if MeleeWasUserPlayer(indexPlayer) then
set playerScore[index] = GetTournamentScore(indexPlayer)
if playerScore[index] <= 0 then
set playerScore[index] = 1
endif
else
set playerScore[index] = 0
endif
set index = index + 1
exitwhen index == bj_MAX_PLAYERS
endloop
// Compute team scores and team forces
set teamCount = 0
set index = 0
loop
if playerScore[index] != 0 then
set indexPlayer = Player(index)
set teamScore[teamCount] = 0
set teamForce[teamCount] = CreateForce()
set index2 = index
loop
if playerScore[index2] != 0 then
set indexPlayer2 = Player(index2)
if PlayersAreCoAllied(indexPlayer, indexPlayer2) then
set teamScore[teamCount] = teamScore[teamCount] + playerScore[index2]
call ForceAddPlayer(teamForce[teamCount], indexPlayer2)
set playerScore[index2] = 0
endif
endif
set index2 = index2 + 1
exitwhen index2 == bj_MAX_PLAYERS
endloop
set teamCount = teamCount + 1
endif
set index = index + 1
exitwhen index == bj_MAX_PLAYERS
endloop
// The game is now over
set bj_meleeGameOver = true
// There should always be at least one team, but continue to work if not
if teamCount != 0 then
// Find best team score
set bestTeam = -1
set bestScore = -1
set index = 0
loop
if teamScore[index] > bestScore then
set bestTeam = index
set bestScore = teamScore[index]
endif
set index = index + 1
exitwhen index == teamCount
endloop
// Check whether the best team's score is 'multiplier' times better than
// every other team. In the case of multiplier == 1 and exactly equal team
// scores, the first team (which was randomly chosen by the server) will win.
set draw = false
set index = 0
loop
if index != bestTeam then
if bestScore < (multiplier * teamScore[index]) then
set draw = true
endif
endif
set index = index + 1
exitwhen index == teamCount
endloop
if draw then
// Give draw to all players on all teams
set index = 0
loop
call ForForce(teamForce[index], function MeleeDoDrawEnum)
set index = index + 1
exitwhen index == teamCount
endloop
else
// Give defeat to all players on teams other than the best team
set index = 0
loop
if index != bestTeam then
call ForForce(teamForce[index], function MeleeDoDefeatEnum)
endif
set index = index + 1
exitwhen index == teamCount
endloop
// Give victory to all players on the best team
call ForForce(teamForce[bestTeam], function MeleeDoVictoryEnum)
endif
endif
endfunction