1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
global function CodeCallback_MatchIsOver
void function CodeCallback_MatchIsOver()
{
if ( !IsPrivateMatch() && IsMatchmakingServer() )
SetUIVar( level, "putPlayerInMatchmakingAfterDelay", true )
else
SetUIVar( level, "putPlayerInMatchmakingAfterDelay", false )
#if MP
AddCreditsForXPGained()
PopulatePostgameData()
#endif
if ( ShouldReturnToLobby() )
{
SetCurrentPlaylist( "private_match" ) // needed for private lobby to load
if ( IsSingleplayer() )
GameRules_ChangeMap( "mp_lobby", "tdm" ) // need to change back to mp playlist or loadouts will break in lobby
else
GameRules_ChangeMap( "mp_lobby", GAMETYPE )
}
else
{
// iterate over all gamemodes/maps in current playlist, choose map/mode combination that's directly after our current one
// if we reach the end, go back to the first map/mode
bool changeOnNextIteration = false
for ( int i = 0; i < GetCurrentPlaylistGamemodesCount(); i++ )
{
if ( GetCurrentPlaylistGamemodeByIndex( i ) == GAMETYPE )
{
for ( int j = 0; j < GetCurrentPlaylistGamemodeByIndexMapsCount( i ); j++ )
{
if ( changeOnNextIteration )
{
GameRules_ChangeMap( GetCurrentPlaylistGamemodeByIndexMapByIndex( i, j ), GetCurrentPlaylistGamemodeByIndex( i ) )
return
}
if ( GetCurrentPlaylistGamemodeByIndexMapByIndex( i, j ) == GetMapName() )
changeOnNextIteration = true // change to next map/mode we iterate over
}
}
}
// go back to first map/mode
GameRules_ChangeMap( GetCurrentPlaylistGamemodeByIndexMapByIndex( 0, 0 ), GetCurrentPlaylistGamemodeByIndex( 0 ) )
}
#if DEV
if ( !IsMatchmakingServer() )
GameRules_ChangeMap( "mp_lobby", GAMETYPE )
#endif // #if DEV
}
#if MP
void function PopulatePostgameData()
{
// show the postgame scoreboard summary
SetUIVar( level, "showGameSummary", true )
foreach ( entity player in GetPlayerArray() )
{
int teams = GetCurrentPlaylistVarInt( "max_teams", 2 )
bool standardTeams = teams != 2
int enumModeIndex = 0
int enumMapIndex = 0
try
{
enumModeIndex = PersistenceGetEnumIndexForItemName( "gamemodes", GAMETYPE )
enumMapIndex = PersistenceGetEnumIndexForItemName( "maps", GetMapName() )
}
catch( ex ) {}
player.SetPersistentVar( "postGameData.myTeam", player.GetTeam() )
player.SetPersistentVar( "postGameData.myXuid", player.GetUID() )
player.SetPersistentVar( "postGameData.gameMode", enumModeIndex )
player.SetPersistentVar( "postGameData.map", enumMapIndex )
player.SetPersistentVar( "postGameData.teams", standardTeams )
player.SetPersistentVar( "postGameData.maxTeamSize", teams )
player.SetPersistentVar( "postGameData.privateMatch", true )
player.SetPersistentVar( "postGameData.ranked", true )
player.SetPersistentVar( "postGameData.hadMatchLossProtection", false )
player.SetPersistentVar( "isFDPostGameScoreboardValid", GAMETYPE == FD )
if ( standardTeams )
{
if ( player.GetTeam() == TEAM_MILITIA )
{
player.SetPersistentVar( "postGameData.factionMCOR", GetFactionChoice( player ) )
player.SetPersistentVar( "postGameData.factionIMC", GetEnemyFaction( player ) )
}
else
{
player.SetPersistentVar( "postGameData.factionIMC", GetFactionChoice( player ) )
player.SetPersistentVar( "postGameData.factionMCOR", GetEnemyFaction( player ) )
}
player.SetPersistentVar( "postGameData.scoreMCOR", GameRules_GetTeamScore( TEAM_MILITIA ) )
player.SetPersistentVar( "postGameData.scoreIMC", GameRules_GetTeamScore( TEAM_IMC ) )
}
else
{
player.SetPersistentVar( "postGameData.factionMCOR", GetFactionChoice( player ) )
player.SetPersistentVar( "postGameData.scoreMCOR", GameRules_GetTeamScore( player.GetTeam() ) )
}
array<entity> otherPlayers = GetPlayerArray()
array<int> scoreTypes = GameMode_GetScoreboardColumnScoreTypes( GAMETYPE )
int persistenceArrayCount = PersistenceGetArrayCount( "postGameData.players" )
for ( int i = 0; i < min( otherPlayers.len(), persistenceArrayCount ); i++ )
{
player.SetPersistentVar( "postGameData.players[" + i + "].team", otherPlayers[ i ].GetTeam() )
player.SetPersistentVar( "postGameData.players[" + i + "].name", otherPlayers[ i ].GetPlayerName() )
player.SetPersistentVar( "postGameData.players[" + i + "].xuid", otherPlayers[ i ].GetUID() )
player.SetPersistentVar( "postGameData.players[" + i + "].callsignIconIndex", otherPlayers[ i ].GetPersistentVarAsInt( "activeCallsignIconIndex" ) )
for ( int j = 0; j < scoreTypes.len(); j++ )
player.SetPersistentVar( "postGameData.players[" + i + "].scores[" + j + "]", otherPlayers[ i ].GetPlayerGameStat( scoreTypes[ j ] ) )
}
player.SetPersistentVar( "isPostGameScoreboardValid", true )
}
}
#endif
|