1 #using scripts\codescripts\struct;
2 #using scripts\shared\callbacks_shared;
3 #using scripts\shared\clientfield_shared;
4 #using scripts\shared\end_game_taunts;
5 #using scripts\shared\scene_shared;
6 #using scripts\shared\system_shared;
7 #using scripts\shared\util_shared;
8 #insert scripts\shared\shared.gsh;
9 #insert scripts\shared\version.gsh;
10 #insert scripts\shared\weapons\weapon_group_anims.gsh;
12 #define HERO_HELMET_BONE ""
13 #define WEAPON_NONE "wpn_t7_none_world"
15 #define RUNNER_UP_GESTURE_DELAY 3
17 #using_animtree("all_player");
18 #namespace end_game_flow;
35 anim_name = end_game_taunts::getidleanimname( localClientNum, characterModel, topPlayerIndex );
37 if( isDefined(anim_name) )
41 if( !characterModel HasAnimTree() )
43 characterModel UseAnimTree( #animtree );
46 characterModel SetAnim( anim_name );
53 assert( isdefined( characterModel ) );
56 bodyModel = GetTopPlayersBodyModel( localClientNum, topPlayerIndex );
57 displayTopPlayerModel = CreateUIModel( GetUIModelForController( localClientNum ),
"displayTopPlayer" + (topPlayerIndex+1) );
58 SetUIModelValue( displayTopPlayerModel, 1 );
61 if ( !IsDefined( bodyModel ) || bodymodel ==
"" )
63 SetUIModelValue( displayTopPlayerModel, 0 );
67 characterModel SetModel( bodyModel );
70 helmetModel = GetTopPlayersHelmetModel( localClientNum, topPlayerIndex );
74 characterModel.helmetModel = helmetModel;
79 modeRenderOptions = GetCharacterModeRenderOptions( CurrentSessionMode() );
80 bodyRenderOptions = GetTopPlayersBodyRenderOptions( localClientNum, topPlayerIndex );
81 helmetRenderOptions = GetTopPlayersHelmetRenderOptions( localClientNum, topPlayerIndex );
82 weaponRenderOptions = GetTopPlayersWeaponRenderOptions( localClientNum, topPlayerIndex );
85 characterModel.bodyModel = bodyModel;
87 characterModel.modeRenderOptions = modeRenderOptions;
88 characterModel.bodyRenderOptions = bodyRenderOptions;
89 characterModel.helmetRenderOptions = helmetRenderOptions;
90 characterModel.headRenderOptions = helmetRenderOptions;
92 weapon_right = GetTopPlayersWeaponInfo( localClientNum, topPlayerIndex );
94 if ( !isDefined( level.weaponNone ) )
96 level.weaponNone = GetWeapon(
"none" );
99 characterModel SetBodyRenderOptions( modeRenderOptions, bodyRenderOptions, helmetRenderOptions, helmetRenderOptions );
101 if ( weapon_right[
"weapon"] == level.weaponNone )
103 weapon_right[
"weapon"] = GetWeapon(
"ar_standard");
104 characterModel.showcaseWeapon = weapon_right[
"weapon"];
105 characterModel AttachWeapon( weapon_right[
"weapon"] );
109 characterModel.showcaseWeapon = weapon_right[
"weapon"];
110 characterModel.showcaseWeaponRenderOptions = weaponRenderOptions;
111 characterModel.showcaseWeaponACVI = weapon_right[
"acvi"];
113 characterModel AttachWeapon( weapon_right[
"weapon"], weaponRenderOptions, weapon_right[
"acvi"] );
114 characterModel UseWeaponHideTags( weapon_right[
"weapon"] );
122 characterModel endon(
"entityshutdown");
132 numClients = GetTopScorerCount( localClientNum );
133 position =
struct::get(
"endgame_top_players_struct",
"targetname" );
135 if( !isdefined( position ) )
140 for( index = 0; index < 3; index++ )
142 if ( index < numClients )
144 model =
Spawn( localClientNum, position.origin,
"script_model" );
147 model SetHighDetail(
true );
154 level.topPlayerCharacters = [];
155 topPlayerScriptStructs = [];
157 topPlayerScriptStructs[0] =
struct::get(
"TopPlayer1",
"targetname" );
158 topPlayerScriptStructs[1] =
struct::get(
"TopPlayer2",
"targetname" );
159 topPlayerScriptStructs[2] =
struct::get(
"TopPlayer3",
"targetname" );
161 foreach( index, scriptStruct
in topPlayerScriptStructs )
163 level.topPlayerCharacters[index] =
Spawn( localClientNum, scriptStruct.origin,
"script_model" );
165 level.topPlayerCharacters[index].angles = scriptStruct.angles;
167 numClients = GetTopScorerCount( localClientNum );
169 foreach( index, characterModel
in level.topPlayerCharacters )
171 if ( index < numClients )
182 position =
struct::get(
"endgame_top_players_struct",
"targetname" );
183 PlayMainCamXCam( localClientNum, level.endGameXCamName, 0,
"cam_topscorers",
"topscorers", position.origin, position.angles );
184 PlayRadiantExploder( localClientNum,
"exploder_mp_endgame_lights" );
186 SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ),
"displayTop3Players" ), 1 );
197 SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ),
"displayTop3Players" ), 1 );
203 localPlayers = GetLocalPlayers();
205 for ( i = 0; i < localPlayers.size; i++ )
213 localTopPlayerIndex = localPlayer GetTopPlayersIndex( localClientNum );
215 if ( !isdefined( localTopPlayerIndex ) ||
216 !isdefined( level.topPlayerCharacters ) ||
217 localTopPlayerIndex >= level.topPlayerCharacters.size )
222 characterModel = level.topPlayerCharacters[localTopPlayerIndex];
224 if ( localTopPlayerIndex > 0 )
228 else if ( isdefined( characterModel.playingTaunt ) )
230 characterModel waittill(
"tauntFinished" );
238 gesturesModel = GetUIModel( GetUIModelForController( localClientNum ),
"topPlayerInfo.showGestures" );
239 if ( isdefined( gesturesModel ) )
241 SetUIModelValue( gesturesModel,
true );
242 AllowActionSlotInput( playerIndex );
263 if ( gestureType > 2 ||
264 !isdefined( level.topPlayerCharacters ) ||
265 topPlayerIndex >= level.topPlayerCharacters.size )
270 characterModel = level.topPlayerCharacters[topPlayerIndex];
272 if ( isdefined( characterModel.playingTaunt ) ||
273 IS_TRUE( characterModel.playingGesture ) )
285 level waittill(
"streamFKsl", localClientNum );
294 if ( isdefined( newVal ) && newVal > 0 && isDefined( level.endGameXCamName ) )
296 level.showedTopThreePlayers =
true;
301 function showScoreboard( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
303 if ( isdefined( newVal ) && newVal > 0 && isDefined( level.endGameXCamName ) )
307 position =
struct::get(
"endgame_top_players_struct",
"targetname" );
308 PlayMainCamXCam( localClientNum, level.endGameXCamName, 0,
"cam_topscorers",
"", position.origin, position.angles );
309 SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ),
"forceScoreboard" ), 1 );
310 level.inEndGameFlow =
true;