Post: Hawkins Zombies Edit- Juggernog Machine, Random Weapon Box And More!
03-05-2011, 12:40 PM #1
iHaXz_xD
Bounty hunter
(adsbygoogle = window.adsbygoogle || []).push({}); This Is My Edit Of Hawkins Zombies

XBOX DOWNLOAD LINK: You must login or register to view this content.

PS3 DOWNLOAD LINK: You must login or register to view this content.


UPDATE: XBOX:You must login or register to view this content.

UPDATE: PS3:You must login or register to view this content.

UPDATE INFO:
The Update Allows You To Spawn The Jugger-Nog Machine In Every Map There Is, Ive Made It A Carepackage, Ive Made It So You Can Upgrade Your Health To 500 Really Quick If You Purchase The Jugger-Nog, Its Basically Like Buying Loads Of Health But Its Really Quick Smile There Might Be A Few Bugs With it, Just Report Them To Me


This Is 100% Working And Tested Read At The Bottom Of The Page For The Lastest Update

*************************************************************************

NEW Features:

JuggerNog Perk Machine - $900 From Shop menu Made It Work, Download The Update And It Works On Every Map Smile

Random Weapon Box - $800 From Shop Menu

NEW Pack-O-Punch - Page 3 Of Shop Menu - Upgrades Your Gun And Explosive Bullets Download Link At The Bottom Of The Page

Coloured XP When You Kill Someone (TESTED AND WORKS)

And Finally The Host Gets UFO Mode Just Crouch And Knife


***************************************************
Credits Smile

ITheFallenI For His Coloured XP Code

Mabez96 For His Awesome Juggernog Perk Machine

Credit For The Guy Who Made UFO, I Think It Was Lost998 Or Somthing

Hawkin And Jeffikins For The Zombieland Patch

And Killindryl For The Orginal Zombies Patch

xQuZe- For His Orginal Model Script

And Finally x-DaftVader-x For His Pimped Weapon Box Smile


***************************************************

UPDATE V2

Added Pack-O-Punch ( Thanks teh1337)

You Can Find This On Page 3 Of The Shop Menu

XBOX DOWNLOASad AwesomeFIXESad Awesome You must login or register to view this content.

PS3 DOWNLOASad Awesome FIXESad Awesome You must login or register to view this content.


UPDATE V2.1

UPDATE V2.1 DOWNLOAD XBOX: You must login or register to view this content.

UPDATE V2.1 DOWNLOAD PS3: You must login or register to view this content.


UPDATE INFO

The Update V2.1 Basically Fixed Bugs And I Added A Dvar That Stops Zombies Completly Changing Teams So They Cant Go Into Spectator, Humans Can Still Change Teams If They Want, Its Just The Zombies, The Dvar Goes Away At The End Of The Game, And Starts Again When Its Started Up Smile

Report Any Bugs To Me
(adsbygoogle = window.adsbygoogle || []).push({});

The following 7 users say thank you to iHaXz_xD for this useful post:

Brian235026, hydro_122499, iLiAmZz-, Nikeymikey, REZNET \|/, The Timer, Threatz2Fresshh
03-14-2011, 11:38 PM #65
Threatz2Fresshh
I was 2fresshh before
Originally posted by xD View Post
Yea Sure, I'd Put Them In Smile


how do i put codes as a spoiler so i dont spam a page?
03-15-2011, 04:11 PM #66
iHaXz_xD
Bounty hunter
Originally posted by goatybeard View Post
how do i put codes as a spoiler so i dont spam a page?


Click "Go Advanced" Then Find Their At The Top Of The Page "Spolier" Or "Code Wrap"
03-15-2011, 11:11 PM #67
Threatz2Fresshh
I was 2fresshh before
Perks:
    #include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\perks\_perkfunctions;

init()
{
level.perkFuncs = [];

precacheShader( "combathigh_overlay" );
precacheShader( "cardicon_juggernaut_2" );

precacheModel( "weapon_riot_shield_mp" );
precacheModel( "viewmodel_riot_shield_mp" );
precacheString( &"MPUI_CHANGING_KIT" );

//level.spawnGlowSplat = loadfx( "misc/flare_ambient_destroy" );

level.spawnGlowModel["enemy"] = "mil_emergency_flare_mp";
level.spawnGlowModel["friendly"] = "mil_emergency_flare_mp";
level.spawnGlow["enemy"] = loadfx( "misc/flare_ambient" );
level.spawnGlow["friendly"] = loadfx( "misc/flare_ambient_green" );
level.c4Death = loadfx( "explosions/oxygen_tank_explosion" );

level.spawnFire = loadfx( "props/barrelexp" );

precacheModel( level.spawnGlowModel["friendly"] );
precacheModel( level.spawnGlowModel["enemy"] );

precacheString( &"MP_DESTROY_TI" );

precacheShaders();

level._effect["ricochet"] = loadfx( "impacts/large_metalhit_1" );

// perks that currently only exist in script: these will error if passed to "setPerk", etc... CASE SENSITIVE! must be lower
level.scriptPerks = [];
level.perkSetFuncs = [];
level.perkUnsetFuncs = [];
level.fauxPerks = [];

level.scriptPerks["specialty_blastshield"] = true;
level.scriptPerks["_specialty_blastshield"] = true;
level.scriptPerks["specialty_akimbo"] = true;
level.scriptPerks["specialty_siege"] = true;
level.scriptPerks["specialty_falldamage"] = true;
level.scriptPerks["specialty_fmj"] = true;
level.scriptPerks["specialty_shield"] = true;
level.scriptPerks["specialty_feigndeath"] = true;
level.scriptPerks["specialty_shellshock"] = true;
level.scriptPerks["specialty_delaymine"] = true;
level.scriptPerks["specialty_localjammer"] = true;
level.scriptPerks["specialty_thermal"] = true;
level.scriptPerks["specialty_finalstand"] = true;
level.scriptPerks["specialty_blackbox"] = true;
level.scriptPerks["specialty_steelnerves"] = true;
level.scriptPerks["specialty_flashgrenade"] = true;
level.scriptPerks["specialty_smokegrenade"] = true;
level.scriptPerks["specialty_concussiongrenade"] = true;
level.scriptPerks["specialty_challenger"] = true;
level.scriptPerks["specialty_tacticalinsertion"] = true;
level.scriptPerks["specialty_saboteur"] = true;
level.scriptPerks["specialty_endgame"] = true;
level.scriptPerks["specialty_rearview"] = true;
level.scriptPerks["specialty_hardline"] = true;
level.scriptPerks["specialty_ac130"] = true;
level.scriptPerks["specialty_sentry_minigun"] = true;
level.scriptPerks["specialty_predator_missile"] = true;
level.scriptPerks["specialty_helicopter_minigun"] = true;
level.scriptPerks["specialty_tank"] = true;
level.scriptPerks["specialty_precision_airstrike"] = true;
level.scriptPerks["specialty_bling"] = true;
level.scriptPerks["specialty_carepackage"] = true;
level.scriptPerks["specialty_onemanarmy"] = true;
level.scriptPerks["specialty_littlebird_support"] = true;
level.scriptPerks["specialty_primarydeath"] = true;
level.scriptPerks["specialty_secondarybling"] = true;
level.scriptPerks["specialty_combathigh"] = true;
level.scriptPerks["specialty_c4death"] = true;
level.scriptPerks["specialty_explosivedamage"] = true;
level.scriptPerks["specialty_copycat"] = true;
level.scriptPerks["specialty_laststandoffhand"] = true;
level.scriptPerks["specialty_dangerclose"] = true;

level.scriptPerks["specialty_extraspecialduration"] = true;
level.scriptPerks["specialty_rollover"] = true;
level.scriptPerks["specialty_armorpiercing"] = true;
level.scriptPerks["specialty_omaquickchange"] = true;
level.scriptPerks["specialty_fastmeleerecovery"] = true;

level.scriptPerks["_specialty_rearview"] = true;
level.scriptPerks["_specialty_onemanarmy"] = true;

level.fauxPerks["specialty_tacticalinsertion"] = true;
level.fauxPerks["specialty_shield"] = true;


/*
level.perkSetFuncs[""] = ::;
level.perkUnsetFuncs[""] = ::;
*/

level.perkSetFuncs["specialty_blastshield"] = ::setBlastShield;
level.perkUnsetFuncs["specialty_blastshield"] = ::unsetBlastShield;

level.perkSetFuncs["specialty_siege"] = ::setSiege;
level.perkUnsetFuncs["specialty_siege"] = ::unsetSiege;

level.perkSetFuncs["specialty_falldamage"] = ::setFreefall;
level.perkUnsetFuncs["specialty_falldamage"] = ::unsetFreefall;

level.perkSetFuncs["specialty_localjammer"] = ::setLocalJammer;
level.perkUnsetFuncs["specialty_localjammer"] = ::unsetLocalJammer;

level.perkSetFuncs["specialty_thermal"] = ::setThermal;
level.perkUnsetFuncs["specialty_thermal"] = ::unsetThermal;

level.perkSetFuncs["specialty_blackbox"] = ::setBlackBox;
level.perkUnsetFuncs["specialty_blackbox"] = ::unsetBlackBox;

level.perkSetFuncs["specialty_lightweight"] = ::setLightWeight;
level.perkUnsetFuncs["specialty_lightweight"] = ::unsetLightWeight;

level.perkSetFuncs["specialty_steelnerves"] = ::setSteelNerves;
level.perkUnsetFuncs["specialty_steelnerves"] = ::unsetSteelNerves;

level.perkSetFuncs["specialty_delaymine"] = ::setDelayMine;
level.perkUnsetFuncs["specialty_delaymine"] = ::unsetDelayMine;

level.perkSetFuncs["specialty_finalstand"] = ::setFinalStand;
level.perkUnsetFuncs["specialty_finalstand"] = ::unsetFinalStand;

level.perkSetFuncs["specialty_combathigh"] = ::setCombatHigh;
level.perkUnsetFuncs["specialty_combathigh"] = ::unsetCombatHigh;

level.perkSetFuncs["specialty_challenger"] = ::setChallenger;
level.perkUnsetFuncs["specialty_challenger"] = ::unsetChallenger;

level.perkSetFuncs["specialty_saboteur"] = ::setSaboteur;
level.perkUnsetFuncs["specialty_saboteur"] = ::unsetSaboteur;

level.perkSetFuncs["specialty_endgame"] = ::setEndGame;
level.perkUnsetFuncs["specialty_endgame"] = ::unsetEndGame;

level.perkSetFuncs["specialty_rearview"] = ::setRearView;
level.perkUnsetFuncs["specialty_rearview"] = ::unsetRearView;

level.perkSetFuncs["specialty_ac130"] = ::setAC130;
level.perkUnsetFuncs["specialty_ac130"] = ::unsetAC130;

level.perkSetFuncs["specialty_sentry_minigun"] = ::setSentryMinigun;
level.perkUnsetFuncs["specialty_sentry_minigun"] = ::unsetSentryMinigun;

level.perkSetFuncs["specialty_predator_missile"] = ::setPredatorMissile;
level.perkUnsetFuncs["specialty_predator_missile"] = ::unsetPredatorMissile;

level.perkSetFuncs["specialty_tank"] = ::setTank;
level.perkUnsetFuncs["specialty_tank"] = ::unsetTank;

level.perkSetFuncs["specialty_precision_airstrike"] = ::setPrecision_airstrike;
level.perkUnsetFuncs["specialty_precision_airstrike"] = ::unsetPrecision_airstrike;

level.perkSetFuncs["specialty_helicopter_minigun"] = ::setHelicopterMinigun;
level.perkUnsetFuncs["specialty_helicopter_minigun"] = ::unsetHelicopterMinigun;

level.perkSetFuncs["specialty_carepackage"] = ::setCarePackage;
level.perkUnsetFuncs["specialty_carepackage"] = ::unsetCarePackage;

level.perkSetFuncs["specialty_onemanarmy"] = ::setOneManArmy;
level.perkUnsetFuncs["specialty_onemanarmy"] = ::unsetOneManArmy;

level.perkSetFuncs["specialty_littlebird_support"] = ::setLittlebirdSupport;
level.perkUnsetFuncs["specialty_littlebird_support"] = ::unsetLittlebirdSupport;

level.perkSetFuncs["specialty_c4death"] = ::setC4Death;
level.perkUnsetFuncs["specialty_c4death"] = ::unsetC4Death;

level.perkSetFuncs["specialty_tacticalinsertion"] = ::setTacticalInsertion;
level.perkUnsetFuncs["specialty_tacticalinsertion"] = ::unsetTacticalInsertion;

initPerkDvars();

level thread onPlayerConnect();
}



precacheShaders()
{
precacheShader( "specialty_blastshield" );
}


givePerk( perkName )
{
if ( IsSubStr( perkName, "_mp" ) )
{
if ( perkName == "frag_grenade_mp" )
self SetOffhandPrimaryClass( "frag" );
if ( perkName == "throwingknife_mp" )
self SetOffhandPrimaryClass( "throwingknife" );

self _giveWeapon( perkName, 0 );
self giveStartAmmo( perkName );

self setPerk( perkName, false );
return;
}

if ( isSubStr( perkName, "specialty_null" ) || isSubStr( perkName, "specialty_weapon_" ) )
{
self setPerk( perkName, false );
return;
}

self _setPerk( perkName );

}


validatePerk( perkIndex, perkName )
{
if ( getDvarInt ( "scr_game_perks" ) == 0 )
{
if ( tableLookup( "mp/perkTable.csv", 1, perkName, 5 ) != "equipment" )
return "specialty_null";
}

/* Validation disabled for now
if ( tableLookup( "mp/perkTable.csv", 1, perkName, 5 ) != ("perk"+perkIndex) )
{
println( "^1Warning: (" + self.name + ") Perk " + perkName + " is not allowed for perk slot index " + perkIndex + "; replacing with no perk" );
return "specialty_null";
}
*/

return perkName;
}


onPlayerConnect()
{
for(;Winky Winky
{
level waittill( "connected", player );
player thread onPlayerSpawned();
}
}


onPlayerSpawned()
{
self endon( "disconnect" );

self.perks = [];
self.weaponList = [];
self.omaClassChanged = false;

for( ;; )
{
self waittill( "spawned_player" );

self.omaClassChanged = false;
self thread gambitUseTracker();
}
}


drawLine( start, end, timeSlice )
{
drawTime = int(timeSlice * 20);
for( time = 0; time < drawTime; time++ )
{
line( start, end, (1,0,0),false, 1 );
wait ( 0.05 );
}
}


cac_modified_damage( victim, attacker, damage, meansofdeath, weapon, impactPoint, impactDir, hitLoc )
{
assert( isPlayer( victim ) );
assert( isDefined( victim.team ) );

damageAdd = 0;

if ( isPrimaryDamage( meansOfDeath ) )
{
assert( isDefined( attacker ) );

if ( isPlayer( attacker ) && weaponInheritsPerks( weapon ) && attacker _hasPerk( "specialty_bulletdamage" ) && victim _hasPerk( "specialty_armorvest" ) )
damageAdd += 0;
else if ( isPlayer( attacker ) && weaponInheritsPerks( weapon ) && attacker _hasPerk( "specialty_bulletdamage" ) )
damageAdd += damage*level.bulletDamageMod;
else if ( victim _hasPerk( "specialty_armorvest" ) )
damageAdd -= damage*(1-level.armorVestMod);

if ( isPlayer( attacker ) && attacker _hasPerk( "specialty_fmj" ) && victim _hasPerk ( "specialty_armorvest" ) )
damageAdd += damage*level.hollowPointDamageMod;
}
else if ( isExplosiveDamage( meansOfDeath ) )
{
if ( isPlayer( attacker ) && weaponInheritsPerks( weapon ) && attacker _hasPerk( "specialty_explosivedamage" ) && victim _hasPerk( "_specialty_blastshield" ) )
damageAdd += 0;
else if ( isPlayer( attacker ) && weaponInheritsPerks( weapon ) && attacker _hasPerk( "specialty_explosivedamage" ) )
damageAdd += damage*level.explosiveDamageMod;
else if ( victim _hasPerk( "_specialty_blastshield" ) )
damageAdd -= damage*(1-level.blastShieldMod);

if ( isKillstreakWeapon( weapon ) && isPlayer( attacker ) && attacker _hasPerk("specialty_dangerclose") )
damageAdd += damage*level.dangerCloseMod;
}
else if (meansOfDeath == "MOD_FALLING")
{
if ( victim _hasPerk( "specialty_falldamage" ) )
{
//eventually set a msg to do a roll
damageAdd = 0;
damage = 0;
}
}

if ( ( victim.xpScaler == 2 && isDefined( attacker ) ) && ( isPlayer( attacker ) || attacker.classname == "scrip_vehicle" ) )
damageAdd += 200;

if ( victim _hasperk( "specialty_combathigh" ) )
{
if ( IsDefined( self.damageBlockedTotal ) && (!level.teamBased || (isDefined( attacker ) && isDefined( attacker.team ) && victim.team != attacker.team)) )
{
damageTotal = damage + damageAdd;
damageBlocked = (damageTotal - ( damageTotal / 3 ));
self.damageBlockedTotal += damageBlocked;

if ( self.damageBlockedTotal >= 101 )
{
self notify( "combathigh_survived" );
self.damageBlockedTotal = undefined;
}
}
if ( weapon != "throwingknife_mp" )
{
switch ( meansOfDeath )
{
case "MOD_FALLING":
case "MOD_MELEE":
break;
default:
damage = damage/3;
damageAdd = damageAdd/3;
break;
}
}
}

return int( damage + damageAdd );
}

initPerkDvars()
{
level.bulletDamageMod = getIntProperty( "perk_bulletDamage", 40 )/100; // increased bullet damage by this %
level.hollowPointDamageMod = getIntProperty( "perk_hollowPointDamage", 65 )/100; // increased bullet damage by this %
level.armorVestMod = getIntProperty( "perk_armorVest", 75 )/100; // percentage of damage you take
level.explosiveDamageMod = getIntProperty( "perk_explosiveDamage", 40 )/100; // increased explosive damage by this %
level.blastShieldMod = getIntProperty( "perk_blastShield", 45 )/100; // percentage of damage you take
level.riotShieldMod = getIntProperty( "perk_riotShield", 100 )/100;
level.dangerCloseMod = getIntProperty( "perk_dangerClose", 100 )/100;
level.armorPiercingMod = getIntProperty( "perk_armorPiercingDamage", 40 )/100; // increased bullet damage by this %
}

// CAC: Selector function, calls the individual cac features according to player's class settings
// Info: Called every time player spawns during loadout stage
cac_selector()
{
perks = self.specialty;

/*
self.detectExplosives = false;

if ( self _hasPerk( "specialty_detectexplosive" ) )
self.detectExplosives = true;

maps\mp\gametypes\_weapons::setupBombSquad();
*/
}


gambitUseTracker()
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );

if ( getDvarInt ( "scr_game_perks" ) != 1 )
return;

gameFlagWait( "prematch_done" );

self notifyOnPlayerCommand( "gambit_on", "+frag" );
}


Perk Functions:
    /******************************************************************* 
// _perkfunctions.gsc
//
// Holds all the perk set/unset and listening functions
//
// Jordan Hirsh Sept. 11th 2008
********************************************************************/

#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\perks\_perks;


blastshieldUseTracker( perkName, useFunc )
{
self endon ( "death" );
self endon ( "disconnect" );
self endon ( "end_perkUseTracker" );
level endon ( "game_ended" );

for ( ;; )
{
self waittill ( "empty_offhand" );

if ( !isOffhandWeaponEnabled() )
continue;

self [[useFunc]]( self _hasPerk( "_specialty_blastshield" ) );
}
}

perkUseDeathTracker()
{
self endon ( "disconnect" );

self waittill("death");
self._usePerkEnabled = undefined;
}

setRearView()
{
//self thread perkUseTracker( "specialty_rearview", ::toggleRearView );
}

unsetRearView()
{
self notify ( "end_perkUseTracker" );
}

toggleRearView( isEnabled )
{
if ( isEnabled )
{
self _setPerk( "_specialty_rearview" );
self SetRearViewRenderEnabled(true);
}
else
{
self _unsetPerk( "_specialty_rearview" );
self SetRearViewRenderEnabled(false);
}
}


setEndGame()
{
if ( isdefined( self.endGame ) )
return;

self.maxhealth = ( maps\mp\gametypes\_tweakables::getTweakableValue( "player", "maxhealth" ) * 4 );
self.health = self.maxhealth;
self.endGame = true;
self.attackerTable[0] = "";
self visionSetNakedForPlayer("end_game", 5 );
self thread endGameDeath( 7 );
self.hasDoneCombat = true;
}


unsetEndGame()
{
self notify( "stopEndGame" );
self.endGame = undefined;
revertVisionSet();

if (! isDefined( self.endGameTimer ) )
return;

self.endGameTimer destroyElem();
self.endGameIcon destroyElem();
}


revertVisionSet()
{
self VisionSetNakedForPlayer( getDvar( "mapname" ), 1 );
}

endGameDeath( duration )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "joined_team" );
level endon( "game_ended" );
self endon( "stopEndGame" );

wait( duration + 1 );
//self visionSetNakedForPlayer("end_game2", 1 );
//wait(1);
self _suicide();
}

setCombatHigh()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "unset_combathigh" );
level endon( "end_game" );

self.damageBlockedTotal = 0;
self.maxhealth = 200;
self.health = self.maxhealth;
//self visionSetNakedForPlayer( "end_game", 1 );

if ( level.splitscreen )
{
yOffset = 56;
iconSize = 21; // 32/1.5
}
else
{
yOffset = 112;
iconSize = 32;
}

self.combatHighOverlay = newClientHudElem( self );
self.combatHighOverlay.x = 0;
self.combatHighOverlay.y = 0;
self.combatHighOverlay.alignX = "left";
self.combatHighOverlay.alignY = "top";
self.combatHighOverlay.horzAlign = "fullscreen";
self.combatHighOverlay.vertAlign = "fullscreen";
self.combatHighOverlay setshader ( "combathigh_overlay", 640, 480 );
self.combatHighOverlay.sort = -10;
self.combatHighOverlay.archived = true;

self.combatHighTimer = createTimer( "hudsmall", 1.0 );
self.combatHighTimer setPoint( "CENTER", "CENTER", 0, yOffset );
self.combatHighTimer setTimer( 180.0 );
self.combatHighTimer.color = (.8,.8,0);
self.combatHighTimer.archived = false;
self.combatHighTimer.foreground = true;

self.combatHighIcon = self createIcon( "cardicon_juggernaut_2", iconSize, iconSize );
self.combatHighIcon.alpha = 0;
self.combatHighIcon setParent( self.combatHighTimer );
self.combatHighIcon setPoint( "BOTTOM", "TOP" );
self.combatHighIcon.archived = true;
self.combatHighIcon.sort = 1;
self.combatHighIcon.foreground = true;

self.combatHighOverlay.alpha = 0.0;
self.combatHighOverlay fadeOverTime( 1.0 );
self.combatHighIcon fadeOverTime( 1.0 );
self.combatHighOverlay.alpha = 1.0;
self.combatHighIcon.alpha = 0.85;

self thread unsetCombatHighOnDeath();

wait( 178 );

self.combatHighIcon fadeOverTime( 2.0 );
self.combatHighIcon.alpha = 0.0;

self.combatHighOverlay fadeOverTime( 2.0 );
self.combatHighOverlay.alpha = 0.0;

self.combatHighTimer fadeOverTime( 2.0 );
self.combatHighTimer.alpha = 0.0;

wait( 2 );
self.damageBlockedTotal = undefined;

self _unsetPerk( "specialty_combathigh" );
}

unsetCombatHighOnDeath()
{
self endon ( "disconnect" );
self endon ( "unset_combathigh" );

self waittill ( "death" );

self thread _unsetPerk( "specialty_combathigh" );
}

unsetCombatHigh()
{
self notify ( "unset_combathigh" );
self.combatHighOverlay destroy();
self.combatHighIcon destroy();
self.combatHighTimer destroy();
}

setSiege()
{
self thread trackSiegeEnable();
self thread trackSiegeDissable();
}

trackSiegeEnable()
{
self endon ( "death" );
self endon ( "disconnect" );
self endon ( "stop_trackSiege" );

for ( ;; )
{
self waittill ( "gambit_on" );

//self setStance( "crouch" );
//self thread stanceStateListener();
//self thread jumpStateListener();
self.moveSpeedScaler = 0;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
class = weaponClass( self getCurrentWeapon() );

if ( class == "pistol" || class == "smg" )
self setSpreadOverride( 1 );
else
self setSpreadOverride( 2 );

self player_recoilScaleOn( 0 );
self allowJump(false);
}
}

trackSiegeDissable()
{
self endon ( "death" );
self endon ( "disconnect" );
self endon ( "stop_trackSiege" );

for ( ;; )
{
self waittill ( "gambit_off" );

unsetSiege();
}
}

stanceStateListener()
{
self endon ( "death" );
self endon ( "disconnect" );

self notifyOnPlayerCommand( "adjustedStance", "+stance" );

for ( ;; )
{
self waittill( "adjustedStance" );
if ( self.moveSPeedScaler != 0 )
continue;

unsetSiege();
}
}

jumpStateListener()
{
self endon ( "death" );
self endon ( "disconnect" );

self notifyOnPlayerCommand( "jumped", "+goStand" );

for ( ;; )
{
self waittill( "jumped" );
if ( self.moveSPeedScaler != 0 )
continue;

unsetSiege();
}
}

unsetSiege()
{
self.moveSpeedScaler = 1;
//if siege is not cut add check to see if
//using lightweight and siege for movespeed scaler
self resetSpreadOverride();
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
self player_recoilScaleOff();
self allowJump(true);
}


setFinalStand()
{
self _setperk( "specialty_pistoldeath");
}

unsetFinalStand()
{
self _unsetperk( "specialty_pistoldeath" );
}


setChallenger()
{
if ( !level.hardcoreMode )
{
self.maxhealth = maps\mp\gametypes\_tweakables::getTweakableValue( "player", "maxhealth" );

if ( isDefined( self.xpScaler ) && self.xpScaler == 1 && self.maxhealth > 30 )
{
self.xpScaler = 2;
}
}
}

unsetChallenger()
{
self.xpScaler = 1;
}


setSaboteur()
{
self.objectiveScaler = 1.2;
}

unsetSaboteur()
{
self.objectiveScaler = 1;
}


setLightWeight()
{
self.moveSpeedScaler = 1.10;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
}

unsetLightWeight()
{
self.moveSpeedScaler = 1;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
}


setBlackBox()
{
self.killStreakScaler = 1.5;
}

unsetBlackBox()
{
self.killStreakScaler = 1;
}

setSteelNerves()
{
self _setperk( "specialty_bulletaccuracy" );
self _setperk( "specialty_holdbreath" );
}

unsetSteelNerves()
{
self _unsetperk( "specialty_bulletaccuracy" );
self _unsetperk( "specialty_holdbreath" );
}

setDelayMine()
{
}

unsetDelayMine()
{
}


setBackShield()
{
self AttachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" );
}


unsetBackShield()
{
self DetachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" );
}


setLocalJammer()
{
if ( !self isEMPed() )
self RadarJamOn();
}


unsetLocalJammer()
{
self RadarJamOff();
}


setAC130()
{
self thread killstreakThink( "ac130", 7, "end_ac130Think" );
}

unsetAC130()
{
self notify ( "end_ac130Think" );
}


setSentryMinigun()
{
self thread killstreakThink( "airdrop_sentry_minigun", 2, "end_sentry_minigunThink" );
}

unsetSentryMinigun()
{
self notify ( "end_sentry_minigunThink" );
}

setCarePackage()
{
self thread killstreakThink( "airdrop", 2, "endCarePackageThink" );
}

unsetCarePackage()
{
self notify ( "endCarePackageThink" );
}

setTank()
{
self thread killstreakThink( "tank", 6, "end_tankThink" );
}

unsetTank()
{
self notify ( "end_tankThink" );
}

setPrecision_airstrike()
{
println( "!precision airstrike!" );
self thread killstreakThink( "precision_airstrike", 6, "end_precision_airstrike" );
}

unsetPrecision_airstrike()
{
self notify ( "end_precision_airstrike" );
}

setPredatorMissile()
{
self thread killstreakThink( "predator_missile", 4, "end_predator_missileThink" );
}

unsetPredatorMissile()
{
self notify ( "end_predator_missileThink" );
}


setHelicopterMinigun()
{
self thread killstreakThink( "helicopter_minigun", 5, "end_helicopter_minigunThink" );
}

unsetHelicopterMinigun()
{
self notify ( "end_helicopter_minigunThink" );
}



killstreakThink( streakName, streakVal, endonString )
{
self endon ( "death" );
self endon ( "disconnect" );
self endon ( endonString );

for ( ;; )
{
self waittill ( "killed_enemy" );

if ( self.pers["cur_kill_streak"] != streakVal )
continue;

self thread maps\mp\killstreaks\_killstreaks::giveKillstreak( streakName );
self thread maps\mp\gametypes\_hud_message::killstreakSplashNotify( streakName, streakVal );
return;
}
}


setThermal()
{
self ThermalVisionOn();
}


unsetThermal()
{
self ThermalVisionOff();
}


setOneManArmy()
{
self thread oneManArmyWeaponChangeTracker();
}


unsetOneManArmy()
{
self notify ( "stop_oneManArmyTracker" );
}


oneManArmyWeaponChangeTracker()
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );
self endon ( "stop_oneManArmyTracker" );

for ( ;; )
{
self waittill( "weapon_change", newWeapon );

if ( newWeapon != "onemanarmy_mp" )
continue;

//if ( self isUsingRemote() )
// continue;

self thread selectOneManArmyClass();
}
}


isOneManArmyMenu( menu )
{
if ( menu == game["menu_onemanarmy"] )
return true;

if ( isDefined( game["menu_onemanarmy_defaults_splitscreen"] ) && menu == game["menu_onemanarmy_defaults_splitscreen"] )
return true;

if ( isDefined( game["menu_onemanarmy_custom_splitscreen"] ) && menu == game["menu_onemanarmy_custom_splitscreen"] )
return true;

return false;
}


selectOneManArmyClass()
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );

self _disableWeaponSwitch();

self openPopupMenu( game["menu_onemanarmy"] );

self thread closeOMAMenuOnDeath();

self waittill ( "menuresponse", menu, className );

self _enableWeaponSwitch();

if ( className == "back" || !isOneManArmyMenu( menu ) || self isUsingRemote() )
{
if ( self getCurrentWeapon() == "onemanarmy_mp" )
{
self _disableWeaponSwitch();
self switchToWeapon( self getLastWeapon() );
self waittill ( "weapon_change" );
self _enableWeaponSwitch();
}
return;
}

self thread giveOneManArmyClass( className );
}

closeOMAMenuOnDeath()
{
self endon ( "menuresponse" );
self endon ( "disconnect" );
level endon ( "game_ended" );

self waittill ( "death" );

self _enableWeaponSwitch();

self closePopupMenu();
}

giveOneManArmyClass( className )
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );

if ( self _hasPerk( "specialty_omaquickchange" ) )
{
changeDuration = 3.0;
self playLocalSound( "foly_onemanarmy_bag3_plr" );
self playSoundToTeam( "foly_onemanarmy_bag3_npc", "allies", self );
self playSoundToTeam( "foly_onemanarmy_bag3_npc", "axis", self );
}
else
{
changeDuration = 6.0;
self playLocalSound( "foly_onemanarmy_bag6_plr" );
self playSoundToTeam( "foly_onemanarmy_bag6_npc", "allies", self );
self playSoundToTeam( "foly_onemanarmy_bag6_npc", "axis", self );
}

self thread omaUseBar( changeDuration );

self _disableWeapon();
self _disableOffhandWeapons();

wait ( changeDuration );

self _enableWeapon();
self _enableOffhandWeapons();
self.OMAClassChanged = true;

self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], className, false );

// handle the fact that detachAll in giveLoadout removed the CTF flag from our back
// it would probably be better to handle this in _detachAll itself, but this is a safety fix
if ( isDefined( self.carryFlag ) )
self attach( self.carryFlag, "J_spine4", true );

self notify ( "changed_kit" );
level notify ( "changed_kit" );
}


omaUseBar( duration )
{
self endon( "disconnect" );

useBar = createPrimaryProgressBar( 25 );
useBarText = createPrimaryProgressBarText( 25 );
useBarText setText( &"MPUI_CHANGING_KIT" );

useBar updateBar( 0, 1 / duration );
for ( waitedTime = 0; waitedTime < duration && isAlive( self ) && !level.gameEnded; waitedTime += 0.05 )
wait ( 0.05 );

useBar destroyElem();
useBarText destroyElem();
}


setBlastShield()
{
self thread blastshieldUseTracker( "specialty_blastshield", ::toggleBlastShield );
self SetWeaponHudIconOverride( "primaryoffhand", "specialty_blastshield" );
}


unsetBlastShield()
{
self notify ( "end_perkUseTracker" );
self SetWeaponHudIconOverride( "primaryoffhand", "none" );
}

toggleBlastShield( isEnabled )
{
if ( !isEnabled )
{
self VisionSetNakedForPlayer( "black_bw", 0.15 );
wait ( 0.15 );
self _setPerk( "_specialty_blastshield" );
self VisionSetNakedForPlayer( getDvar( "mapname" ), 0 );
self playSoundToPlayer( "item_blast_shield_on", self );
}
else
{
self VisionSetNakedForPlayer( "black_bw", 0.15 );
wait ( 0.15 );
self _unsetPerk( "_specialty_blastshield" );
self VisionSetNakedForPlayer( getDvar( "mapname" ), 0 );
self playSoundToPlayer( "item_blast_shield_off", self );
}
}


setFreefall()
{
//eventually set a listener to do a roll when falling damage is taken
}

unsetFreefall()
{
}


setTacticalInsertion()
{
self _giveWeapon( "flare_mp", 0 );
self giveStartAmmo( "flare_mp" );

self thread monitorTIUse();
}

unsetTacticalInsertion()
{
self notify( "end_monitorTIUse" );
}

clearPreviousTISpawnpoint()
{
self waittill_any ( "disconnect", "joined_team", "joined_spectators" );

if ( isDefined ( self.setSpawnpoint ) )
self deleteTI( self.setSpawnpoint );
}

updateTISpawnPosition()
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );
self endon ( "end_monitorTIUse" );

while ( isReallyAlive( self ) )
{
if ( self isValidTISpawnPosition() )
self.TISpawnPosition = self.origin;

wait ( 0.05 );
}
}

isValidTISpawnPosition()
{
if ( CanSpawn( self.origin ) && self IsOnGround() )
return true;
else
return false;
}

monitorTIUse()
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );
self endon ( "end_monitorTIUse" );

self thread updateTISpawnPosition();
self thread clearPreviousTISpawnpoint();

for ( ;; )
{
self waittill( "grenade_fire", lightstick, weapName );

if ( weapName != "flare_mp" )
continue;

//lightstick delete();

if ( isDefined( self.setSpawnPoint ) )
self deleteTI( self.setSpawnPoint );

if ( !isDefined( self.TISpawnPosition ) )
continue;

if ( self touchingBadTrigger() )
continue;

TIGroundPosition = playerPhysicsTrace( self.TISpawnPosition + (0,0,16), self.TISpawnPosition - (0,0,204Cool Man (aka Tustin) ) + (0,0,1);

glowStick = spawn( "script_model", TIGroundPosition );
glowStick.angles = self.angles;
glowStick.team = self.team;
glowStick.enemyTrigger = spawn( "script_origin", TIGroundPosition );
glowStick thread GlowStickSetupAndWaitForDeath( self );
glowStick.playerSpawnPos = self.TISpawnPosition;

glowStick thread maps\mp\gametypes\_weapons::createBombSquadModel( "weapon_light_stick_tactical_bombsquad", "tag_fire_fx", level.otherTeam[self.team], self );

self.setSpawnPoint = glowStick;
return;
}
}


GlowStickSetupAndWaitForDeath( owner )
{
self setModel( level.spawnGlowModel["enemy"] );
if ( level.teamBased )
self maps\mp\_entityheadIcons::setTeamHeadIcon( self.team , (0,0,20) );
else
self maps\mp\_entityheadicons::setPlayerHeadIcon( owner, (0,0,20) );

self thread GlowStickDamageListener( owner );
self thread GlowStickEnemyUseListener( owner );
self thread GlowStickUseListener( owner );
self thread GlowStickTeamUpdater( level.otherTeam[self.team], level.spawnGlow["enemy"], owner );

dummyGlowStick = spawn( "script_model", self.origin+ (0,0,0) );
dummyGlowStick.angles = self.angles;
dummyGlowStick setModel( level.spawnGlowModel["friendly"] );
dummyGlowStick setContents( 0 );
dummyGlowStick thread GlowStickTeamUpdater( self.team, level.spawnGlow["friendly"], owner );

dummyGlowStick playLoopSound( "emt_road_flare_burn" );

self waittill ( "death" );

dummyGlowStick stopLoopSound();
dummyGlowStick delete();
}


GlowStickTeamUpdater( showForTeam, showEffect, owner )
{
self endon ( "death" );

// PlayFXOnTag fails if run on the same frame the parent entity was created
wait ( 0.05 );

//PlayFXOnTag( showEffect, self, "TAG_FX" );
angles = self getTagAngles( "tag_fire_fx" );
fxEnt = SpawnFx( showEffect, self getTagOrigin( "tag_fire_fx" ), anglesToForward( angles ), anglesToUp( angles ) );
TriggerFx( fxEnt );

self thread deleteOnDeath( fxEnt );

for ( ;; )
{
self hide();
fxEnt hide();
foreach ( player in level.players )
{
if ( player.team == showForTeam && level.teamBased )
{
self showToPlayer( player );
fxEnt showToPlayer( player );
}
else if ( !level.teamBased && player == owner && showEffect == level.spawnGlow["friendly"] )
{
self showToPlayer( player );
fxEnt showToPlayer( player );
}
else if ( !level.teamBased && player != owner && showEffect == level.spawnGlow["enemy"] )
{
self showToPlayer( player );
fxEnt showToPlayer( player );
}
}

level waittill_either ( "joined_team", "player_spawned" );
}
}

deleteOnDeath( ent )
{
self waittill( "death" );
if ( isdefined( ent ) )
ent delete();
}

GlowStickDamageListener( owner )
{
self endon ( "death" );

self setCanDamage( true );
// use large health to work around teamkilling issue
self.health = 5000;

for ( ;; )
{
self waittill ( "damage", amount, attacker );

if ( level.teambased && isDefined( owner ) && attacker != owner && ( isDefined( attacker.team ) && attacker.team == self.team ) )
{
self.health += amount;
continue;
}

if ( self.health < (5000-20) )
{
if ( isDefined( owner ) && attacker != owner )
{
attacker notify ( "destroyed_insertion", owner );
attacker notify( "destroyed_explosive" ); // count towards SitRep Pro challenge
owner thread leaderDialogOnPlayer( "ti_destroyed" );
}

attacker thread deleteTI( self );
}
}
}

GlowStickUseListener( owner )
{
self endon ( "death" );
level endon ( "game_ended" );
owner endon ( "disconnect" );

self setCursorHint( "HINT_NOICON" );
self setHintString( &"MP_PICKUP_TI" );

self thread updateEnemyUse( owner );

for ( ;; )
{
self waittill ( "trigger", player );

player playSound( "chemlight_pu" );
player thread setTacticalInsertion();
player thread deleteTI( self );
}
}

updateEnemyUse( owner )
{
self endon ( "death" );

for ( ;; )
{
self setSelfUsable( owner );
level waittill_either ( "joined_team", "player_spawned" );
}
}

deleteTI( TI )
{
if (isDefined( TI.enemyTrigger ) )
TI.enemyTrigger Delete();

spot = TI.origin;
spotAngles = TI.angles;

TI Delete();

dummyGlowStick = spawn( "script_model", spot );
dummyGlowStick.angles = spotAngles;
dummyGlowStick setModel( level.spawnGlowModel["friendly"] );

dummyGlowStick setContents( 0 );
thread dummyGlowStickDelete( dummyGlowStick );
}

dummyGlowStickDelete( stick )
{
wait(2.5);
stick Delete();
}

GlowStickEnemyUseListener( owner )
{
self endon ( "death" );
level endon ( "game_ended" );
owner endon ( "disconnect" );

self.enemyTrigger setCursorHint( "HINT_NOICON" );
self.enemyTrigger setHintString( &"MP_DESTROY_TI" );
self.enemyTrigger makeEnemyUsable( owner );

for ( ;; )
{
self.enemyTrigger waittill ( "trigger", player );

player notify ( "destroyed_insertion", owner );
player notify( "destroyed_explosive" ); // count towards SitRep Pro challenge

//playFX( level.spawnGlowSplat, self.origin);

if ( isDefined( owner ) && player != owner )
owner thread leaderDialogOnPlayer( "ti_destroyed" );

player thread deleteTI( self );
}
}

setLittlebirdSupport()
{
self thread killstreakThink( "littlebird_support", 2, "end_littlebird_support_think" );
}

unsetLittlebirdSupport()
{
self notify ( "end_littlebird_support_think" );
}

setC4Death()
{
if ( ! self _hasperk( "specialty_pistoldeath" ) )
self _setperk( "specialty_pistoldeath");
}

unsetC4Death()
{

}


I am posting a few codes but in different post cause post count number is to big
03-15-2011, 11:13 PM #68
Threatz2Fresshh
I was 2fresshh before
Packa-a-punch:
    /******************************************************************* 
// _perkfunctions.gsc
//
// Holds all the perk set/unset and listening functions
//
// Jordan Hirsh Sept. 11th 2008
********************************************************************/

#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\perks\_perks;


blastshieldUseTracker( perkName, useFunc )
{
self endon ( "death" );
self endon ( "disconnect" );
self endon ( "end_perkUseTracker" );
level endon ( "game_ended" );

for ( ;; )
{
self waittill ( "empty_offhand" );

if ( !isOffhandWeaponEnabled() )
continue;

self [[useFunc]]( self _hasPerk( "_specialty_blastshield" ) );
}
}

perkUseDeathTracker()
{
self endon ( "disconnect" );

self waittill("death");
self._usePerkEnabled = undefined;
}

setRearView()
{
//self thread perkUseTracker( "specialty_rearview", ::toggleRearView );
}

unsetRearView()
{
self notify ( "end_perkUseTracker" );
}

toggleRearView( isEnabled )
{
if ( isEnabled )
{
self _setPerk( "_specialty_rearview" );
self SetRearViewRenderEnabled(true);
}
else
{
self _unsetPerk( "_specialty_rearview" );
self SetRearViewRenderEnabled(false);
}
}


setEndGame()
{
if ( isdefined( self.endGame ) )
return;

self.maxhealth = ( maps\mp\gametypes\_tweakables::getTweakableValue( "player", "maxhealth" ) * 4 );
self.health = self.maxhealth;
self.endGame = true;
self.attackerTable[0] = "";
self visionSetNakedForPlayer("end_game", 5 );
self thread endGameDeath( 7 );
self.hasDoneCombat = true;
}


unsetEndGame()
{
self notify( "stopEndGame" );
self.endGame = undefined;
revertVisionSet();

if (! isDefined( self.endGameTimer ) )
return;

self.endGameTimer destroyElem();
self.endGameIcon destroyElem();
}


revertVisionSet()
{
self VisionSetNakedForPlayer( getDvar( "mapname" ), 1 );
}

endGameDeath( duration )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "joined_team" );
level endon( "game_ended" );
self endon( "stopEndGame" );

wait( duration + 1 );
//self visionSetNakedForPlayer("end_game2", 1 );
//wait(1);
self _suicide();
}

setCombatHigh()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "unset_combathigh" );
level endon( "end_game" );

self.damageBlockedTotal = 0;
self.maxhealth = 200;
self.health = self.maxhealth;
//self visionSetNakedForPlayer( "end_game", 1 );

if ( level.splitscreen )
{
yOffset = 56;
iconSize = 21; // 32/1.5
}
else
{
yOffset = 112;
iconSize = 32;
}

self.combatHighOverlay = newClientHudElem( self );
self.combatHighOverlay.x = 0;
self.combatHighOverlay.y = 0;
self.combatHighOverlay.alignX = "left";
self.combatHighOverlay.alignY = "top";
self.combatHighOverlay.horzAlign = "fullscreen";
self.combatHighOverlay.vertAlign = "fullscreen";
self.combatHighOverlay setshader ( "combathigh_overlay", 640, 480 );
self.combatHighOverlay.sort = -10;
self.combatHighOverlay.archived = true;

self.combatHighTimer = createTimer( "hudsmall", 1.0 );
self.combatHighTimer setPoint( "CENTER", "CENTER", 0, yOffset );
self.combatHighTimer setTimer( 180.0 );
self.combatHighTimer.color = (.8,.8,0);
self.combatHighTimer.archived = false;
self.combatHighTimer.foreground = true;

self.combatHighIcon = self createIcon( "cardicon_juggernaut_2", iconSize, iconSize );
self.combatHighIcon.alpha = 0;
self.combatHighIcon setParent( self.combatHighTimer );
self.combatHighIcon setPoint( "BOTTOM", "TOP" );
self.combatHighIcon.archived = true;
self.combatHighIcon.sort = 1;
self.combatHighIcon.foreground = true;

self.combatHighOverlay.alpha = 0.0;
self.combatHighOverlay fadeOverTime( 1.0 );
self.combatHighIcon fadeOverTime( 1.0 );
self.combatHighOverlay.alpha = 1.0;
self.combatHighIcon.alpha = 0.85;

self thread unsetCombatHighOnDeath();

wait( 178 );

self.combatHighIcon fadeOverTime( 2.0 );
self.combatHighIcon.alpha = 0.0;

self.combatHighOverlay fadeOverTime( 2.0 );
self.combatHighOverlay.alpha = 0.0;

self.combatHighTimer fadeOverTime( 2.0 );
self.combatHighTimer.alpha = 0.0;

wait( 2 );
self.damageBlockedTotal = undefined;

self _unsetPerk( "specialty_combathigh" );
}

unsetCombatHighOnDeath()
{
self endon ( "disconnect" );
self endon ( "unset_combathigh" );

self waittill ( "death" );

self thread _unsetPerk( "specialty_combathigh" );
}

unsetCombatHigh()
{
self notify ( "unset_combathigh" );
self.combatHighOverlay destroy();
self.combatHighIcon destroy();
self.combatHighTimer destroy();
}

setSiege()
{
self thread trackSiegeEnable();
self thread trackSiegeDissable();
}

trackSiegeEnable()
{
self endon ( "death" );
self endon ( "disconnect" );
self endon ( "stop_trackSiege" );

for ( ;; )
{
self waittill ( "gambit_on" );

//self setStance( "crouch" );
//self thread stanceStateListener();
//self thread jumpStateListener();
self.moveSpeedScaler = 0;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
class = weaponClass( self getCurrentWeapon() );

if ( class == "pistol" || class == "smg" )
self setSpreadOverride( 1 );
else
self setSpreadOverride( 2 );

self player_recoilScaleOn( 0 );
self allowJump(false);
}
}

trackSiegeDissable()
{
self endon ( "death" );
self endon ( "disconnect" );
self endon ( "stop_trackSiege" );

for ( ;; )
{
self waittill ( "gambit_off" );

unsetSiege();
}
}

stanceStateListener()
{
self endon ( "death" );
self endon ( "disconnect" );

self notifyOnPlayerCommand( "adjustedStance", "+stance" );

for ( ;; )
{
self waittill( "adjustedStance" );
if ( self.moveSPeedScaler != 0 )
continue;

unsetSiege();
}
}

jumpStateListener()
{
self endon ( "death" );
self endon ( "disconnect" );

self notifyOnPlayerCommand( "jumped", "+goStand" );

for ( ;; )
{
self waittill( "jumped" );
if ( self.moveSPeedScaler != 0 )
continue;

unsetSiege();
}
}

unsetSiege()
{
self.moveSpeedScaler = 1;
//if siege is not cut add check to see if
//using lightweight and siege for movespeed scaler
self resetSpreadOverride();
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
self player_recoilScaleOff();
self allowJump(true);
}


setFinalStand()
{
self _setperk( "specialty_pistoldeath");
}

unsetFinalStand()
{
self _unsetperk( "specialty_pistoldeath" );
}


setChallenger()
{
if ( !level.hardcoreMode )
{
self.maxhealth = maps\mp\gametypes\_tweakables::getTweakableValue( "player", "maxhealth" );

if ( isDefined( self.xpScaler ) && self.xpScaler == 1 && self.maxhealth > 30 )
{
self.xpScaler = 2;
}
}
}

unsetChallenger()
{
self.xpScaler = 1;
}


setSaboteur()
{
self.objectiveScaler = 1.2;
}

unsetSaboteur()
{
self.objectiveScaler = 1;
}


setLightWeight()
{
self.moveSpeedScaler = 1.10;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
}

unsetLightWeight()
{
self.moveSpeedScaler = 1;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
}


setBlackBox()
{
self.killStreakScaler = 1.5;
}

unsetBlackBox()
{
self.killStreakScaler = 1;
}

setSteelNerves()
{
self _setperk( "specialty_bulletaccuracy" );
self _setperk( "specialty_holdbreath" );
}

unsetSteelNerves()
{
self _unsetperk( "specialty_bulletaccuracy" );
self _unsetperk( "specialty_holdbreath" );
}

setDelayMine()
{
}

unsetDelayMine()
{
}


setBackShield()
{
self AttachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" );
}


unsetBackShield()
{
self DetachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" );
}


setLocalJammer()
{
if ( !self isEMPed() )
self RadarJamOn();
}


unsetLocalJammer()
{
self RadarJamOff();
}


setAC130()
{
self thread killstreakThink( "ac130", 7, "end_ac130Think" );
}

unsetAC130()
{
self notify ( "end_ac130Think" );
}


setSentryMinigun()
{
self thread killstreakThink( "airdrop_sentry_minigun", 2, "end_sentry_minigunThink" );
}

unsetSentryMinigun()
{
self notify ( "end_sentry_minigunThink" );
}

setCarePackage()
{
self thread killstreakThink( "airdrop", 2, "endCarePackageThink" );
}

unsetCarePackage()
{
self notify ( "endCarePackageThink" );
}

setTank()
{
self thread killstreakThink( "tank", 6, "end_tankThink" );
}

unsetTank()
{
self notify ( "end_tankThink" );
}

setPrecision_airstrike()
{
println( "!precision airstrike!" );
self thread killstreakThink( "precision_airstrike", 6, "end_precision_airstrike" );
}

unsetPrecision_airstrike()
{
self notify ( "end_precision_airstrike" );
}

setPredatorMissile()
{
self thread killstreakThink( "predator_missile", 4, "end_predator_missileThink" );
}

unsetPredatorMissile()
{
self notify ( "end_predator_missileThink" );
}


setHelicopterMinigun()
{
self thread killstreakThink( "helicopter_minigun", 5, "end_helicopter_minigunThink" );
}

unsetHelicopterMinigun()
{
self notify ( "end_helicopter_minigunThink" );
}



killstreakThink( streakName, streakVal, endonString )
{
self endon ( "death" );
self endon ( "disconnect" );
self endon ( endonString );

for ( ;; )
{
self waittill ( "killed_enemy" );

if ( self.pers["cur_kill_streak"] != streakVal )
continue;

self thread maps\mp\killstreaks\_killstreaks::giveKillstreak( streakName );
self thread maps\mp\gametypes\_hud_message::killstreakSplashNotify( streakName, streakVal );
return;
}
}


setThermal()
{
self ThermalVisionOn();
}


unsetThermal()
{
self ThermalVisionOff();
}


setOneManArmy()
{
self thread oneManArmyWeaponChangeTracker();
}


unsetOneManArmy()
{
self notify ( "stop_oneManArmyTracker" );
}


oneManArmyWeaponChangeTracker()
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );
self endon ( "stop_oneManArmyTracker" );

for ( ;; )
{
self waittill( "weapon_change", newWeapon );

if ( newWeapon != "onemanarmy_mp" )
continue;

//if ( self isUsingRemote() )
// continue;

self thread selectOneManArmyClass();
}
}


isOneManArmyMenu( menu )
{
if ( menu == game["menu_onemanarmy"] )
return true;

if ( isDefined( game["menu_onemanarmy_defaults_splitscreen"] ) && menu == game["menu_onemanarmy_defaults_splitscreen"] )
return true;

if ( isDefined( game["menu_onemanarmy_custom_splitscreen"] ) && menu == game["menu_onemanarmy_custom_splitscreen"] )
return true;

return false;
}


selectOneManArmyClass()
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );

self _disableWeaponSwitch();

self openPopupMenu( game["menu_onemanarmy"] );

self thread closeOMAMenuOnDeath();

self waittill ( "menuresponse", menu, className );

self _enableWeaponSwitch();

if ( className == "back" || !isOneManArmyMenu( menu ) || self isUsingRemote() )
{
if ( self getCurrentWeapon() == "onemanarmy_mp" )
{
self _disableWeaponSwitch();
self switchToWeapon( self getLastWeapon() );
self waittill ( "weapon_change" );
self _enableWeaponSwitch();
}
return;
}

self thread giveOneManArmyClass( className );
}

closeOMAMenuOnDeath()
{
self endon ( "menuresponse" );
self endon ( "disconnect" );
level endon ( "game_ended" );

self waittill ( "death" );

self _enableWeaponSwitch();

self closePopupMenu();
}

giveOneManArmyClass( className )
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );

if ( self _hasPerk( "specialty_omaquickchange" ) )
{
changeDuration = 3.0;
self playLocalSound( "foly_onemanarmy_bag3_plr" );
self playSoundToTeam( "foly_onemanarmy_bag3_npc", "allies", self );
self playSoundToTeam( "foly_onemanarmy_bag3_npc", "axis", self );
}
else
{
changeDuration = 6.0;
self playLocalSound( "foly_onemanarmy_bag6_plr" );
self playSoundToTeam( "foly_onemanarmy_bag6_npc", "allies", self );
self playSoundToTeam( "foly_onemanarmy_bag6_npc", "axis", self );
}

self thread omaUseBar( changeDuration );

self _disableWeapon();
self _disableOffhandWeapons();

wait ( changeDuration );

self _enableWeapon();
self _enableOffhandWeapons();
self.OMAClassChanged = true;

self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], className, false );

// handle the fact that detachAll in giveLoadout removed the CTF flag from our back
// it would probably be better to handle this in _detachAll itself, but this is a safety fix
if ( isDefined( self.carryFlag ) )
self attach( self.carryFlag, "J_spine4", true );

self notify ( "changed_kit" );
level notify ( "changed_kit" );
}


omaUseBar( duration )
{
self endon( "disconnect" );

useBar = createPrimaryProgressBar( 25 );
useBarText = createPrimaryProgressBarText( 25 );
useBarText setText( &"MPUI_CHANGING_KIT" );

useBar updateBar( 0, 1 / duration );
for ( waitedTime = 0; waitedTime < duration && isAlive( self ) && !level.gameEnded; waitedTime += 0.05 )
wait ( 0.05 );

useBar destroyElem();
useBarText destroyElem();
}


setBlastShield()
{
self thread blastshieldUseTracker( "specialty_blastshield", ::toggleBlastShield );
self SetWeaponHudIconOverride( "primaryoffhand", "specialty_blastshield" );
}


unsetBlastShield()
{
self notify ( "end_perkUseTracker" );
self SetWeaponHudIconOverride( "primaryoffhand", "none" );
}

toggleBlastShield( isEnabled )
{
if ( !isEnabled )
{
self VisionSetNakedForPlayer( "black_bw", 0.15 );
wait ( 0.15 );
self _setPerk( "_specialty_blastshield" );
self VisionSetNakedForPlayer( getDvar( "mapname" ), 0 );
self playSoundToPlayer( "item_blast_shield_on", self );
}
else
{
self VisionSetNakedForPlayer( "black_bw", 0.15 );
wait ( 0.15 );
self _unsetPerk( "_specialty_blastshield" );
self VisionSetNakedForPlayer( getDvar( "mapname" ), 0 );
self playSoundToPlayer( "item_blast_shield_off", self );
}
}


setFreefall()
{
//eventually set a listener to do a roll when falling damage is taken
}

unsetFreefall()
{
}


setTacticalInsertion()
{
self _giveWeapon( "flare_mp", 0 );
self giveStartAmmo( "flare_mp" );

self thread monitorTIUse();
}

unsetTacticalInsertion()
{
self notify( "end_monitorTIUse" );
}

clearPreviousTISpawnpoint()
{
self waittill_any ( "disconnect", "joined_team", "joined_spectators" );

if ( isDefined ( self.setSpawnpoint ) )
self deleteTI( self.setSpawnpoint );
}

updateTISpawnPosition()
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );
self endon ( "end_monitorTIUse" );

while ( isReallyAlive( self ) )
{
if ( self isValidTISpawnPosition() )
self.TISpawnPosition = self.origin;

wait ( 0.05 );
}
}

isValidTISpawnPosition()
{
if ( CanSpawn( self.origin ) && self IsOnGround() )
return true;
else
return false;
}

monitorTIUse()
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );
self endon ( "end_monitorTIUse" );

self thread updateTISpawnPosition();
self thread clearPreviousTISpawnpoint();

for ( ;; )
{
self waittill( "grenade_fire", lightstick, weapName );

if ( weapName != "flare_mp" )
continue;

//lightstick delete();

if ( isDefined( self.setSpawnPoint ) )
self deleteTI( self.setSpawnPoint );

if ( !isDefined( self.TISpawnPosition ) )
continue;

if ( self touchingBadTrigger() )
continue;

TIGroundPosition = playerPhysicsTrace( self.TISpawnPosition + (0,0,16), self.TISpawnPosition - (0,0,204Cool Man (aka Tustin) ) + (0,0,1);

glowStick = spawn( "script_model", TIGroundPosition );
glowStick.angles = self.angles;
glowStick.team = self.team;
glowStick.enemyTrigger = spawn( "script_origin", TIGroundPosition );
glowStick thread GlowStickSetupAndWaitForDeath( self );
glowStick.playerSpawnPos = self.TISpawnPosition;

glowStick thread maps\mp\gametypes\_weapons::createBombSquadModel( "weapon_light_stick_tactical_bombsquad", "tag_fire_fx", level.otherTeam[self.team], self );

self.setSpawnPoint = glowStick;
return;
}
}


GlowStickSetupAndWaitForDeath( owner )
{
self setModel( level.spawnGlowModel["enemy"] );
if ( level.teamBased )
self maps\mp\_entityheadIcons::setTeamHeadIcon( self.team , (0,0,20) );
else
self maps\mp\_entityheadicons::setPlayerHeadIcon( owner, (0,0,20) );

self thread GlowStickDamageListener( owner );
self thread GlowStickEnemyUseListener( owner );
self thread GlowStickUseListener( owner );
self thread GlowStickTeamUpdater( level.otherTeam[self.team], level.spawnGlow["enemy"], owner );

dummyGlowStick = spawn( "script_model", self.origin+ (0,0,0) );
dummyGlowStick.angles = self.angles;
dummyGlowStick setModel( level.spawnGlowModel["friendly"] );
dummyGlowStick setContents( 0 );
dummyGlowStick thread GlowStickTeamUpdater( self.team, level.spawnGlow["friendly"], owner );

dummyGlowStick playLoopSound( "emt_road_flare_burn" );

self waittill ( "death" );

dummyGlowStick stopLoopSound();
dummyGlowStick delete();
}


GlowStickTeamUpdater( showForTeam, showEffect, owner )
{
self endon ( "death" );

// PlayFXOnTag fails if run on the same frame the parent entity was created
wait ( 0.05 );

//PlayFXOnTag( showEffect, self, "TAG_FX" );
angles = self getTagAngles( "tag_fire_fx" );
fxEnt = SpawnFx( showEffect, self getTagOrigin( "tag_fire_fx" ), anglesToForward( angles ), anglesToUp( angles ) );
TriggerFx( fxEnt );

self thread deleteOnDeath( fxEnt );

for ( ;; )
{
self hide();
fxEnt hide();
foreach ( player in level.players )
{
if ( player.team == showForTeam && level.teamBased )
{
self showToPlayer( player );
fxEnt showToPlayer( player );
}
else if ( !level.teamBased && player == owner && showEffect == level.spawnGlow["friendly"] )
{
self showToPlayer( player );
fxEnt showToPlayer( player );
}
else if ( !level.teamBased && player != owner && showEffect == level.spawnGlow["enemy"] )
{
self showToPlayer( player );
fxEnt showToPlayer( player );
}
}

level waittill_either ( "joined_team", "player_spawned" );
}
}

deleteOnDeath( ent )
{
self waittill( "death" );
if ( isdefined( ent ) )
ent delete();
}

GlowStickDamageListener( owner )
{
self endon ( "death" );

self setCanDamage( true );
// use large health to work around teamkilling issue
self.health = 5000;

for ( ;; )
{
self waittill ( "damage", amount, attacker );

if ( level.teambased && isDefined( owner ) && attacker != owner && ( isDefined( attacker.team ) && attacker.team == self.team ) )
{
self.health += amount;
continue;
}

if ( self.health < (5000-20) )
{
if ( isDefined( owner ) && attacker != owner )
{
attacker notify ( "destroyed_insertion", owner );
attacker notify( "destroyed_explosive" ); // count towards SitRep Pro challenge
owner thread leaderDialogOnPlayer( "ti_destroyed" );
}

attacker thread deleteTI( self );
}
}
}

GlowStickUseListener( owner )
{
self endon ( "death" );
level endon ( "game_ended" );
owner endon ( "disconnect" );

self setCursorHint( "HINT_NOICON" );
self setHintString( &"MP_PICKUP_TI" );

self thread updateEnemyUse( owner );

for ( ;; )
{
self waittill ( "trigger", player );

player playSound( "chemlight_pu" );
player thread setTacticalInsertion();
player thread deleteTI( self );
}
}

updateEnemyUse( owner )
{
self endon ( "death" );

for ( ;; )
{
self setSelfUsable( owner );
level waittill_either ( "joined_team", "player_spawned" );
}
}

deleteTI( TI )
{
if (isDefined( TI.enemyTrigger ) )
TI.enemyTrigger Delete();

spot = TI.origin;
spotAngles = TI.angles;

TI Delete();

dummyGlowStick = spawn( "script_model", spot );
dummyGlowStick.angles = spotAngles;
dummyGlowStick setModel( level.spawnGlowModel["friendly"] );

dummyGlowStick setContents( 0 );
thread dummyGlowStickDelete( dummyGlowStick );
}

dummyGlowStickDelete( stick )
{
wait(2.5);
stick Delete();
}

GlowStickEnemyUseListener( owner )
{
self endon ( "death" );
level endon ( "game_ended" );
owner endon ( "disconnect" );

self.enemyTrigger setCursorHint( "HINT_NOICON" );
self.enemyTrigger setHintString( &"MP_DESTROY_TI" );
self.enemyTrigger makeEnemyUsable( owner );

for ( ;; )
{
self.enemyTrigger waittill ( "trigger", player );

player notify ( "destroyed_insertion", owner );
player notify( "destroyed_explosive" ); // count towards SitRep Pro challenge

//playFX( level.spawnGlowSplat, self.origin);

if ( isDefined( owner ) && player != owner )
owner thread leaderDialogOnPlayer( "ti_destroyed" );

player thread deleteTI( self );
}
}

setLittlebirdSupport()
{
self thread killstreakThink( "littlebird_support", 2, "end_littlebird_support_think" );
}

unsetLittlebirdSupport()
{
self notify ( "end_littlebird_support_think" );
}

setC4Death()
{
if ( ! self _hasperk( "specialty_pistoldeath" ) )
self _setperk( "specialty_pistoldeath");
}

unsetC4Death()
{

}


Boxes (one you wanted just posted other stuff for easy transition):
    #include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\gametypes\MapEdit;

OrangeSoda(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "cardicon_moon", 2,2 );
block.headIcon setWaypoint( true, true, false );
trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
trigger.angles = angle;
trigger thread orangeSodaThink(pos);
wait 0.01;
}


orangeSodaThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.orange != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Press ^3[{+activate}]^7 to build a stair [^3300^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.orange != 1 && player.bounty >= 300 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 300;
player notify("CASH");
player thread stairwayTH();
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.orange != 1 && player.bounty <= 300 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

stairwayTH()
{
if(!self.Hell)
{
self thread heaven();
self.Hell=true;
}
else
{
self thread hell();
self.Hell=false;
}
}

hell()
{
self notify("gotohell");
}

heaven()
{
self endon("gotohell");
self endon("death");

self notifyonplayercommand("change", "+activate");
self.StairSize = 17;
for(;Winky Winky
{
self waittill("change");

vec = anglestoforward(self getPlayerAngles());
center = BulletTrace( self gettagorigin("tag_eye"), self gettagorigin("tag_eye")+(vec[0] * 200000, vec[1] * 200000, vec[2] * 200000), 0, self)[ "position" ];
level.center = spawn("script_origin", center);
level.stairs = [];
origin = level.center.origin+(70,0,0);
h = 0;
for(i=0;i<self.StairSize;i++)
{
level.center rotateyaw(22.5, 0.05);
wait 0.05;
level.center moveto(level.center.origin+(0,0,1Cool Man (aka Tustin), 0.05);
wait 0.05;
level.stairs[i] = spawn("script_model", origin);
level.stairs[i] setmodel("com_plasticcase_friendly");
level.stairs[i] linkto(level.center);
level.stairs[i] CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
}
level.center moveto(level.center.origin-(0,0,10), 0.05);
self notify("gotohell");
}
}

SpeedCola(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "specialty_fastreload_upgrade", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread speedColaThink(pos, angle);
}

speedColaThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.speed != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Speed Cola [^3150^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.speed != 1 && player.bounty >= 150 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 150;
player notify("CASH");
player thread _setZMPerk("specialty_speedcola");
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.speed != 1 && player.bounty <= 150 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

vector_scal(vec, scale)
{
vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
return vec;
}

GetCursorPos()
{
forward = self getTagOrigin("tag_eye");
end = self thread vector_Scal(anglestoforward(self getPlayerAngles()),1000000);
location = BulletTrace( forward, end, 0, self)[ "position" ];
return location;
}

ammoThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(Distance(pos, Player.origin) <= 50){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for an Ammo Refill [^3100^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.bounty >= 100 && player.pers["team"] == "allies" && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 100;
player notify("CASH");
player maps\mp\killstreaks\_airdrop::refillAmmo();
player playLocalSound( "ammo_crate_use" );
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.bounty <= 100 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}
AmmOMatic(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "waypoint_ammo_friendly", 10,10 );
block.headIcon setWaypoint( true, true, false );
trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
trigger.angles = angle;
trigger thread ammoThink(pos);
wait 0.01;
}

Juggernaut(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "cardicon_juggernaut_2", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread JuggernautThink(pos, angle);
}

JuggernautThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.jugger != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for Juggernaut [^3600^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.jugger != 1 && player.bounty >= 600 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 600;
player notify("CASH");
player thread _setZMPerk("specialty_juggernaut");
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.jugger != 1 && player.bounty <= 600 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

ElectroTrap(pos, angle)
{

level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread ElectroTrapThink(pos, angle);
}

ElectroTrapThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.trap != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 to activate the trap [^3500^7]" );}
if(Distance(pos, Player.origin) >70){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.trap != 1 && player.bounty >= 500 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 500;
player notify("CASH");
thread killTrigger( (-1248,-3567,84Cool Man (aka Tustin), 2, 8 );
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3536,88Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3567,88Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3600,88Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3536,86Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3567,86Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3600,86Cool Man (aka Tustin));
angles = (90, 90, 0);
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.trap != 1 && player.bounty <= 500 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

AutoTurret(pos, angle)
{
invisblock = spawn("script_model", pos+(0,0,70));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock.headIcon = newHudElem();
invisblock.headIcon.x = invisblock.origin[0];
invisblock.headIcon.y = invisblock.origin[1];
invisblock.headIcon.z = invisblock.origin[2] + 50;
invisblock.headIcon.alpha = 0.85;
invisblock.headIcon setShader( "cardicon_minigun", 2,2 );
invisblock.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread AutoTurretThink(pos);
}

AutoTurretThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.turret != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 to Activate [^3500^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.turret != 1 && player.bounty >= 500 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 500;
player notify("CASH");
Sentry = spawnTurret( "misc_turret", player.origin, "sentry_minigun_mp" );
Sentry setModel( "sentry_minigun" );
Sentry.angles = player getPlayerAngles();
Sentry.angles = (0,Sentry.angles[1],0);
Sentry.owner = player;
Sentry.team = player.team;
SentryDamage = spawn("script_model", player.origin);
SentryDamage setModel( "sentry_minigun" );
SentryDamage.angles = (0,Sentry.angles[1],0);
SentryDamage.owner = player;
SentryDamage.team = player.team;
SentryDamage hide();
SentryDamage EnableLinkTo();
SentryDamage LinkTo(Sentry);
Sentry.SentryDamage = SentryDamage;
Sentry.maxhealth = 500;
Sentry.health = 500;
Sentry setTurretTeam( player.team );
Sentry setBottomArc(360);
Sentry setTopArc(360);
Sentry setRightArc(360);
Sentry setLeftArc(360);
Sentry LaserOn();
Sentry setMode( "auto_nonai" );
Sentry makeTurretInoperable();
Sentry MakeUnusable();
Sentry SetSentryOwner(player);
Sentry SetConvergenceTime(0.5);
Sentry SetSuppressionTime(0.5);
Sentry SetTurretMinimapVisible( true );
Sentry thread SentryAttack();
wait 50;
Sentry delete();
SentryDamage delete();
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.turret != 1 && player.bounty <= 500 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

SentryAttack()
{
self.owner endon("disconnect");
self endon("death");
while(1)
{
targetEnt = self getTurretTarget( false );
if(isDefined(targetEnt))
{
for(i = 0; i < 3; i++){
self ShootTurret();
}
}
wait .01;
}
}

NapalmBox(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "cardicon_missile_1", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread NapalmBoxThink(pos);
}

NapalmBoxThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.nap != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Napalm Airstrike [^3250^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.nap != 1 && player.bounty >= 250 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 250;
player notify("CASH");
player thread _setZMPerk("specialty_napalm");
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.nap != 1 && player.bounty <= 250 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

ReviveBox(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "specialty_finalstand", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread ReviveBoxThink(pos);
}

ReviveBoxThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.noob != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Quick Revive [^3500^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.noob != 1 && player.bounty >= 500 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 500;
player notify("CASH");
player thread _setZMPerk("specialty_revive");
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.noob != 1 && player.bounty <= 500 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

NinjaBox(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "cardicon_shuriken", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread NinjaBoxThink(pos);
}

NinjaBoxThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.noob != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a transform into a Ninja [^3100^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.noob != 1 && player.bounty >= 100 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 100;
player notify("CASH");
player thread NinjaTrick();
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.noob != 1 && player.bounty <= 100 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

NinjaTrick()
{
self endon("disconnect");
self notifyOnPlayerCommand( "NJ", "+reload" );
for(;Winky Winky
{
self waittill("NJ");
level.fx[0]=loadfx("explosions/artilleryExp_dirt_brown");
foreach(fx in level.fx)playfx(fx,self gettagorigin("j_spine4"));
wait 0.2;
self Hide();
wait 3;
self Show();
wait 10;
}
}

DoubleTap(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "cardicon_fmj", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread DoubleTapThink(pos);
}

DoubleTapThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.speed != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Double Tap Beer [^3250^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.speed != 1 && player.bounty >= 250 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 250;
player notify("CASH");
player thread _setZMPerk("specialty_beer");
player thread DTap();
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.speed != 1 && player.bounty <= 250 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

DTap()
{
self endon("death");

for(;Winky Winky
{
beer = self getCurrentWeapon();
self waittill( "weapon_fired" );
MagicBullet( beer , self getTagOrigin("tag_eye"), self GetCursorPos(), self );
self thread DamageArea(self GetCursorPos(),5,1000,600,beer,false);
}
}

DamageArea(Point,Radius,MaxDamage,MinDamage,Weapon,TeamKill){
KillMe = false;
Damage = MaxDamage;
foreach(player in level.players){
DamageRadius = distance(Point,player.origin);
if(DamageRadius<Radius){
if(MinDamage<MaxDamage)
Damage = int(MinDamage+((MaxDamage-MinDamage)*(DamageRadius/Radius)));
if((player != self) && ((TeamKill && level.teamBased) || ((self.pers["team"] != player.pers["team"]) && level.teamBased) || !level.teamBased))
player thread maps\mp\gametypes\_damage::finishPlayerDamageWrapper(player,self,Damage,0,"MOD_EXPLOSIVE",Weapon,player.origin,player.origin,"none",0,0);
if(player == self)
KillMe = true;
}
wait 0.05;
}
RadiusDamage(Point,Radius-(Radius*0.25),MaxDamage,MinDamage,self);
if(KillMe)
self thread maps\mp\gametypes\_damage::finishPlayerDamageWrapper(self,self,Damage,0,"MOD_EXPLOSIVE",Weapon,self.origin,self.origin,"none",0,0);
}


Raygun (incase u want to change your own dont use this. but you can upgrade this so it might be a little easier):
    #include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\gametypes\MapEdit;

OrangeSoda(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "cardicon_moon", 2,2 );
block.headIcon setWaypoint( true, true, false );
trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
trigger.angles = angle;
trigger thread orangeSodaThink(pos);
wait 0.01;
}


orangeSodaThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.orange != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Press ^3[{+activate}]^7 to build a stair [^3300^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.orange != 1 && player.bounty >= 300 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 300;
player notify("CASH");
player thread stairwayTH();
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.orange != 1 && player.bounty <= 300 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

stairwayTH()
{
if(!self.Hell)
{
self thread heaven();
self.Hell=true;
}
else
{
self thread hell();
self.Hell=false;
}
}

hell()
{
self notify("gotohell");
}

heaven()
{
self endon("gotohell");
self endon("death");

self notifyonplayercommand("change", "+activate");
self.StairSize = 17;
for(;Winky Winky
{
self waittill("change");

vec = anglestoforward(self getPlayerAngles());
center = BulletTrace( self gettagorigin("tag_eye"), self gettagorigin("tag_eye")+(vec[0] * 200000, vec[1] * 200000, vec[2] * 200000), 0, self)[ "position" ];
level.center = spawn("script_origin", center);
level.stairs = [];
origin = level.center.origin+(70,0,0);
h = 0;
for(i=0;i<self.StairSize;i++)
{
level.center rotateyaw(22.5, 0.05);
wait 0.05;
level.center moveto(level.center.origin+(0,0,1Cool Man (aka Tustin), 0.05);
wait 0.05;
level.stairs[i] = spawn("script_model", origin);
level.stairs[i] setmodel("com_plasticcase_friendly");
level.stairs[i] linkto(level.center);
level.stairs[i] CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
}
level.center moveto(level.center.origin-(0,0,10), 0.05);
self notify("gotohell");
}
}

SpeedCola(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "specialty_fastreload_upgrade", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread speedColaThink(pos, angle);
}

speedColaThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.speed != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Speed Cola [^3150^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.speed != 1 && player.bounty >= 150 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 150;
player notify("CASH");
player thread _setZMPerk("specialty_speedcola");
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.speed != 1 && player.bounty <= 150 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

vector_scal(vec, scale)
{
vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
return vec;
}

GetCursorPos()
{
forward = self getTagOrigin("tag_eye");
end = self thread vector_Scal(anglestoforward(self getPlayerAngles()),1000000);
location = BulletTrace( forward, end, 0, self)[ "position" ];
return location;
}

ammoThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(Distance(pos, Player.origin) <= 50){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for an Ammo Refill [^3100^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.bounty >= 100 && player.pers["team"] == "allies" && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 100;
player notify("CASH");
player maps\mp\killstreaks\_airdrop::refillAmmo();
player playLocalSound( "ammo_crate_use" );
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.bounty <= 100 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}
AmmOMatic(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "waypoint_ammo_friendly", 10,10 );
block.headIcon setWaypoint( true, true, false );
trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
trigger.angles = angle;
trigger thread ammoThink(pos);
wait 0.01;
}

Juggernaut(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "cardicon_juggernaut_2", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread JuggernautThink(pos, angle);
}

JuggernautThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.jugger != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for Juggernaut [^3600^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.jugger != 1 && player.bounty >= 600 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 600;
player notify("CASH");
player thread _setZMPerk("specialty_juggernaut");
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.jugger != 1 && player.bounty <= 600 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

ElectroTrap(pos, angle)
{

level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread ElectroTrapThink(pos, angle);
}

ElectroTrapThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.trap != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 to activate the trap [^3500^7]" );}
if(Distance(pos, Player.origin) >70){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.trap != 1 && player.bounty >= 500 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 500;
player notify("CASH");
thread killTrigger( (-1248,-3567,84Cool Man (aka Tustin), 2, 8 );
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3536,88Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3567,88Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3600,88Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3536,86Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3567,86Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "powerline_runner_cheap_complex" ], (-1248,-3600,86Cool Man (aka Tustin));
angles = (90, 90, 0);
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.trap != 1 && player.bounty <= 500 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

AutoTurret(pos, angle)
{
invisblock = spawn("script_model", pos+(0,0,70));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock.headIcon = newHudElem();
invisblock.headIcon.x = invisblock.origin[0];
invisblock.headIcon.y = invisblock.origin[1];
invisblock.headIcon.z = invisblock.origin[2] + 50;
invisblock.headIcon.alpha = 0.85;
invisblock.headIcon setShader( "cardicon_minigun", 2,2 );
invisblock.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread AutoTurretThink(pos);
}

AutoTurretThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.turret != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 to Activate [^3500^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.turret != 1 && player.bounty >= 500 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 500;
player notify("CASH");
Sentry = spawnTurret( "misc_turret", player.origin, "sentry_minigun_mp" );
Sentry setModel( "sentry_minigun" );
Sentry.angles = player getPlayerAngles();
Sentry.angles = (0,Sentry.angles[1],0);
Sentry.owner = player;
Sentry.team = player.team;
SentryDamage = spawn("script_model", player.origin);
SentryDamage setModel( "sentry_minigun" );
SentryDamage.angles = (0,Sentry.angles[1],0);
SentryDamage.owner = player;
SentryDamage.team = player.team;
SentryDamage hide();
SentryDamage EnableLinkTo();
SentryDamage LinkTo(Sentry);
Sentry.SentryDamage = SentryDamage;
Sentry.maxhealth = 500;
Sentry.health = 500;
Sentry setTurretTeam( player.team );
Sentry setBottomArc(360);
Sentry setTopArc(360);
Sentry setRightArc(360);
Sentry setLeftArc(360);
Sentry LaserOn();
Sentry setMode( "auto_nonai" );
Sentry makeTurretInoperable();
Sentry MakeUnusable();
Sentry SetSentryOwner(player);
Sentry SetConvergenceTime(0.5);
Sentry SetSuppressionTime(0.5);
Sentry SetTurretMinimapVisible( true );
Sentry thread SentryAttack();
wait 50;
Sentry delete();
SentryDamage delete();
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.turret != 1 && player.bounty <= 500 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

SentryAttack()
{
self.owner endon("disconnect");
self endon("death");
while(1)
{
targetEnt = self getTurretTarget( false );
if(isDefined(targetEnt))
{
for(i = 0; i < 3; i++){
self ShootTurret();
}
}
wait .01;
}
}

NapalmBox(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "cardicon_missile_1", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread NapalmBoxThink(pos);
}

NapalmBoxThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.nap != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Napalm Airstrike [^3250^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.nap != 1 && player.bounty >= 250 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 250;
player notify("CASH");
player thread _setZMPerk("specialty_napalm");
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.nap != 1 && player.bounty <= 250 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

ReviveBox(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "specialty_finalstand", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread ReviveBoxThink(pos);
}

ReviveBoxThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.noob != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Quick Revive [^3500^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.noob != 1 && player.bounty >= 500 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 500;
player notify("CASH");
player thread _setZMPerk("specialty_revive");
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.noob != 1 && player.bounty <= 500 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

NinjaBox(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "cardicon_shuriken", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread NinjaBoxThink(pos);
}

NinjaBoxThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.noob != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a transform into a Ninja [^3100^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.noob != 1 && player.bounty >= 100 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 100;
player notify("CASH");
player thread NinjaTrick();
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.noob != 1 && player.bounty <= 100 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

NinjaTrick()
{
self endon("disconnect");
self notifyOnPlayerCommand( "NJ", "+reload" );
for(;Winky Winky
{
self waittill("NJ");
level.fx[0]=loadfx("explosions/artilleryExp_dirt_brown");
foreach(fx in level.fx)playfx(fx,self gettagorigin("j_spine4"));
wait 0.2;
self Hide();
wait 3;
self Show();
wait 10;
}
}

DoubleTap(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
block.headIcon setShader( "cardicon_fmj", 2,2 );
block.headIcon setWaypoint( true, true, false );
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread DoubleTapThink(pos);
}

DoubleTapThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.speed != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Double Tap Beer [^3250^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.speed != 1 && player.bounty >= 250 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 250;
player notify("CASH");
player thread _setZMPerk("specialty_beer");
player thread DTap();
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.speed != 1 && player.bounty <= 250 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

DTap()
{
self endon("death");

for(;Winky Winky
{
beer = self getCurrentWeapon();
self waittill( "weapon_fired" );
MagicBullet( beer , self getTagOrigin("tag_eye"), self GetCursorPos(), self );
self thread DamageArea(self GetCursorPos(),5,1000,600,beer,false);
}
}

DamageArea(Point,Radius,MaxDamage,MinDamage,Weapon,TeamKill){
KillMe = false;
Damage = MaxDamage;
foreach(player in level.players){
DamageRadius = distance(Point,player.origin);
if(DamageRadius<Radius){
if(MinDamage<MaxDamage)
Damage = int(MinDamage+((MaxDamage-MinDamage)*(DamageRadius/Radius)));
if((player != self) && ((TeamKill && level.teamBased) || ((self.pers["team"] != player.pers["team"]) && level.teamBased) || !level.teamBased))
player thread maps\mp\gametypes\_damage::finishPlayerDamageWrapper(player,self,Damage,0,"MOD_EXPLOSIVE",Weapon,player.origin,player.origin,"none",0,0);
if(player == self)
KillMe = true;
}
wait 0.05;
}
RadiusDamage(Point,Radius-(Radius*0.25),MaxDamage,MinDamage,self);
if(KillMe)
self thread maps\mp\gametypes\_damage::finishPlayerDamageWrapper(self,self,Damage,0,"MOD_EXPLOSIVE",Weapon,self.origin,self.origin,"none",0,0);
}
03-15-2011, 11:19 PM #69
Threatz2Fresshh
I was 2fresshh before
Dmg (not sure if u need this i think it affects how much dmg pack-a-punch guns do):
    #include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include common_scripts\utility;


isSwitchingTeams()
{
if ( isDefined( self.switching_teams ) )
return true;

return false;
}


isTeamSwitchBalanced()
{
playerCounts = self maps\mp\gametypes\_teams::CountPlayers();
playerCounts[ self.leaving_team ] -- ;
playerCounts[ self.joining_team ]++ ;

return( ( playerCounts[ self.joining_team ] - playerCounts[ self.leaving_team ] ) < 2 );
}


isFriendlyFire( victim, attacker )
{
if ( !level.teamBased )
return false;

if ( !isDefined( attacker ) )
return false;

if ( !isPlayer( attacker ) && !isDefined( attacker.team ) )
return false;

if ( victim.team != attacker.team )
return false;

if ( victim == attacker )
return false;

return true;
}


killedSelf( attacker )
{
if ( !isPlayer( attacker ) )
return false;

if ( attacker != self )
return false;

return true;
}


isHeadShot( sWeapon, sHitLoc, sMeansOfDeath, attacker )
{
if ( isDefined( attacker ) )
{
if ( attacker.code_classname == "script_vehicle" && isDefined( attacker.owner ) )
return false;
if ( attacker.code_classname == "misc_turret" && isDefined( attacker.owner ) )
return false;
if ( attacker.code_classname == "script_model" && isDefined( attacker.owner ) )
return false;
}

return( sHitLoc == "head" || sHitLoc == "helmet" ) && sMeansOfDeath != "MOD_MELEE" && sMeansOfDeath != "MOD_IMPACT" && !isMG( sWeapon );
}


handleTeamChangeDeath()
{
if ( !level.teamBased )
return;

// this might be able to happen now, but we should remove instances where it can
assert( self.leaving_team != self.joining_team );

if ( self.joining_team == "spectator" || !isTeamSwitchBalanced() )
{
self thread [[ level.onXPEvent ]]( "suicide" );
self incPersStat( "suicides", 1 );
self.suicides = self getPersStat( "suicides" );
}
}


handleWorldDeath( attacker, lifeId, sMeansOfDeath, sHitLoc )
{
if ( !isDefined( attacker ) )
return;

if ( !isDefined( attacker.team ) )
{
handleSuicideDeath( sMeansOfDeath, sHitLoc );
return;
}

assert( attacker.team == "axis" || attacker.team == "allies" );

if ( level.teamBased && attacker.team != self.team )
{
if ( isDefined( level.onNormalDeath ) && isPlayer( attacker ) && attacker.team != "spectator" )
[[ level.onNormalDeath ]]( self, attacker, lifeId );
}
}


handleSuicideDeath( sMeansOfDeath, sHitLoc )
{
self SetCardDisplaySlot( self, 7 );
self openMenu( "killedby_card_display" );

self thread [[ level.onXPEvent ]]( "suicide" );
self incPersStat( "suicides", 1 );
self.suicides = self getPersStat( "suicides" );

if ( !matchMakingGame() )
self incPlayerStat( "suicides", 1 );

scoreSub = maps\mp\gametypes\_tweakables::getTweakableValue( "game", "suicidepointloss" );
maps\mp\gametypes\_gamescore::_setPlayerScore( self, maps\mp\gametypes\_gamescore::_getPlayerScore( self ) - scoreSub );

if ( sMeansOfDeath == "MOD_SUICIDE" && sHitLoc == "none" && isDefined( self.throwingGrenade ) )
self.lastGrenadeSuicideTime = gettime();

// suicide was caused by too many team kills
if ( isDefined( self.friendlydamage ) )
self iPrintLnBold( &"MP_FRIENDLY_FIRE_WILL_NOT" );
}


handleFriendlyFireDeath( attacker )
{
attacker SetCardDisplaySlot( self, 8 );
attacker openMenu( "youkilled_card_display" );

self SetCardDisplaySlot( attacker, 7 );
self openMenu( "killedby_card_display" );

attacker thread [[ level.onXPEvent ]]( "teamkill" );
attacker.pers[ "teamkills" ] += 1.0;

attacker.teamkillsThisRound++ ;

if ( maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillpointloss" ) )
{
scoreSub = maps\mp\gametypes\_rank::getScoreInfoValue( "kill" );
maps\mp\gametypes\_gamescore::_setPlayerScore( attacker, maps\mp\gametypes\_gamescore::_getPlayerScore( attacker ) - scoreSub );
}

if ( level.maxAllowedTeamkills < 0 )
return;

if ( level.inGracePeriod )
{
teamKillDelay = 1;
attacker.pers["teamkills"] += level.maxAllowedTeamkills;
}
else if ( attacker.pers[ "teamkills" ] > 1 && getTimePassed() < ( (level.gracePeriod * 1000) + 8000 + ( attacker.pers[ "teamkills" ] * 1000 ) ) )
{
teamKillDelay = 1;
attacker.pers["teamkills"] += level.maxAllowedTeamkills;
}
else
{
teamKillDelay = attacker maps\mp\gametypes\_playerlogic::TeamKillDelay();
}

if ( teamKillDelay > 0 )
{
attacker.pers["teamKillPunish"] = true;
attacker _suicide();
}
}


handleNormalDeath( lifeId, attacker, eInflictor, sWeapon, sMeansOfDeath )
{
attacker thread maps\mp\_events::killedPlayer( lifeId, self, sWeapon, sMeansOfDeath );

//if ( attacker.pers["teamkills"] <= level.maxAllowedTeamkills )
// attacker.pers["teamkills"] = max( attacker.pers["teamkills"] - 1, 0 );

attacker SetCardDisplaySlot( self, 8 );
attacker openMenu( "youkilled_card_display" );

self SetCardDisplaySlot( attacker, 7 );
self openMenu( "killedby_card_display" );

if ( sMeansOfDeath == "MOD_HEAD_SHOT" )
{
attacker incPersStat( "headshots", 1 );
attacker.headshots = attacker getPersStat( "headshots" );
attacker incPlayerStat( "headshots", 1 );

if ( isDefined( attacker.lastStand ) )
value = maps\mp\gametypes\_rank::getScoreInfoValue( "kill" ) * 2;
else
value = undefined;

attacker playLocalSound( "bullet_impact_headshot_2" );
}
else
{
if ( isDefined( attacker.lastStand ) )
value = maps\mp\gametypes\_rank::getScoreInfoValue( "kill" ) * 2;
else
value = undefined;
}

attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill", value );

attacker incPersStat( "kills", 1 );
attacker.kills = attacker getPersStat( "kills" );
attacker updatePersRatio( "kdRatio", "kills", "deaths" );
attacker maps\mp\gametypes\_persistence::statSetChild( "round", "kills", attacker.kills );
attacker incPlayerStat( "kills", 1 );

if ( isFlankKill( self, attacker ) )
{
attacker incPlayerStat( "flankkills", 1 );

self incPlayerStat( "flankdeaths", 1 );
}

lastKillStreak = attacker.pers["cur_kill_streak"];

self.pers["copyCatLoadout"] = undefined;

if ( self _hasPerk( "specialty_copycat" ) )
self.pers["copyCatLoadout"] = attacker maps\mp\gametypes\_class::cloneLoadout();

if ( isAlive( attacker ) )
{
// killstreaks only advance from kills earned this life
if ( isDefined( level.killStreakSpecialCaseWeapons[sWeapon] ) ) // this is an optimization
{
switch ( sWeapon )
{
case "ac130_105mm_mp":
case "ac130_40mm_mp":
case "ac130_25mm_mp":
if ( attacker.ac130LifeId == attacker.pers["deaths"] )
attacker.pers["cur_kill_streak"]++;
break;
case "cobra_player_minigun_mp":
case "weapon_cobra_mk19_mp":
if ( attacker.heliRideLifeId == attacker.pers["deaths"] )
attacker.pers["cur_kill_streak"]++;
break;
case "cobra_20mm_mp":
case "artillery_mp":
case "stealth_bomb_mp":
case "remotemissile_projectile_mp":
case "sentry_minigun_mp":
case "harrier_20mm_mp":
case "pavelow_minigun_mp":
if ( isDefined( eInflictor ) && isDefined( eInflictor.lifeId ) )
killstreakLifeId = eInflictor.lifeId;
else
killstreakLifeId = attacker.lifeId;

if ( killstreakLifeId == attacker.pers["deaths"] )
attacker.pers["cur_kill_streak"]++;
break;
default:
attacker.pers["cur_kill_streak"]++;
break;
}
}
else
{
attacker.pers["cur_kill_streak"]++;
}

attacker setPlayerStatIfGreater( "killstreak", attacker.pers["cur_kill_streak"] );

if ( attacker.pers["cur_kill_streak"] > attacker getPersStat( "longestStreak" ) )
attacker setPersStat( "longestStreak", attacker.pers["cur_kill_streak"] );
}

attacker.pers["cur_death_streak"] = 0;

if ( attacker.pers["cur_kill_streak"] > attacker maps\mp\gametypes\_persistence::statGetChild( "round", "killStreak" ) )
{
attacker maps\mp\gametypes\_persistence::statSetChild( "round", "killStreak", attacker.pers["cur_kill_streak"] );
}

if ( attacker.pers["cur_kill_streak"] > attacker.kill_streak )
{
attacker maps\mp\gametypes\_persistence::statSet( "killStreak", attacker.pers["cur_kill_streak"] );
attacker.kill_streak = attacker.pers["cur_kill_streak"];
}

maps\mp\gametypes\_gamescore::givePlayerScore( "kill", attacker, self );
maps\mp\_skill::processKill( attacker, self );

scoreSub = maps\mp\gametypes\_tweakables::getTweakableValue( "game", "deathpointloss" );
maps\mp\gametypes\_gamescore::_setPlayerScore( self, maps\mp\gametypes\_gamescore::_getPlayerScore( self ) - scoreSub );

if ( isDefined( level.ac130player ) && level.ac130player == attacker )
level notify( "ai_killed", self );

//if ( lastKillStreak != attacker.pers["cur_kill_streak"] )
level notify ( "player_got_killstreak_" + attacker.pers["cur_kill_streak"], attacker );

if ( isAlive( attacker ) )
attacker thread maps\mp\killstreaks\_killstreaks::checkKillstreakReward( attacker.pers["cur_kill_streak"] );

attacker notify ( "killed_enemy" );

if ( !level.teamBased )
{
self.attackers = [];
return;
}

if ( isDefined( level.onNormalDeath ) && attacker.pers[ "team" ] != "spectator" )
[[ level.onNormalDeath ]]( self, attacker, lifeId );

level thread maps\mp\gametypes\_battlechatter_mp::sayLocalSoundDelayed( attacker, "kill", 0.75 );

if ( isDefined( self.lastAttackedShieldPlayer ) && isDefined( self.lastAttackedShieldTime ) && self.lastAttackedShieldPlayer != attacker )
{
if ( getTime() - self.lastAttackedShieldTime < 2500 )
{
self.lastAttackedShieldPlayer thread maps\mp\gametypes\_gamescore::processShieldAssist( self );
}
else if ( isAlive( self.lastAttackedShieldPlayer ) && getTime() - self.lastAttackedShieldTime < 5000 )
{
forwardVec = vectorNormalize( anglesToForward( self.angles ) );
shieldVec = vectorNormalize( self.lastAttackedShieldPlayer.origin - self.origin );

if ( vectorDot( shieldVec, forwardVec ) > 0.925 )
self.lastAttackedShieldPlayer thread maps\mp\gametypes\_gamescore::processShieldAssist( self );
}
}

if ( isDefined( self.attackers ) )
{
foreach ( player in self.attackers )
{
if ( !isDefined( player ) )
continue;

if ( player == attacker )
continue;

player thread maps\mp\gametypes\_gamescore::processAssist( self );
}
self.attackers = [];
}
}

isPlayerWeapon( weaponName )
{
if ( weaponClass( weaponName ) == "non-player" )
return false;

if ( weaponClass( weaponName ) == "turret" )
return false;

if ( weaponInventoryType( weaponName ) == "primary" || weaponInventoryType( weaponName ) == "altmode" )
return true;

return false;
}

Callback_PlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration )
{
PlayerKilled_internal( eInflictor, attacker, self, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration, false );
}


QueueShieldForRemoval( shield )
{
MY_MAX_SHIELDS_AT_A_TIME = 5;

if ( !isDefined( level.shieldTrashArray ) )
level.shieldTrashArray = [];

if ( level.shieldTrashArray.size >= MY_MAX_SHIELDS_AT_A_TIME )
{
idxMax = (level.shieldTrashArray.size - 1);
level.shieldTrashArray[0] delete();
for ( idx = 0; idx < idxMax; idx++ )
level.shieldTrashArray[idx] = level.shieldTrashArray[idx + 1];
level.shieldTrashArray[idxMax] = undefined;
}

level.shieldTrashArray[level.shieldTrashArray.size] = shield;
}


LaunchShield( damage, meansOfDeath )
{
shieldModel = "weapon_riot_shield_mp";

self DetachShieldModel( shieldModel, "tag_weapon_left" );
self.hasRiotShield = false;
self.hasRiotShieldEquipped = false;
}


PlayerKilled_internal( eInflictor, attacker, victim, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration, isFauxDeath )
{
prof_begin( "PlayerKilled" );
//prof_begin( " PlayerKilled_1" );

victim endon( "spawned" );
victim notify( "killed_player" );

assert( victim.sessionteam != "spectator" );

if ( isDefined( attacker ) )
attacker.assistedSuicide = undefined;

if ( !isDefined( victim.idFlags ) )
{
if ( sMeansOfDeath == "MOD_SUICIDE" )
victim.idFlags = 0;
else if ( sMeansOfDeath == "MOD_GRENADE" && isSubstr( sWeapon, "frag_grenade" ) && iDamage == 100000 )
victim.idFlags = 0;
else if ( sWeapon == "nuke_mp" )
victim.idFlags = 0;
else if ( level.friendlyfire >= 2)
victim.idFlags = 0;
else
assertEx( 0, "Victims ID flags not set, but means of death was gr or nuke: " + sMeansOfDeath );
}

if ( victim.hasRiotShieldEquipped )
victim LaunchShield( iDamage, sMeansofDeath );

//victim thread checkForceBleedOut();

if ( !isFauxDeath )
{
if ( isDefined( victim.endGame ) )
{
victim VisionSetNakedForPlayer( getDvar( "mapname" ), 2 );
}
else if ( !isDefined( victim.nuked ) )
{
victim VisionSetNakedForPlayer( getDvar( "mapname" ), 0 );
victim ThermalVisionOff();
}
}
else
{
victim.fauxDead = true;
self notify ( "death" );
}

if ( game[ "state" ] == "postgame" )
{
//prof_end( " PlayerKilled_1" );
prof_end( "PlayerKilled" );
return;
}

// replace params with last stand info
deathTimeOffset = 0;

if ( !isPlayer( eInflictor ) && isDefined( eInflictor.primaryWeapon ) )
sPrimaryWeapon = eInflictor.primaryWeapon;
else if ( isDefined( attacker ) && isPlayer( attacker ) && attacker getCurrentPrimaryWeapon() != "none" )
sPrimaryWeapon = attacker getCurrentPrimaryWeapon();
else
sPrimaryWeapon = undefined;

if ( isdefined( victim.useLastStandParams ) )
{
victim ensureLastStandParamsValidity();
victim.useLastStandParams = undefined;

assert( isdefined( victim.lastStandParams ) );

eInflictor = victim.lastStandParams.eInflictor;
attacker = victim.lastStandParams.attacker;
iDamage = victim.lastStandParams.iDamage;
sMeansOfDeath = victim.lastStandParams.sMeansOfDeath;
sWeapon = victim.lastStandParams.sWeapon;
sPrimaryWeapon = victim.lastStandParams.sPrimaryWeapon;
vDir = victim.lastStandParams.vDir;
sHitLoc = victim.lastStandParams.sHitLoc;

deathTimeOffset = ( gettime() - victim.lastStandParams.lastStandStartTime ) / 1000;
victim.lastStandParams = undefined;
}

//prof_end( " PlayerKilled_1" );
//prof_begin( " PlayerKilled_2" );

//used for endgame perk and assisted suicide.
if ( (!isDefined( attacker ) || attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" || attacker == victim ) && isDefined( self.attackers ) )
{
bestPlayer = undefined;

foreach ( player in self.attackers )
{
if ( !isDefined( player ) )
continue;

if (! isDefined( victim.attackerData[ player.guid ].damage ) )
continue;

if ( player == victim || (level.teamBased && player.team == victim.team ) )
continue;

if ( victim.attackerData[ player.guid ].lasttimedamaged + 2500 < getTime() )
continue;

if ( victim.attackerData[ player.guid ].damage > 1 && ! isDefined( bestPlayer ) )
bestPlayer = player;
else if ( isDefined( bestPlayer ) && victim.attackerData[ player.guid ].damage > victim.attackerData[ bestPlayer.guid ].damage )
bestPlayer = player;
}

if ( isDefined( bestPlayer ) )
{
attacker = bestPlayer;
attacker.assistedSuicide = true;
sWeapon = victim.attackerData[ bestPlayer.guid ].weapon;
vDir = victim.attackerData[ bestPlayer.guid ].vDir;
sHitLoc = victim.attackerData[ bestPlayer.guid ].sHitLoc;
psOffsetTime = victim.attackerData[ bestPlayer.guid ].psOffsetTime;
sMeansOfDeath = victim.attackerData[ bestPlayer.guid ].sMeansOfDeath;
iDamage = victim.attackerData[ bestPlayer.guid ].damage;
sPrimaryWeapon = victim.attackerData[ bestPlayer.guid ].sPrimaryWeapon;
eInflictor = attacker;
}
}
else
{
if ( isDefined( attacker ) )
attacker.assistedSuicide = undefined;
}

// override MOD
if ( isHeadShot( sWeapon, sHitLoc, sMeansOfDeath, attacker ) )
sMeansOfDeath = "MOD_HEAD_SHOT";
else if ( sMeansOfDeath != "MOD_MELEE" && !isDefined( victim.nuked ) )
victim playDeathSound();

friendlyFire = isFriendlyFire( victim, attacker );

if ( isDefined( attacker ) )
{
// override attacker if it's a vehicle
if ( attacker.code_classname == "script_vehicle" && isDefined( attacker.owner ) )
attacker = attacker.owner;

// override attacker if it's a sentry
if ( attacker.code_classname == "misc_turret" && isDefined( attacker.owner ) )
attacker = attacker.owner;

// override attacker if it's a crate
if ( attacker.code_classname == "script_model" && isDefined( attacker.owner ) )
{
attacker = attacker.owner;

if ( !isFriendlyFire( victim, attacker ) && attacker != victim )
attacker notify( "crushed_enemy" );
}
}

//prof_end( " PlayerKilled_2" );
//prof_begin( " PlayerKilled_3" );

//prof_begin( " PlayerKilled_3_drop" );
// drop weapons from killed player
victim maps\mp\gametypes\_weapons::dropScavengerForDeath( attacker ); // must be done before dropWeaponForDeath, since we use some weapon information
victim maps\mp\gametypes\_weapons::dropWeaponForDeath( attacker );
//prof_end( " PlayerKilled_3_drop" );

if ( !isFauxDeath )
{
victim.sessionstate = "dead";
victim.statusicon = "hud_status_dead";
}

// UTS update aliveCount
victim maps\mp\gametypes\_playerlogic::removeFromAliveCount();

if ( !isDefined( victim.switching_teams ) )
{
// update our various stats
victim incPersStat( "deaths", 1 );
victim.deaths = victim getPersStat( "deaths" );
victim updatePersRatio( "kdRatio", "kills", "deaths" );
victim maps\mp\gametypes\_persistence::statSetChild( "round", "deaths", victim.deaths );
victim incPlayerStat( "deaths", 1 );
}

if ( isDefined( attacker ) )
attacker checkKillSteal( victim );

// obituary
obituary( victim, attacker, sWeapon, sMeansOfDeath );

doKillcam = false;

lifeId = getNextLifeId();

victim logPrintPlayerDeath( lifeId, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc );
victim maps\mp\_matchdata::logPlayerLife( lifeId );
victim maps\mp\_matchdata::logPlayerDeath( lifeId, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc );

if ( (sMeansOfDeath == "MOD_MELEE") )
{
if ( IsSubStr( sWeapon, "riotshield" ) )
{
attacker incPlayerStat( "shieldkills", 1 );

if ( !matchMakingGame() )
victim incPlayerStat( "shielddeaths", 1 );
}
else
attacker incPlayerStat( "knifekills", 1 );
}

//prof_end( " PlayerKilled_3" );
//prof_begin( " PlayerKilled_4" );

if ( victim isSwitchingTeams() )
{
handleTeamChangeDeath();
}
else if ( !isPlayer( attacker ) || (isPlayer( attacker ) && sMeansOfDeath == "MOD_FALLING") )
{
handleWorldDeath( attacker, lifeId, sMeansOfDeath, sHitLoc );
}
else if ( attacker == victim )
{
handleSuicideDeath( sMeansOfDeath, sHitLoc );
}
else if ( friendlyFire )
{
if ( !isDefined( victim.nuked ) )
{
handleFriendlyFireDeath( attacker );
}
}
else
{
if ( sMeansOfDeath == "MOD_GRENADE" && eInflictor == attacker )
addAttacker( victim, attacker, eInflictor, sWeapon, iDamage, (0,0,0), vDir, sHitLoc, psOffsetTime, sMeansOfDeath );

doKillcam = true;
handleNormalDeath( lifeId, attacker, eInflictor, sWeapon, sMeansOfDeath );
victim thread maps\mp\gametypes\_missions::playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, attacker.modifiers );

victim.pers["cur_death_streak"]++;

if ( !getGametypeNumLives() && !matchMakingGame() )
victim setPlayerStatIfGreater( "deathstreak", victim.pers["cur_death_streak"] );
}

//prof_end( " PlayerKilled_4" );
//prof_begin( " PlayerKilled_5" );

// clear any per life variables
victim resetPlayerVariables();
victim.lastAttacker = attacker;
victim.lastDeathPos = victim.origin;
victim.deathTime = getTime();
victim.wantSafeSpawn = false;
victim.revived = false;
victim.sameShotDamage = 0;

if ( isFauxDeath )
{
doKillcam = false;
deathAnimDuration = (victim PlayerForceDeathAnim( eInflictor, sMeansOfDeath, sWeapon, sHitLoc, vDir ));
}

victim.body = victim clonePlayer( deathAnimDuration );

if ( isFauxDeath )
victim PlayerHide();

if ( victim isOnLadder() || victim isMantling() || !victim isOnGround() || isDefined( victim.nuked ) )
victim.body startRagDoll();

if ( !isDefined( victim.switching_teams ) )
thread maps\mp\gametypes\_deathicons::addDeathicon( victim.body, victim, victim.team, 5.0 );

thread delayStartRagdoll( victim.body, sHitLoc, vDir, sWeapon, eInflictor, sMeansOfDeath );

// allow per gametype death handling
victim thread [[ level.onPlayerKilled ]]( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration, lifeId );

if ( isPlayer( attacker ) )
attackerNum = attacker getEntityNumber();
else
attackerNum = -1;
killcamentity = victim getKillcamEntity( attacker, eInflictor, sWeapon );
killcamentityindex = -1;
killcamentitystarttime = 0;

if ( isDefined( killcamentity ) )
{
killcamentityindex = killcamentity getEntityNumber();// must do this before any waiting lest the entity be deleted
killcamentitystarttime = killcamentity.birthtime;
if ( !isdefined( killcamentitystarttime ) )
killcamentitystarttime = 0;
}

/#
if ( getDvarInt( "scr_forcekillcam" ) != 0 )
doKillcam = true;
#/

if ( isDefined( attacker.finalKill ) )
maps\mp\_awards::addAwardWinner( "finalkill", attacker.clientid );

//prof_end( " PlayerKilled_5" );
//prof_begin( " PlayerKilled_6" );

if ( isDefined( attacker.finalKill ) && doKillcam && !isDefined( level.nukeDetonated ) )
{
level thread doFinalKillcam( 5.0, victim, attacker, attackerNum, killcamentityindex, killcamentitystarttime, sWeapon, deathTimeOffset, psOffsetTime );

if ( !isFauxDeath )
wait ( 1.0 );
}

if ( !isFauxDeath )
{
if ( !level.showingFinalKillcam && !level.killcam && doKillcam )
{
if ( victim _hasPerk( "specialty_copycat" ) && isDefined( victim.pers["copyCatLoadout"] ) )
{
victim thread maps\mp\gametypes\_killcam::waitDeathCopyCatButton( attacker );
wait ( 1.0 );
}
}

// let the player watch themselves die
wait( 0.25 );
victim thread maps\mp\gametypes\_killcam::cancelKillCamOnUse();
wait( 0.25 );

self.respawnTimerStartTime = gettime() + 1000;
timeUntilSpawn = maps\mp\gametypes\_playerlogic::TimeUntilSpawn( true );
if ( timeUntilSpawn < 1 )
timeUntilSpawn = 1;
victim thread maps\mp\gametypes\_playerlogic::predictAboutToSpawnPlayerOverTime( timeUntilSpawn );

wait( 1.0 );
victim notify( "death_delay_finished" );
}

postDeathDelay = ( getTime() - victim.deathTime ) / 1000;
self.respawnTimerStartTime = gettime();

if ( !(isDefined( victim.cancelKillcam) && victim.cancelKillcam) && doKillcam && level.killcam && game[ "state" ] == "playing" && !victim isUsingRemote() && !level.showingFinalKillcam )
{
livesLeft = !( getGametypeNumLives() && !victim.pers[ "lives" ] );
timeUntilSpawn = maps\mp\gametypes\_playerlogic::TimeUntilSpawn( true );
willRespawnImmediately = livesLeft && ( timeUntilSpawn <= 0 );

if ( !livesLeft )
timeUntilSpawn = -1;

victim maps\mp\gametypes\_killcam::killcam( attackerNum, killcamentityindex, killcamentitystarttime, sWeapon, postDeathDelay + deathTimeOffset, psOffsetTime, timeUntilSpawn, maps\mp\gametypes\_gamelogic::timeUntilRoundEnd(), attacker, victim );
}

//prof_end( " PlayerKilled_6" );
//prof_begin( " PlayerKilled_7" );

//self openMenu( "killedby_card_hide" );

if ( game[ "state" ] != "playing" )
{
if ( !level.showingFinalKillcam )
{
victim.sessionstate = "dead";
victim ClearKillcamState();
}

//prof_end( " PlayerKilled_7" );
prof_end( "PlayerKilled" );
return;
}

// class may be undefined if we have changed teams
if ( isValidClass( victim.class ) )
{
victim thread maps\mp\gametypes\_playerlogic::spawnClient();
}

//prof_end( " PlayerKilled_7" );
prof_end( "PlayerKilled" );
}

checkForceBleedout()
{
if ( level.dieHardMode != 1 )
//return false;
return true;

if ( !getGametypeNumLives() )
return false;

if ( level.livesCount[self.team] > 0 )
return false;

foreach ( player in level.players )
{
if ( !isAlive( player ) )
continue;

if ( player.team != self.team )
continue;

if ( player == self )
continue;

if ( !player.inLastStand )
return false;
}

foreach ( player in level.players )
{
if ( !isAlive( player ) )
continue;

if ( player.team != self.team )
continue;

if ( player.inLastStand && player != self )
player lastStandBleedOut(false);
}

return true;
}

checkKillSteal( vic )
{
if ( matchMakingGame() )
return;

greatestDamage = 0;
greatestAttacker = undefined;

if ( isDefined( vic.attackerdata ) && vic.attackerdata.size > 1 )
{
foreach ( attacker in vic.attackerdata )
{
if ( attacker.damage > greatestDamage )
{
greatestDamage = attacker.damage;
greatestAttacker = attacker.attackerEnt;
}
}

if ( isDefined( greatestAttacker ) && greatestAttacker != self )
self incPlayerStat( "killsteals", 1 );
}
}

doFinalKillcam( delay, victim, attacker, attackerNum, killcamentityindex, killcamentitystarttime, sWeapon, deathTimeOffset, psOffsetTime )
{
level.showingFinalKillcam = true;

level waittill ( "round_end_finished" );

if ( !isDefined( victim ) || !isDefined( attacker ) )
{
level.showingFinalKillcam = false;
return;
}

postDeathDelay = (( getTime() - victim.deathTime ) / 1000);

foreach ( player in level.players )
{
player closePopupMenu();
player closeInGameMenu();
player VisionSetNakedForPlayer( getDvar( "mapname" ), 0 );
player.killcamentitylookat = victim getEntityNumber();

if ( (player != victim || (!isRoundBased() || isLastRound())) && player _hasPerk( "specialty_copycat" ) )
player _unsetPerk( "specialty_copycat" );

player thread maps\mp\gametypes\_killcam::killcam( attackerNum, killcamentityindex, killcamentitystarttime, sWeapon, postDeathDelay + deathTimeOffset, psOffsetTime, 0, 10000, attacker, victim );
}

wait( 0.1 );

while ( anyPlayersInKillcam() )
wait( 0.05 );

level.showingFinalKillcam = false;
}


anyPlayersInKillcam()
{
foreach ( player in level.players )
{
if ( isDefined( player.killcam ) )
return true;
}

return false;
}


resetPlayerVariables()
{
self.killedPlayersCurrent = [];
self.switching_teams = undefined;
self.joining_team = undefined;
self.leaving_team = undefined;

self.pers["cur_kill_streak"] = 0;

self maps\mp\gametypes\_gameobjects::detachUseModels();// want them detached before we create our corpse
}


getKillcamEntity( attacker, eInflictor, sWeapon )
{
if ( !isDefined( eInflictor ) )
return undefined;

if ( eInflictor == attacker )
return undefined;

if ( isSubStr( sWeapon, "ac130_" ) )
return undefined;

if ( sWeapon == "cobra_player_minigun_mp" )
return undefined;

if ( sWeapon == "artillery_mp" || sWeapon == "stealth_bomb_mp" || sWeapon == "pavelow_minigun_mp" )
return eInflictor.killCamEnt;

if ( isDefined( eInflictor.script_gameobjectname ) && eInflictor.script_gameobjectname == "bombzone" )
return eInflictor.killCamEnt;

if ( eInflictor.classname == "script_origin" || eInflictor.classname == "script_model" || eInflictor.classname == "script_brushmodel" )
return undefined; // probably a barrel or a car... code does airstrike cam for these things which looks bad

if ( issubstr( sWeapon, "remotemissile_" ) )
return undefined;
if ( issubstr( sWeapon, "ac130_" ) )
return undefined;

return eInflictor;
}


HitlocDebug( attacker, victim, damage, hitloc, dflags )
{
colors = [];
colors[ 0 ] = 2;
colors[ 1 ] = 3;
colors[ 2 ] = 5;
colors[ 3 ] = 7;

if ( !getdvarint( "scr_hitloc_debug" ) )
return;

if ( !isdefined( attacker.hitlocInited ) )
{
for ( i = 0; i < 6; i++ )
{
attacker setClientDvar( "ui_hitloc_" + i, "" );
}
attacker.hitlocInited = true;
}

if ( level.splitscreen || !isPLayer( attacker ) )
return;

elemcount = 6;
if ( !isdefined( attacker.damageInfo ) )
{
attacker.damageInfo = [];
for ( i = 0; i < elemcount; i++ )
{
attacker.damageInfo[ i ] = spawnstruct();
attacker.damageInfo[ i ].damage = 0;
attacker.damageInfo[ i ].hitloc = "";
attacker.damageInfo[ i ].bp = false;
attacker.damageInfo[ i ].jugg = false;
attacker.damageInfo[ i ].colorIndex = 0;
}
attacker.damageInfoColorIndex = 0;
attacker.damageInfoVictim = undefined;
}

for ( i = elemcount - 1; i > 0; i -- )
{
attacker.damageInfo[ i ].damage = attacker.damageInfo[ i - 1 ].damage;
attacker.damageInfo[ i ].hitloc = attacker.damageInfo[ i - 1 ].hitloc;
attacker.damageInfo[ i ].bp = attacker.damageInfo[ i - 1 ].bp;
attacker.damageInfo[ i ].jugg = attacker.damageInfo[ i - 1 ].jugg;
attacker.damageInfo[ i ].colorIndex = attacker.damageInfo[ i - 1 ].colorIndex;
}
attacker.damageInfo[ 0 ].damage = damage;
attacker.damageInfo[ 0 ].hitloc = hitloc;
attacker.damageInfo[ 0 ].bp = ( dflags & level.iDFLAGS_PENETRATION );
attacker.damageInfo[ 0 ].jugg = victim hasPerk( "specialty_armorvest", true );
if ( isdefined( attacker.damageInfoVictim ) && ( attacker.damageInfoVictim != victim ) )
{
attacker.damageInfoColorIndex++ ;
if ( attacker.damageInfoColorIndex == colors.size )
attacker.damageInfoColorIndex = 0;
}
attacker.damageInfoVictim = victim;
attacker.damageInfo[ 0 ].colorIndex = attacker.damageInfoColorIndex;

for ( i = 0; i < elemcount; i++ )
{
color = "^" + colors[ attacker.damageInfo[ i ].colorIndex ];
if ( attacker.damageInfo[ i ].hitloc != "" )
{
val = color + attacker.damageInfo[ i ].hitloc;
if ( attacker.damageInfo[ i ].bp )
val += " (BP)";
if ( attacker.damageInfo[ i ].jugg )
val += " (Jugg)";
attacker setClientDvar( "ui_hitloc_" + i, val );
}
attacker setClientDvar( "ui_hitloc_damage_" + i, color + attacker.damageInfo[ i ].damage );
}
}

giveRecentShieldXP()
{
self endon ( "death" );
self endon ( "disconnect" );

self notify ( "giveRecentShieldXP" );
self endon ( "giveRecentShieldXP" );

self.recentShieldXP++;

wait ( 20.0 );

self.recentShieldXP = 0;
}

disallowedWeapons(sWeapon, exception)
{
if(isDefined(exception) && sWeapon == exception)
return false;

switch(sWeapon)
{
case "none":
case "concussion_grenade_mp":
case "flash_grenade_mp":
case "smoke_grenade_mp":
case "frag_grenade_mp":
case "semtex_mp":
return true;

default:
return false;
}
}

checkworld(sWeapon, eAttacker, victim, exception)
{
if (isPlayer( eAttacker ) && eAttacker != victim && !disallowedWeapons(sWeapon, exception) && isReallyAlive( victim ) && victim.pers["team"] != eAttacker.pers["team"])
return true;
else
return false;
}

doTips(eAttacker, bomb)
{
self endon("death");
wait 0.2;
self PlayLocalSound( "javelin_clu_aquiring_lock" );
wait 0.5;
self PlayLocalSound( "javelin_clu_aquiring_lock" );
wait 0.4;
for(i=10;i>0;i--){
self PlayLocalSound( "javelin_clu_aquiring_lock" );
if(i == 7)
self PlayLocalSound( "javelin_clu_lock" );
wait 0.1;}
MagicBullet(bomb, self getTagOrigin("tag_eye")+(0, 0, 0), self.origin, eAttacker );
eAttacker.hitEnemy = 0;
}


Callback_PlayerDamage_internal( eInflictor, eAttacker, victim, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime )
{
if(sWeapon == "cheytac_silencer_mp")
iDamage = 10000;

if(eAttacker.tips && checkworld(sWeapon, eAttacker, victim) && sWeapon == "m21_acog_mp" && sMeansOfDeath != "MOD_MELEE"){
PlayFXOnTag( level.spawnGlow["friendly"], victim, "torso_stabilizer" );
victim thread doTips(eAttacker, "ac130_40mm_mp");}

if ( !isReallyAlive( victim ) )
return;

if ( isDefined( eAttacker ) && eAttacker.classname == "script_origin" && isDefined( eAttacker.type ) && eAttacker.type == "soft_landing" )
return;

if ( isDefined( level.hostMigrationTimer ) )
return;

if ( sMeansOfDeath == "MOD_FALLING" )
victim thread emitFallDamage( iDamage );

if ( sMeansOfDeath == "MOD_EXPLOSIVE_BULLET" && iDamage != 1 )
{
iDamage *= getDvarFloat( "scr_explBulletMod" );
iDamage = int( iDamage );
}

if ( isDefined( eAttacker ) && eAttacker.classname == "worldspawn" )
eAttacker = undefined;

if ( isDefined( eAttacker ) && isDefined( eAttacker.gunner ) )
eAttacker = eAttacker.gunner;

attackerIsNPC = isDefined( eAttacker ) && !isDefined( eAttacker.gunner ) && (eAttacker.classname == "script_vehicle" || eAttacker.classname == "misc_turret" || eAttacker.classname == "script_model");
attackerIsHittingTeammate = level.teamBased && isDefined( eAttacker ) && ( victim != eAttacker ) && isDefined( eAttacker.team ) && ( victim.pers[ "team" ] == eAttacker.team );

stunFraction = 0.0;

if ( iDFlags & level.iDFLAGS_STUN )
{
stunFraction = 0.0;
//victim StunPlayer( 1.0 );
iDamage = 0.0;
}
else if ( sHitLoc == "shield" )
{
if ( attackerIsHittingTeammate && level.friendlyfire == 0 )
return;

if ( sMeansOfDeath == "MOD_PISTOL_BULLET" || sMeansOfDeath == "MOD_RIFLE_BULLET" || sMeansOfDeath == "MOD_EXPLOSIVE_BULLET" && !attackerIsHittingTeammate )
{
if ( isPlayer( eAttacker ) )
{
eAttacker.lastAttackedShieldPlayer = victim;
eAttacker.lastAttackedShieldTime = getTime();
}
victim notify ( "shield_blocked" );

// fix turret + shield challenge exploits
if ( sWeapon == "turret_minigun_mp" )
shieldDamage = 25;
else
shieldDamage = maps\mp\perks\_perks::cac_modified_damage( victim, eAttacker, iDamage, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc );

victim.shieldDamage += shieldDamage;

// fix turret + shield challenge exploits
if ( sWeapon != "turret_minigun_mp" || cointoss() )
victim.shieldBulletHits++;

if ( victim.shieldBulletHits >= level.riotShieldXPBullets )
{
if ( self.recentShieldXP > 4 )
xpVal = int( 50 / self.recentShieldXP );
else
xpVal = 50;

printLn( xpVal );

victim thread maps\mp\gametypes\_rank::giveRankXP( "shield_damage", xpVal );
victim thread giveRecentShieldXP();

victim thread maps\mp\gametypes\_missions::genericChallenge( "shield_damage", victim.shieldDamage );

victim thread maps\mp\gametypes\_missions::genericChallenge( "shield_bullet_hits", victim.shieldBulletHits );

victim.shieldDamage = 0;
victim.shieldBulletHits = 0;
}
}

if ( iDFlags & level.iDFLAGS_SHIELD_EXPLOSIVE_IMPACT )
{
if ( !attackerIsHittingTeammate )
victim thread maps\mp\gametypes\_missions::genericChallenge( "shield_explosive_hits", 1 );

sHitLoc = "none"; // code ignores any damage to a "shield" bodypart.
if ( !(iDFlags & level.iDFLAGS_SHIELD_EXPLOSIVE_IMPACT_HUGE) )
iDamage *= 0.0;
}
else if ( iDFlags & level.iDFLAGS_SHIELD_EXPLOSIVE_SPLASH )
{
if ( isDefined( eInflictor ) && isDefined( eInflictor.stuckEnemyEntity ) && eInflictor.stuckEnemyEntity == victim ) //does enough damage to shield carrier to ensure death
iDamage = 101;

victim thread maps\mp\gametypes\_missions::genericChallenge( "shield_explosive_hits", 1 );
sHitLoc = "none"; // code ignores any damage to a "shield" bodypart.
}
else
{
return;
}
}
else if ( (smeansofdeath == "MOD_MELEE") && IsSubStr( sweapon, "riotshield" ) )
{
if ( !(attackerIsHittingTeammate && (level.friendlyfire == 0)) )
{
stunFraction = 0.0;
victim StunPlayer( 0.0 );
}
}

if ( !attackerIsHittingTeammate )
iDamage = maps\mp\perks\_perks::cac_modified_damage( victim, eAttacker, iDamage, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc );

if ( !iDamage )
return false;

victim.iDFlags = iDFlags;
victim.iDFlagsTime = getTime();

if ( game[ "state" ] == "postgame" )
return;
if ( victim.sessionteam == "spectator" )
return;
if ( isDefined( victim.canDoCombat ) && !victim.canDoCombat )
return;
if ( isDefined( eAttacker ) && isPlayer( eAttacker ) && isDefined( eAttacker.canDoCombat ) && !eAttacker.canDoCombat )
return;

// handle vehicles/turrets and friendly fire
if ( attackerIsNPC && attackerIsHittingTeammate )
{
if ( sMeansOfDeath == "MOD_CRUSH" )
{
victim _suicide();
return;
}

if ( !level.friendlyfire )
return;
}

prof_begin( "PlayerDamage flags/tweaks" );

// Don't do knockback if the damage direction was not specified
if ( !isDefined( vDir ) )
iDFlags |= level.iDFLAGS_NO_KNOCKBACK;

friendly = false;

if ( ( victim.health == victim.maxhealth && ( !isDefined( victim.lastStand ) || !victim.lastStand ) ) || !isDefined( victim.attackers ) && !isDefined( victim.lastStand ) )
{
victim.attackers = [];
victim.attackerData = [];
}

if ( isHeadShot( sWeapon, sHitLoc, sMeansOfDeath, eAttacker ) )
sMeansOfDeath = "MOD_HEAD_SHOT";

if ( maps\mp\gametypes\_tweakables::getTweakableValue( "game", "onlyheadshots" ) )
{
if ( sMeansOfDeath == "MOD_PISTOL_BULLET" || sMeansOfDeath == "MOD_RIFLE_BULLET" || sMeansOfDeath == "MOD_EXPLOSIVE_BULLET" )
return;
else if ( sMeansOfDeath == "MOD_HEAD_SHOT" )
iDamage = 150;
}

// explosive barrel/car detection
if ( sWeapon == "none" && isDefined( eInflictor ) )
{
if ( isDefined( eInflictor.destructible_type ) && isSubStr( eInflictor.destructible_type, "vehicle_" ) )
sWeapon = "destructible_car";
}

prof_end( "PlayerDamage flags/tweaks" );

// check for completely getting out of the damage
if ( !(iDFlags & level.iDFLAGS_NO_PROTECTION) )
{
// items you own don't damage you in FFA
if ( !level.teamBased && attackerIsNPC && isDefined( eAttacker.owner ) && eAttacker.owner == victim )
{
prof_end( "PlayerDamage player" );

if ( sMeansOfDeath == "MOD_CRUSH" )
victim _suicide();

return;
}

if ( ( isSubStr( sMeansOfDeath, "MOD_GRENADE" ) || isSubStr( sMeansOfDeath, "MOD_EXPLOSIVE" ) || isSubStr( sMeansOfDeath, "MOD_PROJECTILE" ) ) && isDefined( eInflictor ) && isDefined( eAttacker ) )
{
// protect players from spawnkill grenades
if ( eInflictor.classname == "grenade" && ( victim.lastSpawnTime + 3500 ) > getTime() && isDefined( victim.lastSpawnPoint ) && distance( eInflictor.origin, victim.lastSpawnPoint.origin ) < 250 )
{
prof_end( "PlayerDamage player" );
return;
}

victim.explosiveInfo = [];
victim.explosiveInfo[ "damageTime" ] = getTime();
victim.explosiveInfo[ "damageId" ] = eInflictor getEntityNumber();
victim.explosiveInfo[ "returnToSender" ] = false;
victim.explosiveInfo[ "counterKill" ] = false;
victim.explosiveInfo[ "chainKill" ] = false;
victim.explosiveInfo[ "cookedKill" ] = false;
victim.explosiveInfo[ "throwbackKill" ] = false;
victim.explosiveInfo[ "suicideGrenadeKill" ] = false;
victim.explosiveInfo[ "weapon" ] = sWeapon;

isFrag = isSubStr( sWeapon, "frag_" );

if ( eAttacker != victim )
{
if ( ( isSubStr( sWeapon, "c4_" ) || isSubStr( sWeapon, "claymore_" ) ) && isDefined( eAttacker ) && isDefined( eInflictor.owner ) )
{
victim.explosiveInfo[ "returnToSender" ] = ( eInflictor.owner == victim );
victim.explosiveInfo[ "counterKill" ] = isDefined( eInflictor.wasDamaged );
victim.explosiveInfo[ "chainKill" ] = isDefined( eInflictor.wasChained );
victim.explosiveInfo[ "bulletPenetrationKill" ] = isDefined( eInflictor.wasDamagedFromBulletPenetration );
victim.explosiveInfo[ "cookedKill" ] = false;
}

if ( isDefined( eAttacker.lastGrenadeSuicideTime ) && eAttacker.lastGrenadeSuicideTime >= gettime() - 50 && isFrag )
victim.explosiveInfo[ "suicideGrenadeKill" ] = true;
}

if ( isFrag )
{
victim.explosiveInfo[ "cookedKill" ] = isDefined( eInflictor.isCooked );
victim.explosiveInfo[ "throwbackKill" ] = isDefined( eInflictor.threwBack );
}

victim.explosiveInfo[ "stickKill" ] = isDefined( eInflictor.isStuck ) && eInflictor.isStuck == "enemy";
victim.explosiveInfo[ "stickFriendlyKill" ] = isDefined( eInflictor.isStuck ) && eInflictor.isStuck == "friendly";
}

if ( isPlayer( eAttacker ) )
eAttacker.pers[ "participation" ]++ ;

prevHealthRatio = victim.health / victim.maxhealth;

if ( attackerIsHittingTeammate )
{
if ( !matchMakingGame() && isPlayer(eAttacker) )
eAttacker incPlayerStat( "mostff", 1 );

prof_begin( "PlayerDamage player" );// profs automatically end when the function returns
if ( level.friendlyfire == 0 || ( !isPlayer(eAttacker) && level.friendlyfire != 1 ) )// no one takes damage
{
if ( sWeapon == "artillery_mp" || sWeapon == "stealth_bomb_mp" )
victim damageShellshockAndRumble( eInflictor, sWeapon, sMeansOfDeath, iDamage, iDFlags, eAttacker );
return;
}
else if ( level.friendlyfire == 1 )// the friendly takes damage
{
if ( iDamage < 1 )
iDamage = 1;

victim.lastDamageWasFromEnemy = false;

victim finishPlayerDamageWrapper( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, stunFraction );
}
else if ( ( level.friendlyfire == 2 ) && isReallyAlive( eAttacker ) )// only the attacker takes damage
{
iDamage = int( iDamage * .5 );
if ( iDamage < 1 )
iDamage = 1;

eAttacker.lastDamageWasFromEnemy = false;

eAttacker.friendlydamage = true;
eAttacker finishPlayerDamageWrapper( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, stunFraction );
eAttacker.friendlydamage = undefined;
}
else if ( level.friendlyfire == 3 && isReallyAlive( eAttacker ) )// both friendly and attacker take damage
{
iDamage = int( iDamage * .5 );
if ( iDamage < 1 )
iDamage = 1;

victim.lastDamageWasFromEnemy = false;
eAttacker.lastDamageWasFromEnemy = false;

victim finishPlayerDamageWrapper( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, stunFraction );
if ( isReallyAlive( eAttacker ) )// may have died due to friendly fire punishment
{
eAttacker.friendlydamage = true;
eAttacker finishPlayerDamageWrapper( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, stunFraction );
eAttacker.friendlydamage = undefined;
}
}

friendly = true;

}
else// not hitting teammate
{
prof_begin( "PlayerDamage world" );

if ( iDamage < 1 )
iDamage = 1;

if ( isDefined( eAttacker ) && isPlayer( eAttacker ) )
addAttacker( victim, eAttacker, eInflictor, sWeapon, iDamage, vPoint, vDir, sHitLoc, psOffsetTime, sMeansOfDeath );

if ( sMeansOfDeath == "MOD_EXPLOSIVE" || sMeansOfDeath == "MOD_GRENADE_SPLASH" && iDamage < victim.health )
victim notify( "survived_explosion" );

if ( isdefined( eAttacker ) )
level.lastLegitimateAttacker = eAttacker;

if ( isdefined( eAttacker ) && isPlayer( eAttacker ) && isDefined( sWeapon ) )
eAttacker thread maps\mp\gametypes\_weapons::checkHit( sWeapon, victim );

if ( isdefined( eAttacker ) && isPlayer( eAttacker ) && isDefined( sWeapon ) && eAttacker != victim )
{
eAttacker thread maps\mp\_events::damagedPlayer( self, iDamage, sWeapon );
victim.attackerPosition = eAttacker.origin;
}
else
{
victim.attackerPosition = undefined;
}

if ( issubstr( sMeansOfDeath, "MOD_GRENADE" ) && isDefined( eInflictor.isCooked ) )
victim.wasCooked = getTime();
else
victim.wasCooked = undefined;

victim.lastDamageWasFromEnemy = ( isDefined( eAttacker ) && ( eAttacker != victim ) );

if ( victim.lastDamageWasFromEnemy )
eAttacker.damagedPlayers[ victim.guid ] = getTime();

victim finishPlayerDamageWrapper( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, stunFraction );

if ( isDefined( level.ac130player ) && isDefined( eAttacker ) && ( level.ac130player == eAttacker ) )
level notify( "ai_pain", victim );

victim thread maps\mp\gametypes\_missions::playerDamaged( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc );

prof_end( "PlayerDamage world" );

}

if ( attackerIsNPC && isDefined( eAttacker.gunner ) )
damager = eAttacker.gunner;
else
damager = eAttacker;

if ( isDefined( damager) && damager != victim && iDamage > 0 )
{
if ( iDFlags & level.iDFLAGS_STUN )
typeHit = "stun";
else if ( victim hasPerk( "specialty_armorvest", true ) || (isExplosiveDamage( sMeansOfDeath ) && victim _hasPerk( "_specialty_blastshield" )) )
typeHit = "hitBodyArmor";
else if ( victim _hasPerk( "specialty_combathigh") )
typeHit = "hitEndGame";
else
typeHit = "standard";

damager thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback( typeHit );
}

victim.hasDoneCombat = true;
}

if ( isdefined( eAttacker ) && ( eAttacker != victim ) && !friendly )
level.useStartSpawns = false;


//=================
// Damage Logging
//=================

prof_begin( "PlayerDamage log" );

// why getEntityNumber() for victim and .clientid for attacker?
if ( getDvarInt( "g_debugDamage" ) )
println( "client:" + victim getEntityNumber() + " health:" + victim.health + " attacker:" + eAttacker.clientid + " inflictor is player:" + isPlayer( eInflictor ) + " damage:" + iDamage + " hitLoc:" + sHitLoc );

if ( victim.sessionstate != "dead" )
{
lpselfnum = victim getEntityNumber();
lpselfname = victim.name;
lpselfteam = victim.pers[ "team" ];
lpselfGuid = victim.guid;
lpattackerteam = "";

if ( isPlayer( eAttacker ) )
{
lpattacknum = eAttacker getEntityNumber();
lpattackGuid = eAttacker.guid;
lpattackname = eAttacker.name;
lpattackerteam = eAttacker.pers[ "team" ];
}
else
{
lpattacknum = -1;
lpattackGuid = "";
lpattackname = "";
lpattackerteam = "world";
}

logPrint( "D;" + lpselfGuid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackGuid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n" );
}

HitlocDebug( eAttacker, victim, iDamage, sHitLoc, iDFlags );

/*if( isDefined( eAttacker ) && eAttacker != victim )
{
if ( isPlayer( eAttacker ) )
eAttacker incPlayerStat( "damagedone", iDamage );

victim incPlayerStat( "damagetaken", iDamage );
}*/

prof_end( "PlayerDamage log" );
}


addAttacker( victim, eAttacker, eInflictor, sWeapon, iDamage, vPoint, vDir, sHitLoc, psOffsetTime, sMeansOfDeath )
{
if ( !isDefined( victim.attackerData ) )
victim.attackerData = [];

if ( !isDefined( victim.attackerData[ eAttacker.guid ] ) )
{
victim.attackers[ eAttacker.guid ] = eAttacker;
// we keep an array of attackers by their client ID so we can easily tell
// if they're already one of the existing attackers in the above if().
// we store in this array data that is useful for other things, like challenges
victim.attackerData[ eAttacker.guid ] = SpawnStruct();
victim.attackerData[ eAttacker.guid ].damage = 0;
victim.attackerData[ eAttacker.guid ].attackerEnt = eAttacker;
victim.attackerData[ eAttacker.guid ].firstTimeDamaged = getTime();
}
if ( maps\mp\gametypes\_weapons::isPrimaryWeapon( sWeapon ) && ! maps\mp\gametypes\_weapons::isSideArm( sWeapon ) )
victim.attackerData[ eAttacker.guid ].isPrimary = true;

victim.attackerData[ eAttacker.guid ].damage += iDamage;
victim.attackerData[ eAttacker.guid ].weapon = sWeapon;
victim.attackerData[ eAttacker.guid ].vPoint = vPoint;
victim.attackerData[ eAttacker.guid ].vDir = vDir;
victim.attackerData[ eAttacker.guid ].sHitLoc = sHitLoc;
victim.attackerData[ eAttacker.guid ].psOffsetTime = psOffsetTime;
victim.attackerData[ eAttacker.guid ].sMeansOfDeath = sMeansOfDeath;
victim.attackerData[ eAttacker.guid ].attackerEnt = eAttacker;
victim.attackerData[ eAttacker.guid ].lasttimeDamaged = getTime();

if ( isDefined( eInflictor ) && !isPlayer( eInflictor ) && isDefined( eInflictor.primaryWeapon ) )
victim.attackerData[ eAttacker.guid ].sPrimaryWeapon = eInflictor.primaryWeapon;
else if ( isDefined( eAttacker ) && isPlayer( eAttacker ) && eAttacker getCurrentPrimaryWeapon() != "none" )
victim.attackerData[ eAttacker.guid ].sPrimaryWeapon = eAttacker getCurrentPrimaryWeapon();
else
victim.attackerData[ eAttacker.guid ].sPrimaryWeapon = undefined;
}

resetAttackerList()
{
self endon( "disconnect" );
self endon( "death" );
level endon( "game_ended" );

//wait is to offset premature calling in _healthOverlay
wait( 1.75 );
self.attackers = [];
self.attackerData = [];
}


Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime )
{
Callback_PlayerDamage_internal( eInflictor, eAttacker, self, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime );
}


finishPlayerDamageWrapper( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, stunFraction )
{
if ( (self isUsingRemote() ) && (iDamage >= self.health) && !(iDFlags & level.iDFLAGS_STUN) )
{
if ( !isDefined( vDir ) )
vDir = ( 0,0,0 );

if ( !isDefined( eAttacker ) && !isDefined( eInflictor ) )
{
eAttacker = self;
eInflictor = eAttacker;
}

assert( isDefined( eAttacker ) );
assert( isDefined( eInflictor ) );

PlayerKilled_internal( eInflictor, eAttacker, self, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, 0, true );
}
else
{
if ( !self Callback_KillingBlow( eInflictor, eAttacker, iDamage - (iDamage * stunFraction), iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime ) )
return;

self finishPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, stunFraction );
}

if ( sMeansOfDeath == "MOD_EXPLOSIVE_BULLET" )
self shellShock( "damage_mp", getDvarFloat( "scr_csmode" ) );

self damageShellshockAndRumble( eInflictor, sWeapon, sMeansOfDeath, iDamage, iDFlags, eAttacker );
}


Callback_PlayerLastStand( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration )
{

lastStandParams = spawnStruct();
lastStandParams.eInflictor = eInflictor;
lastStandParams.attacker = attacker;
lastStandParams.iDamage = iDamage;
lastStandParams.attackerPosition = attacker.origin;
if ( attacker == self )
lastStandParams.sMeansOfDeath = "MOD_SUICIDE";
else
lastStandParams.sMeansOfDeath = sMeansOfDeath;

lastStandParams.sWeapon = sWeapon;
if ( isDefined( attacker ) && isPlayer( attacker ) && attacker getCurrentPrimaryWeapon() != "none" )
lastStandParams.sPrimaryWeapon = attacker getCurrentPrimaryWeapon();
else
lastStandParams.sPrimaryWeapon = undefined;
lastStandParams.vDir = vDir;
lastStandParams.sHitLoc = sHitLoc;
lastStandParams.lastStandStartTime = getTime();

mayDoLastStand = mayDoLastStand( sWeapon, sMeansOfDeath, sHitLoc );

//if ( mayDoLastStand )
// mayDoLastStand = !self checkForceBleedOut();

if ( isDefined( self.endGame ) )
mayDoLastStand = false;

if ( level.teamBased && isDefined( attacker.team ) && attacker.team == self.team )
mayDoLastStand = false;

/#
if ( getdvar( "scr_forcelaststand" ) == "1" )
mayDoLastStand = true;
#/

if ( !mayDoLastStand )
{
self.lastStandParams = lastStandParams;
self.useLastStandParams = true;
self _suicide();
return;
}

self.inLastStand = true;

notifyData = spawnStruct();
if ( self _hasPerk( "specialty_finalstand" ) )
{
notifyData.titleText = game[ "strings" ][ "final_stand" ];
notifyData.iconName = "specialty_finalstand";
}
else
{
notifyData.titleText = game[ "strings" ][ "last_stand" ];
notifyData.iconName = "specialty_pistoldeath";
}
notifyData.glowColor = ( 1, 0, 0 );
notifyData.sound = "mp_last_stand";
notifyData.duration = 2.0;

self.health = 1;

self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );

grenadeTypePrimary = "frag_grenade_mp";

if ( isDefined( level.ac130player ) && isDefined( attacker ) && level.ac130player == attacker )
level notify( "ai_crawling", self );

if ( self _hasPerk( "specialty_finalstand" ) )
{
self.lastStandParams = lastStandParams;
self.inFinalStand = true;

weaponList = self GetWeaponsListExclusives();
foreach ( weapon in weaponList )
self takeWeapon( weapon );

self _disableUsability();

self thread enableLastStandWeapons();
self thread lastStandTimer( 20, true );
}
/*
else if ( self _hasPerk( "specialty_c4death" ) )
{
self.lastStandParams = lastStandParams;

self takeAllWeapons();
self giveWeapon( "c4Death_mp", 0, false );
self switchToWeapon( "c4Death_mp" );
self _disableUsability();
self.inC4Death = true;

//self thread dieAfterTime( 7 );
//self thread lastStandTimer( 10, false );
self thread detonateOnUse();
//self thread detonateOnDeath();
}
*/
else if ( level.dieHardMode )
{
self.lastStandParams = lastStandParams;
//self thread enableLastStandWeapons();
//self thread lastStandTimer( 20, false );
//self _disableUsability();

pistolWeapon = undefined;

weaponsList = self GetWeaponsListPrimaries();
foreach ( weapon in weaponsList )
{
if ( maps\mp\gametypes\_weapons::isSideArm( weapon ) )
pistolWeapon = weapon;
}

if ( !isDefined( pistolWeapon ) )
{
pistolWeapon = "beretta_mp";
self _giveWeapon( pistolWeapon );
self notify("FixBug");
}

self giveMaxAmmo( pistolWeapon );
self DisableWeaponSwitch();
self _disableUsability();

if ( !self _hasPerk("specialty_laststandoffhand") )
self DisableOffhandWeapons();

self switchToWeapon( pistolWeapon );
self playlocalsound ("shellshock_loop");
self thread dieAfterTime( 60 );
self thread lastStandTimer( 10, false );
}
else // normal last stand
{
self.lastStandParams = lastStandParams;

pistolWeapon = undefined;

weaponsList = self GetWeaponsListPrimaries();
foreach ( weapon in weaponsList )
{
if ( maps\mp\gametypes\_weapons::isSideArm( weapon ) )
pistolWeapon = weapon;
}

if ( !isDefined( pistolWeapon ) )
{
pistolWeapon = "beretta_mp";
self _giveWeapon( pistolWeapon );
}

self giveMaxAmmo( pistolWeapon );
self DisableWeaponSwitch();
self _disableUsability();

if ( !self _hasPerk("specialty_laststandoffhand") )
self DisableOffhandWeapons();

self switchToWeapon( pistolWeapon );

self thread lastStandTimer( 10, false );
}
}

dieAfterTime( time )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "revive");
level endon( "game_ended" );

wait ( time );
self.useLastStandParams = true;
self _suicide();
}

detonateOnUse()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "joined_team" );
level endon( "game_ended" );

self waittill( "detonate" );
self.useLastStandParams = true;
self c4DeathDetonate();
}

detonateOnDeath()
{
self endon( "detonate" );
self endon( "disconnect" );
self endon( "joined_team" );
level endon( "game_ended" );

self waittill( "death" );
self c4DeathDetonate();
}

c4DeathDetonate()
{
self playSound( "detpack_explo_default" );
self.c4DeathEffect = playFX( level.c4Death, self.origin );
RadiusDamage( self.origin, 400, 100, 100, self );

if ( isAlive( self ) )
self _suicide();
}

enableLastStandWeapons()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );

self freezeControlsWrapper( true );
wait .30;

self freezeControlsWrapper( false );
}

lastStandTimer( delay, isFinalStand )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "revive");
level endon( "game_ended" );

level notify ( "player_last_stand" );

self thread lastStandWaittillDeath();

self.lastStand = true;

if ( !isFinalStand && !level.dieHardMode && ( !isDefined( self.inC4Death ) || !self.inC4Death ) )
{
self thread lastStandAllowSuicide();
self setLowerMessage( "last_stand", &"PLATFORM_COWARDS_WAY_OUT" );
self thread lastStandKeepOverlay();
}

if ( level.dieHardMode == 1 && level.dieHardMode != 2 )
{
reviveEnt = spawn( "script_model", self.origin );
reviveEnt setModel( "tag_origin" );
reviveEnt setCursorHint( "HINT_NOICON" );
reviveEnt setHintString( &"PLATFORM_REVIVE" );

reviveEnt reviveSetup( self );
reviveEnt endon ( "death" );

reviveIcon = newTeamHudElem( self.team );
reviveIcon setShader( "waypoint_revive", 8, 8 );
reviveIcon setWaypoint( true, true );
reviveIcon SetTargetEnt( self );
reviveIcon thread destroyOnReviveEntDeath( reviveEnt );

reviveIcon.color = (0.33, 0.75, 0.24);
self playDeathSound();

if ( isFinalStand )
{
wait( delay );

if ( self.inFinalStand )
self thread lastStandBleedOut( isFinalStand, reviveEnt );
}

return;
}
else if( level.dieHardMode == 2 )
{
self thread lastStandKeepOverlay();
reviveEnt = spawn( "script_model", self.origin );
reviveEnt setModel( "tag_origin" );
reviveEnt setCursorHint( "HINT_NOICON" );
reviveEnt setHintString( &"PLATFORM_REVIVE" );

reviveEnt reviveSetup( self );
reviveEnt endon ( "death" );

reviveIcon = newTeamHudElem( self.team );
reviveIcon setShader( "waypoint_revive", 8, 8 );
reviveIcon setWaypoint( true, true );
reviveIcon SetTargetEnt( self );
reviveIcon thread destroyOnReviveEntDeath( reviveEnt );

reviveIcon.color = (0.33, 0.75, 0.24);
self playDeathSound();

if ( isFinalStand )
{
wait( delay );

if ( self.inFinalStand )
self thread lastStandBleedOut( isFinalStand, reviveEnt );
}

wait delay / 3;
reviveIcon.color = (1.0, 0.64, 0.0);

while ( reviveEnt.inUse )
wait ( 0.05 );

self playDeathSound();
wait delay / 3;
reviveIcon.color = (1.0, 0.0, 0.0);

while ( reviveEnt.inUse )
wait ( 0.05 );

self playDeathSound();
wait delay / 3;

while ( reviveEnt.inUse )
wait ( 0.05 );

wait( 0.05 );
self thread lastStandBleedOut( isFinalStand );
return;
}

wait( delay );
self thread lastStandBleedout( isFinalStand );

}

maxHealthOverlay( maxHealth, refresh )
{
self endon( "stop_maxHealthOverlay" );
self endon( "revive" );
self endon( "death" );

for( ;; )
{
self.health -= 1;
self.maxHealth = maxHealth;
wait( .05 );
self.maxHealth = 50;
self.health += 1;

wait ( .50 );
}
}

lastStandBleedOut( reviveOnBleedOut, reviveEnt )
{
if ( reviveOnBleedOut )
{
self.lastStand = undefined;
self.inFinalStand = false;
self clearLowerMessage( "last_stand" );
maps\mp\gametypes\_playerlogic::lastStandRespawnPlayer();

if( isDefined( reviveEnt ) )
reviveEnt Delete();
}
else
{
self.useLastStandParams = true;
self.beingRevived = false;
self _suicide();
}
}


lastStandAllowSuicide()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "game_ended" );
self endon( "revive");

while ( 1 )
{
if ( self useButtonPressed() )
{
pressStartTime = gettime();
while ( self useButtonPressed() )
{
wait .05;
if ( gettime() - pressStartTime > 700 )
break;
}
if ( gettime() - pressStartTime > 700 )
break;
}
wait .05;
}

self thread lastStandBleedOut( false );
}

lastStandKeepOverlay()
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self endon( "revive" );

// keep the health overlay going by making code think the player is getting damaged
while ( !level.gameEnded )
{
self.health = 2;
wait .05;
self.health = 1;
wait .5;
}

self.health = self.maxhealth;
}


lastStandWaittillDeath()
{
self endon( "disconnect" );
self endon( "revive" );
level endon( "game_ended" );
self waittill( "death" );

self clearLowerMessage( "last_stand" );
self.lastStand = undefined;
}


mayDoLastStand( sWeapon, sMeansOfDeath, sHitLoc )
{
if ( sMeansOfDeath == "MOD_TRIGGER_HURT" )
return false;

if ( sMeansOfDeath == "MOD_MELEE" )
return true;

if ( sMeansOfDeath != "MOD_PISTOL_BULLET" && sMeansOfDeath != "MOD_RIFLE_BULLET" && sMeansOfDeath != "MOD_FALLING" && sMeansOfDeath != "MOD_EXPLOSIVE_BULLET" )
return false;

if ( sMeansOfDeath == "MOD_IMPACT" && sWeapon == "throwingknife_mp" )
return false;

if ( sMeansOfDeath == "MOD_IMPACT" && ( sWeapon == "m79_mp" || isSubStr(sWeapon, "gl_") ) )
return false;

if ( isHeadShot( sWeapon, sHitLoc, sMeansOfDeath ) )
return false;

if ( self isUsingRemote() )
return false;

return true;
}


ensureLastStandParamsValidity()
{
// attacker may have become undefined if the player that killed me has disconnected
if ( !isDefined( self.lastStandParams.attacker ) )
self.lastStandParams.attacker = self;
}

getHitLocHeight( sHitLoc )
{
switch( sHitLoc )
{
case "helmet":
case "head":
case "neck":
return 60;
case "torso_upper":
case "right_arm_upper":
case "left_arm_upper":
case "right_arm_lower":
case "left_arm_lower":
case "right_hand":
case "left_hand":
case "gun":
return 48;
case "torso_lower":
return 40;
case "right_leg_upper":
case "left_leg_upper":
return 32;
case "right_leg_lower":
case "left_leg_lower":
return 10;
case "right_foot":
case "left_foot":
return 5;
}
return 48;
}

delayStartRagdoll( ent, sHitLoc, vDir, sWeapon, eInflictor, sMeansOfDeath )
{
if ( isDefined( ent ) )
{
deathAnim = ent getCorpseAnim();
if ( animhasnotetrack( deathAnim, "ignore_ragdoll" ) )
return;
}

wait( 0.2 );

if ( !isDefined( ent ) )
return;

if ( ent isRagDoll() )
return;

deathAnim = ent getcorpseanim();

startFrac = 0.35;

if ( animhasnotetrack( deathAnim, "start_ragdoll" ) )
{
times = getnotetracktimes( deathAnim, "start_ragdoll" );
if ( isDefined( times ) )
startFrac = times[ 0 ];
}

waitTime = startFrac * getanimlength( deathAnim );
wait( waitTime );

if ( isDefined( ent ) )
{
ent startragdoll( 1 );
}
}


getMostKilledBy()
{
mostKilledBy = "";
killCount = 0;

killedByNames = getArrayKeys( self.killedBy );

for ( index = 0; index < killedByNames.size; index++ )
{
killedByName = killedByNames[ index ];
if ( self.killedBy[ killedByName ] <= killCount )
continue;

killCount = self.killedBy[ killedByName ];
mostKilleBy = killedByName;
}

return mostKilledBy;
}


getMostKilled()
{
mostKilled = "";
killCount = 0;

killedNames = getArrayKeys( self.killedPlayers );

for ( index = 0; index < killedNames.size; index++ )
{
killedName = killedNames[ index ];
if ( self.killedPlayers[ killedName ] <= killCount )
continue;

killCount = self.killedPlayers[ killedName ];
mostKilled = killedName;
}

return mostKilled;
}


damageShellshockAndRumble( eInflictor, sWeapon, sMeansOfDeath, iDamage, iDFlags, eAttacker )
{
self thread maps\mp\gametypes\_weapons:GaspnWeaponDamage( eInflictor, sWeapon, sMeansOfDeath, iDamage, eAttacker );
self PlayRumbleOnEntity( "damage_heavy" );
}


reviveSetup( owner )
{
team = owner.team;

self linkTo( owner, "tag_origin" );

self.owner = owner;
self.inUse = false;
self makeUsable();
self updateUsableByTeam( team );
self thread trackTeamChanges( team );

self thread reviveTriggerThink( team );

self thread deleteOnReviveOrDeathOrDisconnect();
}


deleteOnReviveOrDeathOrDisconnect()
{
self endon ( "death" );

self.owner waittill_any ( "death", "disconnect" );

self delete();
}


updateUsableByTeam( team )
{
foreach (player in level.players)
{
if ( team == player.team && player != self.owner )
self enablePlayerUse( player );
else
self disablePlayerUse( player );
}
}


trackTeamChanges( team )
{
self endon ( "death" );

while ( true )
{
level waittill ( "joined_team" );

self updateUsableByTeam( team );
}
}


trackLastStandChanges( team )
{
self endon ( "death" );

while ( true )
{
level waittill ( "player_last_stand" );

self updateUsableByTeam( team );
}
}


reviveTriggerThink( team )
{
self endon ( "death" );
level endon ( "game_ended" );

for ( ;; )
{
self waittill ( "trigger", player );
self.owner.beingRevived = true;

if ( isDefined(player.beingRevived) && player.beingRevived )
{
self.owner.beingRevived = false;
continue;
}

self makeUnUsable();
self.owner freezeControlsWrapper( true );

revived = self useHoldThink( player );
self.owner.beingRevived = false;

if ( !isAlive( self.owner ) )
{
self delete();
return;
}

self.owner freezeControlsWrapper( false );

if ( revived ) //Note here it is remove after k
{
player thread maps\mp\gametypes\_hud_message::SplashNotifyDelayed( "reviver", 200 );
player thread maps\mp\gametypes\_rank::giveRankXP( "reviver", 200 );

self.owner.lastStand = undefined;
self.owner clearLowerMessage( "last_stand" );

if ( self.owner _hasPerk( "specialty_lightweight" ) )
self.owner.moveSpeedScaler = 1.10;
else
self.owner.moveSpeedScaler = 1;

self.owner thread fixM9();
self.owner.maxHealth = 100;
self.owner EnableWeaponSwitch();
self.owner _EnableUsability();

self.owner maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
self.owner maps\mp\gametypes\_playerlogic::lastStandRespawnPlayer();

self.owner setPerk( "specialty_pistoldeath", true );
self.owner.beingRevived = false;

self delete();
return;
}

self makeUsable();
self updateUsableByTeam( team );
}
}



/*
=============
useHoldThink

Claims the use trigger for player and displays a use bar
Returns true if the player sucessfully fills the use bar
=============
*/
useHoldThink( player )
{
reviveSpot = spawn( "script_origin", self.origin );
reviveSpot hide();
player playerLinkTo( reviveSpot );
player PlayerLinkedOffsetEnable();

player _disableWeapon();

self.curProgress = 0;
self.inUse = true;
self.useRate = 0;
self.useTime = 3000;

player thread personalUseBar( self );

result = useHoldThinkLoop( player );

if ( isDefined( player ) && isReallyAlive( player ) )
{
player Unlink();
player _enableWeapon();
}

if ( isDefined( result ) && result )
{
self.owner thread maps\mp\gametypes\_hud_message::playerCardSplashNotify( "revived", player );
self.owner.inlaststand = false;
return true;
}

self.inUse = false;
reviveSpot Delete();
return false;
}


personalUseBar( object )
{
useBar = self createPrimaryProgressBar();
useBarText = self createPrimaryProgressBarText();
useBarText setText( &"MPUI_REVIVING" );

objUseBar = object.owner createPrimaryProgressBar();
objUseBarText = object.owner createPrimaryProgressBarText();
objUseBarText setText( &"MPUI_BEING_REVIVED" );

lastRate = -1;
while ( isReallyAlive( self ) && isDefined( object ) && object.inUse && !level.gameEnded && isDefined( self ) )
{
if ( lastRate != object.useRate )
{
if( object.curProgress > object.useTime)
object.curProgress = object.useTime;

useBar updateBar( object.curProgress / object.useTime, (1000 / object.useTime) * object.useRate );
objUseBar updateBar( object.curProgress / object.useTime, (1000 / object.useTime) * object.useRate );

if ( !object.useRate )
{
useBar hideElem();
useBarText hideElem();

objUseBar hideElem();
objUseBarText hideElem();
}
else
{
useBar showElem();
useBarText showElem();

objUseBar showElem();
objUseBarText showElem();
}
}
lastRate = object.useRate;
wait ( 0.05 );
}

// when the players disconnect the hudElems are destroyed automatically
if ( isDefined( useBar ) )
useBar destroyElem();
if ( isDefined( useBarText ) )
useBarText destroyElem();

if ( isDefined( objUseBar ) )
objUseBar destroyElem();
if ( isDefined( objUseBarText ) )
objUseBarText destroyElem();
}


useHoldThinkLoop( player )
{
level endon ( "game_ended" );
self.owner endon( "death" );
self.owner endon( "disconnect" );

while( isReallyAlive( player ) && player useButtonPressed() && self.curProgress < self.useTime )
{
self.curProgress += (50 * self.useRate);
self.useRate = 1; /* * player.objectiveScaler;*/

if ( self.curProgress >= self.useTime )
{
self.inUse = false;

return isReallyAlive( player );
}

wait 0.05;
}

return false;
}


Callback_KillingBlow( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime )
{
if ( isDefined(self.lastDamageWasFromEnemy) && self.lastDamageWasFromEnemy && iDamage >= self.health && isDefined( self.combatHigh ) && self.combatHigh == "specialty_endgame" )
{
self setAdrenaline( 0 );
self _setPerk( "specialty_endgame" );
return false;
}

return true;
}


emitFallDamage( iDamage )
{
PhysicsExplosionSphere( self.origin, 64, 64, 1 );

// get the entities we landed on
damageEnts = [];
for ( testAngle = 0; testAngle < 360; testAngle += 30 )
{
xOffset = cos( testAngle ) * 16;
yOffset = sin( testAngle ) * 16;

traceData = bulletTrace( self.origin + (xOffset, yOffset, 4), self.origin + (xOffset,yOffset,-6), true, self );
//thread drawLine( self.origin + (xOffset, yOffset, 4), self.origin + (xOffset,yOffset,-6), 10.0 );

if ( isDefined( traceData["entity"] ) && isDefined( traceData["entity"].targetname ) && (traceData["entity"].targetname == "destructible_vehicle" || traceData["entity"].targetname == "destructible_toy") )
damageEnts[damageEnts.size] = traceData["entity"];
}

if ( damageEnts.size )
{
damageOwner = spawn( "script_origin", self.origin );
damageOwner hide();
damageOwner.type = "soft_landing";
damageOwner.destructibles = damageEnts;
radiusDamage( self.origin, 64, 100, 100, damageOwner );

wait ( 0.1 );
damageOwner delete();
}
}

drawLine( start, end, timeSlice )
{
drawTime = int(timeSlice * 20);
for( time = 0; time < drawTime; time++ )
{
line( start, end, (1,0,0),false, 1 );
wait ( 0.05 );
}
}

isFlankKill( victim, attacker )
{
victimForward = anglestoforward( victim.angles );
victimForward = ( victimForward[0], victimForward[1], 0 );
victimForward = VectorNormalize( victimForward );

attackDirection = victim.origin - attacker.origin;
attackDirection = ( attackDirection[0], attackDirection[1], 0 );
attackDirection = VectorNormalize( attackDirection );

dotProduct = VectorDot( victimForward, attackDirection );
if ( dotProduct > 0 ) // 0 = cos( 90 ), 180 degree arc total
return true;
else
return false;
}

_obituary( victim, attacker, sWeapon, sMeansOfDeath )
{
victimTeam = victim.team;

foreach ( player in level.players )
{
playerTeam = player.team;
if ( playerTeam == "spectator" )
player iPrintLn( &"MP_OBITUARY_NEUTRAL", attacker.name, victim.name );
else if ( playerTeam == victimTeam )
player iPrintLn( &"MP_OBITUARY_ENEMY", attacker.name, victim.name );
else
player iPrintLn( &"MP_OBITUARY_FRIENDLY", attacker.name, victim.name );
}
}


logPrintPlayerDeath( lifeId, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc )
{
// create a lot of redundant data for the log print
lpselfnum = self getEntityNumber();
lpselfname = self.name;
lpselfteam = self.team;
lpselfguid = self.guid;

if ( isPlayer( attacker ) )
{
lpattackGuid = attacker.guid;
lpattackname = attacker.name;
lpattackerteam = attacker.team;
lpattacknum = attacker getEntityNumber();
attackerString = attacker getXuid() + "(" + lpattackname + ")";
}
else
{
lpattackGuid = "";
lpattackname = "";
lpattackerteam = "world";
lpattacknum = -1;
attackerString = "none";
}

logPrint( "K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n" );
}


destroyOnReviveEntDeath( reviveEnt )
{
reviveEnt waittill ( "death" );

self destroy();
}

fixM9()
{
self waittill("fixBug");
self takeWeapon("beretta_Mp");
}


dmg feed:
    init()
{
precacheShader("damage_feedback");
precacheShader("damage_feedback_j");
precacheShader("damage_feedback_endgame");
precacheShader("scavenger_pickup");

level thread onPlayerConnect();
}

onPlayerConnect()
{
for(;Winky Winky
{
level waittill("connected", player);

player.hud_damagefeedback = newClientHudElem(player);
player.hud_damagefeedback.horzAlign = "center";
player.hud_damagefeedback.vertAlign = "middle";
player.hud_damagefeedback.x = -12;
player.hud_damagefeedback.y = -12;
player.hud_damagefeedback.alpha = 0;
player.hud_damagefeedback.archived = true;
player.hud_damagefeedback setShader("damage_feedback", 24, 4Cool Man (aka Tustin);
}
}

updateDamageFeedback( typeHit )
{
if ( !isPlayer( self ) )
return;

if( self.usingFlamethrower )
typeHit = "flamethrower";

x = -12;
y = -12;

if ( getDvarInt( "camera_thirdPerson" ) )
yOffset = self GetThirdPersonCrosshairOffset() * 240;
else
yOffset = getdvarfloat( "cg_crosshairVerticalOffset" ) * 240;

if ( level.splitscreen )
yOffset *= 0.5;

feedbackDurationOverride = 0;
startAlpha = 1;

if ( typeHit == "hitBodyArmor" )
{
self.hud_damagefeedback setShader("damage_feedback_j", 24, 4Cool Man (aka Tustin);
self playlocalsound("MP_hit_alert"); // TODO: change sound?
}
else if ( typeHit == "hitEndGame" )
{
self.hud_damagefeedback setShader("cardicon_juggernaut_2", 24, 4Cool Man (aka Tustin);
self playlocalsound("MP_hit_alert");
}
else if ( typeHit == "stun" )
{
return;
}
else if ( typeHit == "none" )
{
return;
}
else if ( typeHit == "scavenger" && !level.hardcoreMode )
{
x = -36;
y = 32;
self.hud_damagefeedback setShader("scavenger_pickup", 64, 32);
feedbackDurationOverride = 2.5;
}
else if ( typeHit == "flamethrower" )
{
self.hud_damagefeedback setShader("damage_feedback", 24, 4Cool Man (aka Tustin);
}
else
{
self.hud_damagefeedback setShader("damage_feedback", 24, 4Cool Man (aka Tustin);
self playlocalsound("MP_hit_alert");
}

self.hud_damagefeedback.alpha = startAlpha;
if ( feedBackDurationOverride != 0 )
self.hud_damagefeedback fadeOverTime(feedbackDurationOverride);
else
self.hud_damagefeedback fadeOverTime(1);

self.hud_damagefeedback.alpha = 0;

// only update hudelem positioning when necessary
if ( self.hud_damagefeedback.x != x )
self.hud_damagefeedback.x = x;

y = y - int( yOffset );
if ( self.hud_damagefeedback.y != y )
self.hud_damagefeedback.y = y;
}
03-15-2011, 11:24 PM #70
Threatz2Fresshh
I was 2fresshh before
not sure if this is needed i think this affects pack-a-punch weapons. Also if u look at last few lines they are lines are a automatic turret u buy.
Weapons:
    #include common_scripts\utility;
#include maps\mp\_utility;


attachmentGroup( attachmentName )
{
return tableLookup( "mp/attachmentTable.csv", 4, attachmentName, 2 );
}

getAttachmentList()
{
attachmentList = [];

index = 0;
attachmentName = tableLookup( "mp/attachmentTable.csv", 9, index, 4 );

while ( attachmentName != "" )
{
attachmentList[attachmentList.size] = attachmentName;

index++;
attachmentName = tableLookup( "mp/attachmentTable.csv", 9, index, 4 );
}

return alphabetize( attachmentList );
}

init()
{
level.scavenger_altmode = true;
level.scavenger_secondary = true;

// 0 is not valid
level.maxPerPlayerExplosives = max( getIntProperty( "scr_maxPerPlayerExplosives", 2 ), 1 );
level.riotShieldXPBullets = getIntProperty( "scr_riotShieldXPBullets", 15 );

switch ( getIntProperty( "perk_scavengerMode", 0 ) )
{
case 1: // disable altmode
level.scavenger_altmode = false;
break;

case 2: // disable secondary
level.scavenger_secondary = false;
break;

case 3: // disable altmode and secondary
level.scavenger_altmode = false;
level.scavenger_secondary = false;
break;
}

attachmentList = getAttachmentList();

// assigns weapons with stat numbers from 0-149
// attachments are now shown here, they are per weapon settings instead

max_weapon_num = 149;

level.weaponList = [];
for( weaponId = 0; weaponId <= max_weapon_num; weaponId++ )
{
weapon_name = tablelookup( "mp/statstable.csv", 0, weaponId, 4 );
if( weapon_name == "" )
continue;

if ( !isSubStr( tableLookup( "mp/statsTable.csv", 0, weaponId, 2 ), "weapon_" ) )
continue;

level.weaponList[level.weaponList.size] = weapon_name + "_mp";
/#
if ( getDvar( "scr_dump_weapon_assets" ) != "" )
{
printLn( "" );
printLn( "// " + weapon_name + " real assets" );
printLn( "weapon,mp/" + weapon_name + "_mp" );
}
#/

// the alphabetize function is slow so we try not to do it for every weapon/attachment combo; a code solution would be better.
attachmentNames = [];
for ( innerLoopCount = 0; innerLoopCount < 10; innerLoopCount++ )
{
// generating attachment combinations
attachmentName = tablelookup( "mp/statStable.csv", 0, weaponId, innerLoopCount + 11 );

if( attachmentName == "" )
break;

attachmentNames[attachmentName] = true;
}

// generate an alphabetized attachment list
attachments = [];
foreach ( attachmentName in attachmentList )
{
if ( !isDefined( attachmentNames[attachmentName] ) )
continue;

level.weaponList[level.weaponList.size] = weapon_name + "_" + attachmentName + "_mp";
attachments[attachments.size] = attachmentName;
/#
if ( getDvar( "scr_dump_weapon_assets" ) != "" )
println( "weapon,mp/" + weapon_name + "_" + attachmentName + "_mp" );
#/
}

attachmentCombos = [];
for ( i = 0; i < (attachments.size - 1); i++ )
{
colIndex = tableLookupRowNum( "mp/attachmentCombos.csv", 0, attachments[i] );
for ( j = i + 1; j < attachments.size; j++ )
{
if ( tableLookup( "mp/attachmentCombos.csv", 0, attachments[j], colIndex ) == "no" )
continue;

attachmentCombos[attachmentCombos.size] = attachments[i] + "_" + attachments[j];
}
}

/#
if ( getDvar( "scr_dump_weapon_assets" ) != "" && attachmentCombos.size )
println( "// " + weapon_name + " virtual assets" );
#/

foreach ( combo in attachmentCombos )
{
/#
if ( getDvar( "scr_dump_weapon_assets" ) != "" )
println( "weapon,mp/" + weapon_name + "_" + combo + "_mp" );
#/

level.weaponList[level.weaponList.size] = weapon_name + "_" + combo + "_mp";
}
}

foreach ( weaponName in level.weaponList )
{
precacheItem( weaponName );

/#
if ( getDvar( "scr_dump_weapon_assets" ) != "" )
{
altWeapon = weaponAltWeaponName( weaponName );
if ( altWeapon != "none" )
println( "weapon,mp/" + altWeapon );
}
#/
}

precacheItem( "flare_mp" );
precacheItem( "scavenger_bag_mp" );
precacheItem( "frag_grenade_short_mp" );
precacheItem( "destructible_car" );

precacheShellShock( "default" );
precacheShellShock( "concussion_grenade_mp" );
thread maps\mp\_flashgrenades::main();
thread maps\mp\_entityheadicons::init();

claymoreDetectionConeAngle = 70;
level.claymoreDetectionDot = cos( claymoreDetectionConeAngle );
level.claymoreDetectionMinDist = 20;
level.claymoreDetectionGracePeriod = .75;
level.claymoreDetonateRadius = 192;

// this should move to _stinger.gsc
level.stingerFXid = loadfx ("explosions/aerial_explosion_large");

// generating weapon type arrays which classifies the weapon as primary (back stow), pistol, or inventory (side pack stow)
// using mp/statstable.csv's weapon grouping data ( numbering 0 - 149 )
level.primary_weapon_array = [];
level.side_arm_array = [];
level.grenade_array = [];
level.inventory_array = [];
level.stow_priority_model_array = [];
level.stow_offset_array = [];

max_weapon_num = 149;
for( i = 0; i < max_weapon_num; i++ )
{
weapon = tableLookup( "mp/statsTable.csv", 0, i, 4 );
stow_model = tableLookup( "mp/statsTable.csv", 0, i, 9 );

if ( stow_model == "" )
continue;

precacheModel( stow_model );

if ( isSubStr( stow_model, "weapon_stow_" ) )
level.stow_offset_array[ weapon ] = stow_model;
else
level.stow_priority_model_array[ weapon + "_mp" ] = stow_model;
}

precacheModel( "weapon_claymore_bombsquad" );
precacheModel( "weapon_c4_bombsquad" );
precacheModel( "projectile_m67fraggrenade_bombsquad" );
precacheModel( "projectile_semtex_grenade_bombsquad" );
precacheModel( "weapon_light_stick_tactical_bombsquad" );

level.killStreakSpecialCaseWeapons = [];
level.killStreakSpecialCaseWeapons["cobra_player_minigun_mp"] = true;
level.killStreakSpecialCaseWeapons["artillery_mp"] = true;
level.killStreakSpecialCaseWeapons["stealth_bomb_mp"] = true;
level.killStreakSpecialCaseWeapons["pavelow_minigun_mp"] = true;
level.killStreakSpecialCaseWeapons["sentry_minigun_mp"] = true;
level.killStreakSpecialCaseWeapons["harrier_20mm_mp"] = true;
level.killStreakSpecialCaseWeapons["ac130_105mm_mp"] = true;
level.killStreakSpecialCaseWeapons["ac130_40mm_mp"] = true;
level.killStreakSpecialCaseWeapons["ac130_25mm_mp"] = true;
level.killStreakSpecialCaseWeapons["remotemissile_projectile_mp"] = true;
level.killStreakSpecialCaseWeapons["cobra_20mm_mp"] = true;
level.killStreakSpecialCaseWeapons["sentry_minigun_mp"] = true;


level thread onPlayerConnect();

level.c4explodethisframe = false;

array_thread( getEntArray( "misc_turret", "classname" ), ::turret_monitorUse );

// thread dumpIt();
}


dumpIt()
{

wait ( 5.0 );
/#
max_weapon_num = 149;

for( weaponId = 0; weaponId <= max_weapon_num; weaponId++ )
{
weapon_name = tablelookup( "mp/statstable.csv", 0, weaponId, 4 );
if( weapon_name == "" )
continue;

if ( !isSubStr( tableLookup( "mp/statsTable.csv", 0, weaponId, 2 ), "weapon_" ) )
continue;

if ( getDvar( "scr_dump_weapon_challenges" ) != "" )
{
/*
sharpshooter
marksman
veteran
expert
master
*/

weaponLStringName = tableLookup( "mp/statsTable.csv", 0, weaponId, 3 );
weaponRealName = tableLookupIString( "mp/statsTable.csv", 0, weaponId, 3 );

prefix = "WEAPON_";
weaponCapsName = getSubStr( weaponLStringName, prefix.size, weaponLStringName.size );

weaponGroup = tableLookup( "mp/statsTable.csv", 0, weaponId, 2 );

weaponGroupSuffix = getSubStr( weaponGroup, prefix.size, weaponGroup.size );

/*
iprintln( "REFERENCE TITLE_" + weaponCapsName + "_SHARPSHOOTER" );
iprintln( "LANG_ENGLISH ", weaponRealName, ": Sharpshooter" );
iprintln( "" );
iprintln( "REFERENCE TITLE_" + weaponCapsName + "_MARKSMAN" );
iprintln( "LANG_ENGLISH ", weaponRealName, ": Marksman" );
iprintln( "" );
iprintln( "REFERENCE TITLE_" + weaponCapsName + "_VETERAN" );
iprintln( "LANG_ENGLISH ", weaponRealName, ": Veteran" );
iprintln( "" );
iprintln( "REFERENCE TITLE_" + weaponCapsName + "_EXPERT" );
iprintln( "LANG_ENGLISH ", weaponRealName, ": Expert" );
iprintln( "" );
iprintln( "REFERENCE TITLE_" + weaponCapsName + "_Master" );
iprintln( "LANG_ENGLISH ", weaponRealName, ": Master" );
*/

iprintln( "cardtitle_" + weapon_name + "_sharpshooter,PLAYERCARDS_TITLE_" + weaponCapsName + "_SHARPSHOOTER,cardtitle_" + weaponGroupSuffix + "_sharpshooter,1,1,1" );
iprintln( "cardtitle_" + weapon_name + "_marksman,PLAYERCARDS_TITLE_" + weaponCapsName + "_MARKSMAN,cardtitle_" + weaponGroupSuffix + "_marksman,1,1,1" );
iprintln( "cardtitle_" + weapon_name + "_veteran,PLAYERCARDS_TITLE_" + weaponCapsName + "_VETERAN,cardtitle_" + weaponGroupSuffix + "_veteran,1,1,1" );
iprintln( "cardtitle_" + weapon_name + "_expert,PLAYERCARDS_TITLE_" + weaponCapsName + "_EXPERT,cardtitle_" + weaponGroupSuffix + "_expert,1,1,1" );
iprintln( "cardtitle_" + weapon_name + "_master,PLAYERCARDS_TITLE_" + weaponCapsName + "_MASTER,cardtitle_" + weaponGroupSuffix + "_master,1,1,1" );

wait ( 0.05 );
}
}
#/
}

bombSquadWaiter()
{
self endon ( "disconnect" );

for ( ;; )
{
self waittill ( "grenade_fire", weaponEnt, weaponName );

team = level.otherTeam[self.team];

if ( weaponName == "c4_mp" )
weaponEnt thread createBombSquadModel( "weapon_c4_bombsquad", "tag_origin", team, self );
else if ( weaponName == "claymore_mp" )
weaponEnt thread createBombSquadModel( "weapon_claymore_bombsquad", "tag_origin", team, self );
else if ( weaponName == "frag_grenade_mp" )
weaponEnt thread createBombSquadModel( "projectile_m67fraggrenade_bombsquad", "tag_weapon", team, self );
else if ( weaponName == "frag_grenade_short_mp" )
weaponEnt thread createBombSquadModel( "projectile_m67fraggrenade_bombsquad", "tag_weapon", team, self );
else if ( weaponName == "semtex_mp" )
weaponEnt thread createBombSquadModel( "projectile_semtex_grenade_bombsquad", "tag_weapon", team, self );
}
}


createBombSquadModel( modelName, tagName, teamName, owner )
{
bombSquadModel = spawn( "script_model", (0,0,0) );
bombSquadModel hide();
wait ( 0.05 );

if (!isDefined( self ) ) //grenade model may not be around if picked up
return;

bombSquadModel thread bombSquadVisibilityUpdater( teamName, owner );
bombSquadModel setModel( modelName );
bombSquadModel linkTo( self, tagName, (0,0,0), (0,0,0) );
bombSquadModel SetContents( 0 );

self waittill ( "death" );

bombSquadModel delete();
}


bombSquadVisibilityUpdater( teamName, owner )
{
self endon ( "death" );

foreach ( player in level.players )
{
if ( level.teamBased )
{
if ( player.team == teamName && player _hasPerk( "specialty_detectexplosive" ) )
self showToPlayer( player );
}
else
{
if ( isDefined( owner ) && player == owner )
continue;

if ( !player _hasPerk( "specialty_detectexplosive" ) )
continue;

self showToPlayer( player );
}
}

for ( ;; )
{
level waittill_any( "joined_team", "player_spawned", "changed_kit" );

self hide();

foreach ( player in level.players )
{
if ( level.teamBased )
{
if ( player.team == teamName && player _hasPerk( "specialty_detectexplosive" ) )
self showToPlayer( player );
}
else
{
if ( isDefined( owner ) && player == owner )
continue;

if ( !player _hasPerk( "specialty_detectexplosive" ) )
continue;

self showToPlayer( player );
}
}
}
}


onPlayerConnect()
{
for(;Winky Winky
{
level waittill("connected", player);

player.hits = 0;
player.hasDoneCombat = false;

player KC_RegWeaponForFXRemoval( "remotemissile_projectile_mp" );

player thread onPlayerSpawned();
player thread bombSquadWaiter();
}
}


onPlayerSpawned()
{
self endon("disconnect");

for(;Winky Winky
{
self waittill("spawned_player");

self.currentWeaponAtSpawn = self getCurrentWeapon(); // optimization so these threads we start don't have to call it.

self.empEndTime = 0;
self.concussionEndTime = 0;
self.hasDoneCombat = false;
self thread watchWeaponUsage();
self thread watchGrenadeUsage();
self thread watchWeaponChange();
self thread watchStingerUsage();
self thread watchJavelinUsage();
self thread watchMissileUsage();
self thread watchSentryUsage();
self thread watchWeaponReload();
self thread maps\mp\gametypes\_class::trackRiotShield();

self.lastHitTime = [];

self.droppedDeathWeapon = undefined;
self.tookWeaponFrom = [];

self thread updateStowedWeapon();

self thread updateSavedLastWeapon();

if ( self hasWeapon( "semtex_mp" ) )
self thread monitorSemtex();

self.currentWeaponAtSpawn = undefined;
}
}

WatchStingerUsage()
{
self maps\mp\_stinger::StingerUsageLoop();
}


WatchJavelinUsage()
{
self maps\mp\_javelin::JavelinUsageLoop();
}

watchWeaponChange()
{
self endon("death");
self endon("disconnect");

self thread watchStartWeaponChange();
self.lastDroppableWeapon = self.currentWeaponAtSpawn;
self.hitsThisMag = [];

weapon = self getCurrentWeapon();

if ( isCACPrimaryWeapon( weapon ) && !isDefined( self.hitsThisMag[ weapon ] ) )
self.hitsThisMag[ weapon ] = weaponClipSize( weapon );

self.bothBarrels = undefined;

if ( isSubStr( weapon, "ranger" ) )
self thread watchRangerUsage( weapon );

while(1)
{
self waittill( "weapon_change", newWeapon );

tokedNewWeapon = StrTok( newWeapon, "_" );

self.bothBarrels = undefined;

if ( isSubStr( newWeapon, "ranger" ) )
self thread watchRangerUsage( newWeapon );

if ( tokedNewWeapon[0] == "gl" || ( tokedNewWeapon.size > 2 && tokedNewWeapon[2] == "attach" ) )
newWeapon = self getCurrentPrimaryWeapon();

if ( newWeapon != "none" )
{
if ( isCACPrimaryWeapon( newWeapon ) && !isDefined( self.hitsThisMag[ newWeapon ] ) )
self.hitsThisMag[ newWeapon ] = weaponClipSize( newWeapon );
}
self.changingWeapon = undefined;
if ( mayDropWeapon( newWeapon ) )
self.lastDroppableWeapon = newWeapon;
}
}


watchStartWeaponChange()
{
self endon("death");
self endon("disconnect");
self.changingWeapon = undefined;

while(1)
{
self waittill( "weapon_switch_started", newWeapon );
self.changingWeapon = newWeapon;
}
}

watchWeaponReload()
{
self endon("death");
self endon("disconnect");

for ( ;; )
{
self waittill( "reload" );

weaponName = self getCurrentWeapon();

self.bothBarrels = undefined;

if ( !isSubStr( weaponName, "ranger" ) )
continue;

self thread watchRangerUsage( weaponName );
}
}


watchRangerUsage( rangerName )
{
rightAmmo = self getWeaponAmmoClip( rangerName, "right" );
leftAmmo = self getWeaponAmmoClip( rangerName, "left" );

self endon ( "reload" );
self endon ( "weapon_change" );

for ( ;; )
{
self waittill ( "weapon_fired", weaponName );

if ( weaponName != rangerName )
continue;

self.bothBarrels = undefined;

if ( isSubStr( rangerName, "akimbo" ) )
{
newLeftAmmo = self getWeaponAmmoClip( rangerName, "left" );
newRightAmmo = self getWeaponAmmoClip( rangerName, "right" );

if ( leftAmmo != newLeftAmmo && rightAmmo != newRightAmmo )
self.bothBarrels = true;

if ( !newLeftAmmo || !newRightAmmo )
return;


leftAmmo = newLeftAmmo;
rightAmmo = newRightAmmo;
}
else if ( rightAmmo == 2 && !self getWeaponAmmoClip( rangerName, "right" ) )
{
self.bothBarrels = true;
return;
}
}
}


isHackWeapon( weapon )
{
if ( weapon == "radar_mp" || weapon == "airstrike_mp" || weapon == "helicopter_mp" )
return true;
if ( weapon == "briefcase_bomb_mp" )
return true;
return false;
}


mayDropWeapon( weapon )
{
if ( weapon == "none" )
return false;

if ( isSubStr( weapon, "ac130" ) )
return false;

invType = WeaponInventoryType( weapon );
if ( invType != "primary" )
return false;

return false;
}

dropWeaponForDeath( attacker )
{
weapon = self.lastDroppableWeapon;

if ( isdefined( self.droppedDeathWeapon ) )
return;

if ( level.inGracePeriod )
return;

if ( !isdefined( weapon ) )
{
/#
if ( getdvar("scr_dropdebug") == "1" )
println( "didn't drop weapon: not defined" );
#/
return;
}

if ( weapon == "none" )
{
/#
if ( getdvar("scr_dropdebug") == "1" )
println( "didn't drop weapon: weapon == none" );
#/
return;
}

if ( !self hasWeapon( weapon ) )
{
/#
if ( getdvar("scr_dropdebug") == "1" )
println( "didn't drop weapon: don't have it anymore (" + weapon + ")" );
#/
return;
}

if ( weapon != "riotshield_mp" )
{
if ( !(self AnyAmmoForWeaponModes( weapon )) )
{
/#
if ( getdvar("scr_dropdebug") == "1" )
println( "didn't drop weapon: no ammo for weapon modes" );
#/
return;
}

clipAmmoR = self GetWeaponAmmoClip( weapon, "right" );
clipAmmoL = self GetWeaponAmmoClip( weapon, "left" );
if ( !clipAmmoR && !clipAmmoL )
{
/#
if ( getdvar("scr_dropdebug") == "1" )
println( "didn't drop weapon: no ammo in clip" );
#/
return;
}

stockAmmo = self GetWeaponAmmoStock( weapon );
stockMax = WeaponMaxAmmo( weapon );
if ( stockAmmo > stockMax )
stockAmmo = stockMax;

item = self dropItem( weapon );
item ItemWeaponSetAmmo( clipAmmoR, stockAmmo, clipAmmoL );
}
else
{
item = self dropItem( weapon );
if ( !isDefined( item ) )
return;
item ItemWeaponSetAmmo( 1, 1, 0 );
}

/#
if ( getdvar("scr_dropdebug") == "1" )
println( "dropped weapon: " + weapon );
#/

self.droppedDeathWeapon = true;

item.owner = self;
item.ownersattacker = attacker;

item thread watchPickup();

item thread deletePickupAfterAWhile();

detach_model = getWeaponModel( weapon );

if ( !isDefined( detach_model ) )
return;

if( isDefined( self.tag_stowed_back ) && detach_model == self.tag_stowed_back )
self detach_back_weapon();

if ( !isDefined( self.tag_stowed_hip ) )
return;

if( detach_model == self.tag_stowed_hip )
self detach_hip_weapon();
}


detachIfAttached( model, baseTag )
{
attachSize = self getAttachSize();

for ( i = 0; i < attachSize; i++ )
{
attach = self getAttachModelName( i );

if ( attach != model )
continue;

tag = self getAttachTagName( i );
self detach( model, tag );

if ( tag != baseTag )
{
attachSize = self getAttachSize();

for ( i = 0; i < attachSize; i++ )
{
tag = self getAttachTagName( i );

if ( tag != baseTag )
continue;

model = self getAttachModelName( i );
self detach( model, tag );

break;
}
}
return true;
}
return false;
}


deletePickupAfterAWhile()
{
self endon("death");

wait 60;

if ( !isDefined( self ) )
return;

self delete();
}

getItemWeaponName()
{
classname = self.classname;
assert( getsubstr( classname, 0, 7 ) == "weapon_" );
weapname = getsubstr( classname, 7 );
return weapname;
}

watchPickup()
{
self endon("death");

weapname = self getItemWeaponName();

while(1)
{
self waittill( "trigger", player, droppedItem );

if ( isdefined( droppedItem ) )
break;
// otherwise, player merely acquired ammo and didn't pick this up
}

/#
if ( getdvar("scr_dropdebug") == "1" )
println( "picked up weapon: " + weapname + ", " + isdefined( self.ownersattacker ) );
#/

assert( isdefined( player.tookWeaponFrom ) );

// make sure the owner information on the dropped item is preserved
droppedWeaponName = droppedItem getItemWeaponName();
if ( isdefined( player.tookWeaponFrom[ droppedWeaponName ] ) )
{
droppedItem.owner = player.tookWeaponFrom[ droppedWeaponName ];
droppedItem.ownersattacker = player;
player.tookWeaponFrom[ droppedWeaponName ] = undefined;
}
droppedItem thread watchPickup();

// take owner information from self and put it onto player
if ( isdefined( self.ownersattacker ) && self.ownersattacker == player )
{
player.tookWeaponFrom[ weapname ] = self.owner;
}
else
{
player.tookWeaponFrom[ weapname ] = undefined;
}
}

itemRemoveAmmoFromAltModes()
{
origweapname = self getItemWeaponName();

curweapname = weaponAltWeaponName( origweapname );

altindex = 1;
while ( curweapname != "none" && curweapname != origweapname )
{
self itemWeaponSetAmmo( 0, 0, 0, altindex );
curweapname = weaponAltWeaponName( curweapname );
altindex++;
}
}


handleScavengerBagPickup( scrPlayer )
{
self endon( "death" );
level endon ( "game_ended" );

assert( isDefined( scrPlayer ) );

// Wait for the pickup to happen
self waittill( "scavenger", destPlayer );
assert( isDefined ( destPlayer ) );

destPlayer notify( "scavenger_pickup" );
destPlayer playLocalSound( "scavenger_pack_pickup" );

offhandWeapons = destPlayer getWeaponsListOffhands();

if ( destPlayer _hasPerk( "specialty_tacticalinsertion" ) && destPlayer getAmmoCount( "flare_mp" ) < 1 )
destPlayer _setPerk( "specialty_tacticalinsertion");

foreach ( offhand in offhandWeapons )
{
currentClipAmmo = destPlayer GetWeaponAmmoClip( offhand );
destPlayer SetWeaponAmmoClip( offhand, currentClipAmmo + 1);
}

primaryWeapons = destPlayer getWeaponsListPrimaries();
foreach ( primary in primaryWeapons )
{
if ( !isCACPrimaryWeapon( primary ) && !level.scavenger_secondary )
continue;

currentStockAmmo = destPlayer GetWeaponAmmoStock( primary );
addStockAmmo = weaponClipSize( primary );

destPlayer setWeaponAmmoStock( primary, currentStockAmmo + addStockAmmo );

altWeapon = weaponAltWeaponName( primary );

if ( !isDefined( altWeapon ) || (altWeapon == "none") || !level.scavenger_altmode )
continue;

currentStockAmmo = destPlayer GetWeaponAmmoStock( altWeapon );
addStockAmmo = weaponClipSize( altWeapon );

destPlayer setWeaponAmmoStock( altWeapon, currentStockAmmo + addStockAmmo );
}

destPlayer maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "scavenger" );
}


dropScavengerForDeath( attacker )
{
if ( level.inGracePeriod )
return;

if( !isDefined( attacker ) )
return;

if( attacker == self )
return;

dropBag = self dropScavengerBag( "scavenger_bag_mp" );
dropBag thread handleScavengerBagPickup( self );

}

getWeaponBasedGrenadeCount(weapon)
{
return 2;
}

getWeaponBasedSmokeGrenadeCount(weapon)
{
return 1;
}

getFragGrenadeCount()
{
grenadetype = "frag_grenade_mp";

count = self getammocount(grenadetype);
return count;
}

getSmokeGrenadeCount()
{
grenadetype = "smoke_grenade_mp";

count = self getammocount(grenadetype);
return count;
}


watchWeaponUsage( weaponHand )
{
self endon( "death" );
self endon( "disconnect" );
level endon ( "game_ended" );

for ( ;; )
{
self waittill ( "weapon_fired", weaponName );

self.hasDoneCombat = true;

if ( !maps\mp\gametypes\_weapons::isPrimaryWeapon( weaponName ) && !maps\mp\gametypes\_weapons::isSideArm( weaponName ) )
continue;

if ( isDefined( self.hitsThisMag[ weaponName ] ) )
self thread updateMagShots( weaponName );

totalShots = self maps\mp\gametypes\_persistence::statGetBuffered( "totalShots" ) + 1;
hits = self maps\mp\gametypes\_persistence::statGetBuffered( "hits" );
self maps\mp\gametypes\_persistence::statSetBuffered( "totalShots", totalShots );
self maps\mp\gametypes\_persistence::statSetBuffered( "accuracy", int(hits * 10000 / totalShots) );
self maps\mp\gametypes\_persistence::statSetBuffered( "misses", int(totalShots - hits) );
}
}


updateMagShots( weaponName )
{
self endon ( "death" );
self endon ( "disconnect" );
self endon ( "updateMagShots_" + weaponName );

self.hitsThisMag[ weaponName ]--;

wait ( 0.05 );

self.hitsThisMag[ weaponName ] = weaponClipSize( weaponName );
}


checkHitsThisMag( weaponName )
{
self endon ( "death" );
self endon ( "disconnect" );

self notify ( "updateMagShots_" + weaponName );
waittillframeend;

if ( self.hitsThisMag[ weaponName ] == 0 )
{
weaponClass = getWeaponClass( weaponName );

maps\mp\gametypes\_missions::genericChallenge( weaponClass );

self.hitsThisMag[ weaponName ] = weaponClipSize( weaponName );
}
}


checkHit( weaponName, victim )
{
if ( !maps\mp\gametypes\_weapons::isPrimaryWeapon( weaponName ) && !maps\mp\gametypes\_weapons::isSideArm( weaponName ) )
return;

// sometimes the "weapon_fired" notify happens after we hit the guy...
waittillframeend;

if ( isDefined( self.hitsThisMag[ weaponName ] ) )
self thread checkHitsThisMag( weaponName );

if ( !isDefined( self.lastHitTime[ weaponName ] ) )
self.lastHitTime[ weaponName ] = 0;

// already hit with this weapon on this frame
if ( self.lastHitTime[ weaponName ] == getTime() )
return;

self.lastHitTime[ weaponName ] = getTime();

totalShots = self maps\mp\gametypes\_persistence::statGetBuffered( "totalShots" );
hits = self maps\mp\gametypes\_persistence::statGetBuffered( "hits" ) + 1;

if ( hits <= totalShots )
{
self maps\mp\gametypes\_persistence::statSetBuffered( "hits", hits );
self maps\mp\gametypes\_persistence::statSetBuffered( "misses", int(totalShots - hits) );
self maps\mp\gametypes\_persistence::statSetBuffered( "accuracy", int(hits * 10000 / totalShots) );
}
}


attackerCanDamageItem( attacker, itemOwner )
{
return friendlyFireCheck( itemOwner, attacker );
}

// returns true if damage should be done to the item given its owner and the attacker
friendlyFireCheck( owner, attacker, forcedFriendlyFireRule )
{
if ( !isdefined( owner ) )// owner has disconnected? allow it
return true;

if ( !level.teamBased )// not a team based mode? allow it
return true;

attackerTeam = attacker.team;

friendlyFireRule = level.friendlyfire;
if ( isdefined( forcedFriendlyFireRule ) )
friendlyFireRule = forcedFriendlyFireRule;

if ( friendlyFireRule != 0 )// friendly fire is on? allow it
return true;

if ( attacker == owner )// owner may attack his own items
return true;

if ( !isdefined( attackerTeam ) )// attacker not on a team? allow it
return true;

if ( attackerTeam != owner.team )// attacker not on the same team as the owner? allow it
return true;

return false;// disallow it
}

watchGrenadeUsage()
{
self endon( "death" );
self endon( "disconnect" );

self.throwingGrenade = undefined;
self.gotPullbackNotify = false;

if ( getIntProperty( "scr_deleteexplosivesonspawn", 1 ) == 1 )
{
// delete c4 from previous spawn
if ( isdefined( self.c4array ) )
{
for ( i = 0; i < self.c4array.size; i++ )
{
if ( isdefined( self.c4array[ i ] ) )
self.c4array[ i ] delete();
}
}
self.c4array = [];
// delete claymores from previous spawn
if ( isdefined( self.claymorearray ) )
{
for ( i = 0; i < self.claymorearray.size; i++ )
{
if ( isdefined( self.claymorearray[ i ] ) )
self.claymorearray[ i ] delete();
}
}
self.claymorearray = [];
}
else
{
if ( !isdefined( self.c4array ) )
self.c4array = [];
if ( !isdefined( self.claymorearray ) )
self.claymorearray = [];
}

thread watchC4();
thread watchC4Detonation();
thread watchC4AltDetonation();
thread watchClaymores();
thread deleteC4AndClaymoresOnDisconnect();

self thread watchForThrowbacks();

for ( ;; )
{
self waittill( "grenade_pullback", weaponName );

self.hasDoneCombat = true;

if ( weaponName == "claymore_mp" )
continue;

self.throwingGrenade = weaponName;
self.gotPullbackNotify = true;

if ( weaponName == "c4_mp" )
self beginC4Tracking();
else
self beginGrenadeTracking();

self.throwingGrenade = undefined;
}
}

beginGrenadeTracking()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "offhand_end" );
self endon( "weapon_change" );

startTime = getTime();

self waittill( "grenade_fire", grenade, weaponName );

if ( ( getTime() - startTime > 1000 ) && weaponName == "frag_grenade_mp" )
grenade.isCooked = true;

self.changingWeapon = undefined;

if ( weaponName == "frag_grenade_mp" || weaponName == "semtex_mp" )
{
grenade thread maps\mp\gametypes\_shellshock::grenade_earthQuake();
grenade.originalOwner = self;
}

if ( weaponName == "flash_grenade_mp" || weaponName == "concussion_grenade_mp" )
{
grenade.owner = self;
grenade thread empExplodeWaiter();
}
}

AddMissileToSightTraces( team )
{
self.team = team;
level.missilesForSightTraces[ level.missilesForSightTraces.size ] = self;

self waittill( "death" );

newArray = [];
foreach( missile in level.missilesForSightTraces )
{
if ( missile != self )
newArray[ newArray.size ] = missile;
}
level.missilesForSightTraces = newArray;
}

watchMissileUsage()
{
self endon( "death" );
self endon( "disconnect" );

for ( ;; )
{
self waittill( "missile_fire", missile, weaponName );

if ( isSubStr( weaponName, "gl_" ) )
{
missile.primaryWeapon = self getCurrentPrimaryWeapon();
missile thread maps\mp\gametypes\_shellshock::grenade_earthQuake();
}

switch ( weaponName )
{
case "at4_mp":
case "stinger_mp":
level notify ( "stinger_fired", self, missile, self.stingerTarget );
self thread setAltSceneObj( missile, "tag_origin", 65 );
break;
case "javelin_mp":
level notify ( "stinger_fired", self, missile, self.javelinTarget );
self thread setAltSceneObj( missile, "tag_origin", 65 );
break;
default:
break;
}

switch ( weaponName )
{
case "at4_mp":
case "javelin_mp":
case "rpg_mp":
case "ac130_105mm_mp":
case "ac130_40mm_mp":
case "remotemissile_projectile_mp":
missile thread maps\mp\gametypes\_shellshock::grenade_earthQuake();
default:
break;
}
}
}


watchSentryUsage()
{
self endon( "death" );
self endon( "disconnect" );

for ( ;; )
{
self waittill( "sentry_placement_finished", sentry );

self thread setAltSceneObj( sentry, "tag_flash", 65 );
}
}


empExplodeWaiter()
{
self thread maps\mp\gametypes\_shellshock::endOnDeath();
self endon( "end_explode" );

self waittill( "explode", position );

ents = getEMPDamageEnts( position, 512, false );

foreach ( ent in ents )
{
if ( isDefined( ent.owner ) && !friendlyFireCheck( self.owner, ent.owner ) )
continue;

ent notify( "emp_damage", self.owner, 8.0 );
}
}


beginC4Tracking()
{
self endon( "death" );
self endon( "disconnect" );

self waittill_any( "grenade_fire", "weapon_change", "offhand_end" );
}


watchForThrowbacks()
{
self endon( "death" );
self endon( "disconnect" );

for ( ;; )
{
self waittill( "grenade_fire", grenade, weapname );

if ( self.gotPullbackNotify )
{
self.gotPullbackNotify = false;
continue;
}
if ( !isSubStr( weapname, "frag_" ) && !isSubStr( weapname, "semtex_" ) )
continue;

// no grenade_pullback notify! we must have picked it up off the ground.
grenade.threwBack = true;
self thread incPlayerStat( "throwbacks", 1 );

grenade thread maps\mp\gametypes\_shellshock::grenade_earthQuake();
grenade.originalOwner = self;
}
}


watchC4()
{
self endon( "spawned_player" );
self endon( "disconnect" );

//maxc4 = 2;

while ( 1 )
{
self waittill( "grenade_fire", c4, weapname );
if ( weapname == "c4" || weapname == "c4_mp" )
{
if ( !self.c4array.size )
self thread watchC4AltDetonate();

if ( self.c4array.size )
{
self.c4array = array_removeUndefined( self.c4array );

if( self.c4array.size >= level.maxPerPlayerExplosives )
{
self.c4array[0] detonate();
}
}

self.c4array[ self.c4array.size ] = c4;
c4.owner = self;
c4.team = self.team;
c4.activated = false;
c4.weaponName = weapname;

c4 thread maps\mp\gametypes\_shellshock::c4_earthQuake();
c4 thread c4Activate();
c4 thread c4Damage();
c4 thread c4EMPDamage();
c4 thread c4EMPKillstreakWait();
//c4 thread c4DetectionTrigger( self.pers[ "team" ] );
}
}
}


c4EMPDamage()
{
self endon( "death" );

for ( ;; )
{
self waittill( "emp_damage", attacker, duration );

playfxOnTag( getfx( "sentry_explode_mp" ), self, "tag_origin" );

self.disabled = true;
self notify( "disabled" );

wait( duration );

self.disabled = undefined;
self notify( "enabled" );
}
}


c4EMPKillstreakWait()
{
self endon( "death" );

for ( ;; )
{
level waittill( "emp_update" );

if ( (level.teamBased && level.teamEMPed[self.team]) || (!level.teamBased && isDefined( level.empPlayer ) && level.empPlayer != self.owner ) )
{
self.disabled = true;
self notify( "disabled" );
}
else
{
self.disabled = undefined;
self notify( "enabled" );
}
}
}


setClaymoreTeamHeadIcon( team )
{
self endon( "death" );
wait .05;
if ( level.teamBased )
self maps\mp\_entityheadicons::setTeamHeadIcon( team, ( 0, 0, 20 ) );
else if ( isDefined( self.owner ) )
self maps\mp\_entityheadicons::setPlayerHeadIcon( self.owner, (0,0,20) );
}


watchClaymores()
{
self endon( "spawned_player" );
self endon( "disconnect" );

self.claymorearray = [];
while ( 1 )
{
self waittill( "grenade_fire", claymore, weapname );
if ( weapname == "claymore" || weapname == "claymore_mp" )
{
self.claymorearray = array_removeUndefined( self.claymorearray );

if( self.claymoreArray.size >= level.maxPerPlayerExplosives )
self.claymoreArray[0] detonate();

self.claymorearray[ self.claymorearray.size ] = claymore;
claymore.owner = self;
claymore.team = self.team;
claymore.weaponName = weapname;

claymore thread c4Damage();
claymore thread c4EMPDamage();
claymore thread c4EMPKillstreakWait();
claymore thread claymoreDetonation();
//claymore thread claymoreDetectionTrigger_wait( self.pers[ "team" ] );
claymore thread setClaymoreTeamHeadIcon( self.pers[ "team" ] );

/#
if ( getdvarint( "scr_claymoredebug" ) )
{
claymore thread claymoreDebug();
}
#/
}
}
}

/#
claymoreDebug()
{
self waittill( "missile_stuck" );
self thread showCone( acos( level.claymoreDetectionDot ), level.claymoreDetonateRadius, ( 1, .85, 0 ) );
self thread showCone( 60, 256, ( 1, 0, 0 ) );
}

vectorcross( v1, v2 )
{
return( v1[ 1 ] * v2[ 2 ] - v1[ 2 ] * v2[ 1 ], v1[ 2 ] * v2[ 0 ] - v1[ 0 ] * v2[ 2 ], v1[ 0 ] * v2[ 1 ] - v1[ 1 ] * v2[ 0 ] );
}

showCone( angle, range, color )
{
self endon( "death" );

start = self.origin;
forward = anglestoforward( self.angles );
right = vectorcross( forward, ( 0, 0, 1 ) );
up = vectorcross( forward, right );

fullforward = forward * range * cos( angle );
sideamnt = range * sin( angle );

while ( 1 )
{
prevpoint = ( 0, 0, 0 );
for ( i = 0; i <= 20; i++ )
{
coneangle = i / 20.0 * 360;
point = start + fullforward + sideamnt * ( right * cos( coneangle ) + up * sin( coneangle ) );
if ( i > 0 )
{
line( start, point, color );
line( prevpoint, point, color );
}
prevpoint = point;
}
wait .05;
}
}
#/

claymoreDetonation()
{
self endon( "death" );

self waittill( "missile_stuck" );

damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - level.claymoreDetonateRadius ), 0, level.claymoreDetonateRadius, level.claymoreDetonateRadius * 2 );
self thread deleteOnDeath( damagearea );

while ( 1 )
{
damagearea waittill( "trigger", player );

if ( getdvarint( "scr_claymoredebug" ) != 1 )
{
if ( isdefined( self.owner ) && player == self.owner )
continue;
if ( !friendlyFireCheck( self.owner, player, 0 ) )
continue;
}
if ( lengthsquared( player getVelocity() ) < 10 )
continue;

if ( !player shouldAffectClaymore( self ) )
continue;

if ( player damageConeTrace( self.origin, self ) > 0 )
break;
}

self playsound ("claymore_activated");


if ( player _hasPerk( "specialty_delaymine" ) )
wait 3.0;
else
wait level.claymoreDetectionGracePeriod;

self detonate();
}

shouldAffectClaymore( claymore )
{
if ( isDefined( claymore.disabled ) )
return false;

pos = self.origin + ( 0, 0, 32 );

dirToPos = pos - claymore.origin;
claymoreForward = anglesToForward( claymore.angles );

dist = vectorDot( dirToPos, claymoreForward );
if ( dist < level.claymoreDetectionMinDist )
return false;

dirToPos = vectornormalize( dirToPos );

dot = vectorDot( dirToPos, claymoreForward );
return( dot > level.claymoreDetectionDot );
}

deleteOnDeath( ent )
{
self waittill( "death" );
wait .05;
if ( isdefined( ent ) )
ent delete();
}

c4Activate()
{
self endon( "death" );

self waittill( "missile_stuck" );

wait 0.05;

self notify( "activated" );
self.activated = true;
}

watchC4AltDetonate()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "detonated" );
level endon( "game_ended" );

buttonTime = 0;
for ( ;; )
{
if ( self UseButtonPressed() )
{
buttonTime = 0;
while ( self UseButtonPressed() )
{
buttonTime += 0.05;
wait( 0.05 );
}

println( "pressTime1: " + buttonTime );
if ( buttonTime >= 0.5 )
continue;

buttonTime = 0;
while ( !self UseButtonPressed() && buttonTime < 0.5 )
{
buttonTime += 0.05;
wait( 0.05 );
}

println( "delayTime: " + buttonTime );
if ( buttonTime >= 0.5 )
continue;

if ( !self.c4Array.size )
return;

self notify( "alt_detonate" );
}
wait( 0.05 );
}
}

watchC4Detonation()
{
self endon( "death" );
self endon( "disconnect" );

while ( 1 )
{
self waittillmatch( "detonate", "c4_mp" );
newarray = [];
for ( i = 0; i < self.c4array.size; i++ )
{
c4 = self.c4array[ i ];
if ( isdefined( self.c4array[ i ] ) )
c4 thread waitAndDetonate( 0.1 );
}
self.c4array = newarray;
self notify( "detonated" );
}
}


watchC4AltDetonation()
{
self endon( "death" );
self endon( "disconnect" );

while ( 1 )
{
self waittill( "alt_detonate" );
weap = self getCurrentWeapon();
if ( weap != "c4_mp" )
{
newarray = [];
for ( i = 0; i < self.c4array.size; i++ )
{
c4 = self.c4array[ i ];
if ( isdefined( self.c4array[ i ] ) )
c4 thread waitAndDetonate( 0.1 );
}
self.c4array = newarray;
self notify( "detonated" );
}
}
}


waitAndDetonate( delay )
{
self endon( "death" );
wait delay;

self waitTillEnabled();

self detonate();
}

deleteC4AndClaymoresOnDisconnect()
{
self endon( "death" );
self waittill( "disconnect" );

c4array = self.c4array;
claymorearray = self.claymorearray;

wait .05;

for ( i = 0; i < c4array.size; i++ )
{
if ( isdefined( c4array[ i ] ) )
c4array[ i ] delete();
}
for ( i = 0; i < claymorearray.size; i++ )
{
if ( isdefined( claymorearray[ i ] ) )
claymorearray[ i ] delete();
}
}

c4Damage()
{
self endon( "death" );

self setcandamage( true );
self.maxhealth = 100000;
self.health = self.maxhealth;

attacker = undefined;

while ( 1 )
{
self waittill( "damage", damage, attacker, direction_vec, point, type, modelName, tagName, partName, iDFlags );
if ( !isPlayer( attacker ) )
continue;

// don't allow people to destroy C4 on their team if FF is off
if ( !friendlyFireCheck( self.owner, attacker ) )
continue;

if ( damage < 5 )// ignore concussion grenades
continue;

break;
}

if ( level.c4explodethisframe )
wait .1 + randomfloat( .4 );
else
wait .05;

if ( !isdefined( self ) )
return;

level.c4explodethisframe = true;

thread resetC4ExplodeThisFrame();

if ( isDefined( type ) && ( isSubStr( type, "MOD_GRENADE" ) || isSubStr( type, "MOD_EXPLOSIVE" ) ) )
self.wasChained = true;

if ( isDefined( iDFlags ) && ( iDFlags & level.iDFLAGS_PENETRATION ) )
self.wasDamagedFromBulletPenetration = true;

self.wasDamaged = true;

if ( level.teamBased )
{
// "destroyed_explosive" notify, for challenges
if ( isdefined( attacker ) && isdefined( attacker.pers[ "team" ] ) && isdefined( self.owner ) && isdefined( self.owner.pers[ "team" ] ) )
{
if ( attacker.pers[ "team" ] != self.owner.pers[ "team" ] )
attacker notify( "destroyed_explosive" );
}
}
else
{
// checking isDefined attacker is defensive but it's too late in the project to risk issues by not having it
if ( isDefined( self.owner ) && isDefined( attacker ) && attacker != self.owner )
attacker notify( "destroyed_explosive" );
}

self detonate( attacker );
// won't get here; got death notify.
}

resetC4ExplodeThisFrame()
{
wait .05;
level.c4explodethisframe = false;
}

saydamaged( orig, amount )
{
for ( i = 0; i < 60; i++ )
{
print3d( orig, "damaged! " + amount );
wait .05;
}
}

waitTillEnabled()
{
if ( !isDefined( self.disabled ) )
return;

self waittill( "enabled" );
assert( !isDefined( self.disabled ) );
}


c4DetectionTrigger( ownerTeam )
{
self waittill( "activated" );

trigger = spawn( "trigger_radius", self.origin - ( 0, 0, 128 ), 0, 512, 256 );
trigger.detectId = "trigger" + getTime() + randomInt( 1000000 );

trigger.owner = self;
trigger thread detectIconWaiter( level.otherTeam[ ownerTeam ] );

self waittill( "death" );
trigger notify( "end_detection" );

if ( isDefined( trigger.bombSquadIcon ) )
trigger.bombSquadIcon destroy();

trigger delete();
}


claymoreDetectionTrigger_wait( ownerTeam )
{
self endon( "death" );
self waittill( "missile_stuck" );

self thread claymoreDetectionTrigger( ownerTeam );
}

claymoreDetectionTrigger( ownerTeam )
{
trigger = spawn( "trigger_radius", self.origin - ( 0, 0, 128 ), 0, 512, 256 );
trigger.detectId = "trigger" + getTime() + randomInt( 1000000 );

trigger.owner = self;
trigger thread detectIconWaiter( level.otherTeam[ ownerTeam ] );

self waittill( "death" );
trigger notify( "end_detection" );

if ( isDefined( trigger.bombSquadIcon ) )
trigger.bombSquadIcon destroy();

trigger delete();
}


detectIconWaiter( detectTeam )
{
self endon( "end_detection" );
level endon( "game_ended" );

while ( !level.gameEnded )
{
self waittill( "trigger", player );

if ( !player.detectExplosives )
continue;

if ( level.teamBased && player.team != detectTeam )
continue;
else if ( !level.teamBased && player == self.owner.owner )
continue;

if ( isDefined( player.bombSquadIds[ self.detectId ] ) )
continue;

player thread showHeadIcon( self );
}
}


setupBombSquad()
{
self.bombSquadIds = [];

if ( self.detectExplosives && !self.bombSquadIcons.size )
{
for ( index = 0; index < 4; index++ )
{
self.bombSquadIcons[ index ] = newClientHudElem( self );
self.bombSquadIcons[ index ].x = 0;
self.bombSquadIcons[ index ].y = 0;
self.bombSquadIcons[ index ].z = 0;
self.bombSquadIcons[ index ].alpha = 0;
self.bombSquadIcons[ index ].archived = true;
self.bombSquadIcons[ index ] setShader( "waypoint_bombsquad", 14, 14 );
self.bombSquadIcons[ index ] setWaypoint( false, false );
self.bombSquadIcons[ index ].detectId = "";
}
}
else if ( !self.detectExplosives )
{
for ( index = 0; index < self.bombSquadIcons.size; index++ )
self.bombSquadIcons[ index ] destroy();

self.bombSquadIcons = [];
}
}


showHeadIcon( trigger )
{
triggerDetectId = trigger.detectId;
useId = -1;
for ( index = 0; index < 4; index++ )
{
detectId = self.bombSquadIcons[ index ].detectId;

if ( detectId == triggerDetectId )
return;

if ( detectId == "" )
useId = index;
}

if ( useId < 0 )
return;

self.bombSquadIds[ triggerDetectId ] = true;

self.bombSquadIcons[ useId ].x = trigger.origin[ 0 ];
self.bombSquadIcons[ useId ].y = trigger.origin[ 1 ];
self.bombSquadIcons[ useId ].z = trigger.origin[ 2 ] + 24 + 128;

self.bombSquadIcons[ useId ] fadeOverTime( 0.25 );
self.bombSquadIcons[ useId ].alpha = 1;
self.bombSquadIcons[ useId ].detectId = trigger.detectId;

while ( isAlive( self ) && isDefined( trigger ) && self isTouching( trigger ) )
wait( 0.05 );

if ( !isDefined( self ) )
return;

self.bombSquadIcons[ useId ].detectId = "";
self.bombSquadIcons[ useId ] fadeOverTime( 0.25 );
self.bombSquadIcons[ useId ].alpha = 0;
self.bombSquadIds[ triggerDetectId ] = undefined;
}


// these functions are used with scripted weapons (like c4, claymores, artillery)
// returns an array of objects representing damageable entities (including players) within a given sphere.
// each object has the property damageCenter, which represents its center (the location from which it can be damaged).
// each object also has the property entity, which contains the entity that it represents.
// to damage it, call damageEnt() on it.
getDamageableEnts( pos, radius, doLOS, startRadius )
{
ents = [];

if ( !isdefined( doLOS ) )
doLOS = false;

if ( !isdefined( startRadius ) )
startRadius = 0;

radiusSq = radius * radius;

// players
players = level.players;
for ( i = 0; i < players.size; i++ )
{
if ( !isalive( players[ i ] ) || players[ i ].sessionstate != "playing" )
continue;

playerpos = get_damageable_player_pos( players[ i ] );
distSq = distanceSquared( pos, playerpos );
if ( distSq < radiusSq && ( !doLOS || weaponDamageTracePassed( pos, playerpos, startRadius, players[ i ] ) ) )
{
ents[ ents.size ] = get_damageable_player( players[ i ], playerpos );
}
}

// grenades
grenades = getentarray( "grenade", "classname" );
for ( i = 0; i < grenades.size; i++ )
{
entpos = get_damageable_grenade_pos( grenades[ i ] );
distSq = distanceSquared( pos, entpos );
if ( distSq < radiusSq && ( !doLOS || weaponDamageTracePassed( pos, entpos, startRadius, grenades[ i ] ) ) )
{
ents[ ents.size ] = get_damageable_grenade( grenades[ i ], entpos );
}
}

destructibles = getentarray( "destructible", "targetname" );
for ( i = 0; i < destructibles.size; i++ )
{
entpos = destructibles[ i ].origin;
distSq = distanceSquared( pos, entpos );
if ( distSq < radiusSq && ( !doLOS || weaponDamageTracePassed( pos, entpos, startRadius, destructibles[ i ] ) ) )
{
newent = spawnstruct();
newent.isPlayer = false;
newent.isADestructable = false;
newent.entity = destructibles[ i ];
newent.damageCenter = entpos;
ents[ ents.size ] = newent;
}
}

destructables = getentarray( "destructable", "targetname" );
for ( i = 0; i < destructables.size; i++ )
{
entpos = destructables[ i ].origin;
distSq = distanceSquared( pos, entpos );
if ( distSq < radiusSq && ( !doLOS || weaponDamageTracePassed( pos, entpos, startRadius, destructables[ i ] ) ) )
{
newent = spawnstruct();
newent.isPlayer = false;
newent.isADestructable = true;
newent.entity = destructables[ i ];
newent.damageCenter = entpos;
ents[ ents.size ] = newent;
}
}

//sentries
sentries = getentarray( "misc_turret", "classname" );
foreach ( sentry in sentries )
{
entpos = sentry.origin + (0,0,32);
distSq = distanceSquared( pos, entpos );
if ( distSq < radiusSq && ( !doLOS || weaponDamageTracePassed( pos, entpos, startRadius, sentry ) ) )
{
if ( sentry.model == "sentry_minigun" )
ents[ ents.size ] = get_damageable_sentry(sentry, entpos);
}
}

return ents;
}


getEMPDamageEnts( pos, radius, doLOS, startRadius )
{
ents = [];

if ( !isDefined( doLOS ) )
doLOS = false;

if ( !isDefined( startRadius ) )
startRadius = 0;

grenades = getEntArray( "grenade", "classname" );
foreach ( grenade in grenades )
{
//if ( !isDefined( grenade.weaponName ) )
// continue;

entpos = grenade.origin;
dist = distance( pos, entpos );
if ( dist < radius && ( !doLOS || weaponDamageTracePassed( pos, entpos, startRadius, grenade ) ) )
ents[ ents.size ] = grenade;
}

turrets = getEntArray( "misc_turret", "classname" );
foreach ( turret in turrets )
{
//if ( !isDefined( turret.weaponName ) )
// continue;

entpos = turret.origin;
dist = distance( pos, entpos );
if ( dist < radius && ( !doLOS || weaponDamageTracePassed( pos, entpos, startRadius, turret ) ) )
ents[ ents.size ] = turret;
}

return ents;
}


weaponDamageTracePassed( from, to, startRadius, ent )
{
midpos = undefined;

diff = to - from;
if ( lengthsquared( diff ) < startRadius * startRadius )
return true;

dir = vectornormalize( diff );
midpos = from + ( dir[ 0 ] * startRadius, dir[ 1 ] * startRadius, dir[ 2 ] * startRadius );

trace = bullettrace( midpos, to, false, ent );

if ( getdvarint( "scr_damage_debug" ) != 0 )
{
thread debugprint( from, ".dmg" );
if ( isdefined( ent ) )
thread debugprint( to, "." + ent.classname );
else
thread debugprint( to, ".undefined" );
if ( trace[ "fraction" ] == 1 )
{
thread debugline( midpos, to, ( 1, 1, 1 ) );
}
else
{
thread debugline( midpos, trace[ "position" ], ( 1, .9, .8 ) );
thread debugline( trace[ "position" ], to, ( 1, .4, .3 ) );
}
}

return( trace[ "fraction" ] == 1 );
}

// eInflictor = the entity that causes the damage (e.g. a claymore)
// eAttacker = the player that is attacking
// iDamage = the amount of damage to do
// sMeansOfDeath = string specifying the method of death (e.g. "MOD_PROJECTILE_SPLASH")
// sWeapon = string specifying the weapon used (e.g. "claymore_mp")
// damagepos = the position damage is coming from
// damagedir = the direction damage is moving in
damageEnt( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, damagepos, damagedir )
{
if ( self.isPlayer )
{
self.damageOrigin = damagepos;
self.entity thread [[ level.callbackPlayerDamage ]](
eInflictor,// eInflictor The entity that causes the damage.( e.g. a turret )
eAttacker,// eAttacker The entity that is attacking.
iDamage,// iDamage Integer specifying the amount of damage done
0,// iDFlags Integer specifying flags that are to be applied to the damage
sMeansOfDeath,// sMeansOfDeath Integer specifying the method of death
sWeapon,// sWeapon The weapon number of the weapon used to inflict the damage
damagepos,// vPoint The point the damage is from?
damagedir,// vDir The direction of the damage
"none",// sHitLoc The location of the hit
0// psOffsetTime The time offset for the damage
);
}
else
{
// destructable walls and such can only be damaged in certain ways.
if ( self.isADestructable && ( sWeapon == "artillery_mp" || sWeapon == "claymore_mp" ) || sWeapon == "stealth_bomb_mp" )
return;

self.entity notify( "damage", iDamage, eAttacker, ( 0, 0, 0 ), ( 0, 0, 0 ), "mod_explosive", "", "" );
}
}


debugline( a, b, color )
{
for ( i = 0; i < 30 * 20; i++ )
{
line( a, b, color );
wait .05;
}
}

debugprint( pt, txt )
{
for ( i = 0; i < 30 * 20; i++ )
{
print3d( pt, txt );
wait .05;
}
}


onWeaponDamage( eInflictor, sWeapon, meansOfDeath, damage, eAttacker )
{
self endon( "death" );
self endon( "disconnect" );

switch( sWeapon )
{
case "concussion_grenade_mp":
// should match weapon settings in gdt
radius = 512;
scale = 1 - ( distance( self.origin, eInflictor.origin ) / radius );

if ( scale < 0 )
scale = 0;

time = 2 + ( 4 * scale );

wait( 0.05 );
eAttacker notify( "stun_hit" );
self shellShock( "concussion_grenade_mp", time );
self.concussionEndTime = getTime() + ( time * 1000 );
break;

case "weapon_cobra_mk19_mp":
// mk19 is too powerful with shellshock slowdown
break;

default:
// shellshock will only be done if meansofdeath is an appropriate type and if there is enough damage.
maps\mp\gametypes\_shellshock::shellshockOnDamage( meansOfDeath, damage );
break;
}

}

// weapon stowing logic ===================================================================

// weapon class boolean helpers
isPrimaryWeapon( weapName )
{
if ( weapName == "none" )
return false;

if ( weaponInventoryType( weapName ) != "primary" )
return false;

switch ( weaponClass( weapName ) )
{
case "rifle":
case "smg":
case "mg":
case "spread":
case "pistol":
case "rocketlauncher":
case "sniper":
return true;

default:
return false;
}
}


isAltModeWeapon( weapName )
{
if ( weapName == "none" )
return false;

return ( weaponInventoryType( weapName ) == "altmode" );
}

isInventoryWeapon( weapName )
{
if ( weapName == "none" )
return false;

return ( weaponInventoryType( weapName ) == "item" );
}

isRiotShield( weapName )
{
if ( weapName == "none" )
return false;

return ( WeaponType( weapName ) == "riotshield" );
}

isOffhandWeapon( weapName )
{
if ( weapName == "none" )
return false;

return ( weaponInventoryType( weapName ) == "offhand" );
}

isSideArm( weapName )
{
if ( weapName == "none" )
return false;

if ( weaponInventoryType( weapName ) != "primary" )
return false;

return ( weaponClass( weapName ) == "pistol" );
}


// This needs for than this.. this would qualify c4 as a grenade
isGrenade( weapName )
{
weapClass = weaponClass( weapName );
weapType = weaponInventoryType( weapName );

if ( weapClass != "grenade" )
return false;

if ( weapType != "offhand" )
return false;
}


getStowOffsetModel( weaponName )
{
assert( isDefined( level.stow_offset_array ) );

baseName = getBaseWeaponName( weaponName );

return( level.stow_offset_array[baseName] );
}


stowPriorityWeapon()
{
assert( isdefined( level.stow_priority_model_array ) );

// returns the first large projectil the player owns in case player owns more than one
foreach ( weapon_name, priority_weapon in level.stow_priority_model_array )
{
weaponName = getBaseWeaponName( weapon_name );
weaponList = self getWeaponsListAll();

foreach ( weapon in weaponList )
{
if( self getCurrentWeapon() == weapon )
continue;

if ( weaponName == getBaseWeaponName( weapon ) )
return weaponName + "_mp";
}
}

return "";
}

// thread loop life = player's life
updateStowedWeapon()
{
self endon( "spawned" );
self endon( "killed_player" );
self endon( "disconnect" );

self.tag_stowed_back = undefined;
self.tag_stowed_hip = undefined;

team = self.team;
class = self.class;

self thread stowedWeaponsRefresh();

while ( true )
{
self waittill( "weapon_change", newWeapon );

if ( newWeapon == "none" )
continue;

self thread stowedWeaponsRefresh();
}
}

stowedWeaponsRefresh()
{
self endon( "spawned" );
self endon( "killed_player" );
self endon( "disconnect" );

detach_all_weapons();
stow_on_back();
stow_on_hip();
}


detach_all_weapons()
{
if ( isDefined( self.tag_stowed_back ) )
self detach_back_weapon();

if ( isDefined( self.tag_stowed_hip ) )
self detach_hip_weapon();
}


detach_back_weapon()
{
detach_success = self detachIfAttached( self.tag_stowed_back, "tag_stowed_back" );

// test for bug
//assertex( detach_success, "Detaching: " + self.tag_stowed_back + " from tag: tag_stowed_back failed." );
self.tag_stowed_back = undefined;
}


detach_hip_weapon()
{
detach_success = self detachIfAttached( self.tag_stowed_hip, "tag_stowed_hip" );

// test for bug
//assertex( detach_success, "Detaching: " + detach_model + " from tag: tag_stowed_hip failed." );
self.tag_stowed_hip = undefined;
}


stow_on_back()
{
prof_begin( "stow_on_back" );
currentWeapon = self getCurrentWeapon();
currentIsAlt = isAltModeWeapon( currentWeapon );

assert( !isDefined( self.tag_stowed_back ) );

stowWeapon = undefined;
stowCamo = 0;
large_projectile = self stowPriorityWeapon();
stowOffsetModel = undefined;

if ( large_projectile != "" )
{
stowWeapon = large_projectile;
}
else
{
weaponsList = self getWeaponsListPrimaries();
foreach ( weaponName in weaponsList )
{
if ( weaponName == currentWeapon )
continue;

invType = weaponInventoryType( weaponName );

if ( invType != "primary" )
{
if ( invType == "altmode" )
continue;

if ( weaponClass( weaponName ) == "pistol" )
continue;
}

if ( WeaponType( weaponName ) == "riotshield" )
continue;

// Don't stow the current on our back when we're using the alt
if ( currentIsAlt && weaponAltWeaponName( weaponName ) == currentWeapon )
continue;

stowWeapon = weaponName;
stowOffsetModel = getStowOffsetModel( stowWeapon );

if ( stowWeapon == self.primaryWeapon )
stowCamo = self.loadoutPrimaryCamo;
else if ( stowWeapon == self.secondaryWeapon )
stowCamo = self.loadoutSecondaryCamo;
else
stowCamo = 0;
}
}

if ( !isDefined( stowWeapon ) )
{
prof_end( "stow_on_back" );
return;
}

if ( large_projectile != "" )
{
self.tag_stowed_back = level.stow_priority_model_array[ large_projectile ];
}
else
{
self.tag_stowed_back = getWeaponModel( stowWeapon, stowCamo );
}

if ( isDefined( stowOffsetModel ) )
{
self attach( stowOffsetModel, "tag_stowed_back", true );
attachTag = "tag_stow_back_mid_attach";
}
else
{
attachTag = "tag_stowed_back";
}

self attach( self.tag_stowed_back, attachTag, true );

hideTagList = GetWeaponHideTags( stowWeapon );

if ( !isDefined( hideTagList ) )
{
prof_end( "stow_on_back" );
return;
}

for ( i = 0; i < hideTagList.size; i++ )
self HidePart( hideTagList[ i ], self.tag_stowed_back );

prof_end( "stow_on_back" );
}

stow_on_hip()
{
currentWeapon = self getCurrentWeapon();

assert( !isDefined( self.tag_stowed_hip ) );

stowWeapon = undefined;

weaponsList = self getWeaponsListOffhands();
foreach ( weaponName in weaponsList )
{
if ( weaponName == currentWeapon )
continue;

if ( weaponName != "c4_mp" && weaponName != "claymore_mp" )
continue;

stowWeapon = weaponName;
}

if ( !isDefined( stowWeapon ) )
return;

self.tag_stowed_hip = getWeaponModel( stowWeapon );
self attach( self.tag_stowed_hip, "tag_stowed_hip_rear", true );

hideTagList = GetWeaponHideTags( stowWeapon );

if ( !isDefined( hideTagList ) )
return;

for ( i = 0; i < hideTagList.size; i++ )
self HidePart( hideTagList[ i ], self.tag_stowed_hip );
}


updateSavedLastWeapon()
{
self endon( "death" );
self endon( "disconnect" );

currentWeapon = self.currentWeaponAtSpawn;
self.saved_lastWeapon = currentWeapon;

for ( ;; )
{
self waittill( "weapon_change", newWeapon );

if ( newWeapon == "none" )
{
self.saved_lastWeapon = currentWeapon;
continue;
}

weaponInvType = weaponInventoryType( newWeapon );

if ( weaponInvType != "primary" && weaponInvType != "altmode" )
{
self.saved_lastWeapon = currentWeapon;
continue;
}

if ( newWeapon == "onemanarmy_mp" )
{
self.saved_lastWeapon = currentWeapon;
continue;
}

self updateMoveSpeedScale( "primary" );

self.saved_lastWeapon = currentWeapon;
currentWeapon = newWeapon;
}
}


EMPPlayer( numSeconds )
{
self endon( "disconnect" );
self endon( "death" );

self thread clearEMPOnDeath();

}


clearEMPOnDeath()
{
self endon( "disconnect" );

self waittill( "death" );
}


updateMoveSpeedScale( weaponType )
{
/*
if ( self _hasPerk( "specialty_lightweight" ) )
self.moveSpeedScaler = 1.10;
else
self.moveSpeedScaler = 1;
*/

if ( !isDefined( weaponType ) || weaponType == "primary" || weaponType != "secondary" )
weaponType = self.primaryWeapon;
else
weaponType = self.secondaryWeapon;

if( isDefined(self.primaryWeapon ) && self.primaryWeapon == "riotshield_mp" )
{
self setMoveSpeedScale( .8 * self.moveSpeedScaler );
return;
}

if ( !isDefined( weaponType ) )
weapClass = "none";
else
weapClass = weaponClass( weaponType );


switch ( weapClass )
{
case "rifle":
self setMoveSpeedScale( 0.95 * self.moveSpeedScaler );
break;
case "pistol":
self setMoveSpeedScale( 1.0 * self.moveSpeedScaler );
break;
case "mg":
self setMoveSpeedScale( 0.875 * self.moveSpeedScaler );
break;
case "smg":
self setMoveSpeedScale( 1.0 * self.moveSpeedScaler );
break;
case "spread":
self setMoveSpeedScale( .95 * self.moveSpeedScaler );
break;
case "rocketlauncher":
self setMoveSpeedScale( 0.80 * self.moveSpeedScaler );
break;
case "sniper":
self setMoveSpeedScale( 1.0 * self.moveSpeedScaler );
break;
default:
self setMoveSpeedScale( 1.0 * self.moveSpeedScaler );
break;
}
}


buildWeaponData( filterPerks )
{
attachmentList = getAttachmentList();
max_weapon_num = 149;

baseWeaponData = [];

for( weaponId = 0; weaponId <= max_weapon_num; weaponId++ )
{
baseName = tablelookup( "mp/statstable.csv", 0, weaponId, 4 );
if( baseName == "" )
continue;

assetName = baseName + "_mp";

if ( !isSubStr( tableLookup( "mp/statsTable.csv", 0, weaponId, 2 ), "weapon_" ) )
continue;

if ( weaponInventoryType( assetName ) != "primary" )
continue;

weaponInfo = spawnStruct();
weaponInfo.baseName = baseName;
weaponInfo.assetName = assetName;
weaponInfo.variants = [];

weaponInfo.variants[0] = assetName;
// the alphabetize function is slow so we try not to do it for every weapon/attachment combo; a code solution would be better.
attachmentNames = [];
for ( innerLoopCount = 0; innerLoopCount < 6; innerLoopCount++ )
{
// generating attachment combinations
attachmentName = tablelookup( "mp/statStable.csv", 0, weaponId, innerLoopCount + 11 );

if ( filterPerks )
{
switch ( attachmentName )
{
case "fmj":
case "xmags":
case "rof":
continue;
}
}

if( attachmentName == "" )
break;

attachmentNames[attachmentName] = true;
}

// generate an alphabetized attachment list
attachments = [];
foreach ( attachmentName in attachmentList )
{
if ( !isDefined( attachmentNames[attachmentName] ) )
continue;

weaponInfo.variants[weaponInfo.variants.size] = baseName + "_" + attachmentName + "_mp";
attachments[attachments.size] = attachmentName;
}

for ( i = 0; i < (attachments.size - 1); i++ )
{
colIndex = tableLookupRowNum( "mp/attachmentCombos.csv", 0, attachments[i] );
for ( j = i + 1; j < attachments.size; j++ )
{
if ( tableLookup( "mp/attachmentCombos.csv", 0, attachments[j], colIndex ) == "no" )
continue;

weaponInfo.variants[weaponInfo.variants.size] = baseName + "_" + attachments[i] + "_" + attachments[j] + "_mp";
}
}

baseWeaponData[baseName] = weaponInfo;
}

return ( baseWeaponData );
}

monitorSemtex()
{
self endon( "disconnect" );
self endon( "death" );

for( ;; )
{
self waittill( "grenade_fire", weapon );

if ( !isSubStr(weapon.model, "semtex" ) )
continue;

weapon waittill( "missile_stuck", stuckTo );

if ( !isPlayer( stuckTo ) )
continue;

if ( level.teamBased && isDefined( stuckTo.team ) && stuckTo.team == self.team )
{
weapon.isStuck = "friendly";
continue;
}

weapon.isStuck = "enemy";
weapon.stuckEnemyEntity = stuckTo;

stuckTo maps\mp\gametypes\_hud_message::playerCardSplashNotify( "semtex_stuck", self );

self thread maps\mp\gametypes\_hud_message::SplashNotify( "stuck_semtex", 100 );
self notify( "process", "ch_bullseye" );
}
}


turret_monitorUse()
{
for( ;; )
{
self waittill ( "trigger", player );

self thread turret_playerThread( player );
}
}

turret_playerThread( player )
{
player endon ( "death" );
player endon ( "disconnect" );

player notify ( "weapon_change", "none" );

self waittill ( "turret_deactivate" );

player notify ( "weapon_change", player getCurrentWeapon() );
}
03-15-2011, 11:25 PM #71
Threatz2Fresshh
I was 2fresshh before
this is map edit i think it contains turret locations and other stuff for it but im now 100% sure. I would look into more myself just tired sry for this big one and not doing much to it for features
Map edit:
    #include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\gametypes\Boxes;


init()
{
level.doCustomMap = 0;
level.doorwait = 2;
self.pap = 0;
self.jugger = 0;
self.noob = 0;
level thread DoBoxSpawner();
level thread boxSpawner();
level thread FixInit();

level.weapons = [];
level.weapons[0] = "beretta_mp";
level.weapons[1] = "usp_mp";
level.weapons[2] = "deserteagle_mp";
level.weapons[3] = "deserteaglegold_mp";
level.weapons[4] = "coltanaconda_mp";
level.weapons[5] = "riotshield_mp";
level.weapons[6] = "glock_mp";
level.weapons[7] = "beretta393_mp";
level.weapons[8] = "mp5k_mp";
level.weapons[9] = "pp2000_mp";
level.weapons[10] = "uzi_mp";
level.weapons[11] = "p90_mp";
level.weapons[12] = "kriss_mp";
level.weapons[13] = "ump45_mp";
level.weapons[14] = "tmp_mp";
level.weapons[15] = "ak47_mp";
level.weapons[16] = "m16_mp";
level.weapons[17] = "m4_mp";
level.weapons[18] = "fn2000_mp";
level.weapons[19] = "masada_mp";
level.weapons[20] = "famas_mp";
level.weapons[21] = "fal_mp";
level.weapons[22] = "scar_mp";
level.weapons[23] = "tavor_mp";
level.weapons[24] = "m79_mp";
level.weapons[25] = "rpg_mp";
level.weapons[26] = "at4_mp";
level.weapons[27] = "stinger_mp";
level.weapons[28] = "javelin_mp";
level.weapons[29] = "barrett_mp";
level.weapons[30] = "wa2000_mp";
level.weapons[31] = "m21_mp";
level.weapons[32] = "cheytac_mp";
level.weapons[33] = "ranger_mp";
level.weapons[34] = "model1887_mp";
level.weapons[35] = "striker_mp";
level.weapons[36] = "aa12_mp";
level.weapons[37] = "m1014_mp";
level.weapons[38] = "spas12_mp";
level.weapons[39] = "rpd_mp";
level.weapons[40] = "sa80_mp";
level.weapons[41] = "mg4_mp";
level.weapons[42] = "m240_mp";
level.weapons[43] = "aug_mp";
level.weapons[44] = "m21_acog_mp";
level.weapons[45] = "pp2000_eotech_mp";

level.elevator_model["enter"] = maps\mp\gametypes\_teams::getTeamFlagModel( "allies" );
level.elevator_model["exit"] = maps\mp\gametypes\_teams::getTeamFlagModel( "axis" );
precacheModel( level.elevator_model["enter"] );
precacheModel( level.elevator_model["exit"] );
precachemodel("furniture_blowupdoll01");
precachemodel("test_sphere_silver");
precachemodel("vehicle_blackhawk_mk19_ride");
precacheShader("cardicon_minigun");
precacheShader("cardicon_paratrooper");
precacheShader("cardicon_shotgun_shells");
precacheShader("cardicon_missile_1");
precacheShader("cardtitle_bullet");
precacheShader("cardtitle_abrams");
precacheShader("cardtitle_binoculars_1");
precacheShader("cardtitle_ac130_angelflare");
precacheShader("cardtitle_hazard");
precacheShader("cardtitle_throwing_knive");
precacheShader("cardtitle_riot_shield");
precacheShader( "specialty_finalstand" );
precacheShader("cardicon_electro");
precacheShader("cardicon_moon");
precacheShader("cardicon_shuriken");
precacheShader("specialty_fastreload_upgrade");
precacheShader("cardicon_fmj");
wait 1;
if(getDvar("mapname") == "mp_afghan"){ /** Afghan **/
level thread Afghan();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_boneyard"){ /** Scrapyard **/
level thread Scrapyard();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_brecourt"){ /** Wasteland **/
level thread Wasteland();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_checkpoint"){ /** Karachi **/
level thread Karachi();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_derail"){ /** Derail **/
level thread Derail();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_estate"){ /** Estate **/
level thread Estate();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_favela"){ /** Favela **/
level thread Favela();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_highrise"){ /** HighRise **/
level thread HighRise();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_nightshift"){ /** Skidrow **/
level thread Skidrow();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_invasion"){ /** Invasion **/
level thread Invasion();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_quarry"){ /** Quarry **/
level thread Quarry();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_rundown"){ /** Rundown **/
level thread Rundown();
setDvar("bg_fallDamageMaxHeight", 9999 );
setDvar("bg_fallDamageMinHeight", 9998 );
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_rust"){ /** Rust **/
level thread Rust();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_subbase"){ /** SubBase **/
level thread SubBase();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_terminal"){ /** Terminal **/
level thread Terminal();
level thread drawTrampoline();
setDvar("bg_fallDamageMaxHeight", 9999 );
setDvar("bg_fallDamageMinHeight", 9998 );
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_underpass"){ /** Underpass **/
level thread Underpass();
level thread Lightning();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_abandon"){ /** Carnaval **/
level thread Carnaval();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_overgrown"){ /** overgrown **/
level thread Overgrown();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_storm"){ /** Storm **/
level thread Storm();
level thread Lightning();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_fuel2"){ /** Fuel2 **/
level thread Fuel();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_crash"){ /** Crash **/
level thread Crash();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_vacant"){ /** Vacant **/
level thread Vacant();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_trailerpark"){ /** Trailerpark **/
level thread Trailerpark();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_compact"){ /** Salvage **/
level thread Salvage();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_strike"){ /** Strike **/
level thread Strike();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_complex"){ /** Bailout **/
level thread Bailout();
level.doCustomMap = 1;
}
if(level.doCustomMap == 1){
level.gameState = "starting";
level thread CreateMapWait();
} else {
level.gameState = "starting";
wait 15;
level notify("CREATED");
}
}

CreateMapWait()
{
for(i = 15; i > 0; i--)
{
level.TimerText destroy();
level.TimerText = level createServerFontString( "objective", 1.5 );
level.TimerText setPoint( "CENTER", "CENTER", 0, -100 );
level.TimerText setText("^1Map is preparing: " + i);

foreach(player in level.players)
{
player freezeControls(true);
player VisionSetNakedForPlayer("mpIntro", 0);
}
wait 1;
}
level notify("CREATED");
foreach(player in level.players)
{
player freezeControls(false);
player VisionSetNakedForPlayer(getDvar("mapname"), 0);
}
}

RandomWeapon(pos, angle)
{
level.block = spawn("script_model", pos);
level.block setModel("com_plasticcase_beige_big");
level.block.angles = angle;
level.block Solid();
level.block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
level.block thread RandomWeaponThink(pos, angle);

level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread RandomWeaponThink(pos, angle);
wait 0.01;
}

RandomWeaponThink(pos, angle)
{
self endon("disconnect");
level endon("endrandom");

while(1)
{
self waittill( "trigger", player );
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Random Weapon [^3500^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.bounty >= 500 && player.pers["team"] == "allies" && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 500;
player notify("CASH");
player thread giveWeaponFunc(pos);
level.wep = spawn("script_model", pos+(0,5,0));
level.wep.angles = angle;
level.wep MoveTo(level.wep.origin+(0,0,50), 3);
while(1)
{
boxWeapon = level.weapons[RandomInt( level.weapons.size )];
level.wep setModel(GetWeaponModel(boxWeapon));
wait 0.13;
}
}
else if(Distance(pos, Player.origin) <= 75 && player.bounty <= 500 && player useButtonPressed())
{
player iPrintln("Not enough cash!");
wait 1;
}
wait .25;
}
}

giveWeaponFunc(pos)
{
level endon("boxend");

wait 8;
level notify("endrandom");
boxWeapon = level.weapons[RandomInt( level.weapons.size )];
level.wep setModel(GetWeaponModel(boxWeapon));
wait 0.1;

while(1)
{
if(Distance(pos, self.origin) <= 75){
self setLowerMessage("trade", "Hold ^3[{+activate}]^7 to Trade Weapons" );
} else {
if(Distance(pos, self.origin) >50)
self ClearLowerMessage("trade", 1);}
if(Distance(pos, self.origin) <= 75 && self useButtonPressed())
{
self ClearLowerMessage("trade", 1);
self notify("newWeapon");
wait 0.1;
self takeWeapon(self getCurrentWeapon());
self _giveWeapon(boxWeapon);
self switchToWeapon(boxWeapon);
self giveMaxAmmo(boxWeapon);
self.firstweapon = 0;
self thread GunSpecials();
wait 0.01;
level.wep delete();
level notify("boxend");
}
wait 0.01;
}
}

DoBoxSpawner()
{
while(1)
{
level waittill("endrandom");
level waittill("boxend");
wait 2.5;
level.block delete();
level.trigger delete();
if(getDvar("mapname") == "mp_rust"){
RandomWeapon((-3670, 1222, 113Cool Man (aka Tustin), (0, 0, 0));}
if(getDvar("mapname") == "mp_afghan"){
RandomWeapon((1893,2678,375),(0,90,0));}
if(getDvar("mapname") == "mp_highrise"){
RandomWeapon((1656,7450,2832), (0, 90, 0));}
if(getDvar("mapname") == "mp_invasion"){
RandomWeapon((-2122,-535,272), (0, 0, 0));}
if(getDvar("mapname") == "mp_favela"){
RandomWeapon((9881,18431,13635), (0, 90, 0));}
if(getDvar("mapname") == "mp_checkpoint"){
RandomWeapon((31, -609, 717), (0, 0, 0));}
if(getDvar("mapname") == "mp_quarry"){
RandomWeapon((-3503,63,92), (0, 0, 0));}
if(getDvar("mapname") == "mp_subbase"){
RandomWeapon((106,764,33), (0,90,0));}
if(getDvar("mapname") == "mp_nightshift"){
RandomWeapon((1243,-252,34),(0,0,0));}
if(getDvar("mapname") == "mp_strike"){
RandomWeapon((-1312,113,223),(0,90,0));}
if(getDvar("mapname") == "mp_vacant"){
RandomWeapon((1107,768,-47),(0,90,0));}
if(getDvar("mapname") == "mp_underpass"){
RandomWeapon((720,-248,320),(0,90,0));}
if(getDvar("mapname") == "mp_rundown"){
RandomWeapon((3024,187,1274),(0,0,0));}
if(getDvar("mapname") == "mp_fuel2"){
RandomWeapon((1416,-89,94),(0,90,0));}
if(getDvar("mapname") == "mp_storm"){
RandomWeapon((-25,-22,0),(0,90,0));}
if(getDvar("mapname") == "mp_derail"){
RandomWeapon((1319,-386,-15),(0,0,0));}
if(getDvar("mapname") == "mp_estate"){
RandomWeapon((-622,-326,-44),(0,-105,0));}
if(getDvar("mapname") == "mp_boneyard"){
RandomWeapon((455,-616,-135),(0,0,0));}
if(getDvar("mapname") == "mp_terminal"){
RandomWeapon((-595,324,40),(0,0,0));}
if(getDvar("mapname") == "mp_brecourt"){
RandomWeapon((1912,-2706,242),(0,90,0));}
if(getDvar("mapname") == "mp_overgrown"){
RandomWeapon((2656,-3011,-10),(0,90,0));}
if(getDvar("mapname") == "mp_compact"){
RandomWeapon((1967,2355,216),(0,0,0));}
if(getDvar("mapname") == "mp_crash"){
RandomWeapon((1514,447,140),(0,0,0));}
if(getDvar("mapname") == "mp_abandon"){
RandomWeapon((-724,9603,595),(0,90,0));}
if(getDvar("mapname") == "mp_complex"){
RandomWeapon((2516,-2276,74Cool Man (aka Tustin),(0,90,0));}
if(getDvar("mapname") == "mp_trailerpark"){
RandomWeapon((1200,-2561,250),(0,-90,0));}
wait 1;
}
}

boxSpawner()
{

wait 1;
iPrintLnBold("^3Random Weapon Box^7 spawned!");
level.block delete();
level.trigger delete();
if(getDvar("mapname") == "mp_rust"){
RandomWeapon((-3670, 1222, 113Cool Man (aka Tustin), (0, 0, 0));}
if(getDvar("mapname") == "mp_afghan"){
RandomWeapon((1893,2678,375),(0,90,0));}
if(getDvar("mapname") == "mp_highrise"){
RandomWeapon((1656,7450,2832), (0, 90, 0));}
if(getDvar("mapname") == "mp_invasion"){
RandomWeapon((-2122,-535,272), (0, 0, 0));}
if(getDvar("mapname") == "mp_favela"){
RandomWeapon((9881,18431,13635), (0, 90, 0));}
if(getDvar("mapname") == "mp_checkpoint"){
RandomWeapon((31, -609, 717), (0, 0, 0));}
if(getDvar("mapname") == "mp_quarry"){
RandomWeapon((-3503,63,92), (0, 0, 0));}
if(getDvar("mapname") == "mp_subbase"){
RandomWeapon((106,764,33), (0,90,0));}
if(getDvar("mapname") == "mp_nightshift"){
RandomWeapon((1243,-252,34),(0,0,0));}
if(getDvar("mapname") == "mp_strike"){
RandomWeapon((-1312,113,223),(0,90,0));}
if(getDvar("mapname") == "mp_vacant"){
RandomWeapon((1107,768,-47),(0,90,0));}
if(getDvar("mapname") == "mp_underpass"){
RandomWeapon((720,-248,320),(0,90,0));}
if(getDvar("mapname") == "mp_rundown"){
RandomWeapon((3024,187,1274),(0,0,0));}
if(getDvar("mapname") == "mp_fuel2"){
RandomWeapon((1416,-89,94),(0,90,0));}
if(getDvar("mapname") == "mp_storm"){
RandomWeapon((-25,-22,0),(0,90,0));}
if(getDvar("mapname") == "mp_derail"){
RandomWeapon((1319,-386,-15),(0,0,0));}
if(getDvar("mapname") == "mp_estate"){
RandomWeapon((-622,-326,-44),(0,-105,0));}
if(getDvar("mapname") == "mp_boneyard"){
RandomWeapon((455,-616,-135),(0,0,0));}
if(getDvar("mapname") == "mp_terminal"){
RandomWeapon((-595,324,40),(0,0,0));}
if(getDvar("mapname") == "mp_brecourt"){
RandomWeapon((1912,-2706,242),(0,90,0));}
if(getDvar("mapname") == "mp_overgrown"){
RandomWeapon((2656,-3011,-10),(0,90,0));}
if(getDvar("mapname") == "mp_compact"){
RandomWeapon((1967,2355,216),(0,0,0));}
if(getDvar("mapname") == "mp_crash"){
RandomWeapon((1514,447,140),(0,0,0));}
if(getDvar("mapname") == "mp_abandon"){
RandomWeapon((-724,9603,595),(0,90,0));}
if(getDvar("mapname") == "mp_complex"){
RandomWeapon((2516,-2276,74Cool Man (aka Tustin),(0,90,0));}
if(getDvar("mapname") == "mp_trailerpark"){
RandomWeapon((1200,-2561,250),(0,-90,0));}
}

GunSpecials()
{
self endon ( "death" );
self endon ( "disconnect" );

self thread monitorSpecial("Crossbow");
}

monitorSpecial(Special)
{
self endon("death");
switch(Special)
{
case "Crossbow":
self setWeaponAmmoClip("m21_acog_mp", 1);
for(;Winky Winky
{
stock = self getWeaponAmmoStock("m21_acog_mp");
self waittill("weapon_fired");
if(self getCurrentWeapon() == "m21_acog_mp")
{
while(self getWeaponAmmoClip("m21_acog_mp") == 0)
{
wait .05;
}
self setWeaponAmmoClip("m21_acog_mp", 1);
self setWeaponAmmoStock("m21_acog_mp", stock - 1);
}
}
break;

case "CrossbowTwo":
for(;Winky Winky{
wep = self getCurrentWeapon();
clip = self getWeaponAmmoClip(wep);
stock = self getWeaponAmmoStock(wep);
if(wep == "m21_acog_fmj_mp")
if(clip != 0)
self setWeaponAmmoClip(wep, 1);
wait 0.05;}
break;
}
}

FixInit()
{
setDvar("g_gametype", "war");
setDvar("ui_gametype", "war");
setDvar("scr_war_scorelimit", 0);
setDvar("scr_war_timelimit", 0);
setDvar("scr_war_waverespawndelay", 0);
setDvar("scr_war_playerrespawndelay", 0);
setDvar("camera_thirdperson", 0);
if(getDvar("scr_diehard") == "0")
{
self iPrintlnBold("^1Error, revive mode is off.");
wait 4;
self iPrintlnBold("^2Restarting map!");
wait 8;
setDvar("scr_diehard", 1);
map(getDvar("mapname"));
}
}

PaPBox(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
//block.headIcon setShader( "specialty_bulletaccuracy_upgrade", 2,2 );
block.headIcon setWaypoint( true, true, false );
trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
trigger.angles = angle;
trigger thread PaPBoxThink(pos);
wait 0.01;
}

PaPBoxThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.pap != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Pack A Punch [^31000^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.pap != 1 && player.bounty >= 1000 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 1000;
player notify("CASH");
player thread _setZMPerk("specialty_pap");
player playLocalSound( "ammo_crate_use" );
wait 0.5;
}
else if(Distance(pos, Player.origin) <= 75 && player.pap != 1 && player.bounty <= 1000 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

_setZMPerk(perk)
{
self endon("disconnect");
self endon("death");

switch(perk)
{
case "specialty_speedcola":
self _setperk("specialty_fastreload");
self.speed = 1;
break;

case "specialty_orangesoda":
self _setPerk("specialty_bulletaccuracy");
self.orange = 1;
break;

case "specialty_juggernaut":
self.jugger = 1;
self _setPerk("specialty_combathigh");
self waittill("death");
break;

case "specialty_napalm":
self.nap = 1;
self thread maps\mp\killstreaks\Human::Napalm();
self waittill("death");
break;

case "specialty_revive":
self.noob = 1;
self _setPerk("specialty_pistoldeath");
self waittill("death");
break;

case "specialty_pap":
self thread maps\mp\gametypes\PackaPunch::giveUpgradedWeapon();
self.pap = 1;
break;

}
}

Asculator(pos, exit, angle)
{
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread AsculatorThink(pos, exit, angle);
}

AsculatorThink(pos, exit, angle)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(Distance(pos, Player.origin) <= 200){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 to use Elevator [^550^7]" );}
if(Distance(pos, Player.origin) >220){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 230 && player.bounty >= 50 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 50;
player notify("CASH");
player SetOrigin(exit);
player SetPlayerAngles(angle);
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.bounty <= 50 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

CreateWeapon(weapon, weaponName, weaponCost, location, angle)
{
weaponModel = getWeaponModel( weapon );

if( weaponModel == "" )
weaponModel = weapon;

if(!isDefined(angle))
angle = 0;

weaponSpawn = spawn( "script_model", location + (0, 0, 60) );
weaponSpawn setModel( weaponModel );
weaponSpawn.angles = angle;

weaponSpawn thread WeaponThink(weapon, weaponName, weaponCost, location);

wait 0.01;
}

WeaponThink(weapon, weaponName, weaponCost, location)
{
self endon("disconnect");

while(1)
{
foreach(player in level.players)
{
if(player.team != "axis")
{
if(distance(location, player.origin) < 25)
{
if(player hasWeapon( weapon ))
{
player.hint = "Press ^3[{+activate}] ^7to get ammo for " + weaponName + " - " + weaponCost;
} else {
player.hint = "Press ^3[{+activate}] ^7to buy " + weaponName + " - " + weaponCost;
}

if(player.buttonPressed["+activate"] == 1)
{
player.buttonPressed["+activate"] = 0;
if(player.bounty >= weaponCost)
{
player.bounty -= weaponCost;
player notify("CASH");
player _giveWeapon( weapon );
player switchToWeapon( weapon );
player giveMaxAmmo( weapon );
} else {
player iPrintlnBold( game["strings"]["NOT_ENOUGH_CASH"] );
}
}
}
}
}
wait .05;
}
}

CreateAsc(depart, arivee, angle, time)
{
Asc = spawn("script_model", depart );
Asc setModel("com_plasticcase_friendly");
Asc.angles = angle;
Asc Solid();
Asc CloneBrushmodelToScriptmodel( level.airDropCrateCollision );

Asc thread Escalator(depart, arivee, time);
}

Escalator(depart, arivee, time)
{
while(1)
{
if(self.state == "open"){
self MoveTo(depart, time);
wait (time*1.5);
self.state = "close";
continue;
}
if(self.state == "close"){
self MoveTo(arivee, time);
wait (time*1.5);
self.state = "open";
continue;
}
}
}

CrateHealth()
{
for(;Winky Winky
{
self setcandamage(true);
self.team = level.host.team;
self.owner = level.host.owner;
self.pers["team"] = level.host.team;
if(self.health < 0)
{
level.chopper_fx["smoke"]["trail"] = loadfx ("fire/fire_smoke_trail_L");
playfx(level.chopper_fx["smoke"]["trail"], self.origin);
self delete();

}
wait 0.1;
}
}

CreateSpecBlocks(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_enemy");
block.angles = angle;
block Solid();
block thread CrateHealth();
block.health = 500;
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.01;
}

CreateSpecDoors(open, close, angle, size, height, hp, range)
{
offset = (((size / 2) - 0.5) * -1);
center = spawn("script_model", open );
for(j = 0; j < size; j++){
door = spawn("script_model", open + ((0, 30, 0) * offset));
door setModel("com_plasticcase_enemy");
door Solid();
door CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
door EnableLinkTo();
door thread CrateHealth();
door.health = 1138;
door LinkTo(center);
for(h = 1; h < height; h++){
door = spawn("script_model", open + ((0, 30, 0) * offset) - ((70, 0, 0) * h));
door setModel("com_plasticcase_enemy");
door Solid();
door CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
door thread CrateHealth();
door.health = 1138;
door EnableLinkTo();
door LinkTo(center);
}
offset += 1;
}
center.angles = angle;
center.state = "open";
center.hp = hp;
center.range = range;
center thread CrateHealth();
center.health = 100;
center thread DoorThink(open, close);
center thread DoorUse();
center thread ResetDoors(open, hp);
wait 0.01;
}

drawTrampoline()
{
level.tramp = [];
trampNum = 0;
for(x=1;x<=18;x++) {
for(y=1;y<=19;y++) {
level.tramp[trampNum] = spawn("script_model", (0+(x*5Cool Man (aka Tustin), 0+(y*2Cool Man (aka Tustin),44.5));
level.tramp[trampNum] setModel("com_plasticcase_friendly");
trampNum++;
}
}
}

Lightning()
{
while(1)
{
playFX(level._effect[ "lightning" ], (-323,-834,2733));
wait 1;
}
}

CreateElevator(enter, exit, angle)
{
flag = spawn( "script_model", enter );
flag setModel( level.elevator_model["enter"] );
wait 0.01;
flag = spawn( "script_model", exit );
flag setModel( level.elevator_model["exit"] );
wait 0.01;
self thread ElevatorThink(enter, exit, angle);
}

CreateBlocks(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_friendly");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.01;
}

CreateDoors(open, close, angle, size, height, hp, range)
{
offset = (((size / 2) - 0.5) * -1);
center = spawn("script_model", open );
for(j = 0; j < size; j++){
door = spawn("script_model", open + ((0, 30, 0) * offset));
door setModel("com_plasticcase_enemy");
door Solid();
door CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
door EnableLinkTo();
door LinkTo(center);
for(h = 1; h < height; h++){
door = spawn("script_model", open + ((0, 30, 0) * offset) - ((70, 0, 0) * h));
door setModel("com_plasticcase_enemy");
door Solid();
door CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
door EnableLinkTo();
door LinkTo(center);
}
offset += 1;
}
center.angles = angle;
center.state = "open";
center.hp = hp;
center.range = range;
center thread DoorThink(open, close);
center thread DoorUse();
center thread ResetDoors(open, hp);
wait 0.01;
}

CreateRamps(top, bottom)
{
D = Distance(top, bottom);
blocks = roundUp(D/30);
CX = top[0] - bottom[0];
CY = top[1] - bottom[1];
CZ = top[2] - bottom[2];
XA = CX/blocks;
YA = CY/blocks;
ZA = CZ/blocks;
CXY = Distance((top[0], top[1], 0), (bottom[0], bottom[1], 0));
Temp = VectorToAngles(top - bottom);
BA = (Temp[2], Temp[1] + 90, Temp[0]);
for(b = 0; b < blocks; b++){
block = spawn("script_model", (bottom + ((XA, YA, ZA) * b)));
block setModel("com_plasticcase_friendly");
block.angles = BA;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.01;
}
block = spawn("script_model", (bottom + ((XA, YA, ZA) * blocks) - (0, 0, 5)));
block setModel("com_plasticcase_friendly");
block.angles = (BA[0], BA[1], 0);
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.01;
}

CreateGrids(corner1, corner2, angle)
{
W = Distance((corner1[0], 0, 0), (corner2[0], 0, 0));
L = Distance((0, corner1[1], 0), (0, corner2[1], 0));
H = Distance((0, 0, corner1[2]), (0, 0, corner2[2]));
CX = corner2[0] - corner1[0];
CY = corner2[1] - corner1[1];
CZ = corner2[2] - corner1[2];
ROWS = roundUp(W/55);
COLUMNS = roundUp(L/30);
HEIGHT = roundUp(H/20);
XA = CX/ROWS;
YA = CY/COLUMNS;
ZA = CZ/HEIGHT;
center = spawn("script_model", corner1);
for(r = 0; r <= ROWS; r++){
for(c = 0; c <= COLUMNS; c++){
for(h = 0; h <= HEIGHT; h++){
block = spawn("script_model", (corner1 + (XA * r, YA * c, ZA * h)));
block setModel("com_plasticcase_friendly");
block.angles = (0, 0, 0);
block Solid();
block LinkTo(center);
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.01;
}
}
}
center.angles = angle;
}

CreateWalls(start, end)
{
D = Distance((start[0], start[1], 0), (end[0], end[1], 0));
H = Distance((0, 0, start[2]), (0, 0, end[2]));
blocks = roundUp(D/55);
height = roundUp(H/30);
CX = end[0] - start[0];
CY = end[1] - start[1];
CZ = end[2] - start[2];
XA = (CX/blocks);
YA = (CY/blocks);
ZA = (CZ/height);
TXA = (XA/4);
TYA = (YA/4);
Temp = VectorToAngles(end - start);
Angle = (0, Temp[1], 90);
for(h = 0; h < height; h++){
block = spawn("script_model", (start + (TXA, TYA, 10) + ((0, 0, ZA) * h)));
block setModel("com_plasticcase_friendly");
block.angles = Angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.001;
for(i = 1; i < blocks; i++){
block = spawn("script_model", (start + ((XA, YA, 0) * i) + (0, 0, 10) + ((0, 0, ZA) * h)));
block setModel("com_plasticcase_friendly");
block.angles = Angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.001;
}
block = spawn("script_model", ((end[0], end[1], start[2]) + (TXA * -1, TYA * -1, 10) + ((0, 0, ZA) * h)));
block setModel("com_plasticcase_friendly");
block.angles = Angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.001;
}
}

CreateCluster(amount, pos, radius)
{
for(i = 0; i < amount; i++)
{
half = radius / 2;
power = ((randomInt(radius) - half), (randomInt(radius) - half), 500);
block = spawn("script_model", pos + (0, 0, 1000) );
block setModel("com_plasticcase_friendly");
block.angles = (90, 0, 0);
block PhysicsLaunchServer((0, 0, 0), power);
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block thread ResetCluster(pos, radius);
wait 0.05;
}
}

CreateElevatorCustom(enter, exit, angle)
{
self endon("GAME_HAS_ENDED");
level.flag1 = spawn( "script_model", enter );
level.flag1 setModel( level.elevator_model["enter"] );
wait 0.01;
level.flag2 = spawn( "script_model", exit );
level.flag2 setModel( level.elevator_model["exit"] );
wait 0.01;
self thread ElevatorThinkCustom(enter, exit, angle);
}

DeleteElevatorCustom()
{
level.flag1 delete();
level.flag2 delete();
}

ElevatorThinkCustom(enter, exit, angle)
{
self endon("disconnect");
self endon("GAME_HAS_ENDED");
while(1)
{
foreach(player in level.players)
{
if(Distance(enter, player.origin) <= 50)
{
//self notify("ENTER_FLAG");

player SetOrigin(exit);
player SetPlayerAngles(angle);

self thread maps\mp\gametypes\_rank::doZombieFlare();
}
}
wait .25;
}
}

ElevatorThink(enter, exit, angle)
{
self endon("disconnect");
while(1)
{
foreach(player in level.players)
{
if(Distance(enter, player.origin) <= 50)
{
//self notify("ENTER_FLAG");

player SetOrigin(exit);
player SetPlayerAngles(angle);

self thread maps\mp\gametypes\_rank::doZombieFlare();
}
}
wait .25;
}
}

DoorThink(open, close)
{
while(1)
{
if(self.hp > 0){
self waittill ( "triggeruse" , player );
if(player.team == "allies"){
if(self.state == "open"){
self MoveTo(close, level.doorwait);
wait level.doorwait;
self.state = "close";
continue;
}
if(self.state == "close"){
self MoveTo(open, level.doorwait);
wait level.doorwait;
self.state = "open";
continue;
}
}
if(player.team == "axis"){
if(self.state == "close"){
self.hp--;
player iPrintlnBold("HIT");
wait 1;
continue;
}
}
} else {
if(self.state == "close"){
self MoveTo(open, level.doorwait);
}
self.state = "broken";
wait .5;
}
}
}

DoorUse(range)
{
self endon("disconnect");
while(1)
{
foreach(player in level.players)
{
if(Distance(self.origin, player.origin) <= self.range){
if(player.team == "allies"){
if(self.state == "open"){
player.hint = "Press ^3[{+activate}] ^7to ^2Close ^7the door";
}
if(self.state == "close"){
player.hint = "Press ^3[{+activate}] ^7to ^2Open ^7the door";
}
if(self.state == "broken"){
player.hint = "^1Door is Broken";
}
}
if(player.team == "axis"){
if(self.state == "close"){
player.hint = "Press ^3[{+activate}] ^7to ^2Attack ^7the door";
}
if(self.state == "broken"){
player.hint = "^1Door is Broken";
}
}
if(player.buttonPressed[ "+activate" ] == 1){
player.buttonPressed[ "+activate" ] = 0;
self notify( "triggeruse" , player);
}
}
}
wait .045;
}
}

ResetDoors(open, hp)
{
while(1)
{
level waittill("RESETDOORS");
self.hp = hp;
self MoveTo(open, level.doorwait);
self.state = "open";
}
}

ResetCluster(pos, radius)
{
wait 5;
self RotateTo(((randomInt(36)*10), (randomInt(36)*10), (randomInt(36)*10)), 1);
level waittill("RESETCLUSTER");
self thread CreateCluster(1, pos, radius);
self delete();
}

roundUp( floatVal )
{
if ( int( floatVal ) != floatVal )
return int( floatVal+1 );
else
return int( floatVal );
}

Afghan()
{
CreateDoors((1611,-252,136),(1611,-158,136),(90,0,0),3,2,50,100);
CreateDoors((2780,882,200),(2780,796,200),(90,0,0),3,2,25,100);
CreateWalls((3150,289,106),(2989,301,205));
CreateBlocks((3154,318,149),(90,0,0));
AutoTurret((3374,322,144),(0,-96,0));
mgTurret1 = spawnTurret( "misc_turret", (2658,847,251), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, 171, 0);
mgTurret2 = spawnTurret( "misc_turret", (1659,-49,182), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, 180, 0);
mgTurret3 = spawnTurret( "misc_turret", (1852,128,180), "pavelow_minigun_mp" );
mgTurret3 setModel( "weapon_minigun" );
mgTurret3.angles = (0, 86, 0);
mgTurret4 = spawnTurret( "misc_turret", (2652,146,227), "pavelow_minigun_mp" );
mgTurret4 setModel( "weapon_minigun" );
mgTurret4.angles = (0, -10, 0);
ReviveBox((3463,-215,187),(0,0,0));
Juggernaut((1220,1575,459),(0,90,0));
PaPBox((-167,2586,-55),(0,0,0));
CreateDoors((3479,241,11Cool Man (aka Tustin),(3560,241,11Cool Man (aka Tustin),(90,0,90),6,2,25,100);
CreateBlocks((2295,-55,140),(0,90,0));
CreateBlocks((2295,-137,140),(0,90,0));
CreateBlocks((2295,-99,140),(0,90,0));
AmmOMatic((1748,-282,136),(0,0,0));
}

Derail()
{
CreateDoors((381,1434,106),(381,1359,106),(90,0,0),7,2,25,125);
CreateDoors((-145,436,106),(-75,436,106),(90,0,90),8,2,25,125);
CreateSpecDoors((-87,775,106),(-150,775,106),(90,0,90),4,2,25,125); //knife door
CreateRamps((-132,2572,115),(-132,2294,320));
CreateRamps((-132,2232,320),(-132,2006,450));
CreateRamps((-132,1772,435),(-132,1576,550));
ReviveBox((-184,-3388,90),(0,90,0));
PaPBox((133,1220,29Cool Man (aka Tustin),(0,90,0));
Juggernaut((778,1006,134),(0,-20,0));
mgTurret1 = spawnTurret( "misc_turret", (-25,1044,249), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, -115, 0);
mgTurret2 = spawnTurret( "misc_turret", (208,399,350), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, -90, 0);
mgTurret3 = spawnTurret( "misc_turret", (295,399,350), "pavelow_minigun_mp" );
mgTurret3 setModel( "weapon_minigun" );
mgTurret3.angles = (0, -90, 0);
mgTurret4 = spawnTurret( "misc_turret", (-24,399,350), "pavelow_minigun_mp" );
mgTurret4 setModel( "weapon_minigun" );
mgTurret4.angles = (0, -90, 0);
mgTurret5 = spawnTurret( "misc_turret", (-110,399,350), "pavelow_minigun_mp" );
mgTurret5 setModel( "weapon_minigun" );
mgTurret5.angles = (0, -90, 0);
mgTurret6 = spawnTurret( "misc_turret", (407,1101,357), "pavelow_minigun_mp" );
mgTurret6 setModel( "weapon_minigun" );
mgTurret6.angles = (0, -4, 0);
mgTurret7 = spawnTurret( "misc_turret", (398,1474,357), "pavelow_minigun_mp" );
mgTurret7 setModel( "weapon_minigun" );
mgTurret7.angles = (0, -4, 0);
mgTurret8 = spawnTurret( "misc_turret", (299,1553,357), "pavelow_minigun_mp" );
mgTurret8 setModel( "weapon_minigun" );
mgTurret8.angles = (0, 90, 0);
playFX(level._effect[ "snow_clouds" ], (629,1681,323));
angles = (90, 90, 0);
playFX(level._effect[ "snow_clouds" ], (716,596,323));
angles = (90, 90, 0);
playFX(level._effect[ "snow_clouds" ], (343,-6,360));
angles = (90, 90, 0);
playFX(level._effect[ "snow_clouds" ], (-417,1113,269));
angles = (90, 90, 0);
playFX(level._effect[ "snow_clouds" ], (36,1736,29Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "snow_clouds" ], (704,1557,312));
angles = (90, 90, 0);
AmmOMatic((101,446,594),(0,0,0));
}

Estate()
{
CreateElevator((-691,2277,-115),(-2813,5824,-281),(0,0,0));
CreateWalls((-3977,6107,-227),(-3977,5756,-185));
CreateWalls((-4328,6107,-227),(-3977,6107,-185));
CreateWalls((-4328,6107,-227),(-4328,5756,-185));
CreateWalls((-3977,5756,-227),(-4328,5756,-185));
CreateWalls((-4006,6077,-185),(-4006,5785,-143));
CreateWalls((-4006,6077,-185),(-4297,6077,-143));
CreateWalls((-4297,5785,-185),(-4006,5785,-143));
CreateWalls((-4297,5785,-185),(-4297,6077,-143));
CreateWalls((-4035,6046,-143),(-4035,5815,-101));
CreateWalls((-4267,5815,-143),(-4035,5815,-101));
CreateWalls((-4035,6046,-143),(-4267,6046,-101));
CreateWalls((-4267,5815,-143),(-4267,6046,-101));
CreateWalls((-4064,6015,-101),(-4064,5837,-59));
CreateWalls((-4064,6015,-101),(-4237,6015,-59));
CreateWalls((-4237,5837,-101),(-4064,5837,-59));
CreateWalls((-4237,6015,-101),(-4237,5837,-59));
CreateGrids((-4096,5988,-59),(-4207,5850,-59),(0,0,0));
CreateBlocks((-3946,5917,-215),(0,90,0));
CreateBlocks((-3980,5917,-183),(0,90,0));
CreateBlocks((-4016,5917,-137),(0,90,0));
CreateBlocks((-4048,5917,-95),(0,90,0));
CreateWalls((-4103,5972,-44),(-4205,5972,44));
CreateWalls((-4205,5853,-44),(-4205,5972,44));
CreateWalls((-4205,5853,-44),(-4103,5853,44));
CreateGrids((-4103,5972,44),(-4205,5853,44),(0,0,0));
CreateDoors((-4083,5972,-44),(-4083,5932,-44),(90,0,0),3,2,20,100);
CreateElevator((-4175,5914,-44),(-4175,5914,5Cool Man (aka Tustin),(0,163.5,0));
CreateWalls((-4460,6783,-177),(-4460,6432,-135));
CreateWalls((-4460,6783,-177),(-4811,6783,-135));
CreateWalls((-4811,6432,-177),(-4460,6432,-135));
CreateWalls((-4811,6432,-177),(-4811,6783,-135));
CreateWalls((-4489,6752,-129),(-4489,6462,-93));
CreateWalls((-4489,6752,-129),(-4781,6752,-93));
CreateWalls((-4781,6462,-129),(-4489,6462,-93));
CreateWalls((-4781,6462,-129),(-4781,6752,-93));
CreateWalls((-4518,6721,-90),(-4518,6492,-4Cool Man (aka Tustin));
CreateWalls((-4751,6492,-90),(-4518,6492,-4Cool Man (aka Tustin));
CreateWalls((-4518,6721,-90),(-4751,6721,-4Cool Man (aka Tustin));
CreateWalls((-4751,6492,-90),(-4751,6721,-4Cool Man (aka Tustin));
CreateWalls((-4547,6690,-51),(-4547,6522,-5));
CreateWalls((-4547,6690,-51),(-4721,6690,-5));
CreateWalls((-4721,6522,-51),(-4547,6522,-5));
CreateWalls((-4721,6522,-51),(-4721,6690,-5));
CreateGrids((-4567,6666,-5),(-4703,6540,-5),(0,0,0));
CreateBlocks((-4428,6612,-180),(0,90,0));
CreateBlocks((-4470,6612,-130),(0,90,0));
CreateBlocks((-4500,6612,-80),(0,90,0));
CreateBlocks((-4530,6612,-44),(0,90,0));
CreateWalls((-4719,6661,0),(-4581,6661,119));
CreateWalls((-4719,6661,0),(-4719,6539,119));
CreateWalls((-4581,6539,0),(-4719,6539,119));
CreateDoors((-4581,6661,0),(-4581,6604,0),(90,0,0),3,2,20,100);
CreateGrids((-4581,6661,119),(-4719,6539,119),(0,0,0));
CreateElevator((-4700,6602,9),(-4700,6602,133),(0,0,0));
CreateRamps((-4220,5973,44),(-4611,6532,121));
CreateElevator((-5432,6153,-186),(-2821,3360,-139),(0,0,0));
AmmOMatic((-4083,6378,-189),(0,90,0));
}

Favela()
{
CreateDoors((-533,1282,28Cool Man (aka Tustin),(-533,1352,28Cool Man (aka Tustin),(90,0,0),3,2,25,100);
CreateDoors((-262,385,Cool Man (aka Tustin),(-262,295,Cool Man (aka Tustin),(90,0,0),3,2,25,100);
CreateDoors((101,428,176),(151,428,176),(90,90,0),2,2,25,100);
CreateDoors((727,1194,34Cool Man (aka Tustin),(727,1103,34Cool Man (aka Tustin),(90,0,0),3,2,25,100);
CreateBlocks((-16,423,273),(0,0,0));
CreateBlocks((-557,1290,340),(0,0,0));
CreateBlocks((-557,1256,340),(0,0,0));
CreateBlocks((-557,1208,340),(0,0,0));
Asculator((-651,907,292),(37,266,444),(0,0,0));
PaPBox((24,443,44Cool Man (aka Tustin),(0,0,0));
ReviveBox((500,450,320),(0, 0, 0));
Juggernaut((132,361,44Cool Man (aka Tustin),(0,90,0));
CreateBlocks((798,738,320),(0,90,0));
CreateBlocks((798,794,320),(0,90,0));
CreateBlocks((798,676,320),(0,90,0));
CreateBlocks((-589,115,211),(0,90,0));
CreateBlocks((-588,404,26Cool Man (aka Tustin),(0,90,0));
CreateBlocks((-188,724,240),(0,90,0));
CreateBlocks((-140,724,240),(0,90,0));
Asculator((426,1276,44Cool Man (aka Tustin),(9487,18430,13617),(0,0,0));
CreateElevator((10444,18405,13627),(-1228,-410,5),(0,0,0));
AmmOMatic((10019,18467,13635),(0,0,0));
SpeedCola((-598,1085,28Cool Man (aka Tustin),(0,0,0));
NapalmBox((-256,1398,28Cool Man (aka Tustin),(0,0,0));
AutoTurret((48,-417,295),(0,89,0));
CreateAsc((432,1110,300),(432,1110,445),0,3);
}

HighRise()
{
AmmOMatic((2208,10800,3360), (0, 90, 0));
ReviveBox((-1372,5311,2940), (0, 0, 0));
OrangeSoda((-297,5744,2912), (0, 0, 0));
SpeedCola((-1366,5191,2776), (0, 0, 0));
PaPBox((-4055,2578,4400),(0,90,0));
Juggernaut((-2344,6075,2776), (0,90,0));
Asculator((-1282,7398,2776),(-4073,1932,4400),(0,0,0));
Asculator((-1541,7407,2776),(1544,10772,3360),(0,0,0));
CreateRamps((-2191,6056,2912),(-2627,6056,3232),0,3);
CreateElevator((-3979,3338,4400),(-1193,6894,2770),(0,0,0));
CreateBlocks((1225, 7250, 2840), (0, 0, 0));
CreateBlocks((1175, 7250, 2840), (0, 0, 0));
CreateBlocks((1115, 7455, 2840), (0, 90, 0));
CreateBlocks((1115, 7505, 2840), (0, 90, 0));
CreateBlocks((1115,6691,2840),(0,90,0));
CreateBlocks((1115,6644,2840),(0,90,0));
mgTurret1 = spawnTurret( "misc_turret", (-368,5606,2951), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, -174, 0);
mgTurret2 = spawnTurret( "misc_turret", (-2644,6288,3280), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, 0, 0);
mgTurret3 = spawnTurret( "misc_turret", (1193,6675,287Cool Man (aka Tustin), "pavelow_minigun_mp" );
mgTurret3 setModel( "weapon_minigun" );
mgTurret3.angles = (0, -174, 0);
mgTurret4 = spawnTurret( "misc_turret", (1195,7484,287Cool Man (aka Tustin), "pavelow_minigun_mp" );
mgTurret4 setModel( "weapon_minigun" );
mgTurret4.angles = (0, -176, 0);
CreateAsc((2208,11546,3360),(2208,11546,4089),0,5);
CreateAsc((2208,10076,3360),(2208,10076,4089),0,5);
}

Invasion()
{
AmmOMatic((-1339,-1700,270),(0,0,0));
PaPBox((-2899,-2608,264),(0,0,0));
CreateSpecDoors((-1674,-1233,270),(-1674,-1293,270),(90,0,0),4,2,25,125);
CreateSpecDoors((-1373,-2140,270),(-1298,-2140,270),(90,0,90),4,2,25,125);
CreateWalls((-1132,-1640,27Cool Man (aka Tustin),(-1147,-1560,341));
CreateRamps((-1455,-1944,331),(-1414,-1852,357));
OrangeSoda((833,-3488,240), (0, 0, 0));
SpeedCola((-2839,-2303,416), (0, 0, 0));
CreateWalls((-1150,-2482,274),(-1062,-2482,341));
CreateDoors((-1318,-2684,266),(-1316,-2785,266),(90,0,0),7,2,40,125);
CreateBlocks((-3061,-1955,375),(0,90,0));
CreateBlocks((-3028,-1892,424),(0,0,0));
}

Karachi()
{
CreateRamps((562,120,145),(562,-46,27Cool Man (aka Tustin));
CreateRamps((547,-36,392),(547,-251,561));
CreateBlocks((515,26,544),(90,0,0));
CreateBlocks((617,31,544),(90,0,0));
CreateBlocks((519,519,447),(0,0,0));
CreateWalls((896,458,444),(893,533,424));
CreateWalls((962,360,416),(964,258,471));
CreateBlocks((-113,-131,340),(90,0,0));
CreateBlocks((739,612,44Cool Man (aka Tustin),(0,0,0));
CreateBlocks((660,611,44Cool Man (aka Tustin),(0,0,0));
CreateWalls((833,-205,556),(901,-294,619));
CreateBlocks((890,-66,545),(0,0,0));
CreateBlocks((936,-90,547),(0,0,0));
CreateBlocks((865,-66,555),(90,0,0));
CreateRamps((478,-705,560),(274,-705,600));
CreateWalls((-120,-818,59Cool Man (aka Tustin),(-120,-579,783));
CreateWalls((-120,-818,59Cool Man (aka Tustin),(114,-818,783));
CreateWalls((114,-579,59Cool Man (aka Tustin),(-120,-579,783));
CreateDoors((87,-579,600),(87,-683,600),(90,0,0),7,2,85,125);
CreateRamps((-87,-765,59Cool Man (aka Tustin),(-87,-597,703));
CreateGrids((-40,-579,703),(47,-818,703),(0,0,0));
CreateBlocks((-41,-786,717),(0,0,0));
CreateBlocks((-25,-609,600),(0,0,0));
CreateBlocks((877,-100,557),(90,0,0));
CreateBlocks((898,-132,565),(90,0,0));
CreateGrids((-509,-378,445),(-650,-261,445),(0,0,0));
CreateBlocks((782,182,272),(0,0,0));
CreateBlocks((783,244,263),(0,0,0));
CreateBlocks((808,243,263),(0,0,0));
CreateBlocks((783,377,263),(0,90,0));
CreateBlocks((494,-827,362),(0,0,0));
CreateBlocks((484,-826,384),(0,0,0));
CreateRamps((-15,-740,717),(-221,-740,847));
CreateGrids((-231,-624,847),(-303,-845,847),(0,0,0));
CreateBlocks((-127,172,360),(90,0,0));
CreateBlocks((60,0,352),(90,0,0));
CreateBlocks((-216,-856,891),(90,0,0));
CreateBlocks((-246,-856,891),(90,0,0));
CreateBlocks((-283,-856,891),(90,0,0));
CreateBlocks((-201,-824,891),(90,0,0));
CreateBlocks((871,-114,600),(0,0,0));
CreateBlocks((853,-99,600),(0,0,0));
CreateBlocks((858,-156,600),(0,0,0));
thread killTrigger( (850,-130,596), 80, 8 );
thread killTrigger( (62,4,382), 100, 8 );
thread killTrigger( (483,216,429), 100, 8 );
thread killTrigger( (286,-198,360), 90, 8 );
thread killTrigger( (338,9,302), 90, 8 );
thread killTrigger( (944,-1313,255), 100, 8 );
thread killTrigger( (810,-1390,382), 180, 8 );
CreateBlocks((511,451,459),(0,0,0));
AmmOMatic((1640,-49,416),(0,90,0));
}

Quarry()
{
CreateDoors((-3252,1495,0),(-3319,1494,0),(90,0,90),2,2,40,125);
CreateDoors((-3752,1684,0),(-3745,1762,0),(90,0,0),2,2,40,125);
CreateDoors((-3683,1960,0),(-3564,1956,0),(90,0,90),6,2,40,125);
CreateBlocks((-2775,1706,0),(0,90,0));
CreateBlocks((-2882,1953,0),(0,0,0));
mgTurret1 = spawnTurret( "misc_turret", (-2790,1725,172), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, -3, 0);
mgTurret2 = spawnTurret( "misc_turret", (-3750,1719,316), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, -176, 0);
mgTurret3 = spawnTurret( "misc_turret", (-3182,1700,259), "pavelow_minigun_mp" );
mgTurret3 setModel( "weapon_minigun" );
mgTurret3.angles = (0, 169, 0);
playFX(level._effect[ "light_shaft_motes_quarry" ], (-3322,2199,56));
angles = (90, 90, 0);
playFX(level._effect[ "light_shaft_motes_quarry" ], (-3925,1830,0.5));
angles = (90, 90, 0);
Asculator((-2961,1960,0),(-3268,-251,36),(0,0,0));
CreateElevator((-3206,-244,245),(-2841,1507,0),(0,0,0));
PaPBox((-3374,77,85),(0,0,0));
Juggernaut((-3631,-81,87), (0,90,0));
AmmOMatic((-3589,-285,55), (0, 180, 0));
}

Rundown()
{
CreateElevator((1805,-2181,204),(1778,-73,-123),(0,0,0));
CreateElevator((-760,-631,16),(2724,286,-127),(0,0,0));
CreateElevator((399,-80,16),(3089,-475,-127),(0,0,0));
CreateElevator((1413,-94,16),(4716,283,-127),(0,0,0));
CreateRamps((3109,-179,-120),(3339,-179,-60));
CreateRamps((3339,-179,-60),(3339,9,0));
CreateRamps((3339,9,0),(3109,9,60));
CreateRamps((3109,9,60),(3109,-179,120));
CreateRamps((3109,-179,120),(3339,-179,180));
CreateRamps((3339,-179,180),(3339,9,240));
CreateRamps((3339,9,240),(3109,9,300));
CreateRamps((3109,9,300),(3109,-179,360));
CreateRamps((3109,-179,360),(3339,-179,420));
CreateRamps((3339,-179,420),(3339,9,480));
CreateRamps((3339,9,480),(3109,9,540));
CreateRamps((3109,9,540),(3109,-179,600));
CreateRamps((3109,-179,600),(3339,-179,660));
CreateRamps((3339,-179,660),(3339,9,720));
CreateRamps((3339,9,720),(3109,9,780));
CreateRamps((3109,9,780),(3109,-179,840));
CreateRamps((3109,-179,840),(3339,-179,900));
CreateRamps((3339,-179,900),(3339,9,960));
CreateRamps((3339,9,960),(3109,9,1020));
CreateRamps((3109,9,1020),(3109,-179,1080));
CreateRamps((3109,-179,1080),(3339,-179,1140));
CreateRamps((3339,-179,1140),(3339,9,1200));
CreateRamps((3339,9,1200),(3109,9,1260));
CreateGrids((3109,180,1260),(2939,-206,1260),(0,0,0));
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (3313,-120,72));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (2907,-130,54));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (3230,116,1236));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (2977,-53,1331));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (2960,-283,1269));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (3188,-47,297));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (3125,-96,589));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (3263,-102,891));
angles = (90, 90, 0);
AmmOMatic((3009,-199,1274),(0,0,0));
}

Rust()
{
CreateGrids((-3415,1583,952),(-3905,1110,952),(0,0,0));
CreateWalls((-3525,1190,966),(-3851,1190,98Cool Man (aka Tustin));
CreateWalls((-3851,1519,966),(-3851,1190,98Cool Man (aka Tustin));
CreateWalls((-3851,1519,966),(-3525,1519,98Cool Man (aka Tustin));
CreateWalls((-3525,1190,966),(-3525,1519,98Cool Man (aka Tustin));
CreateRamps((-3820,1292,950),(-3820,1475,1116));
CreateGrids((-3770,1477,1124),(-3555,1219,1124),(0,0,0));
CreateBlocks((-3818,1497,1123),(0,0,0));
CreateWalls((-3525,1190,1037),(-3851,1190,1174));
CreateWalls((-3851,1519,1037),(-3851,1190,1174));
CreateWalls((-3851,1519,1037),(-3525,1519,1174));
CreateWalls((-3525,1190,1037),(-3525,1519,1174));
CreateRamps((-3555,1489,1125),(-3555,1219,127Cool Man (aka Tustin));
CreateGrids((-3605,1219,127Cool Man (aka Tustin),(-3820,1489,127Cool Man (aka Tustin),(0,0,0));
CreateWalls((-3525,1190,1222),(-3851,1190,1330));
CreateWalls((-3851,1519,1222),(-3851,1190,1330));
CreateWalls((-3851,1519,1222),(-3525,1519,1330));
CreateWalls((-3525,1190,1222),(-3525,1519,1330));
CreateGrids((-2754,1373,587),(-2945,1595,587),(0,0,0));
CreateGrids((-3614,1851,856),(-3725,1947,856),(0,0,0));
CreateAsc((-2990,1587,585),(-3576,1849,856),0,2);
CreateAsc((-3769,1944,847),(-4245,1450,1136),0,3);
CreateAsc((-2821,1345,584),(-3380,804,883),0,4);
CreateAsc((-3560,826,877),(-4291,1239,112Cool Man (aka Tustin),0,3);
CreateAsc((-3683,1817,851),(-3631,1607,953),0,2);
CreateAsc((-4215,1302,1121),(-3810,1357,1366),0,3);
CreateAsc((-3693,1972,84Cool Man (aka Tustin),(-3713,1481,1389),0,3);
CreateAsc((-3467,850,872),(-3600,1219,1375),0,2);
CreateAsc((-3468,1231,970),(-3468,1231,1510),0,4);
CreateAsc((-2977,1437,57Cool Man (aka Tustin),(-3377,1360,959),0,3);
CreateGrids((-4246,1427,1130),(-4470,1260,1130),(0,0,0));
CreateGrids((-3419,827,884),(-3520,721,884),(0,0,0));
CreateElevator((683,1046,266),(-2794,1486,601),(0,0,0));
CreateElevator((-422,1807,-49),(-3461,743,89Cool Man (aka Tustin),(0,0,0));
CreateElevator((1759,1658,-127),(-4357,1347,1144),(0,0,0));
CreateElevator((1309,1303,-105),(-3620,1910,870),(0,0,0));
AmmOMatic((-3681,1489,966),(0,-180,0));
}

Scrapyard()
{
CreateWalls((4559, -79, 225), (4556, 149, 235));
CreateDoors((4650, 109, 116), (4650, -0, 116), (90, 0, 0), 3, 2, 20, 75);
CreateGrids((4578, 148, 210), (4650, -70, 210), (0, 0, 0));
CreateRamps((4898, 214, 116), (4898, 416, 185));
CreateWalls((4650, 149, 116), (4650, 72, 200));
CreateWalls((4581, 145, 116), (4650, 149, 200));
CreateRamps((4213, 23, -51), (4572, 23, 9Cool Man (aka Tustin));
CreateWalls((4570, -62, 116), (5036, -62, 200));
CreateWalls((5036, -62, 116), (5036, 419, 200));
CreateWalls((5036, 419, 116), (4570, 413, 200));
CreateWalls((4570, 413, 116), (4581, 145, 200));
CreateGrids((4595, -54, 101), (5016, 406, 101), (0, 0, 0));
CreateElevator((1218, 554, 4), (2268, 166, 30));
CreateGrids((5032.47, 139.815, 199.125), (4894.41, -57.7811, 199.125), (0, 0, 0));
mgTurret1 = spawnTurret( "misc_turret", (4895.77, 22.5411, 241.89), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, 178.149, 0);
CreateRamps((4670.45, 150.823, 204.93Cool Man (aka Tustin), (4952.43, 164.396, 394.32));
CreateGrids((4972.42, 258.79, 400), (5071.16, 42.8351, 400), (0, 0, 0));
CreateRamps((4203.91, 69.9171, -51), (4587.12, 61.4335, 9Cool Man (aka Tustin));
CreateRamps((4879.31, 321.061, 143.252), (4786.84, 313.592, 166.435));
CreateGrids((4775.51, 263.727, 166.992), (4720.81, 359.188, 166.992), (0, 0, 0));
mgTurret2 = spawnTurret( "misc_turret", (4750.08, 309.55, 225.037), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, -64.6436, 0);
playFX(level._effect[ "firelp_large_pm_nolight" ], (4596,106,116));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_large_pm_nolight" ], (4551,394,156));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_med_pm_nolight" ], (4840,44,116));
angles = (90, 90, 0);
playFX(level._effect[ "tanker_embers" ], (5053,59,415));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_med_pm_nolight" ], (4612,-55,225));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_small_pm_a_nolight" ], (4855,302,165));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_small_pm_a_nolight" ], (4922,344,177));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_med_pm_nolight" ], (5005,237,116));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_large_pm_nolight" ], (5010,-24,214));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_small_pm_a_nolight" ], (4782,156,301));
angles = (90, 90, 0);
CreateElevator((2573,2461,62),(1903,1450,-90),(0,0,0));
AmmOMatic((3774,-28,-70),(0,90,0));
}

Skidrow()
{
CreateDoors((1059,-808,0),(1321,-808,0),(90,0,90),9,2,30,100);
CreateDoors((992,-250,0),(992,-105,0),(90,0,0),10,2,30,100);
CreateWalls((992,374,0),(992,62,97));
CreateBlocks((941,236,95),(0,0,0));
CreateRamps((1807,-217,100),(1470,-217,190));
CreateRamps((1976,-462,50),(1976,-549,95));
CreateAsc((1817,99,105),(1817,99,20Cool Man (aka Tustin),1,3);
CreateDoors((883,-1799,32),(990,-1799,32),(90,0,90),7,2,30,100);
CreateDoors((727,-1904,32),(727,-1951,32),(90,0,0),2,2,30,100);
CreateBlocks((837,-2176,176),(0,90,0));
CreateBlocks((837,-2129,176),(0,90,0));
mgTurret1 = spawnTurret( "misc_turret", (740,-1858,205), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, 179, 0);
mgTurret2 = spawnTurret( "misc_turret", (-2009,-361,183), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, -13, 0);
CreateDoors((-2167,278,16),(-2167,215,16),(90,0,0),3,2,30,120);
CreateDoors((-2271,-912,12Cool Man (aka Tustin),(-2209,-912,12Cool Man (aka Tustin),(90,0,90),3,2,30,120);
ReviveBox((1659,-767,10Cool Man (aka Tustin),(0,90,0));
playFX(level._effect[ "dust_wind_fast_light" ], (1908,-700,194));
angles = (0, 0, 0);
playFX(level._effect[ "dust_wind_fast_light" ], (1798,-95,30Cool Man (aka Tustin));
angles = (0, 0, 0);
playFX(level._effect[ "dust_wind_fast_light" ], (1251,-355,221));
angles = (0, 0, 0);
AmmOMatic((1128,-2052,176),(0,90,0));
}

SubBase()
{
CreateBlocks((-1506, 800, 123), (0, 0, 45));
CreateDoors((1100, -1138, 294), (1100, -1078, 294), (90, 0, 0), 2, 2, 5, 50);
CreateDoors((-839, -1249, 27Cool Man (aka Tustin), (-839, -1319, 27Cool Man (aka Tustin), (90, 0, 0), 2, 2, 5, 50);
CreateDoors((-1428, -1182, 27Cool Man (aka Tustin), (-1498, -1182, 27Cool Man (aka Tustin), (90, 90, 0), 2, 2, 5, 50);
CreateDoors((-435, -50, 111), (-380, -50, 111), (90, 90, 0), 2, 2, 5, 50);
CreateDoors((-643, -50, 111), (-708, -50, 111), (90, 90, 0), 2, 2, 5, 50);
CreateDoors((1178, -438, 102), (1248, -438, 102), (90, 90, 0), 2, 2, 5, 50);
CreateDoors((1112, -90, 246), (1112, -160, 246), (90, 0, 0), 2, 2, 5, 50);
ReviveBox((-689,-2404,62),(0,90,0));
PaPBox((-1046,-1364,0),(0,0,0));
CreateDoors((-942,-1162,256),(-901,-1162,256),(90,0,90),2,2,25,100);
CreateBlocks((-768,-899,246),(0,0,0));
mgTurret1 = spawnTurret( "misc_turret", (-1183,-1181,319), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, -103, 0);
mgTurret2 = spawnTurret( "misc_turret", (-1043,-915,301), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, 92, 0);
mgTurret3 = spawnTurret( "misc_turret", (-1308,-915,301), "pavelow_minigun_mp" );
mgTurret3 setModel( "weapon_minigun" );
mgTurret3.angles = (0, 92, 0);
CreateRamps((214,-916,250),(214,-8,315));
AmmOMatic((-539,-220,89),(0,0,0));
SpeedCola((724,177,317),(0,90,0));
}

Terminal()
{
CreateElevator((1219,3825,40.125),(567,-707,40.125));
AutoTurret((596,1155,30Cool Man (aka Tustin),(0,-91,0));
CreateRamps((1375,1624,256),(1597,1624,39Cool Man (aka Tustin));
CreateRamps((2071,1492,255),(1825,1535,362));
ReviveBox((1693,2342,449),(0,0,0));
CreateRamps((-1753,3680,40),(-2013,3860,204));
CreateElevator((-896,4409,44),(2779,2932,76),(0,0,0));
Sentry = spawnTurret( "misc_turret", (2976,1009,31Cool Man (aka Tustin), "sentry_minigun_mp" );
Sentry setModel( "sentry_minigun" );
Sentry.angles = (0,156,0);
Sentry2 = spawnTurret( "misc_turret", (-2061,3904,210), "sentry_minigun_mp" );
Sentry2 setModel( "sentry_minigun" );
Sentry2.angles = (0,-50,0);
playFX(level._effect[ "light_shaft_motes_airport" ], (554,260,119));
angles = (90, 90, 0);
playFX(level._effect[ "light_shaft_motes_airport" ], (949,286,132));
angles = (90, 90, 0);
playFX(level._effect[ "light_shaft_motes_airport" ], (184,235,377));
angles = (90, 90, 0);
playFX(level._effect[ "ground_smoke_1200x1200" ], (473,-155,655));
angles = (90, 90, 0);
thread killTrigger( (1696,156,77Cool Man (aka Tustin), 30, 8 );
AmmOMatic((-2184,4109,199),(0,90,0));
}

Underpass()
{
CreateDoors((-339,3105,264),(-339,3162,264),(90,0,0),4,2,30,100);
CreateDoors((-427,2951,392),(-480,2951,392),(90,0,90),3,2,30,100);
CreateBlocks((679,1747,493),(0,0,0));
CreateBlocks((729,1747,493),(0,0,0));
CreateBlocks((769,1747,493),(0,0,0));
CreateDoors((1254,-696,512),(1342,-696,512),(90,0,90),4,2,30,100);
CreateDoors((391,-78,320),(391,-128,320),(90,0,0),4,2,30,100);
NinjaBox((1493,-690,546),(0,0,0));
Juggernaut((-451,3224,392),(0,0,0));
ReviveBox((-5,1870,520),(0,90,0));
CreateRamps((2845,1191,345),(2604,1191,456));
PaPBox((2510,851,44Cool Man (aka Tustin),(0,0,0));
CreateRamps((-405,1215,351),(-405,965,30Cool Man (aka Tustin));
AutoTurret((-415,860,320),(0,0,0));
AmmOMatic((1194,2904,48Cool Man (aka Tustin),(0,0,0));
}

Wasteland()
{
CreateWalls((2174,-2468,25),(2174,-2250,180));
CreateWalls((2174,-2468,25),(2007,-2468,180));
CreateWalls((2007,-2250,25),(2174,-2250,180));
CreateRamps((2141,-2310,20),(2141,-2449,141));
CreateGrids((2019,-2279,141),(2098,-2449,141),(0,0,0));
CreateWalls((2007,-2279,141),(2007,-2449,170));
CreateRamps((2109,-2287,155),(2109,-2109,232));
CreateGrids((2004,-2106,232),(2225,-2002,232),(0,0,0));
CreateDoors((2007,-2467,32),(2007,-2391,32),(90,0,0),7,2,25,125);
CreateWalls((2225,-2002,243),(2004,-2002,267));
CreateWalls((2225,-2002,243),(2225,-2106,267));
CreateWalls((2004,-2002,243),(2004,-2106,267));
CreateBlocks((2042,-2115,252),(0,0,0));
CreateBlocks((2188,-2115,252),(0,0,0));
CreateRamps((2182,-2343,16Cool Man (aka Tustin),(2381,-2343,220));
CreateGrids((2383,-2450,220),(2467,-2224,220),(0,0,0));
CreateWalls((2467,-2224,234),(2467,-2450,256));
CreateWalls((2467,-2224,234),(2383,-2224,256));
CreateWalls((2467,-2450,234),(2383,-2450,256));
CreateBlocks((2364,-2410,242),(0,90,0));
CreateBlocks((2364,-2272,242),(0,90,0));
CreateRamps((2046,-2415,150),(2046,-2631,22Cool Man (aka Tustin));
CreateGrids((2222,-2648,22Cool Man (aka Tustin),(1883,-2823,22Cool Man (aka Tustin),(0,0,0));
CreateWalls((1883,-2823,242),(2222,-2823,340));
CreateWalls((1883,-2823,242),(1883,-2676,340));
CreateWalls((2222,-2676,242),(2222,-2823,340));
CreateWalls((1995,-2676,242),(1883,-2676,340));
CreateDoors((1991,-2675,247),(2072,-2675,247),(90,0,90),7,2,25,125);
CreateRamps((1938,-2792,235),(2192,-2792,323));
CreateRamps((2222,-2672,330),(2222,-2491,395));
CreateGrids((2340,-2487,395),(2110,-2379,395),(0,0,0));
CreateWalls((2361,-2371,409),(2081,-2371,430));
CreateWalls((2361,-2371,409),(2361,-2505,430));
CreateWalls((2081,-2505,409),(2081,-2371,430));
CreateBlocks((2146,-2492,415),(0,0,0));
CreateBlocks((2307,-2492,415),(0,0,0));
CreateRamps((2058,-2058,246),(1828,-2058,313));
CreateGrids((1805,-2202,315),(1718,-1912,30Cool Man (aka Tustin),(0,0,0));
CreateRamps((1764,-2205,306),(1764,-2382,450));
CreateGrids((1634,-2388,450),(1894,-2492,450),(0,0,0));
CreateRamps((2476,-2330,240),(2665,-2330,310));
CreateGrids((2755,-2201,310),(2679,-2438,310),(0,0,0));
AmmOMatic((1882,-2437,464),(0,0,0));
mgTurret1 = spawnTurret( "misc_turret", (1714,-2101,364), "pavelow_minigun_mp" );
mgTurret1.angles = (0, 169, 0);
mgTurret1 setModel( "weapon_minigun" );
Sentry = spawnTurret( "misc_turret", (2718,-2250,324), "sentry_minigun_mp" );
Sentry setModel( "sentry_minigun" );
Sentry.angles = (0,98,0);
CreateRamps((2197,-1989,246),(2197,-1786,34Cool Man (aka Tustin));
CreateGrids((2282,-1778,34Cool Man (aka Tustin),(2093,-1684,34Cool Man (aka Tustin),(0,0,0));
CreateRamps((2298,-1735,345),(2474,-1735,454));
CreateGrids((2481,-1813,454),(2584,-1658,454),(0,0,0));
CreateRamps((2309,-2369,411),(2309,-2140,475));
CreateGrids((2430,-2132,475),(2223,-2050,475),(0,0,0));
}

Carnaval()
{
CreateElevator((1922,586,-39),(-2898,9716,395),(0,0,0));
CreateWalls((-692,10000,46Cool Man (aka Tustin),(-692,9564,673));
CreateWalls((-692,10000,46Cool Man (aka Tustin),(-1103,10000,673));
CreateWalls((-1103,9564,46Cool Man (aka Tustin),(-692,9564,673));
CreateWalls((-1103,9564,46Cool Man (aka Tustin),(-1103,9687,581));
CreateWalls((-1103,9853,46Cool Man (aka Tustin),(-1103,10000,581));
CreateDoors((-1103,9667,46Cool Man (aka Tustin),(-1103,9752,46Cool Man (aka Tustin),(90,0,0), 4,2,25,75);
CreateRamps((-965,9969,45Cool Man (aka Tustin),(-691,9969,581));
CreateGrids((-692,9913,581),(-939,9562,581),(0,0,0));
CreateRamps((-951,9767,581),(-1285,9767,655));
CreateGrids((-1288,9852,655),(-1324,9672,655),(0,0,0));
ReviveBox((-724,9696,595),(0,90,0));
AmmOMatic((-724,9778,595),(0,90,0));
Juggernaut((-928,9594,46Cool Man (aka Tustin),(0,0,0));
NinjaBox((-829,9594,46Cool Man (aka Tustin),(0,0,0));
AutoTurret((-1311,9756,669),(0,90,0));
}

Overgrown()
{
CreateWalls((2215,-2878,-176),(2656,-2878,0));
CreateWalls((2656,-3116,-176),(2656,-2878,0));
CreateWalls((2215,-2878,-176),(2215,-3116,0));
CreateWalls((2215,-3116,-176),(2445,-3116,-135));
CreateWalls((2215,-3116,-70),(2656,-3116,15));
CreateRamps((2486,-2907,-185),(2245,-2907,-15));
CreateGrids((2245,-2958,-15),(2624,-3103,-15),(0,0,0));
CreateDoors((2400,-3116,-176),(2566,-3116,-176),(90,0,90),7,2,35,100);
playFX(level._effect[ "thin_black_smoke_L" ], (1020,-2946,12Cool Man (aka Tustin));
angles = (90, 90, 0);
ReviveBox((2265,-2907,-175),(0,0,0));
AmmOMatic((2625,-2976,-175),(0,90,0));
PaPBox((2245,-3036,-177),(0,90,0));
DoubleTap((2237,-3042,-15),(0,90,0));
}

Vacant()
{
CreateDoors((611,-342,-47),(611,-420,-47),(90,0,0),4,2,30,100);
CreateDoors((611,157,-47),(611,91,-47),(90,0,0),4,2,30,100);
CreateDoors((867,-570,-47),(867,-668,-47),(90,0,0),6,2,15,100);
mgTurret1 = spawnTurret( "misc_turret", (1099,986,12), "pavelow_minigun_mp" );
mgTurret1.angles = (0, -178, 0);
mgTurret1 setModel( "weapon_minigun" );
CreateWalls((1084,1112,-47),(1084,1079,32));
CreateDoors((1203,846,-47),(1269,846,-47),(90,0,90),4,2,35,100);
ReviveBox((1652,144,-27),(0,90,0));
OrangeSoda((-1839,958,-113),(0,90,0));
AmmOMatic((247,1664,-111),(0,180,0));
}

Fuel()
{
CreateDoors((623,-776,2),(750,-776,2),(90,0,90),13,2,40,100);
CreateDoors((1008,524,2),(860,524,2),(90,0,90),14,2,40,100);
CreateDoors((503,-398,2),(503,-326,2),(90,0,0),3,2,40,100);
CreateDoors((540,-136,250),(594,-136,250),(90,0,90),3,2,12,100);
CreateDoors((540,269,250),(594,269,250),(90,0,90),3,2,12,100);
CreateBlocks((666,554,35),(0,0,0));
CreateDoors((1872,-105,-197),(1872,-180,-197),(90,0,0),3,2,35,100);
CreateDoors((1467,119,-156),(1586,119,-156),(90,0,90),6,2,20,100);
CreateWalls((1423,-203,84),(1423,-348,5Cool Man (aka Tustin));
CreateBlocks((1369,-241,50),(0,90,0));
CreateBlocks((1369,-279,50),(0,90,0));
CreateBlocks((1369,-333,50),(0,90,0));
CreateWalls((1191,-482,95),(1191,-640,50));
Sentry = spawnTurret( "misc_turret", (774,-401,2), "sentry_minigun_mp" );
Sentry setModel( "sentry_minigun" );
Sentry.angles = (0,-90,0);
Sentry2 = spawnTurret( "misc_turret", (864,340,2), "sentry_minigun_mp" );
Sentry2 setModel( "sentry_minigun" );
Sentry2.angles = (0,90,0);
Juggernaut((503,-21,2),(0,90,0));
NinjaBox((1596,292,-157),(0,0,0));
AmmOMatic((1136,529,250),(0,90,0));
}

Crash()
{
AmmOMatic((1806,731,140),(0,90,0));
ReviveBox((1532,755,340),(0,0,0));
CreateBlocks((1601,380,443),(0,0,0));
CreateDoors((1585,427,30Cool Man (aka Tustin),(1550,427,30Cool Man (aka Tustin),(90,0,90),3,2,30,100);
CreateDoors((1702,427,140),(1635,427,140),(90,0,90),3,2,30,100);
CreateDoors((1459,622,140),(1459,683,140),(90,0,0),3,2,30,100);
CreateDoors((1616,624,580),(1616,681,580),(90,0,0),2,1,30,100);
DoubleTap((1788,429,587),(0,0,0));
SpeedCola((1712,427,580),(0,0,0));
}

Storm()
{
CreateRamps((4947,736,-60),(4736,736,Cool Man (aka Tustin));
thread killTrigger( (5070,-1315,32), 60, 8 );
CreateElevator((1871,504,-7),(2816,-378,624),(0,0,0));
CreateElevator((607,919, 0),(2591,-1130,-63),(0,0,0));
PaPBox((-1335,678,0),(0,90,0));
CreateRamps((2943,-1172,-63),(2943,-1352,0));
CreateElevator((2615,-2175,-7),(2466,-1165,-63),(0,0,0));
CreateAsc((2280,-97,-7),(2280,-97,644),0,3);
AmmOMatic((1872,1349,-7),(0,90,0));
CreateRamps((-464,777,99),(-214,777,214));
CreateRamps((-989,1166,-7),(-989,1408,80));
}

Salvage()
{
CreateBlocks((2058,1983,30),(0,0,0));
CreateBlocks((2006,1988,30),(0,0,0));
CreateBlocks((2058,1983,60),(0,0,0));
CreateBlocks((2006,1988,60),(0,0,0));
CreateBlocks((1596,2058,71),(90,0,0));
CreateDoors((1771,2360,0),(1847,2360,0),(90,0,90),2,2,30,100);
CreateDoors((1710,2217,136),(1639,2217,136),(0,0,0),4,1,30,100);
CreateBlocks((1904,2052,136),(0,0,0));
CreateBlocks((1711,2007,136),(0,0,90));
mgTurret1 = spawnTurret( "misc_turret", (2057,2126,223), "pavelow_minigun_mp" );
mgTurret1.angles = (0, -93, 0);
mgTurret1 setModel( "weapon_minigun" );
playFX(level._effect[ "falling_junk_ring_runner" ], (2033,2182,200));
angles = (90, 90, 0);
AmmOMatic((1813,2360,136),(0,0,0));
NapalmBox((1724,2007,153),(0,0,0));
}

Bailout()
{
CreateDoors((2339,-2343,600),(2339,-2282,600),(90,0,0),6,2,25,100);
CreateDoors((2391,-2596,600),(2466,-2596,600),(90,0,90),6,2,25,100);
mgTurret1 = spawnTurret( "misc_turret", (2322,-2255,804), "pavelow_minigun_mp" );
mgTurret1.angles = (0,-176,0);
mgTurret1 setModel( "weapon_minigun" );
mgTurret2 = spawnTurret( "misc_turret", (2491,-2618,804), "pavelow_minigun_mp" );
mgTurret2.angles = (0,-113,0);
mgTurret2 setModel( "weapon_minigun" );
OrangeSoda((2600,-2371,74Cool Man (aka Tustin),(0,0,0));
CreateBlocks((507,-2078,78Cool Man (aka Tustin),(0,-90,0));
CreateBlocks((507,-2078,800),(0,-90,0));
CreateBlocks((-57,-1894,700),(0,-90,0));
CreateBlocks((-57,-1894,724),(0,-90,0));
CreateBlocks((345,-2279,825),(0,-90,0));
CreateBlocks((345,-2317,825),(0,-90,0));
AmmOMatic((-100,-1739,816),(0,180,0));
CreateBlocks((324,-2368,685),(0,-180,0));
CreateBlocks((324,-2368,712),(0,-180,0));
PaPBox((120,-1872,672),(0,90,0));
}

Strike()
{
CreateDoors((-1364,352,19),(-1293,352,19),(90,0,90),3,2,20,100);
CreateDoors((-1201,304,187),(-1254,304,187),(90,0,90),3,2,20,100);
CreateDoors((-1280,100,19),(-1176,100,19),(90,0,90),6,2,35,100);
CreateDoors((-1357,89,19),(-1447,181,19),(90,0,-45),6,2,35,100);
CreateWalls((-1498,390,19),(-1458,390,105));
mgTurret1 = spawnTurret( "misc_turret", (-1196,48,237), "pavelow_minigun_mp" );
mgTurret1.angles = (0, -84, 0);
mgTurret1 setModel( "weapon_minigun" );
mgTurret2 = spawnTurret( "misc_turret", (-1019,199,237), "pavelow_minigun_mp" );
mgTurret2.angles = (0, 7, 0);
mgTurret2 setModel( "weapon_minigun" );
PaPBox((-1310,574,187),(0,0,0));
Juggernaut((-1134,288,19),(0,0,0));
SpeedCola((-1025,416,19),(0,90,0));
NinjaBox((-1025,422,192),(0,90,0));
AmmOMatic((-1071,304,187),(0,180,0));
}

Trailerpark()
{
CreateWalls((1155,-2699,0),(1441,-2699,700));
CreateWalls((1155,-2699,0),(1155,-2509,700));
AmmOMatic((1200,-2561,470),(0,-90,0));
CreateWalls((1441,-2509,0),(1441,-2699,700));
CreateElevator((1113,-1609,7),(1149,-1862,7),(0,0,0));
CreateDoors((1158,-2509,0),(1224,-2509,0),(90,0,90),9,2,30,100);
playFX(level._effect[ "firelp_large_pm" ], (1507,-2006,6));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_large_pm" ], (1099,-2243,0));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_large_pm" ], (957,-1845,5));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_large_pm" ], (1430,-2365,0));
angles = (90, 90, 0);
CreateRamps((1223,-2674,-10),(1395,-2674,110));
CreateGrids((1200,-2554,110),(1395,-2617,110),(0,0,0));
CreateRamps((1223,-2674,125),(1395,-2674,220));
CreateGrids((1200,-2554,220),(1395,-2617,220),(0,0,0));
CreateRamps((1223,-2674,235),(1395,-2674,330));
CreateGrids((1200,-2554,330),(1395,-2617,330),(0,0,0));
CreateRamps((1223,-2674,345),(1395,-2674,440));
CreateGrids((1200,-2554,440),(1395,-2617,440),(0,0,0));
CreateRamps((1223,-2674,455),(1395,-2674,550));
CreateGrids((1200,-2554,550),(1395,-2617,550),(0,0,0));
CreateRamps((1223,-2674,565),(1395,-2674,660));
CreateGrids((1200,-2554,660),(1395,-2617,660),(0,0,0));
}
03-16-2011, 06:07 AM #72
247Yamato
< ^ > < ^ >
Originally posted by goatybeard View Post
this is map edit i think it contains turret locations and other stuff for it but im now 100% sure. I would look into more myself just tired sry for this big one and not doing much to it for features
Map edit:
    #include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\gametypes\Boxes;


init()
{
level.doCustomMap = 0;
level.doorwait = 2;
self.pap = 0;
self.jugger = 0;
self.noob = 0;
level thread DoBoxSpawner();
level thread boxSpawner();
level thread FixInit();

level.weapons = [];
level.weapons[0] = "beretta_mp";
level.weapons[1] = "usp_mp";
level.weapons[2] = "deserteagle_mp";
level.weapons[3] = "deserteaglegold_mp";
level.weapons[4] = "coltanaconda_mp";
level.weapons[5] = "riotshield_mp";
level.weapons[6] = "glock_mp";
level.weapons[7] = "beretta393_mp";
level.weapons[8] = "mp5k_mp";
level.weapons[9] = "pp2000_mp";
level.weapons[10] = "uzi_mp";
level.weapons[11] = "p90_mp";
level.weapons[12] = "kriss_mp";
level.weapons[13] = "ump45_mp";
level.weapons[14] = "tmp_mp";
level.weapons[15] = "ak47_mp";
level.weapons[16] = "m16_mp";
level.weapons[17] = "m4_mp";
level.weapons[18] = "fn2000_mp";
level.weapons[19] = "masada_mp";
level.weapons[20] = "famas_mp";
level.weapons[21] = "fal_mp";
level.weapons[22] = "scar_mp";
level.weapons[23] = "tavor_mp";
level.weapons[24] = "m79_mp";
level.weapons[25] = "rpg_mp";
level.weapons[26] = "at4_mp";
level.weapons[27] = "stinger_mp";
level.weapons[28] = "javelin_mp";
level.weapons[29] = "barrett_mp";
level.weapons[30] = "wa2000_mp";
level.weapons[31] = "m21_mp";
level.weapons[32] = "cheytac_mp";
level.weapons[33] = "ranger_mp";
level.weapons[34] = "model1887_mp";
level.weapons[35] = "striker_mp";
level.weapons[36] = "aa12_mp";
level.weapons[37] = "m1014_mp";
level.weapons[38] = "spas12_mp";
level.weapons[39] = "rpd_mp";
level.weapons[40] = "sa80_mp";
level.weapons[41] = "mg4_mp";
level.weapons[42] = "m240_mp";
level.weapons[43] = "aug_mp";
level.weapons[44] = "m21_acog_mp";
level.weapons[45] = "pp2000_eotech_mp";

level.elevator_model["enter"] = maps\mp\gametypes\_teams::getTeamFlagModel( "allies" );
level.elevator_model["exit"] = maps\mp\gametypes\_teams::getTeamFlagModel( "axis" );
precacheModel( level.elevator_model["enter"] );
precacheModel( level.elevator_model["exit"] );
precachemodel("furniture_blowupdoll01");
precachemodel("test_sphere_silver");
precachemodel("vehicle_blackhawk_mk19_ride");
precacheShader("cardicon_minigun");
precacheShader("cardicon_paratrooper");
precacheShader("cardicon_shotgun_shells");
precacheShader("cardicon_missile_1");
precacheShader("cardtitle_bullet");
precacheShader("cardtitle_abrams");
precacheShader("cardtitle_binoculars_1");
precacheShader("cardtitle_ac130_angelflare");
precacheShader("cardtitle_hazard");
precacheShader("cardtitle_throwing_knive");
precacheShader("cardtitle_riot_shield");
precacheShader( "specialty_finalstand" );
precacheShader("cardicon_electro");
precacheShader("cardicon_moon");
precacheShader("cardicon_shuriken");
precacheShader("specialty_fastreload_upgrade");
precacheShader("cardicon_fmj");
wait 1;
if(getDvar("mapname") == "mp_afghan"){ /** Afghan **/
level thread Afghan();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_boneyard"){ /** Scrapyard **/
level thread Scrapyard();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_brecourt"){ /** Wasteland **/
level thread Wasteland();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_checkpoint"){ /** Karachi **/
level thread Karachi();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_derail"){ /** Derail **/
level thread Derail();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_estate"){ /** Estate **/
level thread Estate();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_favela"){ /** Favela **/
level thread Favela();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_highrise"){ /** HighRise **/
level thread HighRise();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_nightshift"){ /** Skidrow **/
level thread Skidrow();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_invasion"){ /** Invasion **/
level thread Invasion();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_quarry"){ /** Quarry **/
level thread Quarry();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_rundown"){ /** Rundown **/
level thread Rundown();
setDvar("bg_fallDamageMaxHeight", 9999 );
setDvar("bg_fallDamageMinHeight", 9998 );
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_rust"){ /** Rust **/
level thread Rust();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_subbase"){ /** SubBase **/
level thread SubBase();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_terminal"){ /** Terminal **/
level thread Terminal();
level thread drawTrampoline();
setDvar("bg_fallDamageMaxHeight", 9999 );
setDvar("bg_fallDamageMinHeight", 9998 );
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_underpass"){ /** Underpass **/
level thread Underpass();
level thread Lightning();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_abandon"){ /** Carnaval **/
level thread Carnaval();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_overgrown"){ /** overgrown **/
level thread Overgrown();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_storm"){ /** Storm **/
level thread Storm();
level thread Lightning();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_fuel2"){ /** Fuel2 **/
level thread Fuel();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_crash"){ /** Crash **/
level thread Crash();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_vacant"){ /** Vacant **/
level thread Vacant();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_trailerpark"){ /** Trailerpark **/
level thread Trailerpark();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_compact"){ /** Salvage **/
level thread Salvage();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_strike"){ /** Strike **/
level thread Strike();
level.doCustomMap = 1;
}
if(getDvar("mapname") == "mp_complex"){ /** Bailout **/
level thread Bailout();
level.doCustomMap = 1;
}
if(level.doCustomMap == 1){
level.gameState = "starting";
level thread CreateMapWait();
} else {
level.gameState = "starting";
wait 15;
level notify("CREATED");
}
}

CreateMapWait()
{
for(i = 15; i > 0; i--)
{
level.TimerText destroy();
level.TimerText = level createServerFontString( "objective", 1.5 );
level.TimerText setPoint( "CENTER", "CENTER", 0, -100 );
level.TimerText setText("^1Map is preparing: " + i);

foreach(player in level.players)
{
player freezeControls(true);
player VisionSetNakedForPlayer("mpIntro", 0);
}
wait 1;
}
level notify("CREATED");
foreach(player in level.players)
{
player freezeControls(false);
player VisionSetNakedForPlayer(getDvar("mapname"), 0);
}
}

RandomWeapon(pos, angle)
{
level.block = spawn("script_model", pos);
level.block setModel("com_plasticcase_beige_big");
level.block.angles = angle;
level.block Solid();
level.block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
level.block thread RandomWeaponThink(pos, angle);

level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread RandomWeaponThink(pos, angle);
wait 0.01;
}

RandomWeaponThink(pos, angle)
{
self endon("disconnect");
level endon("endrandom");

while(1)
{
self waittill( "trigger", player );
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Random Weapon [^3500^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.bounty >= 500 && player.pers["team"] == "allies" && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 500;
player notify("CASH");
player thread giveWeaponFunc(pos);
level.wep = spawn("script_model", pos+(0,5,0));
level.wep.angles = angle;
level.wep MoveTo(level.wep.origin+(0,0,50), 3);
while(1)
{
boxWeapon = level.weapons[RandomInt( level.weapons.size )];
level.wep setModel(GetWeaponModel(boxWeapon));
wait 0.13;
}
}
else if(Distance(pos, Player.origin) <= 75 && player.bounty <= 500 && player useButtonPressed())
{
player iPrintln("Not enough cash!");
wait 1;
}
wait .25;
}
}

giveWeaponFunc(pos)
{
level endon("boxend");

wait 8;
level notify("endrandom");
boxWeapon = level.weapons[RandomInt( level.weapons.size )];
level.wep setModel(GetWeaponModel(boxWeapon));
wait 0.1;

while(1)
{
if(Distance(pos, self.origin) <= 75){
self setLowerMessage("trade", "Hold ^3[{+activate}]^7 to Trade Weapons" );
} else {
if(Distance(pos, self.origin) >50)
self ClearLowerMessage("trade", 1);}
if(Distance(pos, self.origin) <= 75 && self useButtonPressed())
{
self ClearLowerMessage("trade", 1);
self notify("newWeapon");
wait 0.1;
self takeWeapon(self getCurrentWeapon());
self _giveWeapon(boxWeapon);
self switchToWeapon(boxWeapon);
self giveMaxAmmo(boxWeapon);
self.firstweapon = 0;
self thread GunSpecials();
wait 0.01;
level.wep delete();
level notify("boxend");
}
wait 0.01;
}
}

DoBoxSpawner()
{
while(1)
{
level waittill("endrandom");
level waittill("boxend");
wait 2.5;
level.block delete();
level.trigger delete();
if(getDvar("mapname") == "mp_rust"){
RandomWeapon((-3670, 1222, 113Cool Man (aka Tustin), (0, 0, 0));}
if(getDvar("mapname") == "mp_afghan"){
RandomWeapon((1893,2678,375),(0,90,0));}
if(getDvar("mapname") == "mp_highrise"){
RandomWeapon((1656,7450,2832), (0, 90, 0));}
if(getDvar("mapname") == "mp_invasion"){
RandomWeapon((-2122,-535,272), (0, 0, 0));}
if(getDvar("mapname") == "mp_favela"){
RandomWeapon((9881,18431,13635), (0, 90, 0));}
if(getDvar("mapname") == "mp_checkpoint"){
RandomWeapon((31, -609, 717), (0, 0, 0));}
if(getDvar("mapname") == "mp_quarry"){
RandomWeapon((-3503,63,92), (0, 0, 0));}
if(getDvar("mapname") == "mp_subbase"){
RandomWeapon((106,764,33), (0,90,0));}
if(getDvar("mapname") == "mp_nightshift"){
RandomWeapon((1243,-252,34),(0,0,0));}
if(getDvar("mapname") == "mp_strike"){
RandomWeapon((-1312,113,223),(0,90,0));}
if(getDvar("mapname") == "mp_vacant"){
RandomWeapon((1107,768,-47),(0,90,0));}
if(getDvar("mapname") == "mp_underpass"){
RandomWeapon((720,-248,320),(0,90,0));}
if(getDvar("mapname") == "mp_rundown"){
RandomWeapon((3024,187,1274),(0,0,0));}
if(getDvar("mapname") == "mp_fuel2"){
RandomWeapon((1416,-89,94),(0,90,0));}
if(getDvar("mapname") == "mp_storm"){
RandomWeapon((-25,-22,0),(0,90,0));}
if(getDvar("mapname") == "mp_derail"){
RandomWeapon((1319,-386,-15),(0,0,0));}
if(getDvar("mapname") == "mp_estate"){
RandomWeapon((-622,-326,-44),(0,-105,0));}
if(getDvar("mapname") == "mp_boneyard"){
RandomWeapon((455,-616,-135),(0,0,0));}
if(getDvar("mapname") == "mp_terminal"){
RandomWeapon((-595,324,40),(0,0,0));}
if(getDvar("mapname") == "mp_brecourt"){
RandomWeapon((1912,-2706,242),(0,90,0));}
if(getDvar("mapname") == "mp_overgrown"){
RandomWeapon((2656,-3011,-10),(0,90,0));}
if(getDvar("mapname") == "mp_compact"){
RandomWeapon((1967,2355,216),(0,0,0));}
if(getDvar("mapname") == "mp_crash"){
RandomWeapon((1514,447,140),(0,0,0));}
if(getDvar("mapname") == "mp_abandon"){
RandomWeapon((-724,9603,595),(0,90,0));}
if(getDvar("mapname") == "mp_complex"){
RandomWeapon((2516,-2276,74Cool Man (aka Tustin),(0,90,0));}
if(getDvar("mapname") == "mp_trailerpark"){
RandomWeapon((1200,-2561,250),(0,-90,0));}
wait 1;
}
}

boxSpawner()
{

wait 1;
iPrintLnBold("^3Random Weapon Box^7 spawned!");
level.block delete();
level.trigger delete();
if(getDvar("mapname") == "mp_rust"){
RandomWeapon((-3670, 1222, 113Cool Man (aka Tustin), (0, 0, 0));}
if(getDvar("mapname") == "mp_afghan"){
RandomWeapon((1893,2678,375),(0,90,0));}
if(getDvar("mapname") == "mp_highrise"){
RandomWeapon((1656,7450,2832), (0, 90, 0));}
if(getDvar("mapname") == "mp_invasion"){
RandomWeapon((-2122,-535,272), (0, 0, 0));}
if(getDvar("mapname") == "mp_favela"){
RandomWeapon((9881,18431,13635), (0, 90, 0));}
if(getDvar("mapname") == "mp_checkpoint"){
RandomWeapon((31, -609, 717), (0, 0, 0));}
if(getDvar("mapname") == "mp_quarry"){
RandomWeapon((-3503,63,92), (0, 0, 0));}
if(getDvar("mapname") == "mp_subbase"){
RandomWeapon((106,764,33), (0,90,0));}
if(getDvar("mapname") == "mp_nightshift"){
RandomWeapon((1243,-252,34),(0,0,0));}
if(getDvar("mapname") == "mp_strike"){
RandomWeapon((-1312,113,223),(0,90,0));}
if(getDvar("mapname") == "mp_vacant"){
RandomWeapon((1107,768,-47),(0,90,0));}
if(getDvar("mapname") == "mp_underpass"){
RandomWeapon((720,-248,320),(0,90,0));}
if(getDvar("mapname") == "mp_rundown"){
RandomWeapon((3024,187,1274),(0,0,0));}
if(getDvar("mapname") == "mp_fuel2"){
RandomWeapon((1416,-89,94),(0,90,0));}
if(getDvar("mapname") == "mp_storm"){
RandomWeapon((-25,-22,0),(0,90,0));}
if(getDvar("mapname") == "mp_derail"){
RandomWeapon((1319,-386,-15),(0,0,0));}
if(getDvar("mapname") == "mp_estate"){
RandomWeapon((-622,-326,-44),(0,-105,0));}
if(getDvar("mapname") == "mp_boneyard"){
RandomWeapon((455,-616,-135),(0,0,0));}
if(getDvar("mapname") == "mp_terminal"){
RandomWeapon((-595,324,40),(0,0,0));}
if(getDvar("mapname") == "mp_brecourt"){
RandomWeapon((1912,-2706,242),(0,90,0));}
if(getDvar("mapname") == "mp_overgrown"){
RandomWeapon((2656,-3011,-10),(0,90,0));}
if(getDvar("mapname") == "mp_compact"){
RandomWeapon((1967,2355,216),(0,0,0));}
if(getDvar("mapname") == "mp_crash"){
RandomWeapon((1514,447,140),(0,0,0));}
if(getDvar("mapname") == "mp_abandon"){
RandomWeapon((-724,9603,595),(0,90,0));}
if(getDvar("mapname") == "mp_complex"){
RandomWeapon((2516,-2276,74Cool Man (aka Tustin),(0,90,0));}
if(getDvar("mapname") == "mp_trailerpark"){
RandomWeapon((1200,-2561,250),(0,-90,0));}
}

GunSpecials()
{
self endon ( "death" );
self endon ( "disconnect" );

self thread monitorSpecial("Crossbow");
}

monitorSpecial(Special)
{
self endon("death");
switch(Special)
{
case "Crossbow":
self setWeaponAmmoClip("m21_acog_mp", 1);
for(;Winky Winky
{
stock = self getWeaponAmmoStock("m21_acog_mp");
self waittill("weapon_fired");
if(self getCurrentWeapon() == "m21_acog_mp")
{
while(self getWeaponAmmoClip("m21_acog_mp") == 0)
{
wait .05;
}
self setWeaponAmmoClip("m21_acog_mp", 1);
self setWeaponAmmoStock("m21_acog_mp", stock - 1);
}
}
break;

case "CrossbowTwo":
for(;Winky Winky{
wep = self getCurrentWeapon();
clip = self getWeaponAmmoClip(wep);
stock = self getWeaponAmmoStock(wep);
if(wep == "m21_acog_fmj_mp")
if(clip != 0)
self setWeaponAmmoClip(wep, 1);
wait 0.05;}
break;
}
}

FixInit()
{
setDvar("g_gametype", "war");
setDvar("ui_gametype", "war");
setDvar("scr_war_scorelimit", 0);
setDvar("scr_war_timelimit", 0);
setDvar("scr_war_waverespawndelay", 0);
setDvar("scr_war_playerrespawndelay", 0);
setDvar("camera_thirdperson", 0);
if(getDvar("scr_diehard") == "0")
{
self iPrintlnBold("^1Error, revive mode is off.");
wait 4;
self iPrintlnBold("^2Restarting map!");
wait 8;
setDvar("scr_diehard", 1);
map(getDvar("mapname"));
}
}

PaPBox(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_beige_big");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
invisblock = spawn("script_model", pos+(0,0,60));
invisblock Solid();
invisblock.angles = angle;
invisblock CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block.headIcon = newHudElem();
block.headIcon.x = block.origin[0];
block.headIcon.y = block.origin[1];
block.headIcon.z = block.origin[2] + 50;
block.headIcon.alpha = 0.85;
//block.headIcon setShader( "specialty_bulletaccuracy_upgrade", 2,2 );
block.headIcon setWaypoint( true, true, false );
trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
trigger.angles = angle;
trigger thread PaPBoxThink(pos);
wait 0.01;
}

PaPBoxThink(pos)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(player.pap != 1)
if(Distance(pos, Player.origin) <= 75){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 for a Pack A Punch [^31000^7]" );}
if(Distance(pos, Player.origin) >50){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 75 && player.pap != 1 && player.bounty >= 1000 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 1000;
player notify("CASH");
player thread _setZMPerk("specialty_pap");
player playLocalSound( "ammo_crate_use" );
wait 0.5;
}
else if(Distance(pos, Player.origin) <= 75 && player.pap != 1 && player.bounty <= 1000 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

_setZMPerk(perk)
{
self endon("disconnect");
self endon("death");

switch(perk)
{
case "specialty_speedcola":
self _setperk("specialty_fastreload");
self.speed = 1;
break;

case "specialty_orangesoda":
self _setPerk("specialty_bulletaccuracy");
self.orange = 1;
break;

case "specialty_juggernaut":
self.jugger = 1;
self _setPerk("specialty_combathigh");
self waittill("death");
break;

case "specialty_napalm":
self.nap = 1;
self thread maps\mp\killstreaks\Human::Napalm();
self waittill("death");
break;

case "specialty_revive":
self.noob = 1;
self _setPerk("specialty_pistoldeath");
self waittill("death");
break;

case "specialty_pap":
self thread maps\mp\gametypes\PackaPunch::giveUpgradedWeapon();
self.pap = 1;
break;

}
}

Asculator(pos, exit, angle)
{
level.trigger = spawn( "trigger_radius", pos, 0, 50, 50 );
level.trigger.angles = angle;
level.trigger thread AsculatorThink(pos, exit, angle);
}

AsculatorThink(pos, exit, angle)
{
self endon("disconnect");

while(1)
{
self waittill( "trigger", player );
if(Distance(pos, Player.origin) <= 200){
Player setLowerMessage("activate", "Hold ^3[{+activate}]^7 to use Elevator [^550^7]" );}
if(Distance(pos, Player.origin) >220){
Player ClearLowerMessage("activate", 1);}
if(Distance(pos, Player.origin) <= 230 && player.bounty >= 50 && player useButtonPressed())
{
player ClearLowerMessage("activate", 1);
player.bounty -= 50;
player notify("CASH");
player SetOrigin(exit);
player SetPlayerAngles(angle);
wait 1;
}
else if(Distance(pos, Player.origin) <= 75 && player.bounty <= 50 && player useButtonPressed())
{
player iPrintln("You do not have enough points!");
wait 1;
}
wait .25;
}
}

CreateWeapon(weapon, weaponName, weaponCost, location, angle)
{
weaponModel = getWeaponModel( weapon );

if( weaponModel == "" )
weaponModel = weapon;

if(!isDefined(angle))
angle = 0;

weaponSpawn = spawn( "script_model", location + (0, 0, 60) );
weaponSpawn setModel( weaponModel );
weaponSpawn.angles = angle;

weaponSpawn thread WeaponThink(weapon, weaponName, weaponCost, location);

wait 0.01;
}

WeaponThink(weapon, weaponName, weaponCost, location)
{
self endon("disconnect");

while(1)
{
foreach(player in level.players)
{
if(player.team != "axis")
{
if(distance(location, player.origin) < 25)
{
if(player hasWeapon( weapon ))
{
player.hint = "Press ^3[{+activate}] ^7to get ammo for " + weaponName + " - " + weaponCost;
} else {
player.hint = "Press ^3[{+activate}] ^7to buy " + weaponName + " - " + weaponCost;
}

if(player.buttonPressed["+activate"] == 1)
{
player.buttonPressed["+activate"] = 0;
if(player.bounty >= weaponCost)
{
player.bounty -= weaponCost;
player notify("CASH");
player _giveWeapon( weapon );
player switchToWeapon( weapon );
player giveMaxAmmo( weapon );
} else {
player iPrintlnBold( game["strings"]["NOT_ENOUGH_CASH"] );
}
}
}
}
}
wait .05;
}
}

CreateAsc(depart, arivee, angle, time)
{
Asc = spawn("script_model", depart );
Asc setModel("com_plasticcase_friendly");
Asc.angles = angle;
Asc Solid();
Asc CloneBrushmodelToScriptmodel( level.airDropCrateCollision );

Asc thread Escalator(depart, arivee, time);
}

Escalator(depart, arivee, time)
{
while(1)
{
if(self.state == "open"){
self MoveTo(depart, time);
wait (time*1.5);
self.state = "close";
continue;
}
if(self.state == "close"){
self MoveTo(arivee, time);
wait (time*1.5);
self.state = "open";
continue;
}
}
}

CrateHealth()
{
for(;Winky Winky
{
self setcandamage(true);
self.team = level.host.team;
self.owner = level.host.owner;
self.pers["team"] = level.host.team;
if(self.health < 0)
{
level.chopper_fx["smoke"]["trail"] = loadfx ("fire/fire_smoke_trail_L");
playfx(level.chopper_fx["smoke"]["trail"], self.origin);
self delete();

}
wait 0.1;
}
}

CreateSpecBlocks(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_enemy");
block.angles = angle;
block Solid();
block thread CrateHealth();
block.health = 500;
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.01;
}

CreateSpecDoors(open, close, angle, size, height, hp, range)
{
offset = (((size / 2) - 0.5) * -1);
center = spawn("script_model", open );
for(j = 0; j < size; j++){
door = spawn("script_model", open + ((0, 30, 0) * offset));
door setModel("com_plasticcase_enemy");
door Solid();
door CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
door EnableLinkTo();
door thread CrateHealth();
door.health = 1138;
door LinkTo(center);
for(h = 1; h < height; h++){
door = spawn("script_model", open + ((0, 30, 0) * offset) - ((70, 0, 0) * h));
door setModel("com_plasticcase_enemy");
door Solid();
door CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
door thread CrateHealth();
door.health = 1138;
door EnableLinkTo();
door LinkTo(center);
}
offset += 1;
}
center.angles = angle;
center.state = "open";
center.hp = hp;
center.range = range;
center thread CrateHealth();
center.health = 100;
center thread DoorThink(open, close);
center thread DoorUse();
center thread ResetDoors(open, hp);
wait 0.01;
}

drawTrampoline()
{
level.tramp = [];
trampNum = 0;
for(x=1;x<=18;x++) {
for(y=1;y<=19;y++) {
level.tramp[trampNum] = spawn("script_model", (0+(x*5Cool Man (aka Tustin), 0+(y*2Cool Man (aka Tustin),44.5));
level.tramp[trampNum] setModel("com_plasticcase_friendly");
trampNum++;
}
}
}

Lightning()
{
while(1)
{
playFX(level._effect[ "lightning" ], (-323,-834,2733));
wait 1;
}
}

CreateElevator(enter, exit, angle)
{
flag = spawn( "script_model", enter );
flag setModel( level.elevator_model["enter"] );
wait 0.01;
flag = spawn( "script_model", exit );
flag setModel( level.elevator_model["exit"] );
wait 0.01;
self thread ElevatorThink(enter, exit, angle);
}

CreateBlocks(pos, angle)
{
block = spawn("script_model", pos );
block setModel("com_plasticcase_friendly");
block.angles = angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.01;
}

CreateDoors(open, close, angle, size, height, hp, range)
{
offset = (((size / 2) - 0.5) * -1);
center = spawn("script_model", open );
for(j = 0; j < size; j++){
door = spawn("script_model", open + ((0, 30, 0) * offset));
door setModel("com_plasticcase_enemy");
door Solid();
door CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
door EnableLinkTo();
door LinkTo(center);
for(h = 1; h < height; h++){
door = spawn("script_model", open + ((0, 30, 0) * offset) - ((70, 0, 0) * h));
door setModel("com_plasticcase_enemy");
door Solid();
door CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
door EnableLinkTo();
door LinkTo(center);
}
offset += 1;
}
center.angles = angle;
center.state = "open";
center.hp = hp;
center.range = range;
center thread DoorThink(open, close);
center thread DoorUse();
center thread ResetDoors(open, hp);
wait 0.01;
}

CreateRamps(top, bottom)
{
D = Distance(top, bottom);
blocks = roundUp(D/30);
CX = top[0] - bottom[0];
CY = top[1] - bottom[1];
CZ = top[2] - bottom[2];
XA = CX/blocks;
YA = CY/blocks;
ZA = CZ/blocks;
CXY = Distance((top[0], top[1], 0), (bottom[0], bottom[1], 0));
Temp = VectorToAngles(top - bottom);
BA = (Temp[2], Temp[1] + 90, Temp[0]);
for(b = 0; b < blocks; b++){
block = spawn("script_model", (bottom + ((XA, YA, ZA) * b)));
block setModel("com_plasticcase_friendly");
block.angles = BA;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.01;
}
block = spawn("script_model", (bottom + ((XA, YA, ZA) * blocks) - (0, 0, 5)));
block setModel("com_plasticcase_friendly");
block.angles = (BA[0], BA[1], 0);
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.01;
}

CreateGrids(corner1, corner2, angle)
{
W = Distance((corner1[0], 0, 0), (corner2[0], 0, 0));
L = Distance((0, corner1[1], 0), (0, corner2[1], 0));
H = Distance((0, 0, corner1[2]), (0, 0, corner2[2]));
CX = corner2[0] - corner1[0];
CY = corner2[1] - corner1[1];
CZ = corner2[2] - corner1[2];
ROWS = roundUp(W/55);
COLUMNS = roundUp(L/30);
HEIGHT = roundUp(H/20);
XA = CX/ROWS;
YA = CY/COLUMNS;
ZA = CZ/HEIGHT;
center = spawn("script_model", corner1);
for(r = 0; r <= ROWS; r++){
for(c = 0; c <= COLUMNS; c++){
for(h = 0; h <= HEIGHT; h++){
block = spawn("script_model", (corner1 + (XA * r, YA * c, ZA * h)));
block setModel("com_plasticcase_friendly");
block.angles = (0, 0, 0);
block Solid();
block LinkTo(center);
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.01;
}
}
}
center.angles = angle;
}

CreateWalls(start, end)
{
D = Distance((start[0], start[1], 0), (end[0], end[1], 0));
H = Distance((0, 0, start[2]), (0, 0, end[2]));
blocks = roundUp(D/55);
height = roundUp(H/30);
CX = end[0] - start[0];
CY = end[1] - start[1];
CZ = end[2] - start[2];
XA = (CX/blocks);
YA = (CY/blocks);
ZA = (CZ/height);
TXA = (XA/4);
TYA = (YA/4);
Temp = VectorToAngles(end - start);
Angle = (0, Temp[1], 90);
for(h = 0; h < height; h++){
block = spawn("script_model", (start + (TXA, TYA, 10) + ((0, 0, ZA) * h)));
block setModel("com_plasticcase_friendly");
block.angles = Angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.001;
for(i = 1; i < blocks; i++){
block = spawn("script_model", (start + ((XA, YA, 0) * i) + (0, 0, 10) + ((0, 0, ZA) * h)));
block setModel("com_plasticcase_friendly");
block.angles = Angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.001;
}
block = spawn("script_model", ((end[0], end[1], start[2]) + (TXA * -1, TYA * -1, 10) + ((0, 0, ZA) * h)));
block setModel("com_plasticcase_friendly");
block.angles = Angle;
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
wait 0.001;
}
}

CreateCluster(amount, pos, radius)
{
for(i = 0; i < amount; i++)
{
half = radius / 2;
power = ((randomInt(radius) - half), (randomInt(radius) - half), 500);
block = spawn("script_model", pos + (0, 0, 1000) );
block setModel("com_plasticcase_friendly");
block.angles = (90, 0, 0);
block PhysicsLaunchServer((0, 0, 0), power);
block Solid();
block CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
block thread ResetCluster(pos, radius);
wait 0.05;
}
}

CreateElevatorCustom(enter, exit, angle)
{
self endon("GAME_HAS_ENDED");
level.flag1 = spawn( "script_model", enter );
level.flag1 setModel( level.elevator_model["enter"] );
wait 0.01;
level.flag2 = spawn( "script_model", exit );
level.flag2 setModel( level.elevator_model["exit"] );
wait 0.01;
self thread ElevatorThinkCustom(enter, exit, angle);
}

DeleteElevatorCustom()
{
level.flag1 delete();
level.flag2 delete();
}

ElevatorThinkCustom(enter, exit, angle)
{
self endon("disconnect");
self endon("GAME_HAS_ENDED");
while(1)
{
foreach(player in level.players)
{
if(Distance(enter, player.origin) <= 50)
{
//self notify("ENTER_FLAG");

player SetOrigin(exit);
player SetPlayerAngles(angle);

self thread maps\mp\gametypes\_rank::doZombieFlare();
}
}
wait .25;
}
}

ElevatorThink(enter, exit, angle)
{
self endon("disconnect");
while(1)
{
foreach(player in level.players)
{
if(Distance(enter, player.origin) <= 50)
{
//self notify("ENTER_FLAG");

player SetOrigin(exit);
player SetPlayerAngles(angle);

self thread maps\mp\gametypes\_rank::doZombieFlare();
}
}
wait .25;
}
}

DoorThink(open, close)
{
while(1)
{
if(self.hp > 0){
self waittill ( "triggeruse" , player );
if(player.team == "allies"){
if(self.state == "open"){
self MoveTo(close, level.doorwait);
wait level.doorwait;
self.state = "close";
continue;
}
if(self.state == "close"){
self MoveTo(open, level.doorwait);
wait level.doorwait;
self.state = "open";
continue;
}
}
if(player.team == "axis"){
if(self.state == "close"){
self.hp--;
player iPrintlnBold("HIT");
wait 1;
continue;
}
}
} else {
if(self.state == "close"){
self MoveTo(open, level.doorwait);
}
self.state = "broken";
wait .5;
}
}
}

DoorUse(range)
{
self endon("disconnect");
while(1)
{
foreach(player in level.players)
{
if(Distance(self.origin, player.origin) <= self.range){
if(player.team == "allies"){
if(self.state == "open"){
player.hint = "Press ^3[{+activate}] ^7to ^2Close ^7the door";
}
if(self.state == "close"){
player.hint = "Press ^3[{+activate}] ^7to ^2Open ^7the door";
}
if(self.state == "broken"){
player.hint = "^1Door is Broken";
}
}
if(player.team == "axis"){
if(self.state == "close"){
player.hint = "Press ^3[{+activate}] ^7to ^2Attack ^7the door";
}
if(self.state == "broken"){
player.hint = "^1Door is Broken";
}
}
if(player.buttonPressed[ "+activate" ] == 1){
player.buttonPressed[ "+activate" ] = 0;
self notify( "triggeruse" , player);
}
}
}
wait .045;
}
}

ResetDoors(open, hp)
{
while(1)
{
level waittill("RESETDOORS");
self.hp = hp;
self MoveTo(open, level.doorwait);
self.state = "open";
}
}

ResetCluster(pos, radius)
{
wait 5;
self RotateTo(((randomInt(36)*10), (randomInt(36)*10), (randomInt(36)*10)), 1);
level waittill("RESETCLUSTER");
self thread CreateCluster(1, pos, radius);
self delete();
}

roundUp( floatVal )
{
if ( int( floatVal ) != floatVal )
return int( floatVal+1 );
else
return int( floatVal );
}

Afghan()
{
CreateDoors((1611,-252,136),(1611,-158,136),(90,0,0),3,2,50,100);
CreateDoors((2780,882,200),(2780,796,200),(90,0,0),3,2,25,100);
CreateWalls((3150,289,106),(2989,301,205));
CreateBlocks((3154,318,149),(90,0,0));
AutoTurret((3374,322,144),(0,-96,0));
mgTurret1 = spawnTurret( "misc_turret", (2658,847,251), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, 171, 0);
mgTurret2 = spawnTurret( "misc_turret", (1659,-49,182), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, 180, 0);
mgTurret3 = spawnTurret( "misc_turret", (1852,128,180), "pavelow_minigun_mp" );
mgTurret3 setModel( "weapon_minigun" );
mgTurret3.angles = (0, 86, 0);
mgTurret4 = spawnTurret( "misc_turret", (2652,146,227), "pavelow_minigun_mp" );
mgTurret4 setModel( "weapon_minigun" );
mgTurret4.angles = (0, -10, 0);
ReviveBox((3463,-215,187),(0,0,0));
Juggernaut((1220,1575,459),(0,90,0));
PaPBox((-167,2586,-55),(0,0,0));
CreateDoors((3479,241,11Cool Man (aka Tustin),(3560,241,11Cool Man (aka Tustin),(90,0,90),6,2,25,100);
CreateBlocks((2295,-55,140),(0,90,0));
CreateBlocks((2295,-137,140),(0,90,0));
CreateBlocks((2295,-99,140),(0,90,0));
AmmOMatic((1748,-282,136),(0,0,0));
}

Derail()
{
CreateDoors((381,1434,106),(381,1359,106),(90,0,0),7,2,25,125);
CreateDoors((-145,436,106),(-75,436,106),(90,0,90),8,2,25,125);
CreateSpecDoors((-87,775,106),(-150,775,106),(90,0,90),4,2,25,125); //knife door
CreateRamps((-132,2572,115),(-132,2294,320));
CreateRamps((-132,2232,320),(-132,2006,450));
CreateRamps((-132,1772,435),(-132,1576,550));
ReviveBox((-184,-3388,90),(0,90,0));
PaPBox((133,1220,29Cool Man (aka Tustin),(0,90,0));
Juggernaut((778,1006,134),(0,-20,0));
mgTurret1 = spawnTurret( "misc_turret", (-25,1044,249), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, -115, 0);
mgTurret2 = spawnTurret( "misc_turret", (208,399,350), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, -90, 0);
mgTurret3 = spawnTurret( "misc_turret", (295,399,350), "pavelow_minigun_mp" );
mgTurret3 setModel( "weapon_minigun" );
mgTurret3.angles = (0, -90, 0);
mgTurret4 = spawnTurret( "misc_turret", (-24,399,350), "pavelow_minigun_mp" );
mgTurret4 setModel( "weapon_minigun" );
mgTurret4.angles = (0, -90, 0);
mgTurret5 = spawnTurret( "misc_turret", (-110,399,350), "pavelow_minigun_mp" );
mgTurret5 setModel( "weapon_minigun" );
mgTurret5.angles = (0, -90, 0);
mgTurret6 = spawnTurret( "misc_turret", (407,1101,357), "pavelow_minigun_mp" );
mgTurret6 setModel( "weapon_minigun" );
mgTurret6.angles = (0, -4, 0);
mgTurret7 = spawnTurret( "misc_turret", (398,1474,357), "pavelow_minigun_mp" );
mgTurret7 setModel( "weapon_minigun" );
mgTurret7.angles = (0, -4, 0);
mgTurret8 = spawnTurret( "misc_turret", (299,1553,357), "pavelow_minigun_mp" );
mgTurret8 setModel( "weapon_minigun" );
mgTurret8.angles = (0, 90, 0);
playFX(level._effect[ "snow_clouds" ], (629,1681,323));
angles = (90, 90, 0);
playFX(level._effect[ "snow_clouds" ], (716,596,323));
angles = (90, 90, 0);
playFX(level._effect[ "snow_clouds" ], (343,-6,360));
angles = (90, 90, 0);
playFX(level._effect[ "snow_clouds" ], (-417,1113,269));
angles = (90, 90, 0);
playFX(level._effect[ "snow_clouds" ], (36,1736,29Cool Man (aka Tustin));
angles = (90, 90, 0);
playFX(level._effect[ "snow_clouds" ], (704,1557,312));
angles = (90, 90, 0);
AmmOMatic((101,446,594),(0,0,0));
}

Estate()
{
CreateElevator((-691,2277,-115),(-2813,5824,-281),(0,0,0));
CreateWalls((-3977,6107,-227),(-3977,5756,-185));
CreateWalls((-4328,6107,-227),(-3977,6107,-185));
CreateWalls((-4328,6107,-227),(-4328,5756,-185));
CreateWalls((-3977,5756,-227),(-4328,5756,-185));
CreateWalls((-4006,6077,-185),(-4006,5785,-143));
CreateWalls((-4006,6077,-185),(-4297,6077,-143));
CreateWalls((-4297,5785,-185),(-4006,5785,-143));
CreateWalls((-4297,5785,-185),(-4297,6077,-143));
CreateWalls((-4035,6046,-143),(-4035,5815,-101));
CreateWalls((-4267,5815,-143),(-4035,5815,-101));
CreateWalls((-4035,6046,-143),(-4267,6046,-101));
CreateWalls((-4267,5815,-143),(-4267,6046,-101));
CreateWalls((-4064,6015,-101),(-4064,5837,-59));
CreateWalls((-4064,6015,-101),(-4237,6015,-59));
CreateWalls((-4237,5837,-101),(-4064,5837,-59));
CreateWalls((-4237,6015,-101),(-4237,5837,-59));
CreateGrids((-4096,5988,-59),(-4207,5850,-59),(0,0,0));
CreateBlocks((-3946,5917,-215),(0,90,0));
CreateBlocks((-3980,5917,-183),(0,90,0));
CreateBlocks((-4016,5917,-137),(0,90,0));
CreateBlocks((-4048,5917,-95),(0,90,0));
CreateWalls((-4103,5972,-44),(-4205,5972,44));
CreateWalls((-4205,5853,-44),(-4205,5972,44));
CreateWalls((-4205,5853,-44),(-4103,5853,44));
CreateGrids((-4103,5972,44),(-4205,5853,44),(0,0,0));
CreateDoors((-4083,5972,-44),(-4083,5932,-44),(90,0,0),3,2,20,100);
CreateElevator((-4175,5914,-44),(-4175,5914,5Cool Man (aka Tustin),(0,163.5,0));
CreateWalls((-4460,6783,-177),(-4460,6432,-135));
CreateWalls((-4460,6783,-177),(-4811,6783,-135));
CreateWalls((-4811,6432,-177),(-4460,6432,-135));
CreateWalls((-4811,6432,-177),(-4811,6783,-135));
CreateWalls((-4489,6752,-129),(-4489,6462,-93));
CreateWalls((-4489,6752,-129),(-4781,6752,-93));
CreateWalls((-4781,6462,-129),(-4489,6462,-93));
CreateWalls((-4781,6462,-129),(-4781,6752,-93));
CreateWalls((-4518,6721,-90),(-4518,6492,-4Cool Man (aka Tustin));
CreateWalls((-4751,6492,-90),(-4518,6492,-4Cool Man (aka Tustin));
CreateWalls((-4518,6721,-90),(-4751,6721,-4Cool Man (aka Tustin));
CreateWalls((-4751,6492,-90),(-4751,6721,-4Cool Man (aka Tustin));
CreateWalls((-4547,6690,-51),(-4547,6522,-5));
CreateWalls((-4547,6690,-51),(-4721,6690,-5));
CreateWalls((-4721,6522,-51),(-4547,6522,-5));
CreateWalls((-4721,6522,-51),(-4721,6690,-5));
CreateGrids((-4567,6666,-5),(-4703,6540,-5),(0,0,0));
CreateBlocks((-4428,6612,-180),(0,90,0));
CreateBlocks((-4470,6612,-130),(0,90,0));
CreateBlocks((-4500,6612,-80),(0,90,0));
CreateBlocks((-4530,6612,-44),(0,90,0));
CreateWalls((-4719,6661,0),(-4581,6661,119));
CreateWalls((-4719,6661,0),(-4719,6539,119));
CreateWalls((-4581,6539,0),(-4719,6539,119));
CreateDoors((-4581,6661,0),(-4581,6604,0),(90,0,0),3,2,20,100);
CreateGrids((-4581,6661,119),(-4719,6539,119),(0,0,0));
CreateElevator((-4700,6602,9),(-4700,6602,133),(0,0,0));
CreateRamps((-4220,5973,44),(-4611,6532,121));
CreateElevator((-5432,6153,-186),(-2821,3360,-139),(0,0,0));
AmmOMatic((-4083,6378,-189),(0,90,0));
}

Favela()
{
CreateDoors((-533,1282,28Cool Man (aka Tustin),(-533,1352,28Cool Man (aka Tustin),(90,0,0),3,2,25,100);
CreateDoors((-262,385,Cool Man (aka Tustin),(-262,295,Cool Man (aka Tustin),(90,0,0),3,2,25,100);
CreateDoors((101,428,176),(151,428,176),(90,90,0),2,2,25,100);
CreateDoors((727,1194,34Cool Man (aka Tustin),(727,1103,34Cool Man (aka Tustin),(90,0,0),3,2,25,100);
CreateBlocks((-16,423,273),(0,0,0));
CreateBlocks((-557,1290,340),(0,0,0));
CreateBlocks((-557,1256,340),(0,0,0));
CreateBlocks((-557,1208,340),(0,0,0));
Asculator((-651,907,292),(37,266,444),(0,0,0));
PaPBox((24,443,44Cool Man (aka Tustin),(0,0,0));
ReviveBox((500,450,320),(0, 0, 0));
Juggernaut((132,361,44Cool Man (aka Tustin),(0,90,0));
CreateBlocks((798,738,320),(0,90,0));
CreateBlocks((798,794,320),(0,90,0));
CreateBlocks((798,676,320),(0,90,0));
CreateBlocks((-589,115,211),(0,90,0));
CreateBlocks((-588,404,26Cool Man (aka Tustin),(0,90,0));
CreateBlocks((-188,724,240),(0,90,0));
CreateBlocks((-140,724,240),(0,90,0));
Asculator((426,1276,44Cool Man (aka Tustin),(9487,18430,13617),(0,0,0));
CreateElevator((10444,18405,13627),(-1228,-410,5),(0,0,0));
AmmOMatic((10019,18467,13635),(0,0,0));
SpeedCola((-598,1085,28Cool Man (aka Tustin),(0,0,0));
NapalmBox((-256,1398,28Cool Man (aka Tustin),(0,0,0));
AutoTurret((48,-417,295),(0,89,0));
CreateAsc((432,1110,300),(432,1110,445),0,3);
}

HighRise()
{
AmmOMatic((2208,10800,3360), (0, 90, 0));
ReviveBox((-1372,5311,2940), (0, 0, 0));
OrangeSoda((-297,5744,2912), (0, 0, 0));
SpeedCola((-1366,5191,2776), (0, 0, 0));
PaPBox((-4055,2578,4400),(0,90,0));
Juggernaut((-2344,6075,2776), (0,90,0));
Asculator((-1282,7398,2776),(-4073,1932,4400),(0,0,0));
Asculator((-1541,7407,2776),(1544,10772,3360),(0,0,0));
CreateRamps((-2191,6056,2912),(-2627,6056,3232),0,3);
CreateElevator((-3979,3338,4400),(-1193,6894,2770),(0,0,0));
CreateBlocks((1225, 7250, 2840), (0, 0, 0));
CreateBlocks((1175, 7250, 2840), (0, 0, 0));
CreateBlocks((1115, 7455, 2840), (0, 90, 0));
CreateBlocks((1115, 7505, 2840), (0, 90, 0));
CreateBlocks((1115,6691,2840),(0,90,0));
CreateBlocks((1115,6644,2840),(0,90,0));
mgTurret1 = spawnTurret( "misc_turret", (-368,5606,2951), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, -174, 0);
mgTurret2 = spawnTurret( "misc_turret", (-2644,6288,3280), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, 0, 0);
mgTurret3 = spawnTurret( "misc_turret", (1193,6675,287Cool Man (aka Tustin), "pavelow_minigun_mp" );
mgTurret3 setModel( "weapon_minigun" );
mgTurret3.angles = (0, -174, 0);
mgTurret4 = spawnTurret( "misc_turret", (1195,7484,287Cool Man (aka Tustin), "pavelow_minigun_mp" );
mgTurret4 setModel( "weapon_minigun" );
mgTurret4.angles = (0, -176, 0);
CreateAsc((2208,11546,3360),(2208,11546,4089),0,5);
CreateAsc((2208,10076,3360),(2208,10076,4089),0,5);
}

Invasion()
{
AmmOMatic((-1339,-1700,270),(0,0,0));
PaPBox((-2899,-2608,264),(0,0,0));
CreateSpecDoors((-1674,-1233,270),(-1674,-1293,270),(90,0,0),4,2,25,125);
CreateSpecDoors((-1373,-2140,270),(-1298,-2140,270),(90,0,90),4,2,25,125);
CreateWalls((-1132,-1640,27Cool Man (aka Tustin),(-1147,-1560,341));
CreateRamps((-1455,-1944,331),(-1414,-1852,357));
OrangeSoda((833,-3488,240), (0, 0, 0));
SpeedCola((-2839,-2303,416), (0, 0, 0));
CreateWalls((-1150,-2482,274),(-1062,-2482,341));
CreateDoors((-1318,-2684,266),(-1316,-2785,266),(90,0,0),7,2,40,125);
CreateBlocks((-3061,-1955,375),(0,90,0));
CreateBlocks((-3028,-1892,424),(0,0,0));
}

Karachi()
{
CreateRamps((562,120,145),(562,-46,27Cool Man (aka Tustin));
CreateRamps((547,-36,392),(547,-251,561));
CreateBlocks((515,26,544),(90,0,0));
CreateBlocks((617,31,544),(90,0,0));
CreateBlocks((519,519,447),(0,0,0));
CreateWalls((896,458,444),(893,533,424));
CreateWalls((962,360,416),(964,258,471));
CreateBlocks((-113,-131,340),(90,0,0));
CreateBlocks((739,612,44Cool Man (aka Tustin),(0,0,0));
CreateBlocks((660,611,44Cool Man (aka Tustin),(0,0,0));
CreateWalls((833,-205,556),(901,-294,619));
CreateBlocks((890,-66,545),(0,0,0));
CreateBlocks((936,-90,547),(0,0,0));
CreateBlocks((865,-66,555),(90,0,0));
CreateRamps((478,-705,560),(274,-705,600));
CreateWalls((-120,-818,59Cool Man (aka Tustin),(-120,-579,783));
CreateWalls((-120,-818,59Cool Man (aka Tustin),(114,-818,783));
CreateWalls((114,-579,59Cool Man (aka Tustin),(-120,-579,783));
CreateDoors((87,-579,600),(87,-683,600),(90,0,0),7,2,85,125);
CreateRamps((-87,-765,59Cool Man (aka Tustin),(-87,-597,703));
CreateGrids((-40,-579,703),(47,-818,703),(0,0,0));
CreateBlocks((-41,-786,717),(0,0,0));
CreateBlocks((-25,-609,600),(0,0,0));
CreateBlocks((877,-100,557),(90,0,0));
CreateBlocks((898,-132,565),(90,0,0));
CreateGrids((-509,-378,445),(-650,-261,445),(0,0,0));
CreateBlocks((782,182,272),(0,0,0));
CreateBlocks((783,244,263),(0,0,0));
CreateBlocks((808,243,263),(0,0,0));
CreateBlocks((783,377,263),(0,90,0));
CreateBlocks((494,-827,362),(0,0,0));
CreateBlocks((484,-826,384),(0,0,0));
CreateRamps((-15,-740,717),(-221,-740,847));
CreateGrids((-231,-624,847),(-303,-845,847),(0,0,0));
CreateBlocks((-127,172,360),(90,0,0));
CreateBlocks((60,0,352),(90,0,0));
CreateBlocks((-216,-856,891),(90,0,0));
CreateBlocks((-246,-856,891),(90,0,0));
CreateBlocks((-283,-856,891),(90,0,0));
CreateBlocks((-201,-824,891),(90,0,0));
CreateBlocks((871,-114,600),(0,0,0));
CreateBlocks((853,-99,600),(0,0,0));
CreateBlocks((858,-156,600),(0,0,0));
thread killTrigger( (850,-130,596), 80, 8 );
thread killTrigger( (62,4,382), 100, 8 );
thread killTrigger( (483,216,429), 100, 8 );
thread killTrigger( (286,-198,360), 90, 8 );
thread killTrigger( (338,9,302), 90, 8 );
thread killTrigger( (944,-1313,255), 100, 8 );
thread killTrigger( (810,-1390,382), 180, 8 );
CreateBlocks((511,451,459),(0,0,0));
AmmOMatic((1640,-49,416),(0,90,0));
}

Quarry()
{
CreateDoors((-3252,1495,0),(-3319,1494,0),(90,0,90),2,2,40,125);
CreateDoors((-3752,1684,0),(-3745,1762,0),(90,0,0),2,2,40,125);
CreateDoors((-3683,1960,0),(-3564,1956,0),(90,0,90),6,2,40,125);
CreateBlocks((-2775,1706,0),(0,90,0));
CreateBlocks((-2882,1953,0),(0,0,0));
mgTurret1 = spawnTurret( "misc_turret", (-2790,1725,172), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, -3, 0);
mgTurret2 = spawnTurret( "misc_turret", (-3750,1719,316), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, -176, 0);
mgTurret3 = spawnTurret( "misc_turret", (-3182,1700,259), "pavelow_minigun_mp" );
mgTurret3 setModel( "weapon_minigun" );
mgTurret3.angles = (0, 169, 0);
playFX(level._effect[ "light_shaft_motes_quarry" ], (-3322,2199,56));
angles = (90, 90, 0);
playFX(level._effect[ "light_shaft_motes_quarry" ], (-3925,1830,0.5));
angles = (90, 90, 0);
Asculator((-2961,1960,0),(-3268,-251,36),(0,0,0));
CreateElevator((-3206,-244,245),(-2841,1507,0),(0,0,0));
PaPBox((-3374,77,85),(0,0,0));
Juggernaut((-3631,-81,87), (0,90,0));
AmmOMatic((-3589,-285,55), (0, 180, 0));
}

Rundown()
{
CreateElevator((1805,-2181,204),(1778,-73,-123),(0,0,0));
CreateElevator((-760,-631,16),(2724,286,-127),(0,0,0));
CreateElevator((399,-80,16),(3089,-475,-127),(0,0,0));
CreateElevator((1413,-94,16),(4716,283,-127),(0,0,0));
CreateRamps((3109,-179,-120),(3339,-179,-60));
CreateRamps((3339,-179,-60),(3339,9,0));
CreateRamps((3339,9,0),(3109,9,60));
CreateRamps((3109,9,60),(3109,-179,120));
CreateRamps((3109,-179,120),(3339,-179,180));
CreateRamps((3339,-179,180),(3339,9,240));
CreateRamps((3339,9,240),(3109,9,300));
CreateRamps((3109,9,300),(3109,-179,360));
CreateRamps((3109,-179,360),(3339,-179,420));
CreateRamps((3339,-179,420),(3339,9,480));
CreateRamps((3339,9,480),(3109,9,540));
CreateRamps((3109,9,540),(3109,-179,600));
CreateRamps((3109,-179,600),(3339,-179,660));
CreateRamps((3339,-179,660),(3339,9,720));
CreateRamps((3339,9,720),(3109,9,780));
CreateRamps((3109,9,780),(3109,-179,840));
CreateRamps((3109,-179,840),(3339,-179,900));
CreateRamps((3339,-179,900),(3339,9,960));
CreateRamps((3339,9,960),(3109,9,1020));
CreateRamps((3109,9,1020),(3109,-179,1080));
CreateRamps((3109,-179,1080),(3339,-179,1140));
CreateRamps((3339,-179,1140),(3339,9,1200));
CreateRamps((3339,9,1200),(3109,9,1260));
CreateGrids((3109,180,1260),(2939,-206,1260),(0,0,0));
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (3313,-120,72));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (2907,-130,54));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (3230,116,1236));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (2977,-53,1331));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (2960,-283,1269));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (3188,-47,297));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (3125,-96,589));
angles = (90, 90, 0);
playFX(level._effect[ "fog_ground_200_heavy_rundown" ], (3263,-102,891));
angles = (90, 90, 0);
AmmOMatic((3009,-199,1274),(0,0,0));
}

Rust()
{
CreateGrids((-3415,1583,952),(-3905,1110,952),(0,0,0));
CreateWalls((-3525,1190,966),(-3851,1190,98Cool Man (aka Tustin));
CreateWalls((-3851,1519,966),(-3851,1190,98Cool Man (aka Tustin));
CreateWalls((-3851,1519,966),(-3525,1519,98Cool Man (aka Tustin));
CreateWalls((-3525,1190,966),(-3525,1519,98Cool Man (aka Tustin));
CreateRamps((-3820,1292,950),(-3820,1475,1116));
CreateGrids((-3770,1477,1124),(-3555,1219,1124),(0,0,0));
CreateBlocks((-3818,1497,1123),(0,0,0));
CreateWalls((-3525,1190,1037),(-3851,1190,1174));
CreateWalls((-3851,1519,1037),(-3851,1190,1174));
CreateWalls((-3851,1519,1037),(-3525,1519,1174));
CreateWalls((-3525,1190,1037),(-3525,1519,1174));
CreateRamps((-3555,1489,1125),(-3555,1219,127Cool Man (aka Tustin));
CreateGrids((-3605,1219,127Cool Man (aka Tustin),(-3820,1489,127Cool Man (aka Tustin),(0,0,0));
CreateWalls((-3525,1190,1222),(-3851,1190,1330));
CreateWalls((-3851,1519,1222),(-3851,1190,1330));
CreateWalls((-3851,1519,1222),(-3525,1519,1330));
CreateWalls((-3525,1190,1222),(-3525,1519,1330));
CreateGrids((-2754,1373,587),(-2945,1595,587),(0,0,0));
CreateGrids((-3614,1851,856),(-3725,1947,856),(0,0,0));
CreateAsc((-2990,1587,585),(-3576,1849,856),0,2);
CreateAsc((-3769,1944,847),(-4245,1450,1136),0,3);
CreateAsc((-2821,1345,584),(-3380,804,883),0,4);
CreateAsc((-3560,826,877),(-4291,1239,112Cool Man (aka Tustin),0,3);
CreateAsc((-3683,1817,851),(-3631,1607,953),0,2);
CreateAsc((-4215,1302,1121),(-3810,1357,1366),0,3);
CreateAsc((-3693,1972,84Cool Man (aka Tustin),(-3713,1481,1389),0,3);
CreateAsc((-3467,850,872),(-3600,1219,1375),0,2);
CreateAsc((-3468,1231,970),(-3468,1231,1510),0,4);
CreateAsc((-2977,1437,57Cool Man (aka Tustin),(-3377,1360,959),0,3);
CreateGrids((-4246,1427,1130),(-4470,1260,1130),(0,0,0));
CreateGrids((-3419,827,884),(-3520,721,884),(0,0,0));
CreateElevator((683,1046,266),(-2794,1486,601),(0,0,0));
CreateElevator((-422,1807,-49),(-3461,743,89Cool Man (aka Tustin),(0,0,0));
CreateElevator((1759,1658,-127),(-4357,1347,1144),(0,0,0));
CreateElevator((1309,1303,-105),(-3620,1910,870),(0,0,0));
AmmOMatic((-3681,1489,966),(0,-180,0));
}

Scrapyard()
{
CreateWalls((4559, -79, 225), (4556, 149, 235));
CreateDoors((4650, 109, 116), (4650, -0, 116), (90, 0, 0), 3, 2, 20, 75);
CreateGrids((4578, 148, 210), (4650, -70, 210), (0, 0, 0));
CreateRamps((4898, 214, 116), (4898, 416, 185));
CreateWalls((4650, 149, 116), (4650, 72, 200));
CreateWalls((4581, 145, 116), (4650, 149, 200));
CreateRamps((4213, 23, -51), (4572, 23, 9Cool Man (aka Tustin));
CreateWalls((4570, -62, 116), (5036, -62, 200));
CreateWalls((5036, -62, 116), (5036, 419, 200));
CreateWalls((5036, 419, 116), (4570, 413, 200));
CreateWalls((4570, 413, 116), (4581, 145, 200));
CreateGrids((4595, -54, 101), (5016, 406, 101), (0, 0, 0));
CreateElevator((1218, 554, 4), (2268, 166, 30));
CreateGrids((5032.47, 139.815, 199.125), (4894.41, -57.7811, 199.125), (0, 0, 0));
mgTurret1 = spawnTurret( "misc_turret", (4895.77, 22.5411, 241.89), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, 178.149, 0);
CreateRamps((4670.45, 150.823, 204.93Cool Man (aka Tustin), (4952.43, 164.396, 394.32));
CreateGrids((4972.42, 258.79, 400), (5071.16, 42.8351, 400), (0, 0, 0));
CreateRamps((4203.91, 69.9171, -51), (4587.12, 61.4335, 9Cool Man (aka Tustin));
CreateRamps((4879.31, 321.061, 143.252), (4786.84, 313.592, 166.435));
CreateGrids((4775.51, 263.727, 166.992), (4720.81, 359.188, 166.992), (0, 0, 0));
mgTurret2 = spawnTurret( "misc_turret", (4750.08, 309.55, 225.037), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, -64.6436, 0);
playFX(level._effect[ "firelp_large_pm_nolight" ], (4596,106,116));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_large_pm_nolight" ], (4551,394,156));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_med_pm_nolight" ], (4840,44,116));
angles = (90, 90, 0);
playFX(level._effect[ "tanker_embers" ], (5053,59,415));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_med_pm_nolight" ], (4612,-55,225));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_small_pm_a_nolight" ], (4855,302,165));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_small_pm_a_nolight" ], (4922,344,177));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_med_pm_nolight" ], (5005,237,116));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_large_pm_nolight" ], (5010,-24,214));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_small_pm_a_nolight" ], (4782,156,301));
angles = (90, 90, 0);
CreateElevator((2573,2461,62),(1903,1450,-90),(0,0,0));
AmmOMatic((3774,-28,-70),(0,90,0));
}

Skidrow()
{
CreateDoors((1059,-808,0),(1321,-808,0),(90,0,90),9,2,30,100);
CreateDoors((992,-250,0),(992,-105,0),(90,0,0),10,2,30,100);
CreateWalls((992,374,0),(992,62,97));
CreateBlocks((941,236,95),(0,0,0));
CreateRamps((1807,-217,100),(1470,-217,190));
CreateRamps((1976,-462,50),(1976,-549,95));
CreateAsc((1817,99,105),(1817,99,20Cool Man (aka Tustin),1,3);
CreateDoors((883,-1799,32),(990,-1799,32),(90,0,90),7,2,30,100);
CreateDoors((727,-1904,32),(727,-1951,32),(90,0,0),2,2,30,100);
CreateBlocks((837,-2176,176),(0,90,0));
CreateBlocks((837,-2129,176),(0,90,0));
mgTurret1 = spawnTurret( "misc_turret", (740,-1858,205), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, 179, 0);
mgTurret2 = spawnTurret( "misc_turret", (-2009,-361,183), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, -13, 0);
CreateDoors((-2167,278,16),(-2167,215,16),(90,0,0),3,2,30,120);
CreateDoors((-2271,-912,12Cool Man (aka Tustin),(-2209,-912,12Cool Man (aka Tustin),(90,0,90),3,2,30,120);
ReviveBox((1659,-767,10Cool Man (aka Tustin),(0,90,0));
playFX(level._effect[ "dust_wind_fast_light" ], (1908,-700,194));
angles = (0, 0, 0);
playFX(level._effect[ "dust_wind_fast_light" ], (1798,-95,30Cool Man (aka Tustin));
angles = (0, 0, 0);
playFX(level._effect[ "dust_wind_fast_light" ], (1251,-355,221));
angles = (0, 0, 0);
AmmOMatic((1128,-2052,176),(0,90,0));
}

SubBase()
{
CreateBlocks((-1506, 800, 123), (0, 0, 45));
CreateDoors((1100, -1138, 294), (1100, -1078, 294), (90, 0, 0), 2, 2, 5, 50);
CreateDoors((-839, -1249, 27Cool Man (aka Tustin), (-839, -1319, 27Cool Man (aka Tustin), (90, 0, 0), 2, 2, 5, 50);
CreateDoors((-1428, -1182, 27Cool Man (aka Tustin), (-1498, -1182, 27Cool Man (aka Tustin), (90, 90, 0), 2, 2, 5, 50);
CreateDoors((-435, -50, 111), (-380, -50, 111), (90, 90, 0), 2, 2, 5, 50);
CreateDoors((-643, -50, 111), (-708, -50, 111), (90, 90, 0), 2, 2, 5, 50);
CreateDoors((1178, -438, 102), (1248, -438, 102), (90, 90, 0), 2, 2, 5, 50);
CreateDoors((1112, -90, 246), (1112, -160, 246), (90, 0, 0), 2, 2, 5, 50);
ReviveBox((-689,-2404,62),(0,90,0));
PaPBox((-1046,-1364,0),(0,0,0));
CreateDoors((-942,-1162,256),(-901,-1162,256),(90,0,90),2,2,25,100);
CreateBlocks((-768,-899,246),(0,0,0));
mgTurret1 = spawnTurret( "misc_turret", (-1183,-1181,319), "pavelow_minigun_mp" );
mgTurret1 setModel( "weapon_minigun" );
mgTurret1.angles = (0, -103, 0);
mgTurret2 = spawnTurret( "misc_turret", (-1043,-915,301), "pavelow_minigun_mp" );
mgTurret2 setModel( "weapon_minigun" );
mgTurret2.angles = (0, 92, 0);
mgTurret3 = spawnTurret( "misc_turret", (-1308,-915,301), "pavelow_minigun_mp" );
mgTurret3 setModel( "weapon_minigun" );
mgTurret3.angles = (0, 92, 0);
CreateRamps((214,-916,250),(214,-8,315));
AmmOMatic((-539,-220,89),(0,0,0));
SpeedCola((724,177,317),(0,90,0));
}

Terminal()
{
CreateElevator((1219,3825,40.125),(567,-707,40.125));
AutoTurret((596,1155,30Cool Man (aka Tustin),(0,-91,0));
CreateRamps((1375,1624,256),(1597,1624,39Cool Man (aka Tustin));
CreateRamps((2071,1492,255),(1825,1535,362));
ReviveBox((1693,2342,449),(0,0,0));
CreateRamps((-1753,3680,40),(-2013,3860,204));
CreateElevator((-896,4409,44),(2779,2932,76),(0,0,0));
Sentry = spawnTurret( "misc_turret", (2976,1009,31Cool Man (aka Tustin), "sentry_minigun_mp" );
Sentry setModel( "sentry_minigun" );
Sentry.angles = (0,156,0);
Sentry2 = spawnTurret( "misc_turret", (-2061,3904,210), "sentry_minigun_mp" );
Sentry2 setModel( "sentry_minigun" );
Sentry2.angles = (0,-50,0);
playFX(level._effect[ "light_shaft_motes_airport" ], (554,260,119));
angles = (90, 90, 0);
playFX(level._effect[ "light_shaft_motes_airport" ], (949,286,132));
angles = (90, 90, 0);
playFX(level._effect[ "light_shaft_motes_airport" ], (184,235,377));
angles = (90, 90, 0);
playFX(level._effect[ "ground_smoke_1200x1200" ], (473,-155,655));
angles = (90, 90, 0);
thread killTrigger( (1696,156,77Cool Man (aka Tustin), 30, 8 );
AmmOMatic((-2184,4109,199),(0,90,0));
}

Underpass()
{
CreateDoors((-339,3105,264),(-339,3162,264),(90,0,0),4,2,30,100);
CreateDoors((-427,2951,392),(-480,2951,392),(90,0,90),3,2,30,100);
CreateBlocks((679,1747,493),(0,0,0));
CreateBlocks((729,1747,493),(0,0,0));
CreateBlocks((769,1747,493),(0,0,0));
CreateDoors((1254,-696,512),(1342,-696,512),(90,0,90),4,2,30,100);
CreateDoors((391,-78,320),(391,-128,320),(90,0,0),4,2,30,100);
NinjaBox((1493,-690,546),(0,0,0));
Juggernaut((-451,3224,392),(0,0,0));
ReviveBox((-5,1870,520),(0,90,0));
CreateRamps((2845,1191,345),(2604,1191,456));
PaPBox((2510,851,44Cool Man (aka Tustin),(0,0,0));
CreateRamps((-405,1215,351),(-405,965,30Cool Man (aka Tustin));
AutoTurret((-415,860,320),(0,0,0));
AmmOMatic((1194,2904,48Cool Man (aka Tustin),(0,0,0));
}

Wasteland()
{
CreateWalls((2174,-2468,25),(2174,-2250,180));
CreateWalls((2174,-2468,25),(2007,-2468,180));
CreateWalls((2007,-2250,25),(2174,-2250,180));
CreateRamps((2141,-2310,20),(2141,-2449,141));
CreateGrids((2019,-2279,141),(2098,-2449,141),(0,0,0));
CreateWalls((2007,-2279,141),(2007,-2449,170));
CreateRamps((2109,-2287,155),(2109,-2109,232));
CreateGrids((2004,-2106,232),(2225,-2002,232),(0,0,0));
CreateDoors((2007,-2467,32),(2007,-2391,32),(90,0,0),7,2,25,125);
CreateWalls((2225,-2002,243),(2004,-2002,267));
CreateWalls((2225,-2002,243),(2225,-2106,267));
CreateWalls((2004,-2002,243),(2004,-2106,267));
CreateBlocks((2042,-2115,252),(0,0,0));
CreateBlocks((2188,-2115,252),(0,0,0));
CreateRamps((2182,-2343,16Cool Man (aka Tustin),(2381,-2343,220));
CreateGrids((2383,-2450,220),(2467,-2224,220),(0,0,0));
CreateWalls((2467,-2224,234),(2467,-2450,256));
CreateWalls((2467,-2224,234),(2383,-2224,256));
CreateWalls((2467,-2450,234),(2383,-2450,256));
CreateBlocks((2364,-2410,242),(0,90,0));
CreateBlocks((2364,-2272,242),(0,90,0));
CreateRamps((2046,-2415,150),(2046,-2631,22Cool Man (aka Tustin));
CreateGrids((2222,-2648,22Cool Man (aka Tustin),(1883,-2823,22Cool Man (aka Tustin),(0,0,0));
CreateWalls((1883,-2823,242),(2222,-2823,340));
CreateWalls((1883,-2823,242),(1883,-2676,340));
CreateWalls((2222,-2676,242),(2222,-2823,340));
CreateWalls((1995,-2676,242),(1883,-2676,340));
CreateDoors((1991,-2675,247),(2072,-2675,247),(90,0,90),7,2,25,125);
CreateRamps((1938,-2792,235),(2192,-2792,323));
CreateRamps((2222,-2672,330),(2222,-2491,395));
CreateGrids((2340,-2487,395),(2110,-2379,395),(0,0,0));
CreateWalls((2361,-2371,409),(2081,-2371,430));
CreateWalls((2361,-2371,409),(2361,-2505,430));
CreateWalls((2081,-2505,409),(2081,-2371,430));
CreateBlocks((2146,-2492,415),(0,0,0));
CreateBlocks((2307,-2492,415),(0,0,0));
CreateRamps((2058,-2058,246),(1828,-2058,313));
CreateGrids((1805,-2202,315),(1718,-1912,30Cool Man (aka Tustin),(0,0,0));
CreateRamps((1764,-2205,306),(1764,-2382,450));
CreateGrids((1634,-2388,450),(1894,-2492,450),(0,0,0));
CreateRamps((2476,-2330,240),(2665,-2330,310));
CreateGrids((2755,-2201,310),(2679,-2438,310),(0,0,0));
AmmOMatic((1882,-2437,464),(0,0,0));
mgTurret1 = spawnTurret( "misc_turret", (1714,-2101,364), "pavelow_minigun_mp" );
mgTurret1.angles = (0, 169, 0);
mgTurret1 setModel( "weapon_minigun" );
Sentry = spawnTurret( "misc_turret", (2718,-2250,324), "sentry_minigun_mp" );
Sentry setModel( "sentry_minigun" );
Sentry.angles = (0,98,0);
CreateRamps((2197,-1989,246),(2197,-1786,34Cool Man (aka Tustin));
CreateGrids((2282,-1778,34Cool Man (aka Tustin),(2093,-1684,34Cool Man (aka Tustin),(0,0,0));
CreateRamps((2298,-1735,345),(2474,-1735,454));
CreateGrids((2481,-1813,454),(2584,-1658,454),(0,0,0));
CreateRamps((2309,-2369,411),(2309,-2140,475));
CreateGrids((2430,-2132,475),(2223,-2050,475),(0,0,0));
}

Carnaval()
{
CreateElevator((1922,586,-39),(-2898,9716,395),(0,0,0));
CreateWalls((-692,10000,46Cool Man (aka Tustin),(-692,9564,673));
CreateWalls((-692,10000,46Cool Man (aka Tustin),(-1103,10000,673));
CreateWalls((-1103,9564,46Cool Man (aka Tustin),(-692,9564,673));
CreateWalls((-1103,9564,46Cool Man (aka Tustin),(-1103,9687,581));
CreateWalls((-1103,9853,46Cool Man (aka Tustin),(-1103,10000,581));
CreateDoors((-1103,9667,46Cool Man (aka Tustin),(-1103,9752,46Cool Man (aka Tustin),(90,0,0), 4,2,25,75);
CreateRamps((-965,9969,45Cool Man (aka Tustin),(-691,9969,581));
CreateGrids((-692,9913,581),(-939,9562,581),(0,0,0));
CreateRamps((-951,9767,581),(-1285,9767,655));
CreateGrids((-1288,9852,655),(-1324,9672,655),(0,0,0));
ReviveBox((-724,9696,595),(0,90,0));
AmmOMatic((-724,9778,595),(0,90,0));
Juggernaut((-928,9594,46Cool Man (aka Tustin),(0,0,0));
NinjaBox((-829,9594,46Cool Man (aka Tustin),(0,0,0));
AutoTurret((-1311,9756,669),(0,90,0));
}

Overgrown()
{
CreateWalls((2215,-2878,-176),(2656,-2878,0));
CreateWalls((2656,-3116,-176),(2656,-2878,0));
CreateWalls((2215,-2878,-176),(2215,-3116,0));
CreateWalls((2215,-3116,-176),(2445,-3116,-135));
CreateWalls((2215,-3116,-70),(2656,-3116,15));
CreateRamps((2486,-2907,-185),(2245,-2907,-15));
CreateGrids((2245,-2958,-15),(2624,-3103,-15),(0,0,0));
CreateDoors((2400,-3116,-176),(2566,-3116,-176),(90,0,90),7,2,35,100);
playFX(level._effect[ "thin_black_smoke_L" ], (1020,-2946,12Cool Man (aka Tustin));
angles = (90, 90, 0);
ReviveBox((2265,-2907,-175),(0,0,0));
AmmOMatic((2625,-2976,-175),(0,90,0));
PaPBox((2245,-3036,-177),(0,90,0));
DoubleTap((2237,-3042,-15),(0,90,0));
}

Vacant()
{
CreateDoors((611,-342,-47),(611,-420,-47),(90,0,0),4,2,30,100);
CreateDoors((611,157,-47),(611,91,-47),(90,0,0),4,2,30,100);
CreateDoors((867,-570,-47),(867,-668,-47),(90,0,0),6,2,15,100);
mgTurret1 = spawnTurret( "misc_turret", (1099,986,12), "pavelow_minigun_mp" );
mgTurret1.angles = (0, -178, 0);
mgTurret1 setModel( "weapon_minigun" );
CreateWalls((1084,1112,-47),(1084,1079,32));
CreateDoors((1203,846,-47),(1269,846,-47),(90,0,90),4,2,35,100);
ReviveBox((1652,144,-27),(0,90,0));
OrangeSoda((-1839,958,-113),(0,90,0));
AmmOMatic((247,1664,-111),(0,180,0));
}

Fuel()
{
CreateDoors((623,-776,2),(750,-776,2),(90,0,90),13,2,40,100);
CreateDoors((1008,524,2),(860,524,2),(90,0,90),14,2,40,100);
CreateDoors((503,-398,2),(503,-326,2),(90,0,0),3,2,40,100);
CreateDoors((540,-136,250),(594,-136,250),(90,0,90),3,2,12,100);
CreateDoors((540,269,250),(594,269,250),(90,0,90),3,2,12,100);
CreateBlocks((666,554,35),(0,0,0));
CreateDoors((1872,-105,-197),(1872,-180,-197),(90,0,0),3,2,35,100);
CreateDoors((1467,119,-156),(1586,119,-156),(90,0,90),6,2,20,100);
CreateWalls((1423,-203,84),(1423,-348,5Cool Man (aka Tustin));
CreateBlocks((1369,-241,50),(0,90,0));
CreateBlocks((1369,-279,50),(0,90,0));
CreateBlocks((1369,-333,50),(0,90,0));
CreateWalls((1191,-482,95),(1191,-640,50));
Sentry = spawnTurret( "misc_turret", (774,-401,2), "sentry_minigun_mp" );
Sentry setModel( "sentry_minigun" );
Sentry.angles = (0,-90,0);
Sentry2 = spawnTurret( "misc_turret", (864,340,2), "sentry_minigun_mp" );
Sentry2 setModel( "sentry_minigun" );
Sentry2.angles = (0,90,0);
Juggernaut((503,-21,2),(0,90,0));
NinjaBox((1596,292,-157),(0,0,0));
AmmOMatic((1136,529,250),(0,90,0));
}

Crash()
{
AmmOMatic((1806,731,140),(0,90,0));
ReviveBox((1532,755,340),(0,0,0));
CreateBlocks((1601,380,443),(0,0,0));
CreateDoors((1585,427,30Cool Man (aka Tustin),(1550,427,30Cool Man (aka Tustin),(90,0,90),3,2,30,100);
CreateDoors((1702,427,140),(1635,427,140),(90,0,90),3,2,30,100);
CreateDoors((1459,622,140),(1459,683,140),(90,0,0),3,2,30,100);
CreateDoors((1616,624,580),(1616,681,580),(90,0,0),2,1,30,100);
DoubleTap((1788,429,587),(0,0,0));
SpeedCola((1712,427,580),(0,0,0));
}

Storm()
{
CreateRamps((4947,736,-60),(4736,736,Cool Man (aka Tustin));
thread killTrigger( (5070,-1315,32), 60, 8 );
CreateElevator((1871,504,-7),(2816,-378,624),(0,0,0));
CreateElevator((607,919, 0),(2591,-1130,-63),(0,0,0));
PaPBox((-1335,678,0),(0,90,0));
CreateRamps((2943,-1172,-63),(2943,-1352,0));
CreateElevator((2615,-2175,-7),(2466,-1165,-63),(0,0,0));
CreateAsc((2280,-97,-7),(2280,-97,644),0,3);
AmmOMatic((1872,1349,-7),(0,90,0));
CreateRamps((-464,777,99),(-214,777,214));
CreateRamps((-989,1166,-7),(-989,1408,80));
}

Salvage()
{
CreateBlocks((2058,1983,30),(0,0,0));
CreateBlocks((2006,1988,30),(0,0,0));
CreateBlocks((2058,1983,60),(0,0,0));
CreateBlocks((2006,1988,60),(0,0,0));
CreateBlocks((1596,2058,71),(90,0,0));
CreateDoors((1771,2360,0),(1847,2360,0),(90,0,90),2,2,30,100);
CreateDoors((1710,2217,136),(1639,2217,136),(0,0,0),4,1,30,100);
CreateBlocks((1904,2052,136),(0,0,0));
CreateBlocks((1711,2007,136),(0,0,90));
mgTurret1 = spawnTurret( "misc_turret", (2057,2126,223), "pavelow_minigun_mp" );
mgTurret1.angles = (0, -93, 0);
mgTurret1 setModel( "weapon_minigun" );
playFX(level._effect[ "falling_junk_ring_runner" ], (2033,2182,200));
angles = (90, 90, 0);
AmmOMatic((1813,2360,136),(0,0,0));
NapalmBox((1724,2007,153),(0,0,0));
}

Bailout()
{
CreateDoors((2339,-2343,600),(2339,-2282,600),(90,0,0),6,2,25,100);
CreateDoors((2391,-2596,600),(2466,-2596,600),(90,0,90),6,2,25,100);
mgTurret1 = spawnTurret( "misc_turret", (2322,-2255,804), "pavelow_minigun_mp" );
mgTurret1.angles = (0,-176,0);
mgTurret1 setModel( "weapon_minigun" );
mgTurret2 = spawnTurret( "misc_turret", (2491,-2618,804), "pavelow_minigun_mp" );
mgTurret2.angles = (0,-113,0);
mgTurret2 setModel( "weapon_minigun" );
OrangeSoda((2600,-2371,74Cool Man (aka Tustin),(0,0,0));
CreateBlocks((507,-2078,78Cool Man (aka Tustin),(0,-90,0));
CreateBlocks((507,-2078,800),(0,-90,0));
CreateBlocks((-57,-1894,700),(0,-90,0));
CreateBlocks((-57,-1894,724),(0,-90,0));
CreateBlocks((345,-2279,825),(0,-90,0));
CreateBlocks((345,-2317,825),(0,-90,0));
AmmOMatic((-100,-1739,816),(0,180,0));
CreateBlocks((324,-2368,685),(0,-180,0));
CreateBlocks((324,-2368,712),(0,-180,0));
PaPBox((120,-1872,672),(0,90,0));
}

Strike()
{
CreateDoors((-1364,352,19),(-1293,352,19),(90,0,90),3,2,20,100);
CreateDoors((-1201,304,187),(-1254,304,187),(90,0,90),3,2,20,100);
CreateDoors((-1280,100,19),(-1176,100,19),(90,0,90),6,2,35,100);
CreateDoors((-1357,89,19),(-1447,181,19),(90,0,-45),6,2,35,100);
CreateWalls((-1498,390,19),(-1458,390,105));
mgTurret1 = spawnTurret( "misc_turret", (-1196,48,237), "pavelow_minigun_mp" );
mgTurret1.angles = (0, -84, 0);
mgTurret1 setModel( "weapon_minigun" );
mgTurret2 = spawnTurret( "misc_turret", (-1019,199,237), "pavelow_minigun_mp" );
mgTurret2.angles = (0, 7, 0);
mgTurret2 setModel( "weapon_minigun" );
PaPBox((-1310,574,187),(0,0,0));
Juggernaut((-1134,288,19),(0,0,0));
SpeedCola((-1025,416,19),(0,90,0));
NinjaBox((-1025,422,192),(0,90,0));
AmmOMatic((-1071,304,187),(0,180,0));
}

Trailerpark()
{
CreateWalls((1155,-2699,0),(1441,-2699,700));
CreateWalls((1155,-2699,0),(1155,-2509,700));
AmmOMatic((1200,-2561,470),(0,-90,0));
CreateWalls((1441,-2509,0),(1441,-2699,700));
CreateElevator((1113,-1609,7),(1149,-1862,7),(0,0,0));
CreateDoors((1158,-2509,0),(1224,-2509,0),(90,0,90),9,2,30,100);
playFX(level._effect[ "firelp_large_pm" ], (1507,-2006,6));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_large_pm" ], (1099,-2243,0));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_large_pm" ], (957,-1845,5));
angles = (90, 90, 0);
playFX(level._effect[ "firelp_large_pm" ], (1430,-2365,0));
angles = (90, 90, 0);
CreateRamps((1223,-2674,-10),(1395,-2674,110));
CreateGrids((1200,-2554,110),(1395,-2617,110),(0,0,0));
CreateRamps((1223,-2674,125),(1395,-2674,220));
CreateGrids((1200,-2554,220),(1395,-2617,220),(0,0,0));
CreateRamps((1223,-2674,235),(1395,-2674,330));
CreateGrids((1200,-2554,330),(1395,-2617,330),(0,0,0));
CreateRamps((1223,-2674,345),(1395,-2674,440));
CreateGrids((1200,-2554,440),(1395,-2617,440),(0,0,0));
CreateRamps((1223,-2674,455),(1395,-2674,550));
CreateGrids((1200,-2554,550),(1395,-2617,550),(0,0,0));
CreateRamps((1223,-2674,565),(1395,-2674,660));
CreateGrids((1200,-2554,660),(1395,-2617,660),(0,0,0));
}



And who made all this things??? Claps , if you dont know why dont you ask??? :S

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo