//**************************************************************
// VEHICLE CHARACTERISTICS
//**************************************************************

datablock SensorData(AWACSSensor)
{
   detects = true;
   detectsUsingLOS = true;
   detectsPassiveJammed = false;
   detectsActiveJammed = false;
   detectsCloaked = false;
   detectionPings = true;
   detectRadius = 1750;
};

datablock FlyingVehicleData(AWACS) : BomberDamageProfile
{
   spawnOffset = "0 0 2";
   canControl = false;
   catagory = "Vehicles";
   shapeFile = "vehicle_air_bomber.dts";
   multipassenger = true;
   computeCRC = true;

   weaponNode = 1;

   debrisShapeName = "vehicle_air_bomber.dts";
   debris = MeShapeDebris;
   renderWhenDestroyed = false;

   drag    = 0.2;
   density = 1.0;

   mountPose[0] = sitting;
   mountPose[1] = sitting;
   numMountPoints = 3;
   isProtectedMountPoint[0] = true;
   isProtectedMountPoint[1] = true;
   isProtectedMountPoint[2] = false;

   cameraDefaultFov = 90.0;
   cameraMinFov = 5.0;
   cameraMaxFov = 120.0;

   cameraMaxDist = 22;
   cameraOffset = 5;
   cameraLag = 1.0;
   explosion = MFVehicleExplosion;
	explosionDamage = 1.5;
	explosionRadius = 20.0;

   maxDamage = 5.0;     // Total health
   destroyedLevel = 5.0;   // Damage textures show up at this health level

   HDAddMassLevel = 3.5;
   HDMassImage = HFlyerHDMassImage;

   isShielded = false;
   energyPerDamagePoint = 150;
   maxEnergy = 400;      // Afterburner and any energy weapon pool
   minDrag = 60;           // Linear Drag (eventually slows you down when not thrusting...constant drag)
   rotationalDrag = 1800;        // Angular Drag (dampens the drift after you stop moving the mouse...also tumble drag)
   rechargeRate = 0.8;

   // Auto stabilize speed
   maxAutoSpeed = 15;       // Autostabilizer kicks in when less than this speed. (meters/second)
   autoAngularForce = 1500;      // Angular stabilizer force (this force levels you out when autostabilizer kicks in)
   autoLinearForce = 300;        // Linear stabilzer force (this slows you down when autostabilizer kicks in)
   autoInputDamping = 0.95;      // Dampen control input so you don't whack out at very slow speeds

   // Maneuvering
   maxSteeringAngle = 8;    // Max radiens you can rotate the wheel. Smaller number is more maneuverable.
   horizontalSurfaceForce = 5;   // Horizontal center "wing" (provides "bite" into the wind for climbing/diving and turning)
   verticalSurfaceForce = 8;     // Vertical center "wing" (controls side slip. lower numbers make MORE slide.)
   maneuveringForce = 5500;      // Horizontal jets (W,S,D,A key thrust)
   steeringForce = 800;         // Steering jets (force applied when you move the mouse)
   steeringRollForce = 3000;      // Steering jets (how much you heel over when you turn)
   rollForce = 1;                // Auto-roll (self-correction to right you after you roll/invert)
   hoverHeight = 4;        // Height off the ground at rest
   createHoverHeight = 3;  // Height off the ground when created
   maxForwardSpeed = 130;  // speed in which forward thrust force is no longer applied (meters/second)

   // Turbo Jet
   jetForce = 5000;      // Afterburner thrust (this is in addition to normal thrust)
   minJetEnergy = 40.0;     // Afterburner can't be used if below this threshhold.
   jetEnergyDrain = 2.5;       // Energy use of the afterburners (low number is less drain...can be fractional)
   vertThrustMultiple = 3.0;

   dustEmitter = LargeVehicleLiftoffDustEmitter;
   triggerDustHeight = 4.0;
   dustHeight = 2.0;

   damageEmitter[0] = MFLightDamageSmoke;
   damageEmitter[1] = MFHeavyDamageSmoke;
   damageEmitter[2] = MeDamageBubbles;
   damageEmitterOffset[0] = "3.0 -3.0 0.0 ";
   damageEmitterOffset[1] = "-3.0 -3.0 0.0 ";
   damageLevelTolerance[0] = 0.3;
   damageLevelTolerance[1] = 0.7;
   numDmgEmitterAreas = 2;

   // Rigid body
   mass = 350;        // Mass of the vehicle
   bodyFriction = 0;     // Don't mess with this.
   bodyRestitution = 0.5;   // When you hit the ground, how much you rebound. (between 0 and 1)
   minRollSpeed = 0;     // Don't mess with this.
   softImpactSpeed = 20;       // Sound hooks. This is the soft hit.
   hardImpactSpeed = 25;    // Sound hooks. This is the hard hit.

   // Ground Impact Damage (uses DamageType::Ground)
   minImpactSpeed = 20;      // If hit ground at speed above this then it's an impact. Meters/second
   speedDamageScale = 0.060;

   // Object Impact Damage (uses DamageType::Impact)
   collDamageThresholdVel = 25;
   collDamageMultiplier   = 0.020;

   //
   minTrailSpeed = 15;      // The speed your contrail shows up at.
   trailEmitter = ContrailEmitter;
   forwardJetEmitter = FlyerJetEmitter;
   downJetEmitter = FlyerJetEmitter;

   //
   jetSound = BomberFlyerThrustSound;
   engineSound = BomberFlyerEngineSound;
   softImpactSound = SoftImpactSound;
   hardImpactSound = HardImpactSound;
   //wheelImpactSound = WheelImpactSound;

   //
   softSplashSoundVelocity = 15.0;
   mediumSplashSoundVelocity = 20.0;
   hardSplashSoundVelocity = 30.0;
   exitSplashSoundVelocity = 10.0;

   exitingWater      = VehicleExitWaterHardSound;
   impactWaterEasy   = VehicleImpactWaterSoftSound;
   impactWaterMedium = VehicleImpactWaterMediumSound;
   impactWaterHard   = VehicleImpactWaterHardSound;
   waterWakeSound    = VehicleWakeHardSplashSound;

   minMountDist = 7;

   splashEmitter[0] = VehicleFoamDropletsEmitter;
   splashEmitter[1] = VehicleFoamEmitter;

   shieldImpact = VehicleShieldImpact;

   cmdCategory = "Tactical";
   cmdIcon = CMDFlyingBomberIcon;
   cmdMiniIconName = "commander/MiniIcons/com_bomber_grey";
   targetNameTag = 'C-410';
   targetTypeTag = 'AWACS';
   sensorData = AWACSSensor;
   sensorRadius = AWACSSensor.detectRadius;
   sensorColor = "9 9 255";

   checkRadius = 7.1895;
   observeParameters = "1 10 10";
   shieldEffectScale = "0.75 0.975 0.375";
   showPilotInfo = 1;

   max[PlasmaAmmo] = 50;

   replaceTime = 20;
};

datablock BombProjectileData(BuoyBomb)
{
   projectileShapeName  = "nexuscap.dts";
   emitterDelay         = -1;
   directDamage         = 0.0;
   hasDamageRadius      = true;
   indirectDamage       = 0.0;
   damageRadius         = 0;
   radiusDamageType     = $DamageType::BomberBombs;
   kickBackStrength     = 0;

   explosion            = "ChaingunExplosion";
   velInheritFactor     = 1.0;

   grenadeElasticity    = 0.25;
   grenadeFriction      = 0.4;
   armingDelayMS        = 2000;
   muzzleVelocity       = 0.1;
   drag                 = 0.3;

   minRotSpeed          = "0.0 0.0 0.0";
   maxRotSpeed          = "0.0 0.0 10.0";
   scale                = "1.0 1.0 1.0";

//   sound                = BomberBombProjectileSound;
};

datablock TurretImageData(AWACSTorp)
{
   className = WeaponImage;
   shapeFile = "turret_muzzlepoint.dts";
   offset = "0 0 0";
   item      = Chaingun;
   projectile = shrikeBomb;
   projectileType = BombProjectile;
   emap = true;

   mountPoint = 1;
   usesEnergy = true;
   useMountEnergy = true;
   useCapacitor = true;
   minEnergy = 5;
   fireEnergy = 5.0;

   stateName[0] = "Activate";
   stateTransitionOnTimeout[0] = "ActivateReady";
   stateTimeoutValue[0] = 0.5;
   stateSequence[0] = "Activate";
   
   stateName[1] = "ActivateReady";
   stateTransitionOnLoaded[1] = "Ready";
   stateTransitionOnNoAmmo[1] = "NoAmmo";

   stateName[2] = "Ready";
   stateTransitionOnNoAmmo[2] = "NoAmmo";
   stateTransitionOnTriggerDown[2] = "Fire";

   stateName[3] = "Fire";
   stateTransitionOnTimeout[3] = "Reload";
   stateTimeoutValue[3] = 0.1;
   stateFire[3] = true;
   stateAllowImageChange[3] = false;
   stateScript[3] = "onFire";
   stateEmitterTime[3] = 0.2;

   stateName[4] = "Reload";
   stateTransitionOnNoAmmo[4] = "NoAmmo";
   stateTransitionOnTimeout[4] = "Ready";
   stateTimeoutValue[4] = 4;
   stateAllowImageChange[4] = false;

   stateName[5] = "NoAmmo";
   stateTransitionOnAmmo[5] = "Reload";
   stateSequence[5] = "NoAmmo";
   stateTransitionOnTriggerDown[5] = "DryFire";

   stateName[6] = "DryFire";
   stateSound[6] = MissileReloadSound;
   stateTimeoutValue[6] = 1.5;
   stateTransitionOnTimeout[6] = "NoAmmo";
};

datablock TurretImageData(AWACSBuoy)
{
   className = WeaponImage;
   shapeFile = "turret_muzzlepoint.dts";
   offset = "0 0 0";
   item      = Chaingun;
   projectile = BuoyBomb;
   projectileType = BombProjectile;
   emap = true;

   mountPoint = 1;
   usesEnergy = true;
   useMountEnergy = true;
   useCapacitor = true;
   minEnergy = 5;
   fireEnergy = 5.0;

   stateName[0] = "Activate";
   stateTransitionOnTimeout[0] = "ActivateReady";
   stateTimeoutValue[0] = 0.5;
   stateSequence[0] = "Activate";
   
   stateName[1] = "ActivateReady";
   stateTransitionOnLoaded[1] = "Ready";
   stateTransitionOnNoAmmo[1] = "NoAmmo";

   stateName[2] = "Ready";
   stateTransitionOnNoAmmo[2] = "NoAmmo";
   stateTransitionOnTriggerDown[2] = "Fire";

   stateName[3] = "Fire";
   stateTransitionOnTimeout[3] = "Reload";
   stateTimeoutValue[3] = 0.1;
   stateFire[3] = true;
   stateAllowImageChange[3] = false;
   stateScript[3] = "onFire";
   stateEmitterTime[3] = 0.2;

   stateName[4] = "Reload";
   stateTransitionOnNoAmmo[4] = "NoAmmo";
   stateTransitionOnTimeout[4] = "Ready";
   stateTimeoutValue[4] = 4;
   stateAllowImageChange[4] = false;

   stateName[5] = "NoAmmo";
   stateTransitionOnAmmo[5] = "Reload";
   stateSequence[5] = "NoAmmo";
   stateTransitionOnTriggerDown[5] = "DryFire";

   stateName[6] = "DryFire";
   stateSound[6] = MissileReloadSound;
   stateTimeoutValue[6] = 1.5;
   stateTransitionOnTimeout[6] = "NoAmmo";
};

datablock StaticShapeData(SonarBuoy) : StaticShapeDamageProfile {
	className = "teleport";
	shapeFile = "nexuscap.dts";

	maxDamage = 2.00;
	destroyedLevel = 2.00;
	disabledLevel = 1.35;

	isShielded = true;
	energyPerDamagePoint = 250;
	maxEnergy = 100;
	rechargeRate = 1;

	explosion = ShapeExplosion;
	expDmgRadius = 18.0;
	expDamage = 0.3;
	expImpulse = 200.0;

	dynamicType = $TypeMasks::StationObjectType;
	deployedObject = true;
	cmdCategory = "DSupport";
	cmdIcon = CMDSwitchIcon;
	cmdMiniIconName = "commander/MiniIcons/com_switch_grey";
	targetNameTag = 'Deployed';
	targetTypeTag = 'Sonar Buoy';

	debrisShapeName = "debris_generic.dts";
	debris = DeployableDebris;

	heatSignature = 0;
	needsPower = false;

	humSound = SensorHumSound;
	pausePowerThread = true;
	sensorData = TelePadBaseSensorObj;
	sensorRadius = TelePadBaseSensorObj.detectRadius;
	sensorColor = "0 212 45";
	firstPersonOnly = true;
};


datablock ShapeBaseImageData(Rearmer)
{
   mountPoint = 7;
   className = WeaponImage;
   shapeFile = "deploy_ammo.dts";
   offset = "0 -35 -8";
   rotation = "1 0 0 -120";
   emap = true;

   stateName[0]                     = "Activate";
   stateSequence[0]                 = "Deploy";
};

function AWACS::onAdd(%this, %obj)
{
   Parent::onAdd(%this, %obj);

   %obj.setInventory(PlasmaAmmo, 50);

   %turret = TurretData::create(BomberTurret);
   MissionCleanup.add(%turret);
   %turret.team = %obj.teamBought;
   %turret.setSelfPowered();
   %turret.selectedWeapon = 1;
   %obj.mountObject(%turret, 10);
   %turret.mountImage(GST1Param, 0);
   %turret.mountImage(APCTurretBarrel, 2);
   %turret.mountImage(AWACSTorp, 4);
   %turret.mountImage(AWACSBuoy, 6);
   %obj.turretObject = %turret;
   %turret.setCapacitorRechargeRate( %turret.getDataBlock().capacitorRechargeRate );
   %turret.vehicleMounted = %obj;
   %turret.setAutoFire(false);
   %turret.mountobj = %obj;
   %turret.team = %obj.team;
   setTargetSensorGroup(%turret.getTarget(), %turret.team);
   setTargetNeverVisMask(%turret.getTarget(), 0xffffffff);
}

function AWACS::playerMounted(%data, %obj, %player, %node)
{
//[[CHANGE]]
   if (%obj.clientControl)
       serverCmdResetControlObject(%obj.clientControl);

   if (%node == 0)
   {
      // pilot position
      %player.setPilot(true);
	   commandToClient(%player.client, 'setHudMode', 'Pilot', "Bomber", %node);
	bottomPrint(%player.client, "Pilot Postion: nade for flares and mine for resupply arm.", 5, 2 );
   }
   else if (%node == 1)
   {
      // bombardier position
      %turret = %obj.getMountNodeObject(10);
      %player.vehicleTurret = %turret;
      %player.setTransform("0 0 0 0 0 1 0");
      %player.lastWeapon = %player.getMountedImage($WeaponSlot);
      %player.unmountImage($WeaponSlot);
      if (!%player.client.isAIControlled())
      {
         %player.setControlObject(%turret);
         %player.client.setObjectActiveImage(%turret, 2);
      }
      %turret.bomber = %player;
      $bWeaponActive = 0;
      %obj.getMountNodeObject(10).selectedWeapon = 1;
      commandToClient(%player.client,'SetWeaponryVehicleKeys', true);

	   commandToClient(%player.client, 'setHudMode', 'Pilot', "Bomber", %node);
      %player.isBomber = true;
	centerPrint(%player.client, "WEP1: CG WEP2: Torp WEP3: sonar buoy dropper", 5, 2 );
   }
   %passString = buildPassengerString(%obj);
	for(%i = 0; %i < %data.numMountPoints; %i++)
		if (%obj.getMountNodeObject(%i) > 0)
		   commandToClient(%obj.getMountNodeObject(%i).client, 'checkPassengers', %passString);
   if ( %player.client.observeCount > 0 )
      resetObserveFollow( %player.client, false );
}

function AWACS::deleteAllMounted(%data, %obj)
{
   %turret = %obj.getMountNodeObject(10);
   if (isObject(%turret)){
	%turret.altTrigger = 0;
	%turret.fireTrigger = 0;
	if (%client = %turret.getControllingClient())
	{
	   %client.player.setControlObject(%client.player);
	   %client.player.mountImage(%client.player.lastWeapon, $WeaponSlot);
	   %client.player.mountVehicle = false;

	   %client.player.bomber = false;
	   %client.player.isBomber = false;
	}
	%turret.schedule(2000, delete);
   }
}

function AWACS::onTrigger(%data, %obj, %trigger, %state)
{
   if (%trigger ==4){
      switch (%state) 
	{
      case 0:
         %obj.fireWeapon = false;
      case 1:
		if (%obj.inv[PlasmaAmmo] > 0){
               %obj.fireWeapon = true;
		   %obj.decInventory(PlasmaAmmo, 1);
		   %Upvec = %obj.getUpVector();

   		   %p = new FlareProjectile() 
   		   { 
   		      dataBlock        = FlareGrenadeProj; 
   		      initialDirection = vectorScale(%Upvec, -1); 
   		      initialPosition  = getBoxCenter(%obj.getWorldBox()); 
   		      sourceObject     = %obj; 
   		      sourceSlot       = 0; 
   		   }; 
   		   FlareSet.add(%p); 
   		   MissionCleanup.add(%p); 
   		   %p.schedule(6000, "delete");

		   %vec = vectornormalize(vectorcross(%obj.getForwardvector(),%Upvec));
   		   %p = new FlareProjectile() 
   		   { 
   		      dataBlock        = FlareGrenadeProj; 
   		      initialDirection = %vec; 
   		      initialPosition  = getBoxCenter(%obj.getWorldBox()); 
   		      sourceObject     = %obj; 
   		      sourceSlot       = 0; 
   		   }; 
   		   FlareSet.add(%p); 
   		   MissionCleanup.add(%p); 
   		   %p.schedule(6000, "delete");


   		   %p = new FlareProjectile() 
   		   { 
   		      dataBlock        = FlareGrenadeProj; 
   		      initialDirection = vectorscale(%vec,-1); 
   		      initialPosition  = getBoxCenter(%obj.getWorldBox()); 
   		      sourceObject     = %obj; 
   		      sourceSlot       = 0; 
   		   }; 
   		   FlareSet.add(%p); 
   		   MissionCleanup.add(%p); 
   		   %p.schedule(6000, "delete");

   		   serverPlay3D(GrenadeThrowSound, getBoxCenter(%obj.getWorldBox()));  
   		   %obj.lastThrowTime[%data] = getSimTime(); 
   		   %obj.throwStrength = 0; 
		}
      }
   }
   else if (%trigger ==5){
      switch (%state) 
	{
      case 1:
	   if(%obj.isreping == 1){
		stopRearm(%obj);
		%obj.unmountImage(6);
	   }
	   else{
		%obj.isreping = 1;
		RearmLoop(%obj);
		%obj.mountImage(Rearmer, 6);
	   }
      }
   }
}

function RearmLoop(%obj){ 
   if(isObject(%obj)){
	if(%obj.isreping == 0)
	   return;
	
	%targets = %obj.reptargets;
	%vec = vectorAdd(vectorscale(%obj.getForwardVector(),-35),vectorscale(%obj.getUpVector(),-8));
	%pos = vectorAdd(%obj.getWorldBoxCenter(),%vec);
	if(%targets !$= ""){
	   %numtrgs = getNumberOfWords(%targets);
	   for(%i = 0; %i < %numtrgs; %i++){
		%target = getWord(%targets, %i);
		if(vectorDist(%pos, %target.getWorldBoxCenter()) <= 20 && %target.getDamageLevel() > 0.0){
		   if(%target.reping != 1){
			%target.reping = 1;
			%target.setRepairRate(%target.getRepairRate() + 0.01);
		   }
		}
		else{
		   if(%target.reping == 1){
			%target.reping = 0;
			%target.setRepairRate(%target.getRepairRate() - 0.01);
		   }
		}
		%datablock = %target.getDatablock();
		if(%datablock.max[chaingunAmmo] !$= "" && %target.inv[chaingunAmmo] < %datablock.max[chaingunAmmo]){
		   if(%datablock.max[chaingunAmmo] < 100)
			%CGamount = 10;
		   else
			%CGamount = 100;
		   %target.incInventory(chaingunAmmo, %CGamount);
		   %reloaded = 1;
		}
		if(%datablock.max[MissileLauncherAmmo] !$= "" && %target.inv[MissileLauncherAmmo] < %datablock.max[MissileLauncherAmmo]){
		   %target.incInventory(MissileLauncherAmmo, 1);
		   %reloaded = 1;
		}
		if(%datablock.max[MortarAmmo] !$= "" && %target.inv[MortarAmmo] < %datablock.max[MortarAmmo]){
		   %target.incInventory(MortarAmmo, 1);
		   %reloaded = 1;
		}
		if(%datablock.max[PlasmaAmmo] !$= "" && %target.inv[PlasmaAmmo] < %datablock.max[PlasmaAmmo]){
		   %target.incInventory(PlasmaAmmo, 4);
		   %reloaded = 1;
		}
		if(%reloaded == 1){
		   %reloaded = 0;
		   serverPlay3d("MissileReloadSound",%target.getWorldBoxCenter()); 
		}
	
		if(isObject(%target.turretObject)){
		   %datablock = %target.turretObject.getDatablock();
		   if(%datablock.max[chaingunAmmo] !$= "" && %target.turretObject.inv[chaingunAmmo] < %datablock.max[chaingunAmmo]){
		      %target.turretObject.incInventory(chaingunAmmo, 100);
		      %reloaded = 1;
		   }
		   if(%datablock.max[MissileLauncherAmmo] !$= "" && %target.turretObject.inv[MissileLauncherAmmo] < %datablock.max[MissileLauncherAmmo]){
		      %target.turretObject.incInventory(MissileLauncherAmmo, 1);
		      %reloaded = 1;
		   }
		   if(%datablock.max[MortarAmmo] !$= "" && %target.turretObject.inv[MortarAmmo] < %datablock.max[MortarAmmo]){
		      %target.turretObject.incInventory(MortarAmmo, 1);
		      %reloaded = 1;
		   }
		   if(%reloaded == 1)
		      serverPlay3d("MissileReloadSound",%target.getWorldBoxCenter()); 
		}
	   }
	}
	%obj.reptargets = "";
	InitContainerRadiusSearch(%pos, 15, $TypeMasks::VehicleObjectType);
	while ((%targetObject = containerSearchNext()) != 0){
//	   if(%targetObject.getClassName() $= "FlyingVehicle")
		%obj.reptargets = %obj.reptargets @ %targetObject @" ";
	}
	if(%obj.isreping == 1)
	   %obj.reploop = schedule(500, 0, "RearmLoop", %obj);
   }
}

function stopRearm(%obj){
   %obj.isreping = 0;
   if(%obj.reptargets !$= ""){
      %numtrgs = getNumberOfWords(%obj.reptargets);
      for(%i = 0; %i < %numtrgs; %i++){
	   %target = getWord(%obj.reptargets, %i);
	   if(%target.reping == 1){
		%target.reping = 0;
		%target.setRepairRate(%target.getRepairRate() - 0.01);
	   }
      }
   }
}


function AWACSTorp::onFire(%data,%obj,%slot) 
{ 
   %p = Parent::onFire(%data, %obj, %slot); 
   %p.initVel = vectorNormalize(%obj.mountobj.getVelocity());
   %z = getWord(%p.initVel,2);
   if(%z > 0)
	%p.initVel = vectorNormalize(getWord(%p.initVel,0)@" "@getWord(%p.initVel,1)@" 0");
   schedule(500, 0, "changethebomb", %p, "Torp");
}

function AWACSBuoy::onFire(%data,%obj,%slot) 
{ 
   %p = Parent::onFire(%data, %obj, %slot); 
   schedule(500, 0, "changethebomb", %p, "Buoy");
}

function changethebomb(%obj, %type){
   if(!isObject(%obj))
	return;
   %vec = "0 0 100";
   %pos = %obj.getPosition();
   %search = containerRayCast(%pos, vectorAdd(%pos,%vec), $TypeMasks::WaterObjectType, %obj);
   if(%search){
	if(%type $= "Torp"){
	   %p = new SeekerProjectile()
	   {
	      dataBlock        = Torpedo;
	      initialDirection = %obj.initVel;
	      initialPosition  = %pos;
	      sourceObject     = %obj.sourceobject;
   	      sourceSlot       = 3;
	   };
	   %p.sourceobject = %obj.sourceobject;
	   %p.vector = %vec;
	   %p.count = 1;
	   TorpedoSeekLoop(%p);
	   %obj.schedule(10, "delete");
	   return;
	}
	else{
	   %pos = getWord(%search,1)@" "@getWord(%search,2)@" "@getWord(%search,3);
	   if($TeamDeployedCount[%obj.sourceObject.team, SonarBuoy] < 5){
	      %deplObj = new (StaticShape)() {
	         dataBlock = "SonarBuoy";
		   position = %pos;
		   rotation = "0 0 0 0";
		   scale = "1 1 1";
		   team = %obj.sourceObject.team;
		   deployed = "1";
	      };

	      %deplObj.setOwner(%obj.sourceObject.getControllingClient().player);
	      setTargetSensorGroup(%deplObj.getTarget(), %obj.sourceObject.team);
	      addToDeployGroup(%deplObj);
	      $TeamDeployedCount[%obj.sourceObject.team, SonarBuoy]++;
	      %deplObj.deploy();
	      SonarPingLoop(%deplObj);

		%sensor = new (StaticShape) () {
		   datablock = "DeployedPulseSensor";
		   position = vectorAdd(%pos, "0 0 0.5");
		   rotation = "0 0 0 0";
		   scale = "1 1 1";
		   team = %obj.sourceObject.team;
		   deployed = "1";
		   powerFreq = "0";
		};
	      %sensor.setOwner(%obj.sourceObject.getControllingClient().player);
		setTargetSensorGroup(%sensor.getTarget(), %obj.sourceObject.team);
		addToDeployGroup(%sensor);

		%deplObj.sensor = %sensor;
	   }
	   else
	      BottomPrint(%obj.sourceObject.getControllingClient(), "Your team has reached the max of 5 Sonar Buoys.", 5);
	   %obj.schedule(10, "delete");
	   return;
	}
   }
   schedule(100, 0, "changethebomb", %obj, %type);
}

function sonarPingLoop(%obj){ 
   if(!isObject(%obj))
	return;
   InitContainerRadiusSearch(%obj.getPosition(), 300, $TypeMasks::VehicleObjectType);
   while ((%SearchResult = containerSearchNext()) != 0){
	%SearchObj = FirstWord(%SearchResult);
	if(%searchObj.getDataBlock().getName() $= "Sub" || %searchObj.getDataBlock().getName() $= "Boat"){
   	   if(isObject(%SearchObj.SnrBeacon[%obj.team]))
      	%SearchObj.SnrBeacon[%obj.team].setPosition(%searchObj.getWorldBoxCenter());
   	   else{ 
	      %SearchObj.SnrBeacon[%obj.team] = new BeaconObject() {
      	   dataBlock = "SubBeacon";
      	   beaconType = "vehicle";
      	   position = %SearchObj.getWorldBoxCenter();
   	      };
   	      %SearchObj.SnrBeacon[%obj.team].playThread($AmbientThread, "ambient");
   	      %SearchObj.SnrBeacon[%obj.team].team = %obj.team;
   	      %SearchObj.SnrBeacon[%obj.team].sourceObject = %SearchObj;

   	      %SearchObj.SnrBeacon[%obj.team].setTarget(%obj.team);
   	      MissionCleanup.add(%SearchObj.SnrBeacon[%obj.team]);
		%SearchObj.SnrBeacon[%obj.team].schedule(9500, "delete");
	   }
         serverPlay3d("InboundTorpPing",%SearchObj.getWorldBoxCenter()); 
	}
   }
   %obj.sonarloop = schedule(2000, 0, "sonarPingLoop", %obj);
}

function AWACS::onEnterLiquid(%data, %obj, %coverage, %type)
{
   switch(%type)
   {
      case 0:
         //Water
         %obj.setHeat(0.0);
         %obj.liquidDamage(%data, 0.1, $DamageType::Crash);
      case 1:
         //Ocean Water
         %obj.setHeat(0.0);
         %obj.liquidDamage(%data, 0.1, $DamageType::Crash);
      case 2:
         //River Water
         %obj.setHeat(0.0);
         %obj.liquidDamage(%data, 0.1, $DamageType::Crash);
      case 3:
         //Stagnant Water
         %obj.setHeat(0.0);
         %obj.liquidDamage(%data, 0.1, $DamageType::Crash);
      case 4:
         //Lava
         %obj.liquidDamage(%data, $VehicleDamageLava, $DamageType::Lava);
      case 5:
         //Hot Lava
         %obj.liquidDamage(%data, $VehicleDamageHotLava, $DamageType::Lava);
      case 6:
         //Crusty Lava
         %obj.liquidDamage(%data, $VehicleDamageCrustyLava, $DamageType::Lava);
      case 7:
         //Quick Sand
   }
}

function SonarBuoy::onDestroyed(%this, %obj, %prevState) {
	if (%obj.isRemoved)
		return;
	%obj.isRemoved = true;
	Parent::onDestroyed(%this, %obj, %prevState);
	$TeamDeployedCount[%obj.team, SonarBuoy]--;
//	remDSurface(%obj);
	%obj.schedule(500, "delete");
	%obj.sensor.schedule(500, "delete");
	fireBallExplode(%obj,1);
}
