properly uploaded mp scripts instead of zm versions

Checked_weapon_utils for both mp and zm.
This commit is contained in:
JezuzLizard 2020-04-29 11:02:01 -07:00
parent 7e100abc34
commit 18b5824147
30 changed files with 7796 additions and 3440 deletions

View File

@ -1,7 +1,8 @@
#include maps/mp/gametypes_zm/_hostmigration;
#include maps/mp/gametypes_zm/_globallogic_actor;
#include maps/mp/gametypes_zm/_globallogic_player;
#include maps/mp/gametypes_zm/_globallogic;
#include maps/mp/gametypes/_hostmigration;
#include maps/mp/gametypes/_globallogic_vehicle;
#include maps/mp/gametypes/_globallogic_actor;
#include maps/mp/gametypes/_globallogic_player;
#include maps/mp/gametypes/_globallogic;
#include maps/mp/_audio;
#include maps/mp/_utility;
@ -29,6 +30,7 @@ codecallback_playerconnect()
codecallback_playerdisconnect()
{
self notify( "disconnect" );
level notify( "disconnect" );
client_num = self getentitynumber();
[[ level.callbackplayerdisconnect ]]();
}
@ -49,14 +51,6 @@ codecallback_hostmigrationsave()
[[ level.callbackhostmigrationsave ]]();
}
codecallback_prehostmigrationsave()
{
/#
println( "****CodeCallback_PreHostMigrationSave****" );
#/
[[ level.callbackprehostmigrationsave ]]();
}
codecallback_playermigrated()
{
/#
@ -106,6 +100,7 @@ codecallback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdea
codecallback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset )
{
[[ level.callbackvehicleradiusdamage ]]( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset );
}
codecallback_faceeventnotify( notify_msg, ent )
@ -163,19 +158,20 @@ setupcallbacks()
setdefaultcallbacks()
{
level.callbackstartgametype = ::maps/mp/gametypes_zm/_globallogic::callback_startgametype;
level.callbackplayerconnect = ::maps/mp/gametypes_zm/_globallogic_player::callback_playerconnect;
level.callbackplayerdisconnect = ::maps/mp/gametypes_zm/_globallogic_player::callback_playerdisconnect;
level.callbackplayerdamage = ::maps/mp/gametypes_zm/_globallogic_player::callback_playerdamage;
level.callbackplayerkilled = ::maps/mp/gametypes_zm/_globallogic_player::callback_playerkilled;
level.callbackplayermelee = ::maps/mp/gametypes_zm/_globallogic_player::callback_playermelee;
level.callbackplayerlaststand = ::maps/mp/gametypes_zm/_globallogic_player::callback_playerlaststand;
level.callbackactordamage = ::maps/mp/gametypes_zm/_globallogic_actor::callback_actordamage;
level.callbackactorkilled = ::maps/mp/gametypes_zm/_globallogic_actor::callback_actorkilled;
level.callbackplayermigrated = ::maps/mp/gametypes_zm/_globallogic_player::callback_playermigrated;
level.callbackhostmigration = ::maps/mp/gametypes_zm/_hostmigration::callback_hostmigration;
level.callbackhostmigrationsave = ::maps/mp/gametypes_zm/_hostmigration::callback_hostmigrationsave;
level.callbackprehostmigrationsave = ::maps/mp/gametypes_zm/_hostmigration::callback_prehostmigrationsave;
level.callbackstartgametype = ::maps/mp/gametypes/_globallogic::callback_startgametype;
level.callbackplayerconnect = ::maps/mp/gametypes/_globallogic_player::callback_playerconnect;
level.callbackplayerdisconnect = ::maps/mp/gametypes/_globallogic_player::callback_playerdisconnect;
level.callbackplayerdamage = ::maps/mp/gametypes/_globallogic_player::callback_playerdamage;
level.callbackplayerkilled = ::maps/mp/gametypes/_globallogic_player::callback_playerkilled;
level.callbackplayermelee = ::maps/mp/gametypes/_globallogic_player::callback_playermelee;
level.callbackplayerlaststand = ::maps/mp/gametypes/_globallogic_player::callback_playerlaststand;
level.callbackactordamage = ::maps/mp/gametypes/_globallogic_actor::callback_actordamage;
level.callbackactorkilled = ::maps/mp/gametypes/_globallogic_actor::callback_actorkilled;
level.callbackvehicledamage = ::maps/mp/gametypes/_globallogic_vehicle::callback_vehicledamage;
level.callbackvehicleradiusdamage = ::maps/mp/gametypes/_globallogic_vehicle::callback_vehicleradiusdamage;
level.callbackplayermigrated = ::maps/mp/gametypes/_globallogic_player::callback_playermigrated;
level.callbackhostmigration = ::maps/mp/gametypes/_hostmigration::callback_hostmigration;
level.callbackhostmigrationsave = ::maps/mp/gametypes/_hostmigration::callback_hostmigrationsave;
}
abortlevel()
@ -188,8 +184,8 @@ abortlevel()
level.callbackplayerdisconnect = ::callbackvoid;
level.callbackplayerdamage = ::callbackvoid;
level.callbackplayerkilled = ::callbackvoid;
level.callbackplayermelee = ::callbackvoid;
level.callbackplayerlaststand = ::callbackvoid;
level.callbackplayermelee = ::callbackvoid;
level.callbackactordamage = ::callbackvoid;
level.callbackactorkilled = ::callbackvoid;
level.callbackvehicledamage = ::callbackvoid;

View File

@ -37,7 +37,7 @@ updatedamagefeedback( mod, inflictor, perkfeedback )
switch( inflictor.soundmod )
{
case "player":
self thread playhitsound( mod, "mpl_hit_alert" );
self playlocalsound( "mpl_hit_alert" );
break;
case "heli":
self thread playhitsound( mod, "mpl_hit_alert_air" );
@ -58,7 +58,7 @@ updatedamagefeedback( mod, inflictor, perkfeedback )
break;
}
}
else self thread playhitsound( mod, "mpl_hit_alert_low" );
else self playlocalsound( "mpl_hit_alert_low" );
}
if ( isDefined( perkfeedback ) )
{

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,10 @@
#include maps/mp/gametypes_zm/_tweakables;
#include maps/mp/gametypes_zm/_hostmigration;
#include maps/mp/gametypes_zm/_weapons;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/gametypes/_tweakables;
#include maps/mp/killstreaks/_radar;
#include maps/mp/killstreaks/_killstreaks;
#include maps/mp/gametypes/_hostmigration;
#include maps/mp/gametypes/_weapons;
#include maps/mp/gametypes/_objpoints;
#include maps/mp/gametypes/_hud_util;
#include maps/mp/_utility;
#include common_scripts/utility;
@ -63,44 +66,6 @@ entity_is_allowed( entity, allowed_game_modes )
return allowed;
}
location_is_allowed( entity, location )
{
allowed = 1;
location_list = undefined;
if ( isDefined( entity.script_noteworthy ) )
{
location_list = entity.script_noteworthy;
}
if ( isDefined( entity.script_location ) )
{
location_list = entity.script_location;
}
while ( isDefined( location_list ) )
{
if ( location_list == "[all_modes]" )
{
allowed = 1;
break;
}
else allowed = 0;
gameobjectlocations = strtok( location_list, " " );
j = 0;
while ( j < gameobjectlocations.size )
{
if ( gameobjectlocations[ j ] == location )
{
allowed = 1;
break;
}
else
{
j++;
}
}
}
return allowed;
}
filter_script_vehicles_from_vehicle_descriptors( allowed_game_modes )
{
vehicle_descriptors = getentarray( "vehicle_descriptor", "targetname" );
@ -185,7 +150,6 @@ onplayerspawned()
ondeath()
{
level endon( "game_ended" );
self endon( "spawned_player" );
self waittill( "death" );
if ( isDefined( self.carryobject ) )
{
@ -247,18 +211,38 @@ createcarryobject( ownerteam, trigger, visuals, offset, objectivename )
carryobject.objid = [];
while ( !carryobject.newstyle )
{
_a319 = level.teams;
_k319 = getFirstArrayKey( _a319 );
while ( isDefined( _k319 ) )
_a269 = level.teams;
_k269 = getFirstArrayKey( _a269 );
while ( isDefined( _k269 ) )
{
team = _a319[ _k319 ];
team = _a269[ _k269 ];
carryobject.objid[ team ] = getnextobjid();
_k319 = getNextArrayKey( _a319, _k319 );
_k269 = getNextArrayKey( _a269, _k269 );
}
}
carryobject.objidpingfriendly = 0;
carryobject.objidpingenemy = 0;
level.objidstart += 2;
if ( !carryobject.newstyle )
{
if ( level.teambased )
{
_a283 = level.teams;
_k283 = getFirstArrayKey( _a283 );
while ( isDefined( _k283 ) )
{
team = _a283[ _k283 ];
objective_add( carryobject.objid[ team ], "invisible", carryobject.curorigin );
objective_team( carryobject.objid[ team ], team );
carryobject.objpoints[ team ] = maps/mp/gametypes/_objpoints::createteamobjpoint( "objpoint_" + team + "_" + carryobject.entnum, carryobject.curorigin + offset, team, undefined );
carryobject.objpoints[ team ].alpha = 0;
_k283 = getNextArrayKey( _a283, _k283 );
}
}
else objective_add( carryobject.objid[ level.nonteambasedteam ], "invisible", carryobject.curorigin );
carryobject.objpoints[ level.nonteambasedteam ] = maps/mp/gametypes/_objpoints::createteamobjpoint( "objpoint_" + level.nonteambasedteam + "_" + carryobject.entnum, carryobject.curorigin + offset, "all", undefined );
carryobject.objpoints[ level.nonteambasedteam ].alpha = 0;
}
carryobject.objectiveid = getnextobjid();
objective_add( carryobject.objectiveid, "invisible", carryobject.curorigin, objectivename );
carryobject.carrier = undefined;
@ -280,7 +264,34 @@ createcarryobject( ownerteam, trigger, visuals, offset, objectivename )
}
else
{
carryobject thread carryobjectproxthink();
carryobject.numtouching[ "neutral" ] = 0;
carryobject.numtouching[ "none" ] = 0;
carryobject.touchlist[ "neutral" ] = [];
carryobject.touchlist[ "none" ] = [];
_a339 = level.teams;
_k339 = getFirstArrayKey( _a339 );
while ( isDefined( _k339 ) )
{
team = _a339[ _k339 ];
carryobject.numtouching[ team ] = 0;
carryobject.touchlist[ team ] = [];
_k339 = getNextArrayKey( _a339, _k339 );
}
carryobject.curprogress = 0;
carryobject.usetime = 0;
carryobject.userate = 0;
carryobject.claimteam = "none";
carryobject.claimplayer = undefined;
carryobject.lastclaimteam = "none";
carryobject.lastclaimtime = 0;
carryobject.claimgraceperiod = 0;
carryobject.mustmaintainclaim = 0;
carryobject.cancontestclaim = 0;
carryobject.decayprogress = 0;
carryobject.teamusetimes = [];
carryobject.teamusetexts = [];
carryobject.onuse = ::setpickedup;
carryobject thread useobjectproxthink();
}
carryobject thread updatecarryobjectorigin();
carryobject thread updatecarryobjectobjectiveorigin();
@ -411,9 +422,13 @@ pickupobjectdelay( origin )
setpickedup( player )
{
if ( !isalive( player ) )
{
return;
}
if ( isDefined( player.carryobject ) )
{
if ( isDefined( player.carryobject.swappable ) && player.carryobject.swappable )
if ( is_true( player.carryobject.swappable ) )
{
player.carryobject thread setdropped();
}
@ -492,13 +507,21 @@ updatecarryobjectorigin()
if ( isDefined( self.carrier ) && level.teambased )
{
self.curorigin = self.carrier.origin + vectorScale( ( 0, 0, 1 ), 75 );
_a606 = level.teams;
_k606 = getFirstArrayKey( _a606 );
while ( isDefined( _k606 ) )
{
team = _a606[ _k606 ];
self.objpoints[ team ] maps/mp/gametypes/_objpoints::updateorigin( self.curorigin );
_k606 = getNextArrayKey( _a606, _k606 );
}
while ( self.visibleteam != "friendly" && self.visibleteam == "any" && self.objidpingfriendly )
{
_a626 = level.teams;
_k626 = getFirstArrayKey( _a626 );
while ( isDefined( _k626 ) )
_a613 = level.teams;
_k613 = getFirstArrayKey( _a613 );
while ( isDefined( _k613 ) )
{
team = _a626[ _k626 ];
team = _a613[ _k613 ];
if ( self isfriendlyteam( team ) )
{
if ( self.objpoints[ team ].isshown )
@ -509,7 +532,7 @@ updatecarryobjectorigin()
}
objective_position( self.objid[ team ], self.curorigin );
}
_k626 = getNextArrayKey( _a626, _k626 );
_k613 = getNextArrayKey( _a613, _k613 );
}
}
if ( self.visibleteam != "enemy" && self.visibleteam == "any" && self.objidpingenemy )
@ -533,11 +556,25 @@ updatecarryobjectorigin()
if ( isDefined( self.carrier ) )
{
self.curorigin = self.carrier.origin + vectorScale( ( 0, 0, 1 ), 75 );
self.objpoints[ level.nonteambasedteam ] maps/mp/gametypes/_objpoints::updateorigin( self.curorigin );
objective_position( self.objid[ level.nonteambasedteam ], self.curorigin );
wait 0,05;
break;
}
else
{
if ( level.teambased )
{
_a656 = level.teams;
_k656 = getFirstArrayKey( _a656 );
while ( isDefined( _k656 ) )
{
team = _a656[ _k656 ];
self.objpoints[ team ] maps/mp/gametypes/_objpoints::updateorigin( self.curorigin + self.offset3d );
_k656 = getNextArrayKey( _a656, _k656 );
}
}
else self.objpoints[ level.nonteambasedteam ] maps/mp/gametypes/_objpoints::updateorigin( self.curorigin + self.offset3d );
wait 0,05;
}
}
@ -585,7 +622,7 @@ giveobject( object )
self.disallowvehicleusage = 1;
if ( isDefined( object.visiblecarriermodel ) )
{
self maps/mp/gametypes_zm/_weapons::forcestowedweaponupdate();
self maps/mp/gametypes/_weapons::forcestowedweaponupdate();
}
if ( !object.newstyle )
{
@ -842,7 +879,7 @@ takeobject( object )
}
if ( isDefined( object.visiblecarriermodel ) )
{
self maps/mp/gametypes_zm/_weapons::detach_all_weapons();
self maps/mp/gametypes/_weapons::detach_all_weapons();
}
self.carryobject = undefined;
if ( !isalive( self ) )
@ -857,7 +894,7 @@ takeobject( object )
}
if ( isDefined( object.visiblecarriermodel ) )
{
self maps/mp/gametypes_zm/_weapons::forcestowedweaponupdate();
self maps/mp/gametypes/_weapons::forcestowedweaponupdate();
}
if ( !object.allowweapons )
{
@ -951,30 +988,47 @@ createuseobject( ownerteam, trigger, visuals, offset, objectivename )
useobject.objid = [];
if ( !useobject.newstyle )
{
_a1185 = level.teams;
_k1185 = getFirstArrayKey( _a1185 );
while ( isDefined( _k1185 ) )
_a1172 = level.teams;
_k1172 = getFirstArrayKey( _a1172 );
while ( isDefined( _k1172 ) )
{
team = _a1185[ _k1185 ];
team = _a1172[ _k1172 ];
useobject.objid[ team ] = getnextobjid();
_k1185 = getNextArrayKey( _a1185, _k1185 );
_k1172 = getNextArrayKey( _a1172, _k1172 );
}
if ( level.teambased )
{
_a1192 = level.teams;
_k1192 = getFirstArrayKey( _a1192 );
while ( isDefined( _k1192 ) )
_a1179 = level.teams;
_k1179 = getFirstArrayKey( _a1179 );
while ( isDefined( _k1179 ) )
{
team = _a1192[ _k1192 ];
team = _a1179[ _k1179 ];
objective_add( useobject.objid[ team ], "invisible", useobject.curorigin );
objective_team( useobject.objid[ team ], team );
_k1192 = getNextArrayKey( _a1192, _k1192 );
_k1179 = getNextArrayKey( _a1179, _k1179 );
}
}
else objective_add( useobject.objid[ level.nonteambasedteam ], "invisible", useobject.curorigin );
}
useobject.objectiveid = getnextobjid();
objective_add( useobject.objectiveid, "invisible", useobject.curorigin, objectivename );
objective_add( useobject.objectiveid, "invisible", useobject.curorigin + offset, objectivename );
if ( !useobject.newstyle )
{
if ( level.teambased )
{
_a1203 = level.teams;
_k1203 = getFirstArrayKey( _a1203 );
while ( isDefined( _k1203 ) )
{
team = _a1203[ _k1203 ];
useobject.objpoints[ team ] = maps/mp/gametypes/_objpoints::createteamobjpoint( "objpoint_" + team + "_" + useobject.entnum, useobject.curorigin + offset, team, undefined );
useobject.objpoints[ team ].alpha = 0;
_k1203 = getNextArrayKey( _a1203, _k1203 );
}
}
else useobject.objpoints[ level.nonteambasedteam ] = maps/mp/gametypes/_objpoints::createteamobjpoint( "objpoint_allies_" + useobject.entnum, useobject.curorigin + offset, "all", undefined );
useobject.objpoints[ level.nonteambasedteam ].alpha = 0;
}
useobject.interactteam = "none";
useobject.worldicons = [];
useobject.visibleteam = "none";
@ -991,15 +1045,17 @@ createuseobject( ownerteam, trigger, visuals, offset, objectivename )
useobject.numtouching[ "none" ] = 0;
useobject.touchlist[ "neutral" ] = [];
useobject.touchlist[ "none" ] = [];
_a1255 = level.teams;
_k1255 = getFirstArrayKey( _a1255 );
while ( isDefined( _k1255 ) )
_a1242 = level.teams;
_k1242 = getFirstArrayKey( _a1242 );
while ( isDefined( _k1242 ) )
{
team = _a1255[ _k1255 ];
team = _a1242[ _k1242 ];
useobject.numtouching[ team ] = 0;
useobject.touchlist[ team ] = [];
_k1255 = getNextArrayKey( _a1255, _k1255 );
_k1242 = getNextArrayKey( _a1242, _k1242 );
}
useobject.teamusetimes = [];
useobject.teamusetexts = [];
useobject.userate = 0;
useobject.claimteam = "none";
useobject.claimplayer = undefined;
@ -1146,9 +1202,12 @@ useobjectproxthink()
{
self [[ self.onuse ]]( creditplayer );
}
if ( !self.mustmaintainclaim )
{
self setclaimteam( "none" );
self.claimplayer = undefined;
}
}
if ( self.claimteam != "none" )
{
if ( self useobjectlockedforteam( self.claimteam ) )
@ -1161,7 +1220,7 @@ useobjectproxthink()
self.claimplayer = undefined;
self clearprogress();
}
else if ( self.usetime )
else if ( self.usetime || !self.mustmaintainclaim && self getownerteam() != self getclaimteam() )
{
if ( self.decayprogress && !self.numtouching[ self.claimteam ] )
{
@ -1216,7 +1275,9 @@ useobjectproxthink()
}
}
}
else if ( !self.mustmaintainclaim )
else
{
if ( !self.mustmaintainclaim )
{
if ( isDefined( self.onuse ) )
{
@ -1227,6 +1288,7 @@ useobjectproxthink()
self setclaimteam( "none" );
self.claimplayer = undefined;
}
break;
}
else if ( !self.numtouching[ self.claimteam ] )
{
@ -1236,6 +1298,7 @@ useobjectproxthink()
}
self setclaimteam( "none" );
self.claimplayer = undefined;
break;
}
else
{
@ -1254,15 +1317,38 @@ useobjectproxthink()
}
}
}
else
{
if ( self.curprogress > 0 && ( getTime() - self.lastclaimtime ) > ( self.claimgraceperiod * 1000 ) )
}
else if ( self.curprogress > 0 && ( getTime() - self.lastclaimtime ) > ( self.claimgraceperiod * 1000 ) )
{
self clearprogress();
}
if ( self.mustmaintainclaim && self getownerteam() != "none" )
{
if ( !self.numtouching[ self getownerteam() ] )
{
if ( isDefined( self.onunoccupied ) )
{
self [[ self.onunoccupied ]]();
}
break;
}
else
{
if ( self.cancontestclaim && self.lastclaimteam != "none" && self.numtouching[ self.lastclaimteam ] )
{
numother = getnumtouchingexceptteam( self.lastclaimteam );
if ( numother == 0 )
{
if ( isDefined( self.onuncontested ) )
{
self [[ self.onuncontested ]]( self.lastclaimteam );
}
}
}
}
}
wait 0,05;
maps/mp/gametypes_zm/_hostmigration::waittillhostmigrationdone();
maps/mp/gametypes/_hostmigration::waittillhostmigrationdone();
}
}
@ -1277,6 +1363,10 @@ useobjectlockedforteam( team )
canclaim( player )
{
if ( isDefined( self.carrier ) )
{
return 0;
}
if ( self.cancontestclaim )
{
numother = getnumtouchingexceptteam( player.pers[ "team" ] );
@ -1304,7 +1394,7 @@ proxtriggerthink()
{
continue;
}
while ( player isinvehicle() )
while ( player.spawntime == getTime() )
{
continue;
}
@ -1312,12 +1402,21 @@ proxtriggerthink()
{
continue;
}
while ( self isexcluded( player ) )
{
continue;
}
if ( self caninteractwith( player ) && self.claimteam == "none" )
{
if ( self canclaim( player ) )
{
setclaimteam( player.pers[ "team" ] );
self.claimplayer = player;
relativeteam = self getrelativeteam( player.pers[ "team" ] );
if ( isDefined( self.teamusetimes[ relativeteam ] ) )
{
self.usetime = self.teamusetimes[ relativeteam ];
}
if ( self.usetime && isDefined( self.onbeginuse ) )
{
self [[ self.onbeginuse ]]( self.claimplayer );
@ -1339,6 +1438,26 @@ proxtriggerthink()
}
}
isexcluded( player )
{
if ( !isDefined( self.exclusions ) )
{
return 0;
}
_a1676 = self.exclusions;
_k1676 = getFirstArrayKey( _a1676 );
while ( isDefined( _k1676 ) )
{
exclusion = _a1676[ _k1676 ];
if ( exclusion istouching( player ) )
{
return 1;
}
_k1676 = getNextArrayKey( _a1676, _k1676 );
}
return 0;
}
clearprogress()
{
self.curprogress = 0;
@ -1386,10 +1505,6 @@ continuetriggertouchthink( team, object )
{
return 0;
}
if ( self isinvehicle() )
{
return 0;
}
if ( !self istouching( object.trigger ) )
{
return 0;
@ -1516,7 +1631,7 @@ updateproxbar( object, forceremove )
}
if ( !isDefined( self.proxbar ) )
{
self.proxbar = self createprimaryprogressbar();
self.proxbar = createprimaryprogressbar();
self.proxbar.lastuserate = -1;
self.proxbar.lasthostmigrationstate = 0;
}
@ -1528,7 +1643,7 @@ updateproxbar( object, forceremove )
}
if ( !isDefined( self.proxbartext ) )
{
self.proxbartext = self createprimaryprogressbartext();
self.proxbartext = createprimaryprogressbartext();
self.proxbartext settext( object.usetext );
}
if ( self.proxbartext.hidden )
@ -1573,11 +1688,11 @@ updateproxbar( object, forceremove )
getnumtouchingexceptteam( ignoreteam )
{
numtouching = 0;
_a1902 = level.teams;
_k1902 = getFirstArrayKey( _a1902 );
while ( isDefined( _k1902 ) )
_a1944 = level.teams;
_k1944 = getFirstArrayKey( _a1944 );
while ( isDefined( _k1944 ) )
{
team = _a1902[ _k1902 ];
team = _a1944[ _k1944 ];
if ( ignoreteam == team )
{
}
@ -1585,7 +1700,7 @@ getnumtouchingexceptteam( ignoreteam )
{
numtouching += self.numtouching[ team ];
}
_k1902 = getNextArrayKey( _a1902, _k1902 );
_k1944 = getNextArrayKey( _a1944, _k1944 );
}
return numtouching;
}
@ -1633,7 +1748,7 @@ updateuserate()
useholdthink( player )
{
player notify( "use_hold" );
if ( isDefined( self.dontlinkplayertotrigger ) && !self.dontlinkplayertotrigger )
if ( !is_true( self.dontlinkplayertotrigger ) )
{
player playerlinkto( self.trigger );
player playerlinkedoffsetenable();
@ -1698,13 +1813,14 @@ useholdthink( player )
if ( isDefined( useweapon ) )
{
ammo = player getweaponammoclip( lastweapon );
if ( lastweapon != "none" && isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) != 0 )
if ( lastweapon != "none" && !maps/mp/killstreaks/_killstreaks::iskillstreakweapon( lastweapon ) && isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) != 0 )
{
player switchtoweapon( lastweapon );
}
else
{
player takeweapon( useweapon );
player switchtolastnonkillstreakweapon();
}
}
else
@ -1714,7 +1830,7 @@ useholdthink( player )
player _enableweapon();
}
}
if ( isDefined( self.dontlinkplayertotrigger ) && !self.dontlinkplayertotrigger )
if ( !is_true( self.dontlinkplayertotrigger ) )
{
player unlink();
}
@ -1805,8 +1921,15 @@ continueholdthinkloop( player, waitforweapon, timedout, usetime )
updatecurrentprogress()
{
if ( self.usetime )
{
if ( isDefined( self.curprogress ) )
{
progress = float( self.curprogress ) / self.usetime;
}
else
{
progress = 0;
}
objective_setprogress( self.objectiveid, clamp( progress, 0, 1 ) );
}
}
@ -1840,22 +1963,21 @@ useholdthinkloop( player, lastweapon )
player.claimtrigger = undefined;
if ( isDefined( useweapon ) )
{
player setweaponammostock( useweapon, 1 );
player setweaponammoclip( useweapon, 1 );
if ( lastweapon != "none" && isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) != 0 )
if ( lastweapon != "none" && !maps/mp/killstreaks/_killstreaks::iskillstreakweapon( lastweapon ) && isweaponequipment( lastweapon ) && player getweaponammoclip( lastweapon ) != 0 )
{
player switchtoweapon( lastweapon );
}
else
{
player takeweapon( useweapon );
player switchtolastnonkillstreakweapon();
}
}
else
{
player _enableweapon();
}
if ( isDefined( self.dontlinkplayertotrigger ) && !self.dontlinkplayertotrigger )
if ( !is_true( self.dontlinkplayertotrigger ) )
{
player unlink();
}
@ -1863,7 +1985,7 @@ useholdthinkloop( player, lastweapon )
return isalive( player );
}
wait 0,05;
maps/mp/gametypes_zm/_hostmigration::waittillhostmigrationdone();
maps/mp/gametypes/_hostmigration::waittillhostmigrationdone();
}
return 0;
}
@ -1879,8 +2001,8 @@ personalusebar( object )
{
return;
}
self.usebar = self createprimaryprogressbar();
self.usebartext = self createprimaryprogressbartext();
self.usebar = createprimaryprogressbar();
self.usebartext = createprimaryprogressbartext();
self.usebartext settext( object.usetext );
usetime = object.usetime;
lastrate = -1;
@ -2043,6 +2165,73 @@ updateworldicons()
updateworldicon( relativeteam, showicon )
{
if ( self.newstyle )
{
return;
}
if ( !isDefined( self.worldicons[ relativeteam ] ) )
{
showicon = 0;
}
updateteams = getupdateteams( relativeteam );
index = 0;
while ( index < updateteams.size )
{
if ( !level.teambased && updateteams[ index ] != level.nonteambasedteam )
{
index++;
continue;
}
else
{
opname = "objpoint_" + updateteams[ index ] + "_" + self.entnum;
objpoint = maps/mp/gametypes/_objpoints::getobjpointbyname( opname );
objpoint notify( "stop_flashing_thread" );
objpoint thread maps/mp/gametypes/_objpoints::stopflashing();
if ( showicon )
{
objpoint setshader( self.worldicons[ relativeteam ], level.objpointsize, level.objpointsize );
objpoint fadeovertime( 0,05 );
objpoint.alpha = objpoint.basealpha;
objpoint.isshown = 1;
iswaypoint = 1;
if ( isDefined( self.worldiswaypoint[ relativeteam ] ) )
{
iswaypoint = self.worldiswaypoint[ relativeteam ];
}
if ( isDefined( self.compassicons[ relativeteam ] ) )
{
objpoint setwaypoint( iswaypoint, self.worldicons[ relativeteam ] );
}
else
{
objpoint setwaypoint( iswaypoint );
}
if ( self.type == "carryObject" )
{
if ( isDefined( self.carrier ) && !shouldpingobject( relativeteam ) )
{
objpoint settargetent( self.carrier );
break;
}
else
{
objpoint cleartargetent();
}
}
index++;
continue;
}
else
{
objpoint fadeovertime( 0,05 );
objpoint.alpha = 0;
objpoint.isshown = 0;
objpoint cleartargetent();
}
}
index++;
}
}
updatecompassicons()
@ -2143,30 +2332,30 @@ getupdateteams( relativeteam )
{
if ( relativeteam == "friendly" )
{
_a2526 = level.teams;
_k2526 = getFirstArrayKey( _a2526 );
while ( isDefined( _k2526 ) )
_a2569 = level.teams;
_k2569 = getFirstArrayKey( _a2569 );
while ( isDefined( _k2569 ) )
{
team = _a2526[ _k2526 ];
team = _a2569[ _k2569 ];
if ( self isfriendlyteam( team ) )
{
updateteams[ updateteams.size ] = team;
}
_k2526 = getNextArrayKey( _a2526, _k2526 );
_k2569 = getNextArrayKey( _a2569, _k2569 );
}
}
else while ( relativeteam == "enemy" )
{
_a2534 = level.teams;
_k2534 = getFirstArrayKey( _a2534 );
while ( isDefined( _k2534 ) )
_a2577 = level.teams;
_k2577 = getFirstArrayKey( _a2577 );
while ( isDefined( _k2577 ) )
{
team = _a2534[ _k2534 ];
team = _a2577[ _k2577 ];
if ( !self isfriendlyteam( team ) )
{
updateteams[ updateteams.size ] = team;
}
_k2534 = getNextArrayKey( _a2534, _k2534 );
_k2577 = getNextArrayKey( _a2577, _k2577 );
}
}
}
@ -2184,6 +2373,21 @@ getupdateteams( relativeteam )
shouldshowcompassduetoradar( team )
{
showcompass = 0;
if ( !isDefined( self.carrier ) )
{
return 0;
}
if ( self.carrier hasperk( "specialty_gpsjammer" ) == 0 )
{
if ( maps/mp/killstreaks/_radar::teamhasspyplane( team ) )
{
showcompass = 1;
}
}
if ( maps/mp/killstreaks/_radar::teamhassatellite( team ) )
{
showcompass = 1;
}
return showcompass;
}
@ -2227,6 +2431,16 @@ setusetext( text )
self.usetext = text;
}
setteamusetime( relativeteam, time )
{
self.teamusetimes[ relativeteam ] = int( time * 1000 );
}
setteamusetext( relativeteam, text )
{
self.teamusetexts[ relativeteam ] = text;
}
setusehinttext( text )
{
self.trigger sethintstring( text );
@ -2234,7 +2448,7 @@ setusehinttext( text )
allowcarry( relativeteam )
{
self.interactteam = relativeteam;
allowuse( relativeteam );
}
allowuse( relativeteam )
@ -2246,7 +2460,7 @@ allowuse( relativeteam )
setvisibleteam( relativeteam )
{
self.visibleteam = relativeteam;
if ( !maps/mp/gametypes_zm/_tweakables::gettweakablevalue( "hud", "showobjicons" ) )
if ( !maps/mp/gametypes/_tweakables::gettweakablevalue( "hud", "showobjicons" ) )
{
self.visibleteam = "none";
}
@ -2368,17 +2582,17 @@ destroyobject( deletetrigger, forcehide )
forcehide = 1;
}
self disableobject( forcehide );
_a2742 = self.visuals;
_k2742 = getFirstArrayKey( _a2742 );
while ( isDefined( _k2742 ) )
_a2795 = self.visuals;
_k2795 = getFirstArrayKey( _a2795 );
while ( isDefined( _k2795 ) )
{
visual = _a2742[ _k2742 ];
visual = _a2795[ _k2795 ];
visual hide();
visual delete();
_k2742 = getNextArrayKey( _a2742, _k2742 );
_k2795 = getNextArrayKey( _a2795, _k2795 );
}
self.trigger notify( "destroyed" );
if ( isDefined( deletetrigger ) && deletetrigger )
if ( is_true( deletetrigger ) )
{
self.trigger delete();
}
@ -2607,8 +2821,15 @@ getnextobjid()
level.numgametypereservedobjectives++;
}
/#
assert( nextid < 32, "Ran out of objective IDs" );
if ( nextid >= 32 )
{
println( "^3SCRIPT WARNING: Ran out of objective IDs" );
#/
}
if ( nextid > 31 )
{
nextid = 31;
}
return nextid;
}

View File

@ -1,8 +1,10 @@
#include maps/mp/_challenges;
#include maps/mp/gametypes_zm/_damagefeedback;
#include maps/mp/gametypes_zm/_weapons;
#include maps/mp/gametypes_zm/_globallogic_utils;
#include maps/mp/gametypes_zm/_globallogic_player;
#include maps/mp/_scoreevents;
#include maps/mp/gametypes/_damagefeedback;
#include maps/mp/gametypes/_weapons;
#include maps/mp/_burnplayer;
#include maps/mp/gametypes/_globallogic_utils;
#include maps/mp/gametypes/_globallogic_player;
#include maps/mp/_utility;
callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex )
@ -21,7 +23,7 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
}
self.idflags = idflags;
self.idflagstime = getTime();
eattacker = maps/mp/gametypes_zm/_globallogic_player::figureoutattacker( eattacker );
eattacker = maps/mp/gametypes/_globallogic_player::figureoutattacker( eattacker );
if ( !isDefined( vdir ) )
{
idflags |= level.idflags_no_knockback;
@ -33,7 +35,7 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
self.attackerdata = [];
self.attackerdamage = [];
}
if ( maps/mp/gametypes_zm/_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) )
if ( maps/mp/gametypes/_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) )
{
smeansofdeath = "MOD_HEAD_SHOT";
}
@ -51,6 +53,17 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
}
}
}
if ( smeansofdeath == "MOD_BURNED" )
{
if ( sweapon == "none" )
{
self maps/mp/_burnplayer::walkedthroughflames();
}
if ( sweapon == "m2_flamethrower_mp" )
{
self maps/mp/_burnplayer::burnedwithflamethrower();
}
}
if ( sweapon == "none" && isDefined( einflictor ) )
{
if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" )
@ -122,7 +135,7 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
}
if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) )
{
eattacker thread maps/mp/gametypes_zm/_weapons::checkhit( sweapon );
eattacker thread maps/mp/gametypes/_weapons::checkhit( sweapon );
}
if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor ) && isDefined( einflictor.iscooked ) )
{
@ -144,7 +157,7 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
{
if ( idamage > 0 )
{
eattacker thread maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor );
eattacker thread maps/mp/gametypes/_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor );
}
}
}
@ -152,7 +165,7 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
/#
if ( getDvarInt( "g_debugDamage" ) )
{
println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + shitloc + ";" + boneindex + "\n" );
println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc );
#/
}
if ( 1 )
@ -174,7 +187,7 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
lpattackname = "";
lpattackerteam = "world";
}
logprint( "AD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" );
logprint( "AD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + ";" + boneindex + "\n" );
}
}
@ -201,6 +214,7 @@ callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdi
{
level.globalkillstreaksdestroyed++;
attacker addweaponstat( "dogs_mp", "destroyed", 1 );
maps/mp/_scoreevents::processscoreevent( "killed_dog", attacker, self, sweapon );
attacker maps/mp/_challenges::killeddog();
}
}

View File

@ -1,6 +1,6 @@
#include maps/mp/_music;
#include maps/mp/gametypes_zm/_globallogic_audio;
#include maps/mp/gametypes_zm/_globallogic_utils;
#include maps/mp/gametypes/_globallogic_audio;
#include maps/mp/gametypes/_globallogic_utils;
#include maps/mp/_utility;
init()
@ -76,7 +76,7 @@ init()
game[ "dialog" ][ "defend" ] = "defend";
game[ "dialog" ][ "offense" ] = "offense";
game[ "dialog" ][ "defense" ] = "defense";
game[ "dialog" ][ "halftime" ] = "halftime";
game[ "dialog" ][ "halftime" ] = "sd_halftime";
game[ "dialog" ][ "overtime" ] = "overtime";
game[ "dialog" ][ "side_switch" ] = "switchingsides";
game[ "dialog" ][ "flag_taken" ] = "ourflag";
@ -111,6 +111,12 @@ init()
game[ "dialog" ][ "lost_d" ] = "dom_lost_d";
game[ "dialog" ][ "lost_e" ] = "dom_lost_e";
game[ "dialog" ][ "lost_f" ] = "dom_lost_f";
game[ "dialog" ][ "enemy_a" ] = "dom_enemy_a";
game[ "dialog" ][ "enemy_b" ] = "dom_enemy_b";
game[ "dialog" ][ "enemy_c" ] = "dom_enemy_c";
game[ "dialog" ][ "enemy_d" ] = "dom_enemy_d";
game[ "dialog" ][ "enemy_e" ] = "dom_enemy_e";
game[ "dialog" ][ "enemy_f" ] = "dom_enemy_f";
game[ "dialog" ][ "secure_flag" ] = "secure_flag";
game[ "dialog" ][ "securing_flag" ] = "securing_flag";
game[ "dialog" ][ "losing_flag" ] = "losing_flag";
@ -138,6 +144,8 @@ init()
game[ "dialog" ][ "hacked_equip" ] = "hacked_equip";
game[ "dialog" ][ "uav_destroyed" ] = "kls_u2_destroyed";
game[ "dialog" ][ "cuav_destroyed" ] = "kls_cu2_destroyed";
game[ "dialog" ][ "wm_in_the_money" ] = "mpl_wager_top3_gain";
game[ "dialog" ][ "wm_oot_money" ] = "mpl_wager_top3_loss";
level.dialoggroups = [];
level thread post_match_snapshot_watcher();
}
@ -152,7 +160,9 @@ registerdialoggroup( group, skipifcurrentlyplayinggroup )
{
if ( isDefined( level.dialoggroup[ group ] ) )
{
/#
error( "registerDialogGroup: Dialog group " + group + " already registered." );
#/
return;
}
}
@ -177,7 +187,7 @@ sndstartmusicsystem()
println( "Music System - music state is undefined Waiting 15 seconds to set music state" );
#/
}
wait 30;
wait 45;
if ( !isDefined( level.nextmusicstate ) )
{
self.pers[ "music" ].currentstate = "UNDERSCORE";
@ -262,16 +272,16 @@ suspensemusic( random )
leaderdialogforotherteams( dialog, skip_team, squad_dialog )
{
_a339 = level.teams;
_k339 = getFirstArrayKey( _a339 );
while ( isDefined( _k339 ) )
_a350 = level.teams;
_k350 = getFirstArrayKey( _a350 );
while ( isDefined( _k350 ) )
{
team = _a339[ _k339 ];
team = _a350[ _k350 ];
if ( team != skip_team )
{
leaderdialog( dialog, team, undefined, undefined, squad_dialog );
}
_k339 = getNextArrayKey( _a339, _k339 );
_k350 = getNextArrayKey( _a350, _k350 );
}
}
@ -292,13 +302,13 @@ announceroundwinner( winner, delay )
}
else
{
_a365 = level.teams;
_k365 = getFirstArrayKey( _a365 );
while ( isDefined( _k365 ) )
_a376 = level.teams;
_k376 = getFirstArrayKey( _a376 );
while ( isDefined( _k376 ) )
{
team = _a365[ _k365 ];
team = _a376[ _k376 ];
thread playsoundonplayers( "mus_round_draw" + "_" + level.teampostfix[ team ] );
_k365 = getNextArrayKey( _a365, _k365 );
_k376 = getNextArrayKey( _a376, _k376 );
}
leaderdialog( "round_draw" );
}
@ -346,10 +356,6 @@ leaderdialog( dialog, team, group, excludelist, squaddialog )
/#
assert( isDefined( level.players ) );
#/
if ( level.splitscreen )
{
return;
}
if ( level.wagermatch )
{
return;
@ -357,32 +363,24 @@ leaderdialog( dialog, team, group, excludelist, squaddialog )
if ( !isDefined( team ) )
{
dialogs = [];
_a425 = level.teams;
_k425 = getFirstArrayKey( _a425 );
while ( isDefined( _k425 ) )
_a433 = level.teams;
_k433 = getFirstArrayKey( _a433 );
while ( isDefined( _k433 ) )
{
team = _a425[ _k425 ];
team = _a433[ _k433 ];
dialogs[ team ] = dialog;
_k425 = getNextArrayKey( _a425, _k425 );
_k433 = getNextArrayKey( _a433, _k433 );
}
leaderdialogallteams( dialogs, group, excludelist );
return;
}
if ( level.splitscreen )
{
if ( level.players.size )
{
level.players[ 0 ] leaderdialogonplayer( dialog, group );
}
return;
}
if ( isDefined( excludelist ) )
{
i = 0;
while ( i < level.players.size )
{
player = level.players[ i ];
if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team && !maps/mp/gametypes_zm/_globallogic_utils::isexcluded( player, excludelist ) )
if ( isDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team && !maps/mp/gametypes/_globallogic_utils::isexcluded( player, excludelist ) )
{
player leaderdialogonplayer( dialog, group );
}
@ -406,18 +404,6 @@ leaderdialogallteams( dialogs, group, excludelist )
/#
assert( isDefined( level.players ) );
#/
if ( level.splitscreen )
{
return;
}
if ( level.splitscreen )
{
if ( level.players.size )
{
level.players[ 0 ] leaderdialogonplayer( dialogs[ level.players[ 0 ].team ], group );
}
return;
}
i = 0;
while ( i < level.players.size )
{
@ -433,7 +419,7 @@ leaderdialogallteams( dialogs, group, excludelist )
i++;
continue;
}
else if ( isDefined( excludelist ) && maps/mp/gametypes_zm/_globallogic_utils::isexcluded( player, excludelist ) )
else if ( isDefined( excludelist ) && maps/mp/gametypes/_globallogic_utils::isexcluded( player, excludelist ) )
{
i++;
continue;
@ -448,13 +434,13 @@ leaderdialogallteams( dialogs, group, excludelist )
flushdialog()
{
_a495 = level.players;
_k495 = getFirstArrayKey( _a495 );
while ( isDefined( _k495 ) )
_a485 = level.players;
_k485 = getFirstArrayKey( _a485 );
while ( isDefined( _k485 ) )
{
player = _a495[ _k495 ];
player = _a485[ _k485 ];
player flushdialogonplayer();
_k495 = getNextArrayKey( _a495, _k495 );
_k485 = getNextArrayKey( _a485, _k485 );
}
}
@ -464,31 +450,27 @@ flushdialogonplayer()
self.leaderdialogqueue = [];
self.leaderdialogactive = 0;
self.currentleaderdialoggroup = "";
self notify( "flush_dialog" );
}
flushgroupdialog( group )
{
_a512 = level.players;
_k512 = getFirstArrayKey( _a512 );
while ( isDefined( _k512 ) )
_a503 = level.players;
_k503 = getFirstArrayKey( _a503 );
while ( isDefined( _k503 ) )
{
player = _a512[ _k512 ];
player = _a503[ _k503 ];
player flushgroupdialogonplayer( group );
_k512 = getNextArrayKey( _a512, _k512 );
_k503 = getNextArrayKey( _a503, _k503 );
}
}
flushgroupdialogonplayer( group )
{
_a522 = self.leaderdialogqueue;
key = getFirstArrayKey( _a522 );
while ( isDefined( key ) )
arrayremovevalue( self.leaderdialogqueue, group );
if ( self.leaderdialogqueue.size == 0 )
{
dialog = _a522[ key ];
if ( dialog == group )
{
}
key = getNextArrayKey( _a522, key );
self flushdialogonplayer();
}
}
@ -496,7 +478,9 @@ addgroupdialogtoplayer( dialog, group )
{
if ( !isDefined( level.dialoggroup[ group ] ) )
{
/#
error( "leaderDialogOnPlayer: Dialog group " + group + " is not registered" );
#/
return 0;
}
addtoqueue = 0;
@ -508,25 +492,10 @@ addgroupdialogtoplayer( dialog, group )
{
if ( self.currentleaderdialog == dialog && ( self.currentleaderdialogtime + 2000 ) > getTime() )
{
_a552 = self.leaderdialogqueue;
key = getFirstArrayKey( _a552 );
while ( isDefined( key ) )
arrayremovevalue( self.leaderdialogqueue, group );
if ( self.leaderdialogqueue.size == 0 )
{
leader_dialog = _a552[ key ];
if ( leader_dialog == group )
{
i = key + 1;
while ( i < self.leaderdialogqueue.size )
{
self.leaderdialogqueue[ i - 1 ] = self.leaderdialogqueue[ i ];
i++;
}
break;
}
else
{
key = getNextArrayKey( _a552, key );
}
self flushdialogonplayer();
}
return 0;
}
@ -542,35 +511,12 @@ addgroupdialogtoplayer( dialog, group )
return addtoqueue;
}
testdialogqueue( group )
{
/#
count = 0;
_a585 = self.leaderdialogqueue;
_k585 = getFirstArrayKey( _a585 );
while ( isDefined( _k585 ) )
{
temp = _a585[ _k585 ];
if ( temp == group )
{
count++;
}
_k585 = getNextArrayKey( _a585, _k585 );
}
if ( count > 1 )
{
shit = 0;
#/
}
}
leaderdialogonplayer( dialog, group )
{
/#
assert( isDefined( dialog ) );
#/
team = self.pers[ "team" ];
if ( level.splitscreen )
{
return;
}
if ( !isDefined( team ) )
{
return;
@ -583,19 +529,18 @@ leaderdialogonplayer( dialog, group )
{
if ( !addgroupdialogtoplayer( dialog, group ) )
{
self testdialogqueue( group );
return;
}
dialog = group;
}
if ( !self.leaderdialogactive )
{
self thread playleaderdialogonplayer( dialog );
}
else
if ( self.leaderdialogqueue.size < 10 )
{
self.leaderdialogqueue[ self.leaderdialogqueue.size ] = dialog;
}
if ( !self.leaderdialogactive )
{
self thread playnextleaderdialog();
}
}
waitforsound( sound, extratime )
@ -615,23 +560,32 @@ waitforsound( sound, extratime )
}
}
playleaderdialogonplayer( dialog )
playnextleaderdialog()
{
self endon( "disconnect" );
self endon( "flush_dialog" );
if ( isDefined( level.allowannouncer ) && !level.allowannouncer )
{
return;
}
team = self.pers[ "team" ];
self endon( "disconnect" );
self.leaderdialogactive = 1;
waittillframeend;
/#
assert( self.leaderdialogqueue.size > 0 );
#/
dialog = self.leaderdialogqueue[ 0 ];
/#
assert( isDefined( dialog ) );
#/
arrayremoveindex( self.leaderdialogqueue, 0 );
team = self.pers[ "team" ];
if ( isDefined( self.leaderdialoggroups[ dialog ] ) )
{
group = dialog;
dialog = self.leaderdialoggroups[ group ];
self.currentleaderdialoggroup = group;
self testdialogqueue( group );
}
if ( level.wagermatch || !isDefined( game[ "voice" ] ) )
if ( level.wagermatch )
{
faction = "vox_wm_";
}
@ -639,6 +593,10 @@ playleaderdialogonplayer( dialog )
{
faction = game[ "voice" ][ team ];
}
if ( !isDefined( faction ) )
{
return;
}
sound_name = faction + game[ "dialog" ][ dialog ];
if ( level.allowannouncer )
{
@ -652,29 +610,18 @@ playleaderdialogonplayer( dialog )
self.currentleaderdialog = "";
if ( self.leaderdialogqueue.size > 0 )
{
nextdialog = self.leaderdialogqueue[ 0 ];
i = 1;
while ( i < self.leaderdialogqueue.size )
{
self.leaderdialogqueue[ i - 1 ] = self.leaderdialogqueue[ i ];
i++;
}
if ( isDefined( self.leaderdialoggroups[ dialog ] ) )
{
self testdialogqueue( dialog );
}
self thread playleaderdialogonplayer( nextdialog );
self thread playnextleaderdialog();
}
}
isteamwinning( checkteam )
{
score = game[ "teamScores" ][ checkteam ];
_a702 = level.teams;
_k702 = getFirstArrayKey( _a702 );
while ( isDefined( _k702 ) )
_a678 = level.teams;
_k678 = getFirstArrayKey( _a678 );
while ( isDefined( _k678 ) )
{
team = _a702[ _k702 ];
team = _a678[ _k678 ];
if ( team != checkteam )
{
if ( game[ "teamScores" ][ team ] >= score )
@ -682,25 +629,25 @@ isteamwinning( checkteam )
return 0;
}
}
_k702 = getNextArrayKey( _a702, _k702 );
_k678 = getNextArrayKey( _a678, _k678 );
}
return 1;
}
announceteamiswinning()
{
_a716 = level.teams;
_k716 = getFirstArrayKey( _a716 );
while ( isDefined( _k716 ) )
_a692 = level.teams;
_k692 = getFirstArrayKey( _a692 );
while ( isDefined( _k692 ) )
{
team = _a716[ _k716 ];
team = _a692[ _k692 ];
if ( isteamwinning( team ) )
{
leaderdialog( "winning", team, undefined, undefined, "squad_winning" );
leaderdialogforotherteams( "losing", team, "squad_losing" );
return 1;
}
_k716 = getNextArrayKey( _a716, _k716 );
_k692 = getNextArrayKey( _a692, _k692 );
}
return 0;
}
@ -711,8 +658,6 @@ musiccontroller()
level thread musictimesout();
level waittill( "match_ending_soon" );
if ( islastround() || isoneround() )
{
while ( !level.splitscreen )
{
if ( level.teambased )
{
@ -722,14 +667,13 @@ musiccontroller()
}
}
level waittill( "match_ending_very_soon" );
_a751 = level.teams;
_k751 = getFirstArrayKey( _a751 );
while ( isDefined( _k751 ) )
_a725 = level.teams;
_k725 = getFirstArrayKey( _a725 );
while ( isDefined( _k725 ) )
{
team = _a751[ _k751 ];
team = _a725[ _k725 ];
leaderdialog( "timesup", team, undefined, undefined, "squad_30sec" );
_k751 = getNextArrayKey( _a751, _k751 );
}
_k725 = getNextArrayKey( _a725, _k725 );
}
}
else level waittill( "match_ending_vox" );
@ -740,7 +684,7 @@ musictimesout()
{
level endon( "game_ended" );
level waittill( "match_ending_very_soon" );
thread maps/mp/gametypes_zm/_globallogic_audio::set_music_on_team( "TIME_OUT", "both", 1, 0 );
thread maps/mp/gametypes/_globallogic_audio::set_music_on_team( "TIME_OUT", "both", 1, 0 );
}
actionmusicset()

View File

@ -1,8 +1,10 @@
#include maps/mp/gametypes_zm/_spawnlogic;
#include maps/mp/gametypes_zm/_globallogic_audio;
#include maps/mp/gametypes_zm/_globallogic_score;
#include maps/mp/gametypes_zm/_globallogic;
#include maps/mp/gametypes_zm/_globallogic_utils;
#include maps/mp/gametypes/_rank;
#include maps/mp/killstreaks/_killstreaks;
#include maps/mp/gametypes/_spawnlogic;
#include maps/mp/gametypes/_globallogic_audio;
#include maps/mp/gametypes/_globallogic_score;
#include maps/mp/gametypes/_globallogic;
#include maps/mp/gametypes/_globallogic_utils;
#include maps/mp/_utility;
#include common_scripts/utility;
@ -34,7 +36,13 @@ default_onforfeit( team )
announcement( game[ "strings" ][ "opponent_forfeiting_in" ], 10, 0 );
wait 10;
endreason = &"";
if ( !isDefined( team ) )
if ( level.multiteam )
{
setdvar( "ui_text_endreason", game[ "strings" ][ "other_teams_forfeited" ] );
endreason = game[ "strings" ][ "other_teams_forfeited" ];
winner = team;
}
else if ( !isDefined( team ) )
{
setdvar( "ui_text_endreason", game[ "strings" ][ "players_forfeited" ] );
endreason = game[ "strings" ][ "players_forfeited" ];
@ -63,9 +71,9 @@ default_onforfeit( team )
}
else
{
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "forfeit", winner );
maps/mp/gametypes/_globallogic_utils::logteamwinstring( "forfeit", winner );
}
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, endreason );
thread maps/mp/gametypes/_globallogic::endgame( winner, endreason );
}
default_ondeadevent( team )
@ -77,19 +85,44 @@ default_ondeadevent( team )
makedvarserverinfo( "ui_text_endreason", eliminatedstring );
setdvar( "ui_text_endreason", eliminatedstring );
winner = getwinningteamfromloser( team );
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "team eliminated", winner );
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, eliminatedstring );
maps/mp/gametypes/_globallogic_utils::logteamwinstring( "team eliminated", winner );
thread maps/mp/gametypes/_globallogic::endgame( winner, eliminatedstring );
}
else makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "tie" ] );
setdvar( "ui_text_endreason", game[ "strings" ][ "tie" ] );
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "tie" );
maps/mp/gametypes/_globallogic_utils::logteamwinstring( "tie" );
if ( level.teambased )
{
thread maps/mp/gametypes_zm/_globallogic::endgame( "tie", game[ "strings" ][ "tie" ] );
thread maps/mp/gametypes/_globallogic::endgame( "tie", game[ "strings" ][ "tie" ] );
}
else
{
thread maps/mp/gametypes_zm/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] );
thread maps/mp/gametypes/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] );
}
}
default_onlastteamaliveevent( team )
{
if ( isDefined( level.teams[ team ] ) )
{
eliminatedstring = game[ "strings" ][ "enemies_eliminated" ];
iprintln( eliminatedstring );
makedvarserverinfo( "ui_text_endreason", eliminatedstring );
setdvar( "ui_text_endreason", eliminatedstring );
winner = maps/mp/gametypes/_globallogic::determineteamwinnerbygamestat( "teamScores" );
maps/mp/gametypes/_globallogic_utils::logteamwinstring( "team eliminated", winner );
thread maps/mp/gametypes/_globallogic::endgame( winner, eliminatedstring );
}
else makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "tie" ] );
setdvar( "ui_text_endreason", game[ "strings" ][ "tie" ] );
maps/mp/gametypes/_globallogic_utils::logteamwinstring( "tie" );
if ( level.teambased )
{
thread maps/mp/gametypes/_globallogic::endgame( "tie", game[ "strings" ][ "tie" ] );
}
else
{
thread maps/mp/gametypes/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] );
}
}
@ -106,7 +139,7 @@ default_ononeleftevent( team )
{
if ( !level.teambased )
{
winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer();
winner = maps/mp/gametypes/_globallogic_score::gethighestscoringplayer();
if ( isDefined( winner ) )
{
logstring( "last one alive, win: " + winner.name );
@ -115,7 +148,7 @@ default_ononeleftevent( team )
{
logstring( "last one alive, win: unknown" );
}
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, &"MP_ENEMIES_ELIMINATED" );
thread maps/mp/gametypes/_globallogic::endgame( winner, &"MP_ENEMIES_ELIMINATED" );
}
else
{
@ -135,7 +168,7 @@ default_ononeleftevent( team )
}
else
{
player maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "sudden_death" );
player maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "sudden_death" );
}
index++;
}
@ -147,10 +180,10 @@ default_ontimelimit()
winner = undefined;
if ( level.teambased )
{
winner = maps/mp/gametypes_zm/_globallogic::determineteamwinnerbygamestat( "teamScores" );
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "time limit", winner );
winner = maps/mp/gametypes/_globallogic::determineteamwinnerbygamestat( "teamScores" );
maps/mp/gametypes/_globallogic_utils::logteamwinstring( "time limit", winner );
}
else winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer();
else winner = maps/mp/gametypes/_globallogic_score::gethighestscoringplayer();
if ( isDefined( winner ) )
{
logstring( "time limit, win: " + winner.name );
@ -161,7 +194,7 @@ default_ontimelimit()
}
makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "time_limit_reached" ] );
setdvar( "ui_text_endreason", game[ "strings" ][ "time_limit_reached" ] );
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, game[ "strings" ][ "time_limit_reached" ] );
thread maps/mp/gametypes/_globallogic::endgame( winner, game[ "strings" ][ "time_limit_reached" ] );
}
default_onscorelimit()
@ -173,10 +206,10 @@ default_onscorelimit()
winner = undefined;
if ( level.teambased )
{
winner = maps/mp/gametypes_zm/_globallogic::determineteamwinnerbygamestat( "teamScores" );
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "scorelimit", winner );
winner = maps/mp/gametypes/_globallogic::determineteamwinnerbygamestat( "teamScores" );
maps/mp/gametypes/_globallogic_utils::logteamwinstring( "scorelimit", winner );
}
else winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer();
else winner = maps/mp/gametypes/_globallogic_score::gethighestscoringplayer();
if ( isDefined( winner ) )
{
logstring( "scorelimit, win: " + winner.name );
@ -187,7 +220,7 @@ default_onscorelimit()
}
makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "score_limit_reached" ] );
setdvar( "ui_text_endreason", game[ "strings" ][ "score_limit_reached" ] );
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, game[ "strings" ][ "score_limit_reached" ] );
thread maps/mp/gametypes/_globallogic::endgame( winner, game[ "strings" ][ "score_limit_reached" ] );
return 1;
}
@ -203,7 +236,7 @@ default_onspawnspectator( origin, angles )
/#
assert( spawnpoints.size, "There are no mp_global_intermission spawn points in the map. There must be at least one." );
#/
spawnpoint = maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_random( spawnpoints );
spawnpoint = maps/mp/gametypes/_spawnlogic::getspawnpoint_random( spawnpoints );
self spawn( spawnpoint.origin, spawnpoint.angles );
}
@ -228,3 +261,23 @@ default_gettimelimit()
{
return clamp( getgametypesetting( "timeLimit" ), level.timelimitmin, level.timelimitmax );
}
default_getteamkillpenalty( einflictor, attacker, smeansofdeath, sweapon )
{
teamkill_penalty = 1;
score = maps/mp/gametypes/_globallogic_score::_getplayerscore( attacker );
if ( score == 0 )
{
teamkill_penalty = 2;
}
if ( maps/mp/killstreaks/_killstreaks::iskillstreakweapon( sweapon ) )
{
teamkill_penalty *= maps/mp/killstreaks/_killstreaks::getkillstreakteamkillpenaltyscale( sweapon );
}
return teamkill_penalty;
}
default_getteamkillscore( einflictor, attacker, smeansofdeath, sweapon )
{
return maps/mp/gametypes/_rank::getscoreinfovalue( "team_kill" );
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,21 @@
#include maps/mp/gametypes_zm/_spawnlogic;
#include maps/mp/gametypes_zm/_globallogic_defaults;
#include maps/mp/gametypes_zm/_hostmigration;
#include maps/mp/gametypes_zm/_spectating;
#include maps/mp/zombies/_zm_perks;
#include maps/mp/gametypes_zm/_globallogic_score;
#include maps/mp/gametypes_zm/_globallogic_ui;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/gametypes_zm/_hud_message;
#include maps/mp/gametypes_zm/_globallogic;
#include maps/mp/gametypes_zm/_globallogic_utils;
#include maps/mp/gametypes_zm/_globallogic_audio;
#include maps/mp/gametypes_zm/_spawning;
#include maps/mp/gametypes_zm/_globallogic_player;
#include maps/mp/gametypes/_spawnlogic;
#include maps/mp/gametypes/_globallogic_defaults;
#include maps/mp/gametypes/_hostmigration;
#include maps/mp/gametypes/_spectating;
#include maps/mp/_vehicles;
#include maps/mp/killstreaks/_killstreaks;
#include maps/mp/bots/_bot;
#include maps/mp/gametypes/_globallogic_ui;
#include maps/mp/gametypes/_hud_util;
#include maps/mp/gametypes/_class;
#include maps/mp/gametypes/_globallogic;
#include maps/mp/gametypes/_globallogic_utils;
#include maps/mp/gametypes/_globallogic_score;
#include maps/mp/gametypes/_globallogic_audio;
#include maps/mp/gametypes/_persistence;
#include maps/mp/gametypes/_hud_message;
#include maps/mp/gametypes/_spawning;
#include maps/mp/gametypes/_globallogic_player;
#include maps/mp/_utility;
#include common_scripts/utility;
@ -33,9 +37,17 @@ timeuntilspawn( includeteamkilldelay )
{
respawndelay = level.playerrespawndelay;
}
if ( includeteamkilldelay && isDefined( self.teamkillpunish ) && self.teamkillpunish )
if ( self.suicide && level.suicidespawndelay > 0 )
{
respawndelay += maps/mp/gametypes_zm/_globallogic_player::teamkilldelay();
respawndelay += level.suicidespawndelay;
}
if ( self.teamkilled && level.teamkilledspawndelay > 0 )
{
respawndelay += level.teamkilledspawndelay;
}
if ( includeteamkilldelay && is_true( self.teamkillpunish ) )
{
respawndelay += maps/mp/gametypes/_globallogic_player::teamkilldelay();
}
}
wavebased = level.waverespawndelay > 0;
@ -48,16 +60,16 @@ timeuntilspawn( includeteamkilldelay )
allteamshaveexisted()
{
_a34 = level.teams;
_k34 = getFirstArrayKey( _a34 );
while ( isDefined( _k34 ) )
_a42 = level.teams;
_k42 = getFirstArrayKey( _a42 );
while ( isDefined( _k42 ) )
{
team = _a34[ _k34 ];
team = _a42[ _k42 ];
if ( !level.everexisted[ team ] )
{
return 0;
}
_k34 = getNextArrayKey( _a34, _k34 );
_k42 = getNextArrayKey( _a42, _k42 );
}
return 1;
}
@ -92,7 +104,7 @@ mayspawn()
}
}
}
if ( !self.pers[ "lives" ] && gamehasstarted )
if ( !self.pers[ "lives" ] )
{
return 0;
}
@ -150,7 +162,7 @@ spawnplayerprediction()
wait 0,5;
if ( isDefined( level.onspawnplayerunified ) && getDvarInt( #"CF6EEB8B" ) == 0 )
{
maps/mp/gametypes_zm/_spawning::onspawnplayer_unified( 1 );
maps/mp/gametypes/_spawning::onspawnplayer_unified( 1 );
continue;
}
else
@ -160,18 +172,46 @@ spawnplayerprediction()
}
}
giveloadoutlevelspecific( team, class )
doinitialspawnmessaging()
{
pixbeginevent( "giveLoadoutLevelSpecific" );
if ( isDefined( level.givecustomcharacters ) )
self endon( "disconnect" );
if ( isDefined( level.disableprematchmessages ) && level.disableprematchmessages )
{
self [[ level.givecustomcharacters ]]();
return;
}
if ( isDefined( level.givecustomloadout ) )
team = self.pers[ "team" ];
thread maps/mp/gametypes/_hud_message::showinitialfactionpopup( team );
if ( isDefined( game[ "dialog" ][ "gametype" ] ) || !level.splitscreen && self == level.players[ 0 ] )
{
self [[ level.givecustomloadout ]]();
if ( !isDefined( level.infinalfight ) || !level.infinalfight )
{
if ( level.hardcoremode && maps/mp/gametypes/_persistence::ispartygamemode() == 0 )
{
self maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" );
}
else
{
self maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "gametype" );
}
}
}
while ( level.inprematchperiod )
{
wait 0,05;
}
hintmessage = getobjectivehinttext( team );
if ( isDefined( hintmessage ) )
{
self thread maps/mp/gametypes/_hud_message::hintmessage( hintmessage );
}
if ( team == game[ "attackers" ] )
{
self maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" );
}
else
{
self maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" );
}
pixendevent();
}
spawnplayer()
@ -186,7 +226,11 @@ spawnplayer()
if ( !self.hasspawned )
{
self.underscorechance = 70;
self thread maps/mp/gametypes_zm/_globallogic_audio::sndstartmusicsystem();
self thread maps/mp/gametypes/_globallogic_audio::sndstartmusicsystem();
}
if ( isDefined( self.pers[ "resetMomentumOnSpawn" ] ) && self.pers[ "resetMomentumOnSpawn" ] )
{
self maps/mp/gametypes/_globallogic_score::resetplayermomentumonspawn();
}
if ( level.teambased )
{
@ -238,11 +282,11 @@ spawnplayer()
self.deathmachinekills = 0;
self.disabledweapon = 0;
self resetusability();
self maps/mp/gametypes_zm/_globallogic_player::resetattackerlist();
self maps/mp/gametypes/_globallogic_player::resetattackerlist();
self.diedonvehicle = undefined;
if ( !self.wasaliveatmatchstart )
{
if ( level.ingraceperiod || maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() < 20000 )
if ( level.ingraceperiod || maps/mp/gametypes/_globallogic_utils::gettimepassed() < 20000 )
{
self.wasaliveatmatchstart = 1;
}
@ -264,14 +308,23 @@ spawnplayer()
}
pixendevent();
pixendevent();
level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus();
level thread maps/mp/gametypes/_globallogic::updateteamstatus();
pixbeginevent( "spawnPlayer_postUTS" );
self thread stoppoisoningandflareonspawn();
self.sensorgrenadedata = undefined;
self stopburning();
/#
assert( maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.class ) );
assert( maps/mp/gametypes/_globallogic_utils::isvalidclass( self.class ) );
#/
self giveloadoutlevelspecific( self.team, self.class );
if ( sessionmodeiszombiesgame() )
{
self maps/mp/gametypes/_class::giveloadoutlevelspecific( self.team, self.class );
}
else
{
self maps/mp/gametypes/_class::setclass( self.class );
self maps/mp/gametypes/_class::giveloadout( self.team, self.class );
}
if ( level.inprematchperiod )
{
self freeze_player_controls( 1 );
@ -286,7 +339,7 @@ spawnplayer()
{
music = game[ "music" ][ "spawn_" + team ];
}
self thread maps/mp/gametypes_zm/_globallogic_audio::set_music_on_player( music, 0, 0 );
self thread maps/mp/gametypes/_globallogic_audio::set_music_on_player( music, 0, 0 );
self.pers[ "music" ].spawn = 1;
}
if ( level.splitscreen )
@ -300,37 +353,7 @@ spawnplayer()
level.playedstartingmusic = 1;
}
}
if ( !isDefined( level.disableprematchmessages ) || level.disableprematchmessages == 0 )
{
thread maps/mp/gametypes_zm/_hud_message::showinitialfactionpopup( team );
hintmessage = getobjectivehinttext( self.pers[ "team" ] );
if ( isDefined( hintmessage ) )
{
self thread maps/mp/gametypes_zm/_hud_message::hintmessage( hintmessage );
}
if ( isDefined( game[ "dialog" ][ "gametype" ] ) || !level.splitscreen && self == level.players[ 0 ] )
{
if ( !isDefined( level.infinalfight ) || !level.infinalfight )
{
if ( level.hardcoremode )
{
self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" );
}
else
{
self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype" );
}
}
}
if ( team == game[ "attackers" ] )
{
self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" );
}
else
{
self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" );
}
}
self thread doinitialspawnmessaging();
}
else
{
@ -342,7 +365,8 @@ spawnplayer()
team = self.team;
if ( isDefined( self.pers[ "music" ].spawn ) && self.pers[ "music" ].spawn == 0 )
{
self thread maps/mp/gametypes_zm/_globallogic_audio::set_music_on_player( "SPAWN_SHORT", 0, 0 );
music = game[ "music" ][ "spawn_short" + team ];
self thread maps/mp/gametypes/_globallogic_audio::set_music_on_player( music, 0, 0 );
self.pers[ "music" ].spawn = 1;
}
if ( level.splitscreen )
@ -356,37 +380,7 @@ spawnplayer()
level.playedstartingmusic = 1;
}
}
if ( !isDefined( level.disableprematchmessages ) || level.disableprematchmessages == 0 )
{
thread maps/mp/gametypes_zm/_hud_message::showinitialfactionpopup( team );
hintmessage = getobjectivehinttext( self.pers[ "team" ] );
if ( isDefined( hintmessage ) )
{
self thread maps/mp/gametypes_zm/_hud_message::hintmessage( hintmessage );
}
if ( isDefined( game[ "dialog" ][ "gametype" ] ) || !level.splitscreen && self == level.players[ 0 ] )
{
if ( !isDefined( level.infinalfight ) || !level.infinalfight )
{
if ( level.hardcoremode )
{
self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype_hardcore" );
}
else
{
self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "gametype" );
}
}
}
if ( team == game[ "attackers" ] )
{
self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "offense_obj", "introboost" );
}
else
{
self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "defense_obj", "introboost" );
}
}
self thread doinitialspawnmessaging();
pixendevent();
}
}
@ -398,15 +392,15 @@ spawnplayer()
{
setdvar( "scr_showperksonspawn", "0" );
}
if ( !level.splitscreen && getDvarInt( "scr_showperksonspawn" ) == 1 && game[ "state" ] != "postgame" )
if ( getDvarInt( "scr_showperksonspawn" ) == 1 && game[ "state" ] != "postgame" )
{
pixbeginevent( "showperksonspawn" );
if ( level.perksenabled == 1 )
{
self maps/mp/gametypes_zm/_hud_util::showperks();
self maps/mp/gametypes/_hud_util::showperks();
}
self thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutaftertime( 3 );
self thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutondeath();
self thread maps/mp/gametypes/_globallogic_ui::hideloadoutaftertime( 3 );
self thread maps/mp/gametypes/_globallogic_ui::hideloadoutondeath();
pixendevent();
}
if ( isDefined( self.pers[ "momentum" ] ) )
@ -418,19 +412,30 @@ spawnplayer()
self notify( "spawned_player" );
self logstring( "S " + self.origin[ 0 ] + " " + self.origin[ 1 ] + " " + self.origin[ 2 ] );
setdvar( "scr_selecting_location", "" );
if ( self is_bot() )
{
pixbeginevent( "bot" );
self thread maps/mp/bots/_bot::bot_spawn();
pixendevent();
}
if ( !sessionmodeiszombiesgame() )
{
self thread maps/mp/killstreaks/_killstreaks::killstreakwaiter();
self thread maps/mp/_vehicles::vehicledeathwaiter();
self thread maps/mp/_vehicles::turretdeathwaiter();
}
/#
if ( getDvarInt( #"F8D00F60" ) > 0 )
{
self thread maps/mp/gametypes_zm/_globallogic_score::xpratethread();
self thread maps/mp/gametypes/_globallogic_score::xpratethread();
#/
}
self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 );
if ( game[ "state" ] == "postgame" )
{
/#
assert( !level.intermission );
#/
self maps/mp/gametypes_zm/_globallogic_player::freezeplayerforroundend();
self maps/mp/gametypes/_globallogic_player::freezeplayerforroundend();
}
}
@ -468,13 +473,13 @@ in_spawnspectator( origin, angles )
{
self.statusicon = "hud_status_dead";
}
maps/mp/gametypes_zm/_spectating::setspectatepermissionsformachine();
maps/mp/gametypes/_spectating::setspectatepermissionsformachine();
[[ level.onspawnspectator ]]( origin, angles );
if ( level.teambased && !level.splitscreen )
{
self thread spectatorthirdpersonness();
}
level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus();
level thread maps/mp/gametypes/_globallogic::updateteamstatus();
pixmarker( "END: in_spawnSpectator" );
}
@ -505,12 +510,12 @@ forcespawn( time )
{
return;
}
if ( !maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.pers[ "class" ] ) )
if ( !maps/mp/gametypes/_globallogic_utils::isvalidclass( self.pers[ "class" ] ) )
{
self.pers[ "class" ] = "CLASS_CUSTOM1";
self.class = self.pers[ "class" ];
}
self maps/mp/gametypes_zm/_globallogic_ui::closemenus();
self maps/mp/gametypes/_globallogic_ui::closemenus();
self thread [[ level.spawnclient ]]();
}
@ -563,13 +568,18 @@ kickifidontspawninternal()
{
return;
}
if ( !mayspawn() )
{
return;
}
maps/mp/gametypes/_globallogic::gamehistoryplayerkicked();
kick( self getentitynumber() );
}
kickwait( waittime )
{
level endon( "game_ended" );
maps/mp/gametypes_zm/_hostmigration::waitlongdurationwithhostmigrationpause( waittime );
maps/mp/gametypes/_hostmigration::waitlongdurationwithhostmigrationpause( waittime );
}
spawninterroundintermission()
@ -585,7 +595,7 @@ spawninterroundintermission()
self.archivetime = 0;
self.psoffsettime = 0;
self.friendlydamage = undefined;
self maps/mp/gametypes_zm/_globallogic_defaults::default_onspawnintermission();
self maps/mp/gametypes/_globallogic_defaults::default_onspawnintermission();
self setorigin( self.origin );
self setplayerangles( self.angles );
self setdepthoffield( 0, 128, 512, 4000, 6, 1,8 );
@ -599,37 +609,6 @@ spawnintermission( usedefaultcallback )
self setspawnvariables();
self clearlowermessage();
self freeze_player_controls( 0 );
if ( level.rankedmatch && waslastround() )
{
if ( !self.postgamemilestones || self.postgamecontracts && self.postgamepromotion )
{
if ( self.postgamepromotion )
{
self playlocalsound( "mus_level_up" );
}
else if ( self.postgamecontracts )
{
self playlocalsound( "mus_challenge_complete" );
}
else
{
if ( self.postgamemilestones )
{
self playlocalsound( "mus_contract_complete" );
}
}
self closeingamemenu();
self openmenu( game[ "menu_endgameupdate" ] );
waittime = 4;
while ( waittime )
{
wait 0,25;
waittime -= 0,25;
self openmenu( game[ "menu_endgameupdate" ] );
}
self closemenu();
}
}
self.sessionstate = "intermission";
self.spectatorclient = -1;
self.killcamentity = -1;
@ -638,7 +617,7 @@ spawnintermission( usedefaultcallback )
self.friendlydamage = undefined;
if ( isDefined( usedefaultcallback ) && usedefaultcallback )
{
maps/mp/gametypes_zm/_globallogic_defaults::default_onspawnintermission();
maps/mp/gametypes/_globallogic_defaults::default_onspawnintermission();
}
else
{
@ -669,7 +648,7 @@ spawnqueuedclientonteam( team )
if ( isDefined( player_to_spawn ) )
{
player_to_spawn.allowqueuespawn = 1;
player_to_spawn maps/mp/gametypes_zm/_globallogic_ui::closemenus();
player_to_spawn maps/mp/gametypes/_globallogic_ui::closemenus();
player_to_spawn thread [[ level.spawnclient ]]();
}
}
@ -680,7 +659,7 @@ spawnqueuedclient( dead_player_team, killer )
{
return;
}
maps/mp/gametypes_zm/_globallogic_utils::waittillslowprocessallowed();
maps/mp/gametypes/_globallogic_utils::waittillslowprocessallowed();
spawn_team = undefined;
if ( isDefined( killer ) && isDefined( killer.team ) && isDefined( level.teams[ killer.team ] ) )
{
@ -691,11 +670,11 @@ spawnqueuedclient( dead_player_team, killer )
spawnqueuedclientonteam( spawn_team );
return;
}
_a746 = level.teams;
_k746 = getFirstArrayKey( _a746 );
while ( isDefined( _k746 ) )
_a730 = level.teams;
_k730 = getFirstArrayKey( _a730 );
while ( isDefined( _k730 ) )
{
team = _a746[ _k746 ];
team = _a730[ _k730 ];
if ( team == dead_player_team )
{
}
@ -703,7 +682,7 @@ spawnqueuedclient( dead_player_team, killer )
{
spawnqueuedclientonteam( team );
}
_k746 = getNextArrayKey( _a746, _k746 );
_k730 = getNextArrayKey( _a730, _k730 );
}
}
@ -717,16 +696,16 @@ allteamsnearscorelimit()
{
return 0;
}
_a763 = level.teams;
_k763 = getFirstArrayKey( _a763 );
while ( isDefined( _k763 ) )
_a747 = level.teams;
_k747 = getFirstArrayKey( _a747 );
while ( isDefined( _k747 ) )
{
team = _a763[ _k763 ];
team = _a747[ _k747 ];
if ( ( level.scorelimit - 1 ) < game[ "teamScores" ][ team ] )
{
return 0;
}
_k763 = getNextArrayKey( _a763, _k763 );
_k747 = getNextArrayKey( _a747, _k747 );
}
return 1;
}
@ -755,7 +734,7 @@ shouldshowrespawnmessage()
default_spawnmessage()
{
setlowermessage( game[ "strings" ][ "spawn_next_round" ] );
self thread maps/mp/gametypes_zm/_globallogic_ui::removespawnmessageshortly( 3 );
self thread maps/mp/gametypes/_globallogic_ui::removespawnmessageshortly( 3 );
}
showspawnmessage()
@ -773,7 +752,7 @@ spawnclient( timealreadypassed )
assert( isDefined( self.team ) );
#/
/#
assert( maps/mp/gametypes_zm/_globallogic_utils::isvalidclass( self.class ) );
assert( maps/mp/gametypes/_globallogic_utils::isvalidclass( self.class ) );
#/
if ( !self mayspawn() )
{
@ -809,9 +788,9 @@ waitandspawnclient( timealreadypassed )
timealreadypassed = 0;
}
spawnedasspectator = 0;
if ( isDefined( self.teamkillpunish ) && self.teamkillpunish )
if ( is_true( self.teamkillpunish ) )
{
teamkilldelay = maps/mp/gametypes_zm/_globallogic_player::teamkilldelay();
teamkilldelay = maps/mp/gametypes/_globallogic_player::teamkilldelay();
if ( teamkilldelay > timealreadypassed )
{
teamkilldelay -= timealreadypassed;
@ -867,7 +846,7 @@ waitandspawnclient( timealreadypassed )
spawnangles = self.angles;
if ( isDefined( level.useintermissionpointsonwavespawn ) && [[ level.useintermissionpointsonwavespawn ]]() == 1 )
{
spawnpoint = maps/mp/gametypes_zm/_spawnlogic::getrandomintermissionpoint();
spawnpoint = maps/mp/gametypes/_spawnlogic::getrandomintermissionpoint();
if ( isDefined( spawnpoint ) )
{
spawnorigin = spawnpoint.origin;
@ -877,9 +856,25 @@ waitandspawnclient( timealreadypassed )
self thread respawn_asspectator( spawnorigin, spawnangles );
}
spawnedasspectator = 1;
self maps/mp/gametypes_zm/_globallogic_utils::waitfortimeornotify( timeuntilspawn, "force_spawn" );
self maps/mp/gametypes/_globallogic_utils::waitfortimeornotify( timeuntilspawn, "force_spawn" );
self notify( "stop_wait_safe_spawn_button" );
}
if ( isDefined( level.gametypespawnwaiter ) )
{
if ( !spawnedasspectator )
{
self thread respawn_asspectator( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), self.angles );
}
spawnedasspectator = 1;
if ( !( self [[ level.gametypespawnwaiter ]]() ) )
{
self.waitingtospawn = 0;
self clearlowermessage();
self.wavespawnindex = undefined;
self.respawntimerstarttime = undefined;
return;
}
}
wavebased = level.waverespawndelay > 0;
if ( !level.playerforcerespawn && self.hasspawned && !wavebased && !self.wantsafespawn && !level.playerqueuedrespawn )
{

View File

@ -1,7 +1,13 @@
#include maps/mp/gametypes_zm/_globallogic_player;
#include maps/mp/gametypes_zm/_spectating;
#include maps/mp/gametypes_zm/_globallogic;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/gametypes/_class;
#include maps/mp/gametypes/_globallogic_player;
#include maps/mp/gametypes/_spectating;
#include maps/mp/gametypes/_globallogic;
#include maps/mp/gametypes/_pregame;
#include maps/mp/teams/_teams;
#include maps/mp/bots/_bot;
#include maps/mp/killstreaks/_killstreaks;
#include maps/mp/gametypes/_hud_util;
#include common_scripts/utility;
#include maps/mp/_utility;
init()
@ -21,10 +27,6 @@ init()
precachestring( &"rank_up" );
precachestring( &"gun_level_complete" );
precachestring( &"challenge_complete" );
if ( sessionmodeiszombiesgame() )
{
precachestring( &"hud_update_survival_team" );
}
if ( level.splitscreen )
{
precachestring( &"MP_ENDED_GAME" );
@ -134,16 +136,17 @@ freegameplayhudelems()
{
self.carryicon destroyelem();
}
maps/mp/killstreaks/_killstreaks::destroykillstreaktimers();
}
teamplayercountsequal( playercounts )
{
count = undefined;
_a150 = level.teams;
_k150 = getFirstArrayKey( _a150 );
while ( isDefined( _k150 ) )
_a146 = level.teams;
_k146 = getFirstArrayKey( _a146 );
while ( isDefined( _k146 ) )
{
team = _a150[ _k150 ];
team = _a146[ _k146 ];
if ( !isDefined( count ) )
{
count = playercounts[ team ];
@ -155,7 +158,7 @@ teamplayercountsequal( playercounts )
return 0;
}
}
_k150 = getNextArrayKey( _a150, _k150 );
_k146 = getNextArrayKey( _a146, _k146 );
}
return 1;
}
@ -164,17 +167,17 @@ teamwithlowestplayercount( playercounts, ignore_team )
{
count = 9999;
lowest_team = undefined;
_a169 = level.teams;
_k169 = getFirstArrayKey( _a169 );
while ( isDefined( _k169 ) )
_a165 = level.teams;
_k165 = getFirstArrayKey( _a165 );
while ( isDefined( _k165 ) )
{
team = _a169[ _k169 ];
team = _a165[ _k165 ];
if ( count > playercounts[ team ] )
{
count = playercounts[ team ];
lowest_team = team;
}
_k169 = getNextArrayKey( _a169, _k169 );
_k165 = getNextArrayKey( _a165, _k165 );
}
return lowest_team;
}
@ -242,6 +245,45 @@ menuautoassign( comingfrommenu )
{
assignment = "allies";
}
else if ( maps/mp/bots/_bot::is_bot_comp_stomp() )
{
host = gethostplayerforbots();
/#
assert( isDefined( host ) );
#/
if ( !isDefined( host.team ) || host.team == "spectator" )
{
host.team = random( teamkeys );
}
if ( !self is_bot() )
{
assignment = host.team;
}
else
{
assignment = getotherteam( host.team );
}
}
else playercounts = self maps/mp/teams/_teams::countplayers();
if ( teamplayercountsequal( playercounts ) )
{
if ( !level.splitscreen && self issplitscreen() )
{
assignment = self getsplitscreenteam();
if ( assignment == "" )
{
assignment = pickteamfromscores( teamkeys );
}
}
else
{
assignment = pickteamfromscores( teamkeys );
}
}
else
{
assignment = teamwithlowestplayercount( playercounts, "none" );
}
}
if ( assignment == self.pers[ "team" ] || self.sessionstate == "playing" && self.sessionstate == "dead" )
{
@ -296,6 +338,31 @@ menuautoassign( comingfrommenu )
self notify( "joined_team" );
level notify( "joined_team" );
self notify( "end_respawn" );
if ( ispregame() )
{
if ( !self is_bot() )
{
pclass = self maps/mp/gametypes/_pregame::get_pregame_class();
self closemenu();
self closeingamemenu();
self.selectedclass = 1;
self [[ level.class ]]( pclass );
self setclientscriptmainmenu( game[ "menu_class" ] );
return;
}
}
if ( ispregamegamestarted() )
{
if ( self is_bot() && isDefined( self.pers[ "class" ] ) )
{
pclass = self.pers[ "class" ];
self closemenu();
self closeingamemenu();
self.selectedclass = 1;
self [[ level.class ]]( pclass );
return;
}
}
self beginclasschoice();
self setclientscriptmainmenu( game[ "menu_class" ] );
}
@ -303,11 +370,11 @@ menuautoassign( comingfrommenu )
teamscoresequal()
{
score = undefined;
_a413 = level.teams;
_k413 = getFirstArrayKey( _a413 );
while ( isDefined( _k413 ) )
_a397 = level.teams;
_k397 = getFirstArrayKey( _a397 );
while ( isDefined( _k397 ) )
{
team = _a413[ _k413 ];
team = _a397[ _k397 ];
if ( !isDefined( score ) )
{
score = getteamscore( team );
@ -319,7 +386,7 @@ teamscoresequal()
return 0;
}
}
_k413 = getNextArrayKey( _a413, _k413 );
_k397 = getNextArrayKey( _a397, _k397 );
}
return 1;
}
@ -328,16 +395,16 @@ teamwithlowestscore()
{
score = 99999999;
lowest_team = undefined;
_a432 = level.teams;
_k432 = getFirstArrayKey( _a432 );
while ( isDefined( _k432 ) )
_a416 = level.teams;
_k416 = getFirstArrayKey( _a416 );
while ( isDefined( _k416 ) )
{
team = _a432[ _k432 ];
team = _a416[ _k416 ];
if ( score > getteamscore( team ) )
{
lowest_team = team;
}
_k432 = getNextArrayKey( _a432, _k432 );
_k416 = getNextArrayKey( _a416, _k416 );
}
return lowest_team;
}
@ -418,7 +485,7 @@ beginclasschoice( forcenewchoice )
assert( isDefined( level.teams[ self.pers[ "team" ] ] ) );
#/
team = self.pers[ "team" ];
if ( level.disablecac == 1 )
if ( level.disableclassselection == 1 || getDvarInt( "migration_soak" ) == 1 )
{
self.pers[ "class" ] = level.defaultclass;
self.class = level.defaultclass;
@ -426,8 +493,8 @@ beginclasschoice( forcenewchoice )
{
self thread [[ level.spawnclient ]]();
}
level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus();
self thread maps/mp/gametypes_zm/_spectating::setspectatepermissionsformachine();
level thread maps/mp/gametypes/_globallogic::updateteamstatus();
self thread maps/mp/gametypes/_spectating::setspectatepermissionsformachine();
return;
}
if ( level.wagermatch )
@ -484,6 +551,10 @@ menuteam( team )
self.team = team;
self.class = undefined;
self updateobjectivetext();
if ( !level.rankedmatch && !level.leaguematch )
{
self.sessionstate = "spectator";
}
if ( level.teambased )
{
self.sessionteam = team;
@ -523,7 +594,7 @@ menuspectator()
self.ffateam = "spectator";
}
[[ level.spawnspectator ]]();
self thread maps/mp/gametypes_zm/_globallogic_player::spectate_player_watcher();
self thread maps/mp/gametypes/_globallogic_player::spectate_player_watcher();
self setclientscriptmainmenu( game[ "menu_class" ] );
self notify( "joined_spectators" );
}
@ -532,6 +603,90 @@ menuspectator()
menuclass( response )
{
self closemenus();
if ( !isDefined( self.pers[ "team" ] ) || !isDefined( level.teams[ self.pers[ "team" ] ] ) )
{
return;
}
class = self maps/mp/gametypes/_class::getclasschoice( response );
if ( isDefined( self.pers[ "class" ] ) && self.pers[ "class" ] == class )
{
return;
}
self.pers[ "changed_class" ] = 1;
self notify( "changed_class" );
if ( isDefined( self.curclass ) && self.curclass == class )
{
self.pers[ "changed_class" ] = 0;
}
if ( ispregame() )
{
self maps/mp/gametypes/_pregame::onplayerclasschange( response );
}
if ( self.sessionstate == "playing" )
{
self.pers[ "class" ] = class;
self.class = class;
if ( game[ "state" ] == "postgame" )
{
return;
}
if ( isDefined( self.usingsupplystation ) )
{
supplystationclasschange = self.usingsupplystation;
}
self.usingsupplystation = 0;
if ( level.ingraceperiod || !self.hasdonecombat && supplystationclasschange )
{
self maps/mp/gametypes/_class::setclass( self.pers[ "class" ] );
self.tag_stowed_back = undefined;
self.tag_stowed_hip = undefined;
self maps/mp/gametypes/_class::giveloadout( self.pers[ "team" ], self.pers[ "class" ] );
self maps/mp/killstreaks/_killstreaks::giveownedkillstreak();
}
else
{
if ( !self issplitscreen() )
{
self iprintlnbold( game[ "strings" ][ "change_class" ] );
}
}
}
else
{
self.pers[ "class" ] = class;
self.class = class;
if ( game[ "state" ] == "postgame" )
{
return;
}
if ( self.sessionstate != "spectator" )
{
if ( self isinvehicle() )
{
return;
}
if ( self isremotecontrolling() )
{
return;
}
if ( self isweaponviewonlylinked() )
{
return 0;
}
}
if ( game[ "state" ] == "playing" )
{
timepassed = undefined;
if ( isDefined( self.respawntimerstarttime ) )
{
timepassed = ( getTime() - self.respawntimerstarttime ) / 1000;
}
self thread [[ level.spawnclient ]]( timepassed );
self.respawntimerstarttime = undefined;
}
}
level thread maps/mp/gametypes/_globallogic::updateteamstatus();
self thread maps/mp/gametypes/_spectating::setspectatepermissionsformachine();
}
removespawnmessageshortly( delay )

View File

@ -1,6 +1,7 @@
#include maps/mp/gametypes_zm/_globallogic_score;
#include maps/mp/gametypes_zm/_hostmigration;
#include maps/mp/gametypes_zm/_hud_message;
#include maps/mp/gametypes/_globallogic_score;
#include maps/mp/gametypes/_hostmigration;
#include maps/mp/killstreaks/_killstreaks;
#include maps/mp/gametypes/_hud_message;
#include maps/mp/_utility;
waittillslowprocessallowed()
@ -23,7 +24,7 @@ testmenu()
notifydata.titletext = &"MP_CHALLENGE_COMPLETED";
notifydata.notifytext = "wheee";
notifydata.sound = "mp_challenge_complete";
self thread maps/mp/gametypes_zm/_hud_message::notifymessage( notifydata );
self thread maps/mp/gametypes/_hud_message::notifymessage( notifydata );
}
}
@ -57,6 +58,10 @@ testhps()
for ( ;; )
{
hp = "radar_mp";
if ( self thread maps/mp/killstreaks/_killstreaks::givekillstreak( hp ) )
{
self playlocalsound( level.killstreaks[ hp ].informdialog );
}
wait 20;
}
}
@ -141,10 +146,10 @@ assertproperplacement()
{
/#
numplayers = level.placement[ "all" ].size;
if ( level.teambased )
{
i = 0;
while ( i < ( numplayers - 1 ) )
{
if ( isDefined( level.placement[ "all" ][ i ] ) && isDefined( level.placement[ "all" ][ i + 1 ] ) )
{
if ( level.placement[ "all" ][ i ].score < level.placement[ "all" ][ i + 1 ].score )
{
@ -157,8 +162,29 @@ assertproperplacement()
i++;
}
assertmsg( "Placement array was not properly sorted" );
return;
break;
}
else
{
i++;
}
}
}
else i = 0;
while ( i < ( numplayers - 1 ) )
{
if ( level.placement[ "all" ][ i ].pointstowin < level.placement[ "all" ][ i + 1 ].pointstowin )
{
println( "^1Placement array:" );
i = 0;
while ( i < numplayers )
{
player = level.placement[ "all" ][ i ];
println( "^1" + i + ". " + player.name + ": " + player.pointstowin );
i++;
}
assertmsg( "Placement array was not properly sorted" );
return;
}
else
{
@ -212,7 +238,7 @@ playtickingsound( gametype_tick_sound )
time -= 0,3;
wait 0,3;
}
maps/mp/gametypes_zm/_hostmigration::waittillhostmigrationdone();
maps/mp/gametypes/_hostmigration::waittillhostmigrationdone();
}
}
@ -290,7 +316,7 @@ getscoreremaining( team )
scorelimit = level.scorelimit;
if ( isplayer( self ) )
{
return scorelimit - maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self );
return scorelimit - maps/mp/gametypes/_globallogic_score::_getplayerscore( self );
}
else
{
@ -298,6 +324,15 @@ getscoreremaining( team )
}
}
getteamscoreforround( team )
{
if ( level.roundscorecarry && isDefined( game[ "lastroundscore" ][ team ] ) )
{
return getteamscore( team ) - game[ "lastroundscore" ][ team ];
}
return getteamscore( team );
}
getscoreperminute( team )
{
/#
@ -311,11 +346,11 @@ getscoreperminute( team )
minutespassed = ( gettimepassed() / 60000 ) + 0,0001;
if ( isplayer( self ) )
{
return maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self ) / minutespassed;
return maps/mp/gametypes/_globallogic_score::_getplayerscore( self ) / minutespassed;
}
else
{
return getteamscore( team ) / minutespassed;
return getteamscoreforround( team ) / minutespassed;
}
}
@ -382,6 +417,13 @@ isheadshot( sweapon, shitloc, smeansofdeath, einflictor )
return 0;
}
}
if ( maps/mp/killstreaks/_killstreaks::iskillstreakweapon( sweapon ) )
{
if ( isDefined( einflictor ) || !isDefined( einflictor.controlled ) && einflictor.controlled == 0 )
{
return 0;
}
}
return 1;
}
@ -466,13 +508,13 @@ logteamwinstring( wintype, winner )
{
log_string = ( log_string + ", win: " ) + winner;
}
_a469 = level.teams;
_k469 = getFirstArrayKey( _a469 );
while ( isDefined( _k469 ) )
_a495 = level.teams;
_k495 = getFirstArrayKey( _a495 );
while ( isDefined( _k495 ) )
{
team = _a469[ _k469 ];
team = _a495[ _k495 ];
log_string = ( log_string + ", " ) + team + ": " + game[ "teamScores" ][ team ];
_k469 = getNextArrayKey( _a469, _k469 );
_k495 = getNextArrayKey( _a495, _k495 );
}
logstring( log_string );
}

View File

@ -1,10 +1,16 @@
#include maps/mp/gametypes_zm/_damagefeedback;
#include maps/mp/gametypes_zm/_globallogic_player;
#include maps/mp/gametypes_zm/_weapons;
#include maps/mp/gametypes/_damagefeedback;
#include maps/mp/gametypes/_globallogic_player;
#include maps/mp/gametypes/_weapons;
#include maps/mp/_vehicles;
#include maps/mp/gametypes/_class;
#include maps/mp/_utility;
callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname )
{
if ( level.idflags_radius & idflags )
{
idamage = maps/mp/gametypes/_class::cac_modified_vehicle_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor );
}
self.idflags = idflags;
self.idflagstime = getTime();
if ( game[ "state" ] == "postgame" )
@ -84,6 +90,10 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath,
{
team = self.owner.pers[ "team" ];
}
else
{
team = self maps/mp/_vehicles::vehicle_get_occupant_team();
}
if ( level.teambased && isplayer( eattacker ) && team == eattacker.pers[ "team" ] )
{
if ( level.friendlyfire == 0 )
@ -137,6 +147,12 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath,
friendly = 1;
}
else
{
if ( !level.hardcoremode && isDefined( self.owner ) && isDefined( eattacker.owner ) && self.owner == eattacker.owner )
{
return;
}
else
{
if ( !level.teambased && isDefined( self.targetname ) && self.targetname == "rcbomb" )
{
@ -154,7 +170,7 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath,
}
if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) )
{
eattacker thread maps/mp/gametypes_zm/_weapons::checkhit( sweapon );
eattacker thread maps/mp/gametypes/_weapons::checkhit( sweapon );
}
if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor.iscooked ) )
{
@ -179,13 +195,14 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath,
idamage = 0;
}
}
}
if ( isDefined( eattacker ) && eattacker != self )
{
if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( sweapon, einflictor ) )
if ( maps/mp/gametypes/_globallogic_player::dodamagefeedback( sweapon, einflictor ) )
{
if ( idamage > 0 )
{
eattacker thread maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor );
eattacker thread maps/mp/gametypes/_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor );
}
}
}
@ -221,9 +238,9 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath,
callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime )
{
idamage = 0;
finnerdamage = 0;
fouterdamage = 0;
idamage = maps/mp/gametypes/_class::cac_modified_vehicle_damage( self, eattacker, idamage, smeansofdeath, sweapon, einflictor );
finnerdamage = maps/mp/gametypes/_class::cac_modified_vehicle_damage( self, eattacker, finnerdamage, smeansofdeath, sweapon, einflictor );
fouterdamage = maps/mp/gametypes/_class::cac_modified_vehicle_damage( self, eattacker, fouterdamage, smeansofdeath, sweapon, einflictor );
self.idflags = idflags;
self.idflagstime = getTime();
if ( game[ "state" ] == "postgame" )
@ -256,7 +273,7 @@ callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fout
idamage = 1;
}
}
occupant_team = undefined;
occupant_team = self maps/mp/_vehicles::vehicle_get_occupant_team();
if ( level.teambased && isplayer( eattacker ) && occupant_team == eattacker.pers[ "team" ] )
{
if ( level.friendlyfire == 0 )
@ -311,6 +328,13 @@ callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fout
return;
}
else
{
if ( !level.hardcoremode && isDefined( self.owner ) && isDefined( eattacker.owner ) && self.owner == eattacker.owner )
{
return;
return;
}
else
{
if ( idamage < 1 )
{
@ -319,6 +343,7 @@ callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fout
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
}
}
}
}
vehiclecrush()
@ -333,19 +358,7 @@ vehiclecrush()
getvehicleprojectilescalar( sweapon )
{
if ( sweapon == "satchel_charge_mp" )
{
scale = 1;
}
else if ( sweapon == "sticky_grenade_mp" )
{
scale = 1;
}
else if ( sweapon == "claymore_mp" )
{
scale = 1;
}
else if ( sweapon == "remote_missile_missile_mp" )
if ( sweapon == "remote_missile_missile_mp" )
{
scale = 10;
}
@ -361,18 +374,6 @@ getvehicleprojectilescalar( sweapon )
{
scale = 0,2;
}
else if ( issubstr( sweapon, "gl_" ) )
{
scale = 1;
}
else if ( issubstr( sweapon, "turret_mp" ) )
{
scale = 1;
}
else if ( issubstr( sweapon, "grenade" ) )
{
scale = 1;
}
else
{
scale = 1;
@ -382,19 +383,7 @@ getvehicleprojectilescalar( sweapon )
getvehicleprojectilesplashscalar( sweapon )
{
if ( sweapon == "satchel_charge_mp" )
{
scale = 1;
}
else if ( sweapon == "sticky_grenade_mp" )
{
scale = 1;
}
else if ( sweapon == "claymore_mp" )
{
scale = 1;
}
else if ( sweapon == "remote_missile_missile_mp" )
if ( sweapon == "remote_missile_missile_mp" )
{
scale = 10;
}
@ -406,18 +395,6 @@ getvehicleprojectilesplashscalar( sweapon )
{
scale = 0,5;
}
else if ( issubstr( sweapon, "gl_" ) )
{
scale = 0,5;
}
else if ( issubstr( sweapon, "turrent_mp" ) )
{
scale = 0,1;
}
else if ( issubstr( sweapon, "grenade" ) )
{
scale = 1;
}
else
{
scale = 1;

View File

@ -1,995 +0,0 @@
#include maps/mp/gametypes_zm/_globallogic_ui;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/gametypes_zm/_globallogic_score;
#include maps/mp/gametypes_zm/_globallogic;
#include common_scripts/utility;
#include maps/mp/_utility;
initializeactionarray()
{
level.gametypeactions = [];
level.gametypeactions[ "GiveAmmo" ] = ::dogiveammo;
level.gametypeactions[ "RemoveAmmo" ] = ::doremoveammo;
level.gametypeactions[ "PlaySound" ] = ::doplaysound;
level.gametypeactions[ "EnableUAV" ] = ::doenableuav;
level.gametypeactions[ "GiveScore" ] = ::dogivescore;
level.gametypeactions[ "RemoveScore" ] = ::doremovescore;
level.gametypeactions[ "SetHeader" ] = ::dosetheader;
level.gametypeactions[ "SetSubHeader" ] = ::dosetsubheader;
level.gametypeactions[ "DisplayMessage" ] = ::dodisplaymessage;
level.gametypeactions[ "GiveHealth" ] = ::dogivehealth;
level.gametypeactions[ "RemoveHealth" ] = ::doremovehealth;
level.gametypeactions[ "SetHealthRegen" ] = ::dosethealthregen;
level.gametypeactions[ "ChangeClass" ] = ::dochangeclass;
level.gametypeactions[ "ChangeTeam" ] = ::dochangeteam;
level.gametypeactions[ "GivePerk" ] = ::dogiveperk;
level.gametypeactions[ "RemovePerk" ] = ::doremoveperk;
level.gametypeactions[ "GiveInvuln" ] = ::dogiveinvuln;
level.gametypeactions[ "RemoveInvuln" ] = ::doremoveinvuln;
level.gametypeactions[ "SetDamageModifier" ] = ::dosetdamagemodifier;
level.gametypeactions[ "GiveKillstreak" ] = ::dogivekillstreak;
level.gametypeactions[ "RemoveKillstreak" ] = ::doremovekillstreak;
level.gametypeactions[ "GiveLives" ] = ::dogivelives;
level.gametypeactions[ "RemoveLives" ] = ::doremovelives;
level.gametypeactions[ "ScaleMoveSpeed" ] = ::doscalemovespeed;
level.gametypeactions[ "ShowOnRadar" ] = ::doshowonradar;
level.conditionals = [];
level.conditionals[ "Equals" ] = ::equals;
level.conditionals[ "==" ] = ::equals;
level.conditionals[ "!=" ] = ::notequals;
level.conditionals[ "<" ] = ::lessthan;
level.conditionals[ "<=" ] = ::lessthanequals;
level.conditionals[ ">" ] = ::greaterthan;
level.conditionals[ ">=" ] = ::greaterthanequals;
level.conditionals[ "InPlace" ] = ::inplace;
level.conditionallefthandside = [];
level.conditionallefthandside[ "PlayersLeft" ] = ::playersleft;
level.conditionallefthandside[ "RoundsPlayed" ] = ::roundsplayed;
level.conditionallefthandside[ "HitBy" ] = ::hitby;
level.conditionallefthandside[ "PlayersClass" ] = ::playersclass;
level.conditionallefthandside[ "VictimsClass" ] = ::playersclass;
level.conditionallefthandside[ "AttackersClass" ] = ::attackersclass;
level.conditionallefthandside[ "PlayersPlace" ] = ::playersplace;
level.conditionallefthandside[ "VictimsPlace" ] = ::playersplace;
level.conditionallefthandside[ "AttackersPlace" ] = ::attackersplace;
level.targets = [];
level.targets[ "Everyone" ] = ::gettargeteveryone;
level.targets[ "PlayersLeft" ] = ::gettargetplayersleft;
level.targets[ "PlayersEliminated" ] = ::gettargetplayerseliminated;
level.targets[ "PlayersTeam" ] = ::gettargetplayersteam;
level.targets[ "VictimsTeam" ] = ::gettargetplayersteam;
level.targets[ "OtherTeam" ] = ::gettargetotherteam;
level.targets[ "AttackersTeam" ] = ::gettargetotherteam;
level.targets[ "PlayersLeftOnPlayersTeam" ] = ::gettargetplayersleftonplayersteam;
level.targets[ "PlayersLeftOnOtherTeam" ] = ::gettargetplayersleftonotherteam;
level.targets[ "PlayersLeftOnVictimsTeam" ] = ::gettargetplayersleftonplayersteam;
level.targets[ "PlayersLeftOnAttackersTeam" ] = ::gettargetplayersleftonotherteam;
level.targets[ "PlayersEliminatedOnPlayersTeam" ] = ::gettargetplayerseliminatedonplayersteam;
level.targets[ "PlayersEliminatedOnOtherTeam" ] = ::gettargetplayerseliminatedonotherteam;
level.targets[ "PlayersEliminatedOnVictimsTeam" ] = ::gettargetplayerseliminatedonplayersteam;
level.targets[ "PlayersEliminatedOnAttackersTeam" ] = ::gettargetplayerseliminatedonotherteam;
level.targets[ "AssistingPlayers" ] = ::getassistingplayers;
}
equals( param1, param2 )
{
return param1 == param2;
}
notequals( param1, param2 )
{
return param1 != param2;
}
lessthan( param1, param2 )
{
return param1 < param2;
}
lessthanequals( param1, param2 )
{
return param1 <= param2;
}
greaterthan( param1, param2 )
{
return param1 > param2;
}
greaterthanequals( param1, param2 )
{
return param1 >= param2;
}
inplace( param1, param2 )
{
if ( param1 == param2 )
{
return 1;
}
if ( param2 == "top3" && param1 == "first" )
{
return 1;
}
return 0;
}
playersleft( rule )
{
return 0;
}
roundsplayed( rule )
{
return game[ "roundsplayed" ] + 1;
}
hitby( rule )
{
meansofdeath = rule.target[ "MeansOfDeath" ];
weapon = rule.target[ "Weapon" ];
if ( !isDefined( meansofdeath ) || !isDefined( weapon ) )
{
return undefined;
}
switch( weapon )
{
case "knife_ballistic_mp":
return "knife";
}
switch( meansofdeath )
{
case "MOD_PISTOL_BULLET":
case "MOD_RIFLE_BULLET":
return "bullet";
case "MOD_BAYONET":
case "MOD_MELEE":
return "knife";
case "MOD_HEAD_SHOT":
return "headshot";
case "MOD_EXPLOSIVE":
case "MOD_GRENADE":
case "MOD_GRENADE_SPLASH":
case "MOD_PROJECTILE":
case "MOD_PROJECTILE_SPLASH":
return "explosive";
}
return undefined;
}
getplayersclass( player )
{
return player.pers[ "class" ];
}
playersclass( rule )
{
player = rule.target[ "Player" ];
return getplayersclass( player );
}
attackersclass( rule )
{
player = rule.target[ "Attacker" ];
return getplayersclass( player );
}
getplayersplace( player )
{
maps/mp/gametypes_zm/_globallogic::updateplacement();
if ( !isDefined( level.placement[ "all" ] ) )
{
return;
}
place = 0;
while ( place < level.placement[ "all" ].size )
{
if ( level.placement[ "all" ][ place ] == player )
{
place++;
continue;
}
else
{
place++;
}
}
place++;
if ( place == 1 )
{
return "first";
}
else
{
if ( place <= 3 )
{
return "top3";
}
else
{
if ( place == level.placement[ "all" ].size )
{
return "last";
}
}
}
return "middle";
}
playersplace( rule )
{
player = rule.target[ "Player" ];
return getplayersplace( player );
}
attackersplace( rule )
{
player = rule.target[ "Attacker" ];
return getplayersplace( player );
}
gettargeteveryone( rule )
{
return level.players;
}
gettargetplayersleft( rule )
{
return 0;
}
gettargetplayerseliminated( rule )
{
return 0;
}
gettargetplayersteam( rule )
{
player = rule.target[ "Player" ];
if ( !isDefined( player ) )
{
return [];
}
return getplayersonteam( level.players, player.pers[ "team" ] );
}
gettargetotherteam( rule )
{
player = rule.target[ "Player" ];
if ( !isDefined( player ) )
{
return [];
}
return getplayersonteam( level.players, getotherteam( player.pers[ "team" ] ) );
}
gettargetplayersleftonplayersteam( rule )
{
return [];
}
gettargetplayersleftonotherteam( rule )
{
return [];
}
gettargetplayerseliminatedonplayersteam( rule )
{
return [];
}
gettargetplayerseliminatedonotherteam( rule )
{
return [];
}
getassistingplayers( rule )
{
assisters = [];
attacker = rule.target[ "Attacker" ];
if ( !isDefined( rule.target[ "Assisters" ] ) || !isDefined( attacker ) )
{
return assisters;
}
j = 0;
while ( j < rule.target[ "Assisters" ].size )
{
player = rule.target[ "Assisters" ][ j ];
if ( !isDefined( player ) )
{
j++;
continue;
}
else if ( player == attacker )
{
j++;
continue;
}
else
{
assisters[ assisters.size ] = player;
}
j++;
}
return assisters;
}
executegametypeeventrule( rule )
{
if ( !aregametypeeventruleconditionalsmet( rule ) )
{
return;
}
if ( !isDefined( level.gametypeactions[ rule.action ] ) )
{
/#
error( "GAMETYPE VARIANTS - unknown action: " + rule.action + "!" );
#/
return;
}
thread internalexecuterule( rule );
}
internalexecuterule( rule )
{
}
aregametypeeventruleconditionalsmet( rule )
{
if ( !isDefined( rule.conditionals ) || rule.conditionals.size == 0 )
{
return 1;
}
combinedresult = 1;
if ( rule.conditionaleval == "OR" )
{
combinedresult = 0;
}
i = 0;
while ( i < rule.conditionals.size )
{
conditionalresult = evaluategametypeeventruleconditional( rule, rule.conditionals[ i ] );
switch( rule.conditionaleval )
{
case "AND":
if ( combinedresult )
{
combinedresult = conditionalresult;
}
break;
case "OR":
if ( !combinedresult )
{
combinedresult = conditionalresult;
}
break;
}
if ( rule.conditionaleval == "AND" && !combinedresult )
{
break;
}
else
{
if ( rule.conditionaleval == "OR" && combinedresult )
{
break;
}
else
{
i++;
}
}
}
return combinedresult;
}
evaluategametypeeventruleconditional( rule, conditional )
{
if ( isDefined( conditional.lhs ) || !isDefined( conditional.operand ) && !isDefined( conditional.rhs ) )
{
return 0;
}
if ( !isDefined( level.conditionallefthandside[ conditional.lhs ] ) )
{
return 0;
}
lhsvalue = [[ level.conditionallefthandside[ conditional.lhs ] ]]( rule );
if ( !isDefined( lhsvalue ) || !isDefined( level.conditionals[ conditional.operand ] ) )
{
return 0;
}
return [[ level.conditionals[ conditional.operand ] ]]( lhsvalue, conditional.rhs );
}
getplayersonteam( players, team )
{
playersonteam = [];
i = 0;
while ( i < players.size )
{
player = players[ i ];
if ( player.pers[ "team" ] == team )
{
playersonteam[ playersonteam.size ] = player;
}
i++;
}
return playersonteam;
}
gettargetsforgametypeeventrule( rule )
{
targets = [];
if ( !isDefined( rule.targetname ) )
{
return targets;
}
if ( isDefined( rule.target[ rule.targetname ] ) )
{
targets[ targets.size ] = rule.target[ rule.targetname ];
}
else
{
if ( isDefined( level.targets[ rule.targetname ] ) )
{
targets = [[ level.targets[ rule.targetname ] ]]( rule );
}
}
return targets;
}
doesrulehavevalidparam( rule )
{
if ( isDefined( rule.params ) && isarray( rule.params ) )
{
return rule.params.size > 0;
}
}
sortplayersbylivesdescending( players )
{
if ( !isDefined( players ) )
{
return undefined;
}
swapped = 1;
n = players.size;
while ( swapped )
{
swapped = 0;
i = 0;
while ( i < ( n - 1 ) )
{
if ( players[ i ].pers[ "lives" ] < players[ i + 1 ].pers[ "lives" ] )
{
temp = players[ i ];
players[ i ] = players[ i + 1 ];
players[ i + 1 ] = temp;
swapped = 1;
}
i++;
}
n--;
}
return players;
}
giveammo( players, amount )
{
i = 0;
while ( i < players.size )
{
wait 0,5;
player = players[ i ];
currentweapon = player getcurrentweapon();
clipammo = player getweaponammoclip( currentweapon );
player setweaponammoclip( currentweapon, clipammo + amount );
i++;
}
}
dogiveammo( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
giveammo( targets, rule.params[ 0 ] );
}
doremoveammo( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
giveammo( targets, 0 - rule.params[ 0 ] );
}
doplaysound( rule )
{
if ( doesrulehavevalidparam( rule ) )
{
playsoundonplayers( rule.params[ 0 ] );
}
}
doenableuav( rule )
{
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
{
targets[ targetindex ].pers[ "hasRadar" ] = 1;
targets[ targetindex ].hasspyplane = 1;
targetindex++;
}
}
givescore( players, amount )
{
i = 0;
while ( i < players.size )
{
player = players[ i ];
score = maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( player );
maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( player, score + amount );
i++;
}
}
dogivescore( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
givescore( targets, rule.params[ 0 ] );
}
doremovescore( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
givescore( targets, 0 - rule.params[ 0 ] );
}
dosetheader( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
{
target = targets[ targetindex ];
displaytextonhudelem( target, target.customgametypeheader, rule.params[ 0 ], rule.params[ 1 ], "gv_header", rule.params[ 2 ] );
targetindex++;
}
}
dosetsubheader( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
{
target = targets[ targetindex ];
displaytextonhudelem( target, target.customgametypesubheader, rule.params[ 0 ], rule.params[ 1 ], "gv_subheader", rule.params[ 2 ] );
targetindex++;
}
}
displaytextonhudelem( target, texthudelem, text, secondstodisplay, notifyname, valueparam )
{
texthudelem.alpha = 1;
if ( isDefined( valueparam ) )
{
texthudelem settext( text, valueparam );
}
else
{
texthudelem settext( text );
}
if ( !isDefined( secondstodisplay ) || secondstodisplay <= 0 )
{
target.doingnotify = 0;
target notify( notifyname );
return;
}
target thread fadecustomgametypehudelem( texthudelem, secondstodisplay, notifyname );
}
fadecustomgametypehudelem( hudelem, seconds, notifyname )
{
self endon( "disconnect" );
self notify( notifyname );
self endon( notifyname );
if ( seconds <= 0 )
{
return;
}
self.doingnotify = 1;
wait seconds;
while ( hudelem.alpha > 0 )
{
hudelem.alpha -= 0,05;
if ( hudelem.alpha < 0 )
{
hudelem.alpha = 0;
}
wait 0,05;
}
self.doingnotify = 0;
}
dodisplaymessage( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
{
thread announcemessage( targets[ targetindex ], rule.params[ 0 ], 2 );
targetindex++;
}
}
announcemessage( target, messagetext, time )
{
target endon( "disconnect" );
clientannouncement( target, messagetext, int( time * 1000 ) );
if ( time == 0 )
{
time = getDvarFloat( #"E8C4FC20" );
}
target.doingnotify = 1;
wait time;
target.doingnotify = 0;
}
givehealth( players, amount )
{
i = 0;
while ( i < players.size )
{
player = players[ i ];
player.health += amount;
i++;
}
}
dogivehealth( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
givehealth( gettargetsforgametypeeventrule( rule ), rule.params[ 0 ] );
}
doremovehealth( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
givehealth( gettargetsforgametypeeventrule( rule ), 0 - rule.params[ 0 ] );
}
dosethealthregen( rule )
{
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
{
player = targets[ targetindex ];
player.regenrate = rule.params[ 0 ];
targetindex++;
}
}
dochangeclass( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
}
dochangeteam( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
team = rule.params[ 0 ];
teamkeys = getarraykeys( level.teams );
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
{
target = targets[ targetindex ];
if ( target.pers[ "team" ] == team )
{
targetindex++;
continue;
}
else
{
while ( team == "toggle" )
{
team = teamkeys[ randomint( teamkeys.size ) ];
teamindex = 0;
while ( teamindex < teamkeys.size )
{
if ( target.pers[ "team" ] == teamkeys[ teamindex ] )
{
team = teamkeys[ ( teamindex + 1 ) % teamkeys.size ];
break;
}
else
{
teamindex++;
}
}
}
target.pers[ "team" ] = team;
target.team = team;
if ( level.teambased )
{
target.sessionteam = team;
}
else
{
target.sessionteam = "none";
}
target notify( "joined_team" );
level notify( "joined_team" );
}
targetindex++;
}
}
displayperk( player, imagename )
{
index = 0;
if ( isDefined( player.perkicon ) )
{
index = -1;
i = 0;
while ( i < player.perkicon.size )
{
if ( player.perkicon[ i ].alpha == 0 )
{
index = i;
break;
}
else
{
i++;
}
}
if ( index == -1 )
{
return;
}
}
player maps/mp/gametypes_zm/_hud_util::showperk( index, imagename, 10 );
player thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutaftertime( 3 );
player thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutondeath();
}
setorunsetperk( players, perks, shouldset )
{
if ( level.perksenabled == 0 )
{
return;
}
if ( perks.size < 2 )
{
return;
}
hasperkalready = 0;
imagename = perks[ perks.size - 1 ];
i = 0;
while ( i < players.size )
{
player = players[ i ];
perkindex = 0;
while ( perkindex < ( perks.size - 1 ) )
{
perk = perks[ perkindex ];
if ( player hasperk( perk ) )
{
hasperkalready = 1;
}
if ( shouldset )
{
player setperk( perk );
perkindex++;
continue;
}
else
{
player unsetperk( perk );
}
perkindex++;
}
if ( shouldset && !hasperkalready && getDvarInt( "scr_showperksonspawn" ) == 1 )
{
displayperk( player, imagename );
}
i++;
}
}
dogiveperk( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 1 );
}
doremoveperk( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 0 );
}
giveorremovekillstreak( rule, shouldgive )
{
}
dogivekillstreak( rule )
{
giveorremovekillstreak( rule, 1 );
}
doremovekillstreak( rule )
{
giveorremovekillstreak( rule, 0 );
}
givelives( players, amount )
{
i = 0;
while ( i < players.size )
{
player = players[ i ];
player.pers[ "lives" ] += amount;
if ( player.pers[ "lives" ] < 0 )
{
player.pers[ "lives" ] = 0;
}
i++;
}
}
dogivelives( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
givelives( gettargetsforgametypeeventrule( rule ), rule.params[ 0 ] );
}
doremovelives( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
givelives( gettargetsforgametypeeventrule( rule ), 0 - rule.params[ 0 ] );
}
giveorremoveinvuln( players, shouldgiveinvuln )
{
i = 0;
while ( i < players.size )
{
player = players[ i ];
i++;
}
}
dogiveinvuln( rule )
{
giveorremoveinvuln( gettargetsforgametypeeventrule( rule ), 1 );
}
doremoveinvuln( rule )
{
giveorremoveinvuln( gettargetsforgametypeeventrule( rule ), 0 );
}
dosetdamagemodifier( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
players = gettargetsforgametypeeventrule( rule );
i = 0;
while ( i < players.size )
{
player = players[ i ];
player.damagemodifier = rule.params[ 0 ];
i++;
}
}
doscalemovespeed( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
movespeedscale = rule.params[ 0 ];
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
{
target = targets[ targetindex ];
target.movementspeedmodifier = movespeedscale * target getmovespeedscale();
if ( target.movementspeedmodifier < 0,1 )
{
target.movementspeedmodifier = 0,1;
}
else
{
if ( target.movementspeedmodifier > 4 )
{
target.movementspeedmodifier = 4;
}
}
target setmovespeedscale( target.movementspeedmodifier );
targetindex++;
}
}
doshowonradar( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
{
if ( rule.params[ 0 ] == "enable" )
{
targets[ targetindex ] setperk( "specialty_showonradar" );
targetindex++;
continue;
}
else
{
targets[ targetindex ] unsetperk( "specialty_showonradar" );
}
targetindex++;
}
}

View File

@ -1,4 +1,4 @@
#include maps/mp/gametypes_zm/_globallogic_player;
#include maps/mp/gametypes/_globallogic_player;
init()
{
@ -170,7 +170,7 @@ playerhealthregen()
}
if ( newhealth >= 1 )
{
self maps/mp/gametypes_zm/_globallogic_player::resetattackerlist();
self maps/mp/gametypes/_globallogic_player::resetattackerlist();
newhealth = 1;
}
if ( newhealth <= 0 )

View File

@ -1,7 +1,5 @@
#include maps/mp/zombies/_zm;
#include maps/mp/gametypes_zm/_hud;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/gametypes/_hud;
#include maps/mp/gametypes/_hud_util;
#include common_scripts/utility;
#include maps/mp/_utility;
@ -55,22 +53,6 @@ callback_hostmigrationsave()
{
}
callback_prehostmigrationsave()
{
undo_link_changes();
disablezombies( 1 );
if ( is_true( level._hm_should_pause_spawning ) )
{
flag_set( "spawn_zombies" );
}
i = 0;
while ( i < level.players.size )
{
level.players[ i ] enableinvulnerability();
i++;
}
}
pausetimer()
{
level.migrationtimerpausetime = getTime();
@ -98,10 +80,13 @@ locktimer()
callback_hostmigration()
{
redo_link_changes();
setslowmotion( 1, 1, 0 );
makedvarserverinfo( "ui_guncycle", 0 );
level.hostmigrationreturnedplayercount = 0;
if ( level.inprematchperiod )
{
level waittill( "prematch_over" );
}
if ( level.gameended )
{
/#
@ -109,131 +94,46 @@ callback_hostmigration()
#/
return;
}
sethostmigrationstatus( 1 );
level notify( "host_migration_begin" );
i = 0;
while ( i < level.players.size )
{
if ( isDefined( level.hostmigration_link_entity_callback ) )
{
if ( !isDefined( level.players[ i ]._host_migration_link_entity ) )
{
level.players[ i ]._host_migration_link_entity = level.players[ i ] [[ level.hostmigration_link_entity_callback ]]();
}
}
level.players[ i ] thread hostmigrationtimerthink();
i++;
}
while ( isDefined( level.hostmigration_ai_link_entity_callback ) )
{
zombies = getaiarray( level.zombie_team );
while ( isDefined( zombies ) && zombies.size > 0 )
{
_a133 = zombies;
_k133 = getFirstArrayKey( _a133 );
while ( isDefined( _k133 ) )
{
zombie = _a133[ _k133 ];
if ( !isDefined( zombie._host_migration_link_entity ) )
{
zombie._host_migration_link_entity = zombie [[ level.hostmigration_ai_link_entity_callback ]]();
}
_k133 = getNextArrayKey( _a133, _k133 );
}
}
}
if ( level.inprematchperiod )
{
level waittill( "prematch_over" );
}
/#
println( "Migration starting at time " + getTime() );
#/
level.hostmigrationtimer = 1;
sethostmigrationstatus( 1 );
level notify( "host_migration_begin" );
thread locktimer();
zombies = getaiarray( level.zombie_team );
while ( isDefined( zombies ) && zombies.size > 0 )
players = level.players;
i = 0;
while ( i < players.size )
{
_a156 = zombies;
_k156 = getFirstArrayKey( _a156 );
while ( isDefined( _k156 ) )
{
zombie = _a156[ _k156 ];
if ( isDefined( zombie._host_migration_link_entity ) )
{
ent = spawn( "script_origin", zombie.origin );
ent.angles = zombie.angles;
zombie linkto( ent );
ent linkto( zombie._host_migration_link_entity, "tag_origin", zombie._host_migration_link_entity worldtolocalcoords( ent.origin ), ent.angles + zombie._host_migration_link_entity.angles );
zombie._host_migration_link_helper = ent;
zombie linkto( zombie._host_migration_link_helper );
}
_k156 = getNextArrayKey( _a156, _k156 );
}
player = players[ i ];
player thread hostmigrationtimerthink();
i++;
}
level endon( "host_migration_begin" );
level._hm_should_pause_spawning = flag( "spawn_zombies" );
if ( level._hm_should_pause_spawning )
{
flag_clear( "spawn_zombies" );
}
hostmigrationwait();
_a185 = level.players;
_k185 = getFirstArrayKey( _a185 );
while ( isDefined( _k185 ) )
{
player = _a185[ _k185 ];
player thread post_migration_become_vulnerable();
_k185 = getNextArrayKey( _a185, _k185 );
}
zombies = getaiarray( level.zombie_team );
while ( isDefined( zombies ) && zombies.size > 0 )
{
_a193 = zombies;
_k193 = getFirstArrayKey( _a193 );
while ( isDefined( _k193 ) )
{
zombie = _a193[ _k193 ];
if ( isDefined( zombie._host_migration_link_entity ) )
{
zombie unlink();
zombie._host_migration_link_helper delete();
zombie._host_migration_link_helper = undefined;
zombie._host_migration_link_entity = undefined;
}
_k193 = getNextArrayKey( _a193, _k193 );
}
}
enablezombies( 1 );
if ( level._hm_should_pause_spawning )
{
flag_set( "spawn_zombies" );
}
level.hostmigrationtimer = undefined;
level._hm_should_pause_spawning = undefined;
sethostmigrationstatus( 0 );
/#
println( "Migration finished at time " + getTime() );
#/
recordmatchbegin();
level notify( "host_migration_end" );
}
post_migration_become_vulnerable()
{
self endon( "disconnect" );
wait 3;
self disableinvulnerability();
}
matchstarttimerconsole_internal( counttime, matchstarttimer )
{
waittillframeend;
visionsetnaked( "mpIntro", 0 );
level endon( "match_start_timer_beginning" );
while ( counttime > 0 && !level.gameended )
{
matchstarttimer thread maps/mp/gametypes_zm/_hud::fontpulse( level );
matchstarttimer thread maps/mp/gametypes/_hud::fontpulse( level );
wait ( matchstarttimer.inframes * 0,05 );
matchstarttimer setvalue( counttime );
if ( counttime == 2 )
{
visionsetnaked( getDvar( "mapname" ), 3 );
}
counttime--;
wait ( 1 - ( matchstarttimer.inframes * 0,05 ) );
@ -257,11 +157,17 @@ matchstarttimerconsole( type, duration )
matchstarttimer.color = ( 1, 1, 0 );
matchstarttimer.foreground = 0;
matchstarttimer.hidewheninmenu = 1;
matchstarttimer maps/mp/gametypes_zm/_hud::fontpulseinit();
matchstarttimer maps/mp/gametypes/_hud::fontpulseinit();
counttime = int( duration );
if ( counttime >= 2 )
{
matchstarttimerconsole_internal( counttime, matchstarttimer );
visionsetnaked( getDvar( "mapname" ), 3 );
}
else
{
visionsetnaked( "mpIntro", 0 );
visionsetnaked( getDvar( "mapname" ), 1 );
}
matchstarttimer destroyelem();
matchstarttext destroyelem();
@ -275,10 +181,21 @@ hostmigrationwait()
thread matchstarttimerconsole( "waiting_for_teams", 20 );
hostmigrationwaitforplayers();
}
level notify( "host_migration_countdown_begin" );
thread matchstarttimerconsole( "match_starting_in", 5 );
wait 5;
}
waittillhostmigrationcountdown()
{
level endon( "host_migration_end" );
if ( !isDefined( level.hostmigrationtimer ) )
{
return;
}
level waittill( "host_migration_countdown_begin" );
}
hostmigrationwaitforplayers()
{
level endon( "hostmigration_enoughplayers" );
@ -294,17 +211,6 @@ hostmigrationtimerthink_internal()
{
self waittill( "spawned" );
}
if ( isDefined( self._host_migration_link_entity ) )
{
ent = spawn( "script_origin", self.origin );
ent.angles = self.angles;
self linkto( ent );
ent linkto( self._host_migration_link_entity, "tag_origin", self._host_migration_link_entity worldtolocalcoords( ent.origin ), ent.angles + self._host_migration_link_entity.angles );
self._host_migration_link_helper = ent;
/#
println( "Linking player to ent " + self._host_migration_link_entity.targetname );
#/
}
self.hostmigrationcontrolsfrozen = 1;
self freezecontrols( 1 );
level waittill( "host_migration_end" );
@ -318,21 +224,6 @@ hostmigrationtimerthink()
if ( self.hostmigrationcontrolsfrozen )
{
self freezecontrols( 0 );
self.hostmigrationcontrolsfrozen = 0;
/#
println( " Host migration unfreeze controls" );
#/
}
if ( isDefined( self._host_migration_link_entity ) )
{
self unlink();
self._host_migration_link_helper delete();
self._host_migration_link_helper = undefined;
if ( isDefined( self._host_migration_link_entity._post_host_migration_thread ) )
{
self thread [[ self._host_migration_link_entity._post_host_migration_thread ]]( self._host_migration_link_entity );
}
self._host_migration_link_entity = undefined;
}
}
@ -377,9 +268,9 @@ waitlongdurationwithhostmigrationpause( duration )
endtime += timepassed;
}
}
/#
if ( getTime() != endtime )
{
/#
println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO endtime = " + endtime );
#/
}
@ -387,6 +278,41 @@ waitlongdurationwithhostmigrationpause( duration )
return getTime() - starttime;
}
waitlongdurationwithhostmigrationpauseemp( duration )
{
if ( duration == 0 )
{
return;
}
/#
assert( duration > 0 );
#/
starttime = getTime();
empendtime = getTime() + ( duration * 1000 );
level.empendtime = empendtime;
while ( getTime() < empendtime )
{
waittillhostmigrationstarts( ( empendtime - getTime() ) / 1000 );
if ( isDefined( level.hostmigrationtimer ) )
{
timepassed = waittillhostmigrationdone();
if ( isDefined( empendtime ) )
{
empendtime += timepassed;
}
}
}
/#
if ( getTime() != empendtime )
{
println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO empendtime = " + empendtime );
#/
}
waittillhostmigrationdone();
level.empendtime = undefined;
return getTime() - starttime;
}
waitlongdurationwithgameendtimeupdate( duration )
{
if ( duration == 0 )
@ -422,125 +348,3 @@ waitlongdurationwithgameendtimeupdate( duration )
}
return getTime() - starttime;
}
find_alternate_player_place( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes )
{
found_node = undefined;
a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" );
while ( isDefined( a_nodes ) && a_nodes.size > 0 )
{
a_player_volumes = getentarray( "player_volume", "script_noteworthy" );
index = a_nodes.size - 1;
i = index;
while ( i >= 0 )
{
n_node = a_nodes[ i ];
if ( ignore_targetted_nodes == 1 )
{
if ( isDefined( n_node.target ) )
{
i--;
continue;
}
}
else
{
if ( !positionwouldtelefrag( n_node.origin ) )
{
if ( maps/mp/zombies/_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) )
{
v_start = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] + 30 );
v_end = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] - 30 );
trace = bullettrace( v_start, v_end, 0, undefined );
if ( trace[ "fraction" ] < 1 )
{
override_abort = 0;
if ( isDefined( level._chugabud_reject_node_override_func ) )
{
override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node );
}
if ( !override_abort )
{
found_node = n_node;
break;
}
}
}
}
}
else
{
i--;
}
}
}
return found_node;
}
hostmigration_put_player_in_better_place()
{
spawnpoint = undefined;
spawnpoint = find_alternate_player_place( self.origin, 50, 150, 64, 1 );
if ( !isDefined( spawnpoint ) )
{
spawnpoint = find_alternate_player_place( self.origin, 150, 400, 64, 1 );
}
if ( !isDefined( spawnpoint ) )
{
spawnpoint = find_alternate_player_place( self.origin, 50, 400, 256, 0 );
}
if ( !isDefined( spawnpoint ) )
{
spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_team( self, 1 );
}
if ( !isDefined( spawnpoint ) )
{
match_string = "";
location = level.scr_zm_map_start_location;
if ( location != "default" && location == "" && isDefined( level.default_start_location ) )
{
location = level.default_start_location;
}
match_string = ( level.scr_zm_ui_gametype + "_" ) + location;
spawnpoints = [];
structs = getstructarray( "initial_spawn", "script_noteworthy" );
while ( isDefined( structs ) )
{
_a559 = structs;
_k559 = getFirstArrayKey( _a559 );
while ( isDefined( _k559 ) )
{
struct = _a559[ _k559 ];
while ( isDefined( struct.script_string ) )
{
tokens = strtok( struct.script_string, " " );
_a565 = tokens;
_k565 = getFirstArrayKey( _a565 );
while ( isDefined( _k565 ) )
{
token = _a565[ _k565 ];
if ( token == match_string )
{
spawnpoints[ spawnpoints.size ] = struct;
}
_k565 = getNextArrayKey( _a565, _k565 );
}
}
_k559 = getNextArrayKey( _a559, _k559 );
}
}
if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 )
{
spawnpoints = getstructarray( "initial_spawn_points", "targetname" );
}
/#
assert( isDefined( spawnpoints ), "Could not find initial spawn points!" );
#/
spawnpoint = maps/mp/zombies/_zm::getfreespawnpoint( spawnpoints, self );
}
if ( isDefined( spawnpoint ) )
{
self setorigin( spawnpoint.origin );
}
}

View File

@ -31,11 +31,14 @@ init()
level.primaryprogressbartexty = -75;
level.primaryprogressbartextx = 0;
level.primaryprogressbarfontsize = 1,4;
level.primaryprogressbarx_ss = 20;
level.primaryprogressbartextx_ss = 20;
level.primaryprogressbary_ss = 30;
level.primaryprogressbartexty_ss = 33;
level.primaryprogressbarheight_ss = 2;
if ( level.splitscreen )
{
level.primaryprogressbarx = 20;
level.primaryprogressbartextx = 20;
level.primaryprogressbary = 15;
level.primaryprogressbartexty = 0;
level.primaryprogressbarheight = 2;
}
level.secondaryprogressbary = -85;
level.secondaryprogressbarx = 0;
level.secondaryprogressbarheight = 9;
@ -43,23 +46,32 @@ init()
level.secondaryprogressbartexty = -100;
level.secondaryprogressbartextx = 0;
level.secondaryprogressbarfontsize = 1,4;
level.secondaryprogressbarx_ss = 20;
level.secondaryprogressbartextx_ss = 20;
level.secondaryprogressbary_ss = 15;
level.secondaryprogressbartexty_ss = 0;
level.secondaryprogressbarheight_ss = 2;
if ( level.splitscreen )
{
level.secondaryprogressbarx = 20;
level.secondaryprogressbartextx = 20;
level.secondaryprogressbary = 15;
level.secondaryprogressbartexty = 0;
level.secondaryprogressbarheight = 2;
}
level.teamprogressbary = 32;
level.teamprogressbarheight = 14;
level.teamprogressbarwidth = 192;
level.teamprogressbartexty = 8;
level.teamprogressbarfontsize = 1,65;
setdvar( "ui_generic_status_bar", 0 );
if ( level.splitscreen )
{
level.lowertextyalign = "BOTTOM";
level.lowertexty = -42;
level.lowertextfontsize = 1,4;
level.lowertextyalign_ss = "CENTER";
level.lowertexty_ss = 40;
level.lowertextfontsize_ss = 1,4;
}
else
{
level.lowertextyalign = "CENTER";
level.lowertexty = 40;
level.lowertextfontsize = 1,4;
}
}
fontpulseinit()
@ -106,12 +118,8 @@ fontpulse( player )
}
}
fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadername, n_sort )
fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadername )
{
if ( !isDefined( n_sort ) )
{
n_sort = 50;
}
wait startwait;
if ( !isDefined( self ) )
{
@ -128,7 +136,8 @@ fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadern
self.blackscreen.foreground = 0;
self.blackscreen.hidewhendead = 0;
self.blackscreen.hidewheninmenu = 1;
self.blackscreen.sort = n_sort;
self.blackscreen.immunetodemogamehudsettings = 1;
self.blackscreen.sort = 50;
if ( isDefined( shadername ) )
{
self.blackscreen setshader( shadername, 640, 480 );

View File

@ -1,8 +1,8 @@
#include maps/mp/_utility;
#include maps/mp/gametypes_zm/_globallogic_audio;
#include maps/mp/gametypes/_globallogic_audio;
#include maps/mp/_music;
#include maps/mp/gametypes_zm/_hud_message;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/gametypes/_hud_message;
#include maps/mp/gametypes/_hud_util;
init()
{
@ -99,7 +99,7 @@ hintmessageplayers( players, hinttext, duration )
showinitialfactionpopup( team )
{
self luinotifyevent( &"faction_popup", 1, game[ "strings" ][ team + "_name" ] );
maps/mp/gametypes_zm/_hud_message::oldnotifymessage( undefined, undefined, undefined, undefined );
maps/mp/gametypes/_hud_message::oldnotifymessage( undefined, undefined, undefined, undefined );
}
initnotifymessage()
@ -111,7 +111,7 @@ initnotifymessage()
titlesize = 2;
textsize = 1,4;
iconsize = 24;
font = "extrabig";
font = "big";
point = "TOP";
relativepoint = "BOTTOM";
yoffset = 30;
@ -122,7 +122,7 @@ initnotifymessage()
titlesize = 2,5;
textsize = 1,75;
iconsize = 30;
font = "extrabig";
font = "big";
point = "TOP";
relativepoint = "BOTTOM";
yoffset = 0;
@ -134,7 +134,7 @@ initnotifymessage()
titlesize = 2;
textsize = 1,4;
iconsize = 24;
font = "extrabig";
font = "big";
point = "TOP";
relativepoint = "BOTTOM";
yoffset = 30;
@ -145,7 +145,7 @@ initnotifymessage()
titlesize = 2,5;
textsize = 1,75;
iconsize = 30;
font = "extrabig";
font = "big";
point = "BOTTOM LEFT";
relativepoint = "TOP";
yoffset = 0;
@ -205,6 +205,19 @@ notifymessage( notifydata )
self notify( "received award" );
}
playnotifyloop( duration )
{
playnotifyloop = spawn( "script_origin", ( 1, 1, 1 ) );
playnotifyloop playloopsound( "uin_notify_data_loop" );
duration -= 4;
if ( duration < 1 )
{
duration = 1;
}
wait duration;
playnotifyloop delete();
}
shownotifymessage( notifydata, duration )
{
self endon( "disconnect" );
@ -222,7 +235,7 @@ shownotifymessage( notifydata, duration )
}
if ( isDefined( notifydata.leadersound ) )
{
self maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( notifydata.leadersound );
self maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( notifydata.leadersound );
}
if ( isDefined( notifydata.glowcolor ) )
{
@ -368,6 +381,10 @@ waitrequirevisibility( waittime )
canreadtext()
{
if ( self maps/mp/_utility::isflashbanged() )
{
return 0;
}
return 1;
}
@ -414,8 +431,13 @@ hintmessagedeaththink()
lowermessagethink()
{
self endon( "disconnect" );
messagetexty = level.lowertexty;
if ( self issplitscreen() )
{
messagetexty = level.lowertexty - 50;
}
self.lowermessage = createfontstring( "default", level.lowertextfontsize );
self.lowermessage setpoint( "CENTER", level.lowertextyalign, 0, level.lowertexty );
self.lowermessage setpoint( "CENTER", level.lowertextyalign, 0, messagetexty );
self.lowermessage settext( "" );
self.lowermessage.archived = 0;
timerfontsize = 1,5;
@ -494,12 +516,16 @@ teamoutcomenotify( winner, isround, endreasontext )
outcometitle.glowalpha = 1;
outcometitle.hidewheninmenu = 0;
outcometitle.archived = 0;
outcometitle.immunetodemogamehudsettings = 1;
outcometitle.immunetodemofreecamera = 1;
outcometext = createfontstring( font, 2 );
outcometext setparent( outcometitle );
outcometext setpoint( "TOP", "BOTTOM", 0, 0 );
outcometext.glowalpha = 1;
outcometext.hidewheninmenu = 0;
outcometext.archived = 0;
outcometext.immunetodemogamehudsettings = 1;
outcometext.immunetodemofreecamera = 1;
if ( winner == "halftime" )
{
outcometitle settext( game[ "strings" ][ "halftime" ] );
@ -548,6 +574,10 @@ teamoutcomenotify( winner, isround, endreasontext )
outcometitle settext( game[ "strings" ][ "victory" ] );
}
outcometitle.color = ( 0,42, 0,68, 0,46 );
if ( isDefined( level.endvictoryreasontext ) )
{
endreasontext = level.endvictoryreasontext;
}
}
else
{
@ -560,6 +590,10 @@ teamoutcomenotify( winner, isround, endreasontext )
outcometitle settext( game[ "strings" ][ "defeat" ] );
}
outcometitle.color = ( 0,73, 0,29, 0,19 );
if ( isDefined( level.enddefeatreasontext ) )
{
endreasontext = level.enddefeatreasontext;
}
}
outcometext settext( endreasontext );
outcometitle setcod7decodefx( 200, duration, 600 );
@ -572,15 +606,17 @@ teamoutcomenotify( winner, isround, endreasontext )
teamicons[ team ] setpoint( "TOP", "BOTTOM", currentx, spacing );
teamicons[ team ].hidewheninmenu = 0;
teamicons[ team ].archived = 0;
teamicons[ team ].immunetodemogamehudsettings = 1;
teamicons[ team ].immunetodemofreecamera = 1;
teamicons[ team ].alpha = 0;
teamicons[ team ] fadeovertime( 0,5 );
teamicons[ team ].alpha = 1;
currentx += iconspacing;
_a607 = level.teams;
_k607 = getFirstArrayKey( _a607 );
while ( isDefined( _k607 ) )
_a650 = level.teams;
_k650 = getFirstArrayKey( _a650 );
while ( isDefined( _k650 ) )
{
enemyteam = _a607[ _k607 ];
enemyteam = _a650[ _k650 ];
if ( team == enemyteam )
{
}
@ -591,12 +627,14 @@ teamoutcomenotify( winner, isround, endreasontext )
teamicons[ enemyteam ] setpoint( "TOP", "BOTTOM", currentx, spacing );
teamicons[ enemyteam ].hidewheninmenu = 0;
teamicons[ enemyteam ].archived = 0;
teamicons[ enemyteam ].immunetodemogamehudsettings = 1;
teamicons[ enemyteam ].immunetodemofreecamera = 1;
teamicons[ enemyteam ].alpha = 0;
teamicons[ enemyteam ] fadeovertime( 0,5 );
teamicons[ enemyteam ].alpha = 1;
currentx += iconspacing;
}
_k607 = getNextArrayKey( _a607, _k607 );
_k650 = getNextArrayKey( _a650, _k650 );
}
teamscores = [];
teamscores[ team ] = createfontstring( font, titlesize );
@ -613,12 +651,14 @@ teamoutcomenotify( winner, isround, endreasontext )
}
teamscores[ team ].hidewheninmenu = 0;
teamscores[ team ].archived = 0;
teamscores[ team ].immunetodemogamehudsettings = 1;
teamscores[ team ].immunetodemofreecamera = 1;
teamscores[ team ] setpulsefx( 100, duration, 1000 );
_a641 = level.teams;
_k641 = getFirstArrayKey( _a641 );
while ( isDefined( _k641 ) )
_a688 = level.teams;
_k688 = getFirstArrayKey( _a688 );
while ( isDefined( _k688 ) )
{
enemyteam = _a641[ _k641 ];
enemyteam = _a688[ _k688 ];
if ( team == enemyteam )
{
}
@ -638,13 +678,18 @@ teamoutcomenotify( winner, isround, endreasontext )
}
teamscores[ enemyteam ].hidewheninmenu = 0;
teamscores[ enemyteam ].archived = 0;
teamscores[ enemyteam ].immunetodemogamehudsettings = 1;
teamscores[ enemyteam ].immunetodemofreecamera = 1;
teamscores[ enemyteam ] setpulsefx( 100, duration, 1000 );
}
_k641 = getNextArrayKey( _a641, _k641 );
_k688 = getNextArrayKey( _a688, _k688 );
}
font = "objective";
matchbonus = undefined;
if ( isDefined( self.matchbonus ) )
{
bonus = ceil( self.matchbonus * level.xpscale );
if ( bonus > 0 )
{
matchbonus = createfontstring( font, 2 );
matchbonus setparent( outcometext );
@ -652,8 +697,11 @@ teamoutcomenotify( winner, isround, endreasontext )
matchbonus.glowalpha = 1;
matchbonus.hidewheninmenu = 0;
matchbonus.archived = 0;
matchbonus.immunetodemogamehudsettings = 1;
matchbonus.immunetodemofreecamera = 1;
matchbonus.label = game[ "strings" ][ "match_bonus" ];
matchbonus setvalue( self.matchbonus );
matchbonus setvalue( bonus );
}
}
self thread resetoutcomenotify( teamicons, teamscores, outcometitle, outcometext );
}
@ -688,7 +736,7 @@ teamoutcomenotifyzombie( winner, isround, endreasontext )
wait 0,05;
}
self endon( "reset_outcome" );
if ( self issplitscreen() )
if ( level.splitscreen )
{
titlesize = 2;
spacing = 10;
@ -705,11 +753,27 @@ teamoutcomenotifyzombie( winner, isround, endreasontext )
outcometitle.glowalpha = 1;
outcometitle.hidewheninmenu = 0;
outcometitle.archived = 0;
outcometitle.immunetodemogamehudsettings = 1;
outcometitle.immunetodemofreecamera = 1;
outcometitle settext( endreasontext );
outcometitle setpulsefx( 100, 60000, 1000 );
self thread resetoutcomenotify( undefined, undefined, outcometitle );
}
isintop( players, topn )
{
i = 0;
while ( i < topn )
{
if ( isDefined( players[ i ] ) && self == players[ i ] )
{
return 1;
}
i++;
}
return 0;
}
outcomenotify( winner, isroundend, endreasontext )
{
self endon( "disconnect" );
@ -747,19 +811,11 @@ outcomenotify( winner, isroundend, endreasontext )
}
else
{
if ( isDefined( players[ 1 ] ) && players[ 0 ].score == players[ 1 ].score && players[ 0 ].deaths == players[ 1 ].deaths || self == players[ 0 ] && self == players[ 1 ] )
if ( players[ 0 ].pointstowin == 0 )
{
outcometitle settext( game[ "strings" ][ "tie" ] );
}
else
{
if ( isDefined( players[ 2 ] ) && players[ 0 ].score == players[ 2 ].score && players[ 0 ].deaths == players[ 2 ].deaths && self == players[ 2 ] )
{
outcometitle settext( game[ "strings" ][ "tie" ] );
}
else
{
if ( isDefined( players[ 0 ] ) && self == players[ 0 ] )
else if ( self isintop( players, 3 ) )
{
outcometitle settext( game[ "strings" ][ "victory" ] );
outcometitle.color = ( 0,42, 0,68, 0,46 );
@ -770,11 +826,11 @@ outcomenotify( winner, isroundend, endreasontext )
outcometitle.color = ( 0,73, 0,29, 0,19 );
}
}
}
}
outcometitle.glowalpha = 1;
outcometitle.hidewheninmenu = 0;
outcometitle.archived = 0;
outcometitle.immunetodemogamehudsettings = 1;
outcometitle.immunetodemofreecamera = 1;
outcometitle setcod7decodefx( 200, duration, 600 );
outcometext = createfontstring( font, 2 );
outcometext setparent( outcometitle );
@ -782,6 +838,8 @@ outcomenotify( winner, isroundend, endreasontext )
outcometext.glowalpha = 1;
outcometext.hidewheninmenu = 0;
outcometext.archived = 0;
outcometext.immunetodemogamehudsettings = 1;
outcometext.immunetodemofreecamera = 1;
outcometext settext( endreasontext );
firsttitle = createfontstring( font, winnersize );
firsttitle setparent( outcometext );
@ -789,6 +847,8 @@ outcomenotify( winner, isroundend, endreasontext )
firsttitle.glowalpha = 1;
firsttitle.hidewheninmenu = 0;
firsttitle.archived = 0;
firsttitle.immunetodemogamehudsettings = 1;
firsttitle.immunetodemofreecamera = 1;
if ( isDefined( players[ 0 ] ) )
{
firsttitle.label = &"MP_FIRSTPLACE_NAME";
@ -801,6 +861,8 @@ outcomenotify( winner, isroundend, endreasontext )
secondtitle.glowalpha = 1;
secondtitle.hidewheninmenu = 0;
secondtitle.archived = 0;
secondtitle.immunetodemogamehudsettings = 1;
secondtitle.immunetodemofreecamera = 1;
if ( isDefined( players[ 1 ] ) )
{
secondtitle.label = &"MP_SECONDPLACE_NAME";
@ -814,6 +876,8 @@ outcomenotify( winner, isroundend, endreasontext )
thirdtitle.glowalpha = 1;
thirdtitle.hidewheninmenu = 0;
thirdtitle.archived = 0;
thirdtitle.immunetodemogamehudsettings = 1;
thirdtitle.immunetodemofreecamera = 1;
if ( isDefined( players[ 2 ] ) )
{
thirdtitle.label = &"MP_THIRDPLACE_NAME";
@ -826,10 +890,16 @@ outcomenotify( winner, isroundend, endreasontext )
matchbonus.glowalpha = 1;
matchbonus.hidewheninmenu = 0;
matchbonus.archived = 0;
matchbonus.immunetodemogamehudsettings = 1;
matchbonus.immunetodemofreecamera = 1;
if ( isDefined( self.matchbonus ) )
{
bonus = ceil( self.matchbonus * level.xpscale );
if ( bonus > 0 )
{
matchbonus.label = game[ "strings" ][ "match_bonus" ];
matchbonus setvalue( self.matchbonus );
matchbonus setvalue( bonus );
}
}
self thread updateoutcome( firsttitle, secondtitle, thirdtitle );
self thread resetoutcomenotify( undefined, undefined, outcometitle, outcometext, firsttitle, secondtitle, thirdtitle, matchbonus );
@ -899,6 +969,8 @@ wageroutcomenotify( winner, endreasontext )
outcometitle.glowalpha = 1;
outcometitle.hidewheninmenu = 0;
outcometitle.archived = 0;
outcometitle.immunetodemogamehudsettings = 1;
outcometitle.immunetodemofreecamera = 1;
outcometitle setcod7decodefx( 200, duration, 600 );
outcometext = createfontstring( font, 2 );
outcometext setparent( outcometitle );
@ -906,6 +978,8 @@ wageroutcomenotify( winner, endreasontext )
outcometext.glowalpha = 1;
outcometext.hidewheninmenu = 0;
outcometext.archived = 0;
outcometext.immunetodemogamehudsettings = 1;
outcometext.immunetodemofreecamera = 1;
outcometext settext( endreasontext );
playernamehudelems = [];
playercphudelems = [];
@ -929,6 +1003,8 @@ wageroutcomenotify( winner, endreasontext )
secondtitle.glowalpha = 1;
secondtitle.hidewheninmenu = 0;
secondtitle.archived = 0;
secondtitle.immunetodemogamehudsettings = 1;
secondtitle.immunetodemofreecamera = 1;
secondtitle.label = &"MP_WAGER_PLACE_NAME";
secondtitle.playernum = i;
secondtitle setplayernamestring( players[ i ] );
@ -939,6 +1015,8 @@ wageroutcomenotify( winner, endreasontext )
secondcp.glowalpha = 1;
secondcp.hidewheninmenu = 0;
secondcp.archived = 0;
secondcp.immunetodemogamehudsettings = 1;
secondcp.immunetodemofreecamera = 1;
secondcp.label = &"MENU_POINTS";
secondcp.currentvalue = 0;
if ( isDefined( players[ i ].wagerwinnings ) )
@ -1039,12 +1117,16 @@ teamwageroutcomenotify( winner, isroundend, endreasontext )
outcometitle.glowalpha = 1;
outcometitle.hidewheninmenu = 0;
outcometitle.archived = 0;
outcometitle.immunetodemogamehudsettings = 1;
outcometitle.immunetodemofreecamera = 1;
outcometext = createfontstring( font, 2 );
outcometext setparent( outcometitle );
outcometext setpoint( "TOP", "BOTTOM", 0, 0 );
outcometext.glowalpha = 1;
outcometext.hidewheninmenu = 0;
outcometext.archived = 0;
outcometext.immunetodemogamehudsettings = 1;
outcometext.immunetodemofreecamera = 1;
if ( winner == "tie" )
{
if ( isroundend )
@ -1102,11 +1184,13 @@ teamwageroutcomenotify( winner, isroundend, endreasontext )
teamicons[ team ].alpha = 0;
teamicons[ team ] fadeovertime( 0,5 );
teamicons[ team ].alpha = 1;
_a1171 = level.teams;
_k1171 = getFirstArrayKey( _a1171 );
while ( isDefined( _k1171 ) )
teamicons[ team ].immunetodemogamehudsettings = 1;
teamicons[ team ].immunetodemofreecamera = 1;
_a1269 = level.teams;
_k1269 = getFirstArrayKey( _a1269 );
while ( isDefined( _k1269 ) )
{
enemyteam = _a1171[ _k1171 ];
enemyteam = _a1269[ _k1269 ];
if ( team == enemyteam )
{
}
@ -1120,8 +1204,10 @@ teamwageroutcomenotify( winner, isroundend, endreasontext )
teamicons[ enemyteam ].alpha = 0;
teamicons[ enemyteam ] fadeovertime( 0,5 );
teamicons[ enemyteam ].alpha = 1;
teamicons[ enemyteam ].immunetodemogamehudsettings = 1;
teamicons[ enemyteam ].immunetodemofreecamera = 1;
}
_k1171 = getNextArrayKey( _a1171, _k1171 );
_k1269 = getNextArrayKey( _a1269, _k1269 );
}
teamscores = [];
teamscores[ team ] = createfontstring( font, titlesize );
@ -1131,12 +1217,14 @@ teamwageroutcomenotify( winner, isroundend, endreasontext )
teamscores[ team ] setvalue( getteamscore( team ) );
teamscores[ team ].hidewheninmenu = 0;
teamscores[ team ].archived = 0;
teamscores[ team ].immunetodemogamehudsettings = 1;
teamscores[ team ].immunetodemofreecamera = 1;
teamscores[ team ] setpulsefx( 100, duration, 1000 );
_a1197 = level.teams;
_k1197 = getFirstArrayKey( _a1197 );
while ( isDefined( _k1197 ) )
_a1299 = level.teams;
_k1299 = getFirstArrayKey( _a1299 );
while ( isDefined( _k1299 ) )
{
enemyteam = _a1197[ _k1197 ];
enemyteam = _a1299[ _k1299 ];
if ( team == enemyteam )
{
}
@ -1149,9 +1237,11 @@ teamwageroutcomenotify( winner, isroundend, endreasontext )
teamscores[ enemyteam ] setvalue( getteamscore( enemyteam ) );
teamscores[ enemyteam ].hidewheninmenu = 0;
teamscores[ enemyteam ].archived = 0;
teamscores[ enemyteam ].immunetodemogamehudsettings = 1;
teamscores[ enemyteam ].immunetodemofreecamera = 1;
teamscores[ enemyteam ] setpulsefx( 100, duration, 1000 );
}
_k1197 = getNextArrayKey( _a1197, _k1197 );
_k1299 = getNextArrayKey( _a1299, _k1299 );
}
matchbonus = undefined;
sidebetwinnings = undefined;
@ -1163,6 +1253,8 @@ teamwageroutcomenotify( winner, isroundend, endreasontext )
matchbonus.glowalpha = 1;
matchbonus.hidewheninmenu = 0;
matchbonus.archived = 0;
matchbonus.immunetodemogamehudsettings = 1;
matchbonus.immunetodemofreecamera = 1;
matchbonus.label = game[ "strings" ][ "wager_winnings" ];
matchbonus setvalue( self.wagerwinnings );
if ( isDefined( game[ "side_bets" ] ) && game[ "side_bets" ] )
@ -1173,6 +1265,8 @@ teamwageroutcomenotify( winner, isroundend, endreasontext )
sidebetwinnings.glowalpha = 1;
sidebetwinnings.hidewheninmenu = 0;
sidebetwinnings.archived = 0;
sidebetwinnings.immunetodemogamehudsettings = 1;
sidebetwinnings.immunetodemofreecamera = 1;
sidebetwinnings.label = game[ "strings" ][ "wager_sidebet_winnings" ];
sidebetwinnings setvalue( self.pers[ "wager_sideBetWinnings" ] );
}
@ -1202,24 +1296,24 @@ resetoutcomenotify( hudelemlist1, hudelemlist2, hudelem3, hudelem4, hudelem5, hu
destroyhudelem( hudelem10 );
while ( isDefined( hudelemlist1 ) )
{
_a1263 = hudelemlist1;
_k1263 = getFirstArrayKey( _a1263 );
while ( isDefined( _k1263 ) )
_a1371 = hudelemlist1;
_k1371 = getFirstArrayKey( _a1371 );
while ( isDefined( _k1371 ) )
{
elem = _a1263[ _k1263 ];
elem = _a1371[ _k1371 ];
destroyhudelem( elem );
_k1263 = getNextArrayKey( _a1263, _k1263 );
_k1371 = getNextArrayKey( _a1371, _k1371 );
}
}
while ( isDefined( hudelemlist2 ) )
{
_a1271 = hudelemlist2;
_k1271 = getFirstArrayKey( _a1271 );
while ( isDefined( _k1271 ) )
_a1379 = hudelemlist2;
_k1379 = getFirstArrayKey( _a1379 );
while ( isDefined( _k1379 ) )
{
elem = _a1271[ _k1271 ];
elem = _a1379[ _k1379 ];
destroyhudelem( elem );
_k1271 = getNextArrayKey( _a1271, _k1271 );
_k1379 = getNextArrayKey( _a1379, _k1379 );
}
}
}

View File

@ -571,7 +571,7 @@ createbar( color, width, height, flashfrac )
barelemframe.hidden = 0;
barelembg = newclienthudelem( self );
barelembg.elemtype = "bar";
if ( !self issplitscreen() )
if ( !level.splitscreen )
{
barelembg.x = -2;
barelembg.y = -2;
@ -587,7 +587,7 @@ createbar( color, width, height, flashfrac )
barelembg.color = ( 1, 0, 0 );
barelembg.alpha = 0,5;
barelembg setparent( level.uiparent );
if ( !self issplitscreen() )
if ( !level.splitscreen )
{
barelembg setshader( "progress_bar_bg", width + 4, height + 4 );
}
@ -619,15 +619,13 @@ getcurrentfraction()
createprimaryprogressbar()
{
bar = undefined;
if ( self issplitscreen() )
bar = createbar( ( 1, 0, 0 ), level.primaryprogressbarwidth, level.primaryprogressbarheight );
if ( level.splitscreen )
{
bar = self createbar( ( 1, 0, 0 ), level.primaryprogressbarwidth, level.primaryprogressbarheight_ss );
bar setpoint( "TOP", undefined, level.primaryprogressbarx_ss, level.primaryprogressbary_ss );
bar setpoint( "TOP", undefined, level.primaryprogressbarx, level.primaryprogressbary );
}
else
{
bar = self createbar( ( 1, 0, 0 ), level.primaryprogressbarwidth, level.primaryprogressbarheight );
bar setpoint( "CENTER", undefined, level.primaryprogressbarx, level.primaryprogressbary );
}
return bar;
@ -636,9 +634,9 @@ createprimaryprogressbar()
createprimaryprogressbartext()
{
text = createfontstring( "objective", level.primaryprogressbarfontsize );
if ( self issplitscreen() )
if ( level.splitscreen )
{
text setpoint( "TOP", undefined, level.primaryprogressbartextx_ss, level.primaryprogressbartexty_ss );
text setpoint( "TOP", undefined, level.primaryprogressbartextx, level.primaryprogressbartexty );
}
else
{
@ -653,18 +651,13 @@ createsecondaryprogressbar()
secondaryprogressbarheight = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight );
secondaryprogressbarx = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx );
secondaryprogressbary = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary );
secondaryprogressbarheight_ss = getdvarintdefault( "scr_secondaryProgressBarHeight", level.secondaryprogressbarheight_ss );
secondaryprogressbarx_ss = getdvarintdefault( "scr_secondaryProgressBarX", level.secondaryprogressbarx_ss );
secondaryprogressbary_ss = getdvarintdefault( "scr_secondaryProgressBarY", level.secondaryprogressbary_ss );
bar = undefined;
if ( self issplitscreen() )
bar = createbar( ( 1, 0, 0 ), level.secondaryprogressbarwidth, secondaryprogressbarheight );
if ( level.splitscreen )
{
bar = self createbar( ( 1, 0, 0 ), level.secondaryprogressbarwidth, secondaryprogressbarheight_ss );
bar setpoint( "TOP", undefined, secondaryprogressbarx_ss, secondaryprogressbary_ss );
bar setpoint( "TOP", undefined, secondaryprogressbarx, secondaryprogressbary );
}
else
{
bar = self createbar( ( 1, 0, 0 ), level.secondaryprogressbarwidth, secondaryprogressbarheight );
bar setpoint( "CENTER", undefined, secondaryprogressbarx, secondaryprogressbary );
}
return bar;
@ -674,12 +667,10 @@ createsecondaryprogressbartext()
{
secondaryprogressbartextx = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx );
secondaryprogressbartexty = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty );
secondaryprogressbartextx_ss = getdvarintdefault( "scr_btx", level.secondaryprogressbartextx_ss );
secondaryprogressbartexty_ss = getdvarintdefault( "scr_bty", level.secondaryprogressbartexty_ss );
text = createfontstring( "objective", level.primaryprogressbarfontsize );
if ( self issplitscreen() )
if ( level.splitscreen )
{
text setpoint( "TOP", undefined, secondaryprogressbartextx_ss, secondaryprogressbartexty_ss );
text setpoint( "TOP", undefined, secondaryprogressbartextx, secondaryprogressbartexty );
}
else
{
@ -858,25 +849,15 @@ updatechildren()
}
}
createloadouticon( verindex, horindex, xpos, ypos )
createloadouticon( player, verindex, horindex, xpos, ypos )
{
iconsize = 32;
if ( level.splitscreen )
if ( player issplitscreen() )
{
ypos -= 80 + ( iconsize * ( 3 - verindex ) );
iconsize = 22;
}
else
{
ypos -= 90 + ( iconsize * ( 3 - verindex ) );
}
if ( level.splitscreen )
{
xpos -= 5 + ( iconsize * horindex );
}
else
{
xpos -= 10 + ( iconsize * horindex );
}
icon = createicon( "white", iconsize, iconsize );
icon setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos );
icon.horzalign = "user_right";
@ -886,25 +867,15 @@ createloadouticon( verindex, horindex, xpos, ypos )
return icon;
}
setloadouticoncoords( verindex, horindex, xpos, ypos )
setloadouticoncoords( player, verindex, horindex, xpos, ypos )
{
iconsize = 32;
if ( level.splitscreen )
if ( player issplitscreen() )
{
ypos -= 80 + ( iconsize * ( 3 - verindex ) );
iconsize = 22;
}
else
{
ypos -= 90 + ( iconsize * ( 3 - verindex ) );
}
if ( level.splitscreen )
{
xpos -= 5 + ( iconsize * horindex );
}
else
{
xpos -= 10 + ( iconsize * horindex );
}
self setpoint( "BOTTOM RIGHT", "BOTTOM RIGHT", xpos, ypos );
self.horzalign = "user_right";
self.vertalign = "user_bottom";
@ -974,16 +945,20 @@ hideloadoutattribute( iconelem, fadetime, textelem, hidetextonly )
showperks()
{
ypos = 40;
if ( self issplitscreen() )
{
ypos = 5;
}
if ( !isDefined( self.perkhudelem ) )
{
self.perkhudelem = createloadouticon( 0, 0, 200, ypos );
self.perkhudelem = createloadouticon( self, 0, 0, 200, ypos );
}
else
{
self.perkhudelem setloadouticoncoords( 0, 0, 200, ypos );
self.perkhudelem setloadouticoncoords( self, 0, 0, 200, ypos );
}
self.perkhudelem setperks( self );
self.perkhudelem.x = -10;
self.perkhudelem.x = -20;
self.perkhudelem.alpha = 0;
self.perkhudelem fadeovertime( 0,4 );
self.perkhudelem.alpha = 1;
@ -1005,12 +980,12 @@ showperk( index, perk, ypos )
/#
assert( !isDefined( self.perkname[ index ] ) );
#/
self.perkicon[ index ] = createloadouticon( index, 0, 200, ypos );
self.perkicon[ index ] = createloadouticon( self, index, 0, 200, ypos );
self.perkname[ index ] = createloadouttext( self.perkicon[ index ], 160 );
}
else
{
self.perkicon[ index ] setloadouticoncoords( index, 0, 200, ypos );
self.perkicon[ index ] setloadouticoncoords( self, index, 0, 200, ypos );
self.perkname[ index ] setloadouttextcoords( 160 );
}
if ( perk != "perk_null" || perk == "weapon_null" && perk == "specialty_null" )
@ -1107,7 +1082,7 @@ showkillstreak( index, killstreak, xpos, ypos )
}
if ( !isDefined( self.killstreakicon[ index ] ) )
{
self.killstreakicon[ index ] = createloadouticon( 3, ( self.killstreak.size - 1 ) - index, xpos, ypos );
self.killstreakicon[ index ] = createloadouticon( self, 3, ( self.killstreak.size - 1 ) - index, xpos, ypos );
}
if ( killstreak == "killstreak_null" || killstreak == "weapon_null" )
{
@ -1143,7 +1118,7 @@ hidekillstreak( index, fadetime )
setgamemodeinfopoint()
{
self.x = 5;
self.x = 11;
self.y = 120;
self.horzalign = "user_left";
self.vertalign = "user_top";

View File

@ -1,5 +1,5 @@
#include maps/mp/gametypes_zm/_rank;
#include maps/mp/gametypes_zm/_globallogic;
#include maps/mp/gametypes/_rank;
#include maps/mp/gametypes/_globallogic;
#include maps/mp/_utility;
init()
@ -97,26 +97,27 @@ onmenuresponse()
}
if ( response == "endgame" )
{
if ( self issplitscreen() )
if ( level.splitscreen )
{
level.skipvote = 1;
if ( !level.gameended )
{
level thread maps/mp/gametypes_zm/_globallogic::forceend();
level thread maps/mp/gametypes/_globallogic::forceend();
}
}
continue;
}
else if ( response == "killserverpc" )
{
level thread maps/mp/gametypes_zm/_globallogic::killserverpc();
level thread maps/mp/gametypes/_globallogic::killserverpc();
continue;
}
else if ( response == "endround" )
{
if ( !level.gameended )
{
level thread maps/mp/gametypes_zm/_globallogic::forceend();
self gamehistoryplayerquit();
level thread maps/mp/gametypes/_globallogic::forceend();
}
else
{
@ -150,7 +151,7 @@ onmenuresponse()
self closeingamemenu();
if ( level.rankedmatch && issubstr( response, "custom" ) )
{
if ( self isitemlocked( maps/mp/gametypes_zm/_rank::getitemindex( "feature_cac" ) ) )
if ( self isitemlocked( maps/mp/gametypes/_rank::getitemindex( "feature_cac" ) ) )
{
kick( self getentitynumber() );
}

View File

@ -1,13 +1,6 @@
init()
{
setdvar( "g_ScoresColor_Spectator", ".25 .25 .25" );
setdvar( "g_ScoresColor_Free", ".76 .78 .10" );
setdvar( "g_teamColor_MyTeam", ".4 .7 .4" );
setdvar( "g_teamColor_EnemyTeam", "1 .315 0.35" );
setdvar( "g_teamColor_MyTeamAlt", ".35 1 1" );
setdvar( "g_teamColor_EnemyTeamAlt", "1 .5 0" );
setdvar( "g_teamColor_Squad", ".315 0.35 1" );
if ( level.createfx_enabled )
{
return;

View File

@ -11,7 +11,11 @@ init()
shellshockondamage( cause, damage )
{
if ( cause != "MOD_EXPLOSIVE" && cause != "MOD_GRENADE" && cause != "MOD_GRENADE_SPLASH" || cause == "MOD_PROJECTILE" && cause == "MOD_PROJECTILE_SPLASH" )
if ( self maps/mp/_utility::isflashbanged() )
{
return;
}
if ( cause == "MOD_EXPLOSIVE" || cause == "MOD_GRENADE" || cause == "MOD_GRENADE_SPLASH" || cause == "MOD_PROJECTILE" || cause == "MOD_PROJECTILE_SPLASH" )
{
time = 0;
if ( damage >= 90 )
@ -26,13 +30,10 @@ shellshockondamage( cause, damage )
{
time = 2;
}
else
{
if ( damage > 10 )
{
time = 2;
}
}
if ( time )
{
if ( self mayapplyscreeneffect() )
@ -62,4 +63,3 @@ rcbomb_earthquake( position )
playrumbleonposition( "grenade_rumble", position );
earthquake( 0.5, 0.5, self.origin, 512 );
}

View File

@ -1,4 +1,7 @@
#include maps/mp/gametypes_zm/_spawnlogic;
#include maps/mp/gametypes/_spawnlogic;
#include maps/mp/gametypes/_callbacksetup;
#include maps/mp/_tacticalinsertion;
#include maps/mp/killstreaks/_airsupport;
#include common_scripts/utility;
#include maps/mp/_utility;
@ -102,9 +105,9 @@ onplayerspawned()
for ( ;; )
{
self waittill( "spawned_player" );
self thread initialspawnprotection( "specialty_nottargetedbyairsupport", 1 );
self thread initialspawnprotection( "specialty_nokillstreakreticle", 0 );
self thread initialspawnprotection( "specialty_nottargettedbysentry", 0 );
self maps/mp/killstreaks/_airsupport::clearmonitoredspeed();
self thread initialspawnprotection();
self thread monitorgpsjammer();
if ( isDefined( self.pers[ "hasRadar" ] ) && self.pers[ "hasRadar" ] )
{
self.hasspyplane = 1;
@ -114,6 +117,108 @@ onplayerspawned()
}
}
monitorgpsjammer()
{
self endon( "death" );
self endon( "disconnect" );
if ( self hasperk( "specialty_gpsjammer" ) == 0 )
{
return;
}
self gpsjammeractive();
graceperiods = getdvarintdefault( "perk_gpsjammer_graceperiods", 4 );
minspeed = getdvarintdefault( "perk_gpsjammer_min_speed", 100 );
mindistance = getdvarintdefault( "perk_gpsjammer_min_distance", 10 );
timeperiod = getdvarintdefault( "perk_gpsjammer_time_period", 200 );
timeperiodsec = timeperiod / 1000;
minspeedsq = minspeed * minspeed;
mindistancesq = mindistance * mindistance;
if ( minspeedsq == 0 )
{
return;
}
/#
assert( timeperiodsec >= 0,05 );
#/
if ( timeperiodsec < 0,05 )
{
return;
}
hasperk = 1;
statechange = 0;
faileddistancecheck = 0;
currentfailcount = 0;
timepassed = 0;
timesincedistancecheck = 0;
previousorigin = self.origin;
gpsjammerprotection = 0;
while ( 1 )
{
/#
graceperiods = getdvarintdefault( "perk_gpsjammer_graceperiods", graceperiods );
minspeed = getdvarintdefault( "perk_gpsjammer_min_speed", minspeed );
mindistance = getdvarintdefault( "perk_gpsjammer_min_distance", mindistance );
timeperiod = getdvarintdefault( "perk_gpsjammer_time_period", timeperiod );
timeperiodsec = timeperiod / 1000;
minspeedsq = minspeed * minspeed;
mindistancesq = mindistance * mindistance;
#/
gpsjammerprotection = 0;
if ( !isusingremote() || is_true( self.isplanting ) && is_true( self.isdefusing ) )
{
gpsjammerprotection = 1;
}
else
{
if ( timesincedistancecheck > 1 )
{
timesincedistancecheck = 0;
if ( distancesquared( previousorigin, self.origin ) < mindistancesq )
{
faileddistancecheck = 1;
}
else
{
faileddistancecheck = 0;
}
previousorigin = self.origin;
}
velocity = self getvelocity();
speedsq = lengthsquared( velocity );
if ( speedsq > minspeedsq && faileddistancecheck == 0 )
{
gpsjammerprotection = 1;
}
}
if ( gpsjammerprotection == 1 )
{
currentfailcount = 0;
if ( hasperk == 0 )
{
statechange = 0;
hasperk = 1;
self gpsjammeractive();
}
}
else
{
currentfailcount++;
if ( hasperk == 1 && currentfailcount >= graceperiods )
{
statechange = 1;
hasperk = 0;
self gpsjammerinactive();
}
}
if ( statechange == 1 )
{
level notify( "radar_status_change" );
}
timesincedistancecheck += timeperiodsec;
wait timeperiodsec;
}
}
ondeath()
{
self endon( "disconnect" );
@ -400,6 +505,21 @@ create_auto_turret_influencer( point, parent_team, angles )
return influencerid;
}
create_auto_turret_influencer_close( point, parent_team, angles )
{
if ( !level.teambased )
{
weapon_team_mask = level.spawnsystem.ispawn_teammask_free;
}
else
{
weapon_team_mask = getotherteamsmask( parent_team );
}
projected_point = point + vectorScale( anglesToForward( angles ), level.spawnsystem.auto_turret_influencer_close_radius * 0,7 );
influencerid = addsphereinfluencer( level.spawnsystem.einfluencer_type_normal, projected_point, level.spawnsystem.auto_turret_influencer_close_radius, level.spawnsystem.auto_turret_influencer_close_score, weapon_team_mask, "auto_turret_close,r,s", get_score_curve_index( level.spawnsystem.auto_turret_influencer_close_score_curve ) );
return influencerid;
}
create_dog_influencers()
{
if ( !level.teambased )
@ -629,38 +749,38 @@ create_enemy_spawned_influencers( origin, team )
{
other_team_mask = getotherteamsmask( team );
}
return addsphereinfluencer( level.spawnsystem.einfluencer_type_enemy_spawned, origin, level.spawnsystem.enemy_spawned_influencer_radius, level.spawnsystem.enemy_spawned_influencer_score, other_team_mask, "enemy_spawned,r,s", get_score_curve_index( level.spawnsystem.enemy_spawned_influencer_score_curve ), 7 );
return addsphereinfluencer( level.spawnsystem.einfluencer_type_enemy_spawned, origin, level.spawnsystem.enemy_spawned_influencer_radius, level.spawnsystem.enemy_spawned_influencer_score, other_team_mask, "enemy_spawned,r,s", get_score_curve_index( level.spawnsystem.enemy_spawned_influencer_score_curve ), level.spawnsystem.enemy_spawned_influencer_timeout_seconds );
}
updateallspawnpoints()
{
_a1046 = level.teams;
_k1046 = getFirstArrayKey( _a1046 );
while ( isDefined( _k1046 ) )
_a1176 = level.teams;
_k1176 = getFirstArrayKey( _a1176 );
while ( isDefined( _k1176 ) )
{
team = _a1046[ _k1046 ];
team = _a1176[ _k1176 ];
gatherspawnentities( team );
_k1046 = getNextArrayKey( _a1046, _k1046 );
_k1176 = getNextArrayKey( _a1176, _k1176 );
}
clearspawnpoints();
if ( level.teambased )
{
_a1055 = level.teams;
_k1055 = getFirstArrayKey( _a1055 );
while ( isDefined( _k1055 ) )
_a1185 = level.teams;
_k1185 = getFirstArrayKey( _a1185 );
while ( isDefined( _k1185 ) )
{
team = _a1055[ _k1055 ];
team = _a1185[ _k1185 ];
addspawnpoints( team, level.unified_spawn_points[ team ].a );
_k1055 = getNextArrayKey( _a1055, _k1055 );
_k1185 = getNextArrayKey( _a1185, _k1185 );
}
}
else _a1062 = level.teams;
_k1062 = getFirstArrayKey( _a1062 );
while ( isDefined( _k1062 ) )
else _a1192 = level.teams;
_k1192 = getFirstArrayKey( _a1192 );
while ( isDefined( _k1192 ) )
{
team = _a1062[ _k1062 ];
team = _a1192[ _k1192 ];
addspawnpoints( "free", level.unified_spawn_points[ team ].a );
_k1062 = getNextArrayKey( _a1062, _k1062 );
_k1192 = getNextArrayKey( _a1192, _k1192 );
}
remove_unused_spawn_entities();
}
@ -688,15 +808,24 @@ get_player_spawning_dvars( reset_dvars )
dog_influencer_radius = 10 * k_player_height;
dog_influencer_score = 150;
ss.script_based_influencer_system = set_dvar_int_if_unset( "scr_script_based_influencer_system", "0", reset_dvars );
ss.randomness_range = set_dvar_float_if_unset( "scr_spawn_randomness_range", "10", reset_dvars );
ss.objective_facing_bonus = set_dvar_float_if_unset( "scr_spawn_objective_facing_bonus", "50", reset_dvars );
ss.friend_weak_influencer_score = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_score", "10", reset_dvars );
ss.friend_weak_influencer_score_curve = set_dvar_if_unset( "scr_spawn_friend_weak_influencer_score_curve", "steep", reset_dvars );
ss.friend_weak_influencer_radius = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_radius", player_height_times_10, reset_dvars );
ss.randomness_range = set_dvar_float_if_unset( "scr_spawn_randomness_range", "0", reset_dvars );
ss.objective_facing_bonus = set_dvar_float_if_unset( "scr_spawn_objective_facing_bonus", "0", reset_dvars );
if ( level.multiteam )
{
ss.friend_weak_influencer_score = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_score", "200", reset_dvars );
ss.friend_weak_influencer_score_curve = set_dvar_if_unset( "scr_spawn_friend_weak_influencer_score_curve", "linear", reset_dvars );
ss.friend_weak_influencer_radius = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_radius", "1200", reset_dvars );
}
else
{
ss.friend_weak_influencer_score = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_score", "20", reset_dvars );
ss.friend_weak_influencer_score_curve = set_dvar_if_unset( "scr_spawn_friend_weak_influencer_score_curve", "linear", reset_dvars );
ss.friend_weak_influencer_radius = set_dvar_float_if_unset( "scr_spawn_friend_weak_influencer_radius", "700", reset_dvars );
}
ss.enemy_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_score", "-150", reset_dvars );
ss.enemy_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_influencer_score_curve", "steep", reset_dvars );
ss.enemy_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_influencer_score_curve", "linear", reset_dvars );
ss.enemy_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_influencer_radius", "2600", reset_dvars );
ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "15", reset_dvars );
ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_timeout_seconds", "20", reset_dvars );
ss.dead_friend_influencer_count = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_count", "7", reset_dvars );
ss.dead_friend_influencer_score = set_dvar_float_if_unset( "scr_spawn_dead_friend_influencer_score", "-100", reset_dvars );
ss.dead_friend_influencer_score_curve = set_dvar_if_unset( "scr_spawn_dead_friend_influencer_score_curve", "steep", reset_dvars );
@ -725,6 +854,9 @@ get_player_spawning_dvars( reset_dvars )
ss.auto_turret_influencer_score = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_score", "-650", reset_dvars );
ss.auto_turret_influencer_score_curve = set_dvar_if_unset( "scr_spawn_auto_turret_influencer_score_curve", "linear", reset_dvars );
ss.auto_turret_influencer_radius = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_radius", "" + 1200, reset_dvars );
ss.auto_turret_influencer_close_score = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_close_score", "-250000", reset_dvars );
ss.auto_turret_influencer_close_score_curve = set_dvar_if_unset( "scr_spawn_auto_turret_influencer_close_score_curve", "constant", reset_dvars );
ss.auto_turret_influencer_close_radius = set_dvar_float_if_unset( "scr_spawn_auto_turret_influencer_close_radius", "" + 500, reset_dvars );
ss.rcbomb_influencer_score = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_score", "-200", reset_dvars );
ss.rcbomb_influencer_score_curve = set_dvar_if_unset( "scr_spawn_rcbomb_influencer_score_curve", "steep", reset_dvars );
ss.rcbomb_influencer_radius = set_dvar_float_if_unset( "scr_spawn_rcbomb_influencer_radius", "" + ( 25 * k_player_height ), reset_dvars );
@ -739,16 +871,22 @@ get_player_spawning_dvars( reset_dvars )
ss.aitank_influencer_score_curve = set_dvar_if_unset( "scr_spawn_aitank_influencer_score_curve", "linear", reset_dvars );
ss.aitank_influencer_radius = set_dvar_float_if_unset( "scr_spawn_aitank_influencer_radius", "" + ( 25 * k_player_height ), reset_dvars );
ss.enemy_spawned_influencer_score_curve = set_dvar_if_unset( "scr_spawn_enemy_spawned_influencer_score_curve", "constant", reset_dvars );
if ( level.teambased )
if ( level.multiteam )
{
ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-200", reset_dvars );
ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-400", reset_dvars );
ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1100, reset_dvars );
}
else if ( level.teambased )
{
ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-400", reset_dvars );
ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1100, reset_dvars );
}
else
{
ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-100", reset_dvars );
ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 400, reset_dvars );
ss.enemy_spawned_influencer_score = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_score", "-400", reset_dvars );
ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_radius", "" + 1000, reset_dvars );
}
ss.enemy_spawned_influencer_timeout_seconds = set_dvar_float_if_unset( "scr_spawn_enemy_spawned_influencer_timeout_seconds", "7", reset_dvars );
ss.helicopter_influencer_score = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_score", "-500", reset_dvars );
ss.helicopter_influencer_score_curve = set_dvar_if_unset( "scr_spawn_helicopter_influencer_score_curve", "linear", reset_dvars );
ss.helicopter_influencer_radius = set_dvar_float_if_unset( "scr_spawn_helicopter_influencer_radius", "" + 2000, reset_dvars );
@ -764,7 +902,6 @@ get_player_spawning_dvars( reset_dvars )
{
ss.unifiedsideswitching = 1;
}
set_dvar_int_if_unset( "spawnsystem_allow_non_team_spawns", "0", reset_dvars );
[[ level.gamemodespawndvars ]]( reset_dvars );
if ( isDefined( level.levelspawndvars ) )
{
@ -791,7 +928,7 @@ onspawnplayer_unified( predictedspawn )
return;
#/
}
use_new_spawn_system = 0;
use_new_spawn_system = 1;
initial_spawn = 1;
if ( isDefined( self.uspawn_already_spawned ) )
{
@ -806,7 +943,52 @@ onspawnplayer_unified( predictedspawn )
use_new_spawn_system = 0;
}
set_dvar_if_unset( "scr_spawn_force_unified", "0" );
spawnoverride = self maps/mp/_tacticalinsertion::overridespawn( predictedspawn );
if ( use_new_spawn_system || getDvarInt( #"0BD11226" ) != 0 )
{
if ( !spawnoverride )
{
spawn_point = getspawnpoint( self, predictedspawn );
if ( isDefined( spawn_point ) )
{
if ( predictedspawn )
{
self predictspawnpoint( spawn_point.origin, spawn_point.angles );
}
else
{
create_enemy_spawned_influencers( spawn_point.origin, self.pers[ "team" ] );
self spawn( spawn_point.origin, spawn_point.angles );
}
}
else
{
/#
println( "ERROR: unable to locate a usable spawn point for player" );
#/
maps/mp/gametypes/_callbacksetup::abortlevel();
}
}
else
{
if ( predictedspawn && isDefined( self.tacticalinsertion ) )
{
self predictspawnpoint( self.tacticalinsertion.origin, self.tacticalinsertion.angles );
}
}
if ( !predictedspawn )
{
self.lastspawntime = getTime();
self enable_player_influencers( 1 );
}
}
else
{
if ( !spawnoverride )
{
[[ level.onspawnplayer ]]( predictedspawn );
}
}
if ( !predictedspawn )
{
self.uspawn_already_spawned = 1;
@ -857,31 +1039,31 @@ get_debug_spawnpoint( player )
if ( team == "free" )
{
spawn_counts = 0;
_a1409 = level.teams;
_k1409 = getFirstArrayKey( _a1409 );
while ( isDefined( _k1409 ) )
_a1556 = level.teams;
_k1556 = getFirstArrayKey( _a1556 );
while ( isDefined( _k1556 ) )
{
team = _a1409[ _k1409 ];
team = _a1556[ _k1556 ];
spawn_counts += level.unified_spawn_points[ team ].a.size;
_k1409 = getNextArrayKey( _a1409, _k1409 );
_k1556 = getNextArrayKey( _a1556, _k1556 );
}
if ( level.test_spawn_point_index >= spawn_counts )
{
level.test_spawn_point_index = 0;
}
count = 0;
_a1420 = level.teams;
_k1420 = getFirstArrayKey( _a1420 );
while ( isDefined( _k1420 ) )
_a1567 = level.teams;
_k1567 = getFirstArrayKey( _a1567 );
while ( isDefined( _k1567 ) )
{
team = _a1420[ _k1420 ];
team = _a1567[ _k1567 ];
size = level.unified_spawn_points[ team ].a.size;
if ( level.test_spawn_point_index < ( count + size ) )
{
return level.unified_spawn_points[ team ].a[ level.test_spawn_point_index - count ];
}
count += size;
_k1420 = getNextArrayKey( _a1420, _k1420 );
_k1567 = getNextArrayKey( _a1567, _k1567 );
}
}
else if ( level.test_spawn_point_index >= level.unified_spawn_points[ team ].a.size )
@ -934,7 +1116,7 @@ gatherspawnentities( player_team )
{
spawn_entities_s.a = [];
}
legacy_spawn_points = maps/mp/gametypes_zm/_spawnlogic::getteamspawnpoints( player_team );
legacy_spawn_points = maps/mp/gametypes/_spawnlogic::getteamspawnpoints( player_team );
legacy_spawn_index = 0;
while ( legacy_spawn_index < legacy_spawn_points.size )
{
@ -971,6 +1153,12 @@ remove_unused_spawn_entities()
spawn_entity_types[ spawn_entity_types.size ] = "mp_dm_spawn";
spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_allies_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_axis_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_team1_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_team2_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_team3_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_team4_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_team5_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn_team6_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_tdm_spawn";
spawn_entity_types[ spawn_entity_types.size ] = "mp_ctf_spawn_allies_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_ctf_spawn_axis_start";
@ -978,6 +1166,9 @@ remove_unused_spawn_entities()
spawn_entity_types[ spawn_entity_types.size ] = "mp_ctf_spawn_axis";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn_allies_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn_axis_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn_flag_a";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn_flag_b";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn_flag_c";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dom_spawn";
spawn_entity_types[ spawn_entity_types.size ] = "mp_sab_spawn_allies_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_sab_spawn_axis_start";
@ -985,6 +1176,12 @@ remove_unused_spawn_entities()
spawn_entity_types[ spawn_entity_types.size ] = "mp_sab_spawn_axis";
spawn_entity_types[ spawn_entity_types.size ] = "mp_sd_spawn_attacker";
spawn_entity_types[ spawn_entity_types.size ] = "mp_sd_spawn_defender";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dem_spawn_attacker_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dem_spawn_defender_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dem_spawn_attackerOT_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dem_spawn_defenderOT_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dem_spawn_attacker";
spawn_entity_types[ spawn_entity_types.size ] = "mp_dem_spawn_defender";
spawn_entity_types[ spawn_entity_types.size ] = "mp_twar_spawn_axis_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_twar_spawn_allies_start";
spawn_entity_types[ spawn_entity_types.size ] = "mp_twar_spawn";
@ -998,7 +1195,7 @@ remove_unused_spawn_entities()
}
else
{
spawnpoints = maps/mp/gametypes_zm/_spawnlogic::getspawnpointarray( spawn_entity_types[ i ] );
spawnpoints = maps/mp/gametypes/_spawnlogic::getspawnpointarray( spawn_entity_types[ i ] );
delete_all_spawns( spawnpoints );
}
i++;
@ -1035,39 +1232,65 @@ spawn_point_class_name_being_used( name )
codecallback_updatespawnpoints()
{
_a1624 = level.teams;
_k1624 = getFirstArrayKey( _a1624 );
while ( isDefined( _k1624 ) )
_a1788 = level.teams;
_k1788 = getFirstArrayKey( _a1788 );
while ( isDefined( _k1788 ) )
{
team = _a1624[ _k1624 ];
maps/mp/gametypes_zm/_spawnlogic::rebuildspawnpoints( team );
_k1624 = getNextArrayKey( _a1624, _k1624 );
team = _a1788[ _k1788 ];
maps/mp/gametypes/_spawnlogic::rebuildspawnpoints( team );
_k1788 = getNextArrayKey( _a1788, _k1788 );
}
level.unified_spawn_points = undefined;
updateallspawnpoints();
}
initialspawnprotection( specialtyname, spawnmonitorspeed )
initialspawnprotection()
{
self endon( "death" );
self endon( "disconnect" );
self thread maps/mp/killstreaks/_airsupport::monitorspeed( level.spawnprotectiontime );
if ( !isDefined( level.spawnprotectiontime ) || level.spawnprotectiontime == 0 )
{
return;
}
if ( specialtyname == "specialty_nottargetedbyairsupport" )
{
self.specialty_nottargetedbyairsupport = 1;
self spawnprotectionactive();
wait level.spawnprotectiontime;
self spawnprotectioninactive();
self.specialty_nottargetedbyairsupport = undefined;
}
getteamstartspawnname( team, spawnpointnamebase )
{
spawn_point_team_name = team;
if ( !level.multiteam && game[ "switchedsides" ] )
{
spawn_point_team_name = getotherteam( team );
}
if ( level.multiteam )
{
if ( team == "axis" )
{
spawn_point_team_name = "team1";
}
else
{
if ( !self hasperk( specialtyname ) )
if ( team == "allies" )
{
self setperk( specialtyname );
wait level.spawnprotectiontime;
self unsetperk( specialtyname );
spawn_point_team_name = "team2";
}
}
if ( !isoneround() )
{
number = int( getsubstr( spawn_point_team_name, 4, 5 ) ) - 1;
number = ( ( number + game[ "roundsplayed" ] ) % level.teams.size ) + 1;
spawn_point_team_name = "team" + number;
}
}
return ( spawnpointnamebase + "_" ) + spawn_point_team_name + "_start";
}
gettdmstartspawnname( team )
{
return getteamstartspawnname( team, "mp_tdm_spawn" );
}

View File

@ -1,6 +1,6 @@
#include maps/mp/gametypes_zm/_spawnlogic;
#include maps/mp/gametypes_zm/_gameobjects;
#include maps/mp/gametypes_zm/_callbacksetup;
#include maps/mp/gametypes/_spawnlogic;
#include maps/mp/gametypes/_gameobjects;
#include maps/mp/gametypes/_callbacksetup;
#include maps/mp/_utility;
#include common_scripts/utility;
@ -91,7 +91,7 @@ addspawnpointsinternal( team, spawnpointname )
/#
println( "^1ERROR: No " + spawnpointname + " spawnpoints found in level!" );
#/
maps/mp/gametypes_zm/_callbacksetup::abortlevel();
maps/mp/gametypes/_callbacksetup::abortlevel();
wait 1;
return;
}
@ -144,7 +144,7 @@ placespawnpoints( spawnpointname )
/#
println( "^1No " + spawnpointname + " spawnpoints found in level!" );
#/
maps/mp/gametypes_zm/_callbacksetup::abortlevel();
maps/mp/gametypes/_callbacksetup::abortlevel();
wait 1;
return;
}
@ -564,7 +564,7 @@ storespawndata( spawnpoints, useweights, bestspawnpoint )
index = otherdata.size;
otherdata[ index ] = spawnstruct();
otherdata[ index ].origin = level.flags[ i ].origin;
otherdata[ index ].text = level.flags[ i ].useobj maps/mp/gametypes_zm/_gameobjects::getownerteam() + " flag";
otherdata[ index ].text = level.flags[ i ].useobj maps/mp/gametypes/_gameobjects::getownerteam() + " flag";
i++;
}
}
@ -923,20 +923,9 @@ getallotherplayers()
continue;
}
else
{
if ( isDefined( level.customalivecheck ) )
{
if ( !( [[ level.customalivecheck ]]( player ) ) )
{
i++;
continue;
}
}
else
{
aliveplayers[ aliveplayers.size ] = player;
}
}
i++;
}
return aliveplayers;
@ -949,44 +938,32 @@ getallalliedandenemyplayers( obj )
/#
assert( isDefined( level.teams[ self.team ] ) );
#/
obj.allies = [];
obj.enemies = [];
i = 0;
while ( i < level.players.size )
obj.allies = level.aliveplayers[ self.team ];
obj.enemies = undefined;
_a833 = level.teams;
_k833 = getFirstArrayKey( _a833 );
while ( isDefined( _k833 ) )
{
if ( !isDefined( level.players[ i ] ) )
team = _a833[ _k833 ];
if ( team == self.team )
{
i++;
continue;
}
else player = level.players[ i ];
if ( player.sessionstate != "playing" || player == self )
else if ( !isDefined( obj.enemies ) )
{
i++;
continue;
obj.enemies = level.aliveplayers[ team ];
}
else
{
if ( isDefined( level.customalivecheck ) )
{
if ( !( [[ level.customalivecheck ]]( player ) ) )
{
i++;
continue;
}
}
else if ( player.team == self.team )
{
obj.allies[ obj.allies.size ] = player;
i++;
continue;
}
else
_a844 = level.aliveplayers[ team ];
_k844 = getFirstArrayKey( _a844 );
while ( isDefined( _k844 ) )
{
player = _a844[ _k844 ];
obj.enemies[ obj.enemies.size ] = player;
_k844 = getNextArrayKey( _a844, _k844 );
}
}
i++;
_k833 = getNextArrayKey( _a833, _k833 );
}
}
else obj.allies = [];
@ -1015,57 +992,7 @@ initweights( spawnpoints )
}
}
spawnpointupdate_zm( spawnpoint )
{
_a906 = level.teams;
_k906 = getFirstArrayKey( _a906 );
while ( isDefined( _k906 ) )
{
team = _a906[ _k906 ];
spawnpoint.distsum[ team ] = 0;
spawnpoint.enemydistsum[ team ] = 0;
_k906 = getNextArrayKey( _a906, _k906 );
}
players = get_players();
spawnpoint.numplayersatlastupdate = players.size;
_a913 = players;
_k913 = getFirstArrayKey( _a913 );
while ( isDefined( _k913 ) )
{
player = _a913[ _k913 ];
if ( !isDefined( player ) )
{
}
else if ( player.sessionstate != "playing" )
{
}
else if ( isDefined( level.customalivecheck ) )
{
if ( !( [[ level.customalivecheck ]]( player ) ) )
{
}
}
else
{
dist = distance( spawnpoint.origin, player.origin );
spawnpoint.distsum[ player.team ] += dist;
_a924 = level.teams;
_k924 = getFirstArrayKey( _a924 );
while ( isDefined( _k924 ) )
{
team = _a924[ _k924 ];
if ( team != player.team )
{
spawnpoint.enemydistsum[ team ] += dist;
}
_k924 = getNextArrayKey( _a924, _k924 );
}
}
_k913 = getNextArrayKey( _a913, _k913 );
}
}
getspawnpoint_nearteam( spawnpoints, favoredspawnpoints, forceallydistanceweight, forceenemydistanceweight )
getspawnpoint_nearteam( spawnpoints, favoredspawnpoints )
{
if ( !isDefined( spawnpoints ) )
{
@ -1092,21 +1019,11 @@ getspawnpoint_nearteam( spawnpoints, favoredspawnpoints, forceallydistanceweight
getallalliedandenemyplayers( obj );
numplayers = obj.allies.size + obj.enemies.size;
allieddistanceweight = 2;
if ( isDefined( forceallydistanceweight ) )
{
allieddistanceweight = forceallydistanceweight;
}
enemydistanceweight = 1;
if ( isDefined( forceenemydistanceweight ) )
{
enemydistanceweight = forceenemydistanceweight;
}
myteam = self.team;
i = 0;
while ( i < spawnpoints.size )
{
spawnpoint = spawnpoints[ i ];
spawnpointupdate_zm( spawnpoint );
if ( !isDefined( spawnpoint.numplayersatlastupdate ) )
{
spawnpoint.numplayersatlastupdate = 0;
@ -1115,11 +1032,11 @@ getspawnpoint_nearteam( spawnpoints, favoredspawnpoints, forceallydistanceweight
{
allydistsum = spawnpoint.distsum[ myteam ];
enemydistsum = spawnpoint.enemydistsum[ myteam ];
spawnpoint.weight = ( ( enemydistanceweight * enemydistsum ) - ( allieddistanceweight * allydistsum ) ) / spawnpoint.numplayersatlastupdate;
spawnpoint.weight = ( enemydistsum - ( allieddistanceweight * allydistsum ) ) / spawnpoint.numplayersatlastupdate;
/#
if ( level.storespawndata || level.debugspawning )
{
spawnpoint.spawndata[ spawnpoint.spawndata.size ] = "Base weight: " + int( spawnpoint.weight ) + " = (" + enemydistanceweight + "*" + int( enemydistsum ) + " - " + allieddistanceweight + "*" + int( allydistsum ) + ") / " + spawnpoint.numplayersatlastupdate;
spawnpoint.spawndata[ spawnpoint.spawndata.size ] = "Base weight: " + int( spawnpoint.weight ) + " = (" + int( enemydistsum ) + " - " + allieddistanceweight + "*" + int( allydistsum ) + ") / " + spawnpoint.numplayersatlastupdate;
#/
}
i++;
@ -1216,76 +1133,6 @@ getspawnpoint_dm( spawnpoints )
return getspawnpoint_final( spawnpoints );
}
getspawnpoint_turned( spawnpoints, idealdist, baddist, idealdistteam, baddistteam )
{
if ( !isDefined( spawnpoints ) )
{
return undefined;
}
spawnlogic_begin();
initweights( spawnpoints );
aliveplayers = getallotherplayers();
if ( !isDefined( idealdist ) )
{
idealdist = 1600;
}
if ( !isDefined( idealdistteam ) )
{
idealdistteam = 1200;
}
if ( !isDefined( baddist ) )
{
baddist = 1200;
}
if ( !isDefined( baddistteam ) )
{
baddistteam = 600;
}
myteam = self.team;
while ( aliveplayers.size > 0 )
{
i = 0;
while ( i < spawnpoints.size )
{
totaldistfromideal = 0;
nearbybadamount = 0;
j = 0;
while ( j < aliveplayers.size )
{
dist = distance( spawnpoints[ i ].origin, aliveplayers[ j ].origin );
distfromideal = 0;
if ( aliveplayers[ j ].team == myteam )
{
if ( dist < baddistteam )
{
nearbybadamount += ( baddistteam - dist ) / baddistteam;
}
distfromideal = abs( dist - idealdistteam );
}
else
{
if ( dist < baddist )
{
nearbybadamount += ( baddist - dist ) / baddist;
}
distfromideal = abs( dist - idealdist );
}
totaldistfromideal += distfromideal;
j++;
}
avgdistfromideal = totaldistfromideal / aliveplayers.size;
welldistancedamount = ( idealdist - avgdistfromideal ) / idealdist;
spawnpoints[ i ].weight = ( welldistancedamount - ( nearbybadamount * 2 ) ) + randomfloat( 0,2 );
i++;
}
}
avoidsamespawn( spawnpoints );
avoidspawnreuse( spawnpoints, 0 );
avoidweapondamage( spawnpoints );
avoidvisibleenemies( spawnpoints, 0 );
return getspawnpoint_final( spawnpoints );
}
spawnlogic_begin()
{
/#
@ -2039,11 +1886,11 @@ spawnperframeupdate()
getnonteamsum( skip_team, sums )
{
value = 0;
_a1986 = level.teams;
_k1986 = getFirstArrayKey( _a1986 );
while ( isDefined( _k1986 ) )
_a1836 = level.teams;
_k1836 = getFirstArrayKey( _a1836 );
while ( isDefined( _k1836 ) )
{
team = _a1986[ _k1986 ];
team = _a1836[ _k1836 ];
if ( team == skip_team )
{
}
@ -2051,7 +1898,7 @@ getnonteamsum( skip_team, sums )
{
value += sums[ team ];
}
_k1986 = getNextArrayKey( _a1986, _k1986 );
_k1836 = getNextArrayKey( _a1836, _k1836 );
}
return value;
}
@ -2059,11 +1906,11 @@ getnonteamsum( skip_team, sums )
getnonteammindist( skip_team, mindists )
{
dist = 9999999;
_a2000 = level.teams;
_k2000 = getFirstArrayKey( _a2000 );
while ( isDefined( _k2000 ) )
_a1850 = level.teams;
_k1850 = getFirstArrayKey( _a1850 );
while ( isDefined( _k1850 ) )
{
team = _a2000[ _k2000 ];
team = _a1850[ _k1850 ];
if ( team == skip_team )
{
}
@ -2074,7 +1921,7 @@ getnonteammindist( skip_team, mindists )
dist = mindists[ team ];
}
}
_k2000 = getNextArrayKey( _a2000, _k2000 );
_k1850 = getNextArrayKey( _a1850, _k1850 );
}
return dist;
}
@ -2084,15 +1931,15 @@ spawnpointupdate( spawnpoint )
if ( level.teambased )
{
sights = [];
_a2018 = level.teams;
_k2018 = getFirstArrayKey( _a2018 );
while ( isDefined( _k2018 ) )
_a1868 = level.teams;
_k1868 = getFirstArrayKey( _a1868 );
while ( isDefined( _k1868 ) )
{
team = _a2018[ _k2018 ];
team = _a1868[ _k1868 ];
spawnpoint.enemysights[ team ] = 0;
sights[ team ] = 0;
spawnpoint.nearbyplayers[ team ] = [];
_k2018 = getNextArrayKey( _a2018, _k2018 );
_k1868 = getNextArrayKey( _a1868, _k1868 );
}
}
else spawnpoint.enemysights = 0;
@ -2108,16 +1955,16 @@ spawnpointupdate( spawnpoint )
{
mindist[ "all" ] = 9999999;
}
_a2047 = level.teams;
_k2047 = getFirstArrayKey( _a2047 );
while ( isDefined( _k2047 ) )
_a1897 = level.teams;
_k1897 = getFirstArrayKey( _a1897 );
while ( isDefined( _k1897 ) )
{
team = _a2047[ _k2047 ];
team = _a1897[ _k1897 ];
spawnpoint.distsum[ team ] = 0;
spawnpoint.enemydistsum[ team ] = 0;
spawnpoint.minenemydist[ team ] = 9999999;
mindist[ team ] = 9999999;
_k2047 = getNextArrayKey( _a2047, _k2047 );
_k1897 = getNextArrayKey( _a1897, _k1897 );
}
spawnpoint.numplayersatlastupdate = 0;
i = 0;
@ -2179,16 +2026,16 @@ spawnpointupdate( spawnpoint )
}
if ( level.teambased )
{
_a2128 = level.teams;
_k2128 = getFirstArrayKey( _a2128 );
while ( isDefined( _k2128 ) )
_a1978 = level.teams;
_k1978 = getFirstArrayKey( _a1978 );
while ( isDefined( _k1978 ) )
{
team = _a2128[ _k2128 ];
team = _a1978[ _k1978 ];
spawnpoint.enemysights[ team ] = getnonteamsum( team, sights );
spawnpoint.minenemydist[ team ] = getnonteammindist( team, mindist );
spawnpoint.distsum[ team ] = distsum[ team ];
spawnpoint.enemydistsum[ team ] = getnonteamsum( team, distsum );
_k2128 = getNextArrayKey( _a2128, _k2128 );
_k1978 = getNextArrayKey( _a1978, _k1978 );
}
}
else spawnpoint.distsum[ "all" ] = distsum[ "all" ];
@ -2215,11 +2062,11 @@ lastminutesighttraces( spawnpoint )
closestdistsq = undefined;
secondclosest = undefined;
secondclosestdistsq = undefined;
_a2162 = spawnpoint.nearbyplayers;
_k2162 = getFirstArrayKey( _a2162 );
while ( isDefined( _k2162 ) )
_a2012 = spawnpoint.nearbyplayers;
_k2012 = getFirstArrayKey( _a2012 );
while ( isDefined( _k2012 ) )
{
team = _a2162[ _k2162 ];
team = _a2012[ _k2012 ];
if ( team == self.team )
{
}
@ -2265,7 +2112,7 @@ lastminutesighttraces( spawnpoint )
i++;
}
}
_k2162 = getNextArrayKey( _a2162, _k2162 );
_k2012 = getNextArrayKey( _a2012, _k2012 );
}
if ( isDefined( closest ) )
{
@ -2491,6 +2338,6 @@ getrandomintermissionpoint()
/#
assert( spawnpoints.size );
#/
spawnpoint = maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_random( spawnpoints );
spawnpoint = maps/mp/gametypes/_spawnlogic::getspawnpoint_random( spawnpoints );
return spawnpoint;
}

View File

@ -1,7 +1,8 @@
#include maps/mp/killstreaks/_killstreaks;
#include maps/mp/_utility;
#include common_scripts/utility;
isgrenadelauncherweapon( weapon )
isgrenadelauncherweapon( weapon ) //checked matches cerberus output
{
if ( getsubstr( weapon, 0, 3 ) == "gl_" )
{
@ -17,7 +18,7 @@ isgrenadelauncherweapon( weapon )
}
}
isdumbrocketlauncherweapon( weapon )
isdumbrocketlauncherweapon( weapon ) //checked matches cerberus output
{
switch( weapon )
{
@ -29,7 +30,7 @@ isdumbrocketlauncherweapon( weapon )
}
}
isguidedrocketlauncherweapon( weapon )
isguidedrocketlauncherweapon( weapon ) //checked matches cerberus output
{
switch( weapon )
{
@ -44,7 +45,7 @@ isguidedrocketlauncherweapon( weapon )
}
}
isrocketlauncherweapon( weapon )
isrocketlauncherweapon( weapon ) //checked matches cerberus output
{
if ( isdumbrocketlauncherweapon( weapon ) )
{
@ -57,7 +58,7 @@ isrocketlauncherweapon( weapon )
return 0;
}
islauncherweapon( weapon )
islauncherweapon( weapon ) //checked matches cerberus output
{
if ( isrocketlauncherweapon( weapon ) )
{
@ -70,28 +71,29 @@ islauncherweapon( weapon )
return 0;
}
isreducedteamkillweapon( weapon )
ishackweapon( weapon ) //checked matches cerberus output
{
switch( weapon )
if ( maps/mp/killstreaks/_killstreaks::iskillstreakweapon( weapon ) )
{
return 1;
}
if ( weapon == "briefcase_bomb_mp" )
{
case "planemortar_mp":
return 1;
default:
return 0;
}
}
ishackweapon( weapon )
{
return 0;
}
ispistol( weapon )
ispistol( weapon ) //checked changed at own discretion
{
return isDefined( level.side_arm_array[ weapon ] );
if ( isDefined( level.side_arm_array[ weapon ] ) )
{
return 1;
}
return 0;
}
isflashorstunweapon( weapon )
isflashorstunweapon( weapon ) //checked matches cerberus output
{
if ( isDefined( weapon ) )
{
@ -107,13 +109,12 @@ isflashorstunweapon( weapon )
return 0;
}
isflashorstundamage( weapon, meansofdeath )
isflashorstundamage( weapon, meansofdeath ) //checked changed at own discretion
{
if ( isflashorstunweapon( weapon ) )
if ( ( meansofdeath == "MOD_GAS" || meansofdeath == "MOD_GRENADE_SPLASH" ) && isflashorstunweapon( weapon ) )
{
if ( meansofdeath != "MOD_GRENADE_SPLASH" )
{
return meansofdeath == "MOD_GAS";
}
return 1;
}
return 0;
}

View File

@ -1,10 +1,23 @@
#include maps/mp/gametypes_zm/_globallogic_audio;
#include maps/mp/gametypes_zm/_damagefeedback;
#include maps/mp/gametypes_zm/_globallogic_player;
#include maps/mp/gametypes_zm/_weaponobjects;
#include maps/mp/gametypes/_dev;
#include maps/mp/_vehicles;
#include maps/mp/gametypes/_globallogic_audio;
#include maps/mp/_entityheadicons;
#include maps/mp/gametypes/_damagefeedback;
#include maps/mp/gametypes/_globallogic_player;
#include maps/mp/_scrambler;
#include maps/mp/gametypes/_weaponobjects;
#include maps/mp/_scoreevents;
#include maps/mp/_challenges;
#include maps/mp/killstreaks/_emp;
#include maps/mp/killstreaks/_qrdrone;
#include maps/mp/killstreaks/_rcbomb;
#include maps/mp/_ballistic_knife;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_sensor_grenade;
#include maps/mp/_trophy_system;
#include maps/mp/_bouncingbetty;
#include maps/mp/_proximity_grenade;
#include maps/mp/_satchel_charge;
#include maps/mp/gametypes/_hud_util;
#include maps/mp/_utility;
#include common_scripts/utility;
@ -53,7 +66,7 @@ init()
level.weaponobjects_headicon_offset[ "bouncingbetty_mp" ] = vectorScale( ( 0, 0, 1 ), 20 );
level.weaponobjects_headicon_offset[ "satchel_charge_mp" ] = vectorScale( ( 0, 0, 1 ), 10 );
level.weaponobjects_headicon_offset[ "scrambler_mp" ] = vectorScale( ( 0, 0, 1 ), 20 );
level.weaponobjects_headicon_offset[ "trophy_system_mp" ] = vectorScale( ( 0, 0, 1 ), 20 );
level.weaponobjects_headicon_offset[ "trophy_system_mp" ] = vectorScale( ( 0, 0, 1 ), 35 );
level.weaponobjects_hacker_trigger_width = 32;
level.weaponobjects_hacker_trigger_height = 32;
}
@ -61,13 +74,13 @@ init()
getwatchernames( weapons )
{
names = [];
_a73 = weapons;
index = getFirstArrayKey( _a73 );
_a75 = weapons;
index = getFirstArrayKey( _a75 );
while ( isDefined( index ) )
{
weapon = _a73[ index ];
weapon = _a75[ index ];
names[ index ] = getsubstr( weapon, 0, weapon.size - 3 );
index = getNextArrayKey( _a73, index );
index = getNextArrayKey( _a75, index );
}
return names;
}
@ -100,6 +113,7 @@ setupretrievablehintstrings()
createretrievablehint( "camera_spike", &"MP_CAMERA_SPIKE_PICKUP" );
createretrievablehint( "satchel_charge", &"MP_SATCHEL_CHARGE_PICKUP" );
createretrievablehint( "scrambler", &"MP_SCRAMBLER_PICKUP" );
createretrievablehint( "proximity_grenade", &"MP_SHOCK_CHARGE_PICKUP" );
createdestroyhint( "trophy_system", &"MP_TROPHY_SYSTEM_DESTROY" );
createdestroyhint( "sensor_grenade", &"MP_SENSOR_GRENADE_DESTROY" );
createhackerhint( "claymore_mp", &"MP_CLAYMORE_HACKING" );
@ -137,6 +151,18 @@ onplayerspawned()
if ( !isDefined( self.watchersinitialized ) )
{
self createbasewatchers();
self maps/mp/_satchel_charge::createsatchelwatcher();
self maps/mp/_proximity_grenade::createproximitygrenadewatcher();
self maps/mp/_bouncingbetty::createbouncingbettywatcher();
self maps/mp/_trophy_system::createtrophysystemwatcher();
self maps/mp/_sensor_grenade::createsensorgrenadewatcher();
self createclaymorewatcher();
self creatercbombwatcher();
self createqrdronewatcher();
self createplayerhelicopterwatcher();
self createballisticknifewatcher();
self createhatchetwatcher();
self createtactinsertwatcher();
self setupretrievablewatcher();
self thread watchweaponobjectusage();
self.watchersinitialized = 1;
@ -153,33 +179,33 @@ resetwatchers()
return undefined;
}
team = self.team;
_a199 = self.weaponobjectwatcherarray;
_k199 = getFirstArrayKey( _a199 );
while ( isDefined( _k199 ) )
_a203 = self.weaponobjectwatcherarray;
_k203 = getFirstArrayKey( _a203 );
while ( isDefined( _k203 ) )
{
watcher = _a199[ _k199 ];
watcher = _a203[ _k203 ];
resetweaponobjectwatcher( watcher, team );
_k199 = getNextArrayKey( _a199, _k199 );
_k203 = getNextArrayKey( _a203, _k203 );
}
}
createbasewatchers()
{
_a208 = level.watcherweapons;
index = getFirstArrayKey( _a208 );
_a212 = level.watcherweapons;
index = getFirstArrayKey( _a212 );
while ( isDefined( index ) )
{
weapon = _a208[ index ];
weapon = _a212[ index ];
self createweaponobjectwatcher( level.watcherweaponnames[ index ], weapon, self.team );
index = getNextArrayKey( _a208, index );
index = getNextArrayKey( _a212, index );
}
_a214 = level.retrievableweapons;
index = getFirstArrayKey( _a214 );
_a218 = level.retrievableweapons;
index = getFirstArrayKey( _a218 );
while ( isDefined( index ) )
{
weapon = _a214[ index ];
weapon = _a218[ index ];
self createweaponobjectwatcher( level.retrievableweaponnames[ index ], weapon, self.team );
index = getNextArrayKey( _a214, index );
index = getNextArrayKey( _a218, index );
}
}
@ -219,6 +245,7 @@ createhatchetwatcher()
watcher = self createuseweaponobjectwatcher( "hatchet", "hatchet_mp", self.team );
watcher.detonate = ::deleteent;
watcher.onspawn = ::voidonspawn;
watcher.ondamage = ::voidondamage;
watcher.onspawnretrievetriggers = ::onspawnhatchettrigger;
}
@ -230,10 +257,29 @@ createtactinsertwatcher()
creatercbombwatcher()
{
watcher = self createuseweaponobjectwatcher( "rcbomb", "rcbomb_mp", self.team );
watcher.altdetonate = 0;
watcher.headicon = 0;
watcher.ismovable = 1;
watcher.ownergetsassist = 1;
watcher.playdestroyeddialog = 0;
watcher.deleteonkillbrush = 0;
watcher.detonate = ::maps/mp/killstreaks/_rcbomb::blowup;
watcher.stuntime = 1;
}
createqrdronewatcher()
{
watcher = self createuseweaponobjectwatcher( "qrdrone", "qrdrone_turret_mp", self.team );
watcher.altdetonate = 0;
watcher.headicon = 0;
watcher.ismovable = 1;
watcher.ownergetsassist = 1;
watcher.playdestroyeddialog = 0;
watcher.deleteonkillbrush = 0;
watcher.detonate = ::maps/mp/killstreaks/_qrdrone::qrdrone_blowup;
watcher.ondamage = ::maps/mp/killstreaks/_qrdrone::qrdrone_damagewatcher;
watcher.stuntime = 5;
}
createplayerhelicopterwatcher()
@ -250,8 +296,8 @@ createclaymorewatcher()
watcher.detonate = ::claymoredetonate;
watcher.activatesound = "wpn_claymore_alert";
watcher.hackable = 1;
watcher.hackertoolradius = level.claymorehackertoolradius;
watcher.hackertooltimems = level.claymorehackertooltimems;
watcher.hackertoolradius = level.equipmenthackertoolradius;
watcher.hackertooltimems = level.equipmenthackertooltimems;
watcher.reconmodel = "t6_wpn_claymore_world_detect";
watcher.ownergetsassist = 1;
detectionconeangle = weapons_get_dvar_int( "scr_weaponobject_coneangle" );
@ -260,7 +306,7 @@ createclaymorewatcher()
watcher.detectiongraceperiod = weapons_get_dvar( "scr_weaponobject_graceperiod" );
watcher.detonateradius = weapons_get_dvar_int( "scr_weaponobject_radius" );
watcher.stun = ::weaponstun;
watcher.stuntime = 5;
watcher.stuntime = 1;
}
waittillnotmoving_and_notstunned()
@ -284,6 +330,10 @@ voidonspawn( unused0, unused1 )
{
}
voidondamage( unused0 )
{
}
deleteent( attacker, emp )
{
self delete();
@ -305,6 +355,14 @@ deleteweaponobjectarray()
{
if ( isDefined( self.objectarray[ i ] ) )
{
if ( isDefined( self.objectarray[ i ].minemover ) )
{
if ( isDefined( self.objectarray[ i ].minemover.killcament ) )
{
self.objectarray[ i ].minemover.killcament delete();
}
self.objectarray[ i ].minemover delete();
}
self.objectarray[ i ] delete();
}
i++;
@ -315,34 +373,47 @@ deleteweaponobjectarray()
claymoredetonate( attacker, weaponname )
{
from_emp = 0;
from_emp = maps/mp/killstreaks/_emp::isempkillstreakweapon( weaponname );
if ( !isDefined( from_emp ) || !from_emp )
{
if ( isDefined( attacker ) )
{
if ( level.teambased || attacker.team != self.owner.team && attacker != self.owner )
if ( self.owner isenemyplayer( attacker ) )
{
attacker maps/mp/_challenges::destroyedexplosive();
attacker maps/mp/_challenges::destroyedexplosive( weaponname );
maps/mp/_scoreevents::processscoreevent( "destroyed_claymore", attacker, self.owner, weaponname );
}
}
}
maps/mp/gametypes_zm/_weaponobjects::weapondetonate( attacker, weaponname );
maps/mp/gametypes/_weaponobjects::weapondetonate( attacker, weaponname );
}
weapondetonate( attacker, weaponname )
{
from_emp = 0;
from_emp = maps/mp/killstreaks/_emp::isempweapon( weaponname );
if ( from_emp )
{
self delete();
return;
}
if ( isDefined( attacker ) )
{
if ( isDefined( self.owner ) && attacker != self.owner )
{
self.playdialog = 1;
}
if ( isplayer( attacker ) )
{
self detonate( attacker );
}
else
{
self detonate();
}
}
else if ( isDefined( self.owner ) && isplayer( self.owner ) )
{
self.playdialog = 0;
self detonate( self.owner );
}
else
@ -355,20 +426,13 @@ waitanddetonate( object, delay, attacker, weaponname )
{
object endon( "death" );
object endon( "hacked" );
from_emp = 0;
if ( from_emp )
from_emp = maps/mp/killstreaks/_emp::isempweapon( weaponname );
if ( from_emp && isDefined( object.name ) && object.name != "qrdrone_turret_mp" )
{
object setclientflag( 15 );
object setclientflag( 9 );
object.stun_fx = 1;
if ( isDefined( object.name ) && object.name == "qrdrone_turret_mp" )
{
playfx( level._equipment_emp_destroy_fx, object.origin + ( 0, 0, 1 ), ( 0, randomfloat( 360 ), 0 ) );
}
else
{
playfx( level._equipment_emp_destroy_fx, object.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) );
}
delay = 1,1;
}
if ( delay )
@ -506,13 +570,52 @@ addweaponobject( watcher, weapon )
weapon thread watchobjectdamage( self );
}
if ( watcher.deleteonkillbrush )
{
if ( isDefined( level.deleteonkillbrushoverride ) )
{
weapon thread [[ level.deleteonkillbrushoverride ]]( self, watcher );
return;
}
else
{
weapon thread deleteonkillbrush( self );
}
}
}
watchscramble( watcher )
{
self endon( "death" );
self endon( "hacked" );
self waittillnotmoving();
if ( self maps/mp/_scrambler::checkscramblerstun() )
{
self thread stunstart( watcher );
}
else
{
self stunstop();
}
for ( ;; )
{
level waittill_any( "scrambler_spawn", "scrambler_death", "hacked" );
if ( isDefined( self.owner ) && self.owner isempjammed() )
{
continue;
}
else
{
if ( self maps/mp/_scrambler::checkscramblerstun() )
{
self thread stunstart( watcher );
break;
}
else
{
self stunstop();
}
}
}
}
deleteweaponobjecthelper( weapon_ent )
@ -578,9 +681,9 @@ weaponobjectdamage( watcher )
}
if ( level.teambased && self.owner.team != attacker.team )
{
if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
if ( maps/mp/gametypes/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
{
attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback();
attacker maps/mp/gametypes/_damagefeedback::updatedamagefeedback();
}
continue;
}
@ -588,9 +691,9 @@ weaponobjectdamage( watcher )
{
if ( !level.teambased && self.owner != attacker )
{
if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
if ( maps/mp/gametypes/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
{
attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback();
attacker maps/mp/gametypes/_damagefeedback::updatedamagefeedback();
}
}
}
@ -600,16 +703,16 @@ weaponobjectdamage( watcher )
case "emp_grenade_mp":
if ( level.teambased && self.owner.team != attacker.team )
{
if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
if ( maps/mp/gametypes/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
{
attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback();
attacker maps/mp/gametypes/_damagefeedback::updatedamagefeedback();
}
}
else if ( !level.teambased && self.owner != attacker )
{
if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
if ( maps/mp/gametypes/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
{
attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback();
attacker maps/mp/gametypes/_damagefeedback::updatedamagefeedback();
}
}
break;
@ -628,9 +731,9 @@ weaponobjectdamage( watcher )
continue;
}
}
if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
if ( maps/mp/gametypes/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
{
attacker maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback();
attacker maps/mp/gametypes/_damagefeedback::updatedamagefeedback();
}
if ( !isvehicle( self ) && !friendlyfirecheck( self.owner, attacker ) )
{
@ -648,6 +751,7 @@ weaponobjectdamage( watcher )
}
level.weaponobjectexplodethisframe = 1;
thread resetweaponobjectexplodethisframe();
self maps/mp/_entityheadicons::setentityheadicon( "none" );
if ( isDefined( type ) && !issubstr( type, "MOD_GRENADE_SPLASH" ) || issubstr( type, "MOD_GRENADE" ) && issubstr( type, "MOD_EXPLOSIVE" ) )
{
self.waschained = 1;
@ -670,7 +774,7 @@ playdialogondeath( owner )
self waittill( "death" );
if ( isDefined( self.playdialog ) && self.playdialog )
{
owner maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" );
owner maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" );
}
}
@ -916,6 +1020,10 @@ commononspawnuseweaponobject( watcher, owner )
{
offset = level.weaponobjects_headicon_offset[ self.name ];
}
if ( isDefined( self ) )
{
self maps/mp/_entityheadicons::setentityheadicon( owner.pers[ "team" ], owner, offset );
}
}
}
}
@ -1025,6 +1133,33 @@ watchweaponobjectspawn()
}
}
anyobjectsinworld( weapon )
{
objectsinworld = 0;
i = 0;
while ( i < self.weaponobjectwatcherarray.size )
{
if ( self.weaponobjectwatcherarray[ i ].weapon != weapon )
{
i++;
continue;
}
else
{
if ( isDefined( self.weaponobjectwatcherarray[ i ].detonate ) && self.weaponobjectwatcherarray[ i ].objectarray.size > 0 )
{
objectsinworld = 1;
break;
}
}
else
{
i++;
}
}
return objectsinworld;
}
watchweaponprojectileobjectspawn()
{
self endon( "disconnect" );
@ -1045,7 +1180,7 @@ watchweaponprojectileobjectspawn()
}
j++;
}
if ( isDefined( watcher.detonate ) && watcher.objectarray.size > 1 )
if ( isDefined( watcher.detonate ) && watcher.objectarray.size > 3 )
{
watcher thread waitanddetonate( watcher.objectarray[ 0 ], 0,1 );
}
@ -1206,7 +1341,10 @@ hackertriggersetvisibility( owner )
self setvisibletoall();
self setteamfortrigger( "none" );
}
if ( isDefined( owner ) )
{
self setinvisibletoplayer( owner );
}
level waittill_any( "player_spawned", "joined_team" );
}
}
@ -1265,13 +1403,16 @@ hackerthink( trigger, watcher )
else
{
self.owner hackerremoveweapon( self );
self.owner maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "hacked_equip", "item_destroyed" );
self.owner maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "hacked_equip", "item_destroyed" );
self.hacked = 1;
self setmissileowner( player );
self setteam( player.pers[ "team" ] );
self.owner = player;
if ( isweaponequipment( self.name ) )
if ( isweaponequipment( self.name ) || self.name == "proximity_grenade_mp" )
{
maps/mp/_scoreevents::processscoreevent( "hacked", player );
player addweaponstat( "pda_hack_mp", "CombatRecordStat", 1 );
player maps/mp/_challenges::hackedordestroyedequipment();
}
if ( self.name == "satchel_charge_mp" && isDefined( player.lowermessage ) )
{
@ -1310,14 +1451,6 @@ hackerthink( trigger, watcher )
}
}
ishacked()
{
if ( isDefined( self.hacked ) )
{
return self.hacked;
}
}
hackerunfreezeplayer( player )
{
self endon( "hack_done" );
@ -1588,6 +1721,7 @@ proximityweaponobjectdetonation( watcher )
{
wait getDvarFloat( "perk_delayExplosiveTime" );
}
self maps/mp/_entityheadicons::setentityheadicon( "none" );
self.origin = traceorigin;
if ( isDefined( self.owner ) && isplayer( self.owner ) )
{
@ -1598,6 +1732,12 @@ proximityweaponobjectdetonation( watcher )
shouldaffectweaponobject( object, watcher )
{
radius = getweaponexplosionradius( watcher.weapon );
distancesqr = distancesquared( self.origin, object.origin );
if ( ( radius * radius ) < distancesqr )
{
return 0;
}
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 );
if ( isDefined( watcher.ignoredirection ) )
{
@ -1633,12 +1773,41 @@ deleteondeath( ent )
}
}
testkillbrushonstationary( killbrusharray, player )
{
player endon( "disconnect" );
self endon( "death" );
self waittill( "stationary" );
wait 0,1;
i = 0;
while ( i < killbrusharray.size )
{
if ( self istouching( killbrusharray[ i ] ) )
{
if ( self.origin[ 2 ] > player.origin[ 2 ] )
{
return;
}
else
{
if ( isDefined( self ) )
{
self delete();
}
return;
}
i++;
}
}
}
deleteonkillbrush( player )
{
player endon( "disconnect" );
self endon( "death" );
self endon( "stationary" );
killbrushes = getentarray( "trigger_hurt", "classname" );
self thread testkillbrushonstationary( killbrushes, player );
while ( 1 )
{
i = 0;
@ -1879,6 +2048,14 @@ friendlyfirecheck( owner, attacker, forcedfriendlyfirerule )
return 1;
}
}
else
{
occupant_team = attacker maps/mp/_vehicles::vehicle_get_occupant_team();
if ( occupant_team != owner.pers[ "team" ] )
{
return 1;
}
}
}
}
}
@ -2038,10 +2215,6 @@ onspawnretrievableweaponobject( watcher, player )
up = anglesToUp( self.angles );
triggerorigin = self.origin + up;
}
if ( isDefined( watcher.adjusttriggerorigin ) )
{
triggerorigin = self [[ watcher.adjusttriggerorigin ]]( triggerorigin );
}
self.pickuptrigger = spawn( "trigger_radius_use", triggerorigin );
self.pickuptrigger sethintlowpriority( 1 );
self.pickuptrigger setcursorhint( "HINT_NOICON", self );
@ -2178,6 +2351,7 @@ pickup( player )
{
return;
}
self notify( "picked_up" );
self.playdialog = 0;
self destroyent();
player giveweapon( self.name );
@ -2194,7 +2368,7 @@ ondestroyed( attacker )
{
playfx( level._effect[ "tacticalInsertionFizzle" ], self.origin );
self playsound( "dst_tac_insert_break" );
self.owner maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" );
self.owner maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( "equipment_destroyed", "item_destroyed" );
self delete();
}
@ -2316,6 +2490,7 @@ attachreconmodel( modelname, owner )
reconmodel thread watchreconmodelfordeath( self );
reconmodel thread resetreconmodelonevent( "joined_team", owner );
reconmodel thread resetreconmodelonevent( "player_spawned", owner );
self.reconmodelentity = reconmodel;
}
resetreconmodelvisibility( owner )
@ -2431,5 +2606,41 @@ resetreconmodelonevent( eventname, owner )
switch_team( entity, weapon_name, owner )
{
/#
self notify( "stop_disarmthink" );
self endon( "stop_disarmthink" );
self endon( "death" );
setdvar( "scr_switch_team", "" );
while ( 1 )
{
wait 0,5;
devgui_int = getDvarInt( "scr_switch_team" );
if ( devgui_int != 0 )
{
team = "autoassign";
player = maps/mp/gametypes/_dev::getormakebot( team );
while ( !isDefined( player ) )
{
println( "Could not add test client" );
wait 1;
}
entity.owner hackerremoveweapon( entity );
entity.hacked = 1;
entity setowner( player );
entity setteam( player.pers[ "team" ] );
entity.owner = player;
entity notify( "hacked" );
level notify( "hacked" );
if ( entity.name == "camera_spike_mp" && isDefined( entity.camerahead ) )
{
entity.camerahead notify( "hacked" );
}
wait 0,05;
if ( isDefined( player ) && player.sessionstate == "playing" )
{
player notify( "grenade_fire" );
}
setdvar( "scr_switch_team", "0" );
}
#/
}
}

File diff suppressed because it is too large Load Diff

View File

@ -19,6 +19,7 @@ patch_mp/maps/mp/gametypes/_shellshock.gsc
```
### The following scripts have been checked, but they have not been tested yet
```
patch_mp/maps/mp/gametypes/_weapon_utils.gsc
```
### The following scripts are not checked yet, uploaded to setup a baseline:
```
@ -42,7 +43,6 @@ patch_mp/maps/mp/gametypes/_globallogic_spawn.gsc
patch_mp/maps/mp/gametypes/_globallogic_ui.gsc
patch_mp/maps/mp/gametypes/_globallogic_utils.gsc
patch_mp/maps/mp/gametypes/_globallogic_vehicle.gsc
patch_mp/maps/mp/gametypes/_gv_actions.gsc
patch_mp/maps/mp/gametypes/_healthoverlay.gsc
patch_mp/maps/mp/gametypes/_hostmigration.gsc
patch_mp/maps/mp/gametypes/_hud.gsc
@ -61,7 +61,6 @@ patch_mp/maps/mp/gametypes/_spawnlogic.gsc
patch_mp/maps/mp/gametypes/_spectating.gsc
patch_mp/maps/mp/gametypes/_tweakables.gsc
patch_mp/maps/mp/gametypes/_wager.gsc
patch_mp/maps/mp/gametypes/_weapon_utils.gsc
patch_mp/maps/mp/gametypes/_weaponobjects.gsc
patch_mp/maps/mp/gametypes/_weapons.gsc
patch_mp/maps/mp/gametypes/conf.gsc

View File

@ -1,7 +1,8 @@
#include maps/mp/killstreaks/_killstreaks;
#include maps/mp/_utility;
#include common_scripts/utility;
isgrenadelauncherweapon( weapon )
isgrenadelauncherweapon( weapon ) //checked matches cerberus output
{
if ( getsubstr( weapon, 0, 3 ) == "gl_" )
{
@ -17,7 +18,7 @@ isgrenadelauncherweapon( weapon )
}
}
isdumbrocketlauncherweapon( weapon )
isdumbrocketlauncherweapon( weapon ) //checked matches cerberus output
{
switch( weapon )
{
@ -29,7 +30,7 @@ isdumbrocketlauncherweapon( weapon )
}
}
isguidedrocketlauncherweapon( weapon )
isguidedrocketlauncherweapon( weapon ) //checked matches cerberus output
{
switch( weapon )
{
@ -44,7 +45,7 @@ isguidedrocketlauncherweapon( weapon )
}
}
isrocketlauncherweapon( weapon )
isrocketlauncherweapon( weapon ) //checked matches cerberus output
{
if ( isdumbrocketlauncherweapon( weapon ) )
{
@ -57,7 +58,7 @@ isrocketlauncherweapon( weapon )
return 0;
}
islauncherweapon( weapon )
islauncherweapon( weapon ) //checked matches cerberus output
{
if ( isrocketlauncherweapon( weapon ) )
{
@ -81,17 +82,21 @@ isreducedteamkillweapon( weapon )
}
}
ishackweapon( weapon )
ishackweapon( weapon ) //checked matches cerberus output
{
return 0;
}
ispistol( weapon )
ispistol( weapon ) //checked changed at own discretion
{
return isDefined( level.side_arm_array[ weapon ] );
if ( isDefined( level.side_arm_array[ weapon ] ) )
{
return 1;
}
return 0;
}
isflashorstunweapon( weapon )
isflashorstunweapon( weapon ) //checked matches cerberus output
{
if ( isDefined( weapon ) )
{
@ -107,13 +112,13 @@ isflashorstunweapon( weapon )
return 0;
}
isflashorstundamage( weapon, meansofdeath )
isflashorstundamage( weapon, meansofdeath ) //checked changed at own discretion
{
if ( isflashorstunweapon( weapon ) )
if ( ( meansofdeath == "MOD_GAS" || meansofdeath == "MOD_GRENADE_SPLASH" ) && isflashorstunweapon( weapon ) )
{
if ( meansofdeath != "MOD_GRENADE_SPLASH" )
{
return meansofdeath == "MOD_GAS";
}
return 1;
}
return 0;
}

View File

@ -48,6 +48,7 @@ patch_zm/maps/mp/zombies/_zm_pers_upgrades_functions.gsc
```
### The following scripts have been checked, but they have not been tested yet
```
patch_zm/maps/mp/gametypes_zm/_weapon_utils.gsc
patch_zm/maps/mp/zombies/_zm_blockers.gsc
patch_zm/maps/mp/zombies/_zm_buildables.gsc
patch_zm/maps/mp/zombies/_zm_equip_turbine.gsc
@ -92,7 +93,6 @@ patch_zm/maps/mp/gametypes_zm/_spawning.gsc
patch_zm/maps/mp/gametypes_zm/_spawnlogic.gsc
patch_zm/maps/mp/gametypes_zm/_spectating.gsc
patch_zm/maps/mp/gametypes_zm/_tweakables.gsc
patch_zm/maps/mp/gametypes_zm/_weapon_utils.gsc
patch_zm/maps/mp/gametypes_zm/_weaponobjects.gsc
patch_zm/maps/mp/gametypes_zm/_weapons.gsc
```