TWM2/scripts/vehicles/vehicle_DropPod.cs
2014-02-26 13:54:04 -06:00

459 lines
12 KiB
C#

datablock WheeledVehicleData(DropPod) : MPBDamageProfile {
spawnOffset = "0 0 1.0";
renderWhenDestroyed = false;
canControl = true;
catagory = "Vehicles";
shapeFile = "stackable2l.dts";
multipassenger = false;
computeCRC = true;
debrisShapeName = "stackable2l.dts";
debris = ShapeDebris;
drag = 0.0;
density = 20.0;
mountPose[0] = sitting;
numMountPoints = 1;
isProtectedMountPoint[0] = true;
cameraMaxDist = 20;
cameraOffset = 6;
cameraLag = 1.5;
explosion = HGVehicleExplosion;
explosionDamage = 0.25;
explosionRadius = 5.0;
maxSteeringAngle = 0.3; // 20 deg.
// Used to test if the station can deploy
stationPoints[1] = "-2.3 -7.38703 -0.65";
stationPoints[2] = "-2.3 -11.8 -0.65";
stationPoints[3] = "0 -7.38703 -0.65";
stationPoints[4] = "0 -11.8 -0.65";
stationPoints[5] = "2.3 -7.38703 -0.65";
stationPoints[6] = "2.3 -11.8 -0.65";
// Rigid Body
mass = 1000;
bodyFriction = 0.8;
bodyRestitution = 0.5;
minRollSpeed = 3;
gyroForce = 400;
gyroDamping = 0.3;
stabilizerForce = 10;
minDrag = 10;
softImpactSpeed = 15; // Play SoftImpact Sound
hardImpactSpeed = 25; // Play HardImpact Sound
// Ground Impact Damage (uses DamageType::Ground)
minImpactSpeed = 24;
speedDamageScale = 0.025;
// Object Impact Damage (uses DamageType::Impact)
collDamageThresholdVel = 15;
collDamageMultiplier = 0.03;
// Engine
engineTorque = 0 * 745;
breakTorque = 0 * 745;
maxWheelSpeed = 10;
// Springs
springForce = 8000;
springDamping = 1300;
antiSwayForce = 6000;
staticLoadScale = 2;
// Tires
tireRadius = 1.6;
tireFriction = 10.0;
tireRestitution = 0.5;
tireLateralForce = 3000;
tireLateralDamping = 400;
tireLateralRelaxation = 1;
tireLongitudinalForce = 12000;
tireLongitudinalDamping = 600;
tireLongitudinalRelaxation = 1;
tireEmitter = TireEmitter;
//
maxDamage = 2.0;
destroyedLevel = 2.0;
isShielded = false;
energyPerDamagePoint = 125;
maxEnergy = 600;
jetForce = 0;
minJetEnergy = 60;
jetEnergyDrain = 0;
rechargeRate = 1.0;
jetSound = MPBThrustSound;
engineSound = MPBEngineSound;
squeelSound = AssaultVehicleSkid;
softImpactSound = GravSoftImpactSound;
hardImpactSound = HardImpactSound;
//wheelImpactSound = WheelImpactSound;
//
softSplashSoundVelocity = 5.0;
mediumSplashSoundVelocity = 8.0;
hardSplashSoundVelocity = 12.0;
exitSplashSoundVelocity = 8.0;
exitingWater = VehicleExitWaterSoftSound;
impactWaterEasy = VehicleImpactWaterSoftSound;
impactWaterMedium = VehicleImpactWaterMediumSound;
impactWaterHard = VehicleImpactWaterHardSound;
waterWakeSound = VehicleWakeMediumSplashSound;
minMountDist = 3;
damageEmitter[0] = SmallLightDamageSmoke;
damageEmitter[1] = SmallHeavyDamageSmoke;
damageEmitter[2] = DamageBubbles;
damageEmitterOffset[0] = "3.0 0.5 0.0 ";
damageEmitterOffset[1] = "-3.0 0.5 0.0 ";
damageLevelTolerance[0] = 0.3;
damageLevelTolerance[1] = 0.7;
numDmgEmitterAreas = 2;
splashEmitter[0] = VehicleFoamDropletsEmitter;
splashEmitter[1] = VehicleFoamEmitter;
shieldImpact = VehicleShieldImpact;
cmdCategory = "Tactical";
cmdIcon = CMDGroundMPBIcon;
cmdMiniIconName = "commander/MiniIcons/com_mpb_grey";
targetNameTag = 'Drop';
targetTypeTag = 'Pod';
sensorData = VehiclePulseSensor;
observeParameters = "1 12 12";
shieldEffectScale = "0.85 1.2 0.7";
};
function MakeDropPod(%frd, %right, %plyr, %src, %i) {
if(!isObject(%src)) {
return;
}
if(!%plyr.isAlive()) {
return;
}
if(!%plyr.client.jumpDownYet) {
%plyr.client.jumpDownYet = 1;
}
%vec = vectorAdd(vectorScale(%right,getWord($PodPos[%i],0)),vectorScale(%frd,getWord($PodPos[%i],1)));
%posa = vectorAdd(%src.getPosition(),%vec);
%pos = vectorAdd(%posa, "0 0 -16");
%pod = new WheeledVehicle() {
dataBlock = DropPod;
position = %pos;
rotation = "0 0 1 0";
team = %src.team;
};
MissionCleanUp.add(%pod);
%plyr.unmount();
%pod.mountObject(%plyr,0);
%pod.flying = 1;
%plyr.setMoveState(true); //ha! no running now
PodScanLoop(%pod, %plyr);
%plyr.schedule(1, "setInvinc", true);
return %pod;
}
function DropPod::playerMounted(%data, %obj, %player, %node) {
bottomPrint(%player.client, "Standby for pod launch... HOLD ON TROOPER \n It's About to get real bumpy!!!", 5, 2 );
if( %player.client.observeCount > 0 )
resetObserveFollow( %player.client, false );
}
function PodScanLoop(%pod, %player) {
if(!isObject(%pod)) {
if(%pod.flying) {
//mid air = die
if(%player.isAlive()) {
%plyr.schedule(1, "setInvinc", false);
%player.schedule(5, "scriptKill", 0);
return;
}
return;
}
else {
return;
}
}
%podPos = %pod.getPosition();
%ZGrd = GetTerrainHeight(%podPos);
%landPos = ""@getWord(%podPos, 0)@" "@getWord(%podPos, 1)@" "@%ZGrd@"";
//time to land?
if(vectorDist(%podPos, %landPos) < 50) {
// Lets blow up anything blocking the ground
%c4 = new Item() {
datablock = C4Deployed;
position = %landPos;
scale = ".1 .1 .1";
};
MissionCleanup.add(%c4);
schedule(100, 0, "C4GoBoom", %c4);
//
%pod.setVelocity("0 0 3");
%player.schedule(1250, "setInvinc", false);
%player.unmount();
%pod.flying = 0;
//pod explodes...
%pod.damage(0, %pod.GetPosition(), 99999, $DamageType::Explosion);
%player.setMoveState(false); //ha! no running now
%player.applyRepair(999);
messageClient(%player.client, 'CloseHud', "", "vehicleHud");
}
schedule(250, 0, "PodScanLoop", %pod, %player);
}
function Player::setInvinc(%player, %yeh) {
%player.IsinvincibleC = %yeh;
}
//AMMO PODS
datablock WheeledVehicleData(AmmoPod) : MPBDamageProfile {
spawnOffset = "0 0 1.0";
renderWhenDestroyed = false;
canControl = true;
catagory = "Vehicles";
shapeFile = "stackable2l.dts";
multipassenger = false;
computeCRC = true;
debrisShapeName = "stackable2l.dts";
debris = ShapeDebris;
drag = 0.0;
density = 20.0;
mountPose[0] = sitting;
numMountPoints = 1;
isProtectedMountPoint[0] = true;
cameraMaxDist = 20;
cameraOffset = 6;
cameraLag = 1.5;
explosion = HGVehicleExplosion;
explosionDamage = 0.25;
explosionRadius = 5.0;
maxSteeringAngle = 0.3; // 20 deg.
// Used to test if the station can deploy
stationPoints[1] = "-2.3 -7.38703 -0.65";
stationPoints[2] = "-2.3 -11.8 -0.65";
stationPoints[3] = "0 -7.38703 -0.65";
stationPoints[4] = "0 -11.8 -0.65";
stationPoints[5] = "2.3 -7.38703 -0.65";
stationPoints[6] = "2.3 -11.8 -0.65";
// Rigid Body
mass = 1000;
bodyFriction = 0.8;
bodyRestitution = 0.5;
minRollSpeed = 3;
gyroForce = 400;
gyroDamping = 0.3;
stabilizerForce = 10;
minDrag = 10;
softImpactSpeed = 15; // Play SoftImpact Sound
hardImpactSpeed = 25; // Play HardImpact Sound
// Ground Impact Damage (uses DamageType::Ground)
minImpactSpeed = 24;
speedDamageScale = 0.025;
// Object Impact Damage (uses DamageType::Impact)
collDamageThresholdVel = 15;
collDamageMultiplier = 0.03;
// Engine
engineTorque = 0 * 745;
breakTorque = 0 * 745;
maxWheelSpeed = 10;
// Springs
springForce = 8000;
springDamping = 1300;
antiSwayForce = 6000;
staticLoadScale = 2;
// Tires
tireRadius = 1.6;
tireFriction = 10.0;
tireRestitution = 0.5;
tireLateralForce = 3000;
tireLateralDamping = 400;
tireLateralRelaxation = 1;
tireLongitudinalForce = 12000;
tireLongitudinalDamping = 600;
tireLongitudinalRelaxation = 1;
tireEmitter = TireEmitter;
//
maxDamage = 2.0;
destroyedLevel = 2.0;
isShielded = false;
energyPerDamagePoint = 125;
maxEnergy = 600;
jetForce = 0;
minJetEnergy = 60;
jetEnergyDrain = 0;
rechargeRate = 1.0;
jetSound = MPBThrustSound;
engineSound = MPBEngineSound;
squeelSound = AssaultVehicleSkid;
softImpactSound = GravSoftImpactSound;
hardImpactSound = HardImpactSound;
//wheelImpactSound = WheelImpactSound;
//
softSplashSoundVelocity = 5.0;
mediumSplashSoundVelocity = 8.0;
hardSplashSoundVelocity = 12.0;
exitSplashSoundVelocity = 8.0;
exitingWater = VehicleExitWaterSoftSound;
impactWaterEasy = VehicleImpactWaterSoftSound;
impactWaterMedium = VehicleImpactWaterMediumSound;
impactWaterHard = VehicleImpactWaterHardSound;
waterWakeSound = VehicleWakeMediumSplashSound;
minMountDist = 3;
damageEmitter[0] = SmallLightDamageSmoke;
damageEmitter[1] = SmallHeavyDamageSmoke;
damageEmitter[2] = DamageBubbles;
damageEmitterOffset[0] = "3.0 0.5 0.0 ";
damageEmitterOffset[1] = "-3.0 0.5 0.0 ";
damageLevelTolerance[0] = 0.3;
damageLevelTolerance[1] = 0.7;
numDmgEmitterAreas = 2;
splashEmitter[0] = VehicleFoamDropletsEmitter;
splashEmitter[1] = VehicleFoamEmitter;
shieldImpact = VehicleShieldImpact;
cmdCategory = "Tactical";
cmdIcon = CMDGroundMPBIcon;
cmdMiniIconName = "commander/MiniIcons/com_mpb_grey";
targetNameTag = 'Ammunition';
targetTypeTag = 'Pod';
sensorData = VehiclePulseSensor;
observeParameters = "1 12 12";
shieldEffectScale = "0.85 1.2 0.7";
};
function MakeAmmoPod(%frd, %right, %src, %i) {
if(!isObject(%src)) {
return;
}
%vec = vectorAdd(vectorScale(%right,getWord($PodPos[%i],0)),vectorScale(%frd,getWord($PodPos[%i],1)));
%posa = vectorAdd(%src.getPosition(),%vec);
%pos = vectorAdd(%posa, "0 0 -16");
%pod = new WheeledVehicle() {
dataBlock = AmmoPod;
position = %pos;
rotation = "0 0 1 0";
team = %src.team;
};
MissionCleanUp.add(%pod);
%pod.flying = 1;
AmmoPodScanLoop(%pod);
return %pod;
}
function AmmoPodScanLoop(%pod) {
if(!isObject(%pod)) {
if(%pod.flying) {
//mid air = die
return;
}
else {
return;
}
}
%podPos = %pod.getPosition();
%ZGrd = GetTerrainHeight(%podPos);
%landPos = ""@getWord(%podPos, 0)@" "@getWord(%podPos, 1)@" "@%ZGrd@"";
//time to land?
if(vectorDist(%podPos, %landPos) < 70) {
echo("ammo pod land");
%pod.setVelocity("0 0 0");
%pod.flying = 0;
//pod explodes...
%pod.damage(0, %pod.GetPosition(), 99999, $DamageType::Explosion);
//Drop Contents
%gunNum = getRandom(1,10);
switch(%gunNum) {
//colt
case 1:
WeaponDrop(%pod.GetPosition(), "pistol");
//S3
case 2:
WeaponDrop(%pod.GetPosition(), "S3Rifle");
//Mp26
case 3:
WeaponDrop(%pod.GetPosition(), "Mp26");
//Pg700
case 4:
WeaponDrop(%pod.GetPosition(), "Pg700");
//RPG
case 5:
WeaponDrop(%pod.GetPosition(), "RPG");
//Flamer
case 6:
WeaponDrop(%pod.GetPosition(), "flamer");
//wp400
case 7:
WeaponDrop(%pod.GetPosition(), "WP400");
//m1700
case 8:
WeaponDrop(%pod.GetPosition(), "M1700");
//miniCG
case 9:
WeaponDrop(%pod.GetPosition(), "MiniChaingun");
//Rep Kits
case 10:
for(%i = 0; %i < 4; %i++) {
%blockNum = getRandom(1,2);
if(%blockNum == 1) {
%block = RepairKit;
}
else {
%block = RepairPatch;
}
%reps = new Item() {
datablock = %block;
static = false;
rotate = false;
position = %pod.getPosition();
};
missionCleanup.add(%reps);
}
}
}
schedule(250, 0, "AmmoPodScanLoop", %pod);
}