mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-08 01:47:50 -05:00
properly uploaded mp scripts instead of zm versions
Checked_weapon_utils for both mp and zm.
This commit is contained in:
parent
7e100abc34
commit
18b5824147
@ -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;
|
||||
|
@ -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
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -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
@ -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 )
|
||||
{
|
||||
|
@ -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 )
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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++;
|
||||
}
|
||||
}
|
@ -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 )
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
@ -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 );
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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";
|
||||
|
@ -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() );
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
}
|
||||
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
```
|
||||
|
Loading…
x
Reference in New Issue
Block a user