SkillSector/scripts/SkillSectorTeleporter.cs

125 lines
4.1 KiB
C#

// stolen from classic
datablock StaticShapeData(BankTeleporter): StaticShapeDamageProfile {
className = Station;
catagory = "Stations";
shapeFile = "nexusbase.dts";
maxDamage = 1.20;
destroyedLevel = 1.20;
disabledLevel = 0.84;
explosion = ShapeExplosion;
expDmgRadius = 10.0;
expDamage = 0.4;
expImpulse = 1500.0;
dynamicType = $TypeMasks::StationObjectType;
isShielded = true;
energyPerDamagePoint = 33;
maxEnergy = 250;
rechargeRate = 0.31;
humSound = StationVehicleHumSound;
// don't let these be damaged in Siege missions
noDamageInSiege = true;
cmdCategory = "Support";
cmdIcon = CMDVehicleStationIcon;
cmdMiniIconName = "commander/MiniIcons/com_vehicle_pad_inventory";
targetNameTag = 'MPB';
targetTypeTag = 'Teleport Station';
teleporter = 1;
};
//datablock ParticleData(mpbteleportparticle)
//datablock ParticleEmitterData(MPBTeleportEmitter)
function BankTeleporter::onCollision(%data, %obj, %collider) {
// Teleporters are generally one way in Skill Sector
// Teleporter entities are linked to 'spawn point' objects
echo("BankTeleporter collision: " @ %obj @ " and collider: " @ %collider);
echo("Banker: " @ %obj.desc);
if (%obj.disabled) {
messageClient(%collider.client, 'MsgStationDenied', '\c2Teleporter is recharging please stand by. ~wfx/powered/nexus_deny.wav');
return;
}
//messageClient(%collider.client, 'MsgTeleportStart', '\c2Teleporter is calculating transport coherence... ~wfx/misc/nexus_idle.wav');
%collider.setVelocity("0 0 0");
%collider.setMoveState(true);
%collider.startFade(1000, 0, true);
%collider.playAudio($ActivateThread, StationVehicleAcitvateSound);
%obj.disabled = 1;
%obj.setThreadDir($ActivateThread, 1);
%obj.playThread($ActivateThread, "activate");
%data.sparkEmitter(%obj);
%data.schedule(1500, "teleportout", %obj, %collider);
%data.schedule(3000, "teleportingDone", %obj, %collider);
if (%obj.desc !$= "") {
echo("isObject passed");
echo(%obj.desc);
centerprint(%collider.client, %obj.desc, 5, 3);
}
}
function BankTeleporter::teleportOut(%data, %obj, %player) {
if(isObject(%obj.destination)) {
%player.setTransform(%obj.destination.getTransform());
} else {
messageClient(%player.client, 'MsgTeleFailed', 'No valid teleporting destination.');
%player.teleporting = 0;
}
%data.schedule(1000, "teleportIn", %player);
}
function BankTeleporter::teleportIn(%data, %player) {
messageClient(%collider.client, 'MsgTeleportStart', '\c2Teleport to '@ %data.destination @' complete! ~wfx/powered/nexus_idle.wav');
%data.sparkEmitter(%player); // z0dd - ZOD, 4/24/02. teleport sparkles
%player.startFade(1000, 0, false);
%player.playAudio($PlaySound, StationVehicleDeactivateSound);
}
function BankTeleporter::reEnable(%data, %obj) {
%obj.disabled = 0;
}
function BankTeleporter::sparkEmitter(%data, %obj) {
if (isObject(%obj.teleportEmitter))
%obj.teleportEmitter.delete();
%obj.teleportEmitter = new ParticleEmissionDummy() {
position = %obj.position;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = defaultEmissionDummy;
emitter = "MPBTeleportEmitter";
velocity = "1";
};
MissionCleanup.add(%obj.teleportEmitter);
%obj.teleportEmitter.schedule(800, "delete");
if (isObject(%obj.teleEmitter))
%obj.teleEmitter.delete();
%obj.teleEmitter = new ParticleEmissionDummy() {
position = %obj.position;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = defaultEmissionDummy;
emitter = "FlyerJetEmitter";
velocity = "1";
};
MissionCleanup.add(%obj.teleEmitter);
%obj.teleEmitter.schedule(700, "delete");
}
function BankTeleporter::teleportingDone(%data, %obj, %player)
{
%player.setMoveState(false);
%player.teleporting = 0;
%player.station = "";
%data.reEnable(%obj);
if(%player.getMountedImage($WeaponSlot) == 0)
{
if(%player.inv[%player.lastWeapon])
%player.use(%player.lastWeapon);
else
%player.selectWeaponSlot(0);
}
}