2014-02-26 19:54:04 +00:00
//--------------------------------------------------------------------------
// SWs
// System Core now moved to: scripts/TWM2/Systems/Killstreak.cs
// Handles the Killstreak Datablocks
2014-08-02 22:12:19 +00:00
//
// 3.9: I've eliminated ~40 datablocks here by simply moving all killstreaks to a
// single weapon instance with mine/grenade modes to cycle through the earned
// streaks. This should prove to be a much more efficient system.
2014-02-26 19:54:04 +00:00
//--------------------------------------------------------------------------
2014-08-02 22:12:19 +00:00
datablock ItemData ( KillstreakBeacon ) {
2014-02-26 19:54:04 +00:00
className = Weapon ;
catagory = "Spawn Items" ;
shapeFile = "weapon_targeting.dts" ;
2014-08-02 22:12:19 +00:00
image = KillstreakBeaconImage ;
2014-02-26 19:54:04 +00:00
mass = 1 ;
elasticity = 0.2 ;
friction = 0.6 ;
pickupRadius = 2 ;
pickUpName = "a targeting laser rifle" ;
isKSSW = 1 ;
computeCRC = true ;
} ;
2014-08-02 22:12:19 +00:00
datablock ShapeBaseImageData ( KillstreakBeaconImage ) {
2014-02-26 19:54:04 +00:00
className = WeaponImage ;
shapeFile = "weapon_targeting.dts" ;
2014-08-02 22:12:19 +00:00
item = KillstreakBeacon ;
2014-02-26 19:54:04 +00:00
offset = "0 0 0" ;
isKSSW = 1 ;
projectile = BasicTargeter ;
projectileType = TargetProjectile ;
deleteLastProjectile = true ;
usesEnergy = true ;
minEnergy = 3 ;
stateName [ 0 ] = "Activate" ;
stateSequence [ 0 ] = "Activate" ;
stateSound [ 0 ] = TargetingLaserSwitchSound ;
stateTimeoutValue [ 0 ] = 0.5 ;
stateTransitionOnTimeout [ 0 ] = "ActivateReady" ;
stateName [ 1 ] = "ActivateReady" ;
stateTransitionOnAmmo [ 1 ] = "Ready" ;
stateTransitionOnNoAmmo [ 1 ] = "NoAmmo" ;
stateName [ 2 ] = "Ready" ;
stateTransitionOnNoAmmo [ 2 ] = "NoAmmo" ;
stateTransitionOnTriggerDown [ 2 ] = "Fire" ;
stateName [ 3 ] = "Fire" ;
stateEnergyDrain [ 3 ] = 3 ;
stateFire [ 3 ] = true ;
stateAllowImageChange [ 3 ] = false ;
stateScript [ 3 ] = "onFire" ;
stateTransitionOnTriggerUp [ 3 ] = "Deconstruction" ;
stateTransitionOnNoAmmo [ 3 ] = "Deconstruction" ;
stateSound [ 3 ] = TargetingLaserPaintSound ;
stateName [ 4 ] = "NoAmmo" ;
stateTransitionOnAmmo [ 4 ] = "Ready" ;
stateName [ 5 ] = "Deconstruction" ;
stateScript [ 5 ] = "deconstruct" ;
stateTransitionOnTimeout [ 5 ] = "Ready" ;
} ;
2014-08-02 22:12:19 +00:00
function KillstreakBeaconImage : : onMount ( % this , % obj , % slot ) {
Parent : : onMount ( % this , % obj , % slot ) ;
% obj . hasMineModes = 1 ;
% obj . hasGrenadeModes = 1 ;
DisplayKillstreakInfo ( % obj ) ;
if ( ! isSet ( % obj . KSSetMode ) ) {
% obj . KSSetMode = 0 ;
}
% obj . usingKSBeacon = true ;
}
function KillstreakBeaconImage : : onunmount ( % this , % obj , % slot ) {
Parent : : onUnmount ( % this , % obj , % slot ) ;
% obj . hasMineModes = 0 ;
% obj . hasGrenadeModes = 0 ;
% obj . usingKSBeacon = false ;
}
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
function KillstreakBeaconImage : : changeMode ( % this , % obj , % key ) {
switch ( % key ) {
case 1 :
//Mine Modes
% obj . KSSetMode + + ;
if ( % obj . KSSetMode > = % obj . client . ksListInstance . count ( ) ) {
% obj . KSSetMode = 0 ;
}
case 2 :
//Grenade Modes
% obj . KSSetMode - - ;
if ( % obj . KSSetMode < 0 ) {
% obj . KSSetMode = % obj . client . ksListInstance . count ( ) - 1 ;
}
}
DisplayKillstreakInfo ( % obj ) ;
}
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
function DisplayKillstreakInfo ( % obj ) {
% currentStreak = % obj . client . ksListInstance . element ( % obj . KSSetMode ) ;
% strkName = getWord ( % currentStreak , 0 ) ;
% strkCnt = getWord ( % currentStreak , 1 ) ;
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
switch $ ( % strkName ) {
case "UAV" :
% msg = "UAV Recon" ;
case "Airstrike" :
% msg = "Thundersword Airstrike" ;
case "GM" :
% msg = "UAMS Assault Drone" ;
case "AIHeli" :
% msg = "Support Helicopter" ;
case "Harrier" :
% msg = "Plasma Harrier Airstrike" ;
case "OLS" :
% msg = "Orbital Laser Strike" ;
case "AIGunHeli" :
% msg = "Gunship Helicopter Support" ;
case "Stealth" :
% msg = "Stealth Bomber Airstrike" ;
case "HarbWrath" :
% msg = "Harbinger's Wrath" ;
case "Apache" :
% msg = "Apache Gunner" ;
case "AC130" :
% msg = "AC-130 Gunner" ;
case "Artillery" :
% msg = "Centaur Artillery Bombardment" ;
case "EMP" :
% msg = "EMP Strike" ;
case "NukeStrike" :
% msg = "Tactical Nuke Strike" ;
case "ZBomb" :
% msg = "Anti-Zombie Bomb" ;
case "FBomb" :
% msg = "Fission Bomb Strike" ;
case "Napalm" :
% msg = "Napalm Airstrike" ;
}
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
commandToClient ( % obj . client , ' BottomPrint ' , "<font:Sui Generis:14>>>>Killstreak Beacon<<<\n<font:Arial:14>" @ % msg @" [" @ % strkCnt @" Available]\n<font:Arial:12>Press Mine to select next streak, Grenade to select previous streak." , 3 , 3 ) ;
}
function KillstreakBeaconImage : : OnFire ( % data , % obj , % slot ) {
% currentStreak = % obj . client . ksListInstance . element ( % obj . KSSetMode ) ;
% strkName = getWord ( % currentStreak , 0 ) ;
% strkCnt = getWord ( % currentStreak , 1 ) ;
% newCt = % strkCnt - 1 ;
if ( % strkCnt < = 0 ) {
//Oops...
messageClient ( % obj . client , ' msgError ' , "\c5TWM2: Nice Try..." ) ;
% obj . client . ksListInstance . removeElement ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) ) ;
if ( % obj . client . ksListInstance . count ( ) < = 0 ) {
//No more streaks in the list...
% obj . throwWeapon ( 1 ) ;
% obj . throwWeapon ( 0 ) ;
% obj . setInventory ( KillstreakBeacon , 0 , true ) ;
}
return ;
}
switch $ ( % strkName ) {
//
//
// UAV
//
//
case "UAV" :
GainExperience ( % obj . client , 25 , "UAV Called in " ) ;
% obj . client . TWM2Core . UAVCalls + + ;
UpdateSWBeaconFile ( % obj . client , "UAV" ) ;
% obj . client . OnUseKillstreak ( 1 ) ;
if ( % newCt = = 0 ) {
% obj . client . ksListInstance . removeElement ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) ) ;
2014-02-26 19:54:04 +00:00
}
else {
2014-08-02 22:12:19 +00:00
% obj . client . ksListInstance . set ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) , % strkName SPC % newCt ) ;
2014-02-26 19:54:04 +00:00
}
2014-08-02 22:12:19 +00:00
% count = 0 ;
if ( ! $ TWM2 : : FFAMode ) {
% obj . team . UAVLoop = UAVLoop ( % obj , % obj . client . team , % count ) ;
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + ) {
% cl = ClientGroup . getObject ( % i ) ;
if ( % cl . team = = % obj . team ) {
messageClient ( % cl , ' MsgUAVOnline ' , "Our UAV is Online (30 Seconds)" ) ;
}
else {
messageClient ( % cl , ' MsgUAVOnline ' , "Enemy UAV is Airborne (30 Seconds)" ) ;
}
}
2014-02-26 19:54:04 +00:00
}
else {
2014-08-02 22:12:19 +00:00
% obj . client . UAVLoop = UAVLoop ( % obj , "" , 0 ) ;
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + ) {
% cl = ClientGroup . getObject ( % i ) ;
if ( % cl = = % obj . client ) {
messageClient ( % cl , ' MsgUAVOnline ' , "Your UAV is Online (30 Seconds)" ) ;
}
else {
messageClient ( % cl , ' MsgUAVOnline ' , "" @ % obj . client . namebase @"'s UAV is Airborne (30 Seconds)" ) ;
}
}
2014-02-26 19:54:04 +00:00
}
2014-08-02 22:12:19 +00:00
//
//
// Airstrike
//
//
case "Airstrike" :
% ASCam = new Camera ( ) {
dataBlock = TWM2ControlCamera ;
} ;
MissionCleanup . add ( % ASCam ) ;
% ASCam . setTransform ( % obj . getTransform ( ) ) ;
% ASCam . setFlyMode ( ) ;
% ASCam . mode = "AirstrikeCall" ;
% obj . client . setControlObject ( % ASCam ) ;
CameraMessageLoop ( % obj . client , % ASCam , % ASCam . mode ) ;
//
//
// UAMS
//
//
case "GM" :
GainExperience ( % obj . client , 50 , "UAMS Called in " ) ;
% obj . client . TWM2Core . GMCalls + + ;
% obj . client . OnUseKillstreak ( 3 ) ;
UpdateSWBeaconFile ( % obj . client , "GM" ) ;
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + ) {
% cl = ClientGroup . getObject ( % i ) ;
if ( % cl . team = = % obj . client . team ) {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Friendly Missile Strike Approaching" ) ;
}
else {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Enemy UAMS Detected!!!" ) ;
}
}
CreateMissileSat ( % obj . client ) ;
if ( % newCt = = 0 ) {
% obj . client . ksListInstance . removeElement ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) ) ;
}
else {
% obj . client . ksListInstance . set ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) , % strkName SPC % newCt ) ;
}
//
//
// Helicopter
//
//
case "AIHeli" :
if ( Game . CheckModifier ( "Scrambler" ) = = 1 ) {
for ( % i = 0 ; % i < MissionCleanup . getCount ( ) ; % i + + ) {
% obj = MissionCleanup . getObject ( % i ) ;
if ( % obj . isZombie ) {
if ( % obj . isAlive ( ) ) {
if ( % obj . getDatablock ( ) . getName ( ) $ = "LordZombieArmor" ) {
messageClient ( % obj . client , ' msgHeliComing ' , "\c5HELLJUMP: A Zombie Lord Is Scrambling the Signal, Helicopters/Harriers cannot be called in at the time." ) ;
return ;
}
}
}
}
}
GainExperience ( % obj . client , 50 , "Combat Helicopter Called in " ) ;
% obj . client . OnUseKillstreak ( 4 ) ;
% obj . client . TWM2Core . HeliCalls + + ;
UpdateSWBeaconFile ( % obj . client , "Heli" ) ;
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + ) {
% cl = ClientGroup . getObject ( % i ) ;
if ( % cl . team = = % obj . client . team ) {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Friendly Helicopter Approaching" ) ;
}
else {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Enemy Helicopter Inbound" ) ;
}
}
if ( % newCt = = 0 ) {
% obj . client . ksListInstance . removeElement ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) ) ;
}
else {
% obj . client . ksListInstance . set ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) , % strkName SPC % newCt ) ;
}
MakeTheHeli ( % obj . client ) ;
//
//
// Harrier
//
//
case "Harrier" :
% ASCam = new Camera ( ) {
dataBlock = TWM2ControlCamera ;
} ;
MissionCleanup . add ( % ASCam ) ;
% ASCam . setTransform ( % obj . getTransform ( ) ) ;
% ASCam . setFlyMode ( ) ;
% ASCam . mode = "HarrierCall" ;
% obj . client . setControlObject ( % ASCam ) ;
CameraMessageLoop ( % obj . client , % ASCam , % ASCam . mode ) ;
//
//
// OLS
//
//
case "OLS" :
% ASCam = new Camera ( ) {
dataBlock = TWM2ControlCamera ;
} ;
MissionCleanup . add ( % ASCam ) ;
% ASCam . setTransform ( % obj . getTransform ( ) ) ;
% ASCam . setFlyMode ( ) ;
% ASCam . mode = "OLSCall" ;
% obj . client . setControlObject ( % ASCam ) ;
CameraMessageLoop ( % obj . client , % ASCam , % ASCam . mode ) ;
//
//
// Gunship Helicopter
//
//
case "AIGunHeli" :
if ( Game . CheckModifier ( "Scrambler" ) = = 1 ) {
for ( % i = 0 ; % i < MissionCleanup . getCount ( ) ; % i + + ) {
% obj = MissionCleanup . getObject ( % i ) ;
if ( % obj . isZombie ) {
if ( % obj . isAlive ( ) ) {
if ( % obj . getDatablock ( ) . getName ( ) $ = "LordZombieArmor" ) {
messageClient ( % obj . client , ' msgHeliComing ' , "\c5HELLJUMP: A Zombie Lord Is Scrambling the Signal, Helicopters/Harriers cannot be called in at the time." ) ;
return ;
}
}
}
}
}
GainExperience ( % obj . client , 250 , "Assault Helicopter Called in " ) ;
% obj . client . OnUseKillstreak ( 7 ) ;
% obj . client . TWM2Core . GunHeliCalls + + ;
UpdateSWBeaconFile ( % obj . client , "GunshipHeli" ) ;
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + ) {
% cl = ClientGroup . getObject ( % i ) ;
if ( % cl . team = = % obj . client . team ) {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Friendly Assault Helicopter Approaching" ) ;
}
else {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Enemy Gunship Helicopter Inbound!!!" ) ;
}
}
if ( % newCt = = 0 ) {
% obj . client . ksListInstance . removeElement ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) ) ;
}
else {
% obj . client . ksListInstance . set ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) , % strkName SPC % newCt ) ;
}
MakeTheHeli2 ( % obj . client , 0 ) ;
//
//
// Stealth Airstrike
//
//
case "Stealth" :
% ASCam = new Camera ( ) {
dataBlock = TWM2ControlCamera ;
} ;
MissionCleanup . add ( % ASCam ) ;
% ASCam . setTransform ( % obj . getTransform ( ) ) ;
% ASCam . setFlyMode ( ) ;
% ASCam . mode = "StlhAirstrikeCall" ;
% obj . client . setControlObject ( % ASCam ) ;
CameraMessageLoop ( % obj . client , % ASCam , % ASCam . mode ) ;
//
//
// Harbinger Gunship
//
//
case "HarbWrath" :
GainExperience ( % obj . client , 100 , "Harbinger Gunship Called In " ) ;
if ( $ CurrentMission $ = "ChristmasMall09" ) {
CompleteNWChallenge ( % CallerClient , "GunshipMall" ) ;
}
% obj . client . OnUseKillstreak ( 9 ) ;
% obj . client . TWM2Core . HWCalls + + ;
UpdateSWBeaconFile ( % obj . client , "HarbinsWrath" ) ;
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + ) {
% cl = ClientGroup . getObject ( % i ) ;
if ( % cl . team = = % obj . client . team ) {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Friendly Gunship Approaching" ) ;
}
else {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Enemy Gunship... INCOMING!!!" ) ;
}
}
if ( % newCt = = 0 ) {
% obj . client . ksListInstance . removeElement ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) ) ;
}
else {
% obj . client . ksListInstance . set ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) , % strkName SPC % newCt ) ;
}
if ( $ TWM2 : : UnmannedGunship ) {
StartHarbingersWrath ( % obj . client , 1 ) ;
}
else {
StartHarbingersWrath ( % obj . client , 0 ) ;
}
//
//
// Apache
//
//
case "Apache" :
GainExperience ( % obj . client , 100 , "Apache Gunner Called in " ) ;
% obj . client . OnUseKillstreak ( 10 ) ;
% obj . client . TWM2Core . CGCalls + + ;
UpdateSWBeaconFile ( % obj . client , "ChopperGunner" ) ;
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + ) {
% cl = ClientGroup . getObject ( % i ) ;
if ( % cl . team = = % obj . client . team ) {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Friendly Apache Approaching" ) ;
}
else {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Enemy Apache... INCOMING!!!" ) ;
}
}
if ( % newCt = = 0 ) {
% obj . client . ksListInstance . removeElement ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) ) ;
}
else {
% obj . client . ksListInstance . set ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) , % strkName SPC % newCt ) ;
}
MakeTheHeli ( % obj . client , 1 ) ;
//
//
// AC130
//
//
case "AC130" :
GainExperience ( % obj . client , 100 , "AC130 Called in " ) ;
if ( $ CurrentMission $ = "ChristmasMall09" ) {
CompleteNWChallenge ( % CallerClient , "GunshipMall" ) ;
}
% obj . client . OnUseKillstreak ( 11 ) ;
% obj . client . TWM2Core . ACCalls + + ;
UpdateSWBeaconFile ( % obj . client , "AC130" ) ;
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + ) {
% cl = ClientGroup . getObject ( % i ) ;
if ( % cl . team = = % obj . client . team ) {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Friendly AC-130 Approaching" ) ;
}
else {
messageClient ( % cl , ' msgHeliComing ' , "\c5TWM2: Enemy AC130 ABOVE!!!" ) ;
}
}
if ( % newCt = = 0 ) {
% obj . client . ksListInstance . removeElement ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) ) ;
}
else {
% obj . client . ksListInstance . set ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) , % strkName SPC % newCt ) ;
}
if ( $ TWM2 : : UnmannedGunship ) {
StartAC130 ( % obj . client , 1 ) ;
}
else {
StartAC130 ( % obj . client , 0 ) ;
}
//
//
// Artillery
//
//
case "Artillery" :
% ASCam = new Camera ( ) {
dataBlock = TWM2ControlCamera ;
} ;
MissionCleanup . add ( % ASCam ) ;
% ASCam . setTransform ( % obj . getTransform ( ) ) ;
% ASCam . setFlyMode ( ) ;
% ASCam . mode = "ArtilleryCall" ;
% obj . client . setControlObject ( % ASCam ) ;
CameraMessageLoop ( % obj . client , % ASCam , % ASCam . mode ) ;
//
//
// EMP
//
//
case "EMP" :
% obj . client . TWM2Core . EMPCalls + + ;
UpdateSWBeaconFile ( % obj . client , "EMP" ) ;
GainExperience ( % obj . client , 1000 , "Mass EMP Called in " ) ;
% obj . client . OnUseKillstreak ( 13 ) ;
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + ) {
% cl = ClientGroup . getObject ( % i ) ;
if ( % cl . team ! = % obj . client . team ) {
messageClient ( % cl , ' msgAlert ' , "\c5Command: EMP! Electronic Weapons Offline!" ) ;
ApplyEMP ( % cl ) ;
schedule ( 180000 , 0 , "KillEMP" , % cl ) ;
}
messageClient ( % cl , ' msgSound ' , "~wfx/weapons/mortar_explode.wav" ) ;
if ( isObject ( % cl . player ) ) {
% cl . player . setWhiteout ( 1.0 ) ;
}
}
//make vehicles go boom.
% count = MissionCleanup . getCount ( ) ;
for ( % i = 0 ; % i < % count ; % i + + ) {
% obj = MissionCleanup . getObject ( % i ) ;
if ( % obj ) {
if ( ( % obj . getType ( ) & $ TypeMasks : : VehicleObjectType ) ) {
% random = getRandom ( ) * 100 ;
% obj . schedule ( % random , setDamageState , Destroyed ) ;
}
}
}
if ( % newCt = = 0 ) {
% obj . client . ksListInstance . removeElement ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) ) ;
}
else {
% obj . client . ksListInstance . set ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) , % strkName SPC % newCt ) ;
}
//
//
// Nuke
//
//
case "NukeStrike" :
% ASCam = new Camera ( ) {
dataBlock = TWM2ControlCamera ;
} ;
MissionCleanup . add ( % ASCam ) ;
% ASCam . setTransform ( % obj . getTransform ( ) ) ;
% ASCam . setFlyMode ( ) ;
% ASCam . mode = "NukeCall" ;
% obj . client . setControlObject ( % ASCam ) ;
CameraMessageLoop ( % obj . client , % ASCam , % ASCam . mode ) ;
//
//
// ZBomb
//
//
case "ZBomb" :
GainExperience ( % obj . client , 1000 , "Zombie Annihilation Bomb Activated " ) ;
MessageAll ( ' msgWohoo ' , "\c5TWM2: " @ % obj . client . namebase @" has activated a Z-Bomb, eliminating all zombies" ) ;
% obj . client . OnUseKillstreak ( 15 ) ;
% obj . client . TWM2Core . ZBCalls + + ;
UpdateSWBeaconFile ( % obj . client , "ZBomb" ) ;
if ( $ TWM : : PlayingHorde ) {
CompleteNWChallenge ( % obj . client , "ZBomber" ) ;
}
% count = MissionCleanup . getCount ( ) ;
for ( % i = 0 ; % i < % count ; % i + + ) {
% tobj = MissionCleanup . getObject ( % i ) ;
if ( isObject ( % tobj ) ) {
if ( % tobj . iszombie & & ! % tobj . isBoss ) {
% tobj . damage ( % obj , % tobj . getWorldBoxCenter ( ) , 100.0 , $ DamageType : : ZBomb ) ; //lotsa EXP for mah kills :D
}
}
}
//flashy and soundy
% count2 = ClientGroup . getCount ( ) ;
for ( % x = 0 ; % x < % count2 ; % x + + ) {
% flcl = ClientGroup . getObject ( % x ) ;
messageClient ( % flcl , ' msgSound ' , "~wfx/weapons/mortar_explode.wav" ) ;
if ( isObject ( % flcl . player ) ) {
% flcl . player . setWhiteout ( 1.8 ) ;
}
}
if ( % newCt = = 0 ) {
% obj . client . ksListInstance . removeElement ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) ) ;
}
else {
% obj . client . ksListInstance . set ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) , % strkName SPC % newCt ) ;
}
//
//
// Fission
//
//
case "FBomb" :
% obj . client . HasFission = 0 ;
GainExperience ( % obj . client , 25000 , "Anti-Matter Based Fission Bomb Activated " ) ;
% obj . client . OnUseKillstreak ( 16 ) ;
% obj . client . TWM2Core . FissionCalls + + ;
UpdateSWBeaconFile ( % obj . client , "Fission" ) ;
CompleteNWChallenge ( % obj . client , "GameEnder" ) ;
MessageAll ( ' msgItsOva ' , "\c5COMMAND: FISSION BOMB!!! IT'S OVER!! RUN!!!!!! ~wfx/misc/red_alert_short.wav" ) ;
FissionBombLoop ( % obj . client , % obj , % obj . getPosition ( ) , 30 ) ;
if ( % newCt = = 0 ) {
% obj . client . ksListInstance . removeElement ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) ) ;
}
else {
% obj . client . ksListInstance . set ( getField ( % obj . client . ksListInstance . find ( % strkName ) , 1 ) , % strkName SPC % newCt ) ;
}
//
//
// Napalm
//
//
case "Napalm" :
% ASCam = new Camera ( ) {
dataBlock = TWM2ControlCamera ;
} ;
MissionCleanup . add ( % ASCam ) ;
% ASCam . setTransform ( % obj . getTransform ( ) ) ;
% ASCam . setFlyMode ( ) ;
% ASCam . mode = "NapalmHarrierCall" ;
% obj . client . setControlObject ( % ASCam ) ;
CameraMessageLoop ( % obj . client , % ASCam , % ASCam . mode ) ;
}
//Post-Fire Checks
if ( % obj . client . ksListInstance . count ( ) < = 0 ) {
//No more streaks in the list...
% obj . throwWeapon ( 1 ) ;
% obj . throwWeapon ( 0 ) ;
% obj . setInventory ( KillstreakBeacon , 0 , true ) ;
2014-02-26 19:54:04 +00:00
}
}
function UAVLoop ( % obj , % team , % ct ) {
if ( ! isObject ( Game ) ) {
return ;
}
if ( ! $ TWM2 : : FFAMode | | % team ! $ = "" ) {
% ct + + ;
if ( % ct > 30 ) {
MessageAll ( ' msgOver ' , "Team " @ % team @"'s UAV has expired." ) ;
return ;
}
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + ) {
% cl = ClientGroup . getObject ( % i ) ;
if ( % cl . team ! = % team & & ! % cl . IsActivePerk ( "UAV Disabler" ) ) {
if ( isObject ( % cl . player ) ) {
% cl . UAVMarkerWp = new WayPoint ( ) {
position = % cl . player . getPosition ( ) ;
dataBlock = "WayPointMarker" ;
team = % cl . team ;
name = "" @ % cl . namebase @"" ;
} ;
MissionCleanup . add ( % cl . UAVMarkerWp ) ;
% cl . UAVMarkerWp . schedule ( 1000 , "Delete" ) ;
}
}
}
% obj . team . UAVLoop = schedule ( 1000 , 0 , "UAVLoop" , % obj , % team , % ct ) ;
}
else {
% ct + + ;
if ( % ct > 30 ) {
MessageAll ( ' msgOver ' , "" @ % obj . client . namebase @"'s UAV has expired." ) ;
return ;
}
for ( % i = 0 ; % i < ClientGroup . getCount ( ) ; % i + + ) {
% cl = ClientGroup . getObject ( % i ) ;
if ( % cl ! = % obj . client & & ! % cl . IsActivePerk ( "UAV Disabler" ) ) {
if ( isObject ( % cl . player ) ) {
% cl . UAVMarkerWp = new WayPoint ( ) {
position = % cl . player . getPosition ( ) ;
dataBlock = "WayPointMarker" ;
team = 31 ; //some rediculous number to make them all enemies
name = "" @ % cl . namebase @"" ;
} ;
MissionCleanup . add ( % cl . UAVMarkerWp ) ;
% cl . UAVMarkerWp . schedule ( 1000 , "Delete" ) ;
}
}
}
% obj . client . UAVLoop = schedule ( 1000 , 0 , "UAVLoop" , % obj , "" , % ct ) ;
}
}
2014-08-02 22:12:19 +00:00
function SpawnBomber ( % CallerClient , % callPos , % strikePos , % add ) {
% strikePos = getWords ( % strikePos , 0 , 1 ) SPC ( getWord ( % strikePos , 2 ) + 150 ) ;
% Bomber = new FlyingVehicle ( ) {
dataBlock = BomberFlyer ;
position = VectorAdd ( % callPos , % add ) ;
team = % CallerClient . team ;
} ;
MissionCleanup . add ( % Bomber ) ;
BomberImpulse ( % Bomber , % strikePos , % CallerClient , 0 ) ;
% Bomber . schedule ( 30000 , "Delete" ) ;
//Rot
% Bomber . ReachedDest = 0 ;
% Bomber . bombs = 10 ;
ConstantBomberTurningLoop ( % bomber , % strikePos ) ;
return % Bomber ;
}
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
function ConstantBomberTurningLoop ( % obj , % TPos ) {
//keeps us in line with out target
if ( ! isObject ( % obj ) ) {
return ;
}
% BPos = % obj . getPosition ( ) ;
//
% Target = vectorSub ( % TPos , % BPos ) ;
% SwapA = - 1 * getWord ( % target , 0 ) ;
% TVector = getWord ( % target , 1 ) @" " @ % SwapA @" 0" ;
% obj . setRotation ( fullrot ( "0 0 0" , % TVector ) ) ;
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
% dist = vectorDist ( % TPos , % BPos ) ;
if ( % dist < 75 ) {
% obj . ReachedDest = 1 ;
return ;
}
else {
schedule ( 100 , 0 , "ConstantBomberTurningLoop" , % obj , % tpos ) ;
}
}
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
function Airstrike ( % CallerClient , % position , % dirFrom ) {
if ( ! % CallerClient . UnlimitedAS ) {
$ TWM2 : : AirstrikeCalls [ % CallerClient . guid ] + + ;
2014-02-26 19:54:04 +00:00
% CallerClient . OnUseKillstreak ( 2 ) ;
% CallerClient . TWM2Core . AirstrikeCalls + + ;
UpdateSWBeaconFile ( % CallerClient , "AirStrike" ) ;
}
//new stuff TWM2 2.6
//%dirFrom = Spawn Position of Aircraft
% THeight = getTerrainHeight ( % dirFrom ) ;
% THeightCons = % THeight + 150 ;
//Consider wartower
if ( ! $ TWM : : PlayingWarTower ) {
if ( ( % THeightCons ) < = 5 & & ( % THeightCons ) > - 200 ) {
//baaaaaaad
% NewZ = % THeight + 150 ; //give us the perfect height
}
else {
//fine
% NewZ = getWord ( % dirFrom , 2 ) + 150 ;
}
}
% CallPos = getWords ( % dirFrom , 0 , 1 ) SPC % NewZ ;
//
//echo(%callPos);
if ( getWord ( % callPos , 0 ) < getWord ( % callPos , 1 ) ) {
% b1Add = "-10 10 -20" ;
% Bomber1 = SpawnBomber ( % CallerClient , % callPos , % position , % b1add ) ;
% b2Add = "20 20 10" ;
% Bomber2 = schedule ( 2000 , 0 , "SpawnBomber" , % CallerClient , % callPos , % position , % b2add ) ;
% b3Add = "-10 -10 20" ;
% Bomber3 = schedule ( 4000 , 0 , "SpawnBomber" , % CallerClient , % callPos , % position , % b3add ) ;
% b4Add = "20 -20 -10" ;
% Bomber4 = schedule ( 6000 , 0 , "SpawnBomber" , % CallerClient , % callPos , % position , % b4add ) ;
}
else {
% b1Add = "-10 10 -20" ;
% Bomber1 = SpawnBomber ( % CallerClient , % callPos , % position , % b1add ) ;
% b2Add = "20 20 10" ;
% Bomber2 = schedule ( 2000 , 0 , "SpawnBomber" , % CallerClient , % callPos , % position , % b2add ) ;
% b3Add = "-10 -10 20" ;
% Bomber3 = schedule ( 4000 , 0 , "SpawnBomber" , % CallerClient , % callPos , % position , % b3add ) ;
% b4Add = "20 -20 -10" ;
% Bomber4 = schedule ( 6000 , 0 , "SpawnBomber" , % CallerClient , % callPos , % position , % b4add ) ;
}
}
function BomberImpulse ( % obj , % pos , % cl , % count ) {
if ( ! isObject ( % obj ) ) {
return ;
}
//not there yet
% count + + ;
if ( vectorDist ( % obj . getPosition ( ) , % pos ) > 550 ) {
if ( % count = = 1 ) {
% count = 0 ;
}
if ( vectorLen ( % obj . getVelocity ( ) ) < 400 ) {
% obj . applyImpulse ( % obj . getPosition ( ) , vectorScale ( % obj . getForwardVector ( ) , 2500 * 1.3 ) ) ;
}
}
//in range.. BOMB EM
else {
if ( vectorLen ( % obj . getVelocity ( ) ) < 400 ) {
% obj . applyImpulse ( % obj . getPosition ( ) , vectorScale ( % obj . getForwardVector ( ) , 1835 * 1.3 ) ) ;
}
if ( % count = = 1 ) {
AirstrikeDropBombs ( % obj , % pos , % cl ) ;
% count = 0 ;
}
}
schedule ( 500 , 0 , "BomberImpulse" , % obj , % pos , % cl , % count ) ;
}
function AirstrikeDropBombs ( % obj , % pos , % cl ) {
if ( ! isObject ( % obj ) ) {
return ;
}
if ( % obj . bombs < 1 ) {
return ;
}
% obj . bombs - - ;
% p = new ( BombProjectile ) ( ) {
dataBlock = BomberBomb ;
initialDirection = "0 0 -5" ;
initialPosition = % obj . getPosition ( ) ;
sourceObject = % obj ;
sourceSlot = 0 ;
} ;
% p . theClient = % cl ;
MissionCleanup . add ( % p ) ;
//set the projectile to be owned by the caller
// adds moar kills =-D
if ( isObject ( % cl . player ) ) {
% p . sourceObject = % cl . player ;
}
}
function MakeTheHeli ( % cl , % gunner ) {
if ( % gunner $ = "" ) {
% gunner = 0 ;
}
if ( % gunner ) {
% Heli = new FlyingVehicle ( ) {
dataBlock = ApacheHelicopter ;
position = VectorAdd ( VectorAdd ( getRandomPosition ( 250 , 1 ) , "500 0 150" ) , % cl . player . getPosition ( ) ) ;
team = % cl . team ;
} ;
MissionCleanup . add ( % Heli ) ;
% Heli . doneAttack = 0 ;
//
% Heli . team = % cl . team ;
% heli . Targeting = HeliScan ( % heli ) ;
schedule ( 75000 , 0 , "EndHeli" , % Heli ) ;
% Heli . isKillstreakVehicle = 1 ;
schedule ( 6500 , 0 , "HeliControlLoop" , % cl , % Heli ) ;
% cl . player . lastTransformStuff = % cl . player . getTransform ( ) ;
% cl . player . getDataBlock ( ) . schedule ( 1000 , "onCollision" , % cl . player , % heli , 1 ) ;
% cl . inKillstreak = 1 ;
}
else {
% Heli = new FlyingVehicle ( ) {
dataBlock = CombatHelicopter ;
position = VectorAdd ( VectorAdd ( getRandomPosition ( 250 , 1 ) , "500 0 150" ) , % cl . player . getPosition ( ) ) ;
team = % cl . team ;
} ;
MissionCleanup . add ( % Heli ) ;
% Heli . doneAttack = 0 ;
//
% Heli . team = % cl . team ;
% heli . Targeting = HeliScan ( % heli ) ;
schedule ( 60000 , 0 , "EndHeli" , % Heli ) ;
}
}
function HeliControlLoop ( % client , % gunship ) {
if ( ! isObject ( % gunship ) ) {
if ( isObject ( % client . player ) ) {
ReMoveClientSW ( % client ) ;
}
return ;
}
//Remember, we're controlling the turret
//if(%client.getControlObject() != %gunship.turretObject) {
if ( % gunship . getMountNodeObject ( 1 ) ! = % client . player ) {
if ( isObject ( % client . player ) ) {
ReMoveClientSW ( % client ) ;
}
EndHeli ( % gunship ) ;
return ;
}
schedule ( 100 , 0 , "HeliControlLoop" , % client , % gunship ) ;
}
function HeliImpulse ( % obj ) {
if ( ! isObject ( % obj ) ) {
return ;
}
if ( vectorLen ( % obj . getVelocity ( ) ) < 500 ) {
% obj . applyImpulse ( % obj . getPosition ( ) , vectorScale ( % obj . getForwardVector ( ) , 1535 * 1.3 ) ) ;
}
schedule ( 500 , 0 , "HeliImpulse" , % obj ) ;
}
function EndHeli ( % heli ) {
if ( ! isObject ( % heli ) ) {
return ;
}
//check if it's a special "controlled" variant (Apache Gunner)
if ( % heli . getMountNodeObject ( 1 ) ) {
//dismount the player and reset position
% heli . getMountNodeObject ( 1 ) . unmount ( ) ;
ReMoveClientSW ( % heli . getMountNodeObject ( 1 ) . client ) ;
% heli . getMountNodeObject ( 1 ) . client . inKillstreak = 0 ;
}
% heli . doneAttack = 1 ;
cancel ( % heli . Targeting ) ;
HeliImpulse ( % heli ) ;
% heli . schedule ( 10000 , "delete" ) ;
}
function HeliScan ( % heli ) {
//echo("scan begin");
if ( ! isObject ( % heli ) ) {
//echo("no heli");
return ;
}
if ( % heli . doneAttack = = 1 ) {
//echo("done attacking");
return ;
}
InitContainerRadiusSearch ( % heli . getposition ( ) , 9999 , $ TypeMasks : : PlayerObjectType ) ;
while ( ( % target = containerSearchNext ( ) ) ! = 0 ) {
//echo("target "@%target@"");
if ( % target . team ! = % heli . team ) {
//echo("lock");
HeliBeginAttack ( % heli , % target ) ;
return ;
}
}
//echo("no targs");
% heli . Targeting = schedule ( 500 , 0 , "HeliScan" , % heli ) ;
}
function HeliBeginAttack ( % heli , % target ) {
% pos = % heli . getworldboxcenter ( ) ;
if ( ! isobject ( % heli ) ) {
return ;
}
if ( ! isObject ( % target ) | | % target . getState ( ) $ = "Dead" ) {
//echo("dead target");
% heli . Targeting = schedule ( 500 , 0 , "HeliScan" , % heli ) ;
return ;
}
schedule ( 500 , 0 , "HeliBeginAttack" , % heli , % target ) ;
% clpos = % target . getPosition ( ) ;
if ( vectorDist ( % clpos , % pos ) < 125 ) {
return ; //no movement needed...
}
% vector = vectorNormalize ( vectorAdd ( vectorSub ( % clpos , % pos ) , "50 0 100" ) ) ;
% v1 = getword ( % vector , 0 ) ;
% v2 = getword ( % vector , 1 ) ;
% nv1 = % v2 ;
% nv2 = ( % v1 * - 1 ) ;
% none = 0 ;
% vector2 = % nv1 @" " @ % nv2 @" 10" ;
% heli . setRotation ( fullrot ( "0 0 0" , % vector2 ) ) ;
% moveMult = 1535 ;
% vector = vectorscale ( % vector , % moveMult ) ;
% x = Getword ( % vector , 0 ) ;
% y = Getword ( % vector , 1 ) ;
% z = Getword ( % vector , 2 ) ;
% vector = % x @" " @ % y @" " @ % z @"" ;
% heli . applyImpulse ( % pos , % vector ) ;
}
function StealthAirstrike ( % CallerClient , % position , % dirFrom ) {
% CallerClient . OnUseKillstreak ( 8 ) ;
% CallerClient . TWM2Core . SlthAirstrikeCalls + + ;
UpdateSWBeaconFile ( % CallerClient , "StealthAirStrike" ) ;
//new stuff TWM2 2.6
//%dirFrom = Spawn Position of Aircraft
% THeight = getTerrainHeight ( % dirFrom ) ;
% THeightCons = % THeight + 150 ;
//Consider wartower
if ( ! $ TWM : : PlayingWarTower ) {
if ( ( % THeightCons ) < = 5 & & ( % THeightCons ) > - 200 ) {
//baaaaaaad
% NewZ = % THeight + 150 ; //give us the perfect height
}
else {
//fine
% NewZ = getWord ( % dirFrom , 2 ) + 150 ;
}
}
% CallPos = getWords ( % dirFrom , 0 , 1 ) SPC % NewZ ;
% Bomber1 = new FlyingVehicle ( ) {
dataBlock = BomberFlyer ;
position = % callPos ;
team = % CallerClient . team ;
} ;
% Bomber1 . bombs = 25 ;
MissionCleanup . add ( % Bomber1 ) ;
//Impulse the bombers
SlthBomberImpulse ( % Bomber1 , % position , % CallerClient ) ;
% Bomber1 . setCloaked ( true ) ;
% Bomber1 . schedule ( 30000 , "Delete" ) ;
% strikePos = getWords ( % position , 0 , 1 ) SPC ( getWord ( % position , 2 ) + 150 ) ;
ConstantBomberTurningLoop ( % Bomber1 , % strikePos ) ;
}
2014-08-02 22:12:19 +00:00
function SlthBomberImpulse ( % obj , % pos , % cl ) {
if ( ! isObject ( % obj ) ) {
2014-02-26 19:54:04 +00:00
return ;
}
2014-08-02 22:12:19 +00:00
if ( vectorDist ( % obj . getPosition ( ) , % pos ) > 600 ) {
if ( vectorLen ( % obj . getVelocity ( ) ) < 500 ) {
% obj . applyImpulse ( % obj . getPosition ( ) , vectorScale ( % obj . getForwardVector ( ) , 2200 * 1.3 ) ) ;
}
}
//in range.. BOMB EM
else {
% obj . applyImpulse ( % obj . getPosition ( ) , vectorScale ( % obj . getForwardVector ( ) , 1700 ) ) ;
AirstrikeDropBombs ( % obj , % pos , % cl ) ;
}
schedule ( 500 , 0 , "SlthBomberImpulse" , % obj , % pos , % cl ) ;
2014-02-26 19:54:04 +00:00
}
//--------------------------------------
// Artillery
//--------------------------------------
datablock GrenadeProjectileData ( AStrikeColliderShell ) {
projectileShapeName = "grenade_projectile.dts" ;
emitterDelay = - 1 ;
directDamage = 0.0 ;
hasDamageRadius = true ;
indirectDamage = 3.6 ;
damageRadius = 25.0 ;
radiusDamageType = $ DamageType : : Bomb ;
kickBackStrength = 500 ;
explosion = "MiniProtonColliderExplosion" ;
velInheritFactor = 0.0 ;
splash = GrenadeSplash ;
baseEmitter = GrenadeBubbleEmitter ;
bubbleEmitter = GrenadeBubbleEmitter ;
grenadeElasticity = 0.0 ;
grenadeFriction = 0.3 ;
armingDelayMS = - 1 ;
gravityMod = 1.0 ;
muzzleVelocity = 225.0 ;
2014-08-02 22:12:19 +00:00
drag = 0.1 ;
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
sound = MortarTurretProjectileSound ;
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
hasLight = true ;
lightRadius = 3 ;
lightColor = "0.05 0.2 0.05" ;
} ;
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
function Artillery ( % CallerClient , % position ) {
% CallerClient . OnUseKillstreak ( 12 ) ;
% CallerClient . TWM2Core . ArtyCalls + + ;
UpdateSWBeaconFile ( % CallerClient , "Artillery" ) ;
2014-02-26 19:54:04 +00:00
if ( ServerReturnMonthDate ( ) $ = "1221" ) {
CompleteNWChallenge ( % CallerClient , "SoulsticeBombard" ) ;
}
% mainUpPos = vectoradd ( % position , "0 0 400" ) ; // main pos
2014-08-02 22:12:19 +00:00
for ( % i = 0 ; % i < 25 ; % i + + ) {
2014-02-26 19:54:04 +00:00
schedule ( 350 * % i , 0 , MessageAll , ' msgFiah ' , "~wfx/powered/turret_mortar_fire.wav" ) ;
% mainUpPos = vectoradd ( % mainUpPos , "0 0 " @ ( 300 + ( % i * 75 ) ) @"" ) ; //increment by 100 each time
% final = vectoradd ( % mainUpPos , GetRandomPosition ( 30 , 1 ) ) ;
% Shell1 = new GrenadeProjectile ( ) {
dataBlock = AStrikeColliderShell ;
initialPosition = % final ;
initialDirection = "0 0 -5" ; // this will hit first
} ;
% Shell1 . sourceObject = % CallerClient . player ;
}
}
function Nuke ( % CallerClient , % position ) {
awardClient ( % callerClient , "24" ) ;
if ( ServerReturnMonthDate ( ) $ = "0101" ) {
CompleteNWChallenge ( % CallerClient , "NewYears" ) ;
}
2014-08-02 22:12:19 +00:00
% CallerClient . OnUseKillstreak ( 14 ) ;
% CallerClient . TWM2Core . NukeCalls + + ;
UpdateSWBeaconFile ( % CallerClient , "Nuke" ) ;
2014-02-26 19:54:04 +00:00
% mainUpPos = vectoradd ( % position , "0 0 400" ) ; // main pos
2014-08-02 22:12:19 +00:00
% Shell1 = new SeekerProjectile ( ) {
dataBlock = ShoulderNuclear ;
initialPosition = % mainUpPos ;
initialDirection = "0 0 -5" ; // this will hit first
} ;
% Shell1 . sourceObject = % CallerClient . player ;
2014-02-26 19:54:04 +00:00
}
//this one functions for gunship helicopters and harriers
function MakeTheHeli2 ( % cl , % harrier ) {
if ( % harrier $ = "" ) {
% harrier = 0 ;
}
if ( ! % harrier ) {
% Heli = new FlyingVehicle ( ) {
dataBlock = GunshipHelicopter ;
position = VectorAdd ( VectorAdd ( getRandomPosition ( 250 , 1 ) , "500 0 150" ) , % cl . player . getPosition ( ) ) ;
team = % cl . team ;
} ;
MissionCleanup . add ( % Heli ) ;
% Heli . doneAttack = 0 ;
//
% Heli . team = % cl . team ;
% heli . canFireMissiles = 1 ;
% heli . Targeting = GunshipHeliScan ( % heli ) ;
schedule ( 60000 , 0 , "EndHeli" , % Heli ) ;
}
else {
% Heli = new FlyingVehicle ( ) {
dataBlock = Harrier ;
position = VectorAdd ( VectorAdd ( getRandomPosition ( 250 , 1 ) , "500 0 150" ) , % cl . player . getPosition ( ) ) ;
team = % cl . team ;
} ;
MissionCleanup . add ( % Heli ) ;
% Heli . doneAttack = 0 ;
//
% Heli . team = % cl . team ;
% heli . Targeting = HeliScan ( % heli ) ;
schedule ( 60000 , 0 , "EndHeli" , % Heli ) ;
}
}
function GunshipHeliScan ( % heli ) {
//echo("scan begin");
if ( ! isObject ( % heli ) ) {
//echo("no heli");
return ;
}
if ( % heli . doneAttack = = 1 ) {
//echo("done attacking");
return ;
}
InitContainerRadiusSearch ( % heli . getposition ( ) , 9999 , $ TypeMasks : : PlayerObjectType ) ;
while ( ( % target = containerSearchNext ( ) ) ! = 0 ) {
//echo("target "@%target@"");
if ( % target . team ! = % heli . team ) {
//echo("lock");
GunshipHeliBeginAttack ( % heli , % target ) ;
return ;
}
}
//echo("no targs");
% heli . Targeting = schedule ( 500 , 0 , "GunshipHeliScan" , % heli ) ;
}
function HeliUseMissiles ( % heli , % target ) {
if ( ! isobject ( % heli ) ) {
return ;
}
if ( ! isObject ( % target ) | | % target . getState ( ) $ = "Dead" ) {
return ;
}
% clpos = % target . getPosition ( ) ;
% num = getRandom ( 250 , 1000 ) ;
% vec = vectorsub ( VectorAdd ( % clpos , "0 0 2.2" ) , % heli . turretObject . getMuzzlePoint ( 0 ) ) ;
% vec = vectoradd ( % vec , vectorscale ( % target . getvelocity ( ) , vectorlen ( % vec ) / % num ) ) ;
//
% p = new SeekerProjectile ( ) { //TWM2 Sniper zombies use M1 Snipers :P
dataBlock = HornetStrikeMissile ;
initialDirection = % vec ;
initialPosition = % heli . turretObject . getMuzzlePoint ( 0 ) ;
sourceObject = % heli ;
} ;
ServerPlay3d ( EscapePodLaunchSound , % heli . getPosition ( ) ) ;
ServerPlay3d ( EscapePodLaunchSound2 , % heli . getPosition ( ) ) ;
}
function ResetHeliMissiles ( % heli ) {
% heli . canFireMissiles = 1 ;
}
function GunshipHeliBeginAttack ( % heli , % target ) {
2014-08-02 22:12:19 +00:00
% pos = % heli . getworldboxcenter ( ) ;
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
if ( ! isobject ( % heli ) ) {
return ;
}
if ( ! isObject ( % target ) | | % target . getState ( ) $ = "Dead" ) {
//echo("dead target");
% heli . Targeting = schedule ( 500 , 0 , "GunshipHeliScan" , % heli ) ;
return ;
}
% clpos = % target . getPosition ( ) ;
if ( % heli . canFireMissiles ) {
HeliUseMissiles ( % heli , % target ) ;
schedule ( 750 , 0 , "HeliUseMissiles" , % heli , % target ) ;
schedule ( 1500 , 0 , "HeliUseMissiles" , % heli , % target ) ;
% heli . canFireMissiles = 0 ;
schedule ( 25000 , 0 , "ResetHeliMissiles" , % heli ) ;
}
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
schedule ( 500 , 0 , "GunshipHeliBeginAttack" , % heli , % target ) ;
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
if ( vectorDist ( % clpos , % pos ) < 125 ) {
return ; //no movement needed...
}
% vector = vectorNormalize ( vectorAdd ( vectorSub ( % clpos , % pos ) , "50 0 100" ) ) ;
% v1 = getword ( % vector , 0 ) ;
% v2 = getword ( % vector , 1 ) ;
% nv1 = % v2 ;
% nv2 = ( % v1 * - 1 ) ;
% none = 0 ;
% vector2 = % nv1 @" " @ % nv2 @" 0" ;
% heli . setRotation ( fullrot ( "0 0 0" , % vector2 ) ) ;
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
% moveMult = 1535 ;
% vector = vectorscale ( % vector , % moveMult ) ;
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
% x = Getword ( % vector , 0 ) ;
% y = Getword ( % vector , 1 ) ;
% z = Getword ( % vector , 2 ) ;
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
% vector = % x @" " @ % y @" " @ % z @"" ;
% heli . applyImpulse ( % pos , % vector ) ;
2014-02-26 19:54:04 +00:00
}
function HarrierAirstrike ( % CallerClient , % position , % dirFrom ) {
% CallerClient . OnUseKillstreak ( 5 ) ;
% CallerClient . TWM2Core . HarrierCalls + + ;
UpdateSWBeaconFile ( % CallerClient , "HarrierAirStrike" ) ;
//new stuff TWM2 2.6
//%dirFrom = Spawn Position of Aircraft
% THeight = getTerrainHeight ( % dirFrom ) ;
% THeightCons = % THeight + 150 ;
//Consider wartower
if ( ! $ TWM : : PlayingWarTower ) {
if ( ( % THeightCons ) < = 5 & & ( % THeightCons ) > - 200 ) {
//baaaaaaad
% NewZ = % THeight + 150 ; //give us the perfect height
}
else {
//fine
% NewZ = getWord ( % dirFrom , 2 ) + 150 ;
}
}
% CallPos = getWords ( % dirFrom , 0 , 1 ) SPC % NewZ ;
% Bomber1 = new FlyingVehicle ( ) {
dataBlock = Harrier ;
position = VectorAdd ( % CallPos , "35 -50 10" ) ;
team = % CallerClient . team ;
2014-08-02 22:12:19 +00:00
} ;
% Bomber1 . bombs = 3 ;
% Bomber2 = new FlyingVehicle ( ) {
dataBlock = Harrier ;
position = VectorAdd ( % CallPos , "-35 -50 -10" ) ;
team = % CallerClient . team ;
} ;
% Bomber2 . bombs = 3 ;
MissionCleanup . add ( % Bomber1 ) ;
MissionCleanup . add ( % Bomber2 ) ;
//Impulse the bombers
HarrierBomberImpulse ( % Bomber1 , % position , % CallerClient , 3 ) ;
HarrierBomberImpulse ( % Bomber2 , % position , % CallerClient , 3 ) ;
//
% Bomber1 . schedule ( 30000 , "Delete" ) ;
% Bomber2 . schedule ( 30000 , "Delete" ) ;
//
% strikePos = getWords ( % position , 0 , 1 ) SPC ( getWord ( % position , 2 ) + 150 ) ;
ConstantBomberTurningLoop ( % Bomber1 , % strikePos ) ;
ConstantBomberTurningLoop ( % Bomber2 , % strikePos ) ;
//
//The Remaining one
schedule ( 8000 , 0 , MakeTheHeli2 , % CallerClient , 1 ) ;
}
2014-02-26 19:54:04 +00:00
2014-08-02 22:12:19 +00:00
function HarrierBomberImpulse ( % obj , % pos , % cl , % ammoleft ) {
if ( ! isObject ( % obj ) ) {
return ;
}
//not there yet
if ( vectorDist ( % obj . getPosition ( ) , % pos ) > 620 ) {
if ( vectorLen ( % obj . getVelocity ( ) ) < 615 ) {
% obj . applyImpulse ( % obj . getPosition ( ) , vectorScale ( % obj . getForwardVector ( ) , 2500 * 1.3 ) ) ;
}
}
//in range.. BOMB EM
else {
% obj . applyImpulse ( % obj . getPosition ( ) , vectorScale ( % obj . getForwardVector ( ) , 1750 ) ) ;
if ( % ammoleft > 0 ) {
AirstrikeDropBombs ( % obj , % pos , % cl ) ;
% ammoleft - - ;
}
}
schedule ( 500 , 0 , "HarrierBomberImpulse" , % obj , % pos , % cl , % ammoleft ) ;
2014-02-26 19:54:04 +00:00
}
function FissionBombLoop ( % client , % caller , % strikePos , % ticks ) {
if ( % ticks = = 10 ) {
schedule ( 500 , 0 , spawnprojectile , VegenorFireMeteor , GrenadeProjectile , vectorAdd ( % strikePos , "0 0 700" ) , "0 0 -1" ) ;
}
if ( % ticks > 0 ) {
CenterPrintAll ( "FISSION BOMB IMPACT IN: " @ % ticks @"." , 1 , 1 ) ;
messageAll ( ' msgSiren ' , "~wfx/misc/red_alert_short.wav" ) ;
schedule ( 1000 , 0 , "FissionBombLoop" , % client , % caller , % strikePos , % ticks - - ) ;
return ;
}
else {
$ TeamScore [ % client . team ] + = 99999 ;
% client . score + = 999999 ;
if ( $ FissionEndsGame ) {
Game . schedule ( 5500 , GameOver ) ;
schedule ( 5500 , 0 , cycleMissions ) ;
}
Aidpulse ( % strikePos , % caller , 5 ) ;
return ;
}
}
//
//EMIITAHS and PARTICLES
2014-08-02 22:12:19 +00:00
datablock ShockwaveData ( HyperDevProj2Shockwave ) {
2014-02-26 19:54:04 +00:00
width = 10 ;
numSegments = 60 ;
numVertSegments = 1 ;
velocity = 0 ;
acceleration = 0 ;
lifetimeMS = 3000 ;
height = 0.1 ;
is2D = false ;
texture [ 0 ] = "special/shockwave4" ;
texture [ 1 ] = "special/gradient" ;
texWrap = 2.0 ;
times [ 0 ] = 0.0 ;
times [ 1 ] = 0.5 ;
times [ 2 ] = 1.0 ;
colors [ 0 ] = "0.2 0.2 1 1" ;
colors [ 1 ] = "0.2 0.4 1.0 0.50" ;
colors [ 2 ] = "0.2 0.3 1 0.1" ;
mapToTerrain = false ;
orientToNormal = true ;
renderBottom = true ;
} ;
2014-08-02 22:12:19 +00:00
datablock ExplosionData ( HyperDev2SubExplosion1 ) {
2014-02-26 19:54:04 +00:00
explosionShape = "disc_explosion.dts" ;
faceViewer = true ;
delayMS = 100 ;
offset = 5.0 ;
playSpeed = 1.5 ;
sizes [ 0 ] = "1 1 1" ;
sizes [ 1 ] = "1 1 1" ;
times [ 0 ] = 0.0 ;
times [ 1 ] = 1.0 ;
} ;
2014-08-02 22:12:19 +00:00
datablock ExplosionData ( HyperDev2SubExplosion2 ) {
2014-02-26 19:54:04 +00:00
explosionShape = "disc_explosion.dts" ;
faceViewer = true ;
delayMS = 50 ;
offset = 5.0 ;
playSpeed = 1.0 ;
sizes [ 0 ] = "5.0 5.0 5.0" ;
sizes [ 1 ] = "5.0 5.0 5.0" ;
times [ 0 ] = 0.0 ;
times [ 1 ] = 1.0 ;
} ;
2014-08-02 22:12:19 +00:00
datablock ExplosionData ( HyperDev2SubExplosion3 ) {
2014-02-26 19:54:04 +00:00
explosionShape = "disc_explosion.dts" ;
faceViewer = true ;
delayMS = 0 ;
offset = 0.0 ;
playSpeed = 0.7 ;
sizes [ 0 ] = "10.0 10.0 10.0" ;
sizes [ 1 ] = "20.0 20.0 20.0" ;
times [ 0 ] = 0.0 ;
times [ 1 ] = 1.0 ;
} ;
2014-08-02 22:12:19 +00:00
datablock AudioProfile ( HyperDevCannonExplosionSound2 ) {
filename = "fx/explosions/explosion.xpl23.wav" ;
description = AudioBIGExplosion3d ;
2014-02-26 19:54:04 +00:00
preload = true ;
} ;
2014-08-02 22:12:19 +00:00
datablock ExplosionData ( HyperDevCannonExplosion2 ) {
2014-02-26 19:54:04 +00:00
soundProfile = HyperDevCannonExplosionSound2 ;
shockwave [ 0 ] = HyperDevCannonShockwave2 ;
shockwaveOnTerrain [ 0 ] = true ;
subExplosion [ 0 ] = HyperDev2SubExplosion1 ;
subExplosion [ 1 ] = HyperDev2SubExplosion2 ;
subExplosion [ 2 ] = HyperDev2SubExplosion3 ;
subExplosion [ 3 ] = SatchelSubExplosion ;
subExplosion [ 4 ] = SatchelSubExplosion2 ;
subExplosion [ 5 ] = SatchelSubExplosion3 ;
emitter [ 0 ] = PlasmaBarrelCrescentEmitter ;
emitter [ 1 ] = SatchelSparksEmitter ;
emitter [ 2 ] = SatchelExplosionSmokeEmitter ;
shakeCamera = true ;
camShakeFreq = "8.0 9.0 7.0" ;
camShakeAmp = "100.0 100.0 100.0" ;
camShakeDuration = 1.3 ;
camShakeRadius = 25.0 ;
} ;
datablock ParticleData ( HyperDevSmokeParticle ) {
dragCoeffiecient = 0.0 ;
windCoeffiecient = 0.0 ;
gravityCoefficient = 0.0 ;
inheritedVelFactor = 0.0 ;
lifetimeMS = 1000 ;
lifetimeVarianceMS = 3000 ;
textureName = "skins/mort012" ;
useInvAlpha = false ;
spinRandomMin = 0.0 ;
spinRandomMax = 0.0 ;
colors [ 0 ] = "0.0 1 1 1.0" ;
colors [ 1 ] = "0.0 0 1 1.0" ;
colors [ 2 ] = "0.0 1 0 1.0" ;
sizes [ 0 ] = 6.0 ;
sizes [ 1 ] = 6.0 ;
sizes [ 2 ] = 6.5 ;
times [ 0 ] = 0.0 ;
times [ 1 ] = 0.2 ;
times [ 2 ] = 1.0 ;
} ;
datablock ParticleEmitterData ( HyperDevCannonBaseEmitter ) {
ejectionPeriodMS = 0.2 ;
periodVarianceMS = 1 ;
ejectionVelocity = 25 ;
velocityVariance = 0.0 ;
thetaMin = 0.0 ;
thetaMax = 0.0 ;
particles = "HyperDevSmokeParticle" ;
} ;
2014-08-02 22:12:19 +00:00
datablock ShockwaveData ( HyperDevProjShockwave ) {
2014-02-26 19:54:04 +00:00
width = 7.0 ;
numSegments = 16 ;
numVertSegments = 16 ;
velocity = 5 ;
acceleration = 4.0 ;
lifetimeMS = 1570 ;
height = 3 ;
is2D = false ;
texture [ 0 ] = "special/shockwave5" ;
texture [ 1 ] = "special/lightning1frame2" ;
texWrap = 6.0 ;
times [ 0 ] = 0.0 ;
times [ 1 ] = 0.5 ;
times [ 2 ] = 1.0 ;
colors [ 0 ] = "0.0 0.8 0.8 1.00" ;
colors [ 1 ] = "0.0 0.5 0.7 0.20" ;
colors [ 2 ] = "0.0 0.8 0.5 0.0" ;
mapToTerrain = false ;
orientToNormal = true ;
renderBottom = true ;
} ;
datablock LinearFlareProjectileData ( HyperDevestatorBeam ) {
scale = "15.0 15.0 15.0" ;
faceViewer = false ;
directDamage = 1.0 ;
hasDamageRadius = true ;
indirectDamage = 4.9 ;
damageRadius = 30.0 ;
kickBackStrength = 40000.0 ;
radiusDamageType = $ DamageType : : Explosion ;
explosion [ 0 ] = "HyperDevCannonExplosion2" ;
explosion [ 1 ] = "SatchelMainExplosion" ;
splash = PlasmaSplash ;
baseEmitter = HyperDevCannonBaseEmitter ;
dryVelocity = 500.0 ;
wetVelocity = 200 ;
velInheritFactor = 0.5 ;
fizzleTimeMS = 20000 ;
lifetimeMS = 20000 ;
explodeOnDeath = false ;
reflectOnWaterImpactAngle = 0.0 ;
explodeOnWaterImpact = true ;
deflectionOnWaterImpact = 0.0 ;
fizzleUnderwaterMS = - 1 ;
//activateDelayMS = 100;
activateDelayMS = - 1 ;
size [ 0 ] = 9 ;
size [ 1 ] = 10 ;
size [ 2 ] = 11 ;
numFlares = 400 ;
flareColor = "0.0 1.0 0" ;
flareModTexture = "flaremod" ;
flareBaseTexture = "flarebase" ;
sound = MissileProjectileSound ;
fireSound = PlasmaFireSound ;
wetFireSound = PlasmaFireWetSound ;
hasLight = true ;
lightRadius = 3.0 ;
lightColor = "0 0.75 0.25" ;
} ;
function OrbitalLaserStrike ( % CallerClient , % position ) {
% CallerClient . OnUseKillstreak ( 6 ) ;
% CallerClient . TWM2Core . SatNukeCalls + + ;
UpdateSWBeaconFile ( % obj . client , "SatNuke" ) ;
% p = new LinearFlareProjectile ( ) {
dataBlock = HyperDevestatorBeam ;
initialDirection = "0 0 -10" ;
initialPosition = vectoradd ( % position , "0 0 1500" ) ;
sourceSlot = 4 ;
} ;
% p . sourceObject = % CallerClient . player ;
MissionCleanup . add ( % p ) ;
}
function NapalmHarrierAirstrike ( % CallerClient , % position , % dirFrom ) {
% CallerClient . OnUseKillstreak ( 5 ) ;
% CallerClient . TWM2Core . NapalmHarrierCalls + + ;
UpdateSWBeaconFile ( % CallerClient , "NapalmHarrierAirStrike" ) ;
//new stuff TWM2 2.6
//%dirFrom = Spawn Position of Aircraft
% THeight = getTerrainHeight ( % dirFrom ) ;
% THeightCons = % THeight + 150 ;
//Consider wartower
if ( ! $ TWM : : PlayingWarTower ) {
if ( ( % THeightCons ) < = 5 & & ( % THeightCons ) > - 200 ) {
//baaaaaaad
% NewZ = % THeight + 150 ; //give us the perfect height
}
else {
//fine
% NewZ = getWord ( % dirFrom , 2 ) + 150 ;
}
}
% CallPos = getWords ( % dirFrom , 0 , 1 ) SPC % NewZ ;
% Bomber1 = new FlyingVehicle ( ) {
dataBlock = StrikeFlyer ;
position = VectorAdd ( % CallPos , "50 0 10" ) ;
team = % CallerClient . team ;
} ;
% Bomber2 = new FlyingVehicle ( ) {
dataBlock = StrikeFlyer ;
position = VectorAdd ( % CallPos , "-50 0 10" ) ;
team = % CallerClient . team ;
} ;
% Bomber3 = new FlyingVehicle ( ) {
dataBlock = StrikeFlyer ;
position = VectorAdd ( % CallPos , "0 0 -10" ) ;
team = % CallerClient . team ;
} ;
MissionCleanup . add ( % Bomber1 ) ;
MissionCleanup . add ( % Bomber2 ) ;
MissionCleanup . add ( % Bomber3 ) ;
//Impulse the bombers
NapalmHarrierBomberImpulse ( % Bomber1 , % position , % CallerClient , 1 ) ;
NapalmHarrierBomberImpulse ( % Bomber2 , % position , % CallerClient , 1 ) ;
NapalmHarrierBomberImpulse ( % Bomber3 , % position , % CallerClient , 1 ) ;
//
% Bomber1 . schedule ( 30000 , "Delete" ) ;
% Bomber2 . schedule ( 30000 , "Delete" ) ;
% Bomber3 . schedule ( 30000 , "Delete" ) ;
//
% strikePos = getWords ( % position , 0 , 1 ) SPC ( getWord ( % position , 2 ) + 150 ) ;
ConstantBomberTurningLoop ( % Bomber1 , % strikePos ) ;
ConstantBomberTurningLoop ( % Bomber2 , % strikePos ) ;
ConstantBomberTurningLoop ( % Bomber3 , % strikePos ) ;
}
function NapalmHarrierBomberImpulse ( % obj , % pos , % cl , % ammoleft ) {
if ( ! isObject ( % obj ) ) {
return ;
}
//not there yet
if ( vectorDist ( % obj . getPosition ( ) , % pos ) > 600 ) {
if ( vectorLen ( % obj . getVelocity ( ) ) < 500 ) {
% obj . applyImpulse ( % obj . getPosition ( ) , vectorScale ( % obj . getForwardVector ( ) , 2500 * 1.3 ) ) ;
}
}
//in range.. BOMB EM
else {
% obj . applyImpulse ( % obj . getPosition ( ) , vectorScale ( % obj . getForwardVector ( ) , 1750 ) ) ;
if ( % ammoleft > 0 ) {
NapalmAirstrikeDropBombs ( % obj , % pos , % cl ) ;
% ammoleft - - ;
}
}
schedule ( 500 , 0 , "NapalmHarrierBomberImpulse" , % obj , % pos , % cl , % ammoleft ) ;
}
function NapalmAirstrikeDropBombs ( % obj , % pos , % cl ) {
if ( ! isObject ( % obj ) ) {
return ;
}
% p = new ( BombProjectile ) ( ) {
dataBlock = NapalmBomb ;
initialDirection = "0 0 -5" ;
initialPosition = % obj . getPosition ( ) ;
sourceObject = % obj ;
sourceSlot = 0 ;
} ;
MissionCleanup . add ( % p ) ;
% p . spdvec = % obj . getVelocity ( ) ;
% p . theClient = % cl ;
//set the projectile to be owned by the caller
// adds moar kills =-D
if ( isObject ( % cl . player ) ) {
% p . sourceObject = % obj ;
% p . specialKSForm = true ;
% p . sourceVehicleObject = % obj ;
}
}
//FILE STUFF
function UpdateSWBeaconFile ( % client , % SW ) {
% file = "" @ $ TWM : : RanksDirectory @"/" @ % client . guid @"/Saved.TWMSave" ;
% so = % client . TWM2Core ;
switch $ ( % SW ) {
case "UAV" :
//awards
if ( % so . UAVCalls > = 30 ) {
CompleteNWChallenge ( % client , "UAV1" ) ;
}
if ( % so . UAVCalls > = 75 ) {
CompleteNWChallenge ( % client , "UAV2" ) ;
}
if ( % so . UAVCalls > = 150 ) {
CompleteNWChallenge ( % client , "UAV3" ) ;
}
case "AirStrike" :
//awards
if ( % so . AirstrikeCalls > = 25 ) {
CompleteNWChallenge ( % client , "Airstrike1" ) ;
}
if ( % so . AirstrikeCalls > = 65 ) {
CompleteNWChallenge ( % client , "Airstrike2" ) ;
}
if ( % so . AirstrikeCalls > = 125 ) {
CompleteNWChallenge ( % client , "Airstrike3" ) ;
}
case "GM" :
//awards
if ( % so . GMCalls > = 25 ) {
CompleteNWChallenge ( % client , "UAMS1" ) ;
}
if ( % so . GMCalls > = 65 ) {
CompleteNWChallenge ( % client , "UAMS2" ) ;
}
if ( % so . GMCalls > = 125 ) {
CompleteNWChallenge ( % client , "UAMS3" ) ;
}
case "HarbinsWrath" :
//awards
if ( % so . HWCalls > = 15 ) {
CompleteNWChallenge ( % client , "Gunship1" ) ;
}
if ( % so . HWCalls > = 35 ) {
CompleteNWChallenge ( % client , "Gunship2" ) ;
}
if ( % so . HWCalls > = 75 ) {
CompleteNWChallenge ( % client , "Gunship3" ) ;
}
case "AC130" :
//awards
if ( % so . ACCalls > = 15 ) {
CompleteNWChallenge ( % client , "ACGunship1" ) ;
}
if ( % so . ACCalls > = 35 ) {
CompleteNWChallenge ( % client , "ACGunship2" ) ;
}
if ( % so . ACCalls > = 75 ) {
CompleteNWChallenge ( % client , "ACGunship3" ) ;
}
case "Heli" :
//awards
if ( % so . HeliCalls > = 25 ) {
CompleteNWChallenge ( % client , "Helicopter1" ) ;
}
if ( % so . HeliCalls > = 65 ) {
CompleteNWChallenge ( % client , "Helicopter2" ) ;
}
if ( % so . HeliCalls > = 125 ) {
CompleteNWChallenge ( % client , "Helicopter3" ) ;
}
case "HarrierAirStrike" :
//awards
if ( % so . HarrierCalls > = 20 ) {
CompleteNWChallenge ( % client , "Harrier1" ) ;
}
if ( % so . HarrierCalls > = 55 ) {
CompleteNWChallenge ( % client , "Harrier2" ) ;
}
if ( % so . HarrierCalls > = 110 ) {
CompleteNWChallenge ( % client , "Harrier3" ) ;
}
case "NapalmHarrierAirStrike" :
//awards
if ( % so . NapalmHarrierCalls > = 20 ) {
CompleteNWChallenge ( % client , "NapalmHarrier1" ) ;
}
if ( % so . NapalmHarrierCalls > = 55 ) {
CompleteNWChallenge ( % client , "NapalmHarrier2" ) ;
}
if ( % so . NapalmHarrierCalls > = 110 ) {
CompleteNWChallenge ( % client , "NapalmHarrier3" ) ;
}
case "GunshipHeli" :
//awards
if ( % so . GunHeliCalls > = 20 ) {
CompleteNWChallenge ( % client , "GunHeli1" ) ;
}
if ( % so . GunHeliCalls > = 55 ) {
CompleteNWChallenge ( % client , "GunHeli2" ) ;
}
if ( % so . GunHeliCalls > = 110 ) {
CompleteNWChallenge ( % client , "GunHeli3" ) ;
}
case "ChopperGunner" :
//awards
if ( % so . CGCalls > = 15 ) {
CompleteNWChallenge ( % client , "Apache1" ) ;
}
if ( % so . CGCalls > = 35 ) {
CompleteNWChallenge ( % client , "Apache2" ) ;
}
if ( % so . CGCalls > = 75 ) {
CompleteNWChallenge ( % client , "Apache3" ) ;
}
case "Artillery" :
//awards
if ( % so . ArtyCalls > = 10 ) {
CompleteNWChallenge ( % client , "Centaur1" ) ;
}
if ( % so . ArtyCalls > = 25 ) {
CompleteNWChallenge ( % client , "Centaur2" ) ;
}
if ( % so . ArtyCalls > = 50 ) {
CompleteNWChallenge ( % client , "Centaur3" ) ;
}
case "StealthAirStrike" :
//awards
if ( % so . SlthAirstrikeCalls > = 20 ) {
CompleteNWChallenge ( % client , "SBomber1" ) ;
}
if ( % so . SlthAirstrikeCalls > = 50 ) {
CompleteNWChallenge ( % client , "SBomber2" ) ;
}
if ( % so . SlthAirstrikeCalls > = 100 ) {
CompleteNWChallenge ( % client , "SBomber3" ) ;
}
case "Nuke" :
//awards
if ( % so . NukeCalls > = 5 ) {
CompleteNWChallenge ( % client , "Nuke1" ) ;
}
if ( % so . NukeCalls > = 10 ) {
CompleteNWChallenge ( % client , "Nuke2" ) ;
}
if ( % so . NukeCalls > = 25 ) {
CompleteNWChallenge ( % client , "Nuke3" ) ;
}
case "Fission" :
//awards
if ( % so . FissionCalls > = 1 ) {
CompleteNWChallenge ( % client , "Fission1" ) ;
}
if ( % so . FissionCalls > = 2 ) {
CompleteNWChallenge ( % client , "Fission2" ) ;
}
if ( % so . FissionCalls > = 5 ) {
CompleteNWChallenge ( % client , "Fission3" ) ;
}
case "SatNuke" :
//awards
if ( % so . SatNukeCalls > = 25 ) {
CompleteNWChallenge ( % client , "SatNuke1" ) ;
}
if ( % so . SatNukeCalls > = 65 ) {
CompleteNWChallenge ( % client , "SatNuke2" ) ;
}
if ( % so . SatNukeCalls > = 125 ) {
CompleteNWChallenge ( % client , "SatNuke3" ) ;
}
case "EMP" :
//awards
if ( % so . EMPCalls > = 5 ) {
CompleteNWChallenge ( % client , "EMP1" ) ;
}
if ( % so . EMPCalls > = 10 ) {
CompleteNWChallenge ( % client , "EMP2" ) ;
}
if ( % so . EMPCalls > = 25 ) {
CompleteNWChallenge ( % client , "EMP3" ) ;
}
case "ZBomb" :
//nothing here.... move along
}
//
% scriptController = % client . TWM2Core ;
% fileDir = "" @ $ TWM : : RanksDirectory @"/" @ % client . guid @"/Saved.TWMSave" ;
% scriptController . save ( % fileDir ) ;
}