2118 lines
47 KiB
Plaintext

#include common_scripts/utility;
#include maps/mp/_utility;
init()
{
if ( !isDefined( level.challengescallbacks ) )
{
level.challengescallbacks = [];
}
waittillframeend;
if ( canprocesschallenges() )
{
registerchallengescallback( "playerKilled", ::challengekills );
registerchallengescallback( "gameEnd", ::challengegameend );
registerchallengescallback( "roundEnd", ::challengeroundend );
}
level thread onplayerconnect();
_a24 = level.teams;
_k24 = getFirstArrayKey( _a24 );
while ( isDefined( _k24 ) )
{
team = _a24[ _k24 ];
initteamchallenges( team );
_k24 = getNextArrayKey( _a24, _k24 );
}
}
addflyswatterstat( weapon, aircraft )
{
if ( !isDefined( self.pers[ "flyswattercount" ] ) )
{
self.pers[ "flyswattercount" ] = 0;
}
self addweaponstat( weapon, "destroyed_aircraft", 1 );
self.pers[ "flyswattercount" ]++;
if ( self.pers[ "flyswattercount" ] == 5 )
{
self addweaponstat( weapon, "destroyed_5_aircraft", 1 );
}
if ( isDefined( aircraft ) && isDefined( aircraft.birthtime ) )
{
if ( ( getTime() - aircraft.birthtime ) < 20000 )
{
self addweaponstat( weapon, "destroyed_aircraft_under20s", 1 );
}
}
if ( !isDefined( self.destroyedaircrafttime ) )
{
self.destroyedaircrafttime = [];
}
if ( isDefined( self.destroyedaircrafttime[ weapon ] ) && ( getTime() - self.destroyedaircrafttime[ weapon ] ) < 10000 )
{
self addweaponstat( weapon, "destroyed_2aircraft_quickly", 1 );
}
else
{
self.destroyedaircrafttime[ weapon ] = getTime();
}
}
canprocesschallenges()
{
/#
if ( getdvarintdefault( "scr_debug_challenges", 0 ) )
{
return 1;
#/
}
if ( level.rankedmatch || level.wagermatch )
{
return 1;
}
return 0;
}
initteamchallenges( team )
{
if ( !isDefined( game[ "challenge" ] ) )
{
game[ "challenge" ] = [];
}
if ( !isDefined( game[ "challenge" ][ team ] ) )
{
game[ "challenge" ][ team ] = [];
game[ "challenge" ][ team ][ "plantedBomb" ] = 0;
game[ "challenge" ][ team ][ "destroyedBombSite" ] = 0;
game[ "challenge" ][ team ][ "capturedFlag" ] = 0;
}
game[ "challenge" ][ team ][ "allAlive" ] = 1;
}
registerchallengescallback( callback, func )
{
if ( !isDefined( level.challengescallbacks[ callback ] ) )
{
level.challengescallbacks[ callback ] = [];
}
level.challengescallbacks[ callback ][ level.challengescallbacks[ callback ].size ] = func;
}
dochallengecallback( callback, data )
{
if ( !isDefined( level.challengescallbacks ) )
{
return;
}
if ( !isDefined( level.challengescallbacks[ callback ] ) )
{
return;
}
if ( isDefined( data ) )
{
i = 0;
while ( i < level.challengescallbacks[ callback ].size )
{
thread [[ level.challengescallbacks[ callback ][ i ] ]]( data );
i++;
}
}
else i = 0;
while ( i < level.challengescallbacks[ callback ].size )
{
thread [[ level.challengescallbacks[ callback ][ i ] ]]();
i++;
}
}
onplayerconnect()
{
for ( ;; )
{
level waittill( "connected", player );
player thread initchallengedata();
player thread spawnwatcher();
player thread monitorreloads();
}
}
monitorreloads()
{
self endon( "disconnect" );
while ( 1 )
{
self waittill( "reload" );
currentweapon = self getcurrentweapon();
while ( currentweapon == "none" )
{
continue;
}
time = getTime();
self.lastreloadtime = time;
if ( currentweapon == "crossbow_mp" )
{
self.crossbowclipkillcount = 0;
}
if ( weaponhasattachment( currentweapon, "dualclip" ) )
{
self thread reloadthenkill( currentweapon );
}
}
}
reloadthenkill( reloadweapon )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "reloadThenKillTimedOut" );
self notify( "reloadThenKillStart" );
self endon( "reloadThenKillStart" );
self thread reloadthenkilltimeout( 5 );
for ( ;; )
{
self waittill( "killed_enemy_player", time, weapon );
if ( reloadweapon == weapon )
{
self addplayerstat( "reload_then_kill_dualclip", 1 );
}
}
}
reloadthenkilltimeout( time )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "reloadThenKillStart" );
wait time;
self notify( "reloadThenKillTimedOut" );
}
initchallengedata()
{
self.pers[ "bulletStreak" ] = 0;
self.pers[ "lastBulletKillTime" ] = 0;
self.pers[ "stickExplosiveKill" ] = 0;
self.pers[ "carepackagesCalled" ] = 0;
self.explosiveinfo = [];
}
isdamagefromplayercontrolledaitank( eattacker, einflictor, sweapon )
{
if ( sweapon == "ai_tank_drone_gun_mp" )
{
if ( isDefined( eattacker ) && isDefined( eattacker.remoteweapon ) && isDefined( einflictor ) )
{
if ( isDefined( einflictor.controlled ) && einflictor.controlled == 1 )
{
if ( eattacker.remoteweapon == einflictor )
{
return 1;
}
}
}
}
else
{
if ( sweapon == "ai_tank_drone_rocket_mp" )
{
if ( isDefined( einflictor ) && !isDefined( einflictor.from_ai ) )
{
return 1;
}
}
}
return 0;
}
isdamagefromplayercontrolledsentry( eattacker, einflictor, sweapon )
{
if ( sweapon == "auto_gun_turret_mp" )
{
if ( isDefined( eattacker ) && isDefined( eattacker.remoteweapon ) && isDefined( einflictor ) )
{
if ( eattacker.remoteweapon == einflictor )
{
if ( isDefined( einflictor.controlled ) && einflictor.controlled == 1 )
{
return 1;
}
}
}
}
return 0;
}
challengekills( data, time )
{
victim = data.victim;
player = data.attacker;
attacker = data.attacker;
time = data.time;
victim = data.victim;
weapon = data.sweapon;
time = data.time;
inflictor = data.einflictor;
meansofdeath = data.smeansofdeath;
wasplanting = data.wasplanting;
wasdefusing = data.wasdefusing;
lastweaponbeforetoss = data.lastweaponbeforetoss;
ownerweaponatlaunch = data.ownerweaponatlaunch;
if ( !isDefined( data.sweapon ) )
{
return;
}
if ( !isDefined( player ) || !isplayer( player ) )
{
return;
}
weaponclass = getweaponclass( weapon );
game[ "challenge" ][ victim.team ][ "allAlive" ] = 0;
if ( level.teambased )
{
if ( player.team == victim.team )
{
return;
}
}
else
{
if ( player == victim )
{
return;
}
}
if ( isdamagefromplayercontrolledaitank( player, inflictor, weapon ) == 1 )
{
player addplayerstat( "kill_with_remote_control_ai_tank", 1 );
}
if ( weapon == "auto_gun_turret_mp" )
{
if ( isDefined( inflictor ) )
{
if ( !isDefined( inflictor.killcount ) )
{
inflictor.killcount = 0;
}
inflictor.killcount++;
if ( inflictor.killcount >= 5 )
{
inflictor.killcount = 0;
player addplayerstat( "killstreak_5_with_sentry_gun", 1 );
}
}
if ( isdamagefromplayercontrolledsentry( player, inflictor, weapon ) == 1 )
{
player addplayerstat( "kill_with_remote_control_sentry_gun", 1 );
}
}
if ( weapon == "minigun_mp" || weapon == "inventory_minigun_mp" )
{
player.deathmachinekills++;
if ( player.deathmachinekills >= 5 )
{
player.deathmachinekills = 0;
player addplayerstat( "killstreak_5_with_death_machine", 1 );
}
}
if ( data.waslockingon == 1 && weapon == "chopper_minigun_mp" )
{
player addplayerstat( "kill_enemy_locking_on_with_chopper_gunner", 1 );
}
if ( isDefined( level.iskillstreakweapon ) )
{
if ( [[ level.iskillstreakweapon ]]( data.sweapon ) )
{
return;
}
}
attacker notify( "killed_enemy_player" );
if ( isDefined( player.primaryloadoutweapon ) || weapon == player.primaryloadoutweapon && isDefined( player.primaryloadoutaltweapon ) && weapon == player.primaryloadoutaltweapon )
{
if ( player isbonuscardactive( 0, player.class_num ) )
{
player addbonuscardstat( 0, "kills", 1, player.class_num );
player addplayerstat( "kill_with_loadout_weapon_with_3_attachments", 1 );
}
if ( isDefined( player.secondaryweaponkill ) && player.secondaryweaponkill == 1 )
{
player.primaryweaponkill = 0;
player.secondaryweaponkill = 0;
if ( player isbonuscardactive( 2, player.class_num ) )
{
player addbonuscardstat( 2, "kills", 1, player.class_num );
player addplayerstat( "kill_with_both_primary_weapons", 1 );
}
}
else
{
player.primaryweaponkill = 1;
}
}
else
{
if ( isDefined( player.secondaryloadoutweapon ) || weapon == player.secondaryloadoutweapon && isDefined( player.secondaryloadoutaltweapon ) && weapon == player.secondaryloadoutaltweapon )
{
if ( player isbonuscardactive( 1, player.class_num ) )
{
player addbonuscardstat( 1, "kills", 1, player.class_num );
}
if ( isDefined( player.primaryweaponkill ) && player.primaryweaponkill == 1 )
{
player.primaryweaponkill = 0;
player.secondaryweaponkill = 0;
if ( player isbonuscardactive( 2, player.class_num ) )
{
player addbonuscardstat( 2, "kills", 1, player.class_num );
player addplayerstat( "kill_with_both_primary_weapons", 1 );
}
}
else
{
player.secondaryweaponkill = 1;
}
}
}
if ( !player isbonuscardactive( 5, player.class_num ) || player isbonuscardactive( 4, player.class_num ) && player isbonuscardactive( 3, player.class_num ) )
{
player addplayerstat( "kill_with_2_perks_same_category", 1 );
}
baseweaponname = getreffromitemindex( getbaseweaponitemindex( weapon ) ) + "_mp";
if ( isDefined( player.weaponkills[ baseweaponname ] ) )
{
player.weaponkills[ baseweaponname ]++;
if ( player.weaponkills[ baseweaponname ] == 5 )
{
player addweaponstat( baseweaponname, "killstreak_5", 1 );
}
if ( player.weaponkills[ baseweaponname ] == 10 )
{
player addweaponstat( baseweaponname, "killstreak_10", 1 );
}
}
else
{
player.weaponkills[ baseweaponname ] = 1;
}
attachmentname = player getweaponoptic( weapon );
if ( isDefined( attachmentname ) && attachmentname != "" )
{
if ( isDefined( player.attachmentkills[ attachmentname ] ) )
{
player.attachmentkills[ attachmentname ]++;
if ( player.attachmentkills[ attachmentname ] == 5 )
{
player addweaponstat( weapon, "killstreak_5_attachment", 1 );
}
}
else
{
player.attachmentkills[ attachmentname ] = 1;
}
}
/#
assert( isDefined( player.activecounteruavs ) );
#/
/#
assert( isDefined( player.activeuavs ) );
#/
/#
assert( isDefined( player.activesatellites ) );
#/
if ( player.activeuavs > 0 )
{
player addplayerstat( "kill_while_uav_active", 1 );
}
if ( player.activecounteruavs > 0 )
{
player addplayerstat( "kill_while_cuav_active", 1 );
}
if ( player.activesatellites > 0 )
{
player addplayerstat( "kill_while_satellite_active", 1 );
}
if ( isDefined( attacker.tacticalinsertiontime ) && ( attacker.tacticalinsertiontime + 5000 ) > time )
{
player addplayerstat( "kill_after_tac_insert", 1 );
player addweaponstat( "tactical_insertion_mp", "CombatRecordStat", 1 );
}
if ( isDefined( victim.tacticalinsertiontime ) && ( victim.tacticalinsertiontime + 5000 ) > time )
{
player addweaponstat( "tactical_insertion_mp", "headshots", 1 );
}
if ( isDefined( level.isplayertrackedfunc ) )
{
if ( attacker [[ level.isplayertrackedfunc ]]( victim, time ) )
{
attacker addplayerstat( "kill_enemy_revealed_by_sensor", 1 );
attacker addweaponstat( "sensor_grenade_mp", "CombatRecordStat", 1 );
}
}
if ( level.teambased )
{
activeempowner = level.empowners[ player.team ];
if ( isDefined( activeempowner ) )
{
if ( activeempowner == player )
{
player addplayerstat( "kill_while_emp_active", 1 );
}
}
}
else
{
if ( isDefined( level.empplayer ) )
{
if ( level.empplayer == player )
{
player addplayerstat( "kill_while_emp_active", 1 );
}
}
}
if ( isDefined( player.flakjacketclaymore[ victim.clientid ] ) && player.flakjacketclaymore[ victim.clientid ] == 1 )
{
player addplayerstat( "survive_claymore_kill_planter_flak_jacket_equipped", 1 );
}
if ( isDefined( player.dogsactive ) )
{
if ( weapon != "dog_bite_mp" )
{
player.dogsactivekillstreak++;
if ( player.dogsactivekillstreak > 5 )
{
player addplayerstat( "killstreak_5_dogs", 1 );
}
}
}
isstunned = 0;
if ( victim maps/mp/_utility::isflashbanged() )
{
if ( isDefined( victim.lastflashedby ) && victim.lastflashedby == player )
{
player addplayerstat( "kill_flashed_enemy", 1 );
player addweaponstat( "flash_grenade_mp", "CombatRecordStat", 1 );
}
isstunned = 1;
}
if ( isDefined( victim.concussionendtime ) && victim.concussionendtime > getTime() )
{
if ( isDefined( victim.lastconcussedby ) && victim.lastconcussedby == player )
{
player addplayerstat( "kill_concussed_enemy", 1 );
player addweaponstat( "concussion_grenade_mp", "CombatRecordStat", 1 );
}
isstunned = 1;
}
if ( isDefined( player.laststunnedby ) )
{
if ( player.laststunnedby == victim && ( player.laststunnedtime + 5000 ) > time )
{
player addplayerstat( "kill_enemy_who_shocked_you", 1 );
}
}
if ( isDefined( victim.laststunnedby ) && ( victim.laststunnedtime + 5000 ) > time )
{
isstunned = 1;
if ( victim.laststunnedby == player )
{
player addplayerstat( "kill_shocked_enemy", 1 );
player addweaponstat( "proximity_grenade_mp", "CombatRecordStat", 1 );
if ( data.smeansofdeath == "MOD_MELEE" )
{
player addplayerstat( "shock_enemy_then_stab_them", 1 );
}
}
}
if ( ( player.mantletime + 5000 ) > time )
{
player addplayerstat( "mantle_then_kill", 1 );
}
if ( isDefined( player.tookweaponfrom ) && isDefined( player.tookweaponfrom[ weapon ] ) && isDefined( player.tookweaponfrom[ weapon ].previousowner ) )
{
if ( level.teambased )
{
if ( player.tookweaponfrom[ weapon ].previousowner.team != player.team )
{
player.pickedupweaponkills[ weapon ]++;
player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 );
}
}
else
{
player.pickedupweaponkills[ weapon ]++;
player addplayerstat( "kill_enemy_with_picked_up_weapon", 1 );
}
if ( player.pickedupweaponkills[ weapon ] >= 5 )
{
player.pickedupweaponkills[ weapon ] = 0;
player addplayerstat( "killstreak_5_picked_up_weapon", 1 );
}
}
if ( isDefined( victim.explosiveinfo[ "originalOwnerKill" ] ) && victim.explosiveinfo[ "originalOwnerKill" ] == 1 )
{
if ( victim.explosiveinfo[ "damageExplosiveKill" ] == 1 )
{
player addplayerstat( "kill_enemy_shoot_their_explosive", 1 );
}
}
if ( data.attackerstance == "crouch" )
{
player addplayerstat( "kill_enemy_while_crouched", 1 );
}
else
{
if ( data.attackerstance == "prone" )
{
player addplayerstat( "kill_enemy_while_prone", 1 );
}
}
if ( data.victimstance == "prone" )
{
player addplayerstat( "kill_prone_enemy", 1 );
}
if ( data.smeansofdeath != "MOD_HEAD_SHOT" || data.smeansofdeath == "MOD_PISTOL_BULLET" && data.smeansofdeath == "MOD_RIFLE_BULLET" )
{
player genericbulletkill( data, victim, weapon );
}
if ( level.teambased )
{
if ( !isDefined( player.pers[ "kill_every_enemy" ] ) && level.playercount[ victim.pers[ "team" ] ] > 3 && player.pers[ "killed_players" ].size >= level.playercount[ victim.pers[ "team" ] ] )
{
player addplayerstat( "kill_every_enemy", 1 );
player.pers[ "kill_every_enemy" ] = 1;
}
}
switch( weaponclass )
{
case "weapon_pistol":
if ( data.smeansofdeath == "MOD_HEAD_SHOT" )
{
player.pers[ "pistolHeadshot" ]++;
if ( player.pers[ "pistolHeadshot" ] >= 10 )
{
player.pers[ "pistolHeadshot" ] = 0;
player addplayerstat( "pistolHeadshot_10_onegame", 1 );
}
}
break;
case "weapon_assault":
if ( data.smeansofdeath == "MOD_HEAD_SHOT" )
{
player.pers[ "assaultRifleHeadshot" ]++;
if ( player.pers[ "assaultRifleHeadshot" ] >= 5 )
{
player.pers[ "assaultRifleHeadshot" ] = 0;
player addplayerstat( "headshot_assault_5_onegame", 1 );
}
}
break;
case "weapon_lmg":
case "weapon_smg":
case "weapon_sniper":
if ( isDefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time )
{
player addplayerstat( "kill_enemy_one_bullet_sniper", 1 );
player addweaponstat( weapon, "kill_enemy_one_bullet_sniper", 1 );
if ( !isDefined( player.pers[ "one_shot_sniper_kills" ] ) )
{
player.pers[ "one_shot_sniper_kills" ] = 0;
}
player.pers[ "one_shot_sniper_kills" ]++;
if ( player.pers[ "one_shot_sniper_kills" ] == 10 )
{
player addplayerstat( "kill_10_enemy_one_bullet_sniper_onegame", 1 );
}
}
break;
case "weapon_cqb":
if ( isDefined( victim.firsttimedamaged ) && victim.firsttimedamaged == time )
{
player addplayerstat( "kill_enemy_one_bullet_shotgun", 1 );
player addweaponstat( weapon, "kill_enemy_one_bullet_shotgun", 1 );
if ( !isDefined( player.pers[ "one_shot_shotgun_kills" ] ) )
{
player.pers[ "one_shot_shotgun_kills" ] = 0;
}
player.pers[ "one_shot_shotgun_kills" ]++;
if ( player.pers[ "one_shot_shotgun_kills" ] == 10 )
{
player addplayerstat( "kill_10_enemy_one_bullet_shotgun_onegame", 1 );
}
}
break;
}
if ( data.smeansofdeath == "MOD_MELEE" )
{
if ( weaponhasattachment( weapon, "tacknife" ) )
{
player addplayerstat( "kill_enemy_with_tacknife", 1 );
player bladekill();
}
else if ( weapon == "knife_ballistic_mp" )
{
player bladekill();
player addweaponstat( weapon, "ballistic_knife_melee", 1 );
}
else if ( weapon == "knife_held_mp" || weapon == "knife_mp" )
{
player bladekill();
}
else
{
if ( weapon == "riotshield_mp" )
{
if ( ( victim.lastfiretime + 3000 ) > time )
{
player addweaponstat( weapon, "shield_melee_while_enemy_shooting", 1 );
}
}
}
}
else
{
if ( data.smeansofdeath == "MOD_IMPACT" && baseweaponname == "crossbow_mp" )
{
if ( weaponhasattachment( weapon, "stackfire" ) )
{
player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 );
}
}
else
{
if ( isDefined( ownerweaponatlaunch ) )
{
if ( weaponhasattachment( ownerweaponatlaunch, "stackfire" ) )
{
player addplayerstat( "KILL_CROSSBOW_STACKFIRE", 1 );
}
}
}
if ( weapon == "knife_ballistic_mp" )
{
player bladekill();
if ( isDefined( player.retreivedblades ) && player.retreivedblades > 0 )
{
player.retreivedblades--;
player addweaponstat( weapon, "kill_retrieved_blade", 1 );
}
}
}
lethalgrenadekill = 0;
switch( weapon )
{
case "bouncingbetty_mp":
lethalgrenadekill = 1;
player notify( "lethalGrenadeKill" );
break;
case "hatchet_mp":
player bladekill();
lethalgrenadekill = 1;
player notify( "lethalGrenadeKill" );
if ( isDefined( lastweaponbeforetoss ) )
{
if ( lastweaponbeforetoss == level.riotshield_name )
{
player addweaponstat( level.riotshield_name, "hatchet_kill_with_shield_equiped", 1 );
player addplayerstat( "hatchet_kill_with_shield_equiped", 1 );
}
}
break;
case "claymore_mp":
lethalgrenadekill = 1;
player notify( "lethalGrenadeKill" );
player addplayerstat( "kill_with_claymore", 1 );
if ( data.washacked )
{
player addplayerstat( "kill_with_hacked_claymore", 1 );
}
break;
case "satchel_charge_mp":
lethalgrenadekill = 1;
player notify( "lethalGrenadeKill" );
player addplayerstat( "kill_with_c4", 1 );
break;
case "destructible_car_mp":
player addplayerstat( "kill_enemy_withcar", 1 );
if ( isDefined( inflictor.destroyingweapon ) )
{
player addweaponstat( inflictor.destroyingweapon, "kills_from_cars", 1 );
}
break;
case "sticky_grenade_mp":
lethalgrenadekill = 1;
player notify( "lethalGrenadeKill" );
if ( isDefined( victim.explosiveinfo[ "stuckToPlayer" ] ) && victim.explosiveinfo[ "stuckToPlayer" ] == victim )
{
attacker.pers[ "stickExplosiveKill" ]++;
if ( attacker.pers[ "stickExplosiveKill" ] >= 5 )
{
attacker.pers[ "stickExplosiveKill" ] = 0;
player addplayerstat( "stick_explosive_kill_5_onegame", 1 );
}
}
break;
case "frag_grenade_mp":
lethalgrenadekill = 1;
player notify( "lethalGrenadeKill" );
if ( isDefined( data.victim.explosiveinfo[ "cookedKill" ] ) && data.victim.explosiveinfo[ "cookedKill" ] == 1 )
{
player addplayerstat( "kill_with_cooked_grenade", 1 );
}
if ( isDefined( data.victim.explosiveinfo[ "throwbackKill" ] ) && data.victim.explosiveinfo[ "throwbackKill" ] == 1 )
{
player addplayerstat( "kill_with_tossed_back_lethal", 1 );
}
break;
case "crossbow_mp":
case "explosive_bolt_mp":
if ( !isDefined( player.crossbowclipkillcount ) )
{
player.crossbowclipkillcount = 0;
}
player.crossbowclipkillcount++;
if ( player.crossbowclipkillcount >= weaponclipsize( "crossbow_mp" ) )
{
player.crossbowclipkillcount = 0;
player addweaponstat( "crossbow_mp", "crossbow_kill_clip", 1 );
}
break;
}
if ( lethalgrenadekill )
{
if ( player isbonuscardactive( 6, player.class_num ) )
{
player addbonuscardstat( 6, "kills", 1, player.class_num );
if ( !isDefined( player.pers[ "dangerCloseKills" ] ) )
{
player.pers[ "dangerCloseKills" ] = 0;
}
player.pers[ "dangerCloseKills" ]++;
if ( player.pers[ "dangerCloseKills" ] == 5 )
{
player addplayerstat( "kill_with_dual_lethal_grenades", 1 );
}
}
}
player perkkills( victim, isstunned, time );
}
}
perkkills( victim, isstunned, time )
{
player = self;
if ( player hasperk( "specialty_movefaster" ) )
{
player addplayerstat( "perk_movefaster_kills", 1 );
}
if ( player hasperk( "specialty_noname" ) )
{
player addplayerstat( "perk_noname_kills", 1 );
}
if ( player hasperk( "specialty_quieter" ) )
{
player addplayerstat( "perk_quieter_kills", 1 );
}
if ( player hasperk( "specialty_longersprint" ) )
{
if ( isDefined( player.lastsprinttime ) && ( getTime() - player.lastsprinttime ) < 2500 )
{
player addplayerstat( "perk_longersprint", 1 );
}
}
if ( player hasperk( "specialty_fastmantle" ) )
{
if ( isDefined( player.lastsprinttime ) && ( getTime() - player.lastsprinttime ) < 2500 && player playerads() >= 1 )
{
player addplayerstat( "perk_fastmantle_kills", 1 );
}
}
if ( player hasperk( "specialty_loudenemies" ) )
{
player addplayerstat( "perk_loudenemies_kills", 1 );
}
if ( isstunned == 1 && player hasperk( "specialty_stunprotection" ) )
{
player addplayerstat( "perk_protection_stun_kills", 1 );
}
/#
assert( isDefined( victim.activecounteruavs ) );
#/
activeemp = 0;
if ( level.teambased )
{
_a905 = level.teams;
_k905 = getFirstArrayKey( _a905 );
while ( isDefined( _k905 ) )
{
team = _a905[ _k905 ];
if ( team == player.team )
{
}
else
{
if ( isDefined( level.empowners[ team ] ) )
{
activeemp = 1;
break;
}
}
else
{
_k905 = getNextArrayKey( _a905, _k905 );
}
}
}
else if ( isDefined( level.empplayer ) )
{
if ( level.empplayer != player )
{
activeemp = 1;
}
}
activecuav = 0;
if ( level.teambased )
{
_a932 = level.teams;
_k932 = getFirstArrayKey( _a932 );
while ( isDefined( _k932 ) )
{
team = _a932[ _k932 ];
if ( team == player.team )
{
}
else
{
if ( level.activecounteruavs[ team ] > 0 )
{
activecuav = 1;
break;
}
}
else
{
_k932 = getNextArrayKey( _a932, _k932 );
}
}
}
else players = level.players;
i = 0;
while ( i < players.size )
{
if ( players[ i ] != player )
{
if ( isDefined( level.activecounteruavs[ players[ i ].entnum ] ) && level.activecounteruavs[ players[ i ].entnum ] > 0 )
{
activecuav = 1;
break;
}
}
else
{
i++;
}
}
if ( activecuav == 1 || activeemp == 1 )
{
if ( player hasperk( "specialty_immunecounteruav" ) )
{
player addplayerstat( "perk_immune_cuav_kills", 1 );
}
}
activeuavvictim = 0;
if ( level.teambased )
{
if ( level.activeuavs[ victim.team ] > 0 )
{
activeuavvictim = 1;
}
}
else
{
if ( isDefined( level.activeuavs[ victim.entnum ] ) )
{
activeuavvictim = level.activeuavs[ victim.entnum ] > 0;
}
}
if ( activeuavvictim == 1 )
{
if ( player hasperk( "specialty_gpsjammer" ) )
{
player addplayerstat( "perk_gpsjammer_immune_kills", 1 );
}
}
if ( ( player.lastweaponchange + 5000 ) > time )
{
if ( player hasperk( "specialty_fastweaponswitch" ) )
{
player addplayerstat( "perk_fastweaponswitch_kill_after_swap", 1 );
}
}
if ( player.scavenged == 1 )
{
if ( player hasperk( "specialty_scavenger" ) )
{
player addplayerstat( "perk_scavenger_kills_after_resupply", 1 );
}
}
}
flakjacketprotected( weapon, attacker )
{
if ( weapon == "claymore_mp" )
{
self.flakjacketclaymore[ attacker.clientid ] = 1;
}
self addplayerstat( "perk_flak_survive", 1 );
}
earnedkillstreak()
{
if ( self hasperk( "specialty_earnmoremomentum" ) )
{
self addplayerstat( "perk_earnmoremomentum_earn_streak", 1 );
}
}
genericbulletkill( data, victim, weapon )
{
player = self;
time = data.time;
if ( player.pers[ "lastBulletKillTime" ] == time )
{
player.pers[ "bulletStreak" ]++;
}
else
{
player.pers[ "bulletStreak" ] = 1;
}
player.pers[ "lastBulletKillTime" ] = time;
if ( data.victim.idflagstime == time )
{
if ( data.victim.idflags & level.idflags_penetration )
{
player addplayerstat( "kill_enemy_through_wall", 1 );
if ( isDefined( weapon ) && weaponhasattachment( weapon, "fmj" ) )
{
player addplayerstat( "kill_enemy_through_wall_with_fmj", 1 );
}
}
}
}
ishighestscoringplayer( player )
{
if ( !isDefined( player.score ) || player.score < 1 )
{
return 0;
}
players = level.players;
if ( level.teambased )
{
team = player.pers[ "team" ];
}
else
{
team = "all";
}
highscore = player.score;
i = 0;
while ( i < players.size )
{
if ( !isDefined( players[ i ].score ) )
{
i++;
continue;
}
else if ( players[ i ] == player )
{
i++;
continue;
}
else if ( players[ i ].score < 1 )
{
i++;
continue;
}
else if ( team != "all" && players[ i ].pers[ "team" ] != team )
{
i++;
continue;
}
else
{
if ( players[ i ].score >= highscore )
{
return 0;
}
}
i++;
}
return 1;
}
spawnwatcher()
{
self endon( "disconnect" );
self.pers[ "stickExplosiveKill" ] = 0;
self.pers[ "pistolHeadshot" ] = 0;
self.pers[ "assaultRifleHeadshot" ] = 0;
self.pers[ "killNemesis" ] = 0;
while ( 1 )
{
self waittill( "spawned_player" );
self.pers[ "longshotsPerLife" ] = 0;
self.flakjacketclaymore = [];
self.weaponkills = [];
self.attachmentkills = [];
self.retreivedblades = 0;
self.lastreloadtime = 0;
self.crossbowclipkillcount = 0;
self thread watchfordtp();
self thread watchformantle();
self thread monitor_player_sprint();
}
}
pickedupballisticknife()
{
self.retreivedblades++;
}
watchfordtp()
{
self endon( "disconnect" );
self endon( "death" );
self.dtptime = 0;
while ( 1 )
{
self waittill( "dtp_end" );
self.dtptime = getTime() + 4000;
}
}
watchformantle()
{
self endon( "disconnect" );
self endon( "death" );
self.mantletime = 0;
while ( 1 )
{
self waittill( "mantle_start", mantleendtime );
self.mantletime = mantleendtime;
}
}
disarmedhackedcarepackage()
{
self addplayerstat( "disarm_hacked_carepackage", 1 );
}
destroyed_car()
{
if ( !isDefined( self ) || !isplayer( self ) )
{
return;
}
self addplayerstat( "destroy_car", 1 );
}
killednemesis()
{
self.pers[ "killNemesis" ]++;
if ( self.pers[ "killNemesis" ] >= 5 )
{
self.pers[ "killNemesis" ] = 0;
self addplayerstat( "kill_nemesis", 1 );
}
}
killwhiledamagingwithhpm()
{
self addplayerstat( "kill_while_damaging_with_microwave_turret", 1 );
}
longdistancehatchetkill()
{
self addplayerstat( "long_distance_hatchet_kill", 1 );
}
blockedsatellite()
{
self addplayerstat( "activate_cuav_while_enemy_satelite_active", 1 );
}
longdistancekill()
{
self.pers[ "longshotsPerLife" ]++;
if ( self.pers[ "longshotsPerLife" ] >= 3 )
{
self.pers[ "longshotsPerLife" ] = 0;
self addplayerstat( "longshot_3_onelife", 1 );
}
}
challengeroundend( data )
{
player = data.player;
winner = data.winner;
if ( endedearly( winner ) )
{
return;
}
if ( level.teambased )
{
winnerscore = game[ "teamScores" ][ winner ];
loserscore = getlosersteamscores( winner );
}
switch( level.gametype )
{
case "sd":
if ( player.team == winner )
{
if ( game[ "challenge" ][ winner ][ "allAlive" ] )
{
player addgametypestat( "round_win_no_deaths", 1 );
}
if ( isDefined( player.lastmansddefeat3enemies ) )
{
player addgametypestat( "last_man_defeat_3_enemies", 1 );
}
}
break;
default:
}
}
}
roundend( winner )
{
wait 0,05;
data = spawnstruct();
data.time = getTime();
if ( level.teambased )
{
if ( isDefined( winner ) && isDefined( level.teams[ winner ] ) )
{
data.winner = winner;
}
}
else
{
if ( isDefined( winner ) )
{
data.winner = winner;
}
}
index = 0;
while ( index < level.placement[ "all" ].size )
{
data.player = level.placement[ "all" ][ index ];
data.place = index;
dochallengecallback( "roundEnd", data );
index++;
}
}
gameend( winner )
{
wait 0,05;
data = spawnstruct();
data.time = getTime();
if ( level.teambased )
{
if ( isDefined( winner ) && isDefined( level.teams[ winner ] ) )
{
data.winner = winner;
}
}
else
{
if ( isDefined( winner ) && isplayer( winner ) )
{
data.winner = winner;
}
}
index = 0;
while ( index < level.placement[ "all" ].size )
{
data.player = level.placement[ "all" ][ index ];
data.place = index;
dochallengecallback( "gameEnd", data );
index++;
}
}
getfinalkill( player )
{
if ( isplayer( player ) )
{
player addplayerstat( "get_final_kill", 1 );
}
}
destroyrcbomb( weaponname )
{
self destroyscorestreak( weaponname );
if ( weaponname == "hatchet_mp" )
{
self addplayerstat( "destroy_rcbomb_with_hatchet", 1 );
}
}
capturedcrate()
{
if ( isDefined( self.lastrescuedby ) && isDefined( self.lastrescuedtime ) )
{
if ( ( self.lastrescuedtime + 5000 ) > getTime() )
{
self.lastrescuedby addplayerstat( "defend_teammate_who_captured_package", 1 );
}
}
}
destroyscorestreak( weaponname )
{
if ( isDefined( weaponname ) && weaponname == "qrdrone_turret_mp" )
{
self addplayerstat( "destroy_score_streak_with_qrdrone", 1 );
}
}
capturedobjective( capturetime )
{
if ( isDefined( self.smokegrenadetime ) && isDefined( self.smokegrenadeposition ) )
{
if ( ( self.smokegrenadetime + 14000 ) > capturetime )
{
distsq = distancesquared( self.smokegrenadeposition, self.origin );
if ( distsq < 57600 )
{
self addplayerstat( "capture_objective_in_smoke", 1 );
self addweaponstat( "willy_pete_mp", "CombatRecordStat", 1 );
return;
}
}
}
}
hackedordestroyedequipment()
{
if ( self hasperk( "specialty_showenemyequipment" ) )
{
self addplayerstat( "perk_hacker_destroy", 1 );
}
}
destroyedequipment( weaponname )
{
if ( isDefined( weaponname ) && weaponname == "emp_grenade_mp" )
{
self addplayerstat( "destroy_equipment_with_emp_grenade", 1 );
self addweaponstat( "emp_grenade_mp", "combatRecordStat", 1 );
}
self addplayerstat( "destroy_equipment", 1 );
self hackedordestroyedequipment();
}
destroyedtacticalinsert()
{
if ( !isDefined( self.pers[ "tacticalInsertsDestroyed" ] ) )
{
self.pers[ "tacticalInsertsDestroyed" ] = 0;
}
self.pers[ "tacticalInsertsDestroyed" ]++;
if ( self.pers[ "tacticalInsertsDestroyed" ] >= 5 )
{
self.pers[ "tacticalInsertsDestroyed" ] = 0;
self addplayerstat( "destroy_5_tactical_inserts", 1 );
}
}
bladekill()
{
if ( !isDefined( self.pers[ "bladeKills" ] ) )
{
self.pers[ "bladeKills" ] = 0;
}
self.pers[ "bladeKills" ]++;
if ( self.pers[ "bladeKills" ] >= 15 )
{
self.pers[ "bladeKills" ] = 0;
self addplayerstat( "kill_15_with_blade", 1 );
}
}
destroyedexplosive( weaponname )
{
self destroyedequipment( weaponname );
self addplayerstat( "destroy_explosive", 1 );
}
assisted()
{
self addplayerstat( "assist", 1 );
}
earnedmicrowaveassistscore( score )
{
self addplayerstat( "assist_score_microwave_turret", score );
self addplayerstat( "assist_score_killstreak", score );
}
earnedcuavassistscore( score )
{
self addplayerstat( "assist_score_cuav", score );
self addplayerstat( "assist_score_killstreak", score );
self addweaponstat( "counteruav_mp", "assists", 1 );
}
earneduavassistscore( score )
{
self addplayerstat( "assist_score_uav", score );
self addplayerstat( "assist_score_killstreak", score );
self addweaponstat( "radar_mp", "assists", 1 );
}
earnedsatelliteassistscore( score )
{
self addplayerstat( "assist_score_satellite", score );
self addplayerstat( "assist_score_killstreak", score );
self addweaponstat( "radardirection_mp", "assists", 1 );
}
earnedempassistscore( score )
{
self addplayerstat( "assist_score_emp", score );
self addplayerstat( "assist_score_killstreak", score );
self addweaponstat( "emp_mp", "assists", 1 );
}
teamcompletedchallenge( team, challenge )
{
players = get_players();
i = 0;
while ( i < players.size )
{
if ( isDefined( players[ i ].team ) && players[ i ].team == team )
{
players[ i ] addgametypestat( challenge, 1 );
}
i++;
}
}
endedearly( winner )
{
if ( level.hostforcedend )
{
return 1;
}
if ( !isDefined( winner ) )
{
return 1;
}
if ( level.teambased )
{
if ( winner == "tie" )
{
return 1;
}
}
return 0;
}
getlosersteamscores( winner )
{
teamscores = 0;
_a1474 = level.teams;
_k1474 = getFirstArrayKey( _a1474 );
while ( isDefined( _k1474 ) )
{
team = _a1474[ _k1474 ];
if ( team == winner )
{
}
else
{
teamscores += game[ "teamScores" ][ team ];
}
_k1474 = getNextArrayKey( _a1474, _k1474 );
}
return teamscores;
}
didloserfailchallenge( winner, challenge )
{
_a1487 = level.teams;
_k1487 = getFirstArrayKey( _a1487 );
while ( isDefined( _k1487 ) )
{
team = _a1487[ _k1487 ];
if ( team == winner )
{
}
else
{
if ( game[ "challenge" ][ team ][ challenge ] )
{
return 0;
}
}
_k1487 = getNextArrayKey( _a1487, _k1487 );
}
return 1;
}
challengegameend( data )
{
player = data.player;
winner = data.winner;
if ( isDefined( level.scoreeventgameendcallback ) )
{
[[ level.scoreeventgameendcallback ]]( data );
}
if ( endedearly( winner ) )
{
return;
}
if ( level.teambased )
{
winnerscore = game[ "teamScores" ][ winner ];
loserscore = getlosersteamscores( winner );
}
switch( level.gametype )
{
case "tdm":
if ( player.team == winner )
{
if ( winnerscore >= ( loserscore + 20 ) )
{
player addgametypestat( "CRUSH", 1 );
}
}
mostkillsleastdeaths = 1;
index = 0;
while ( index < level.placement[ "all" ].size )
{
if ( level.placement[ "all" ][ index ].deaths < player.deaths )
{
mostkillsleastdeaths = 0;
}
if ( level.placement[ "all" ][ index ].kills > player.kills )
{
mostkillsleastdeaths = 0;
}
index++;
}
if ( mostkillsleastdeaths && player.kills > 0 && level.placement[ "all" ].size > 3 )
{
player addgametypestat( "most_kills_least_deaths", 1 );
}
break;
case "dm":
if ( player == winner )
{
if ( level.placement[ "all" ].size >= 2 )
{
secondplace = level.placement[ "all" ][ 1 ];
if ( player.kills >= ( secondplace.kills + 7 ) )
{
player addgametypestat( "CRUSH", 1 );
}
}
}
break;
case "ctf":
if ( player.team == winner )
{
if ( loserscore == 0 )
{
player addgametypestat( "SHUT_OUT", 1 );
}
}
break;
case "dom":
if ( player.team == winner )
{
if ( winnerscore >= ( loserscore + 70 ) )
{
player addgametypestat( "CRUSH", 1 );
}
}
break;
case "hq":
if ( player.team == winner && winnerscore > 0 )
{
if ( winnerscore >= ( loserscore + 70 ) )
{
player addgametypestat( "CRUSH", 1 );
}
}
break;
case "koth":
if ( player.team == winner && winnerscore > 0 )
{
if ( winnerscore >= ( loserscore + 70 ) )
{
player addgametypestat( "CRUSH", 1 );
}
}
if ( player.team == winner && winnerscore > 0 )
{
if ( winnerscore >= ( loserscore + 110 ) )
{
player addgametypestat( "ANNIHILATION", 1 );
}
}
break;
case "dem":
if ( player.team == game[ "defenders" ] && player.team == winner )
{
if ( loserscore == 0 )
{
player addgametypestat( "SHUT_OUT", 1 );
}
}
break;
case "sd":
if ( player.team == winner )
{
if ( loserscore <= 1 )
{
player addgametypestat( "CRUSH", 1 );
}
}
default:
break;
}
}
}
multikill( killcount, weapon )
{
if ( killcount >= 3 && isDefined( self.lastkillwheninjured ) )
{
if ( ( self.lastkillwheninjured + 5000 ) > getTime() )
{
self addplayerstat( "multikill_3_near_death", 1 );
}
}
}
domattackermultikill( killcount )
{
self addgametypestat( "kill_2_enemies_capturing_your_objective", 1 );
}
totaldomination( team )
{
teamcompletedchallenge( team, "control_3_points_3_minutes" );
}
holdflagentirematch( team, label )
{
switch( label )
{
case "_a":
event = "hold_a_entire_match";
break;
case "_b":
event = "hold_b_entire_match";
break;
case "_c":
event = "hold_c_entire_match";
break;
default:
return;
}
teamcompletedchallenge( team, event );
}
capturedbfirstminute()
{
self addgametypestat( "capture_b_first_minute", 1 );
}
controlzoneentirely( team )
{
teamcompletedchallenge( team, "control_zone_entirely" );
}
multi_lmg_smg_kill()
{
self addplayerstat( "multikill_3_lmg_or_smg_hip_fire", 1 );
}
killedzoneattacker( weapon )
{
if ( weapon != "planemortar_mp" || weapon == "remote_missile_missile_mp" && weapon == "remote_missile_bomblet_mp" )
{
self thread updatezonemultikills();
}
}
killeddog()
{
origin = self.origin;
while ( level.teambased )
{
teammates = get_team_alive_players_s( self.team );
_a1714 = teammates.a;
_k1714 = getFirstArrayKey( _a1714 );
while ( isDefined( _k1714 ) )
{
player = _a1714[ _k1714 ];
if ( player == self )
{
}
else
{
distsq = distancesquared( origin, player.origin );
if ( distsq < 57600 )
{
self addplayerstat( "killed_dog_close_to_teammate", 1 );
return;
}
}
else
{
_k1714 = getNextArrayKey( _a1714, _k1714 );
}
}
}
}
updatezonemultikills()
{
self endon( "disconnect" );
level endon( "game_ended" );
self notify( "updateRecentZoneKills" );
self endon( "updateRecentZoneKills" );
if ( !isDefined( self.recentzonekillcount ) )
{
self.recentzonekillcount = 0;
}
self.recentzonekillcount++;
wait 4;
if ( self.recentzonekillcount > 1 )
{
self addplayerstat( "multikill_2_zone_attackers", 1 );
}
self.recentzonekillcount = 0;
}
multi_rcbomb_kill()
{
self addplayerstat( "muiltikill_2_with_rcbomb", 1 );
}
multi_remotemissile_kill()
{
self addplayerstat( "multikill_3_remote_missile", 1 );
}
multi_mgl_kill()
{
self addplayerstat( "multikill_3_with_mgl", 1 );
}
immediatecapture()
{
self addgametypestat( "immediate_capture", 1 );
}
killedlastcontester()
{
self addgametypestat( "contest_then_capture", 1 );
}
bothbombsdetonatewithintime()
{
self addgametypestat( "both_bombs_detonate_10_seconds", 1 );
}
fullclipnomisses( weaponclass, weapon )
{
}
destroyedturret( weaponname )
{
self destroyscorestreak( weaponname );
self addplayerstat( "destroy_turret", 1 );
}
calledincarepackage()
{
self.pers[ "carepackagesCalled" ]++;
if ( self.pers[ "carepackagesCalled" ] >= 3 )
{
self addplayerstat( "call_in_3_care_packages", 1 );
self.pers[ "carepackagesCalled" ] = 0;
}
}
destroyedhelicopter( attacker, weapon, damagetype, playercontrolled )
{
attacker destroyscorestreak( weapon );
if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" )
{
attacker addplayerstat( "destroyed_helicopter_with_bullet", 1 );
}
}
destroyedqrdrone( damagetype, weapon )
{
self destroyscorestreak( weapon );
self addplayerstat( "destroy_qrdrone", 1 );
if ( damagetype == "MOD_RIFLE_BULLET" || damagetype == "MOD_PISTOL_BULLET" )
{
self addplayerstat( "destroyed_qrdrone_with_bullet", 1 );
}
self destroyedplayercontrolledaircraft();
}
destroyedplayercontrolledaircraft()
{
if ( self hasperk( "specialty_noname" ) )
{
self addplayerstat( "destroy_helicopter", 1 );
}
}
destroyedaircraft( attacker, weapon )
{
attacker destroyscorestreak( weapon );
if ( isDefined( weapon ) )
{
if ( weapon == "emp_mp" || weapon == "killstreak_emp_mp" )
{
attacker addplayerstat( "destroy_aircraft_with_emp", 1 );
}
else
{
if ( weapon == "missile_drone_projectile_mp" || weapon == "missile_drone_mp" )
{
attacker addplayerstat( "destroy_aircraft_with_missile_drone", 1 );
}
}
}
if ( attacker hasperk( "specialty_nottargetedbyairsupport" ) )
{
attacker addplayerstat( "perk_nottargetedbyairsupport_destroy_aircraft", 1 );
}
attacker addplayerstat( "destroy_aircraft", 1 );
}
killstreakten()
{
primary = self getloadoutitem( self.class_num, "primary" );
if ( primary != 0 )
{
return;
}
secondary = self getloadoutitem( self.class_num, "secondary" );
if ( secondary != 0 )
{
return;
}
primarygrenade = self getloadoutitem( self.class_num, "primarygrenade" );
if ( primarygrenade != 0 )
{
return;
}
specialgrenade = self getloadoutitem( self.class_num, "specialgrenade" );
if ( specialgrenade != 0 )
{
return;
}
numspecialties = 0;
while ( numspecialties < level.maxspecialties )
{
perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) );
if ( perk != 0 )
{
return;
}
numspecialties++;
}
self addplayerstat( "killstreak_10_no_weapons_perks", 1 );
}
scavengedgrenade()
{
self endon( "disconnect" );
self endon( "death" );
self notify( "scavengedGrenade" );
self endon( "scavengedGrenade" );
for ( ;; )
{
self waittill( "lethalGrenadeKill" );
self addplayerstat( "kill_with_resupplied_lethal_grenade", 1 );
}
}
stunnedtankwithempgrenade( attacker )
{
attacker addplayerstat( "stun_aitank_wIth_emp_grenade", 1 );
}
playerkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, shitloc, attackerstance )
{
/#
print( level.gametype );
#/
self.anglesondeath = self getplayerangles();
if ( isDefined( attacker ) )
{
attacker.anglesonkill = attacker getplayerangles();
}
if ( !isDefined( sweapon ) )
{
sweapon = "none";
}
self endon( "disconnect" );
data = spawnstruct();
data.victim = self;
data.victimstance = self getstance();
data.einflictor = einflictor;
data.attacker = attacker;
data.attackerstance = attackerstance;
data.idamage = idamage;
data.smeansofdeath = smeansofdeath;
data.sweapon = sweapon;
data.shitloc = shitloc;
data.time = getTime();
if ( isDefined( einflictor ) && isDefined( einflictor.lastweaponbeforetoss ) )
{
data.lastweaponbeforetoss = einflictor.lastweaponbeforetoss;
}
if ( isDefined( einflictor ) && isDefined( einflictor.ownerweaponatlaunch ) )
{
data.ownerweaponatlaunch = einflictor.ownerweaponatlaunch;
}
waslockingon = 0;
if ( isDefined( einflictor.locking_on ) )
{
waslockingon |= einflictor.locking_on;
}
if ( isDefined( einflictor.locked_on ) )
{
waslockingon |= einflictor.locked_on;
}
waslockingon &= 1 << data.victim.entnum;
if ( waslockingon != 0 )
{
data.waslockingon = 1;
}
else
{
data.waslockingon = 0;
}
data.washacked = einflictor maps/mp/_utility::ishacked();
data.wasplanting = data.victim.isplanting;
if ( !isDefined( data.wasplanting ) )
{
data.wasplanting = 0;
}
data.wasdefusing = data.victim.isdefusing;
if ( !isDefined( data.wasdefusing ) )
{
data.wasdefusing = 0;
}
data.victimweapon = data.victim.currentweapon;
data.victimonground = data.victim isonground();
if ( isplayer( attacker ) )
{
data.attackeronground = data.attacker isonground();
if ( !isDefined( data.attackerstance ) )
{
data.attackerstance = data.attacker getstance();
}
}
else
{
data.attackeronground = 0;
data.attackerstance = "stand";
}
waitandprocessplayerkilledcallback( data );
data.attacker notify( "playerKilledChallengesProcessed" );
}
waittillslowprocessallowed()
{
while ( level.lastslowprocessframe == getTime() )
{
wait 0,05;
}
level.lastslowprocessframe = getTime();
}
doscoreeventcallback( callback, data )
{
if ( !isDefined( level.scoreeventcallbacks ) )
{
return;
}
if ( !isDefined( level.scoreeventcallbacks[ callback ] ) )
{
return;
}
if ( isDefined( data ) )
{
i = 0;
while ( i < level.scoreeventcallbacks[ callback ].size )
{
thread [[ level.scoreeventcallbacks[ callback ][ i ] ]]( data );
i++;
}
}
else i = 0;
while ( i < level.scoreeventcallbacks[ callback ].size )
{
thread [[ level.scoreeventcallbacks[ callback ][ i ] ]]();
i++;
}
}
waitandprocessplayerkilledcallback( data )
{
if ( isDefined( data.attacker ) )
{
data.attacker endon( "disconnect" );
}
wait 0,05;
waittillslowprocessallowed();
level thread dochallengecallback( "playerKilled", data );
level thread doscoreeventcallback( "playerKilled", data );
}
weaponisknife( weapon )
{
if ( weapon != "knife_held_mp" || weapon == "knife_mp" && weapon == "knife_ballistic_mp" )
{
return 1;
}
return 0;
}
eventreceived( eventname )
{
self endon( "disconnect" );
waittillslowprocessallowed();
switch( level.gametype )
{
case "tdm":
if ( eventname == "killstreak_10" )
{
self addgametypestat( "killstreak_10", 1 );
}
else if ( eventname == "killstreak_15" )
{
self addgametypestat( "killstreak_15", 1 );
}
else if ( eventname == "killstreak_20" )
{
self addgametypestat( "killstreak_20", 1 );
}
else if ( eventname == "multikill_3" )
{
self addgametypestat( "multikill_3", 1 );
}
else if ( eventname == "kill_enemy_who_killed_teammate" )
{
self addgametypestat( "kill_enemy_who_killed_teammate", 1 );
}
else
{
if ( eventname == "kill_enemy_injuring_teammate" )
{
self addgametypestat( "kill_enemy_injuring_teammate", 1 );
}
}
break;
case "dm":
if ( eventname == "killstreak_10" )
{
self addgametypestat( "killstreak_10", 1 );
}
else if ( eventname == "killstreak_15" )
{
self addgametypestat( "killstreak_15", 1 );
}
else if ( eventname == "killstreak_20" )
{
self addgametypestat( "killstreak_20", 1 );
}
else
{
if ( eventname == "killstreak_30" )
{
self addgametypestat( "killstreak_30", 1 );
}
}
break;
case "sd":
if ( eventname == "defused_bomb_last_man_alive" )
{
self addgametypestat( "defused_bomb_last_man_alive", 1 );
}
else if ( eventname == "elimination_and_last_player_alive" )
{
self addgametypestat( "elimination_and_last_player_alive", 1 );
}
else if ( eventname == "killed_bomb_planter" )
{
self addgametypestat( "killed_bomb_planter", 1 );
}
else
{
if ( eventname == "killed_bomb_defuser" )
{
self addgametypestat( "killed_bomb_defuser", 1 );
}
}
break;
case "ctf":
if ( eventname == "kill_flag_carrier" )
{
self addgametypestat( "kill_flag_carrier", 1 );
}
else
{
if ( eventname == "defend_flag_carrier" )
{
self addgametypestat( "defend_flag_carrier", 1 );
}
}
break;
case "dem":
if ( eventname == "killed_bomb_planter" )
{
self addgametypestat( "killed_bomb_planter", 1 );
}
else
{
if ( eventname == "killed_bomb_defuser" )
{
self addgametypestat( "killed_bomb_defuser", 1 );
}
}
break;
default:
}
}
}
monitor_player_sprint()
{
self endon( "disconnect" );
self endon( "death" );
self.lastsprinttime = undefined;
while ( 1 )
{
self waittill( "sprint_begin" );
self waittill( "sprint_end" );
self.lastsprinttime = getTime();
}
}