TWM2/scripts/weapons/Other/AcidCannon.cs
Robert Fritzen 301ce62a62 Additional Server Controls, Other Stuff
Added more name change capabilities to serverControl.cs, adjusted the
Acid Cannon to the new behavior, prep work for sniper zombies and the
new mini boss coming in 3.9.2.
2017-12-21 14:54:47 -06:00

172 lines
4.6 KiB
C#

// Acid Cannon
datablock TracerProjectileData(AcidCannonPulse) {
doDynamicClientHits = true;
projectileShapeName = "";
directDamage = 0.3;
directDamageType = $DamageType::AcidCannon;
hasDamageRadius = true;
indirectDamage = 0.35;
damageRadius = 10.0;
kickBackStrength = 0.0;
radiusDamageType = $DamageType::AcidCannon;
sound = BlasterProjectileSound;
explosion = ZAcidBallExplosion;
ImageSource = "AcidCannonImage";
dryVelocity = 150.0;
wetVelocity = 150.0;
velInheritFactor = 1.0;
fizzleTimeMS = 1200;
lifetimeMS = 1500;
explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
activateDelayMS = 100;
tracerLength = 5;
tracerAlpha = false;
tracerMinPixels = 3;
tracerColor = "0 1 0 1";
tracerTex[0] = "special/landSpikeBolt";
tracerTex[1] = "special/landSpikeBoltCross";
tracerWidth = 0.5;
crossSize = 0.79;
crossViewAng = 0.990;
renderCross = true;
emap = true;
};
function AcidCannonPulse::onExplode(%data, %proj, %pos, %mod) {
Parent::OnExplode(%data, %proj, %pos, %mod);
%TargetSearchMask = $TypeMasks::PlayerObjectType;
InitContainerRadiusSearch(%pos, %data.damageRadius, %TargetSearchMask);
while ((%potentialTarget = ContainerSearchNext()) != 0) {
if(%potentialTarget.isAlive()) {
if(((%potentialTarget.client.team == %proj.sourceObject.client.team) && $TeamDamage) || %potentialTarget.client.team != %proj.sourceObject.client.team) {
%potentialTarget.setWhiteout(1.0);
}
}
}
}
datablock ShapeBaseImageData(AcidCannonImage) {
className = WeaponImage;
shapeFile = "weapon_energy.dts";
item = AcidCannon;
projectile = AcidCannonPulse;
projectileType = TracerProjectile;
HasChallenges = 0;
//RankRequire = $TWM2::RankRequire["PulsePhaser"];
//No rank required, this weapon is picked up from killed zombies
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";
stateTimeoutValue[4] = 4.2;
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(AcidCannon) {
className = Weapon;
catagory = "Spawn Items";
shapeFile = "weapon_energy.dts";
image = AcidCannonImage;
mass = 1;
alwaysAllowPickup = 1;
elasticity = 0.2;
friction = 0.6;
pickupRadius = 2;
pickUpName = "an Acid Cannon";
};
function AcidCannonImage::onMount(%this, %obj, %slot) {
Parent::onMount(%this, %obj, %slot);
}
function AcidCannonImage::onUnmount(%this,%obj,%slot) {
Parent::onUnmount(%this, %obj, %slot);
}
function AcidCannonImage::onFire(%data,%obj,%slot) {
AcidCannonAttack(%obj, %slot, 0);
}
function AcidCannonAttack(%object, %slot, %chargecount) {
%muzzleVec = %object.getMuzzleVector(%slot);
%muzzlePt = %object.getMuzzlePoint(%slot);
if(%chargecount <= 5) {
if(%chargecount == 1) {
serverPlay3D(AcidCannonPreFireSound, %muzzlePt);
}
%charge = new ParticleEmissionDummy() {
position = %muzzlePt;
dataBlock = "defaultEmissionDummy";
emitter = "BurnEmitter";
};
MissionCleanup.add(%charge);
%charge.schedule(100, "delete");
}
if(%chargecount == 7 || %chargecount == 9) {
%p = new TracerProjectile() {
dataBlock = AcidCannonPulse;
initialDirection = %muzzleVec;
initialPosition = %muzzlePt;
sourceObject = %object;
sourceSlot = 0;
};
MissionCleanup.add(%p);
serverPlay3D(CentaurArtilleryFireSound, %muzzlePt);
}
//
if(%chargecount <= 9) {
%chargecount++;
schedule(100, 0, "AcidCannonAttack", %object, %slot, %chargecount);
}
}