mirror of
https://github.com/Paintball/BO2-GSC-Releases.git
synced 2025-06-07 21:38:02 -05:00
1445 lines
40 KiB
Plaintext
1445 lines
40 KiB
Plaintext
#include maps/mp/gametypes/_globallogic_spawn;
|
|
#include maps/mp/gametypes/_spectating;
|
|
#include maps/mp/_tacticalinsertion;
|
|
#include maps/mp/_challenges;
|
|
#include maps/mp/gametypes/_globallogic;
|
|
#include maps/mp/gametypes/_hud_util;
|
|
#include maps/mp/_utility;
|
|
#include common_scripts/utility;
|
|
|
|
init()
|
|
{
|
|
init_precache(); //used for mapvote
|
|
precachestring( &"PLATFORM_PRESS_TO_SKIP" );
|
|
precachestring( &"PLATFORM_PRESS_TO_RESPAWN" );
|
|
precacheshader( "white" );
|
|
level.killcam = getgametypesetting( "allowKillcam" );
|
|
level.finalkillcam = getgametypesetting( "allowFinalKillcam" );
|
|
initfinalkillcam();
|
|
}
|
|
|
|
//mapvote functions//
|
|
|
|
init_precache()
|
|
{
|
|
shaders_list_str = ( "white;line_horizontal;loadscreen_mp_takeoff;loadscreen_mp_pod;loadscreen_mp_frostbite;loadscreen_mp_dig;loadscreen_mp_paintball;loadscreen_mp_castaway;loadscreen_mp_bridge;loadscreen_mp_uplink;loadscreen_mp_studio;loadscreen_mp_vertigo;loadscreen_mp_magma;loadscreen_mp_concert;loadscreen_mp_skate;loadscreen_mp_hydro;loadscreen_mp_mirage;loadscreen_mp_downhill;loadscreen_mp_nuketown_2020;loadscreen_mp_socotra;loadscreen_mp_turbine;loadscreen_mp_village;loadscreen_mp_la;loadscreen_mp_dockside;loadscreen_mp_carrier;loadscreen_mp_drone;loadscreen_mp_express;loadscreen_mp_hijacked;loadscreen_mp_meltdown;loadscreen_mp_overflow;loadscreen_mp_nightclub;loadscreen_mp_raid;loadscreen_mp_slums" );
|
|
shaders_list = strtok( shaders_list_str, ";" );
|
|
foreach( shader in shaders_list )
|
|
{
|
|
precacheShader( shader );
|
|
}
|
|
}
|
|
|
|
start_mapvote()
|
|
{
|
|
level.numberOfBots = 0;
|
|
level.map_vote = [];
|
|
level.map1_votes = 0;
|
|
level.map2_votes = 0;
|
|
level.map3_votes = 0;
|
|
level.player_votes = 0;
|
|
|
|
level.map_list_str = getDvar( "mapList" );
|
|
if( level.map_list_str == "" )
|
|
level.map_list_str = "mp_la mp_dockside mp_carrier mp_drone mp_express mp_hijacked mp_meltdown mp_overflow mp_nightclub mp_raid mp_slums mp_village mp_turbine mp_socotra mp_nuketown_2020 mp_downhill mp_mirage mp_hydro mp_skate mp_concert mp_magma mp_vertigo mp_studio mp_uplink mp_bridge mp_castaway mp_paintball mp_dig mp_frostbite mp_pod mp_takeoff";
|
|
level.map_list = strtok( level.map_list_str, " " );
|
|
level.gametype_list_str = getDvar( "gametypeList" );
|
|
level.gametype_list = strtok( level.gametype_list_str, " " );
|
|
thread start_mapvote_countdown();
|
|
foreach( player in level.players )
|
|
{
|
|
if( isDefined( player.pers[ "isBot" ] )&& player.pers[ "isBot" ] )
|
|
level.numberOfBots += 1;
|
|
else
|
|
player thread player_voting_handler();
|
|
}
|
|
}
|
|
|
|
start_mapvote_countdown()
|
|
{
|
|
level.countdown = getDvarIntDefault( "mapVoteTime", 15 );
|
|
level.timerText = createServerFontString( "default" , 2 );
|
|
level.timerText setPoint( "CENTER", "CENTER", 0, 190 );
|
|
level.timerText setValue( level.countdown );
|
|
level.timerText.foreground = 1;
|
|
level endon( "mapvote_ended" );
|
|
wait 1;
|
|
while( 1 )
|
|
{
|
|
playbombsound();
|
|
level.countdown--;
|
|
level.timerText.fontscale = 3.3;
|
|
level.timerText setValue( level.countdown );
|
|
level.timerText changefontscaleovertime( 0.5 );
|
|
level.timerText.fontscale = 2;
|
|
wait 1;
|
|
if( level.player_votes == ( level.players.size - level.numberOfBots ))
|
|
{
|
|
setup_next_map();
|
|
}
|
|
if( level.countdown == 0 )
|
|
{
|
|
level notify( "voting_timedout" );
|
|
foreach( player in level.players )
|
|
{
|
|
if( !isDefined( level.map1_map ))
|
|
player.onscreenText setText( "^7Timer Ran Out: ^3No Votes - Choosing Random Map" );
|
|
else
|
|
player.onscreenText setText( "^3Timer Ran Out" );
|
|
player thread end_screen_handler();
|
|
level notify( "player_voted" );
|
|
}
|
|
setup_next_map();
|
|
}
|
|
}
|
|
}
|
|
|
|
player_voting_handler()
|
|
{
|
|
self endon( "disconnect" );
|
|
level endon( "voting_timedout" );
|
|
self.gamemode = random_gamemode();
|
|
self setup_map_index();
|
|
self.background = self createrectangle( "CENTER", "CENTER", 0, 0, 505, 255, (0.05, 0.05, 0.05), "white", 1, 85 );
|
|
self.textBackground = self createrectangle( "CENTER", "CENTER", 0, 150, 500, 40, (0, 0, 0), "line_horizontal", 1, 100 );
|
|
self.mapImage = self createrectangle( "CENTER", "CENTER", 0, 0, 500, 250, (1, 1, 1), "loadscreen_" + level.map_list[ self.mapIndex ], 1, 100 );
|
|
self.mapImage.foreground = 1;
|
|
self.onscreenText = self drawText( self text_handling(), "default", 1.5, "CENTER", 343, (1, 1, 1), 1, (0, 0, 0), 3, 1 );
|
|
self.onscreenText.foreground = 1;
|
|
wait 1;
|
|
while( 1 )
|
|
{
|
|
if( self attackbuttonpressed() )
|
|
{
|
|
self map_index_handler( 1 );
|
|
wait 0.15;
|
|
}
|
|
if( self adsbuttonpressed() )
|
|
{
|
|
self map_index_handler( 0 );
|
|
wait 0.15;
|
|
}
|
|
if( self jumpbuttonpressed() )
|
|
{
|
|
self thread vote_for_map( level.map_list[ self.mapIndex ], self.mapIndex, self.gamemode );
|
|
break;
|
|
}
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
vote_for_map( mapname, mapindex, gametype )
|
|
{
|
|
level.player_votes++;
|
|
if( !isDefined( level.map_vote[ mapname ][ gametype ] ))
|
|
{
|
|
level.map_vote[ mapname ][ gametype ][ "Votes" ] = 1;
|
|
level.map_vote[ mapname ][ gametype ][ "Mapname" ] = mapname;
|
|
level.map_vote[ mapname ][ gametype ][ "Gametype" ] = gametype;
|
|
}
|
|
else
|
|
{
|
|
level.map_vote[ mapname ][ gametype ][ "Votes" ]++;
|
|
}
|
|
if( !isDefined( level.map1_map ))
|
|
{
|
|
level.map1_votes = level.map_vote[ mapname ][ gametype ][ "Votes" ];
|
|
level.map1_map = level.map_vote[ mapname ][ gametype ][ "Mapname" ];
|
|
level.map1_gametype = level.map_vote[ mapname ][ gametype ][ "Gametype" ];
|
|
}
|
|
else if( !isDefined( level.map2_map ))
|
|
{
|
|
level.map2_votes = level.map_vote[ mapname ][ gametype ][ "Votes" ];
|
|
level.map2_map = level.map_vote[ mapname ][ gametype ][ "Mapname" ];
|
|
level.map2_gametype = level.map_vote[ mapname ][ gametype ][ "Gametype" ];
|
|
}
|
|
else if( !isDefined( level.map3_map ))
|
|
{
|
|
level.map3_votes = level.map_vote[ mapname ][ gametype ][ "Votes" ];
|
|
level.map3_map = level.map_vote[ mapname ][ gametype ][ "Mapname" ];
|
|
level.map3_gametype = level.map_vote[ mapname ][ gametype ][ "Gametype" ];
|
|
}
|
|
else if( isTop3Map( mapname, gametype ) == 0 )
|
|
{
|
|
if( level.map_vote[ mapname ][ gametype ][ "Votes" ] > level.map3_votes )
|
|
{
|
|
level.map3_votes = level.map_vote[ mapname ][ gametype ][ "Votes" ];
|
|
level.map3_map = level.map_vote[ mapname ][ gametype ][ "Mapname" ];
|
|
level.map3_gametype = level.map_vote[ mapname ][ gametype ][ "Gametype" ];
|
|
}
|
|
}
|
|
else if( isTop3Map( mapname, gametype ) == 1 )
|
|
{
|
|
level.map1_votes = level.map_vote[ mapname ][ gametype ][ "Votes" ];
|
|
level.map1_map = level.map_vote[ mapname ][ gametype ][ "Mapname" ];
|
|
level.map1_gametype = level.map_vote[ mapname ][ gametype ][ "Gametype" ];
|
|
}
|
|
else if( isTop3Map( mapname, gametype ) == 2 )
|
|
{
|
|
if( level.map_vote[ mapname ][ gametype ][ "Votes" ] > level.map1_votes )
|
|
{
|
|
level.map2_votes = level.map1_votes;
|
|
level.map2_map = level.map1_map;
|
|
level.map2_gametype = level.map1_gametype;
|
|
|
|
level.map1_votes = level.map_vote[ mapname ][ gametype ][ "Votes" ];
|
|
level.map1_map = level.map_vote[ mapname ][ gametype ][ "Mapname" ];
|
|
level.map1_gametype = level.map_vote[ mapname ][ gametype ][ "Gametype" ];
|
|
}
|
|
else
|
|
{
|
|
level.map2_votes = level.map_vote[ mapname ][ gametype ][ "Votes" ];
|
|
level.map2_map = level.map_vote[ mapname ][ gametype ][ "Mapname" ];
|
|
level.map2_gametype = level.map_vote[ mapname ][ gametype ][ "Gametype" ];
|
|
}
|
|
}
|
|
else if( isTop3Map( mapname, gametype ) == 3 )
|
|
{
|
|
if( level.map_vote[ mapname ][ gametype ][ "Votes" ] > level.map2_votes )
|
|
{
|
|
level.map3_votes = level.map2_votes;
|
|
level.map3_map = level.map2_map;
|
|
level.map3_gametype = level.map2_gametype;
|
|
|
|
level.map2_votes = level.map_vote[ mapname ][ gametype ][ "Votes" ];
|
|
level.map2_map = level.map_vote[ mapname ][ gametype ][ "Mapname" ];
|
|
level.map2_gametype = level.map_vote[ mapname ][ gametype ][ "Gametype" ];
|
|
}
|
|
else
|
|
{
|
|
level.map3_votes = level.map_vote[ mapname ][ gametype ][ "Votes" ];
|
|
level.map3_map = level.map_vote[ mapname ][ gametype ][ "Mapname" ];
|
|
level.map3_gametype = level.map_vote[ mapname ][ gametype ][ "Gametype" ];
|
|
}
|
|
}
|
|
self.onscreenText setText( "Voted for ^3" + get_map_name( mapname ) + " - " + get_gametype_name( gametype ));
|
|
self thread end_screen_handler();
|
|
level notify( "player_voted" );
|
|
}
|
|
|
|
isTop3Map( mapname, gametype )
|
|
{
|
|
if( level.map_vote[ mapname ][ gametype ][ "Mapname" ] == level.map1_map && level.map_vote[ mapname ][ gametype ][ "Gametype" ] == level.map1_gametype )
|
|
return 1;
|
|
else if( level.map_vote[ mapname ][ gametype ][ "Mapname" ] == level.map2_map && level.map_vote[ mapname ][ gametype ][ "Gametype" ] == level.map2_gametype )
|
|
return 2;
|
|
else if( level.map_vote[ mapname ][ gametype ][ "Mapname" ] == level.map3_map && level.map_vote[ mapname ][ gametype ][ "Gametype" ] == level.map3_gametype )
|
|
return 3;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
end_screen_handler()
|
|
{
|
|
self endon( "disconnect" );
|
|
level endon( "mapvote_ended" );
|
|
if( isDefined( self.end_voting ))
|
|
return;
|
|
self.end_voting = 1;
|
|
self.mapImage Destroy();
|
|
if( getDvar( "discordLink" ) != "" )
|
|
{
|
|
self.info_text = drawText( get_info_text(), "default", 1, ( 220 - get_info_text().size ), 315, (1, 1, 1), 1, (0, 0, 0), 3, 1 );
|
|
self.info_text.foreground = 1;
|
|
}
|
|
while( 1 )
|
|
{
|
|
level waittill_any( "player_voted", "voting_timedout" );
|
|
if( isDefined( level.next_map ))
|
|
{
|
|
break;
|
|
}
|
|
if( isDefined( level.map1_map ))
|
|
{
|
|
self.map1_image Destroy();
|
|
self.map1_image = self createrectangle( "CENTER", "CENTER", -170, -80, 145, 75, (1, 1, 1), "loadscreen_" + level.map1_map, 1, 100 );
|
|
self.map1_image.foreground = 1;
|
|
if( !isDefined( self.map1_text ))
|
|
{
|
|
self.map1_text = drawText( get_vote_count( level.map1_map, level.map1_votes, level.map1_gametype ), "default", 1.6, -40, 100, (1, 1, 1), 1, (0, 0, 0), 3, 1 );
|
|
}
|
|
self.map1_text setText( get_vote_count( level.map1_map, level.map1_votes, level.map1_gametype ));
|
|
self.map1_text.foreground = 1;
|
|
}
|
|
if( isDefined( level.map2_map ))
|
|
{
|
|
self.map2_image Destroy();
|
|
self.map2_image = self createrectangle( "CENTER", "CENTER", -170, -80, 145, 75, (1, 1, 1), "loadscreen_" + level.map2_map, 1, 100 );
|
|
self.map2_image.foreground = 1;
|
|
if( !isDefined( self.map1_text ))
|
|
{
|
|
self.map2_text = drawText( get_vote_count( level.map2_map, level.map2_votes, level.map2_gametype ), "default", 1.6, -40, 180, (1, 1, 1), 1, (0, 0, 0), 3, 1 );
|
|
}
|
|
self.map2_text setText( get_vote_count( level.map2_map, level.map2_votes, level.map2_gametype ));
|
|
self.map2_text.foreground = 1;
|
|
}
|
|
if( isDefined( level.map3_map ))
|
|
{
|
|
self.map3_image Destroy();
|
|
self.map3_image = self createrectangle( "CENTER", "CENTER", -170, -80, 145, 75, (1, 1, 1), "loadscreen_" + level.map3_map, 1, 100 );
|
|
self.map3_image.foreground = 1;
|
|
if( !isDefined( self.map3_text ))
|
|
{
|
|
self.map3_text = drawText( get_vote_count( level.map3_map, level.map3_votes, level.map3_gametype ), "default", 1.6, -40, 260, (1, 1, 1), 1, (0, 0, 0), 3, 1 );
|
|
}
|
|
self.map3_text setText( get_vote_count( level.map3_map, level.map3_votes, level.map3_gametype ));
|
|
self.map3_text.foreground = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
setup_map_index()
|
|
{
|
|
self.mapIndex = randomintrange( 0, level.map_list.size );
|
|
if( level.map_list[ self.mapIndex ] == getDvar( "mapname" ) && getDvarIntDefault( "stopSameMapVote", 0 ) == 1 )
|
|
{
|
|
return setup_map_index();
|
|
}
|
|
return;
|
|
}
|
|
|
|
map_index_handler( up )
|
|
{
|
|
self.gamemode = random_gamemode( self.gamemode );
|
|
if( level.map_list.size == 1 )
|
|
{
|
|
self.mapIndex = self.mapIndex;
|
|
self.onscreenText setText( self text_handling() );
|
|
return;
|
|
}
|
|
else if( up )
|
|
{
|
|
if( self.mapIndex == ( level.map_list.size - 1 ))
|
|
self.mapIndex = 0;
|
|
else
|
|
self.mapIndex++;
|
|
if( level.map_list[ self.mapIndex ] == getDvar( "mapname" ) && getDvarIntDefault( "stopSameMapVote", 0 ) == 1 )
|
|
{
|
|
self thread map_index_handler( 1 );
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if( self.mapIndex == 0 )
|
|
self.mapIndex = level.map_list.size - 1;
|
|
else
|
|
self.mapIndex--;
|
|
if( level.map_list[ self.mapIndex ] == getDvar( "mapname" ) && getDvarIntDefault( "stopSameMapVote", 0 ) == 1 )
|
|
{
|
|
self thread map_index_handler( 0 );
|
|
return;
|
|
}
|
|
}
|
|
self.mapImage Destroy();
|
|
self.mapImage = self createrectangle( "CENTER", "CENTER", 0, 0, 500, 250, (1, 1, 1), "loadscreen_" + level.map_list[ self.mapIndex ], 1, 100 );
|
|
self.mapImage.foreground = 1;
|
|
self.onscreenText setText( self text_handling() );
|
|
}
|
|
|
|
setup_next_map()
|
|
{
|
|
level.timerText Destroy();
|
|
wait 4;
|
|
foreach( player in level.players )
|
|
{
|
|
player.info_text Destroy();
|
|
player.map1_text Destroy();
|
|
player.map2_text Destroy();
|
|
player.map3_text Destroy();
|
|
player.map1_image Destroy();
|
|
player.map2_image Destroy();
|
|
player.map3_image Destroy();
|
|
}
|
|
if( level.map1_votes > level.map2_votes && level.map1_votes > level.map3_votes )
|
|
{
|
|
level.next_map = level.map1_map;
|
|
level.next_gametype = level.map1_gametype;
|
|
}
|
|
else if( level.map2_votes > level.map1_votes && level.map2_votes > level.map3_votes )
|
|
{
|
|
level.next_map = level.map2_map;
|
|
level.next_gametype = level.map2_gametype;
|
|
}
|
|
else if( level.map3_votes > level.map1_votes && level.map3_votes > level.map2_votes )
|
|
{
|
|
level.next_map = level.map3_map;
|
|
level.next_gametype = level.map3_gametype;
|
|
}
|
|
else if( level.map1_votes == level.map2_votes && level.map1_votes > level.map3_votes )
|
|
{
|
|
if( randomintrange( 0, 1 ) == 1 )
|
|
{
|
|
level.next_map = level.map1_map;
|
|
level.next_gametype = level.map1_gametype;
|
|
}
|
|
else
|
|
{
|
|
level.next_map = level.map2_map;
|
|
level.next_gametype = level.map2_gametype;
|
|
}
|
|
}
|
|
else if( level.map1_votes == level.map3_votes && level.map1_votes > level.map2_votes )
|
|
{
|
|
if( randomintrange( 0, 1 ) == 1 )
|
|
{
|
|
level.next_map = level.map1_map;
|
|
level.next_gametype = level.map1_gametype;
|
|
}
|
|
else
|
|
{
|
|
level.next_map = level.map3_map;
|
|
level.next_gametype = level.map3_gametype;
|
|
}
|
|
}
|
|
else if( level.map2_votes == level.map3_votes && level.map2_votes > level.map1_votes )
|
|
{
|
|
if( randomintrange( 0, 1 ) == 1 )
|
|
{
|
|
level.next_map = level.map2_map;
|
|
level.next_gametype = level.map2_gametype;
|
|
}
|
|
else
|
|
{
|
|
level.next_map = level.map3_map;
|
|
level.next_gametype = level.map3_gametype;
|
|
}
|
|
}
|
|
else if( level.map1_votes == level.map2_votes && level.map1_votes == level.map3_votes && level.map1_votes > 0 )
|
|
{
|
|
random_int = randomIntRange( 0, 2 );
|
|
if( random_int == 0 )
|
|
{
|
|
level.next_map = level.map1_map;
|
|
level.next_gametype = level.map1_gametype;
|
|
}
|
|
else if( random_int == 0 )
|
|
{
|
|
level.next_map = level.map2_map;
|
|
level.next_gametype = level.map2_gametype;
|
|
}
|
|
else
|
|
{
|
|
level.next_map = level.map3_map;
|
|
level.next_gametype = level.map3_gametype;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
level.next_map = level.map_list[ randomintrange( 0, level.map_list.size )];
|
|
level.next_gametype = random_gamemode();
|
|
}
|
|
setDvar( "sv_maprotation", "exec " + level.next_gametype + ".cfg map " + level.next_map );
|
|
foreach( player in level.players )
|
|
{
|
|
player.mapImage Destroy();
|
|
player.mapImage = player createrectangle( "CENTER", "CENTER", 0, 0, 500, 250, (1, 1, 1), "loadscreen_" + level.next_map, 1, 100 );
|
|
player.mapImage.foreground = 1;
|
|
player.onscreenText setText( "Next Map: ^3" + get_map_name( level.next_map ) + " - " + get_gametype_name( level.next_gametype ));
|
|
}
|
|
wait 3;
|
|
foreach( player in level.players )
|
|
{
|
|
player.background Destroy();
|
|
player.mapImage Destroy();
|
|
player.map1_text Destroy();
|
|
player.map2_text Destroy();
|
|
player.map3_text Destroy();
|
|
player.map1_image Destroy();
|
|
player.map2_image Destroy();
|
|
player.map3_image Destroy();
|
|
player.onscreenText Destroy();
|
|
player.textBackground Destroy();
|
|
}
|
|
level notify( "mapvote_ended" );
|
|
}
|
|
|
|
text_handling()
|
|
{
|
|
if( !isDefined( self.end_voting ))
|
|
return "[{+speed_throw}] Press ^3[{+gostand}]^7 to Vote for ^3" + get_map_name( level.map_list[ self.mapIndex ] ) + " - " + get_gametype_name( self.gamemode ) + " [{+attack}]";
|
|
else if( !isDefined( level.next_map ))
|
|
return "Voted for ^3" + get_map_name( level.map_list[ self.mapIndex ] ) + " - " + get_gametype_name( self.gamemode );
|
|
}
|
|
|
|
random_gamemode( gamemode )
|
|
{
|
|
if( level.gametype_list.size > 0 )
|
|
{
|
|
i = randomintrange( 0, level.gametype_list.size );
|
|
return level.gametype_list[ i ];
|
|
}
|
|
else
|
|
return getDvar( "ui_gametype" );
|
|
}
|
|
|
|
playbombsound()
|
|
{
|
|
foreach( player in level.players )
|
|
player playsound("mpl_sab_ui_suitcasebomb_timer");
|
|
}
|
|
|
|
get_vote_count( map, votecount, gametype )
|
|
{
|
|
return "^3" + get_map_name( map ) + "\n" + get_gametype_name( gametype ) + "\n^7[ ^3" + votecount + " ^7/ ^3" + ( level.players.size - level.numberOfBots ) + " ^7]";
|
|
}
|
|
|
|
get_info_text()
|
|
{
|
|
return getDvar( "discordLink" );
|
|
}
|
|
|
|
get_gametype_name( gametype )
|
|
{
|
|
switch( gametype )
|
|
{
|
|
case "customgamemode":
|
|
return "Custom Gamemode";
|
|
case "conf":
|
|
return "Kill Confirmed";
|
|
case "ctf":
|
|
return "Capture The Flag";
|
|
case "dem":
|
|
return "Demolition";
|
|
case "dm":
|
|
return "Free-For-All";
|
|
case "dom":
|
|
return "Domination";
|
|
case "gun":
|
|
return "Gun Game";
|
|
case "hq":
|
|
return "Headquarters";
|
|
case "koth":
|
|
return "Hardpoint";
|
|
case "oic":
|
|
return "One In The Chamber";
|
|
case "oneflag":
|
|
return "One Flag CTF";
|
|
case "sas":
|
|
return "Sticks & Stones";
|
|
case "sd":
|
|
return "Search & Destroy";
|
|
case "shrp":
|
|
return "Sharpshooter";
|
|
case "tdm":
|
|
return "Team Deathmatch";
|
|
default:
|
|
return "Invalid";
|
|
}
|
|
}
|
|
|
|
get_map_name( mapname )
|
|
{
|
|
switch( mapname )
|
|
{
|
|
case "mp_la":
|
|
return "Aftermath";
|
|
case "mp_dockside":
|
|
return "Cargo";
|
|
case "mp_carrier":
|
|
return "Carrier";
|
|
case "mp_drone":
|
|
return "Drone";
|
|
case "mp_express":
|
|
return "Express";
|
|
case "mp_hijacked":
|
|
return "Hijacked";
|
|
case "mp_meltdown":
|
|
return "Meltdown";
|
|
case "mp_overflow":
|
|
return "Overflow";
|
|
case "mp_nightclub":
|
|
return "Plaza";
|
|
case "mp_raid":
|
|
return "Raid";
|
|
case "mp_slums":
|
|
return "Slums";
|
|
case "mp_village":
|
|
return "Standoff";
|
|
case "mp_turbine":
|
|
return "Turbine";
|
|
case "mp_socotra":
|
|
return "Yemen";
|
|
case "mp_nuketown_2020":
|
|
return "Nuketown";
|
|
case "mp_downhill":
|
|
return "Downhill";
|
|
case "mp_mirage":
|
|
return "Mirage";
|
|
case "mp_hydro":
|
|
return "Hydro";
|
|
case "mp_skate":
|
|
return "Grind";
|
|
case "mp_concert":
|
|
return "Encore";
|
|
case "mp_magma":
|
|
return "Magma";
|
|
case "mp_vertigo":
|
|
return "Vertigo";
|
|
case "mp_studio":
|
|
return "Studio";
|
|
case "mp_uplink":
|
|
return "Uplink";
|
|
case "mp_bridge":
|
|
return "Detour";
|
|
case "mp_castaway":
|
|
return "Cove";
|
|
case "mp_paintball":
|
|
return "Rush";
|
|
case "mp_dig":
|
|
return "Dig";
|
|
case "mp_frostbite":
|
|
return "Frost";
|
|
case "mp_pod":
|
|
return "Pod";
|
|
case "mp_takeoff":
|
|
return "Takeoff";
|
|
default:
|
|
return "Invalid";
|
|
}
|
|
}
|
|
|
|
// end mapvote functions//
|
|
|
|
initfinalkillcam()
|
|
{
|
|
level.finalkillcamsettings = [];
|
|
initfinalkillcamteam( "none" );
|
|
foreach ( team in level.teams )
|
|
{
|
|
initfinalkillcamteam( team );
|
|
}
|
|
level.finalkillcam_winner = undefined;
|
|
}
|
|
|
|
initfinalkillcamteam( team )
|
|
{
|
|
level.finalkillcamsettings[ team ] = spawnstruct();
|
|
clearfinalkillcamteam( team );
|
|
}
|
|
|
|
clearfinalkillcamteam( team )
|
|
{
|
|
level.finalkillcamsettings[ team ].spectatorclient = undefined;
|
|
level.finalkillcamsettings[ team ].weapon = undefined;
|
|
level.finalkillcamsettings[ team ].deathtime = undefined;
|
|
level.finalkillcamsettings[ team ].deathtimeoffset = undefined;
|
|
level.finalkillcamsettings[ team ].offsettime = undefined;
|
|
level.finalkillcamsettings[ team ].entityindex = undefined;
|
|
level.finalkillcamsettings[ team ].targetentityindex = undefined;
|
|
level.finalkillcamsettings[ team ].entitystarttime = undefined;
|
|
level.finalkillcamsettings[ team ].perks = undefined;
|
|
level.finalkillcamsettings[ team ].killstreaks = undefined;
|
|
level.finalkillcamsettings[ team ].attacker = undefined;
|
|
}
|
|
|
|
recordkillcamsettings( spectatorclient, targetentityindex, sweapon, deathtime, deathtimeoffset, offsettime, entityindex, entitystarttime, perks, killstreaks, attacker )
|
|
{
|
|
if ( level.teambased && isDefined( attacker.team ) && isDefined( level.teams[ attacker.team ] ) )
|
|
{
|
|
team = attacker.team;
|
|
level.finalkillcamsettings[ team ].spectatorclient = spectatorclient;
|
|
level.finalkillcamsettings[ team ].weapon = sweapon;
|
|
level.finalkillcamsettings[ team ].deathtime = deathtime;
|
|
level.finalkillcamsettings[ team ].deathtimeoffset = deathtimeoffset;
|
|
level.finalkillcamsettings[ team ].offsettime = offsettime;
|
|
level.finalkillcamsettings[ team ].entityindex = entityindex;
|
|
level.finalkillcamsettings[ team ].targetentityindex = targetentityindex;
|
|
level.finalkillcamsettings[ team ].entitystarttime = entitystarttime;
|
|
level.finalkillcamsettings[ team ].perks = perks;
|
|
level.finalkillcamsettings[ team ].killstreaks = killstreaks;
|
|
level.finalkillcamsettings[ team ].attacker = attacker;
|
|
}
|
|
level.finalkillcamsettings[ "none" ].spectatorclient = spectatorclient;
|
|
level.finalkillcamsettings[ "none" ].weapon = sweapon;
|
|
level.finalkillcamsettings[ "none" ].deathtime = deathtime;
|
|
level.finalkillcamsettings[ "none" ].deathtimeoffset = deathtimeoffset;
|
|
level.finalkillcamsettings[ "none" ].offsettime = offsettime;
|
|
level.finalkillcamsettings[ "none" ].entityindex = entityindex;
|
|
level.finalkillcamsettings[ "none" ].targetentityindex = targetentityindex;
|
|
level.finalkillcamsettings[ "none" ].entitystarttime = entitystarttime;
|
|
level.finalkillcamsettings[ "none" ].perks = perks;
|
|
level.finalkillcamsettings[ "none" ].killstreaks = killstreaks;
|
|
level.finalkillcamsettings[ "none" ].attacker = attacker;
|
|
}
|
|
|
|
erasefinalkillcam()
|
|
{
|
|
clearfinalkillcamteam( "none" );
|
|
foreach ( team in level.teams )
|
|
{
|
|
clearfinalkillcamteam( team );
|
|
}
|
|
level.finalkillcam_winner = undefined;
|
|
}
|
|
|
|
finalkillcamwaiter()
|
|
{
|
|
if ( !isDefined( level.finalkillcam_winner ) )
|
|
{
|
|
return 0;
|
|
}
|
|
level waittill( "final_killcam_done" );
|
|
return 1;
|
|
}
|
|
|
|
postroundfinalkillcam()
|
|
{
|
|
if ( is_true( level.sidebet ) )
|
|
{
|
|
return;
|
|
}
|
|
level notify( "play_final_killcam" );
|
|
maps/mp/gametypes/_globallogic::resetoutcomeforallplayers();
|
|
finalkillcamwaiter();
|
|
}
|
|
|
|
dofinalkillcam()
|
|
{
|
|
level waittill( "play_final_killcam" );
|
|
level.infinalkillcam = 1;
|
|
winner = "none";
|
|
if ( isDefined( level.finalkillcam_winner ) )
|
|
{
|
|
winner = level.finalkillcam_winner;
|
|
}
|
|
if ( !isDefined( level.finalkillcamsettings[ winner ].targetentityindex ) )
|
|
{
|
|
level.infinalkillcam = 0;
|
|
|
|
// this is where we do mapvote stuff?
|
|
if(waslastround()) {
|
|
foreach (player in level.players)
|
|
player FreezeControls(true);
|
|
wait .6;
|
|
visionsetnaked(getDvar("mapname"), 0);
|
|
|
|
foreach(player in level.players) {
|
|
player closemenu();
|
|
player closeingamemenu();
|
|
player.sessionstate = "spectator";
|
|
player.spectatorclient = -1;
|
|
}
|
|
start_mapvote();
|
|
level waittill( "mapvote_ended" );
|
|
wait 2.5;
|
|
foreach (player in level.players)
|
|
player SetBlur(0.1, 0);
|
|
visionsetnaked(getDvar("mapname"), 0);
|
|
}
|
|
|
|
level notify( "final_killcam_done" );
|
|
return;
|
|
}
|
|
if ( isDefined( level.finalkillcamsettings[ winner ].attacker ) )
|
|
{
|
|
maps/mp/_challenges::getfinalkill( level.finalkillcamsettings[ winner ].attacker );
|
|
}
|
|
visionsetnaked( getDvar( "mapname" ), 0 );
|
|
players = level.players;
|
|
for ( index=0; index < players.size; index++ )
|
|
{
|
|
player = players[ index ];
|
|
player closemenu();
|
|
player closeingamemenu();
|
|
player thread finalkillcam( winner );
|
|
}
|
|
wait 0.1;
|
|
while ( areanyplayerswatchingthekillcam() )
|
|
{
|
|
wait 0.05;
|
|
}
|
|
// this is where we do mapvote stuff?
|
|
// this is where we do mapvote stuff?
|
|
if(waslastround()) {
|
|
foreach (player in level.players)
|
|
player FreezeControls(true);
|
|
wait .6;
|
|
visionsetnaked(getDvar("mapname"), 0);
|
|
|
|
foreach(player in level.players) {
|
|
player closemenu();
|
|
player closeingamemenu();
|
|
player.sessionstate = "spectator";
|
|
player.spectatorclient = -1;
|
|
}
|
|
start_mapvote();
|
|
level waittill( "mapvote_ended" );
|
|
wait 2.5;
|
|
foreach ( player in level.players )
|
|
player SetBlur(0.1, 0);
|
|
visionsetnaked(getDvar("mapname"), 0);
|
|
}
|
|
level notify( "final_killcam_done" );
|
|
level.infinalkillcam = 0;
|
|
}
|
|
|
|
startlastkillcam()
|
|
{
|
|
}
|
|
|
|
areanyplayerswatchingthekillcam()
|
|
{
|
|
players = level.players;
|
|
for ( index = 0; index < players.size; index++ )
|
|
{
|
|
player = players[ index ];
|
|
if ( isDefined( player.killcam ) )
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
killcam( attackernum, targetnum, killcamentity, killcamentityindex, killcamentitystarttime, sweapon, deathtime, deathtimeoffset, offsettime, respawn, maxtime, perks, killstreaks, attacker )
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "spawned" );
|
|
level endon( "game_ended" );
|
|
if ( attackernum < 0 )
|
|
{
|
|
return;
|
|
}
|
|
postdeathdelay = ( getTime() - deathtime ) / 1000;
|
|
predelay = postdeathdelay + deathtimeoffset;
|
|
camtime = calckillcamtime( sweapon, killcamentitystarttime, predelay, respawn, maxtime );
|
|
postdelay = calcpostdelay();
|
|
killcamlength = camtime + postdelay;
|
|
if ( isDefined( maxtime ) && killcamlength > maxtime )
|
|
{
|
|
if ( maxtime < 2 )
|
|
{
|
|
return;
|
|
}
|
|
if ( ( maxtime - camtime ) >= 1 )
|
|
{
|
|
postdelay = maxtime - camtime;
|
|
}
|
|
else
|
|
{
|
|
postdelay = 1;
|
|
camtime = maxtime - 1;
|
|
}
|
|
killcamlength = camtime + postdelay;
|
|
}
|
|
killcamoffset = camtime + predelay;
|
|
self notify( "begin_killcam" );
|
|
killcamstarttime = getTime() - ( killcamoffset * 1000 );
|
|
self.sessionstate = "spectator";
|
|
self.spectatorclient = attackernum;
|
|
self.killcamentity = -1;
|
|
if ( killcamentityindex >= 0 )
|
|
{
|
|
self thread setkillcamentity( killcamentityindex, killcamentitystarttime - killcamstarttime - 100 );
|
|
}
|
|
self.killcamtargetentity = targetnum;
|
|
self.archivetime = killcamoffset;
|
|
self.killcamlength = killcamlength;
|
|
self.psoffsettime = offsettime;
|
|
recordkillcamsettings( attackernum, targetnum, sweapon, deathtime, deathtimeoffset, offsettime, killcamentityindex, killcamentitystarttime, perks, killstreaks, attacker );
|
|
foreach ( team in level.teams )
|
|
{
|
|
self allowspectateteam( team, 1 );
|
|
}
|
|
self allowspectateteam( "freelook", 1 );
|
|
self allowspectateteam( "none", 1 );
|
|
self thread endedkillcamcleanup();
|
|
wait 0.05;
|
|
if ( self.archivetime <= predelay )
|
|
{
|
|
self.sessionstate = "dead";
|
|
self.spectatorclient = -1;
|
|
self.killcamentity = -1;
|
|
self.archivetime = 0;
|
|
self.psoffsettime = 0;
|
|
self notify( "end_killcam" );
|
|
return;
|
|
}
|
|
self thread checkforabruptkillcamend();
|
|
self.killcam = 1;
|
|
self addkillcamskiptext( respawn );
|
|
if ( !self issplitscreen() && level.perksenabled == 1 )
|
|
{
|
|
self addkillcamtimer( camtime );
|
|
self maps/mp/gametypes/_hud_util::showperks();
|
|
}
|
|
self thread spawnedkillcamcleanup();
|
|
self thread waitskipkillcambutton();
|
|
self thread waitteamchangeendkillcam();
|
|
self thread waitkillcamtime();
|
|
self thread maps/mp/_tacticalinsertion::cancel_button_think();
|
|
self waittill( "end_killcam" );
|
|
self endkillcam( 0 );
|
|
self.sessionstate = "dead";
|
|
self.spectatorclient = -1;
|
|
self.killcamentity = -1;
|
|
self.archivetime = 0;
|
|
self.psoffsettime = 0;
|
|
}
|
|
|
|
setkillcamentity( killcamentityindex, delayms )
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "end_killcam" );
|
|
self endon( "spawned" );
|
|
if ( delayms > 0 )
|
|
{
|
|
wait ( delayms / 1000 );
|
|
}
|
|
self.killcamentity = killcamentityindex;
|
|
}
|
|
|
|
waitkillcamtime()
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "end_killcam" );
|
|
wait ( self.killcamlength - 0.05 );
|
|
self notify( "end_killcam" );
|
|
}
|
|
|
|
waitfinalkillcamslowdown( deathtime, starttime )
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "end_killcam" );
|
|
secondsuntildeath = ( deathtime - starttime ) / 1000;
|
|
deathtime = getTime() + ( secondsuntildeath * 1000 );
|
|
waitbeforedeath = 2;
|
|
maps/mp/_utility::setclientsysstate( "levelNotify", "fkcb" );
|
|
wait max( 0, secondsuntildeath - waitbeforedeath );
|
|
setslowmotion( 1, 0.25, waitbeforedeath );
|
|
wait ( waitbeforedeath + 0.5 );
|
|
setslowmotion( 0.25, 1, 1 );
|
|
wait 0.5;
|
|
maps/mp/_utility::setclientsysstate( "levelNotify", "fkce" );
|
|
}
|
|
|
|
waitskipkillcambutton()
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "end_killcam" );
|
|
while ( self usebuttonpressed() )
|
|
{
|
|
wait 0.05;
|
|
}
|
|
while ( !self usebuttonpressed() )
|
|
{
|
|
wait 0.05;
|
|
}
|
|
self notify( "end_killcam" );
|
|
self clientnotify( "fkce" );
|
|
}
|
|
|
|
waitteamchangeendkillcam()
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "end_killcam" );
|
|
self waittill( "changed_class" );
|
|
endkillcam( 0 );
|
|
}
|
|
|
|
waitskipkillcamsafespawnbutton()
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "end_killcam" );
|
|
while ( self fragbuttonpressed() )
|
|
{
|
|
wait 0.05;
|
|
}
|
|
while ( !self fragbuttonpressed() )
|
|
{
|
|
wait 0.05;
|
|
}
|
|
self.wantsafespawn = 1;
|
|
self notify( "end_killcam" );
|
|
}
|
|
|
|
endkillcam( final )
|
|
{
|
|
if ( isDefined( self.kc_skiptext ) )
|
|
{
|
|
self.kc_skiptext.alpha = 0;
|
|
}
|
|
if ( isDefined( self.kc_timer ) )
|
|
{
|
|
self.kc_timer.alpha = 0;
|
|
}
|
|
self.killcam = undefined;
|
|
if ( !self issplitscreen() )
|
|
{
|
|
self hideallperks();
|
|
}
|
|
self thread maps/mp/gametypes/_spectating::setspectatepermissions();
|
|
}
|
|
|
|
checkforabruptkillcamend()
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "end_killcam" );
|
|
while ( 1 )
|
|
{
|
|
if ( self.archivetime <= 0 )
|
|
{
|
|
break;
|
|
}
|
|
wait 0.05;
|
|
}
|
|
self notify( "end_killcam" );
|
|
}
|
|
|
|
spawnedkillcamcleanup()
|
|
{
|
|
self endon( "end_killcam" );
|
|
self endon( "disconnect" );
|
|
self waittill( "spawned" );
|
|
self endkillcam( 0 );
|
|
}
|
|
|
|
spectatorkillcamcleanup( attacker )
|
|
{
|
|
self endon( "end_killcam" );
|
|
self endon( "disconnect" );
|
|
attacker endon( "disconnect" );
|
|
attacker waittill( "begin_killcam", attackerkcstarttime );
|
|
waittime = max( 0, attackerkcstarttime - self.deathtime - 50 );
|
|
wait waittime;
|
|
self endkillcam( 0 );
|
|
}
|
|
|
|
endedkillcamcleanup()
|
|
{
|
|
self endon( "end_killcam" );
|
|
self endon( "disconnect" );
|
|
level waittill( "game_ended" );
|
|
self endkillcam( 0 );
|
|
}
|
|
|
|
endedfinalkillcamcleanup()
|
|
{
|
|
self endon( "end_killcam" );
|
|
self endon( "disconnect" );
|
|
level waittill( "game_ended" );
|
|
self endkillcam( 1 );
|
|
}
|
|
|
|
cancelkillcamusebutton()
|
|
{
|
|
return self usebuttonpressed();
|
|
}
|
|
|
|
cancelkillcamsafespawnbutton()
|
|
{
|
|
return self fragbuttonpressed();
|
|
}
|
|
|
|
cancelkillcamcallback()
|
|
{
|
|
self.cancelkillcam = 1;
|
|
}
|
|
|
|
cancelkillcamsafespawncallback()
|
|
{
|
|
self.cancelkillcam = 1;
|
|
self.wantsafespawn = 1;
|
|
}
|
|
|
|
cancelkillcamonuse()
|
|
{
|
|
self thread cancelkillcamonuse_specificbutton( ::cancelkillcamusebutton, ::cancelkillcamcallback );
|
|
}
|
|
|
|
cancelkillcamonuse_specificbutton( pressingbuttonfunc, finishedfunc )
|
|
{
|
|
self endon( "death_delay_finished" );
|
|
self endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
for ( ;; )
|
|
{
|
|
if ( !self [[ pressingbuttonfunc ]]() )
|
|
{
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
buttontime = 0;
|
|
while ( self [[ pressingbuttonfunc ]]() )
|
|
{
|
|
buttontime += 0.05;
|
|
wait 0.05;
|
|
}
|
|
if ( buttontime >= 0.5 )
|
|
{
|
|
continue;
|
|
}
|
|
buttontime = 0;
|
|
while ( !( self [[ pressingbuttonfunc ]]() ) && buttontime < 0.5 )
|
|
{
|
|
buttontime += 0.05;
|
|
wait 0.05;
|
|
}
|
|
if ( buttontime >= 0.5 )
|
|
{
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
self [[ finishedfunc ]]();
|
|
return;
|
|
}
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
finalkillcam( winner )
|
|
{
|
|
self endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
if ( waslastround() )
|
|
{
|
|
setmatchflag( "final_killcam", 1 );
|
|
setmatchflag( "round_end_killcam", 0 );
|
|
}
|
|
else
|
|
{
|
|
setmatchflag( "final_killcam", 0 );
|
|
setmatchflag( "round_end_killcam", 1 );
|
|
}
|
|
/*
|
|
/#
|
|
if ( getDvarInt( "scr_force_finalkillcam" ) == 1 )
|
|
{
|
|
setmatchflag( "final_killcam", 1 );
|
|
setmatchflag( "round_end_killcam", 0 );
|
|
#/
|
|
}
|
|
*/
|
|
if ( level.console )
|
|
{
|
|
self maps/mp/gametypes/_globallogic_spawn::setthirdperson( 0 );
|
|
}
|
|
killcamsettings = level.finalkillcamsettings[ winner ];
|
|
postdeathdelay = ( getTime() - killcamsettings.deathtime ) / 1000;
|
|
predelay = postdeathdelay + killcamsettings.deathtimeoffset;
|
|
camtime = calckillcamtime( killcamsettings.weapon, killcamsettings.entitystarttime, predelay, 0, undefined );
|
|
postdelay = calcpostdelay();
|
|
killcamoffset = camtime + predelay;
|
|
killcamlength = ( camtime + postdelay ) - 0.05;
|
|
killcamstarttime = getTime() - ( killcamoffset * 1000 );
|
|
self notify( "begin_killcam" );
|
|
self.sessionstate = "spectator";
|
|
self.spectatorclient = killcamsettings.spectatorclient;
|
|
self.killcamentity = -1;
|
|
if ( killcamsettings.entityindex >= 0 )
|
|
{
|
|
self thread setkillcamentity( killcamsettings.entityindex, killcamsettings.entitystarttime - killcamstarttime - 100 );
|
|
}
|
|
self.killcamtargetentity = killcamsettings.targetentityindex;
|
|
self.archivetime = killcamoffset;
|
|
self.killcamlength = killcamlength;
|
|
self.psoffsettime = killcamsettings.offsettime;
|
|
foreach ( team in level.teams )
|
|
{
|
|
self allowspectateteam( team, 1 );
|
|
}
|
|
self allowspectateteam( "freelook", 1 );
|
|
self allowspectateteam( "none", 1 );
|
|
self thread endedfinalkillcamcleanup();
|
|
wait 0.05;
|
|
if ( self.archivetime <= predelay )
|
|
{
|
|
self.sessionstate = "dead";
|
|
self.spectatorclient = -1;
|
|
self.killcamentity = -1;
|
|
self.archivetime = 0;
|
|
self.psoffsettime = 0;
|
|
self notify( "end_killcam" );
|
|
return;
|
|
}
|
|
self thread checkforabruptkillcamend();
|
|
self.killcam = 1;
|
|
if ( !self issplitscreen() )
|
|
{
|
|
self addkillcamtimer( camtime );
|
|
}
|
|
self thread waitkillcamtime();
|
|
self thread waitfinalkillcamslowdown( level.finalkillcamsettings[ winner ].deathtime, killcamstarttime );
|
|
self waittill( "end_killcam" );
|
|
self endkillcam( 1 );
|
|
setmatchflag( "final_killcam", 0 );
|
|
setmatchflag( "round_end_killcam", 0 );
|
|
self spawnendoffinalkillcam();
|
|
}
|
|
|
|
spawnendoffinalkillcam()
|
|
{
|
|
[[ level.spawnspectator ]]();
|
|
self freezecontrols( 1 );
|
|
}
|
|
|
|
iskillcamentityweapon( sweapon )
|
|
{
|
|
if ( sweapon == "planemortar_mp" )
|
|
{
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
iskillcamgrenadeweapon( sweapon )
|
|
{
|
|
if ( sweapon == "frag_grenade_mp" )
|
|
{
|
|
return 1;
|
|
}
|
|
else if ( sweapon == "frag_grenade_short_mp" )
|
|
{
|
|
return 1;
|
|
}
|
|
else if ( sweapon == "sticky_grenade_mp" )
|
|
{
|
|
return 1;
|
|
}
|
|
else if ( sweapon == "tabun_gas_mp" )
|
|
{
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
calckillcamtime( sweapon, entitystarttime, predelay, respawn, maxtime )
|
|
{
|
|
camtime = 0;
|
|
if ( getDvar( "scr_killcam_time" ) == "" )
|
|
{
|
|
if ( iskillcamentityweapon( sweapon ) )
|
|
{
|
|
camtime = ( ( getTime() - entitystarttime ) / 1000 ) - predelay - 0.1;
|
|
}
|
|
else if ( !respawn )
|
|
{
|
|
camtime = 5;
|
|
}
|
|
else if ( iskillcamgrenadeweapon( sweapon ) )
|
|
{
|
|
camtime = 4.25;
|
|
}
|
|
else
|
|
{
|
|
camtime = 2.5;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
camtime = getDvarFloat( "scr_killcam_time" );
|
|
}
|
|
if ( isDefined( maxtime ) )
|
|
{
|
|
if ( camtime > maxtime )
|
|
{
|
|
camtime = maxtime;
|
|
}
|
|
if ( camtime < 0.05 )
|
|
{
|
|
camtime = 0.05;
|
|
}
|
|
}
|
|
return camtime;
|
|
}
|
|
|
|
calcpostdelay()
|
|
{
|
|
postdelay = 0;
|
|
if ( getDvar( "scr_killcam_posttime" ) == "" )
|
|
{
|
|
postdelay = 2;
|
|
}
|
|
else
|
|
{
|
|
postdelay = getDvarFloat( "scr_killcam_posttime" );
|
|
if ( postdelay < 0.05 )
|
|
{
|
|
postdelay = 0.05;
|
|
}
|
|
}
|
|
return postdelay;
|
|
}
|
|
|
|
addkillcamskiptext( respawn )
|
|
{
|
|
if ( !isDefined( self.kc_skiptext ) )
|
|
{
|
|
self.kc_skiptext = newclienthudelem( self );
|
|
self.kc_skiptext.archived = 0;
|
|
self.kc_skiptext.x = 0;
|
|
self.kc_skiptext.alignx = "center";
|
|
self.kc_skiptext.aligny = "middle";
|
|
self.kc_skiptext.horzalign = "center";
|
|
self.kc_skiptext.vertalign = "bottom";
|
|
self.kc_skiptext.sort = 1;
|
|
self.kc_skiptext.font = "objective";
|
|
}
|
|
if ( self issplitscreen() )
|
|
{
|
|
self.kc_skiptext.y = -100;
|
|
self.kc_skiptext.fontscale = 1.4;
|
|
}
|
|
else
|
|
{
|
|
self.kc_skiptext.y = -120;
|
|
self.kc_skiptext.fontscale = 2;
|
|
}
|
|
if ( respawn )
|
|
{
|
|
self.kc_skiptext settext( &"PLATFORM_PRESS_TO_RESPAWN" );
|
|
}
|
|
else
|
|
{
|
|
self.kc_skiptext settext( &"PLATFORM_PRESS_TO_SKIP" );
|
|
}
|
|
self.kc_skiptext.alpha = 1;
|
|
}
|
|
|
|
addkillcamtimer( camtime )
|
|
{
|
|
}
|
|
|
|
initkcelements()
|
|
{
|
|
if ( !isDefined( self.kc_skiptext ) )
|
|
{
|
|
self.kc_skiptext = newclienthudelem( self );
|
|
self.kc_skiptext.archived = 0;
|
|
self.kc_skiptext.x = 0;
|
|
self.kc_skiptext.alignx = "center";
|
|
self.kc_skiptext.aligny = "top";
|
|
self.kc_skiptext.horzalign = "center_adjustable";
|
|
self.kc_skiptext.vertalign = "top_adjustable";
|
|
self.kc_skiptext.sort = 1;
|
|
self.kc_skiptext.font = "default";
|
|
self.kc_skiptext.foreground = 1;
|
|
self.kc_skiptext.hidewheninmenu = 1;
|
|
if ( self issplitscreen() )
|
|
{
|
|
self.kc_skiptext.y = 20;
|
|
self.kc_skiptext.fontscale = 1.2;
|
|
}
|
|
else
|
|
{
|
|
self.kc_skiptext.y = 32;
|
|
self.kc_skiptext.fontscale = 1.8;
|
|
}
|
|
}
|
|
if ( !isDefined( self.kc_othertext ) )
|
|
{
|
|
self.kc_othertext = newclienthudelem( self );
|
|
self.kc_othertext.archived = 0;
|
|
self.kc_othertext.y = 48;
|
|
self.kc_othertext.alignx = "left";
|
|
self.kc_othertext.aligny = "top";
|
|
self.kc_othertext.horzalign = "center";
|
|
self.kc_othertext.vertalign = "middle";
|
|
self.kc_othertext.sort = 10;
|
|
self.kc_othertext.font = "small";
|
|
self.kc_othertext.foreground = 1;
|
|
self.kc_othertext.hidewheninmenu = 1;
|
|
if ( self issplitscreen() )
|
|
{
|
|
self.kc_othertext.x = 16;
|
|
self.kc_othertext.fontscale = 1.2;
|
|
}
|
|
else
|
|
{
|
|
self.kc_othertext.x = 32;
|
|
self.kc_othertext.fontscale = 1.6;
|
|
}
|
|
}
|
|
if ( !isDefined( self.kc_icon ) )
|
|
{
|
|
self.kc_icon = newclienthudelem( self );
|
|
self.kc_icon.archived = 0;
|
|
self.kc_icon.x = 16;
|
|
self.kc_icon.y = 16;
|
|
self.kc_icon.alignx = "left";
|
|
self.kc_icon.aligny = "top";
|
|
self.kc_icon.horzalign = "center";
|
|
self.kc_icon.vertalign = "middle";
|
|
self.kc_icon.sort = 1;
|
|
self.kc_icon.foreground = 1;
|
|
self.kc_icon.hidewheninmenu = 1;
|
|
}
|
|
if ( !self issplitscreen() )
|
|
{
|
|
if ( !isDefined( self.kc_timer ) )
|
|
{
|
|
self.kc_timer = createfontstring( "hudbig", 1 );
|
|
self.kc_timer.archived = 0;
|
|
self.kc_timer.x = 0;
|
|
self.kc_timer.alignx = "center";
|
|
self.kc_timer.aligny = "middle";
|
|
self.kc_timer.horzalign = "center_safearea";
|
|
self.kc_timer.vertalign = "top_adjustable";
|
|
self.kc_timer.y = 42;
|
|
self.kc_timer.sort = 1;
|
|
self.kc_timer.font = "hudbig";
|
|
self.kc_timer.foreground = 1;
|
|
self.kc_timer.color = vectorScale( ( 1, 1, 1 ), 0.85 );
|
|
self.kc_timer.hidewheninmenu = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
createRectangle( align, relative, x, y, width, height, color, shader, sort, alpha, server )
|
|
{
|
|
if( isDefined( server ))
|
|
boxElem = newHudElem();
|
|
else
|
|
boxElem = newClientHudElem( self );
|
|
|
|
boxElem.elemType = "icon";
|
|
boxElem.color = color;
|
|
if( !level.splitScreen )
|
|
{
|
|
boxElem.x = -2;
|
|
boxElem.y = -2;
|
|
}
|
|
boxElem.hideWhenInMenu = true;
|
|
boxElem.archived = false;
|
|
boxElem.width = width;
|
|
boxElem.height = height;
|
|
boxElem.align = align;
|
|
boxElem.relative = relative;
|
|
boxElem.xOffset = 0;
|
|
boxElem.yOffset = 0;
|
|
boxElem.children = [];
|
|
boxElem.sort = sort;
|
|
boxElem.alpha = alpha;
|
|
boxElem.shader = shader;
|
|
boxElem setParent( level.uiParent );
|
|
boxElem setShader( shader, width, height );
|
|
boxElem.hidden = false;
|
|
boxElem setPoint( align, relative, x, y );
|
|
return boxElem;
|
|
}
|
|
|
|
drawText( text, font, fontScale, x, y, color, alpha, glowColor, glowAlpha, sort, server )
|
|
{
|
|
if( isDefined( server ))
|
|
{
|
|
hud = self createServerFontString( font, fontScale );
|
|
}
|
|
else
|
|
{
|
|
hud = self createFontString( font, fontScale );
|
|
}
|
|
hud = self createFontString( font, fontScale );
|
|
hud setText( text );
|
|
hud.x = x;
|
|
hud.y = y;
|
|
hud.color = color;
|
|
hud.alpha = alpha;
|
|
hud.glowColor = glowColor;
|
|
hud.glowAlpha = glowAlpha;
|
|
hud.sort = sort;
|
|
hud.alpha = alpha;
|
|
return hud;
|
|
}
|