mirror of
https://github.com/Ragora/T2-ACCM.git
synced 2026-03-19 04:10:44 +00:00
Initial commit.
This commit is contained in:
commit
f5a6cfce9b
262 changed files with 128936 additions and 0 deletions
577
missions/mapscripts/Teleporters.Cs
Normal file
577
missions/mapscripts/Teleporters.Cs
Normal file
|
|
@ -0,0 +1,577 @@
|
|||
|
||||
deleteFile("missions/mapscripts/teleporters.cs.dso");
|
||||
//------------teleport code by sparky----------
|
||||
//-------------------V2.0.0---------------------
|
||||
//------------special effects by TseTse--------
|
||||
|
||||
|
||||
|
||||
datablock StaticShapeData(Teleporter)
|
||||
{
|
||||
|
||||
catagory = "Teleporters";
|
||||
// shapefile = "Nexusbase.dts";
|
||||
shapefile = "nexusbase.dts";
|
||||
mass = 10;
|
||||
elasticity = 0.2;
|
||||
friction = 0.6;
|
||||
pickupRadius = 2;
|
||||
targetNameTag = '';
|
||||
targetTypeTag = 'Teleporter';
|
||||
//----------------------------------
|
||||
maxDamage = 1.00;
|
||||
destroyedLevel = 1.00;
|
||||
disabledLevel = 0.70;
|
||||
explosion = ShapeExplosion;
|
||||
expDmgRadius = 8.0;
|
||||
expDamage = 0.4;
|
||||
expImpulse = 1500.0;
|
||||
// don't allow this object to be damaged in non-team-based
|
||||
// mission types (DM, Rabbit, Bounty, Hunters)
|
||||
noIndividualDamage = true;
|
||||
|
||||
dynamicType = $TypeMasks::StationObjectType;
|
||||
isShielded = true;
|
||||
energyPerDamagePoint = 75;
|
||||
maxEnergy = 50;
|
||||
rechargeRate = 0.35;
|
||||
doesRepair = true;
|
||||
humSound = StationInventoryHumSound;
|
||||
|
||||
cmdCategory = "Support";
|
||||
cmdIcon = CMDStationIcon;
|
||||
cmdMiniIconName = "commander/MiniIcons/com_inventory_grey";
|
||||
|
||||
debrisShapeName = "debris_generic.dts";
|
||||
debris = StationDebris;
|
||||
//----------------------------------------
|
||||
};
|
||||
datablock Staticshapedata(teledestroyed) : teleporter
|
||||
{
|
||||
shapefile = "station_teleport.dts";
|
||||
|
||||
};
|
||||
|
||||
|
||||
$playerreject = 6;
|
||||
function Teleporter::onDestroyed(%data, %obj, %prevState)
|
||||
{
|
||||
//set the animations
|
||||
%obj.playThread(1, "transition");
|
||||
%obj.setThreadDir(1, true);
|
||||
%obj.setDamageState(Destroyed);
|
||||
%obj.setDatablock(teledestroyed);
|
||||
%obj.getDataBlock().onLosePowerDisabled(%obj);
|
||||
|
||||
}
|
||||
//---this is where I create the triggers and put them right over the nexus base's
|
||||
function teleporter::onEnabled(%data, %obj, %prevState)
|
||||
{
|
||||
echo(%obj);
|
||||
|
||||
%obj.setDatablock(teleporter);
|
||||
Parent::onEnabled(%data, %obj, %prevState);
|
||||
}
|
||||
function teledestroyed::onEnabled(%data, %obj, %prevState)
|
||||
{
|
||||
echo(%obj);
|
||||
%level = %obj.getdamagelevel();
|
||||
%obj.setDatablock(teleporter);
|
||||
%obj.setdamagelevel(%level);
|
||||
if(%obj.ispowered())
|
||||
{
|
||||
%obj.playthread(1, "transition");
|
||||
%obj.setThreadDir(1, false);
|
||||
%obj.playThread(0, "ambient");
|
||||
%obj.setThreadDir(0, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
%obj.playThread(0, "transition");
|
||||
%obj.setThreadDir(0, false);
|
||||
}
|
||||
Parent::onEnabled(%data, %obj, %prevState);
|
||||
}
|
||||
|
||||
function Teleporter::gainPower(%data, %obj)
|
||||
{
|
||||
|
||||
%obj.setDatablock(teleporter);
|
||||
Parent::gainPower(%data, %obj);
|
||||
%obj.playthread(1, "transition");
|
||||
%obj.setThreadDir(1, false);
|
||||
%obj.playThread(0, "ambient");
|
||||
%obj.setThreadDir(0, true);
|
||||
}
|
||||
function Teleporter::losePower(%data, %obj)
|
||||
{
|
||||
%obj.playThread(0, "transition");
|
||||
%obj.setThreadDir(0, false);
|
||||
Parent::losePower(%data, %obj);
|
||||
}
|
||||
//---this is where I create the triggers and put them right over the nexus base's
|
||||
function Teleporter::onAdd(%this, %obj)
|
||||
{
|
||||
Parent::onAdd(%this, %obj);
|
||||
|
||||
%tp = %obj;
|
||||
%trigger = new Trigger()
|
||||
{
|
||||
dataBlock = NewTeleportTrigger;
|
||||
polyhedron = "-0.75 0.75 0.1 1.5 0.0 0.0 0.0 -1.5 0.0 0.0 0.0 2.3";
|
||||
};
|
||||
|
||||
MissionCleanup.add(%trigger);
|
||||
if(%tp.logoscale $= "")
|
||||
%tp.logoscale = " ";
|
||||
if(%tp.noflag $= "")
|
||||
%tp.noflag = " ";
|
||||
if(%tp.oneway $= "")
|
||||
%tp.oneway = " ";
|
||||
if(%tp.message $= "")
|
||||
%tp.message = " ";
|
||||
|
||||
%trigger.setTransform(%tp.getTransform());
|
||||
%trigger.targetbase = $lastteleporter;
|
||||
%trigger.team = %tp.team;
|
||||
%trigger.motherObj = %tp; // tag relative object
|
||||
%trigger.sourcebase = %tp; // tag relative object
|
||||
%trigger.message = %tp.message;
|
||||
%trigger.logoscale = %tp.logoscale;
|
||||
%trigger.noflag = %tp.noflag;
|
||||
%trigger.oneway = %tp.oneway;
|
||||
%tp.trigger = %trigger;
|
||||
$lastteleporter.targetbase = %tp.trigger;
|
||||
$lastteleporter = %tp.trigger;
|
||||
$linkflag = $linkflag + 1;
|
||||
if($linkflag == 2)
|
||||
{
|
||||
$lastteleporter = 0;
|
||||
$linkflag = 0;
|
||||
}
|
||||
//--------------do we need power?-----------------------
|
||||
%tp.playThread(1, "ambient");
|
||||
%tp.playThread(0, "transition");
|
||||
%tp.playThread(0, "ambient");
|
||||
|
||||
|
||||
%newHolo = getTaggedString(game.getTeamSkin(%trigger.team)) @ "Logo";
|
||||
%teleholo1 = getTaggedString(game.getTeamSkin(1)) @ "Logo";
|
||||
%teleholo2 = getTaggedString(game.getTeamSkin(2)) @ "Logo";
|
||||
|
||||
%pos = %trigger.position;
|
||||
|
||||
if(%trigger.logoscale !$= " ")
|
||||
{
|
||||
if(%tp.team != 0)
|
||||
{
|
||||
%holo = new StaticShape()
|
||||
{
|
||||
rotation = rotfromtransform(%trigger.gettransform());
|
||||
position = getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2) + 1;
|
||||
dataBlock = %newHolo;
|
||||
scale = %trigger.logoscale;
|
||||
};
|
||||
|
||||
|
||||
MissionCleanup.add(%holo);
|
||||
%trigger.sourcebase.holo = %holo;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if(%tp.waypoint !$= "")
|
||||
{
|
||||
%wp = new WayPoint()
|
||||
{
|
||||
scale = "1 1 1";
|
||||
nameTag = %tp.waypoint;
|
||||
dataBlock = "WayPointMarker";
|
||||
lockCount = "0";
|
||||
homingCount = "0";
|
||||
name = %tp.waypoint;
|
||||
};
|
||||
|
||||
MissionCleanup.add(%wp);
|
||||
%wp.setTransform(%tp.getTransform());
|
||||
}
|
||||
if(%tp.team == 0)
|
||||
%logostatus = schedule(1000,0,checklogostatus,%tp);
|
||||
}
|
||||
|
||||
|
||||
datablock TriggerData(NewTeleportTrigger)
|
||||
{
|
||||
tickPeriodMS = 30;
|
||||
};
|
||||
//--------------teleporter code here------------------
|
||||
|
||||
|
||||
|
||||
function setPlayersPosition2(%data, %obj, %trigger, %colObj)
|
||||
{
|
||||
%vel = getWords(%colObj.getVelocity(), 0, 1) @ " 0";
|
||||
if((VectorLen(%vel) < 22) && (%obj.triggeredBy != %colObj))
|
||||
{
|
||||
%pos = %trigger.position;
|
||||
%colObj.setvelocity("0 0 0");
|
||||
%rot = getWords(%colObj.getTransform(),3, 6);
|
||||
%colObj.setTransform(getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2) + 0.8 @ " " @ %rot); //center player on object
|
||||
%colObj.setMoveState(true);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function NewTeleportTrigger::onEnterTrigger(%data, %trigger, %player)
|
||||
{
|
||||
%colObj = %player;
|
||||
%client = %player.client;
|
||||
|
||||
|
||||
if(%player.transported $= "1") // if this player was just transported
|
||||
{
|
||||
%player.transported = "0";
|
||||
%colObj.setMoveState(false);
|
||||
%player.llamathread = schedule(3000,0,"playerdamage",%player, true);
|
||||
return; // then get out or it will never stop
|
||||
}
|
||||
//--------------do we have power?-----------------------
|
||||
if(%trigger.sourcebase.ispowered() == 0)
|
||||
{
|
||||
messageClient(%Player.client, 'MsgClient', "\c0Teleporter is not powered.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//----------------------disabled?-----------------------
|
||||
if(%trigger.sourcebase.isDisabled())
|
||||
{
|
||||
messageClient(%colObj.client, 'msgStationDisabled', '\c2Teleporter is disabled.');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//--------------are we on the right team?-----------------------
|
||||
if(%player.team != %trigger.sourcebase.team)
|
||||
{
|
||||
if(%trigger.sourcebase.team != 0)
|
||||
{
|
||||
%playervelocity = vectorscale(vectornormalize(%player.getvelocity()), 0.5);
|
||||
%xv = getword(%playervelocity, 0);
|
||||
%yv = getword(%playervelocity, 1);
|
||||
%zv = getword(%playervelocity, 2);
|
||||
|
||||
if(getSubStr(%xv,0,1) !$= "-")
|
||||
%xv = "-" @ %xv + $playerreject;
|
||||
else
|
||||
%xv = getsubstr(%xv,1,strlen(%xv - 1)) + $playerreject;
|
||||
|
||||
if(getSubStr(%yv,0,1) !$= "-")
|
||||
%yv = "-" @ %yv + $playerreject;
|
||||
else
|
||||
%yv = getsubstr(%yv,1,strlen(%yv - 1)) + $playerreject;
|
||||
|
||||
if(getSubStr(%zv,0,1) !$= "-")
|
||||
%zv = "-" @ %zv + $playerreject;
|
||||
else
|
||||
%zv = getsubstr(%zv,1,strlen(%zv - 1)) + $playerreject;
|
||||
|
||||
%player.setVelocity(%xv SPC %yv SPC %zv );
|
||||
messageClient(%Player.client, 'MsgClient', "\c0Wrong team.");
|
||||
%player.llamathread = schedule(1000,0,"playerdamage",%player, true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//------------are we teleporting?-----------------------
|
||||
if(%trigger.teleporting == "1")
|
||||
{
|
||||
%playervelocity = vectorscale(vectornormalize(%player.getvelocity()), 0.5);
|
||||
%xv = getword(%playervelocity, 0);
|
||||
%yv = getword(%playervelocity, 1);
|
||||
%zv = getword(%playervelocity, 2);
|
||||
|
||||
if(getSubStr(%xv,0,1) !$= "-")
|
||||
%xv = "-" @ %xv + $playerreject;
|
||||
else
|
||||
%xv = getsubstr(%xv,1,strlen(%xv - 1)) + $playerreject;
|
||||
|
||||
if(getSubStr(%yv,0,1) !$= "-")
|
||||
%yv = "-" @ %yv + $playerreject;
|
||||
else
|
||||
%yv = getsubstr(%yv,1,strlen(%yv - 1)) + $playerreject;
|
||||
|
||||
if(getSubStr(%zv,0,1) !$= "-")
|
||||
%zv = "-" @ %zv + $playerreject;
|
||||
else
|
||||
%zv = getsubstr(%zv,1,strlen(%zv - 1)) + $playerreject;
|
||||
|
||||
|
||||
%player.setVelocity(%xv SPC %yv SPC %zv );
|
||||
|
||||
messageClient(%Player.client, 'MsgClient', "\c0Teleporter in use.");
|
||||
return;
|
||||
}
|
||||
//-------------is this a oneway teleporter?------------------------
|
||||
if(%trigger.oneway == "1")
|
||||
{
|
||||
%playervelocity = vectorscale(vectornormalize(%player.getvelocity()), 0.5);
|
||||
%xv = getword(%playervelocity, 0);
|
||||
%yv = getword(%playervelocity, 1);
|
||||
%zv = getword(%playervelocity, 2);
|
||||
|
||||
if(getSubStr(%xv,0,1) !$= "-")
|
||||
%xv = "-" @ %xv + $playerreject;
|
||||
else
|
||||
%xv = getsubstr(%xv,1,strlen(%xv - 1)) + $playerreject;
|
||||
|
||||
if(getSubStr(%yv,0,1) !$= "-")
|
||||
%yv = "-" @ %yv + $playerreject;
|
||||
else
|
||||
%yv = getsubstr(%yv,1,strlen(%yv - 1)) + $playerreject;
|
||||
|
||||
if(getSubStr(%zv,0,1) !$= "-")
|
||||
%zv = "-" @ %zv + $playerreject;
|
||||
else
|
||||
%zv = getsubstr(%zv,1,strlen(%zv - 1)) + $playerreject;
|
||||
|
||||
|
||||
%player.setVelocity(%xv SPC %yv SPC %zv );
|
||||
|
||||
messageClient(%player.client, 'MsgLeaveMissionArea', '\c1This teleporter is oneway only.~wfx/misc/warning_beep.wav');
|
||||
return;
|
||||
}
|
||||
|
||||
//-------------are we teleporting with flag?----------------------------------------
|
||||
|
||||
%flag = %player.holdingflag;
|
||||
|
||||
if(%player.holdingFlag > 0)
|
||||
{
|
||||
if(%trigger.noflag $= "1")
|
||||
{
|
||||
if(%flag.team == 1)
|
||||
%otherTeam = 2;
|
||||
else
|
||||
%otherTeam = 1;
|
||||
game.flagReset(%player.holdingflag);
|
||||
messageTeam(%otherTeam, 'MsgCTFFlagReturned', '\c2 %1 tried to teleport with the %2 flag.~wfx/misc/flag_return.wav', %client.name, $teamName[%flag.team], %flag.team);
|
||||
messageTeam(%flag.team, 'MsgCTFFlagReturned', '\c2Your flag was returned.~wfx/misc/flag_return.wav', 0, 0, %flag.team);
|
||||
messageTeam(0, 'MsgCTFFlagReturned', '\c2The %2 flag was returned to base.~wfx/misc/flag_return.wav', 0, $teamName[%flag.team], %flag.team);
|
||||
}
|
||||
}
|
||||
|
||||
setPlayersPosition2(%data, %obj, %trigger, %colObj);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
%player.transported = "1";
|
||||
|
||||
if(%trigger.message !$= " ")
|
||||
messageClient(%Player.client, 'MsgClient', "\c0 " @ %trigger.message);
|
||||
|
||||
|
||||
|
||||
%rot = rotFromTransform( %player.getTransform() );
|
||||
%player.startfade(500,0,true);
|
||||
teleporteffect(posfromtransform(%player.gettransform()));
|
||||
%pos = posFromTransform(%trigger.targetbase.getTransform() );
|
||||
|
||||
%x = getword(%pos, 0); // left of center
|
||||
%y = getword(%pos, 1); // "forward" adjustment
|
||||
%z = getword(%pos, 2) + 0.5; // VERTICLE
|
||||
%exitpos = %x SPC %y SPC %z; // new position
|
||||
teleporteffect(%exitpos);
|
||||
%trigger.teleporting = "1";
|
||||
%player.sourcetrigger = %trigger;
|
||||
%player.desttrigger = %trigger.targetbase;
|
||||
%player.desttrigger.teleporting = "1";
|
||||
%player.schedule(500, "settransform", %exitpos @ " " @ %rot);
|
||||
%player.schedule(500, "startfade", 500, 0, false);
|
||||
%colObj.schedule(500, "setmovestate", false);
|
||||
if(%trigger.sourcebase == %trigger.targetbase)
|
||||
{
|
||||
NewTeleportTrigger::onleaveTrigger(%data, %trigger, %player);
|
||||
NewTeleportTrigger::onEnterTrigger(%data, %trigger, %player);
|
||||
}
|
||||
|
||||
|
||||
//-----hope this works?!?!?--------------------------------------------------
|
||||
|
||||
|
||||
}
|
||||
|
||||
function NewTeleportTrigger::onleaveTrigger(%data, %trigger, %player)
|
||||
{
|
||||
if(%player.team !$= %trigger.team)
|
||||
cancel(%player.llamaThread);
|
||||
|
||||
if(%player.desttrigger == %trigger)
|
||||
{
|
||||
cancel(%player.llamaThread);
|
||||
%player.sourcetrigger.teleporting = "0";
|
||||
%player.desttrigger.teleporting = "0";
|
||||
%player.sourcetrigger = "0";
|
||||
%player.desttrigger = "0";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
function NewTeleportTrigger::onTickTrigger(%data, %obj)
|
||||
{
|
||||
Game.onTickTrigger(%obj.name, %data, %obj);
|
||||
}
|
||||
|
||||
function teleporteffect(%position)
|
||||
{
|
||||
%pos = %position;
|
||||
|
||||
%effect1 = new ParticleEmissionDummy()
|
||||
{
|
||||
position = %pos;
|
||||
rotation = "1 0 0 0";
|
||||
scale = "1 1 1";
|
||||
dataBlock = "doubleTimeEmissionDummy";
|
||||
lockCount = "0";
|
||||
homingCount = "0";
|
||||
emitter = "AABulletExplosionEmitter2";
|
||||
velocity = "1";
|
||||
};
|
||||
%effect2 = new ParticleEmissionDummy()
|
||||
{
|
||||
position = getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2) + 0.5;
|
||||
rotation = "1 0 0 0";
|
||||
scale = "1 1 1";
|
||||
dataBlock = "doubleTimeEmissionDummy";
|
||||
lockCount = "0";
|
||||
homingCount = "0";
|
||||
emitter = "AABulletExplosionEmitter2";
|
||||
velocity = "1";
|
||||
};
|
||||
|
||||
%effect3 = new ParticleEmissionDummy()
|
||||
{
|
||||
position = getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2) + 1;
|
||||
rotation = "1 0 0 0";
|
||||
scale = "1 1 1";
|
||||
dataBlock = "doubleTimeEmissionDummy";
|
||||
lockCount = "0";
|
||||
homingCount = "0";
|
||||
emitter = "AABulletExplosionEmitter2";
|
||||
velocity = "1";
|
||||
};
|
||||
%effect4 = new ParticleEmissionDummy()
|
||||
{
|
||||
position = getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2) + 1.5;
|
||||
rotation = "1 0 0 0";
|
||||
scale = "1 1 1";
|
||||
dataBlock = "doubleTimeEmissionDummy";
|
||||
lockCount = "0";
|
||||
homingCount = "0";
|
||||
emitter = "AABulletExplosionEmitter2";
|
||||
velocity = "1";
|
||||
};
|
||||
MissionCleanup.add(%effect1);
|
||||
MissionCleanup.add(%effect2);
|
||||
MissionCleanup.add(%effect3);
|
||||
MissionCleanup.add(%effect4);
|
||||
%effect1.schedule(2000, "delete");
|
||||
%effect2.schedule(2000, "delete");
|
||||
%effect3.schedule(2000, "delete");
|
||||
%effect4.schedule(2000, "delete");
|
||||
|
||||
}
|
||||
function playerdamage(%this, %firstWarning)
|
||||
{
|
||||
%player = %this;
|
||||
|
||||
if (!isObject(%player) || %player.getState() $= "Dead")
|
||||
{
|
||||
messageClient(%player.client, 'MsgClient', "\c0Camping on a teleporter is not cool.");
|
||||
return;
|
||||
}
|
||||
|
||||
if(%firstwarning)
|
||||
{
|
||||
messageClient(%player.client, 'MsgLeaveMissionArea', '\c1Move off the teleporter or take damage.~wfx/misc/warning_beep.wav');
|
||||
%player.llamathread = schedule(3000,0,"playerdamage",%this, false);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
%this.setdamageflash(0.3);
|
||||
|
||||
%this.damage(0, %player.position, 0.04, $DamageType::radiation);
|
||||
|
||||
|
||||
%player.llamathread = schedule(1000,0,"playerdamage",%this, false);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function checklogostatus(%logostat)
|
||||
{
|
||||
|
||||
if(!isObject(%logostat))
|
||||
return;
|
||||
if(%logostat.logoscale $= " ")
|
||||
return;
|
||||
|
||||
|
||||
%status = schedule(1000,0,checklogostatus,%logostat);
|
||||
%tp = %logostat;
|
||||
|
||||
if(%tp.team != %tp.lastteam)
|
||||
{
|
||||
%tp.lastteam = %tp.team;
|
||||
if(%tp.holo > 0)
|
||||
%tp.holo.delete();
|
||||
|
||||
if(%tp.targetbase1 !$= "")
|
||||
{
|
||||
if(%tp.team $= "1")
|
||||
{
|
||||
%tp.trigger.targetbase = %tp.targetbase1;
|
||||
}
|
||||
if(%tp.team $= "2")
|
||||
{
|
||||
%tp.trigger.targetbase = %tp.targetbase2;
|
||||
}
|
||||
}
|
||||
|
||||
%newHolo = getTaggedString(game.getTeamSkin(%tp.team)) @ "Logo";
|
||||
%pos = %tp.trigger.position;
|
||||
|
||||
%holo = new StaticShape()
|
||||
{
|
||||
rotation = rotfromtransform(%tp.gettransform());
|
||||
position = getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2) + 1;
|
||||
dataBlock = %newHolo;
|
||||
scale = %tp.logoscale;
|
||||
};
|
||||
// dump the hologram into MissionCleanup
|
||||
MissionCleanup.add(%holo);
|
||||
// associate the holo with the teleporter
|
||||
%tp.holo = %holo;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
//Teleport code ends here----------------------------------------
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue