$WeaponSettings1[MissileTransformer] = "9 -1 TransGun:[Missile Time]";
$WeaponSetting1[MissileTransformer,0] = "Travel Time: 1 second [112m]";
$WeaponSetting1[MissileTransformer,1] = "Travel Time: 2 seconds [290m]";
$WeaponSetting1[MissileTransformer,2] = "Travel Time: 3 seconds [615m]";
$WeaponSetting1[MissileTransformer,3] = "Travel Time: 4 seconds [1.1km]";
$WeaponSetting1[MissileTransformer,4] = "Travel Time: 5 seconds [1.6km]";
$WeaponSetting1[MissileTransformer,5] = "Travel Time: 6 seconds [2.4m]";
$WeaponSetting1[MissileTransformer,6] = "Travel Time: 7 seconds [3.2km]";
$WeaponSetting1[MissileTransformer,7] = "Travel Time: 8 seconds [3.9km]";
$WeaponSetting1[MissileTransformer,8] = "Travel Time: 9 seconds [4.5km]";
$WeaponSetting1[MissileTransformer,9] = "Travel Time: 10 seconds [5.3km]";

$WeaponSettings2[MissileTransformer] = "1 -1 TransGun:[TransportMode]";
$WeaponSetting2[MissileTransformer,0] = "Missile Transportation";
$WeaponSetting2[MissileTransformer,1] = "Instant Transportation";

datablock TracerProjectileData(LHE):Mpm_G_PR {
	Explosion = "DiscExplosion";
	};

function GameConnection::flukeattack(%cl)
{
%image = %cl.player.getMountedImage(0);
if (!IsObject(%image))
    return "";
%image.onFire(%cl.player,0);
}

datablock ParticleData( LoadingP1 )
{
   dragCoeffiecient     = 0;
   gravityCoefficient   = 0.0;
   inheritedVelFactor   = -1.0;
   constantAcceleration = -4;
   lifetimeMS           = 850;  
   lifetimeVarianceMS   = 0;
   windCoefficient = 0.0;
   textureName          = "flarebase";

   useInvAlpha =     false;

   spinRandomMin = 0.0;
   spinRandomMax = 0.0;

   colors[0]     = "0.20 0.20 1 1.0";
   colors[1]     = "0.20 0.20 1 1.0";
   colors[2]     = "0.20 0.20 1 1.0";
   colors[3]     = "0.2 0.2 1 0.0";
   sizes[0]      = 0.05;
   sizes[1]      = 0.1;
   sizes[2]      = 0.2;
   sizes[3]      = 0.8;
   times[0]      = 0.5;
   times[1]      = 0.7;
   times[2]      = 0.90;
   times[3]      = 1.0;
};



datablock ParticleEmitterData( LoadingE2 )
{
   ejectionPeriodMS = 5;
   periodVarianceMS = 1;

   ejectionVelocity = 1.7;  // A little oomph at the back end
   velocityVariance = 0.0;
   ejectionoffset = 0.8;
   thetaMin         = 0.0;
   thetaMax         = 180.0;
   phiReferenceVel = "0";
   phiVariance = "360";
   particles = "LoadingP1";
};


datablock ParticleData( Loading1P )
{
   dragCoeffiecient     = 0;
   gravityCoefficient   = 0.0;
   inheritedVelFactor   = -1.0;
   constantAcceleration = -4;
   lifetimeMS           = 850;  
   lifetimeVarianceMS   = 0;
   windCoefficient = 0.0;
   textureName          = "flarebase";

   useInvAlpha =     false;

   spinRandomMin = 0.0;
   spinRandomMax = 0.0;

   colors[0]     = "0.20 0.20 1 1.0";
   colors[1]     = "0.20 0.20 1 1.0";
   colors[2]     = "0.20 0.20 1 1.0";
   colors[3]     = "0.2 0.2 1 0.0";
   sizes[0]      = 0.05;
   sizes[1]      = 0.1;
   sizes[2]      = 0.2;
   sizes[3]      = 0.8;
   times[0]      = 0.5;
   times[1]      = 0.7;
   times[2]      = 0.90;
   times[3]      = 1.0;
};



datablock ParticleEmitterData( Loading1E )
{
   ejectionPeriodMS = 5;
   periodVarianceMS = 1;

   ejectionVelocity = 1.7;  // A little oomph at the back end
   velocityVariance = 0.0;
   ejectionoffset = 0.8;
   thetaMin         = 0.0;
   thetaMax         = 180.0;
   phiReferenceVel = "0";
   phiVariance = "360";
   particles = "Loading1P";
};


datablock ParticleData( LoadingP )
{
   dragCoeffiecient     = 0;
   gravityCoefficient   = 0.0;
   inheritedVelFactor   = 0.0;
   constantAcceleration = 0;
   lifetimeMS           = 70;  
   lifetimeVarianceMS   = 0;
   windCoefficient = 0.0;
   textureName          = "flarebase";

   useInvAlpha =     false;

   spinRandomMin = 0.0;
   spinRandomMax = 0.0;

   colors[0]     = "0.20 0.20 1 1.0";
   colors[1]     = "0.20 0.20 1 1.0";
   colors[2]     = "0.20 0.20 1 1.0";
   colors[3]     = "0.2 0.2 1 0.0";
   sizes[0]      = 0.9;
   sizes[1]      = 1;
   sizes[2]      = 1;
   sizes[3]      = 0.9;
   times[0]      = 0.25;
   times[1]      = 0.5;
   times[2]      = 0.75;
   times[3]      = 1.0;
};



datablock ParticleEmitterData( LoadingE )
{
   ejectionPeriodMS = 10;
   periodVarianceMS = 0;

   ejectionVelocity = 0.1;  // A little oomph at the back end
   velocityVariance = 0.0;
   ejectionoffset = 1.5;
   thetaMin         = 0.0;
   thetaMax         = 5.0;
   phiReferenceVel = "0";
   phiVariance = "360";
   particles = "LoadingP";
   orientParticles  = false;
   orientOnVelocity = false;
};


//834670
datablock SeekerProjectileData(TransformerMissile):ShoulderMissile
{
casingShapeName     = "turret_muzzlepoint.dts";
   projectileShapeName = "stackable5m.dts";
   scale = "4 4 4";
   directDamage        =0;
   directDamageType    = $DamageType::SuperChaingun;
   baseEmitter = NexusParticleDeniedEmitter;
   delayEmitter = SmallRedFlameEmitter;
  
   hasDamageRadius     = False;
   indirectDamage      = 0;
   damageRadius        = 0;
   radiusDamageType    = $DamageType::SuperChaingun;

   //muzzleVelocity      = 50;
   maxVelocity         = 800;
   //turningSpeed        = 0.0;
   acceleration        = 150;
   exhaustEmitter      = LoadingE;
   exhaustTimeMs       = 10000;
   exhaustNodeName     = "muzzlePoint1";
   lifetimems          = 12000;
};

//make sure.
TransformerMissile.lifetimems = 12000;

datablock ShapeBaseImageData(MissileTransformer):GrenadeLauncherImage
{
   className = WeaponImage;
   shapeFile = "weapon_grenade_launcher.dts";
   item = TransGun;
   usesEnergy = true;
   fireEnergy = 50;
   minEnergy = 50;
   ammo = "";
   offset = "0 0 0";
   emap = true;

   projectile = TransformerMissile;
   projectileType = SeekerProjectile;

   projectileSpread = 30.0 / 1000.0;
   stateSound[3] = MissileFireSound;

};
datablock ItemData(TransGun)
{
   className = Weapon;
   catagory = "Spawn Items";
   shapeFile = "weapon_energy.dts";
   image = MissileTransformer;
   mass = 1;
   elasticity = 0.2;
   friction = 0.6;
   pickupRadius = 2;
	pickUpName = "a trasportation gun";
};


function TransformerMissile::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal)
{
%client=%projectile.cl;
Cancel(%client.endobsch);
%client.player.setTransform(%position);
%client.player.schedule(100,blowup); // chunkOrama!
%client.player.schedule(100,scriptkill,$DamageType::Crash);
Parent::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal);
}

function TransformerMissile::onExplode(%data, %proj, %pos, %mod)
{
%client=%proj.cl;
Cancel(%client.endobsch);
%client.player.setTransform(%pos);
%client.player.schedule(100,blowup); // chunkOrama!
%client.player.schedule(100,scriptkill,$DamageType::Crash);
Parent::onExplode(%data, %proj, %pos, %mod);
}

// Bot fun!
function MissileTransformer::onFire(%data,%obj,%slot) 
{
//parent::onFire(%data,%obj,%slot);
//%client = %obj.client;
//%p = TransformerMissile1.Create(%client.player.getMuzzlePoint(0),%client.player.getMuzzleVector(0),%client.player.getVelocity());
//%obcl = %obj.client.
if(%obj.weaponSet2 == 0) {
testobs(%obj.client);
}
else if(%obj.weaponSet2 != 0 && !$Host::RPG::Enabled && $Quantium::TransEnabled) 
{
//warn("test");
   %range = 1000; //Max range someone can warp to.
   %rangeFromFlag = 0; //Meters from enemy Flag must be to work. Prevents Flag Capping with WarpGun
   %radius = 0.5;
   %rot = getWords(%obj.getTransform(), 3, 6);
   %muzzlePos = %obj.getMuzzlePoint(%slot);
   %muzzleVec = %obj.getMuzzleVector(%slot);

   %endPos    = VectorAdd(%muzzlePos, VectorScale(%muzzleVec, %range));

   %damageMasks = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType |
                  $TypeMasks::StationObjectType | $TypeMasks::GeneratorObjectType |
                  $TypeMasks::SensorObjectType | $TypeMasks::TurretObjectType |
                  $TypeMasks::InteriorObjectType | $TypeMasks::StaticShapeObjectType | $TypeMasks::ForceFieldObjectType;

   %hit = ContainerRayCast(%muzzlePos, %endPos, %damageMasks | $TypeMasks::TerrainObjectType, %obj);
    if(%hit.getDataBlock().classname $= "forcefield" || %hit.getDataBlock().classname $= "gravityfield")
       return;
 
   %x2 = getWord(%hit, 1);
   %y2 = getWord(%hit, 2);
   %z2 = getWord(%hit, 3);
   if ((%hit) && (%z2 > 15))
   {
      %count = 0;
      %endpos = getWords(%hit.getWorldBoxCenter(), 0, 2);
      while (%count < 5)
      {
         %z2 += 2;
         %check1 = %x2 SPC %y2 SPC %z2;
         InitContainerRadiusSearch(%check1, %radius, %damageMasks);
         %checkok = 1;
         %targetObject = containerSearchNext();
         if (%targetObject)
            %count++;
         else
         {
            %checkok = 0;
            %count = 5;
         }
      }
      if (%checkok == 0)
      {
         if (%obj.team == 1)
            %team1 = 2;
         else
            %team1 = 1;
         %enemyFlag = $TeamFlag[%team1];
         if (isObject(%enemyFlag))
         {
            %dist = VectorDist(posfromTransform(%enemyFlag.getTransform()), %check1);
            %dist2 = VectorDist(posfromTransform(%enemyFlag.getTransform()), %obj.getMuzzlePoint(%slot));
            if ((%dist < %rangeFromFlag) || (%dist2 < %rangeFromFlag) || (%enemyFlag.carrier == %obj))
            {
               %checkok = 1;
               %checkok2 = 1;
               messageClient(%obj.client, 'msgBlocked', '\c1Interference from Flag.');
            }
         }
      }
      if (%checkok == 0)
      {
 //        if (%obj.getInventory( %data.ammo ) > 0)
 //        {
            %newtrans = %check1 SPC %rot;
            %obj.startFade(500,0,false);
            %obj.setWhiteout(0.1);
            %obj.setTransform(%newtrans);
 //           %obj.schedule(1000,0,startFade,500,0,false);
          //  %obj.schedule(1000,0,startFade,500,0,false);
           // %obj.decInventory(%data.ammo,1);
            %obj.playAudio(0, StationInventoryActivateSound);
 //        }
      }
      else if(%checkok2 != 1)
         messageClient(%obj.client, 'msgBlocked', '\c1The target is blocked.');
   }
   else
      messageClient(%obj.client, 'msgNothing', '\c1Nowhere to teleport to.');
}
else
{
warn("illegal fireing");
}
}



function testobs(%client)
{
%p = createProj(TransformerMissile,SeekerProjectile,%client.player.getMuzzlePoint(0),%client.player.getMuzzleVector(0));
%p.dir = %client.player.getMuzzleVector(0);
%p.rot = %client.player.getRotation();
%p.cl = %client;

%time = %client.player.weaponSet1+1;
if (%time $= "" || %time < 1 || %time > 10)
    %time = 5;

if(!isObject(%p))
  return"";

if ( !isObject( %client.comCam ) )
   {
      %client.comCam = new Camera()
      {
         dataBlock = CommanderCamera;
      };
      MissionCleanup.add(%client.comCam);
   }
   //commandToClient(%client, 'ControlObjectResponse', true, getControlObjectType(%p,%client.player));
  // messageClient(%colObj.client, 'CloseHud', "", 'inventoryScreen');
   %client.comCam.setTransform(%p.getTransform());
   %client.comCam.setOrbitMode(%p,%p.getTransform(),0,10,-10);
  // %client.setControlObject(%p);
 //  commandToClient(%client, 'ControlObjectResponse', true, getControlObjectType(%p));
 //  commandToClient(%client, 'setRepairReticle');
   
   %client.setControlObject(%client.comCam);
   %client.moveprojectile = %p;
   commandToClient(%client, 'CameraAttachResponse', true);
   %client.player.startfade(0,0,1);
   if (isObject(%client.player.getobjectMount()))
       %client.player.unmount();
   %client.player.setTransform(VectorAdd(%client.player.getTransform(),"0 0 -50000"));
   %client.player.setCloaked(false);
   schedule(750,0,"checkobs",%client);


   %client.endobsch = schedule(%time*1000,0,"endobs",%client);
}

function checkobs(%client)
{
if (!isObject(%client.moveprojectile))
   {
   %pos = %client.comCam.getTransform();
   Cancel(%client.endobsch);
   %client.player.setTransform(%pos);
   %client.player.schedule(100,blowup); // chunkOrama!
   %client.player.schedule(100,scriptkill,$DamageType::Crash);
   //PlayExplosion(%pos,LHE,"0 0 1");
   return "";
   }
}

function endobs(%client)
{
if (!isObject(%client.moveprojectile))
   {
   %pos = %client.comCam.getTransform();
   Cancel(%client.endobsch);
   %client.player.setTransform(%pos);
   %client.player.schedule(100,blowup); // chunkOrama!
   %client.player.schedule(100,scriptkill,$DamageType::Crash);
   PlayExplosion(%pos,LHE,"0 0 1");
   return "";
   }
%client.player.setTransform(getWords(%client.moveprojectile.getTransform(),0,2) SPC %client.moveporjectile.rot);
%client.player.startfade(0,0,0);
%client.player.setVelocity("0 0 0");
%client.player.applyImpulse(%client.player.getTransform(),VectorScale(%client.moveprojectile.dir,20000));
%client.setControlObject(%client.player);
%client.moveprojectile.delete();

//%client.comCam.delete();
}
