Files
Recompilable-gscs-for-BO2-z…/patch_mp/maps/mp/killstreaks/_killstreakrules.gsc

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 );
#/
}
}
}
}