checked the remaining 6 gametypes scripts

ctf, dem, dom, hq, koth, and oneflag have all been checked.
This commit is contained in:
JezuzLizard 2020-05-05 12:41:38 -07:00
parent 20883d4bec
commit dd94baef78
7 changed files with 927 additions and 1320 deletions

View File

@ -5,15 +5,19 @@
#include maps/mp/_scoreevents; #include maps/mp/_scoreevents;
#include maps/mp/_popups; #include maps/mp/_popups;
#include maps/mp/gametypes/_globallogic_utils; #include maps/mp/gametypes/_globallogic_utils;
#include maps/mp/gametypes/_hud_message;
#include maps/mp/gametypes/_spawnlogic; #include maps/mp/gametypes/_spawnlogic;
#include maps/mp/gametypes/_spawning; #include maps/mp/gametypes/_spawning;
#include maps/mp/gametypes/_gameobjects;
#include maps/mp/gametypes/_globallogic_score; #include maps/mp/gametypes/_globallogic_score;
#include maps/mp/teams/_teams; #include maps/mp/teams/_teams;
#include maps/mp/gametypes/_globallogic_audio; #include maps/mp/gametypes/_globallogic_audio;
#include maps/mp/gametypes/_callbacksetup;
#include maps/mp/gametypes/_globallogic;
#include maps/mp/gametypes/_hud_util; #include maps/mp/gametypes/_hud_util;
#include maps/mp/_utility; #include maps/mp/_utility;
main() main() //checked matches cerberus output
{ {
if ( getDvar( "mapname" ) == "mp_background" ) if ( getDvar( "mapname" ) == "mp_background" )
{ {
@ -80,7 +84,7 @@ main()
maps/mp/gametypes/_globallogic_audio::registerdialoggroup( "ctf_flag_enemy", 0 ); maps/mp/gametypes/_globallogic_audio::registerdialoggroup( "ctf_flag_enemy", 0 );
} }
onprecachegametype() onprecachegametype() //checked matches cerberus output
{ {
game[ "flag_dropped_sound" ] = "mp_war_objective_lost"; game[ "flag_dropped_sound" ] = "mp_war_objective_lost";
game[ "flag_recovered_sound" ] = "mp_war_objective_taken"; game[ "flag_recovered_sound" ] = "mp_war_objective_taken";
@ -122,15 +126,17 @@ onprecachegametype()
game[ "strings" ][ "score_limit_reached" ] = &"MP_CAP_LIMIT_REACHED"; game[ "strings" ][ "score_limit_reached" ] = &"MP_CAP_LIMIT_REACHED";
} }
onstartgametype() onstartgametype() //checked changed to match cerberus output
{ {
if ( !isDefined( game[ "switchedsides" ] ) ) if ( !isDefined( game[ "switchedsides" ] ) )
{ {
game[ "switchedsides" ] = 0; game[ "switchedsides" ] = 0;
} }
/*
/# /#
setdebugsideswitch( game[ "switchedsides" ] ); setdebugsideswitch( game[ "switchedsides" ] );
#/ #/
*/
setclientnamemode( "auto_change" ); setclientnamemode( "auto_change" );
maps/mp/gametypes/_globallogic_score::resetteamscores(); maps/mp/gametypes/_globallogic_score::resetteamscores();
setobjectivetext( "allies", &"OBJECTIVES_CTF" ); setobjectivetext( "allies", &"OBJECTIVES_CTF" );
@ -189,19 +195,15 @@ onstartgametype()
level.spawn_axis = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_axis" ); level.spawn_axis = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_axis" );
level.spawn_allies = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_allies" ); level.spawn_allies = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_allies" );
level.spawn_start = []; level.spawn_start = [];
_a256 = level.teams; foreach ( team in level.teams )
_k256 = getFirstArrayKey( _a256 );
while ( isDefined( _k256 ) )
{ {
team = _a256[ _k256 ];
level.spawn_start[ team ] = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_" + team + "_start" ); level.spawn_start[ team ] = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_" + team + "_start" );
_k256 = getNextArrayKey( _a256, _k256 );
} }
thread updategametypedvars(); thread updategametypedvars();
thread ctf(); thread ctf();
} }
shouldplayovertimeround() shouldplayovertimeround() //checked matches cerberus output
{ {
if ( isDefined( game[ "overtime_round" ] ) ) if ( isDefined( game[ "overtime_round" ] ) )
{ {
@ -234,7 +236,7 @@ shouldplayovertimeround()
return 0; return 0;
} }
minutesandsecondsstring( milliseconds ) minutesandsecondsstring( milliseconds ) //checked matches cerberus output
{ {
minutes = floor( milliseconds / 60000 ); minutes = floor( milliseconds / 60000 );
milliseconds -= minutes * 60000; milliseconds -= minutes * 60000;
@ -249,7 +251,7 @@ minutesandsecondsstring( milliseconds )
} }
} }
setmatchscorehudelemforteam( team ) setmatchscorehudelemforteam( team ) //checked changed to match cerberus output
{ {
if ( !isDefined( game[ "overtime_round" ] ) ) if ( !isDefined( game[ "overtime_round" ] ) )
{ {
@ -259,21 +261,18 @@ setmatchscorehudelemforteam( team )
{ {
self settext( minutesandsecondsstring( game[ "ctf_overtime_best_time" ] ) ); self settext( minutesandsecondsstring( game[ "ctf_overtime_best_time" ] ) );
} }
else if ( isDefined( game[ "ctf_overtime_first_winner" ] ) && game[ "ctf_overtime_first_winner" ] == team )
{
self settext( minutesandsecondsstring( game[ "ctf_overtime_time_to_beat" ] ) );
return;
}
else else
{ {
if ( isDefined( game[ "ctf_overtime_first_winner" ] ) && game[ "ctf_overtime_first_winner" ] == team ) self settext( &"" );
{
self settext( minutesandsecondsstring( game[ "ctf_overtime_time_to_beat" ] ) );
return;
}
else
{
self settext( &"" );
}
} }
} }
onroundswitch() onroundswitch() //checked matches cerberus output
{ {
if ( !isDefined( game[ "switchedsides" ] ) ) if ( !isDefined( game[ "switchedsides" ] ) )
{ {
@ -283,7 +282,7 @@ onroundswitch()
game[ "switchedsides" ] = !game[ "switchedsides" ]; game[ "switchedsides" ] = !game[ "switchedsides" ];
} }
onendgame( winningteam ) onendgame( winningteam ) //checked changed to match cerberus output
{ {
if ( isDefined( game[ "overtime_round" ] ) ) if ( isDefined( game[ "overtime_round" ] ) )
{ {
@ -294,7 +293,6 @@ onendgame( winningteam )
game[ "ctf_overtime_first_winner" ] = winningteam; game[ "ctf_overtime_first_winner" ] = winningteam;
game[ "ctf_overtime_time_to_beat" ] = maps/mp/gametypes/_globallogic_utils::gettimepassed(); game[ "ctf_overtime_time_to_beat" ] = maps/mp/gametypes/_globallogic_utils::gettimepassed();
} }
return;
} }
else else
{ {
@ -304,7 +302,7 @@ onendgame( winningteam )
} }
} }
onroundendgame( winningteam ) onroundendgame( winningteam ) //checked changed to match cerberus output
{ {
if ( isDefined( game[ "overtime_round" ] ) ) if ( isDefined( game[ "overtime_round" ] ) )
{ {
@ -325,24 +323,17 @@ onroundendgame( winningteam )
level.enddefeatreasontext = &"MPUI_CTF_OVERTIME_DEFEAT_DID_NOT_DEFEND"; level.enddefeatreasontext = &"MPUI_CTF_OVERTIME_DEFEAT_DID_NOT_DEFEND";
} }
} }
else else if ( !isDefined( winningteam ) || winningteam == "tie" )
{ {
if ( !isDefined( winningteam ) || winningteam == "tie" ) return "tie";
{
return "tie";
}
} }
return winningteam; return winningteam;
} }
if ( level.roundscorecarry == 0 ) if ( level.roundscorecarry == 0 )
{ {
_a402 = level.teams; foreach ( team in level.teams )
_k402 = getFirstArrayKey( _a402 );
while ( isDefined( _k402 ) )
{ {
team = _a402[ _k402 ];
[[ level._setteamscore ]]( team, game[ "roundswon" ][ team ] ); [[ level._setteamscore ]]( team, game[ "roundswon" ][ team ] );
_k402 = getNextArrayKey( _a402, _k402 );
} }
winner = maps/mp/gametypes/_globallogic::determineteamwinnerbygamestat( "roundswon" ); winner = maps/mp/gametypes/_globallogic::determineteamwinnerbygamestat( "roundswon" );
} }
@ -353,7 +344,7 @@ onroundendgame( winningteam )
return winner; return winner;
} }
onspawnplayerunified() onspawnplayerunified() //checked matches cerberus output
{ {
self.isflagcarrier = 0; self.isflagcarrier = 0;
self.flagcarried = undefined; self.flagcarried = undefined;
@ -361,7 +352,7 @@ onspawnplayerunified()
maps/mp/gametypes/_spawning::onspawnplayer_unified(); maps/mp/gametypes/_spawning::onspawnplayer_unified();
} }
onspawnplayer( predictedspawn ) onspawnplayer( predictedspawn ) //checked matches cerberus output
{ {
self.isflagcarrier = 0; self.isflagcarrier = 0;
self.flagcarried = undefined; self.flagcarried = undefined;
@ -383,9 +374,11 @@ onspawnplayer( predictedspawn )
{ {
spawnpoint = maps/mp/gametypes/_spawnlogic::getspawnpoint_nearteam( level.spawn_allies ); spawnpoint = maps/mp/gametypes/_spawnlogic::getspawnpoint_nearteam( level.spawn_allies );
} }
/*
/# /#
assert( isDefined( spawnpoint ) ); assert( isDefined( spawnpoint ) );
#/ #/
*/
if ( predictedspawn ) if ( predictedspawn )
{ {
self predictspawnpoint( spawnpoint.origin, spawnpoint.angles ); self predictspawnpoint( spawnpoint.origin, spawnpoint.angles );
@ -396,7 +389,7 @@ onspawnplayer( predictedspawn )
} }
} }
updategametypedvars() updategametypedvars() //checked matches cerberus output
{ {
level.flagcapturetime = getgametypesetting( "captureTime" ); level.flagcapturetime = getgametypesetting( "captureTime" );
level.flagtouchreturntime = getgametypesetting( "defuseTime" ); level.flagtouchreturntime = getgametypesetting( "defuseTime" );
@ -417,7 +410,7 @@ updategametypedvars()
} }
} }
createflag( trigger ) createflag( trigger ) //checked matches cerberus output
{ {
if ( isDefined( trigger.target ) ) if ( isDefined( trigger.target ) )
{ {
@ -466,7 +459,7 @@ createflag( trigger )
return flag; return flag;
} }
createflagzone( trigger ) createflagzone( trigger ) //checked changed to match cerberus output
{ {
visuals = []; visuals = [];
entityteam = trigger.script_team; entityteam = trigger.script_team;
@ -474,7 +467,7 @@ createflagzone( trigger )
{ {
entityteam = getotherteam( entityteam ); entityteam = getotherteam( entityteam );
} }
flagzone = maps/mp/gametypes/_gameobjects::createuseobject( entityteam, trigger, visuals, ( 0, 0, -1 ), istring( entityteam + "_base" ) ); flagzone = maps/mp/gametypes/_gameobjects::createuseobject( entityteam, trigger, visuals, ( 0, 0, 0 ), istring( entityteam + "_base" ) );
flagzone maps/mp/gametypes/_gameobjects::allowuse( "friendly" ); flagzone maps/mp/gametypes/_gameobjects::allowuse( "friendly" );
flagzone maps/mp/gametypes/_gameobjects::setusetime( 0 ); flagzone maps/mp/gametypes/_gameobjects::setusetime( 0 );
flagzone maps/mp/gametypes/_gameobjects::setusetext( &"MP_CAPTURING_FLAG" ); flagzone maps/mp/gametypes/_gameobjects::setusetext( &"MP_CAPTURING_FLAG" );
@ -485,7 +478,7 @@ createflagzone( trigger )
flag = level.teamflags[ entityteam ]; flag = level.teamflags[ entityteam ];
flag.flagbase = flagzone; flag.flagbase = flagzone;
flagzone.flag = flag; flagzone.flag = flag;
tracestart = trigger.origin + vectorScale( ( 0, 0, -1 ), 32 ); tracestart = trigger.origin + vectorScale( ( 0, 0, 1 ), 32 );
traceend = trigger.origin + vectorScale( ( 0, 0, -1 ), 32 ); traceend = trigger.origin + vectorScale( ( 0, 0, -1 ), 32 );
trace = bullettrace( tracestart, traceend, 0, undefined ); trace = bullettrace( tracestart, traceend, 0, undefined );
upangles = vectorToAngle( trace[ "normal" ] ); upangles = vectorToAngle( trace[ "normal" ] );
@ -497,7 +490,7 @@ createflagzone( trigger )
return flagzone; return flagzone;
} }
createflaghint( team, origin ) createflaghint( team, origin ) //checked matches cerberus output
{ {
radius = 128; radius = 128;
height = 64; height = 64;
@ -509,7 +502,7 @@ createflaghint( team, origin )
return trigger; return trigger;
} }
ctf() ctf() //checked changed to match cerberus output
{ {
level.flags = []; level.flags = [];
level.teamflags = []; level.teamflags = [];
@ -549,31 +542,32 @@ ctf()
flag_triggers = getentarray( "ctf_flag_pickup_trig", "targetname" ); flag_triggers = getentarray( "ctf_flag_pickup_trig", "targetname" );
if ( !isDefined( flag_triggers ) || flag_triggers.size != 2 ) if ( !isDefined( flag_triggers ) || flag_triggers.size != 2 )
{ {
/*
/# /#
maps/mp/_utility::error( "Not enough ctf_flag_pickup_trig triggers found in map. Need two." ); maps/mp/_utility::error( "Not enough ctf_flag_pickup_trig triggers found in map. Need two." );
#/ #/
*/
return; return;
} }
index = 0; for ( index = 0; index < flag_triggers.size; index++ )
while ( index < flag_triggers.size )
{ {
trigger = flag_triggers[ index ]; trigger = flag_triggers[ index ];
flag = createflag( trigger ); flag = createflag( trigger );
team = flag maps/mp/gametypes/_gameobjects::getownerteam(); team = flag maps/mp/gametypes/_gameobjects::getownerteam();
level.flags[ level.flags.size ] = flag; level.flags[ level.flags.size ] = flag;
level.teamflags[ team ] = flag; level.teamflags[ team ] = flag;
index++;
} }
flag_zones = getentarray( "ctf_flag_zone_trig", "targetname" ); flag_zones = getentarray( "ctf_flag_zone_trig", "targetname" );
if ( !isDefined( flag_zones ) || flag_zones.size != 2 ) if ( !isDefined( flag_zones ) || flag_zones.size != 2 )
{ {
/*
/# /#
maps/mp/_utility::error( "Not enough ctf_flag_zone_trig triggers found in map. Need two." ); maps/mp/_utility::error( "Not enough ctf_flag_zone_trig triggers found in map. Need two." );
#/ #/
*/
return; return;
} }
index = 0; for ( index = 0; index < flag_zones.size; index++ )
while ( index < flag_zones.size )
{ {
trigger = flag_zones[ index ]; trigger = flag_zones[ index ];
flagzone = createflagzone( trigger ); flagzone = createflagzone( trigger );
@ -583,19 +577,18 @@ ctf()
level.flaghints[ team ] = createflaghint( team, trigger.origin ); level.flaghints[ team ] = createflaghint( team, trigger.origin );
facing_angle = getDvarInt( "scr_ctf_spawnPointFacingAngle" ); facing_angle = getDvarInt( "scr_ctf_spawnPointFacingAngle" );
setspawnpointsbaseweight( getotherteamsmask( team ), trigger.origin, facing_angle, level.spawnsystem.objective_facing_bonus ); setspawnpointsbaseweight( getotherteamsmask( team ), trigger.origin, facing_angle, level.spawnsystem.objective_facing_bonus );
index++;
} }
createreturnmessageelems(); createreturnmessageelems();
} }
ctf_icon_hide() ctf_icon_hide() //checked matches cerberus output
{ {
level waittill( "game_ended" ); level waittill( "game_ended" );
level.teamflags[ "allies" ] maps/mp/gametypes/_gameobjects::setvisibleteam( "none" ); level.teamflags[ "allies" ] maps/mp/gametypes/_gameobjects::setvisibleteam( "none" );
level.teamflags[ "axis" ] maps/mp/gametypes/_gameobjects::setvisibleteam( "none" ); level.teamflags[ "axis" ] maps/mp/gametypes/_gameobjects::setvisibleteam( "none" );
} }
removeinfluencers() removeinfluencers() //checked matches cerberus output
{ {
if ( isDefined( self.spawn_influencer_enemy_carrier ) ) if ( isDefined( self.spawn_influencer_enemy_carrier ) )
{ {
@ -614,7 +607,7 @@ removeinfluencers()
} }
} }
ondrop( player ) ondrop( player ) //checked matches cerberus output
{ {
if ( isDefined( player ) ) if ( isDefined( player ) )
{ {
@ -693,7 +686,7 @@ ondrop( player )
self.spawn_influencer_dropped = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, flag_origin, ss.ctf_dropped_influencer_radius, ss.ctf_dropped_influencer_score, player_team_mask | enemy_team_mask, "ctf_flag_dropped,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( ss.ctf_dropped_influencer_score_curve ), level.idleflagreturntime, self.trigger ); self.spawn_influencer_dropped = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, flag_origin, ss.ctf_dropped_influencer_radius, ss.ctf_dropped_influencer_score, player_team_mask | enemy_team_mask, "ctf_flag_dropped,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( ss.ctf_dropped_influencer_score_curve ), level.idleflagreturntime, self.trigger );
} }
onpickup( player ) onpickup( player ) //checked matches cerberus output
{ {
carrierkilledby = self.carrierkilledby; carrierkilledby = self.carrierkilledby;
self.carrierkilledby = undefined; self.carrierkilledby = undefined;
@ -792,17 +785,19 @@ onpickup( player )
} }
} }
onpickupmusicstate( player ) onpickupmusicstate( player ) //checked changed at own discretion
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "death" ); self endon( "death" );
wait 6; wait 6;
if ( player.isflagcarrier ) if (player.isFlagCarrier)
{ {
//imported from bo1 ctf.gsc
player thread maps\mp\gametypes\_globallogic_audio::set_music_on_player( "SUSPENSE", false, false);
} }
} }
ishome() ishome() //checked matches cerberus output
{ {
if ( isDefined( self.carrier ) ) if ( isDefined( self.carrier ) )
{ {
@ -815,7 +810,7 @@ ishome()
return 1; return 1;
} }
returnflag() returnflag() //checked matches cerberus output
{ {
team = self maps/mp/gametypes/_gameobjects::getownerteam(); team = self maps/mp/gametypes/_gameobjects::getownerteam();
otherteam = getotherteam( team ); otherteam = getotherteam( team );
@ -838,7 +833,7 @@ returnflag()
maps/mp/gametypes/_globallogic_audio::leaderdialog( "theyreturn_flag", otherteam, "ctf_flag" ); maps/mp/gametypes/_globallogic_audio::leaderdialog( "theyreturn_flag", otherteam, "ctf_flag" );
} }
oncapture( player ) oncapture( player ) //checked matches cerberus output
{ {
team = player.pers[ "team" ]; team = player.pers[ "team" ];
enemyteam = getotherteam( team ); enemyteam = getotherteam( team );
@ -883,13 +878,13 @@ oncapture( player )
flag removeinfluencers(); flag removeinfluencers();
} }
giveflagcapturexp( player ) giveflagcapturexp( player ) //checked matches cerberus output
{ {
maps/mp/_scoreevents::processscoreevent( "flag_capture", player ); maps/mp/_scoreevents::processscoreevent( "flag_capture", player );
player recordgameevent( "capture" ); player recordgameevent( "capture" );
} }
onreset() onreset() //checked matches cerberus output
{ {
update_hints(); update_hints();
team = self maps/mp/gametypes/_gameobjects::getownerteam(); team = self maps/mp/gametypes/_gameobjects::getownerteam();
@ -908,7 +903,7 @@ onreset()
self clearreturnflaghudelems(); self clearreturnflaghudelems();
} }
getotherflag( flag ) getotherflag( flag ) //checked matches cerberus output
{ {
if ( flag == level.flags[ 0 ] ) if ( flag == level.flags[ 0 ] )
{ {
@ -917,12 +912,11 @@ getotherflag( flag )
return level.flags[ 0 ]; return level.flags[ 0 ];
} }
onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked changed to match cerberus output
{ {
while ( isDefined( attacker ) && isplayer( attacker ) ) if ( isDefined( attacker ) && isplayer( attacker ) )
{ {
index = 0; for ( index = 0; index < level.flags.size; index++ )
while ( index < level.flags.size )
{ {
flagteam = "invalidTeam"; flagteam = "invalidTeam";
inflagzone = 0; inflagzone = 0;
@ -959,7 +953,6 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
if ( level.flags[ index ].ownerteam == attacker.pers[ "team" ] ) if ( level.flags[ index ].ownerteam == attacker.pers[ "team" ] )
{ {
defendedflag = 1; defendedflag = 1;
break;
} }
else else
{ {
@ -973,7 +966,6 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
if ( level.flags[ index ].ownerteam == attacker.pers[ "team" ] ) if ( level.flags[ index ].ownerteam == attacker.pers[ "team" ] )
{ {
defendedflag = 1; defendedflag = 1;
break;
} }
else else
{ {
@ -1016,19 +1008,17 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
self recordkillmodifier( "defending" ); self recordkillmodifier( "defending" );
} }
} }
index++;
} }
} }
if ( !isDefined( self.isflagcarrier ) || !self.isflagcarrier ) else if ( !isDefined( self.isflagcarrier ) || !self.isflagcarrier )
{ {
return; return;
} }
if ( isDefined( attacker ) && isplayer( attacker ) && attacker.pers[ "team" ] != self.pers[ "team" ] ) if ( isDefined( attacker ) && isplayer( attacker ) && attacker.pers[ "team" ] != self.pers[ "team" ] )
{ {
while ( isDefined( self.flagcarried ) ) if ( isDefined( self.flagcarried ) )
{ {
index = 0; for ( index = 0; index < level.flags.size; index++ )
while ( index < level.flags.size )
{ {
currentflag = level.flags[ index ]; currentflag = level.flags[ index ];
if ( currentflag.ownerteam == self.team ) if ( currentflag.ownerteam == self.team )
@ -1043,10 +1033,6 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
} }
} }
} }
else
{
index++;
}
} }
} }
attacker recordgameevent( "kill_carrier" ); attacker recordgameevent( "kill_carrier" );
@ -1054,7 +1040,7 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
} }
} }
createreturnmessageelems() createreturnmessageelems() //checked matches cerberus output
{ {
level.returnmessageelems = []; level.returnmessageelems = [];
level.returnmessageelems[ "allies" ][ "axis" ] = createservertimer( "objective", 1,4, "allies" ); level.returnmessageelems[ "allies" ][ "axis" ] = createservertimer( "objective", 1,4, "allies" );
@ -1079,7 +1065,7 @@ createreturnmessageelems()
level.returnmessageelems[ "axis" ][ "axis" ].archived = 0; level.returnmessageelems[ "axis" ][ "axis" ].archived = 0;
} }
returnflagaftertimemsg( time ) returnflagaftertimemsg( time ) //checked matches cerberus output
{ {
if ( level.touchreturn || level.idleflagreturntime == 0 ) if ( level.touchreturn || level.idleflagreturntime == 0 )
{ {
@ -1096,19 +1082,23 @@ returnflagaftertimemsg( time )
} }
} }
returnflaghudelems( time ) returnflaghudelems( time ) //checked matches cerberus output
{ {
self endon( "picked_up" ); self endon( "picked_up" );
level endon( "game_ended" ); level endon( "game_ended" );
ownerteam = self maps/mp/gametypes/_gameobjects::getownerteam(); ownerteam = self maps/mp/gametypes/_gameobjects::getownerteam();
/*
/# /#
assert( !level.returnmessageelems[ "axis" ][ ownerteam ].alpha ); assert( !level.returnmessageelems[ "axis" ][ ownerteam ].alpha );
#/ #/
*/
level.returnmessageelems[ "axis" ][ ownerteam ].alpha = 1; level.returnmessageelems[ "axis" ][ ownerteam ].alpha = 1;
level.returnmessageelems[ "axis" ][ ownerteam ] settimer( time ); level.returnmessageelems[ "axis" ][ ownerteam ] settimer( time );
/*
/# /#
assert( !level.returnmessageelems[ "allies" ][ ownerteam ].alpha ); assert( !level.returnmessageelems[ "allies" ][ ownerteam ].alpha );
#/ #/
*/
level.returnmessageelems[ "allies" ][ ownerteam ].alpha = 1; level.returnmessageelems[ "allies" ][ ownerteam ].alpha = 1;
level.returnmessageelems[ "allies" ][ ownerteam ] settimer( time ); level.returnmessageelems[ "allies" ][ ownerteam ] settimer( time );
if ( time <= 0 ) if ( time <= 0 )
@ -1122,16 +1112,16 @@ returnflaghudelems( time )
return 1; return 1;
} }
clearreturnflaghudelems() clearreturnflaghudelems() //checked matches cerberus output
{ {
ownerteam = self maps/mp/gametypes/_gameobjects::getownerteam(); ownerteam = self maps/mp/gametypes/_gameobjects::getownerteam();
level.returnmessageelems[ "allies" ][ ownerteam ].alpha = 0; level.returnmessageelems[ "allies" ][ ownerteam ].alpha = 0;
level.returnmessageelems[ "axis" ][ ownerteam ].alpha = 0; level.returnmessageelems[ "axis" ][ ownerteam ].alpha = 0;
} }
resetflagbaseeffect() resetflagbaseeffect() //checked matches cerberus output
{ {
wait 0,1; wait 0.1;
if ( isDefined( self.baseeffect ) ) if ( isDefined( self.baseeffect ) )
{ {
self.baseeffect delete(); self.baseeffect delete();
@ -1146,7 +1136,7 @@ resetflagbaseeffect()
triggerfx( self.baseeffect ); triggerfx( self.baseeffect );
} }
turn_on() turn_on() //checked matches cerberus output
{ {
if ( level.hardcoremode ) if ( level.hardcoremode )
{ {
@ -1155,12 +1145,12 @@ turn_on()
self.origin = self.original_origin; self.origin = self.original_origin;
} }
turn_off() turn_off() //checked matches cerberus output
{ {
self.origin = ( self.original_origin[ 0 ], self.original_origin[ 1 ], self.original_origin[ 2 ] - 10000 ); self.origin = ( self.original_origin[ 0 ], self.original_origin[ 1 ], self.original_origin[ 2 ] - 10000 );
} }
update_hints() update_hints() //checked matches cerberus output
{ {
allied_flag = level.teamflags[ "allies" ]; allied_flag = level.teamflags[ "allies" ];
axis_flag = level.teamflags[ "axis" ]; axis_flag = level.teamflags[ "axis" ];
@ -1186,7 +1176,7 @@ update_hints()
} }
} }
claim_trigger( trigger ) claim_trigger( trigger ) //checked matches cerberus output
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self clientclaimtrigger( trigger ); self clientclaimtrigger( trigger );
@ -1194,7 +1184,7 @@ claim_trigger( trigger )
self clientreleasetrigger( trigger ); self clientreleasetrigger( trigger );
} }
createflagspawninfluencer( entityteam ) createflagspawninfluencer( entityteam ) //checked matches cerberus output
{ {
ctf_friendly_base_influencer_score = level.spawnsystem.ctf_friendly_base_influencer_score; ctf_friendly_base_influencer_score = level.spawnsystem.ctf_friendly_base_influencer_score;
ctf_friendly_base_influencer_score_curve = level.spawnsystem.ctf_friendly_base_influencer_score_curve; ctf_friendly_base_influencer_score_curve = level.spawnsystem.ctf_friendly_base_influencer_score_curve;
@ -1209,7 +1199,7 @@ createflagspawninfluencer( entityteam )
self.spawn_influencer_enemy = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, self.trigger.origin, ctf_enemy_base_influencer_radius, ctf_enemy_base_influencer_score, other_team_mask, "ctf_enemy_base,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( ctf_enemy_base_influencer_score_curve ) ); self.spawn_influencer_enemy = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, self.trigger.origin, ctf_enemy_base_influencer_radius, ctf_enemy_base_influencer_score, other_team_mask, "ctf_enemy_base,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( ctf_enemy_base_influencer_score_curve ) );
} }
ctf_gamemodespawndvars( reset_dvars ) ctf_gamemodespawndvars( reset_dvars ) //checked matches cerberus output
{ {
ss = level.spawnsystem; ss = level.spawnsystem;
ss.ctf_friendly_base_influencer_score = set_dvar_float_if_unset( "scr_spawn_ctf_friendly_base_influencer_score", "0", reset_dvars ); ss.ctf_friendly_base_influencer_score = set_dvar_float_if_unset( "scr_spawn_ctf_friendly_base_influencer_score", "0", reset_dvars );
@ -1229,7 +1219,7 @@ ctf_gamemodespawndvars( reset_dvars )
ss.ctf_dropped_influencer_radius = set_dvar_float_if_unset( "scr_spawn_ctf_dropped_influencer_radius", "" + ( 10 * get_player_height() ), reset_dvars ); ss.ctf_dropped_influencer_radius = set_dvar_float_if_unset( "scr_spawn_ctf_dropped_influencer_radius", "" + ( 10 * get_player_height() ), reset_dvars );
} }
ctf_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ) ctf_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ) //checked matches cerberus output
{ {
teamkill_penalty = maps/mp/gametypes/_globallogic_defaults::default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ); teamkill_penalty = maps/mp/gametypes/_globallogic_defaults::default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon );
if ( isDefined( self.isflagcarrier ) && self.isflagcarrier ) if ( isDefined( self.isflagcarrier ) && self.isflagcarrier )
@ -1239,7 +1229,7 @@ ctf_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon )
return teamkill_penalty; return teamkill_penalty;
} }
ctf_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon ) ctf_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon ) //checked matches cerberus output
{ {
teamkill_score = maps/mp/gametypes/_rank::getscoreinfovalue( "kill" ); teamkill_score = maps/mp/gametypes/_rank::getscoreinfovalue( "kill" );
if ( isDefined( self.isflagcarrier ) && self.isflagcarrier ) if ( isDefined( self.isflagcarrier ) && self.isflagcarrier )
@ -1248,3 +1238,5 @@ ctf_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon )
} }
return int( teamkill_score ); return int( teamkill_score );
} }

View File

@ -11,12 +11,17 @@
#include maps/mp/_medals; #include maps/mp/_medals;
#include maps/mp/gametypes/_spawnlogic; #include maps/mp/gametypes/_spawnlogic;
#include maps/mp/gametypes/_spawning; #include maps/mp/gametypes/_spawning;
#include maps/mp/gametypes/_gameobjects;
#include maps/mp/gametypes/_rank; #include maps/mp/gametypes/_rank;
#include maps/mp/gametypes/_globallogic_defaults; #include maps/mp/gametypes/_globallogic_defaults;
#include maps/mp/gametypes/_callbacksetup;
#include maps/mp/gametypes/_globallogic;
#include maps/mp/gametypes/_hud_util; #include maps/mp/gametypes/_hud_util;
#include maps/mp/_utility;
#include common_scripts/utility; #include common_scripts/utility;
main()
main() //checked matches cerberus output
{ {
if ( getDvar( "mapname" ) == "mp_background" ) if ( getDvar( "mapname" ) == "mp_background" )
{ {
@ -68,7 +73,7 @@ main()
} }
} }
onprecachegametype() onprecachegametype() //checked matches cerberus output
{ {
game[ "bombmodelname" ] = "t5_weapon_briefcase_bomb_world"; game[ "bombmodelname" ] = "t5_weapon_briefcase_bomb_world";
game[ "bombmodelnameobj" ] = "t5_weapon_briefcase_bomb_world"; game[ "bombmodelnameobj" ] = "t5_weapon_briefcase_bomb_world";
@ -107,27 +112,27 @@ onprecachegametype()
precachestring( &"MP_TIME_EXTENDED" ); precachestring( &"MP_TIME_EXTENDED" );
} }
dem_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ) dem_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ) //checked changed to match cerberus output
{ {
teamkill_penalty = maps/mp/gametypes/_globallogic_defaults::default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ); teamkill_penalty = maps/mp/gametypes/_globallogic_defaults::default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon );
if ( isDefined( self.isdefusing ) || self.isdefusing && isDefined( self.isplanting ) && self.isplanting ) if ( isDefined( self.isdefusing ) && self.isdefusing || isDefined( self.isplanting ) && self.isplanting )
{ {
teamkill_penalty *= level.teamkillpenaltymultiplier; teamkill_penalty *= level.teamkillpenaltymultiplier;
} }
return teamkill_penalty; return teamkill_penalty;
} }
dem_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon ) dem_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon ) //checked changed to match cerberus output
{ {
teamkill_score = maps/mp/gametypes/_rank::getscoreinfovalue( "team_kill" ); teamkill_score = maps/mp/gametypes/_rank::getscoreinfovalue( "team_kill" );
if ( isDefined( self.isdefusing ) || self.isdefusing && isDefined( self.isplanting ) && self.isplanting ) if ( isDefined( self.isdefusing ) && self.isdefusing || isDefined( self.isplanting ) && self.isplanting )
{ {
teamkill_score *= level.teamkillscoremultiplier; teamkill_score *= level.teamkillscoremultiplier;
} }
return int( teamkill_score ); return int( teamkill_score );
} }
onroundswitch() onroundswitch() //checked matches cerberus output
{ {
if ( !isDefined( game[ "switchedsides" ] ) ) if ( !isDefined( game[ "switchedsides" ] ) )
{ {
@ -149,14 +154,13 @@ onroundswitch()
} }
} }
getbetterteam() getbetterteam() //checked changed to match cerberus output
{ {
kills[ "allies" ] = 0; kills[ "allies" ] = 0;
kills[ "axis" ] = 0; kills[ "axis" ] = 0;
deaths[ "allies" ] = 0; deaths[ "allies" ] = 0;
deaths[ "axis" ] = 0; deaths[ "axis" ] = 0;
i = 0; for ( i = 0; i < level.players.size; i++ )
while ( i < level.players.size )
{ {
player = level.players[ i ]; player = level.players[ i ];
team = player.pers[ "team" ]; team = player.pers[ "team" ];
@ -165,29 +169,22 @@ getbetterteam()
kills[ team ] += player.kills; kills[ team ] += player.kills;
deaths[ team ] += player.deaths; deaths[ team ] += player.deaths;
} }
i++;
} }
if ( kills[ "allies" ] > kills[ "axis" ] ) if ( kills[ "allies" ] > kills[ "axis" ] )
{ {
return "allies"; return "allies";
} }
else else if ( kills[ "axis" ] > kills[ "allies" ] )
{ {
if ( kills[ "axis" ] > kills[ "allies" ] ) return "axis";
{
return "axis";
}
} }
if ( deaths[ "allies" ] < deaths[ "axis" ] ) if ( deaths[ "allies" ] < deaths[ "axis" ] )
{ {
return "allies"; return "allies";
} }
else else if ( deaths[ "axis" ] < deaths[ "allies" ] )
{ {
if ( deaths[ "axis" ] < deaths[ "allies" ] ) return "axis";
{
return "axis";
}
} }
if ( randomint( 2 ) == 0 ) if ( randomint( 2 ) == 0 )
{ {
@ -196,7 +193,7 @@ getbetterteam()
return "axis"; return "axis";
} }
gamemodespawndvars( reset_dvars ) gamemodespawndvars( reset_dvars ) //checked matches cerberus output
{ {
ss = level.spawnsystem; ss = level.spawnsystem;
ss.dem_enemy_base_influencer_score = set_dvar_float_if_unset( "scr_spawn_dem_enemy_base_influencer_score", "-500", reset_dvars ); ss.dem_enemy_base_influencer_score = set_dvar_float_if_unset( "scr_spawn_dem_enemy_base_influencer_score", "-500", reset_dvars );
@ -204,7 +201,7 @@ gamemodespawndvars( reset_dvars )
ss.dem_enemy_base_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dem_enemy_base_influencer_radius", "" + ( 15 * get_player_height() ), reset_dvars ); ss.dem_enemy_base_influencer_radius = set_dvar_float_if_unset( "scr_spawn_dem_enemy_base_influencer_radius", "" + ( 15 * get_player_height() ), reset_dvars );
} }
onstartgametype() onstartgametype() //checked changed to match cerberus output
{ {
setbombtimer( "A", 0 ); setbombtimer( "A", 0 );
setmatchflag( "bomb_timer_a", 0 ); setmatchflag( "bomb_timer_a", 0 );
@ -275,8 +272,8 @@ onstartgametype()
allowed[ 3 ] = "dem"; allowed[ 3 ] = "dem";
maps/mp/gametypes/_gameobjects::main( allowed ); maps/mp/gametypes/_gameobjects::main( allowed );
maps/mp/gametypes/_spawning::create_map_placed_influencers(); maps/mp/gametypes/_spawning::create_map_placed_influencers();
level.spawnmins = ( 0, 0, 1 ); level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 1 ); level.spawnmaxs = ( 0, 0, 0 );
maps/mp/gametypes/_spawnlogic::dropspawnpoints( "mp_dem_spawn_attacker_a" ); maps/mp/gametypes/_spawnlogic::dropspawnpoints( "mp_dem_spawn_attacker_a" );
maps/mp/gametypes/_spawnlogic::dropspawnpoints( "mp_dem_spawn_attacker_b" ); maps/mp/gametypes/_spawnlogic::dropspawnpoints( "mp_dem_spawn_attacker_b" );
maps/mp/gametypes/_spawnlogic::dropspawnpoints( "mp_dem_spawn_defender_a" ); maps/mp/gametypes/_spawnlogic::dropspawnpoints( "mp_dem_spawn_defender_a" );
@ -318,7 +315,7 @@ onstartgametype()
thread bombs(); thread bombs();
} }
onspawnplayerunified() onspawnplayerunified() //checked matches cerberus output
{ {
self.isplanting = 0; self.isplanting = 0;
self.isdefusing = 0; self.isdefusing = 0;
@ -326,7 +323,7 @@ onspawnplayerunified()
maps/mp/gametypes/_spawning::onspawnplayer_unified(); maps/mp/gametypes/_spawning::onspawnplayer_unified();
} }
onspawnplayer( predictedspawn ) onspawnplayer( predictedspawn ) //checked matches cerberus output
{ {
if ( !predictedspawn ) if ( !predictedspawn )
{ {
@ -362,9 +359,11 @@ onspawnplayer( predictedspawn )
} }
} }
spawnpoints = maps/mp/gametypes/_spawnlogic::getspawnpointarray( spawnpointname ); spawnpoints = maps/mp/gametypes/_spawnlogic::getspawnpointarray( spawnpointname );
/*
/# /#
assert( spawnpoints.size ); assert( spawnpoints.size );
#/ #/
*/
spawnpoint = maps/mp/gametypes/_spawnlogic::getspawnpoint_random( spawnpoints ); spawnpoint = maps/mp/gametypes/_spawnlogic::getspawnpoint_random( spawnpoints );
if ( predictedspawn ) if ( predictedspawn )
{ {
@ -376,17 +375,16 @@ onspawnplayer( predictedspawn )
} }
} }
dem_playerspawnedcb() dem_playerspawnedcb() //checked matches cerberus output
{ {
level notify( "spawned_player" ); level notify( "spawned_player" );
} }
onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked changed to match cerberus output
{ {
thread checkallowspectating(); thread checkallowspectating();
bombzone = undefined; bombzone = undefined;
index = 0; for ( index = 0; index < level.bombzones.size; index++ )
while ( index < level.bombzones.size )
{ {
if ( !isDefined( level.bombzones[ index ].bombexploded ) || !level.bombzones[ index ].bombexploded ) if ( !isDefined( level.bombzones[ index ].bombexploded ) || !level.bombzones[ index ].bombexploded )
{ {
@ -403,10 +401,6 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
break; break;
} }
} }
else
{
index++;
}
} }
if ( isDefined( bombzone ) && isplayer( attacker ) && attacker.pers[ "team" ] != self.pers[ "team" ] ) if ( isDefined( bombzone ) && isplayer( attacker ) && attacker.pers[ "team" ] != self.pers[ "team" ] )
{ {
@ -426,9 +420,11 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
} }
else else
{ {
/*
/# /#
attacker iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU OFFENSIVE CREDIT AS BOOSTING PREVENTION" ); attacker iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU OFFENSIVE CREDIT AS BOOSTING PREVENTION" );
#/ #/
*/
} }
} }
else if ( !isDefined( attacker.dem_defends ) ) else if ( !isDefined( attacker.dem_defends ) )
@ -450,9 +446,11 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
} }
else else
{ {
/*
/# /#
attacker iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU DEFENSIVE CREDIT AS BOOSTING PREVENTION" ); attacker iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU DEFENSIVE CREDIT AS BOOSTING PREVENTION" );
#/ #/
*/
} }
} }
if ( self.isplanting == 1 ) if ( self.isplanting == 1 )
@ -465,13 +463,13 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
} }
} }
checkallowspectating() checkallowspectating() //checked changed to match cerberus output
{ {
self endon( "disconnect" ); self endon( "disconnect" );
wait 0,05; wait 0,05;
update = 0; update = 0;
if ( level.numliveslivesleft = self.pers[ "lives" ]; livesleft = !level.numlives && !self.pers["lives"];
&& !level.alivecount[ game[ "attackers" ] ] && !livesleft ) if ( !level.alivecount[ game[ "attackers" ] ] && !livesleft )
{ {
level.spectateoverride[ game[ "attackers" ] ].allowenemyspectate = 1; level.spectateoverride[ game[ "attackers" ] ].allowenemyspectate = 1;
update = 1; update = 1;
@ -487,7 +485,7 @@ checkallowspectating()
} }
} }
dem_endgame( winningteam, endreasontext ) dem_endgame( winningteam, endreasontext ) //checked matches cerberus output
{ {
if ( isDefined( winningteam ) && winningteam != "tie" ) if ( isDefined( winningteam ) && winningteam != "tie" )
{ {
@ -496,7 +494,7 @@ dem_endgame( winningteam, endreasontext )
thread maps/mp/gametypes/_globallogic::endgame( winningteam, endreasontext ); thread maps/mp/gametypes/_globallogic::endgame( winningteam, endreasontext );
} }
ondeadevent( team ) ondeadevent( team ) //checked changed to match cerberus output
{ {
if ( level.bombexploded || level.bombdefused ) if ( level.bombexploded || level.bombdefused )
{ {
@ -521,16 +519,13 @@ ondeadevent( team )
} }
dem_endgame( game[ "defenders" ], game[ "strings" ][ game[ "attackers" ] + "_eliminated" ] ); dem_endgame( game[ "defenders" ], game[ "strings" ][ game[ "attackers" ] + "_eliminated" ] );
} }
else else if ( team == game[ "defenders" ] )
{ {
if ( team == game[ "defenders" ] ) dem_endgame( game[ "attackers" ], game[ "strings" ][ game[ "defenders" ] + "_eliminated" ] );
{
dem_endgame( game[ "attackers" ], game[ "strings" ][ game[ "defenders" ] + "_eliminated" ] );
}
} }
} }
ononeleftevent( team ) ononeleftevent( team ) //checked matches cerberus output
{ {
if ( level.bombexploded || level.bombdefused ) if ( level.bombexploded || level.bombdefused )
{ {
@ -539,7 +534,7 @@ ononeleftevent( team )
warnlastplayer( team ); warnlastplayer( team );
} }
ontimelimit() ontimelimit() //checked changed to match cerberus output
{ {
if ( isDefined( game[ "overtime_round" ] ) ) if ( isDefined( game[ "overtime_round" ] ) )
{ {
@ -548,14 +543,12 @@ ontimelimit()
else if ( level.teambased ) else if ( level.teambased )
{ {
bombzonesleft = 0; bombzonesleft = 0;
index = 0; for ( index = 0; index < level.bombzones.size; index++ )
while ( index < level.bombzones.size )
{ {
if ( !isDefined( level.bombzones[ index ].bombexploded ) || !level.bombzones[ index ].bombexploded ) if ( !isDefined( level.bombzones[ index ].bombexploded ) || !level.bombzones[ index ].bombexploded )
{ {
bombzonesleft++; bombzonesleft++;
} }
index++;
} }
if ( bombzonesleft == 0 ) if ( bombzonesleft == 0 )
{ {
@ -572,7 +565,7 @@ ontimelimit()
} }
} }
warnlastplayer( team ) warnlastplayer( team ) //checked changed to match cerberus output
{ {
if ( !isDefined( level.warnedlastplayer ) ) if ( !isDefined( level.warnedlastplayer ) )
{ {
@ -584,8 +577,7 @@ warnlastplayer( team )
} }
level.warnedlastplayer[ team ] = 1; level.warnedlastplayer[ team ] = 1;
players = level.players; players = level.players;
i = 0; for ( i = 0; i < players.size; i++ )
while ( i < players.size )
{ {
player = players[ i ]; player = players[ i ];
if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team && isDefined( player.pers[ "class" ] ) ) if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team && isDefined( player.pers[ "class" ] ) )
@ -595,10 +587,6 @@ warnlastplayer( team )
break; break;
} }
} }
else
{
i++;
}
} }
if ( i == players.size ) if ( i == players.size )
{ {
@ -607,12 +595,12 @@ warnlastplayer( team )
players[ i ] thread givelastattackerwarning(); players[ i ] thread givelastattackerwarning();
} }
givelastattackerwarning() givelastattackerwarning() //checked changed to match cerberus output
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
fullhealthtime = 0; fullhealthtime = 0;
interval = 0,05; interval = 0.05;
while ( 1 ) while ( 1 )
{ {
if ( self.health != self.maxhealth ) if ( self.health != self.maxhealth )
@ -628,14 +616,11 @@ givelastattackerwarning()
{ {
break; break;
} }
else
{
}
} }
self maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "sudden_death" ); self maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "sudden_death" );
} }
updategametypedvars() updategametypedvars() //checked matches cerberus output
{ {
level.planttime = getgametypesetting( "plantTime" ); level.planttime = getgametypesetting( "plantTime" );
level.defusetime = getgametypesetting( "defuseTime" ); level.defusetime = getgametypesetting( "defuseTime" );
@ -650,7 +635,7 @@ updategametypedvars()
level.playerdefensivemax = getgametypesetting( "maxPlayerDefensive" ); level.playerdefensivemax = getgametypesetting( "maxPlayerDefensive" );
} }
resetbombzone() resetbombzone() //checked matches cerberus output
{ {
if ( isDefined( game[ "overtime_round" ] ) ) if ( isDefined( game[ "overtime_round" ] ) )
{ {
@ -673,7 +658,7 @@ resetbombzone()
self.useweapon = "briefcase_bomb_mp"; self.useweapon = "briefcase_bomb_mp";
} }
setupfordefusing() setupfordefusing() //checked matches cerberus output
{ {
self maps/mp/gametypes/_gameobjects::allowuse( "friendly" ); self maps/mp/gametypes/_gameobjects::allowuse( "friendly" );
self maps/mp/gametypes/_gameobjects::setusetime( level.defusetime ); self maps/mp/gametypes/_gameobjects::setusetime( level.defusetime );
@ -687,7 +672,7 @@ setupfordefusing()
self maps/mp/gametypes/_gameobjects::setvisibleteam( "any" ); self maps/mp/gametypes/_gameobjects::setvisibleteam( "any" );
} }
bombs() bombs() //checked changed to match cerberus output
{ {
level.bombaplanted = 0; level.bombaplanted = 0;
level.bombbplanted = 0; level.bombbplanted = 0;
@ -719,39 +704,32 @@ bombs()
trigger delete(); trigger delete();
defusetrig delete(); defusetrig delete();
visuals[ 0 ] delete(); visuals[ 0 ] delete();
_a831 = clipbrushes; foreach ( clip in clipbrushes )
_k831 = getFirstArrayKey( _a831 );
while ( isDefined( _k831 ) )
{ {
clip = _a831[ _k831 ];
clip delete(); clip delete();
_k831 = getNextArrayKey( _a831, _k831 );
} }
index++;
continue;
} }
else bombsiteteamowner = "neutral"; bombsiteteamowner = "neutral";
bombsiteallowuse = "any"; bombsiteallowuse = "any";
scriptlabel = "_a"; scriptlabel = "_a";
} }
else else if ( scriptlabel == "_overtime" )
{ {
if ( scriptlabel == "_overtime" ) trigger delete();
defusetrig delete();
visuals[ 0 ] delete();
foreach ( clip in clipbrushes )
{ {
trigger delete(); clip delete();
defusetrig delete();
visuals[ 0 ] delete();
_a846 = clipbrushes;
_k846 = getFirstArrayKey( _a846 );
while ( isDefined( _k846 ) )
{
clip = _a846[ _k846 ];
clip delete();
_k846 = getNextArrayKey( _a846, _k846 );
}
} }
index++;
continue;
} }
else name = istring( scriptlabel ); name = istring( scriptlabel );
precachestring( name ); precachestring( name );
bombzone = maps/mp/gametypes/_gameobjects::createuseobject( bombsiteteamowner, trigger, visuals, ( 0, 0, 1 ), name ); bombzone = maps/mp/gametypes/_gameobjects::createuseobject( bombsiteteamowner, trigger, visuals, ( 0, 0, 0 ), name );
bombzone maps/mp/gametypes/_gameobjects::allowuse( bombsiteallowuse ); bombzone maps/mp/gametypes/_gameobjects::allowuse( bombsiteallowuse );
bombzone maps/mp/gametypes/_gameobjects::setusetime( level.planttime ); bombzone maps/mp/gametypes/_gameobjects::setusetime( level.planttime );
bombzone maps/mp/gametypes/_gameobjects::setusetext( &"MP_PLANTING_EXPLOSIVE" ); bombzone maps/mp/gametypes/_gameobjects::setusetext( &"MP_PLANTING_EXPLOSIVE" );
@ -770,25 +748,22 @@ bombs()
bombzone.oncantuse = ::oncantuse; bombzone.oncantuse = ::oncantuse;
bombzone.useweapon = "briefcase_bomb_mp"; bombzone.useweapon = "briefcase_bomb_mp";
bombzone.visuals[ 0 ].killcament = spawn( "script_model", bombzone.visuals[ 0 ].origin + vectorScale( ( 0, 0, 1 ), 128 ) ); bombzone.visuals[ 0 ].killcament = spawn( "script_model", bombzone.visuals[ 0 ].origin + vectorScale( ( 0, 0, 1 ), 128 ) );
i = 0; for ( i = 0; i < visuals.size; i++ )
while ( i < visuals.size )
{ {
if ( isDefined( visuals[ i ].script_exploder ) ) if ( isDefined( visuals[ i ].script_exploder ) )
{ {
bombzone.exploderindex = visuals[ i ].script_exploder; bombzone.exploderindex = visuals[ i ].script_exploder;
break; break;
} }
else
{
i++;
}
} }
level.bombzones[ level.bombzones.size ] = bombzone; level.bombzones[ level.bombzones.size ] = bombzone;
bombzone.bombdefusetrig = defusetrig; bombzone.bombdefusetrig = defusetrig;
/*
/# /#
assert( isDefined( bombzone.bombdefusetrig ) ); assert( isDefined( bombzone.bombdefusetrig ) );
#/ #/
bombzone.bombdefusetrig.origin += vectorScale( ( 0, 0, 1 ), 10000 ); */
bombzone.bombdefusetrig.origin += vectorScale( ( 0, 0, -1 ), 10000 );
bombzone.bombdefusetrig.label = scriptlabel; bombzone.bombdefusetrig.label = scriptlabel;
dem_enemy_base_influencer_score = level.spawnsystem.dem_enemy_base_influencer_score; dem_enemy_base_influencer_score = level.spawnsystem.dem_enemy_base_influencer_score;
dem_enemy_base_influencer_score_curve = level.spawnsystem.dem_enemy_base_influencer_score_curve; dem_enemy_base_influencer_score_curve = level.spawnsystem.dem_enemy_base_influencer_score_curve;
@ -797,25 +772,21 @@ bombs()
bombzone.spawninfluencer = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, trigger.origin, dem_enemy_base_influencer_radius, dem_enemy_base_influencer_score, team_mask, "dem_enemy_base,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( dem_enemy_base_influencer_score_curve ) ); bombzone.spawninfluencer = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, trigger.origin, dem_enemy_base_influencer_radius, dem_enemy_base_influencer_score, team_mask, "dem_enemy_base,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( dem_enemy_base_influencer_score_curve ) );
index++; index++;
} }
index = 0; for ( index = 0; index < level.bombzones.size; index++ )
while ( index < level.bombzones.size )
{ {
array = []; array = [];
otherindex = 0; for ( otherindex = 0; otherindex < level.bombzones.size; otherindex++ )
while ( otherindex < level.bombzones.size )
{ {
if ( otherindex != index ) if ( otherindex != index )
{ {
array[ array.size ] = level.bombzones[ otherindex ]; array[ array.size ] = level.bombzones[ otherindex ];
} }
otherindex++;
} }
level.bombzones[ index ].otherbombzones = array; level.bombzones[ index ].otherbombzones = array;
index++;
} }
} }
onbeginuse( player ) onbeginuse( player ) //checked partially changed to match cerberus output did not change while loop to for loop see github for more info
{ {
timeremaining = maps/mp/gametypes/_globallogic_utils::gettimeremaining(); timeremaining = maps/mp/gametypes/_globallogic_utils::gettimeremaining();
if ( timeremaining <= ( level.planttime * 1000 ) ) if ( timeremaining <= ( level.planttime * 1000 ) )
@ -842,20 +813,19 @@ onbeginuse( player )
bomblabel++; bomblabel++;
continue; continue;
} }
else dist = distancesquared( player.origin, bomb.origin );
if ( dist < bestdistance )
{ {
dist = distancesquared( player.origin, bomb.origin ); bestdistance = dist;
if ( dist < bestdistance ) closestbomb = bomb;
{
bestdistance = dist;
closestbomb = bomb;
}
} }
bomblabel++; bomblabel++;
} }
/*
/# /#
assert( isDefined( closestbomb ) ); assert( isDefined( closestbomb ) );
#/ #/
*/
player.defusing = closestbomb; player.defusing = closestbomb;
closestbomb hide(); closestbomb hide();
} }
@ -868,7 +838,7 @@ onbeginuse( player )
player playsound( "fly_bomb_raise_plr" ); player playsound( "fly_bomb_raise_plr" );
} }
onenduse( team, player, result ) onenduse( team, player, result ) //checked matches cerberus output
{ {
if ( !isDefined( player ) ) if ( !isDefined( player ) )
{ {
@ -891,12 +861,12 @@ onenduse( team, player, result )
} }
} }
oncantuse( player ) oncantuse( player ) //checked matches cerberus output
{ {
player iprintlnbold( &"MP_CANT_PLANT_WITHOUT_BOMB" ); player iprintlnbold( &"MP_CANT_PLANT_WITHOUT_BOMB" );
} }
onuseobject( player ) onuseobject( player ) //checked matches cerberus output
{ {
team = player.team; team = player.team;
enemyteam = getotherteam( team ); enemyteam = getotherteam( team );
@ -925,9 +895,11 @@ onuseobject( player )
} }
else else
{ {
/*
/# /#
player iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU PLANT CREDIT AS BOOSTING PREVENTION" ); player iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU PLANT CREDIT AS BOOSTING PREVENTION" );
#/ #/
*/
} }
level thread maps/mp/_popups::displayteammessagetoall( &"MP_EXPLOSIVES_PLANTED_BY", player ); level thread maps/mp/_popups::displayteammessagetoall( &"MP_EXPLOSIVES_PLANTED_BY", player );
maps/mp/gametypes/_globallogic_audio::leaderdialog( "bomb_planted" ); maps/mp/gametypes/_globallogic_audio::leaderdialog( "bomb_planted" );
@ -954,9 +926,11 @@ onuseobject( player )
} }
else else
{ {
/*
/# /#
player iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU DEFUSE CREDIT AS BOOSTING PREVENTION" ); player iprintlnbold( "GAMETYPE DEBUG: NOT GIVING YOU DEFUSE CREDIT AS BOOSTING PREVENTION" );
#/ #/
*/
} }
level thread maps/mp/_popups::displayteammessagetoall( &"MP_EXPLOSIVES_DEFUSED_BY", player ); level thread maps/mp/_popups::displayteammessagetoall( &"MP_EXPLOSIVES_DEFUSED_BY", player );
thread maps/mp/gametypes/_globallogic_audio::set_music_on_team( "DEM_WE_DEFUSE", team, 0, 0, 5 ); thread maps/mp/gametypes/_globallogic_audio::set_music_on_team( "DEM_WE_DEFUSE", team, 0, 0, 5 );
@ -965,7 +939,7 @@ onuseobject( player )
} }
} }
ondrop( player ) ondrop( player ) //checked matches cerberus output
{ {
if ( !level.bombplanted ) if ( !level.bombplanted )
{ {
@ -983,7 +957,7 @@ ondrop( player )
maps/mp/_utility::playsoundonplayers( game[ "bomb_dropped_sound" ], game[ "attackers" ] ); maps/mp/_utility::playsoundonplayers( game[ "bomb_dropped_sound" ], game[ "attackers" ] );
} }
onpickup( player ) onpickup( player ) //checked matches cerberus output
{ {
player.isbombcarrier = 1; player.isbombcarrier = 1;
self maps/mp/gametypes/_gameobjects::set3dicon( "friendly", "waypoint_defend" ); self maps/mp/gametypes/_gameobjects::set3dicon( "friendly", "waypoint_defend" );
@ -996,11 +970,11 @@ onpickup( player )
maps/mp/_utility::playsoundonplayers( game[ "bomb_recovered_sound" ], game[ "attackers" ] ); maps/mp/_utility::playsoundonplayers( game[ "bomb_recovered_sound" ], game[ "attackers" ] );
} }
onreset() onreset() //checked matches cerberus output
{ {
} }
bombreset( label, reason ) bombreset( label, reason ) //checked matches cerberus output
{ {
if ( label == "_a" ) if ( label == "_a" )
{ {
@ -1020,13 +994,13 @@ bombreset( label, reason )
self.visuals[ 0 ] maps/mp/gametypes/_globallogic_utils::stoptickingsound(); self.visuals[ 0 ] maps/mp/gametypes/_globallogic_utils::stoptickingsound();
} }
dropbombmodel( player, site ) dropbombmodel( player, site ) //checked matches cerberus output
{ {
trace = bullettrace( player.origin + vectorScale( ( 0, 0, 1 ), 20 ), player.origin - vectorScale( ( 0, 0, 1 ), 2000 ), 0, player ); trace = bullettrace( player.origin + vectorScale( ( 0, 0, 1 ), 20 ), player.origin - vectorScale( ( 0, 0, 1 ), 2000 ), 0, player );
tempangle = randomfloat( 360 ); tempangle = randomfloat( 360 );
forward = ( cos( tempangle ), sin( tempangle ), 0 ); forward = ( cos( tempangle ), sin( tempangle ), 0 );
forward = vectornormalize( forward - vectorScale( trace[ "normal" ], vectordot( forward, trace[ "normal" ] ) ) ); forward = vectornormalize( forward - vectorScale( trace[ "normal" ], vectordot( forward, trace[ "normal" ] ) ) );
dropangles = vectorToAngle( forward ); dropangles = vectorToAngles( forward );
if ( isDefined( trace[ "surfacetype" ] ) && trace[ "surfacetype" ] == "water" ) if ( isDefined( trace[ "surfacetype" ] ) && trace[ "surfacetype" ] == "water" )
{ {
phystrace = playerphysicstrace( player.origin + vectorScale( ( 0, 0, 1 ), 20 ), player.origin - vectorScale( ( 0, 0, 1 ), 2000 ) ); phystrace = playerphysicstrace( player.origin + vectorScale( ( 0, 0, 1 ), 20 ), player.origin - vectorScale( ( 0, 0, 1 ), 2000 ) );
@ -1093,18 +1067,16 @@ bombplanted( destroyedobj, player )
destroyedobj.visuals[ 0 ] radiusdamage( explosionorigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); destroyedobj.visuals[ 0 ] radiusdamage( explosionorigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" );
} }
currenttime = getTime(); currenttime = getTime();
while ( isDefined( level.lastbombexplodetime ) && level.lastbombexplodebyteam == player.team ) if ( isDefined( level.lastbombexplodetime ) && level.lastbombexplodebyteam == player.team )
{ {
while ( ( level.lastbombexplodetime + 10000 ) > currenttime ) if ( ( level.lastbombexplodetime + 10000 ) > currenttime )
{ {
i = 0; for ( i = 0; i < level.players.size; i++ )
while ( i < level.players.size )
{ {
if ( level.players[ i ].team == player.team ) if ( level.players[ i ].team == player.team )
{ {
level.players[ i ] maps/mp/_challenges::bothbombsdetonatewithintime(); level.players[ i ] maps/mp/_challenges::bothbombsdetonatewithintime();
} }
i++;
} }
} }
} }
@ -1119,14 +1091,12 @@ bombplanted( destroyedobj, player )
exploder( destroyedobj.exploderindex ); exploder( destroyedobj.exploderindex );
} }
bombzonesleft = 0; bombzonesleft = 0;
index = 0; for ( index = 0; index < level.bombzones.size; index++ )
while ( index < level.bombzones.size )
{ {
if ( !isDefined( level.bombzones[ index ].bombexploded ) || !level.bombzones[ index ].bombexploded ) if ( !isDefined( level.bombzones[ index ].bombexploded ) || !level.bombzones[ index ].bombexploded )
{ {
bombzonesleft++; bombzonesleft++;
} }
index++;
} }
destroyedobj maps/mp/gametypes/_gameobjects::disableobject(); destroyedobj maps/mp/gametypes/_gameobjects::disableobject();
if ( bombzonesleft == 0 ) if ( bombzonesleft == 0 )
@ -1165,7 +1135,7 @@ bombplanted( destroyedobj, player )
} }
} }
gettimelimit() gettimelimit() //checked matches cerberus output
{ {
timelimit = maps/mp/gametypes/_globallogic_defaults::default_gettimelimit(); timelimit = maps/mp/gametypes/_globallogic_defaults::default_gettimelimit();
if ( isDefined( game[ "overtime_round" ] ) ) if ( isDefined( game[ "overtime_round" ] ) )
@ -1179,7 +1149,7 @@ gettimelimit()
return timelimit; return timelimit;
} }
shouldplayovertimeround() shouldplayovertimeround() //checked matches cerberus output
{ {
if ( isDefined( game[ "overtime_round" ] ) ) if ( isDefined( game[ "overtime_round" ] ) )
{ {
@ -1192,15 +1162,17 @@ shouldplayovertimeround()
return 0; return 0;
} }
waitlongdurationwithbombtimeupdate( whichbomb, duration ) waitlongdurationwithbombtimeupdate( whichbomb, duration ) //checked matches cerberus output
{ {
if ( duration == 0 ) if ( duration == 0 )
{ {
return; return;
} }
/*
/# /#
assert( duration > 0 ); assert( duration > 0 );
#/ #/
*/
starttime = getTime(); starttime = getTime();
endtime = getTime() + ( duration * 1000 ); endtime = getTime() + ( duration * 1000 );
while ( getTime() < endtime ) while ( getTime() < endtime )
@ -1210,25 +1182,27 @@ waitlongdurationwithbombtimeupdate( whichbomb, duration )
{ {
endtime += 250; endtime += 250;
updatebombtimers( whichbomb, endtime ); updatebombtimers( whichbomb, endtime );
wait 0,25; wait 0.25;
} }
} }
/*
/# /#
if ( getTime() != endtime ) if ( getTime() != endtime )
{ {
println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO endtime = " + endtime ); println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO endtime = " + endtime );
#/ #/
} }
*/
while ( isDefined( level.hostmigrationtimer ) ) while ( isDefined( level.hostmigrationtimer ) )
{ {
endtime += 250; endtime += 250;
updatebombtimers( whichbomb, endtime ); updatebombtimers( whichbomb, endtime );
wait 0,25; wait 0.25;
} }
return getTime() - starttime; return getTime() - starttime;
} }
updatebombtimers( whichbomb, detonatetime ) updatebombtimers( whichbomb, detonatetime ) //checked matches cerberus output
{ {
if ( whichbomb == "_a" ) if ( whichbomb == "_a" )
{ {
@ -1243,7 +1217,7 @@ updatebombtimers( whichbomb, detonatetime )
setmatchflag( "bomb_timer" + whichbomb, int( detonatetime ) ); setmatchflag( "bomb_timer" + whichbomb, int( detonatetime ) );
} }
bombdefused() bombdefused() //checked matches cerberus output
{ {
self.tickingobject maps/mp/gametypes/_globallogic_utils::stoptickingsound(); self.tickingobject maps/mp/gametypes/_globallogic_utils::stoptickingsound();
self maps/mp/gametypes/_gameobjects::allowuse( "none" ); self maps/mp/gametypes/_gameobjects::allowuse( "none" );
@ -1254,7 +1228,7 @@ bombdefused()
self bombreset( self.label, "bomb_defused" ); self bombreset( self.label, "bomb_defused" );
} }
play_one_left_underscore( team, enemyteam ) play_one_left_underscore( team, enemyteam ) //checked matches cerberus output
{ {
wait 3; wait 3;
if ( !isDefined( team ) || !isDefined( enemyteam ) ) if ( !isDefined( team ) || !isDefined( enemyteam ) )
@ -1265,7 +1239,7 @@ play_one_left_underscore( team, enemyteam )
thread maps/mp/gametypes/_globallogic_audio::set_music_on_team( "DEM_ONE_LEFT_UNDERSCORE", enemyteam, 0, 0 ); thread maps/mp/gametypes/_globallogic_audio::set_music_on_team( "DEM_ONE_LEFT_UNDERSCORE", enemyteam, 0, 0 );
} }
updateeventsperminute() updateeventsperminute() //checked matches cerberus output
{ {
if ( !isDefined( self.eventsperminute ) ) if ( !isDefined( self.eventsperminute ) )
{ {
@ -1285,7 +1259,7 @@ updateeventsperminute()
} }
} }
isscoreboosting( player, flag ) isscoreboosting( player, flag ) //checked matches cerberus output
{ {
if ( !level.rankedmatch ) if ( !level.rankedmatch )
{ {
@ -1301,3 +1275,5 @@ isscoreboosting( player, flag )
} }
return 0; return 0;
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -6,15 +6,19 @@
#include maps/mp/gametypes/_weapons; #include maps/mp/gametypes/_weapons;
#include maps/mp/_popups; #include maps/mp/_popups;
#include maps/mp/gametypes/_globallogic_utils; #include maps/mp/gametypes/_globallogic_utils;
#include maps/mp/gametypes/_hud_message;
#include maps/mp/gametypes/_spawnlogic; #include maps/mp/gametypes/_spawnlogic;
#include maps/mp/gametypes/_spawning; #include maps/mp/gametypes/_spawning;
#include maps/mp/gametypes/_gameobjects;
#include maps/mp/gametypes/_globallogic_score; #include maps/mp/gametypes/_globallogic_score;
#include maps/mp/teams/_teams; #include maps/mp/teams/_teams;
#include maps/mp/gametypes/_globallogic_audio; #include maps/mp/gametypes/_globallogic_audio;
#include maps/mp/gametypes/_callbacksetup;
#include maps/mp/gametypes/_globallogic;
#include maps/mp/gametypes/_hud_util; #include maps/mp/gametypes/_hud_util;
#include maps/mp/_utility; #include maps/mp/_utility;
main() main() //checked matches cerberus output
{ {
if ( getDvar( "mapname" ) == "mp_background" ) if ( getDvar( "mapname" ) == "mp_background" )
{ {
@ -81,7 +85,7 @@ main()
maps/mp/gametypes/_globallogic_audio::registerdialoggroup( "ctf_flag_enemy", 0 ); maps/mp/gametypes/_globallogic_audio::registerdialoggroup( "ctf_flag_enemy", 0 );
} }
onprecachegametype() onprecachegametype() //checked matches cerberus output
{ {
game[ "flag_dropped_sound" ] = "mp_war_objective_lost"; game[ "flag_dropped_sound" ] = "mp_war_objective_lost";
game[ "flag_recovered_sound" ] = "mp_war_objective_taken"; game[ "flag_recovered_sound" ] = "mp_war_objective_taken";
@ -132,15 +136,17 @@ onprecachegametype()
game[ "strings" ][ "score_limit_reached" ] = &"MP_CAP_LIMIT_REACHED"; game[ "strings" ][ "score_limit_reached" ] = &"MP_CAP_LIMIT_REACHED";
} }
onstartgametype() onstartgametype() //checked changed to match cerberus output
{ {
if ( !isDefined( game[ "switchedsides" ] ) ) if ( !isDefined( game[ "switchedsides" ] ) )
{ {
game[ "switchedsides" ] = 0; game[ "switchedsides" ] = 0;
} }
/*
/# /#
setdebugsideswitch( game[ "switchedsides" ] ); setdebugsideswitch( game[ "switchedsides" ] );
#/ #/
*/
setclientnamemode( "auto_change" ); setclientnamemode( "auto_change" );
maps/mp/gametypes/_globallogic_score::resetteamscores(); maps/mp/gametypes/_globallogic_score::resetteamscores();
setobjectivetext( "allies", &"OBJECTIVES_ONEFLAG" ); setobjectivetext( "allies", &"OBJECTIVES_ONEFLAG" );
@ -186,34 +192,26 @@ onstartgametype()
allowed[ 1 ] = "dom"; allowed[ 1 ] = "dom";
maps/mp/gametypes/_gameobjects::main( allowed ); maps/mp/gametypes/_gameobjects::main( allowed );
entities = getentarray(); entities = getentarray();
entity_index = entities.size - 1; for ( entity_index = entities.size - 1; entity_index >= 0; entity_index-- )
while ( entity_index >= 0 )
{ {
entity = entities[ entity_index ]; entity = entities[ entity_index ];
while ( isDefined( entity.script_gameobjectname ) && entity.script_gameobjectname != "[all_modes]" ) if ( isDefined( entity.script_gameobjectname ) && entity.script_gameobjectname != "[all_modes]" )
{ {
gameobjectnames = strtok( entity.script_gameobjectname, " " ); gameobjectnames = strtok( entity.script_gameobjectname, " " );
i = 0; for ( i = 0; i < gameobjectnames.size; i++ )
while ( i < gameobjectnames.size )
{ {
if ( gameobjectnames[ i ] == "ctf" && gameobjectnames.size > 1 ) if ( gameobjectnames[ i ] == "ctf" && gameobjectnames.size > 1 )
{ {
entity delete(); entity delete();
entity_index--; entity_index--;
continue; break;
}
else
{
i++;
} }
} }
} }
entity_index--;
} }
maps/mp/gametypes/_spawning::create_map_placed_influencers(); maps/mp/gametypes/_spawning::create_map_placed_influencers();
level.spawnmins = ( 0, 0, -1 ); level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, -1 ); level.spawnmaxs = ( 0, 0, 0 );
maps/mp/gametypes/_spawnlogic::placespawnpoints( "mp_ctf_spawn_allies_start" ); maps/mp/gametypes/_spawnlogic::placespawnpoints( "mp_ctf_spawn_allies_start" );
maps/mp/gametypes/_spawnlogic::placespawnpoints( "mp_ctf_spawn_axis_start" ); maps/mp/gametypes/_spawnlogic::placespawnpoints( "mp_ctf_spawn_axis_start" );
maps/mp/gametypes/_spawnlogic::addspawnpoints( "allies", "mp_ctf_spawn_allies" ); maps/mp/gametypes/_spawnlogic::addspawnpoints( "allies", "mp_ctf_spawn_allies" );
@ -226,15 +224,11 @@ onstartgametype()
level.spawn_axis = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_axis" ); level.spawn_axis = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_axis" );
level.spawn_allies = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_allies" ); level.spawn_allies = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_allies" );
level.spawn_start = []; level.spawn_start = [];
_a283 = level.teams; foreach ( team in level.teams )
_k283 = getFirstArrayKey( _a283 );
while ( isDefined( _k283 ) )
{ {
team = _a283[ _k283 ];
level.spawn_start[ team ] = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_" + team + "_start" ); level.spawn_start[ team ] = maps/mp/gametypes/_spawnlogic::getspawnpointarray( "mp_ctf_spawn_" + team + "_start" );
_k283 = getNextArrayKey( _a283, _k283 );
} }
level.oneflagtimer = createservertimer( "objective", 1,4 ); level.oneflagtimer = createservertimer( "objective", 1.4 );
level.oneflagtimer.x = 11; level.oneflagtimer.x = 11;
level.oneflagtimer.y = 120; level.oneflagtimer.y = 120;
level.oneflagtimer.horzalign = "user_left"; level.oneflagtimer.horzalign = "user_left";
@ -253,13 +247,13 @@ onstartgametype()
thread ctf(); thread ctf();
} }
hidetimerdisplayongameend( timerdisplay ) hidetimerdisplayongameend( timerdisplay ) //checked matches cerberus output
{ {
level waittill( "game_ended" ); level waittill( "game_ended" );
timerdisplay.alpha = 0; timerdisplay.alpha = 0;
} }
shouldplayovertimeround() shouldplayovertimeround() //checked matches cerberus output
{ {
if ( isDefined( game[ "overtime_round" ] ) ) if ( isDefined( game[ "overtime_round" ] ) )
{ {
@ -292,7 +286,7 @@ shouldplayovertimeround()
return 0; return 0;
} }
minutesandsecondsstring( milliseconds ) minutesandsecondsstring( milliseconds ) //checked matches cerberus output
{ {
minutes = floor( milliseconds / 60000 ); minutes = floor( milliseconds / 60000 );
milliseconds -= minutes * 60000; milliseconds -= minutes * 60000;
@ -307,7 +301,7 @@ minutesandsecondsstring( milliseconds )
} }
} }
setmatchscorehudelemforteam( team ) setmatchscorehudelemforteam( team ) //checked changed to match cerberus output
{ {
if ( !isDefined( game[ "overtime_round" ] ) ) if ( !isDefined( game[ "overtime_round" ] ) )
{ {
@ -317,21 +311,18 @@ setmatchscorehudelemforteam( team )
{ {
self settext( minutesandsecondsstring( game[ "ctf_overtime_best_time" ] ) ); self settext( minutesandsecondsstring( game[ "ctf_overtime_best_time" ] ) );
} }
else if ( isDefined( game[ "ctf_overtime_first_winner" ] ) && game[ "ctf_overtime_first_winner" ] == team )
{
self settext( minutesandsecondsstring( game[ "ctf_overtime_time_to_beat" ] ) );
return;
}
else else
{ {
if ( isDefined( game[ "ctf_overtime_first_winner" ] ) && game[ "ctf_overtime_first_winner" ] == team ) self settext( &"" );
{
self settext( minutesandsecondsstring( game[ "ctf_overtime_time_to_beat" ] ) );
return;
}
else
{
self settext( &"" );
}
} }
} }
onroundswitch() onroundswitch() //checked matches cerberus output
{ {
if ( !isDefined( game[ "switchedsides" ] ) ) if ( !isDefined( game[ "switchedsides" ] ) )
{ {
@ -341,7 +332,7 @@ onroundswitch()
game[ "switchedsides" ] = !game[ "switchedsides" ]; game[ "switchedsides" ] = !game[ "switchedsides" ];
} }
onendgame( winningteam ) onendgame( winningteam ) //checked matches cerberus output
{ {
if ( isDefined( game[ "overtime_round" ] ) ) if ( isDefined( game[ "overtime_round" ] ) )
{ {
@ -362,7 +353,7 @@ onendgame( winningteam )
} }
} }
onroundendgame( winningteam ) onroundendgame( winningteam ) //checked changed to match cerberus output
{ {
if ( isDefined( game[ "overtime_round" ] ) ) if ( isDefined( game[ "overtime_round" ] ) )
{ {
@ -383,24 +374,17 @@ onroundendgame( winningteam )
level.enddefeatreasontext = &"MP_ONE_FLAG_CTF_OVERTIME_DEFEAT_DID_NOT_DEFEND"; level.enddefeatreasontext = &"MP_ONE_FLAG_CTF_OVERTIME_DEFEAT_DID_NOT_DEFEND";
} }
} }
else else if ( !isDefined( winningteam ) || winningteam == "tie" )
{ {
if ( !isDefined( winningteam ) || winningteam == "tie" ) return "tie";
{
return "tie";
}
} }
return winningteam; return winningteam;
} }
if ( level.roundscorecarry == 0 ) if ( level.roundscorecarry == 0 )
{ {
_a451 = level.teams; foreach ( team in level.teams )
_k451 = getFirstArrayKey( _a451 );
while ( isDefined( _k451 ) )
{ {
team = _a451[ _k451 ];
[[ level._setteamscore ]]( team, game[ "roundswon" ][ team ] ); [[ level._setteamscore ]]( team, game[ "roundswon" ][ team ] );
_k451 = getNextArrayKey( _a451, _k451 );
} }
winner = maps/mp/gametypes/_globallogic::determineteamwinnerbygamestat( "roundswon" ); winner = maps/mp/gametypes/_globallogic::determineteamwinnerbygamestat( "roundswon" );
} }
@ -411,7 +395,7 @@ onroundendgame( winningteam )
return winner; return winner;
} }
onspawnplayerunified() onspawnplayerunified() //checked matches cerberus output
{ {
self.isflagcarrier = 0; self.isflagcarrier = 0;
self.flagcarried = undefined; self.flagcarried = undefined;
@ -419,7 +403,7 @@ onspawnplayerunified()
maps/mp/gametypes/_spawning::onspawnplayer_unified(); maps/mp/gametypes/_spawning::onspawnplayer_unified();
} }
onspawnplayer( predictedspawn ) onspawnplayer( predictedspawn ) //checked matches cerberus output
{ {
self.isflagcarrier = 0; self.isflagcarrier = 0;
self.flagcarried = undefined; self.flagcarried = undefined;
@ -441,9 +425,11 @@ onspawnplayer( predictedspawn )
{ {
spawnpoint = maps/mp/gametypes/_spawnlogic::getspawnpoint_nearteam( level.spawn_allies ); spawnpoint = maps/mp/gametypes/_spawnlogic::getspawnpoint_nearteam( level.spawn_allies );
} }
/*
/# /#
assert( isDefined( spawnpoint ) ); assert( isDefined( spawnpoint ) );
#/ #/
*/
if ( predictedspawn ) if ( predictedspawn )
{ {
self predictspawnpoint( spawnpoint.origin, spawnpoint.angles ); self predictspawnpoint( spawnpoint.origin, spawnpoint.angles );
@ -454,7 +440,7 @@ onspawnplayer( predictedspawn )
} }
} }
updategametypedvars() updategametypedvars() //checked matches cerberus output
{ {
level.flagcapturetime = getgametypesetting( "captureTime" ); level.flagcapturetime = getgametypesetting( "captureTime" );
level.flagtouchreturntime = getgametypesetting( "defuseTime" ); level.flagtouchreturntime = getgametypesetting( "defuseTime" );
@ -475,7 +461,7 @@ updategametypedvars()
} }
} }
createflag( trigger ) createflag( trigger ) //checked matches cerberus output
{ {
if ( isDefined( trigger.target ) ) if ( isDefined( trigger.target ) )
{ {
@ -543,7 +529,7 @@ createflag( trigger )
return flag; return flag;
} }
createflagzone( trigger ) createflagzone( trigger ) //checked changed to match cerberus output
{ {
visuals = []; visuals = [];
entityteam = trigger.script_team; entityteam = trigger.script_team;
@ -551,7 +537,7 @@ createflagzone( trigger )
{ {
entityteam = getotherteam( entityteam ); entityteam = getotherteam( entityteam );
} }
flagzone = maps/mp/gametypes/_gameobjects::createuseobject( entityteam, trigger, visuals, ( 0, 0, -1 ), istring( entityteam + "_base" ) ); flagzone = maps/mp/gametypes/_gameobjects::createuseobject( entityteam, trigger, visuals, ( 0, 0, 0 ), istring( entityteam + "_base" ) );
flagzone maps/mp/gametypes/_gameobjects::allowuse( "friendly" ); flagzone maps/mp/gametypes/_gameobjects::allowuse( "friendly" );
flagzone maps/mp/gametypes/_gameobjects::setusetime( 0 ); flagzone maps/mp/gametypes/_gameobjects::setusetime( 0 );
flagzone maps/mp/gametypes/_gameobjects::setusetext( &"MP_CAPTURING_FLAG" ); flagzone maps/mp/gametypes/_gameobjects::setusetext( &"MP_CAPTURING_FLAG" );
@ -562,7 +548,7 @@ createflagzone( trigger )
flag = level.teamflags[ entityteam ]; flag = level.teamflags[ entityteam ];
flag.flagbase = flagzone; flag.flagbase = flagzone;
flagzone.flag = flag; flagzone.flag = flag;
tracestart = trigger.origin + vectorScale( ( 0, 0, -1 ), 32 ); tracestart = trigger.origin + vectorScale( ( 0, 0, 1 ), 32 );
traceend = trigger.origin + vectorScale( ( 0, 0, -1 ), 32 ); traceend = trigger.origin + vectorScale( ( 0, 0, -1 ), 32 );
trace = bullettrace( tracestart, traceend, 0, undefined ); trace = bullettrace( tracestart, traceend, 0, undefined );
upangles = vectorToAngle( trace[ "normal" ] ); upangles = vectorToAngle( trace[ "normal" ] );
@ -574,7 +560,7 @@ createflagzone( trigger )
return flagzone; return flagzone;
} }
createflaghint( team, origin ) createflaghint( team, origin ) //checked matches cerberus output
{ {
radius = 128; radius = 128;
height = 64; height = 64;
@ -586,7 +572,7 @@ createflaghint( team, origin )
return trigger; return trigger;
} }
ctf() ctf() //checked changed to match cerberus output
{ {
level.flags = []; level.flags = [];
level.teamflags = []; level.teamflags = [];
@ -627,38 +613,33 @@ ctf()
flag_triggers = getentarray( "ctf_flag_pickup_trig", "targetname" ); flag_triggers = getentarray( "ctf_flag_pickup_trig", "targetname" );
if ( !isDefined( flag_triggers ) || flag_triggers.size != 2 ) if ( !isDefined( flag_triggers ) || flag_triggers.size != 2 )
{ {
/*
/# /#
maps/mp/_utility::error( "Not enough ctf_flag_pickup_trig triggers found in map. Need two." ); maps/mp/_utility::error( "Not enough ctf_flag_pickup_trig triggers found in map. Need two." );
#/ #/
*/
return; return;
} }
index = 0; for ( index = 0; index < flag_triggers.size; index++ )
while ( index < flag_triggers.size )
{ {
trigger = flag_triggers[ index ]; trigger = flag_triggers[ index ];
flag = createflag( trigger ); flag = createflag( trigger );
team = flag maps/mp/gametypes/_gameobjects::getownerteam(); team = flag maps/mp/gametypes/_gameobjects::getownerteam();
level.flags[ level.flags.size ] = flag; level.flags[ level.flags.size ] = flag;
level.teamflags[ team ] = flag; level.teamflags[ team ] = flag;
index++;
} }
primaryflags = getentarray( "flag_primary", "targetname" ); primaryflags = getentarray( "flag_primary", "targetname" );
secondaryflags = getentarray( "flag_secondary", "targetname" ); secondaryflags = getentarray( "flag_secondary", "targetname" );
domflags = []; domflags = [];
index = 0; for ( index = 0; index < primaryflags.size; index++ )
while ( index < primaryflags.size )
{ {
domflags[ domflags.size ] = primaryflags[ index ]; domflags[ domflags.size ] = primaryflags[ index ];
index++;
} }
index = 0; for ( index = 0; index < secondaryflags.size; index++ )
while ( index < secondaryflags.size )
{ {
domflags[ domflags.size ] = secondaryflags[ index ]; domflags[ domflags.size ] = secondaryflags[ index ];
index++;
} }
index = 0; for ( index = 0; index < domflags.size; index++ )
while ( index < domflags.size )
{ {
trigger = domflags[ index ]; trigger = domflags[ index ];
if ( trigger.script_label == "_b" ) if ( trigger.script_label == "_b" )
@ -669,18 +650,18 @@ ctf()
level.neutralflag = flag; level.neutralflag = flag;
flag maps/mp/gametypes/_gameobjects::allowcarry( "any" ); flag maps/mp/gametypes/_gameobjects::allowcarry( "any" );
} }
index++;
} }
flag_zones = getentarray( "ctf_flag_zone_trig", "targetname" ); flag_zones = getentarray( "ctf_flag_zone_trig", "targetname" );
if ( !isDefined( flag_zones ) || flag_zones.size != 2 ) if ( !isDefined( flag_zones ) || flag_zones.size != 2 )
{ {
/*
/# /#
maps/mp/_utility::error( "Not enough ctf_flag_zone_trig triggers found in map. Need two." ); maps/mp/_utility::error( "Not enough ctf_flag_zone_trig triggers found in map. Need two." );
#/ #/
*/
return; return;
} }
index = 0; for ( index = 0; index < flag_zones.size; index++ )
while ( index < flag_zones.size )
{ {
trigger = flag_zones[ index ]; trigger = flag_zones[ index ];
flagzone = createflagzone( trigger ); flagzone = createflagzone( trigger );
@ -690,19 +671,18 @@ ctf()
level.flaghints[ team ] = createflaghint( team, trigger.origin ); level.flaghints[ team ] = createflaghint( team, trigger.origin );
facing_angle = getDvarInt( "scr_ctf_spawnPointFacingAngle" ); facing_angle = getDvarInt( "scr_ctf_spawnPointFacingAngle" );
setspawnpointsbaseweight( getotherteamsmask( team ), trigger.origin, facing_angle, level.spawnsystem.objective_facing_bonus ); setspawnpointsbaseweight( getotherteamsmask( team ), trigger.origin, facing_angle, level.spawnsystem.objective_facing_bonus );
index++;
} }
createreturnmessageelems(); createreturnmessageelems();
} }
ctf_icon_hide() ctf_icon_hide() //checked matches cerberus output
{ {
level waittill( "game_ended" ); level waittill( "game_ended" );
level.teamflags[ "allies" ] maps/mp/gametypes/_gameobjects::setvisibleteam( "none" ); level.teamflags[ "allies" ] maps/mp/gametypes/_gameobjects::setvisibleteam( "none" );
level.teamflags[ "axis" ] maps/mp/gametypes/_gameobjects::setvisibleteam( "none" ); level.teamflags[ "axis" ] maps/mp/gametypes/_gameobjects::setvisibleteam( "none" );
} }
removeinfluencers() removeinfluencers() //checked matches cerberus output
{ {
if ( isDefined( self.spawn_influencer_enemy_carrier ) ) if ( isDefined( self.spawn_influencer_enemy_carrier ) )
{ {
@ -721,19 +701,15 @@ removeinfluencers()
} }
} }
ondrop( player ) ondrop( player ) //checked changed to match cerberus output
{ {
if ( isDefined( player ) ) if ( isDefined( player ) )
{ {
player clearclientflag( 0 ); player clearclientflag( 0 );
} }
_a825 = level.flagzones; foreach ( goal in level.flagzones )
_k825 = getFirstArrayKey( _a825 );
while ( isDefined( _k825 ) )
{ {
goal = _a825[ _k825 ];
goal maps/mp/gametypes/_gameobjects::setflags( 0 ); goal maps/mp/gametypes/_gameobjects::setflags( 0 );
_k825 = getNextArrayKey( _a825, _k825 );
} }
otherteam = self maps/mp/gametypes/_gameobjects::getownerteam(); otherteam = self maps/mp/gametypes/_gameobjects::getownerteam();
team = getotherteam( otherteam ); team = getotherteam( otherteam );
@ -810,7 +786,7 @@ ondrop( player )
self.spawn_influencer_dropped = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, flag_origin, ss.ctf_dropped_influencer_radius, ss.ctf_dropped_influencer_score, player_team_mask | enemy_team_mask, "ctf_flag_dropped,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( ss.ctf_dropped_influencer_score_curve ), level.idleflagreturntime, self.trigger ); self.spawn_influencer_dropped = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, flag_origin, ss.ctf_dropped_influencer_radius, ss.ctf_dropped_influencer_score, player_team_mask | enemy_team_mask, "ctf_flag_dropped,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( ss.ctf_dropped_influencer_score_curve ), level.idleflagreturntime, self.trigger );
} }
onpickup( player ) onpickup( player ) //checked changed to match cerberus output
{ {
carrierkilledby = self.carrierkilledby; carrierkilledby = self.carrierkilledby;
self.carrierkilledby = undefined; self.carrierkilledby = undefined;
@ -821,16 +797,12 @@ onpickup( player )
} }
player addplayerstatwithgametype( "PICKUPS", 1 ); player addplayerstatwithgametype( "PICKUPS", 1 );
self.ownerteam = player.team; self.ownerteam = player.team;
_a945 = level.flagzones; foreach ( goal in level.flagzones )
_k945 = getFirstArrayKey( _a945 );
while ( isDefined( _k945 ) )
{ {
goal = _a945[ _k945 ];
if ( goal.ownerteam != player.team ) if ( goal.ownerteam != player.team )
{ {
goal maps/mp/gametypes/_gameobjects::setflags( 1 ); goal maps/mp/gametypes/_gameobjects::setflags( 1 );
} }
_k945 = getNextArrayKey( _a945, _k945 );
} }
if ( level.touchreturn ) if ( level.touchreturn )
{ {
@ -880,7 +852,7 @@ onpickup( player )
self.spawn_influencer_friendly_carrier = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, player.origin, ss.ctf_friendly_carrier_influencer_radius, ss.ctf_friendly_carrier_influencer_score, player_team_mask, "ctf_flag_friendly_carrier,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( ss.ctf_friendly_carrier_influencer_score_curve ), 0, player ); self.spawn_influencer_friendly_carrier = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, player.origin, ss.ctf_friendly_carrier_influencer_radius, ss.ctf_friendly_carrier_influencer_score, player_team_mask, "ctf_flag_friendly_carrier,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( ss.ctf_friendly_carrier_influencer_score_curve ), 0, player );
} }
watchforscore() watchforscore() //checked changed to match cerberus output
{ {
level endon( "game_ended" ); level endon( "game_ended" );
self endon( "death" ); self endon( "death" );
@ -897,21 +869,13 @@ watchforscore()
flag maps/mp/gametypes/_gameobjects::setvisibleteam( "none" ); flag maps/mp/gametypes/_gameobjects::setvisibleteam( "none" );
flag maps/mp/gametypes/_gameobjects::returnhome(); flag maps/mp/gametypes/_gameobjects::returnhome();
flag.visuals[ 0 ] hide(); flag.visuals[ 0 ] hide();
_a1063 = level.flags; foreach ( baseflag in level.flags )
_k1063 = getFirstArrayKey( _a1063 );
while ( isDefined( _k1063 ) )
{ {
baseflag = _a1063[ _k1063 ];
baseflag.visuals[ 0 ] hide(); baseflag.visuals[ 0 ] hide();
_k1063 = getNextArrayKey( _a1063, _k1063 );
} }
_a1067 = level.flagzones; foreach ( goal in level.flagzones )
_k1067 = getFirstArrayKey( _a1067 );
while ( isDefined( _k1067 ) )
{ {
goal = _a1067[ _k1067 ];
goal maps/mp/gametypes/_gameobjects::setflags( 0 ); goal maps/mp/gametypes/_gameobjects::setflags( 0 );
_k1067 = getNextArrayKey( _a1067, _k1067 );
} }
level.oneflagtimer.label = game[ "strings" ][ "flag_respawning_in" ]; level.oneflagtimer.label = game[ "strings" ][ "flag_respawning_in" ];
level.oneflagtimer settimer( level.flagrespawntime ); level.oneflagtimer settimer( level.flagrespawntime );
@ -926,17 +890,19 @@ watchforscore()
} }
} }
onpickupmusicstate( player ) onpickupmusicstate( player ) //checked changed at own discretion
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "death" ); self endon( "death" );
wait 6; wait 6;
if ( player.isflagcarrier ) if ( player.isflagcarrier )
{ {
//added from bo1 ctf.gsc
player thread maps\mp\gametypes\_globallogic_audio::set_music_on_player( "SUSPENSE", false, false);
} }
} }
ishome() ishome() //checked matches cerberus output
{ {
if ( isDefined( self.carrier ) ) if ( isDefined( self.carrier ) )
{ {
@ -949,7 +915,7 @@ ishome()
return 1; return 1;
} }
returnflag() returnflag() //checked matches cerberus output
{ {
team = self maps/mp/gametypes/_gameobjects::getownerteam(); team = self maps/mp/gametypes/_gameobjects::getownerteam();
otherteam = getotherteam( team ); otherteam = getotherteam( team );
@ -972,7 +938,7 @@ returnflag()
maps/mp/gametypes/_globallogic_audio::leaderdialog( "theyreturn_flag", otherteam, "ctf_flag" ); maps/mp/gametypes/_globallogic_audio::leaderdialog( "theyreturn_flag", otherteam, "ctf_flag" );
} }
oncapture( player ) oncapture( player ) //checked matches cerberus output
{ {
team = player.pers[ "team" ]; team = player.pers[ "team" ];
enemyteam = getotherteam( team ); enemyteam = getotherteam( team );
@ -1015,13 +981,13 @@ oncapture( player )
flag removeinfluencers(); flag removeinfluencers();
} }
giveflagcapturexp( player ) giveflagcapturexp( player ) //checked matches cerberus output
{ {
maps/mp/_scoreevents::processscoreevent( "flag_capture", player ); maps/mp/_scoreevents::processscoreevent( "flag_capture", player );
player recordgameevent( "capture" ); player recordgameevent( "capture" );
} }
onreset() onreset() //checked matches cerberus output
{ {
update_hints(); update_hints();
team = self maps/mp/gametypes/_gameobjects::getownerteam(); team = self maps/mp/gametypes/_gameobjects::getownerteam();
@ -1032,7 +998,7 @@ onreset()
self.visuals[ 0 ] clearclientflag( 6 ); self.visuals[ 0 ] clearclientflag( 6 );
} }
getotherflag( flag ) getotherflag( flag ) //checked matches cerberus output
{ {
if ( flag == level.flags[ 0 ] ) if ( flag == level.flags[ 0 ] )
{ {
@ -1041,7 +1007,7 @@ getotherflag( flag )
return level.flags[ 0 ]; return level.flags[ 0 ];
} }
onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked changed to match cerberus output
{ {
if ( isDefined( attacker ) && isplayer( attacker ) ) if ( isDefined( attacker ) && isplayer( attacker ) )
{ {
@ -1144,10 +1110,9 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
} }
if ( isDefined( attacker ) && isplayer( attacker ) && attacker.pers[ "team" ] != self.pers[ "team" ] ) if ( isDefined( attacker ) && isplayer( attacker ) && attacker.pers[ "team" ] != self.pers[ "team" ] )
{ {
while ( isDefined( self.flagcarried ) ) if ( isDefined( self.flagcarried ) )
{ {
index = 0; for ( index = 0; index < level.flags.size; index++ )
while ( index < level.flags.size )
{ {
currentflag = level.flags[ index ]; currentflag = level.flags[ index ];
if ( currentflag.ownerteam == self.team ) if ( currentflag.ownerteam == self.team )
@ -1162,10 +1127,6 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
} }
} }
} }
else
{
index++;
}
} }
} }
attacker recordgameevent( "kill_carrier" ); attacker recordgameevent( "kill_carrier" );
@ -1173,32 +1134,32 @@ onplayerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shi
} }
} }
createreturnmessageelems() createreturnmessageelems() //checked matches cerberus output
{ {
level.returnmessageelems = []; level.returnmessageelems = [];
level.returnmessageelems[ "allies" ][ "axis" ] = createservertimer( "objective", 1,4, "allies" ); level.returnmessageelems[ "allies" ][ "axis" ] = createservertimer( "objective", 1.4, "allies" );
level.returnmessageelems[ "allies" ][ "axis" ] setpoint( "TOPRIGHT", "TOPRIGHT", 0, 0 ); level.returnmessageelems[ "allies" ][ "axis" ] setpoint( "TOPRIGHT", "TOPRIGHT", 0, 0 );
level.returnmessageelems[ "allies" ][ "axis" ].label = &"MP_ENEMY_FLAG_RETURNING_IN"; level.returnmessageelems[ "allies" ][ "axis" ].label = &"MP_ENEMY_FLAG_RETURNING_IN";
level.returnmessageelems[ "allies" ][ "axis" ].alpha = 0; level.returnmessageelems[ "allies" ][ "axis" ].alpha = 0;
level.returnmessageelems[ "allies" ][ "axis" ].archived = 0; level.returnmessageelems[ "allies" ][ "axis" ].archived = 0;
level.returnmessageelems[ "allies" ][ "allies" ] = createservertimer( "objective", 1,4, "allies" ); level.returnmessageelems[ "allies" ][ "allies" ] = createservertimer( "objective", 1.4, "allies" );
level.returnmessageelems[ "allies" ][ "allies" ] setpoint( "TOPRIGHT", "TOPRIGHT", 0, 20 ); level.returnmessageelems[ "allies" ][ "allies" ] setpoint( "TOPRIGHT", "TOPRIGHT", 0, 20 );
level.returnmessageelems[ "allies" ][ "allies" ].label = &"MP_YOUR_FLAG_RETURNING_IN"; level.returnmessageelems[ "allies" ][ "allies" ].label = &"MP_YOUR_FLAG_RETURNING_IN";
level.returnmessageelems[ "allies" ][ "allies" ].alpha = 0; level.returnmessageelems[ "allies" ][ "allies" ].alpha = 0;
level.returnmessageelems[ "allies" ][ "allies" ].archived = 0; level.returnmessageelems[ "allies" ][ "allies" ].archived = 0;
level.returnmessageelems[ "axis" ][ "allies" ] = createservertimer( "objective", 1,4, "axis" ); level.returnmessageelems[ "axis" ][ "allies" ] = createservertimer( "objective", 1.4, "axis" );
level.returnmessageelems[ "axis" ][ "allies" ] setpoint( "TOPRIGHT", "TOPRIGHT", 0, 0 ); level.returnmessageelems[ "axis" ][ "allies" ] setpoint( "TOPRIGHT", "TOPRIGHT", 0, 0 );
level.returnmessageelems[ "axis" ][ "allies" ].label = &"MP_ENEMY_FLAG_RETURNING_IN"; level.returnmessageelems[ "axis" ][ "allies" ].label = &"MP_ENEMY_FLAG_RETURNING_IN";
level.returnmessageelems[ "axis" ][ "allies" ].alpha = 0; level.returnmessageelems[ "axis" ][ "allies" ].alpha = 0;
level.returnmessageelems[ "axis" ][ "allies" ].archived = 0; level.returnmessageelems[ "axis" ][ "allies" ].archived = 0;
level.returnmessageelems[ "axis" ][ "axis" ] = createservertimer( "objective", 1,4, "axis" ); level.returnmessageelems[ "axis" ][ "axis" ] = createservertimer( "objective", 1.4, "axis" );
level.returnmessageelems[ "axis" ][ "axis" ] setpoint( "TOPRIGHT", "TOPRIGHT", 0, 20 ); level.returnmessageelems[ "axis" ][ "axis" ] setpoint( "TOPRIGHT", "TOPRIGHT", 0, 20 );
level.returnmessageelems[ "axis" ][ "axis" ].label = &"MP_YOUR_FLAG_RETURNING_IN"; level.returnmessageelems[ "axis" ][ "axis" ].label = &"MP_YOUR_FLAG_RETURNING_IN";
level.returnmessageelems[ "axis" ][ "axis" ].alpha = 0; level.returnmessageelems[ "axis" ][ "axis" ].alpha = 0;
level.returnmessageelems[ "axis" ][ "axis" ].archived = 0; level.returnmessageelems[ "axis" ][ "axis" ].archived = 0;
} }
returnflagaftertimemsg( time ) returnflagaftertimemsg( time ) //checked matches cerberus output
{ {
if ( level.touchreturn || level.idleflagreturntime == 0 ) if ( level.touchreturn || level.idleflagreturntime == 0 )
{ {
@ -1215,19 +1176,23 @@ returnflagaftertimemsg( time )
} }
} }
returnflaghudelems( time ) returnflaghudelems( time ) //checked matches cerberus output
{ {
self endon( "picked_up" ); self endon( "picked_up" );
level endon( "game_ended" ); level endon( "game_ended" );
ownerteam = self maps/mp/gametypes/_gameobjects::getownerteam(); ownerteam = self maps/mp/gametypes/_gameobjects::getownerteam();
/*
/# /#
assert( !level.returnmessageelems[ "axis" ][ ownerteam ].alpha ); assert( !level.returnmessageelems[ "axis" ][ ownerteam ].alpha );
#/ #/
*/
level.returnmessageelems[ "axis" ][ ownerteam ].alpha = 1; level.returnmessageelems[ "axis" ][ ownerteam ].alpha = 1;
level.returnmessageelems[ "axis" ][ ownerteam ] settimer( time ); level.returnmessageelems[ "axis" ][ ownerteam ] settimer( time );
/*
/# /#
assert( !level.returnmessageelems[ "allies" ][ ownerteam ].alpha ); assert( !level.returnmessageelems[ "allies" ][ ownerteam ].alpha );
#/ #/
*/
level.returnmessageelems[ "allies" ][ ownerteam ].alpha = 1; level.returnmessageelems[ "allies" ][ ownerteam ].alpha = 1;
level.returnmessageelems[ "allies" ][ ownerteam ] settimer( time ); level.returnmessageelems[ "allies" ][ ownerteam ] settimer( time );
if ( time <= 0 ) if ( time <= 0 )
@ -1241,16 +1206,16 @@ returnflaghudelems( time )
return 1; return 1;
} }
clearreturnflaghudelems() clearreturnflaghudelems() //checked matches cerberus output
{ {
ownerteam = self maps/mp/gametypes/_gameobjects::getownerteam(); ownerteam = self maps/mp/gametypes/_gameobjects::getownerteam();
level.returnmessageelems[ "allies" ][ ownerteam ].alpha = 0; level.returnmessageelems[ "allies" ][ ownerteam ].alpha = 0;
level.returnmessageelems[ "axis" ][ ownerteam ].alpha = 0; level.returnmessageelems[ "axis" ][ ownerteam ].alpha = 0;
} }
resetflagbaseeffect() resetflagbaseeffect() //checked matches cerberus output
{ {
wait 0,1; wait 0.1;
if ( isDefined( self.baseeffect ) ) if ( isDefined( self.baseeffect ) )
{ {
self.baseeffect delete(); self.baseeffect delete();
@ -1265,7 +1230,7 @@ resetflagbaseeffect()
triggerfx( self.baseeffect ); triggerfx( self.baseeffect );
} }
turn_on() turn_on() //checked matches cerberus output
{ {
if ( level.hardcoremode ) if ( level.hardcoremode )
{ {
@ -1274,12 +1239,12 @@ turn_on()
self.origin = self.original_origin; self.origin = self.original_origin;
} }
turn_off() turn_off() //checked matches cerberus output
{ {
self.origin = ( self.original_origin[ 0 ], self.original_origin[ 1 ], self.original_origin[ 2 ] - 10000 ); self.origin = ( self.original_origin[ 0 ], self.original_origin[ 1 ], self.original_origin[ 2 ] - 10000 );
} }
update_hints() update_hints() //checked matches cerberus output
{ {
allied_flag = level.teamflags[ "allies" ]; allied_flag = level.teamflags[ "allies" ];
axis_flag = level.teamflags[ "axis" ]; axis_flag = level.teamflags[ "axis" ];
@ -1305,7 +1270,7 @@ update_hints()
} }
} }
claim_trigger( trigger ) claim_trigger( trigger ) //checked matches cerberus output
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self clientclaimtrigger( trigger ); self clientclaimtrigger( trigger );
@ -1313,7 +1278,7 @@ claim_trigger( trigger )
self clientreleasetrigger( trigger ); self clientreleasetrigger( trigger );
} }
createflagspawninfluencer( entityteam ) createflagspawninfluencer( entityteam ) //checked matches cerberus output
{ {
ctf_friendly_base_influencer_score = level.spawnsystem.ctf_friendly_base_influencer_score; ctf_friendly_base_influencer_score = level.spawnsystem.ctf_friendly_base_influencer_score;
ctf_friendly_base_influencer_score_curve = level.spawnsystem.ctf_friendly_base_influencer_score_curve; ctf_friendly_base_influencer_score_curve = level.spawnsystem.ctf_friendly_base_influencer_score_curve;
@ -1328,7 +1293,7 @@ createflagspawninfluencer( entityteam )
self.spawn_influencer_enemy = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, self.trigger.origin, ctf_enemy_base_influencer_radius, ctf_enemy_base_influencer_score, other_team_mask, "ctf_enemy_base,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( ctf_enemy_base_influencer_score_curve ) ); self.spawn_influencer_enemy = addsphereinfluencer( level.spawnsystem.einfluencer_type_game_mode, self.trigger.origin, ctf_enemy_base_influencer_radius, ctf_enemy_base_influencer_score, other_team_mask, "ctf_enemy_base,r,s", maps/mp/gametypes/_spawning::get_score_curve_index( ctf_enemy_base_influencer_score_curve ) );
} }
ctf_gamemodespawndvars( reset_dvars ) ctf_gamemodespawndvars( reset_dvars ) //checked matches cerberus output
{ {
ss = level.spawnsystem; ss = level.spawnsystem;
ss.ctf_friendly_base_influencer_score = set_dvar_float_if_unset( "scr_spawn_ctf_friendly_base_influencer_score", "0", reset_dvars ); ss.ctf_friendly_base_influencer_score = set_dvar_float_if_unset( "scr_spawn_ctf_friendly_base_influencer_score", "0", reset_dvars );
@ -1348,7 +1313,7 @@ ctf_gamemodespawndvars( reset_dvars )
ss.ctf_dropped_influencer_radius = set_dvar_float_if_unset( "scr_spawn_ctf_dropped_influencer_radius", "" + ( 10 * get_player_height() ), reset_dvars ); ss.ctf_dropped_influencer_radius = set_dvar_float_if_unset( "scr_spawn_ctf_dropped_influencer_radius", "" + ( 10 * get_player_height() ), reset_dvars );
} }
ctf_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ) ctf_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ) //checked matches cerberus output
{ {
teamkill_penalty = maps/mp/gametypes/_globallogic_defaults::default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon ); teamkill_penalty = maps/mp/gametypes/_globallogic_defaults::default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon );
if ( isDefined( self.isflagcarrier ) && self.isflagcarrier ) if ( isDefined( self.isflagcarrier ) && self.isflagcarrier )
@ -1358,7 +1323,7 @@ ctf_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon )
return teamkill_penalty; return teamkill_penalty;
} }
ctf_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon ) ctf_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon ) //checked matches cerberus output
{ {
teamkill_score = maps/mp/gametypes/_rank::getscoreinfovalue( "kill" ); teamkill_score = maps/mp/gametypes/_rank::getscoreinfovalue( "kill" );
if ( isDefined( self.isflagcarrier ) && self.isflagcarrier ) if ( isDefined( self.isflagcarrier ) && self.isflagcarrier )
@ -1367,3 +1332,5 @@ ctf_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon )
} }
return int( teamkill_score ); return int( teamkill_score );
} }

View File

@ -23,13 +23,6 @@ patch_mp/maps/mp/bots/_bot.gsc
patch_mp/maps/mp/bots/_bot_combat.gsc patch_mp/maps/mp/bots/_bot_combat.gsc
patch_mp/maps/mp/bots/_bot_loadout.gsc patch_mp/maps/mp/bots/_bot_loadout.gsc
patch_mp/maps/mp/gametypes/conf.gsc
patch_mp/maps/mp/gametypes/dm.gsc
patch_mp/maps/mp/gametypes/gun.gsc
patch_mp/maps/mp/gametypes/oic.gsc
patch_mp/maps/mp/gametypes/sas.gsc
patch_mp/maps/mp/gametypes/shrp.gsc
patch_mp/maps/mp/gametypes/tdm.gsc
patch_mp/maps/mp/gametypes/_callbacksetup.gsc patch_mp/maps/mp/gametypes/_callbacksetup.gsc
patch_mp/maps/mp/gametypes/_damagefeedback.gsc patch_mp/maps/mp/gametypes/_damagefeedback.gsc
patch_mp/maps/mp/gametypes/_healthoverlay.gsc patch_mp/maps/mp/gametypes/_healthoverlay.gsc
@ -40,6 +33,20 @@ patch_mp/maps/mp/gametypes/_perplayer.gsc
patch_mp/maps/mp/gametypes/_serversettings.gsc patch_mp/maps/mp/gametypes/_serversettings.gsc
patch_mp/maps/mp/gametypes/_tweakables.gsc patch_mp/maps/mp/gametypes/_tweakables.gsc
patch_mp/maps/mp/gametypes/_weapon_utils.gsc patch_mp/maps/mp/gametypes/_weapon_utils.gsc
patch_mp/maps/mp/gametypes/conf.gsc
patch_mp/maps/mp/gametypes/ctf.gsc
patch_mp/maps/mp/gametypes/dem.gsc
patch_mp/maps/mp/gametypes/dm.gsc
patch_mp/maps/mp/gametypes/dom.gsc
patch_mp/maps/mp/gametypes/gun.gsc
patch_mp/maps/mp/gametypes/hq.gsc
patch_mp/maps/mp/gametypes/koth.gsc
patch_mp/maps/mp/gametypes/oic.gsc
patch_mp/maps/mp/gametypes/oneflag.gsc
patch_mp/maps/mp/gametypes/sas.gsc
patch_mp/maps/mp/gametypes/sd.gsc
patch_mp/maps/mp/gametypes/shrp.gsc
patch_mp/maps/mp/gametypes/tdm.gsc
``` ```
### The following scripts are not checked yet, uploaded to setup a baseline: ### The following scripts are not checked yet, uploaded to setup a baseline:
``` ```
@ -81,13 +88,6 @@ patch_mp/maps/mp/gametypes/_spectating.gsc
patch_mp/maps/mp/gametypes/_wager.gsc patch_mp/maps/mp/gametypes/_wager.gsc
patch_mp/maps/mp/gametypes/_weaponobjects.gsc patch_mp/maps/mp/gametypes/_weaponobjects.gsc
patch_mp/maps/mp/gametypes/_weapons.gsc patch_mp/maps/mp/gametypes/_weapons.gsc
patch_mp/maps/mp/gametypes/ctf.gsc
patch_mp/maps/mp/gametypes/dem.gsc
patch_mp/maps/mp/gametypes/dom.gsc
patch_mp/maps/mp/gametypes/hq.gsc
patch_mp/maps/mp/gametypes/koth.gsc
patch_mp/maps/mp/gametypes/oneflag.gsc
patch_mp/maps/mp/gametypes/sd.gsc
``` ```
### The following scipts are dev scripts filled with dev calls making them useless to modify for now ### The following scipts are dev scripts filled with dev calls making them useless to modify for now
``` ```