TWM2/scripts/weapons/Pistols/PulsePhaser.cs
2014-02-26 13:54:04 -06:00

248 lines
7.4 KiB
C#

// Pulse Phaser Weapon
datablock AudioProfile(PPWFireSound)
{
filename = "fx/powered/turret_outdoor_fire.wav";
description = AudioDefault3d;
preload = true;
};
datablock LinearFlareProjectileData(phaserBolt) {
directDamage = 0.2; //reduced 0.45
directDamageType = $DamageType::Phaser;
explosion = "BlasterExplosion";
kickBackStrength = 0.0;
dryVelocity = 120.0;
wetVelocity = 40.0;
velInheritFactor = 0.5;
fizzleTimeMS = 2000;
lifetimeMS = 3000;
explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = 3000;
ImageSource = "PulsePhaserImage";
numFlares = 20;
size = 0.10;
flareColor = "0 1 0";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
sound = BlasterProjectileSound;
hasLight = true;
lightRadius = 3.0;
lightColor = "1 1 1";
};
datablock LinearFlareProjectileData(TrevorPhaserBolt) {
directDamage = 0.21; //reduced .485
directDamageType = $DamageType::Phaser;
explosion = "BlasterExplosion";
kickBackStrength = 0.0;
dryVelocity = 120.0;
wetVelocity = 40.0;
velInheritFactor = 0.5;
fizzleTimeMS = 2000;
lifetimeMS = 3000;
explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = 3000;
ImageSource = "PulsePhaserImage";
numFlares = 20;
size = 0.10;
flareColor = "0.5 0.1 0.9";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
sound = BlasterProjectileSound;
hasLight = true;
lightRadius = 3.0;
lightColor = "1 1 1";
};
datablock ShapeBaseImageData(PulsePhaserImage) {
className = WeaponImage;
shapeFile = "weapon_energy.dts";
item = PulsePhaser;
projectile = phaserBolt;
projectileType = LinearFlareProjectile;
HasChallenges = 1;
ChallengeCt = 10;
Challenge[1] = "Phaser Killer\t50\t100\tNone";
Challenge[2] = "Phaser Hunter\t150\t250\tNone";
Challenge[3] = "Phaser Expert\t250\t500\tLaser";
Challenge[4] = "Phaser Master\t500\t1000\tTriple Burst";
Challenge[5] = "Phaser God\t1000\t2000\tShotgun";
Challenge[6] = "Phaser Legend\t1500\t5000\tPhaser Blades";
Challenge[7] = "Phaser Bronze Commendation\t3000\t10000\tNone";
Challenge[8] = "Phaser Silver Commendation\t6000\t25000\tNone";
Challenge[9] = "Phaser Gold Commendation\t12500\t50000\tNone";
Challenge[10] = "Phaser Titan Commendation\t35000\t75000\tNone";
Upgrade[1] = "Laser";
Upgrade[2] = "Triple Burst";
Upgrade[3] = "Shotgun";
Upgrade[4] = "Phaser Blades";
GunName = "ES-77 Pulse Phaser";
RankRequire = $TWM2::RankRequire["PulsePhaser"];
usesEnergy = true;
fireEnergy = 4;
minEnergy = 4;
stateName[0] = "Activate";
stateTransitionOnTimeout[0] = "ActivateReady";
stateTimeoutValue[0] = 0.5;
stateSequence[0] = "Activate";
stateSound[0] = BlasterSwitchSound;
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.3;
stateFire[3] = true;
stateRecoil[3] = NoRecoil;
stateAllowImageChange[3] = false;
stateSequence[3] = "Fire";
stateSound[3] = PPWFireSound;
stateScript[3] = "onFire";
stateName[4] = "Reload";
stateTransitionOnNoAmmo[4] = "NoAmmo";
stateTransitionOnTimeout[4] = "Ready";
stateAllowImageChange[4] = false;
stateSequence[4] = "Reload";
stateName[5] = "NoAmmo";
stateTransitionOnAmmo[5] = "Reload";
stateSequence[5] = "NoAmmo";
stateTransitionOnTriggerDown[5] = "DryFire";
stateName[6] = "DryFire";
stateTimeoutValue[6] = 0.3;
stateSound[6] = BlasterDryFireSound;
stateTransitionOnTimeout[6] = "Ready";
};
datablock ItemData(PulsePhaser) {
className = Weapon;
catagory = "Spawn Items";
shapeFile = "weapon_energy.dts";
image = PulsePhaserImage;
mass = 1;
elasticity = 0.2;
friction = 0.6;
pickupRadius = 2;
pickUpName = "a Pulse Phaser";
};
datablock ShapeBaseImageData(Phaser2Image) : PulsePhaserImage {
shapeFile = "weapon_ELF.dts";
offset = "0 0.3 0.2";
rotation = "0 1 0 180";
};
datablock ShapeBaseImageData(Phaser3Image) : PulsePhaserImage {
shapeFile = "weapon_ELF.dts";
offset = "0 .5 0";
};
function PulsePhaserImage::onMount(%this, %obj, %slot) {
Parent::onMount(%this, %obj, %slot);
if(%obj.client.UpgradeOn("Phaser Blades", %this.getName())) {
%obj.mountImage(Phaser2Image, 5);
%obj.mountImage(Phaser3Image, 6);
}
}
function PulsePhaserImage::onUnmount(%this,%obj,%slot) {
%obj.unmountImage(5);
%obj.unmountImage(6);
Parent::onUnmount(%this, %obj, %slot);
}
function PulsePhaserImage::onFire(%data,%obj,%slot) {
if(%obj.cannotFire) {
return;
}
%vector = %obj.getMuzzleVector(%slot);
%mp = %obj.getMuzzlePoint(%slot);
if(%obj.client.UpgradeOn("Triple Burst", %data.getName())) {
%p1 = Parent::OnFire(%data, %obj, %slot);
%p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector, %obj);
%p2.WeaponImageSource = "PulsePhaserImage";
schedule(100, 0, "ServerPlay3D", "PPWFireSound", %obj.getPosition());
%p3 = Schedule(250, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector, %obj);
%p3.WeaponImageSource = "PulsePhaserImage";
schedule(250, 0, "ServerPlay3D", "PPWFireSound", %obj.getPosition());
ResetFireRestrict(%obj, 1);
schedule(1350, 0, "ResetFireRestrict", %obj, 0);
}
else if(%obj.client.UpgradeOn("Shotgun", %data.getName())) {
for (%i=0; %i < 3; %i++) {
%x = (getRandom() - 0.5) * 2 * 3.1415926 * (11/1000);
%y = (getRandom() - 0.5) * 2 * 3.1415926 * (11/1000);
%z = (getRandom() - 0.5) * 2 * 3.1415926 * (11/1000);
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
%newvector = MatrixMulVector(%mat, %vector);
%p = new (%data.projectileType)() {
dataBlock = %data.projectile;
initialDirection = %newvector;
initialPosition = %mp;
sourceObject = %obj;
damageFactor = 1;
sourceSlot = %slot;
};
%p.WeaponImageSource = "PulsePhaserImage";
}
ResetFireRestrict(%obj, 1);
schedule(1200, 0, "ResetFireRestrict", %obj, 0);
}
else if(%obj.client.UpgradeOn("Phaser Blades", %data.getName())) {
serverPlay3D("BomberTurretFireSound", %obj.getPosition());
%p = new (%data.projectileType)() {
dataBlock = TrevorPhaserBolt;
initialDirection = %vector;
initialPosition = %mp;
sourceObject = %obj;
damageFactor = 1;
sourceSlot = %slot;
};
%p.WeaponImageSource = "PulsePhaserImage";
}
else {
%p = Parent::OnFire(%data,%obj,%slot);
}
}
function ResetFireRestrict(%plyr, %onOff) {
%plyr.cannotFire = %onOff;
}