T2-ACCM/scripts/packs/DeployableWaypoint.cs

164 lines
4.6 KiB
PHP
Raw Permalink Normal View History

2013-02-01 20:45:22 +00:00
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Deployable Waypoint - Made by Dark Dragon DX
//------------------------------------------------------------------------------
datablock StaticShapeData(DeployedWaypoint) : StaticShapeDamageProfile {
className = "Waypoint";
shapeFile = "camera.dts";
maxDamage = 5.0;
destroyedLevel = 5.0;
disabledLevel = 2.5;
isShielded = true;
energyPerDamagePoint = 240;
maxEnergy = 50;
rechargeRate = 0.25;
explosion = HandGrenadeExplosion;
expDmgRadius = 5.0;
expDamage = 0.5;
expImpulse = 200.0;
dynamicType = $TypeMasks::StaticShapeObjectType;
deployedObject = true;
cmdCategory = "DSupport";
cmdIcon = CMDSensorIcon;
cmdMiniIconName = "commander/MiniIcons/com_deploymotionsensor";
targetNameTag = 'Waypoint Pack';
deployAmbientThread = true;
debrisShapeName = "debris_generic_small.dts";
debris = DeployableDebris;
heatSignature = 0;
needsPower = true;
};
datablock ShapeBaseImageData(WaypointDeployableImage) {
mass = 1;
emap = true;
shapeFile = "stackable1s.dts";
item = Waypointdeployable;
mountPoint = 1;
offset = "0 0 0";
deployed = Deployedwaypoint;
heatSignature = 0;
stateName[0] = "Idle";
stateTransitionOnTriggerDown[0] = "Activate";
stateName[1] = "Activate";
stateScript[1] = "onActivate";
stateTransitionOnTriggerUp[1] = "Idle";
isLarge = true;
maxDepSlope = 360;
deploySound = ItemPickupSound;
minDeployDis = 0.1;
maxDeployDis = 50.0;
};
datablock ItemData(WaypointDeployable) {
className = Pack;
catagory = "Deployables";
shapeFile = "stackable1s.dts";
mass = 1;
elasticity = 0.2;
friction = 0.6;
pickupRadius = 1;
joint = "1 1 1";
rotate = true;
image = "WaypointDeployableImage";
pickUpName = "a waypoint pack";
heatSignature = 0;
emap = true;
};
function WaypointDeployableImage::testObjectTooClose(%item) {
return "";
}
function WaypointDeployableImage::testNoTerrainFound(%item) {
// don't check this for non-Landspike turret deployables
}
function WaypointDeployable::onPickup(%this, %obj, %shape, %amount) {
// created to prevent console errors
}
function WaypointDeployableImage::onDeploy(%item, %plyr, %slot) {
%className = "StaticShape";
%grounded = 0;
if (%item.surface.getClassName() $= TerrainBlock)
%grounded = 1;
%playerVector = vectorNormalize(-1 * getWord(%plyr.getEyeVector(),1) SPC getWord(%plyr.getEyeVector(),0) SPC "0");
if (%item.surfaceinher == 0) {
if (vAbs(floorVec(%item.surfaceNrm,100)) $= "0 0 1")
%item.surfaceNrm2 = %playerVector;
else
%item.surfaceNrm2 = vectorNormalize(vectorCross(%item.surfaceNrm,"0 0 1"));
}
%rot = fullRot(%item.surfaceNrm,%item.surfaceNrm2);
%scale = getWords($packSetting["mspine",%plyr.packSet],0,2);
%mod = 0.5;
%rndcolor = getrandom(0,5);
%deplObj = new (%className)() {
dataBlock = DeployedWaypoint;
team = %plyr.team;
scale = "1 1 1";
};
%deplObj.wp = new (WayPoint)(){
dataBlock = WayPointMarker;
name = %plyr.client.namebase@"'s Waypoint";
team = %plyr.team;
scale = "0.1 0.1 0.1";
};
MissionCleanup.add(%deplObj.wp);
%mod = 0;
%h1=vectorAdd(%item.surfacePt,vectorScale(vectorNormalize(%item.surfaceNrm),%mod));
%deplObj.wp.setTransform(%h1 SPC %rot);
%deplObj.setTransform(%h1 SPC %rot);
%deplObj.team = %plyr.client.team;
%deplObj.setOwner(%plyr);
addToDeployGroup(%deplObj);
AIDeployObject(%plyr.client, %deplObj);
$TeamDeployedCount[%plyr.team, %item.item]++;
%deplObj.deploy();
serverPlay3D(%item.deploySound, %deplObj.getTransform());
%deplObj.grounded = %grounded;
%deplObj.needsFit = 1;
if (%deplObj.getTarget() != -1)
setTargetSensorGroup(%deplObj.getTarget(), %plyr.client.team);
%deplObj.deploy();
%plyr.unmountImage(%slot);
%plyr.decInventory(%item.item, 1);
return %deplObj;
}
function deployedWaypoint::onDestroyed(%this, %obj, %prevState) {
if (%obj.isRemoved)
return;
%obj.isRemoved = true;
Parent::onDestroyed(%this, %obj, %prevState);
$TeamDeployedCount[%obj.team, waypointdeployable]--;
remDSurface(%obj);
%obj.schedule(500,"delete");
%obj.wp.schedule(500,"delete");
cascade(%obj);
fireBallExplode(%obj,1);
}
function deployedwaypoint::disassemble(%data, %plyr, %obj){
disassemble(%data,%plyr,%obj);
%obj.wp.schedule(500, "delete");
}