mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 10:47:58 -05:00
416 lines
14 KiB
Plaintext
416 lines
14 KiB
Plaintext
#include maps/mp/killstreaks/_emp;
|
|
#include maps/mp/_popups;
|
|
#include common_scripts/utility;
|
|
#include maps/mp/gametypes/_hud_util;
|
|
#include maps/mp/_utility;
|
|
|
|
init()
|
|
{
|
|
level.killstreakrules = [];
|
|
level.killstreaktype = [];
|
|
level.killstreaks_triggered = [];
|
|
level.killstreak_counter = 0;
|
|
createrule( "vehicle", 7, 7 );
|
|
createrule( "firesupport", 1, 1 );
|
|
createrule( "airsupport", 1, 1 );
|
|
createrule( "playercontrolledchopper", 1, 1 );
|
|
createrule( "chopperInTheAir", 1, 1 );
|
|
createrule( "chopper", 2, 1 );
|
|
createrule( "qrdrone", 3, 2 );
|
|
createrule( "dogs", 1, 1 );
|
|
createrule( "turret", 8, 4 );
|
|
createrule( "weapon", 12, 6 );
|
|
createrule( "satellite", 20, 10 );
|
|
createrule( "supplydrop", 4, 4 );
|
|
createrule( "rcxd", 3, 2 );
|
|
createrule( "targetableent", 32, 32 );
|
|
createrule( "missileswarm", 1, 1 );
|
|
createrule( "radar", 20, 10 );
|
|
createrule( "counteruav", 20, 10 );
|
|
createrule( "emp", 2, 1 );
|
|
createrule( "ai_tank", 4, 2 );
|
|
createrule( "straferun", 1, 1 );
|
|
createrule( "planemortar", 1, 1 );
|
|
createrule( "remotemortar", 1, 1 );
|
|
createrule( "missiledrone", 3, 3 );
|
|
addkillstreaktorule( "helicopter_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "helicopter_mp", "chopper", 1, 1 );
|
|
addkillstreaktorule( "helicopter_mp", "playercontrolledchopper", 0, 1 );
|
|
addkillstreaktorule( "helicopter_mp", "chopperInTheAir", 1, 0 );
|
|
addkillstreaktorule( "helicopter_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "helicopter_x2_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "helicopter_x2_mp", "chopper", 1, 1 );
|
|
addkillstreaktorule( "helicopter_x2_mp", "playercontrolledchopper", 0, 1 );
|
|
addkillstreaktorule( "helicopter_x2_mp", "chopperInTheAir", 1, 0 );
|
|
addkillstreaktorule( "helicopter_x2_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "helicopter_comlink_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "helicopter_comlink_mp", "chopper", 1, 1 );
|
|
addkillstreaktorule( "helicopter_comlink_mp", "playercontrolledchopper", 0, 1 );
|
|
addkillstreaktorule( "helicopter_comlink_mp", "chopperInTheAir", 1, 0 );
|
|
addkillstreaktorule( "helicopter_comlink_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "helicopter_player_firstperson_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "helicopter_player_firstperson_mp", "playercontrolledchopper", 1, 1 );
|
|
addkillstreaktorule( "helicopter_player_firstperson_mp", "chopperInTheAir", 1, 1 );
|
|
addkillstreaktorule( "helicopter_player_firstperson_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "helicopter_guard_mp", "airsupport", 1, 1 );
|
|
addkillstreaktorule( "helicopter_gunner_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "helicopter_gunner_mp", "playercontrolledchopper", 1, 1 );
|
|
addkillstreaktorule( "helicopter_gunner_mp", "chopperInTheAir", 1, 1 );
|
|
addkillstreaktorule( "helicopter_gunner_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "helicopter_player_gunner_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "helicopter_player_gunner_mp", "playercontrolledchopper", 1, 1 );
|
|
addkillstreaktorule( "helicopter_player_gunner_mp", "chopperInTheAir", 1, 1 );
|
|
addkillstreaktorule( "helicopter_player_gunner_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "rcbomb_mp", "rcxd", 1, 1 );
|
|
addkillstreaktorule( "supply_drop_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "supply_drop_mp", "supplydrop", 1, 1 );
|
|
addkillstreaktorule( "supply_drop_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "supply_station_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "inventory_supply_drop_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "inventory_supply_drop_mp", "supplydrop", 1, 1 );
|
|
addkillstreaktorule( "inventory_supply_drop_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "supply_station_mp", "supplydrop", 1, 1 );
|
|
addkillstreaktorule( "supply_station_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "tow_turret_drop_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "turret_drop_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "m220_tow_drop_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "tow_turret_drop_mp", "supplydrop", 1, 1 );
|
|
addkillstreaktorule( "turret_drop_mp", "supplydrop", 1, 1 );
|
|
addkillstreaktorule( "m220_tow_drop_mp", "supplydrop", 1, 1 );
|
|
addkillstreaktorule( "m220_tow_killstreak_mp", "weapon", 1, 1 );
|
|
addkillstreaktorule( "autoturret_mp", "turret", 1, 1 );
|
|
addkillstreaktorule( "auto_tow_mp", "turret", 1, 1 );
|
|
addkillstreaktorule( "microwaveturret_mp", "turret", 1, 1 );
|
|
addkillstreaktorule( "minigun_mp", "weapon", 1, 1 );
|
|
addkillstreaktorule( "minigun_drop_mp", "weapon", 1, 1 );
|
|
addkillstreaktorule( "inventory_minigun_mp", "weapon", 1, 1 );
|
|
addkillstreaktorule( "m32_mp", "weapon", 1, 1 );
|
|
addkillstreaktorule( "m32_drop_mp", "weapon", 1, 1 );
|
|
addkillstreaktorule( "inventory_m32_mp", "weapon", 1, 1 );
|
|
addkillstreaktorule( "m202_flash_mp", "weapon", 1, 1 );
|
|
addkillstreaktorule( "m220_tow_mp", "weapon", 1, 1 );
|
|
addkillstreaktorule( "mp40_drop_mp", "weapon", 1, 1 );
|
|
addkillstreaktorule( "dogs_mp", "dogs", 1, 1 );
|
|
addkillstreaktorule( "dogs_lvl2_mp", "dogs", 1, 1 );
|
|
addkillstreaktorule( "dogs_lvl3_mp", "dogs", 1, 1 );
|
|
addkillstreaktorule( "artillery_mp", "firesupport", 1, 1 );
|
|
addkillstreaktorule( "mortar_mp", "firesupport", 1, 1 );
|
|
addkillstreaktorule( "napalm_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "napalm_mp", "airsupport", 1, 1 );
|
|
addkillstreaktorule( "airstrike_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "airstrike_mp", "airsupport", 1, 1 );
|
|
addkillstreaktorule( "radardirection_mp", "satellite", 1, 1 );
|
|
addkillstreaktorule( "radar_mp", "radar", 1, 1 );
|
|
addkillstreaktorule( "radar_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "counteruav_mp", "counteruav", 1, 1 );
|
|
addkillstreaktorule( "counteruav_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "emp_mp", "emp", 1, 1 );
|
|
addkillstreaktorule( "remote_mortar_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "remote_mortar_mp", "remotemortar", 1, 1 );
|
|
addkillstreaktorule( "remote_missile_mp", "targetableent", 1, 1 );
|
|
addkillstreaktorule( "qrdrone_mp", "vehicle", 1, 1 );
|
|
addkillstreaktorule( "qrdrone_mp", "qrdrone", 1, 1 );
|
|
addkillstreaktorule( "missile_swarm_mp", "missileswarm", 1, 1 );
|
|
addkillstreaktorule( "missile_drone_mp", "missiledrone", 1, 1 );
|
|
addkillstreaktorule( "inventory_missile_drone_mp", "missiledrone", 1, 1 );
|
|
addkillstreaktorule( "straferun_mp", "straferun", 1, 1 );
|
|
addkillstreaktorule( "ai_tank_drop_mp", "ai_tank", 1, 1 );
|
|
addkillstreaktorule( "inventory_ai_tank_drop_mp", "ai_tank", 1, 1 );
|
|
addkillstreaktorule( "planemortar_mp", "planemortar", 1, 1 );
|
|
}
|
|
|
|
createrule( rule, maxallowable, maxallowableperteam )
|
|
{
|
|
if ( !level.teambased )
|
|
{
|
|
if ( maxallowable > maxallowableperteam )
|
|
{
|
|
maxallowable = maxallowableperteam;
|
|
}
|
|
}
|
|
level.killstreakrules[ rule ] = spawnstruct();
|
|
level.killstreakrules[ rule ].cur = 0;
|
|
level.killstreakrules[ rule ].curteam = [];
|
|
level.killstreakrules[ rule ].max = maxallowable;
|
|
level.killstreakrules[ rule ].maxperteam = maxallowableperteam;
|
|
}
|
|
|
|
addkillstreaktorule( hardpointtype, rule, counttowards, checkagainst )
|
|
{
|
|
if ( !isDefined( level.killstreaktype[ hardpointtype ] ) )
|
|
{
|
|
level.killstreaktype[ hardpointtype ] = [];
|
|
}
|
|
keys = getarraykeys( level.killstreaktype[ hardpointtype ] );
|
|
/#
|
|
assert( isDefined( level.killstreakrules[ rule ] ) );
|
|
#/
|
|
if ( !isDefined( level.killstreaktype[ hardpointtype ][ rule ] ) )
|
|
{
|
|
level.killstreaktype[ hardpointtype ][ rule ] = spawnstruct();
|
|
}
|
|
level.killstreaktype[ hardpointtype ][ rule ].counts = counttowards;
|
|
level.killstreaktype[ hardpointtype ][ rule ].checks = checkagainst;
|
|
}
|
|
|
|
killstreakstart( hardpointtype, team, hacked, displayteammessage )
|
|
{
|
|
/#
|
|
assert( isDefined( team ), "team needs to be defined" );
|
|
#/
|
|
if ( self iskillstreakallowed( hardpointtype, team ) == 0 )
|
|
{
|
|
return -1;
|
|
}
|
|
/#
|
|
assert( isDefined( hardpointtype ) );
|
|
#/
|
|
if ( !isDefined( hacked ) )
|
|
{
|
|
hacked = 0;
|
|
}
|
|
if ( !isDefined( displayteammessage ) )
|
|
{
|
|
displayteammessage = 1;
|
|
}
|
|
if ( displayteammessage == 1 )
|
|
{
|
|
if ( isDefined( level.killstreaks[ hardpointtype ] ) && isDefined( level.killstreaks[ hardpointtype ].inboundtext ) && !hacked )
|
|
{
|
|
level thread maps/mp/_popups::displaykillstreakteammessagetoall( hardpointtype, self );
|
|
}
|
|
}
|
|
keys = getarraykeys( level.killstreaktype[ hardpointtype ] );
|
|
_a187 = keys;
|
|
_k187 = getFirstArrayKey( _a187 );
|
|
while ( isDefined( _k187 ) )
|
|
{
|
|
key = _a187[ _k187 ];
|
|
if ( !level.killstreaktype[ hardpointtype ][ key ].counts )
|
|
{
|
|
}
|
|
else
|
|
{
|
|
/#
|
|
assert( isDefined( level.killstreakrules[ key ] ) );
|
|
#/
|
|
level.killstreakrules[ key ].cur++;
|
|
if ( level.teambased )
|
|
{
|
|
if ( !isDefined( level.killstreakrules[ key ].curteam[ team ] ) )
|
|
{
|
|
level.killstreakrules[ key ].curteam[ team ] = 0;
|
|
}
|
|
level.killstreakrules[ key ].curteam[ team ]++;
|
|
}
|
|
}
|
|
_k187 = getNextArrayKey( _a187, _k187 );
|
|
}
|
|
level notify( "killstreak_started" );
|
|
killstreak_id = level.killstreak_counter;
|
|
level.killstreak_counter++;
|
|
killstreak_data = [];
|
|
killstreak_data[ "caller" ] = self getxuid();
|
|
killstreak_data[ "spawnid" ] = getplayerspawnid( self );
|
|
killstreak_data[ "starttime" ] = getTime();
|
|
killstreak_data[ "type" ] = hardpointtype;
|
|
killstreak_data[ "endtime" ] = 0;
|
|
level.killstreaks_triggered[ killstreak_id ] = killstreak_data;
|
|
/#
|
|
killstreak_debug_text( "Started killstreak: " + hardpointtype + " for team: " + team + " id: " + killstreak_id );
|
|
#/
|
|
return killstreak_id;
|
|
}
|
|
|
|
killstreakstop( hardpointtype, team, id )
|
|
{
|
|
/#
|
|
assert( isDefined( team ), "team needs to be defined" );
|
|
#/
|
|
/#
|
|
assert( isDefined( hardpointtype ) );
|
|
#/
|
|
/#
|
|
killstreak_debug_text( "Stopped killstreak: " + hardpointtype + " for team: " + team + " id: " + id );
|
|
#/
|
|
keys = getarraykeys( level.killstreaktype[ hardpointtype ] );
|
|
_a238 = keys;
|
|
_k238 = getFirstArrayKey( _a238 );
|
|
while ( isDefined( _k238 ) )
|
|
{
|
|
key = _a238[ _k238 ];
|
|
if ( !level.killstreaktype[ hardpointtype ][ key ].counts )
|
|
{
|
|
}
|
|
else
|
|
{
|
|
/#
|
|
assert( isDefined( level.killstreakrules[ key ] ) );
|
|
#/
|
|
level.killstreakrules[ key ].cur--;
|
|
|
|
/#
|
|
assert( level.killstreakrules[ key ].cur >= 0 );
|
|
#/
|
|
if ( level.teambased )
|
|
{
|
|
/#
|
|
assert( isDefined( team ) );
|
|
#/
|
|
/#
|
|
assert( isDefined( level.killstreakrules[ key ].curteam[ team ] ) );
|
|
#/
|
|
level.killstreakrules[ key ].curteam[ team ]--;
|
|
|
|
/#
|
|
assert( level.killstreakrules[ key ].curteam[ team ] >= 0 );
|
|
#/
|
|
}
|
|
}
|
|
_k238 = getNextArrayKey( _a238, _k238 );
|
|
}
|
|
if ( !isDefined( id ) || id == -1 )
|
|
{
|
|
killstreak_debug_text( "WARNING! Invalid killstreak id detected for " + hardpointtype );
|
|
bbprint( "mpkillstreakuses", "starttime %d endtime %d name %s team %s", 0, getTime(), hardpointtype, team );
|
|
return;
|
|
}
|
|
level.killstreaks_triggered[ id ][ "endtime" ] = getTime();
|
|
bbprint( "mpkillstreakuses", "starttime %d endtime %d spawnid %d name %s team %s", level.killstreaks_triggered[ id ][ "starttime" ], level.killstreaks_triggered[ id ][ "endtime" ], level.killstreaks_triggered[ id ][ "spawnid" ], hardpointtype, team );
|
|
if ( isDefined( level.killstreaks[ hardpointtype ].menuname ) )
|
|
{
|
|
recordstreakindex = level.killstreakindices[ level.killstreaks[ hardpointtype ].menuname ];
|
|
if ( isDefined( recordstreakindex ) )
|
|
{
|
|
if ( isDefined( self.owner ) )
|
|
{
|
|
self.owner recordkillstreakendevent( recordstreakindex );
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
if ( isplayer( self ) )
|
|
{
|
|
self recordkillstreakendevent( recordstreakindex );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
iskillstreakallowed( hardpointtype, team )
|
|
{
|
|
/#
|
|
assert( isDefined( team ), "team needs to be defined" );
|
|
#/
|
|
/#
|
|
assert( isDefined( hardpointtype ) );
|
|
#/
|
|
isallowed = 1;
|
|
keys = getarraykeys( level.killstreaktype[ hardpointtype ] );
|
|
_a308 = keys;
|
|
_k308 = getFirstArrayKey( _a308 );
|
|
while ( isDefined( _k308 ) )
|
|
{
|
|
key = _a308[ _k308 ];
|
|
if ( !level.killstreaktype[ hardpointtype ][ key ].checks )
|
|
{
|
|
}
|
|
else
|
|
{
|
|
if ( level.killstreakrules[ key ].max != 0 )
|
|
{
|
|
if ( level.killstreakrules[ key ].cur >= level.killstreakrules[ key ].max )
|
|
{
|
|
/#
|
|
killstreak_debug_text( "Exceeded " + key + " overall" );
|
|
#/
|
|
isallowed = 0;
|
|
break;
|
|
}
|
|
}
|
|
else if ( level.teambased && level.killstreakrules[ key ].maxperteam != 0 )
|
|
{
|
|
if ( !isDefined( level.killstreakrules[ key ].curteam[ team ] ) )
|
|
{
|
|
level.killstreakrules[ key ].curteam[ team ] = 0;
|
|
}
|
|
if ( level.killstreakrules[ key ].curteam[ team ] >= level.killstreakrules[ key ].maxperteam )
|
|
{
|
|
isallowed = 0;
|
|
/#
|
|
killstreak_debug_text( "Exceeded " + key + " team" );
|
|
#/
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_k308 = getNextArrayKey( _a308, _k308 );
|
|
}
|
|
}
|
|
if ( isDefined( self.laststand ) && self.laststand )
|
|
{
|
|
/#
|
|
killstreak_debug_text( "In LastStand" );
|
|
#/
|
|
isallowed = 0;
|
|
}
|
|
if ( self isempjammed() )
|
|
{
|
|
/#
|
|
killstreak_debug_text( "EMP active" );
|
|
#/
|
|
isallowed = 0;
|
|
if ( self maps/mp/killstreaks/_emp::isenemyempkillstreakactive() )
|
|
{
|
|
if ( isDefined( level.empendtime ) )
|
|
{
|
|
secondsleft = int( ( level.empendtime - getTime() ) / 1000 );
|
|
if ( secondsleft > 0 )
|
|
{
|
|
self iprintlnbold( &"KILLSTREAK_NOT_AVAILABLE_EMP_ACTIVE", secondsleft );
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ( isallowed == 0 )
|
|
{
|
|
if ( isDefined( level.killstreaks[ hardpointtype ] ) && isDefined( level.killstreaks[ hardpointtype ].notavailabletext ) )
|
|
{
|
|
self iprintlnbold( level.killstreaks[ hardpointtype ].notavailabletext );
|
|
if ( hardpointtype != "helicopter_comlink_mp" && hardpointtype != "helicopter_guard_mp" && hardpointtype != "helicopter_player_gunner_mp" && hardpointtype != "remote_mortar_mp" && hardpointtype != "inventory_supply_drop_mp" || hardpointtype == "supply_drop_mp" && hardpointtype == "straferun_mp" )
|
|
{
|
|
pilotvoicenumber = randomintrange( 0, 3 );
|
|
soundalias = level.teamprefix[ self.team ] + pilotvoicenumber + "_" + "kls_full";
|
|
self playlocalsound( soundalias );
|
|
}
|
|
}
|
|
}
|
|
return isallowed;
|
|
}
|
|
|
|
killstreak_debug_text( text )
|
|
{
|
|
/#
|
|
level.killstreak_rule_debug = getdvarintdefault( "scr_killstreak_rule_debug", 0 );
|
|
if ( isDefined( level.killstreak_rule_debug ) )
|
|
{
|
|
if ( level.killstreak_rule_debug == 1 )
|
|
{
|
|
iprintln( "KSR: " + text + "\n" );
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
if ( level.killstreak_rule_debug == 2 )
|
|
{
|
|
iprintlnbold( "KSR: " + text );
|
|
#/
|
|
}
|
|
}
|
|
}
|
|
}
|