mirror of
https://github.com/Ragora/T2-ACCM.git
synced 2026-01-20 03:14:44 +00:00
484 lines
17 KiB
C#
484 lines
17 KiB
C#
////////////////////////////////////
|
|
// AVAILABLE TEXTURES
|
|
$TextureToolLabel[1] = "Pads";
|
|
$TextureTool[1, 1] = "DeployedSpine (LSB) Light Support Beam";
|
|
$TextureTool[1, 2] = "DeployedMSpine (MSB) Medium Support Beam";
|
|
$TextureTool[1, 3] = "DeployedWWall Walk Way";
|
|
$TextureTool[1, 4] = "DeployedWall (Bwall) Shady Light Support Beam";
|
|
$TextureTool[1, 5] = "DeployedSpine2 Dark Pad";
|
|
$TextureTool[1, 6] = "DeployedDecoration16 Blue Pad";
|
|
|
|
$TextureToolLabel[2] = "Crates";
|
|
$TextureTool[2, 1] = "DeployedCrate0 (crate1) Back Pack";
|
|
$TextureTool[2, 2] = "DeployedCrate1 (crate2) small containment";
|
|
$TextureTool[2, 3] = "DeployedCrate2 (crate3) large containment";
|
|
$TextureTool[2, 4] = "DeployedCrate3 (crate4) compressor";
|
|
$TextureTool[2, 5] = "DeployedCrate4 (crate5) tubes";
|
|
$TextureTool[2, 6] = "DeployedCrate5 (crate6) quantum battery";
|
|
$TextureTool[2, 7] = "DeployedCrate6 (crate7) proton accelerator";
|
|
$TextureTool[2, 8] = "DeployedCrate7 (crate8) cargo crate";
|
|
$TextureTool[2, 9] = "DeployedCrate8 (crate9) magnetic cooler";
|
|
$TextureTool[2, 10] = "DeployedCrate9 (crate10) recycle unit";
|
|
$TextureTool[2, 11] = "DeployedCrate10 (crate11) fuel cannister";
|
|
$TextureTool[2, 12] = "DeployedCrate12 (crate12) plasma router";
|
|
|
|
$TextureToolLabel[3] = "Decorations";
|
|
$TextureTool[3, 1] = "DeployedDecoration6 (deco1) Statue Base";
|
|
|
|
$TextureToolLabel[4] = "Forcefields"; // Don't remove the "Dummy"s.
|
|
$TextureTool[4, 1] = "Dummy White, No Pass";
|
|
$TextureTool[4, 2] = "Dummy Red, No Pass";
|
|
$TextureTool[4, 3] = "Dummy Green, No Pass";
|
|
$TextureTool[4, 4] = "Dummy Blue, No Pass";
|
|
$TextureTool[4, 5] = "Dummy Cyan, No Pass";
|
|
$TextureTool[4, 6] = "Dummy Magenta, No Pass";
|
|
$TextureTool[4, 7] = "Dummy Yellow, No Pass";
|
|
$TextureTool[4, 8] = "Dummy White, Team Pass";
|
|
$TextureTool[4, 9] = "Dummy Red, Team Pass";
|
|
$TextureTool[4, 10] = "Dummy Green, Team Pass";
|
|
$TextureTool[4, 11] = "Dummy Blue, Team Pass";
|
|
$TextureTool[4, 12] = "Dummy Cyan, Team Pass";
|
|
$TextureTool[4, 13] = "Dummy Magenta, Team Pass";
|
|
$TextureTool[4, 14] = "Dummy Yellow, Team Pass";
|
|
$TextureTool[4, 15] = "Dummy White, All Pass";
|
|
$TextureTool[4, 16] = "Dummy Red, All Pass";
|
|
$TextureTool[4, 17] = "Dummy Green, All Pass";
|
|
$TextureTool[4, 18] = "Dummy Blue, All Pass";
|
|
$TextureTool[4, 19] = "Dummy Cyan, All Pass";
|
|
$TextureTool[4, 20] = "Dummy Magenta, All Pass";
|
|
$TextureTool[4, 21] = "Dummy Yellow, All Pass";
|
|
$TextureTool[4, 22] = "Dummy Lightning, Solid";
|
|
$TextureTool[4, 23] = "Dummy Scan Line, Solid";
|
|
$TextureTool[4, 24] = "Dummy Grid, Solid";
|
|
$TextureTool[4, 25] = "Dummy Fire Wall, Solid";
|
|
$TextureTool[4, 26] = "Dummy Energy Field, Solid";
|
|
$TextureTool[4, 27] = "Dummy Flashing, Solid";
|
|
$TextureTool[4, 28] = "Dummy Dirty Window, Solid";
|
|
$TextureTool[4, 29] = "Dummy Scan Line, Team Pass";
|
|
$TextureTool[4, 30] = "Dummy Grid, Team Pass";
|
|
$TextureTool[4, 31] = "Dummy Energy Field, Team Pass";
|
|
$TextureTool[4, 32] = "Dummy Flashing, Team Pass";
|
|
$TextureTool[4, 33] = "Dummy Scan Line, All Pass";
|
|
$TextureTool[4, 34] = "Dummy Grid, All Pass";
|
|
$TextureTool[4, 35] = "Dummy Energy Field, All Pass";
|
|
$TextureTool[4, 36] = "Dummy Flashing, All Pass";
|
|
$TextureTool[4, 37] = "Dummy Fire Wall, All Pass";
|
|
$TextureTool[4, 38] = "Dummy Lava, All Pass";
|
|
$TextureTool[4, 39] = "Dummy Water, All Pass";
|
|
$TextureTool[4, 40] = "Dummy Flashing Crossairs, Special";
|
|
$TextureTool[4, 41] = "Dummy Glass Tile, Special";
|
|
$TextureTool[4, 42] = "Dummy Vehicle Icons, Special";
|
|
$TextureTool[4, 43] = "Dummy Space 1, Special";
|
|
$TextureTool[4, 44] = "Dummy Clouds 1, Special";
|
|
$TextureTool[4, 45] = "Dummy Fuzzy Scanlines, Special";
|
|
$TextureTool[4, 46] = "Dummy Space 2, Special";
|
|
$TextureTool[4, 47] = "Dummy Signs, Special";
|
|
$TextureTool[4, 48] = "Dummy Clouds 2, Special";
|
|
$TextureTool[4, 49] = "Dummy Computer Screen, Special";
|
|
$TextureTool[4, 50] = "Dummy Console, Special";
|
|
$TextureTool[4, 51] = "Dummy Standard Force Field, Special";
|
|
|
|
$TextureToolLabel[5] = "Turn Pad into Door";
|
|
$TextureTool[5, 1] = "Regular Pad (not door)";
|
|
$TextureTool[5, 2] = "Normal Door";
|
|
$TextureTool[5, 3] = "Toggle Door";
|
|
$TextureTool[5, 4] = "Power Change Toggle Door (Open When Powered)";
|
|
$TextureTool[5, 5] = "Power Change Toggle Door (Closed When Powered)";
|
|
$TextureTool[5, 6] = "Collision Door (All Access)";
|
|
$TextureTool[5, 7] = "Collision Door (Permission Access)";
|
|
$TextureTool[5, 8] = "Collision Door (Owner-only Access)";
|
|
$TextureTool[5, 9] = "Collision Door (Admin-only Access)";
|
|
|
|
////////////////////////////////////
|
|
// WEAPON
|
|
datablock ItemData(TextureTool)
|
|
{
|
|
className = Weapon;
|
|
catagory = "Spawn Items";
|
|
shapeFile = "weapon_targeting.dts";
|
|
image = TextureToolImage;
|
|
mass = 1;
|
|
elasticity = 0.2;
|
|
friction = 0.6;
|
|
pickupRadius = 2;
|
|
pickUpName = "a texturing tool";
|
|
|
|
computeCRC = true;
|
|
|
|
};
|
|
|
|
datablock ShapeBaseImageData(TextureToolImage)
|
|
{
|
|
className = WeaponImage;
|
|
shapeFile = "weapon_targeting.dts";
|
|
item = TextureTool;
|
|
|
|
usesEnergy = true;
|
|
minEnergy = 0;
|
|
|
|
stateName[0] = "Activate";
|
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
stateSound[0] = BasicSwitchSound;
|
|
stateTimeoutValue[0] = 0.1;
|
|
stateSequence[0] = "Activate";
|
|
|
|
stateName[1] = "ActivateReady";
|
|
stateTransitionOnLoaded[1] = "Ready";
|
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
|
|
|
stateName[2] = "Ready";
|
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
|
|
|
stateName[3] = "Fire";
|
|
stateTransitionOnTimeout[3] = "Reload";
|
|
stateTimeoutValue[3] = 0.2;
|
|
stateFire[3] = true;
|
|
stateAllowImageChange[3] = false;
|
|
stateSequence[3] = "Fire";
|
|
stateSound[3] = MergeToolFireSound;
|
|
stateScript[3] = "onFire";
|
|
|
|
stateName[4] = "Reload";
|
|
stateTransitionOnTimeout[4] = "Ready";
|
|
stateTimeoutValue[4] = 0.1;
|
|
stateAllowImageChange[4] = false;
|
|
|
|
stateName[5] = "CheckWet";
|
|
stateTransitionOnWet[5] = "Fire";
|
|
stateTransitionOnNotWet[5] = "Fire";
|
|
|
|
stateName[6] = "NoAmmo";
|
|
stateTransitionOnAmmo[6] = "Reload";
|
|
stateTransitionOnTriggerDown[6] = "DryFire";
|
|
stateSequence[6] = "NoAmmo";
|
|
|
|
stateName[7] = "DryFire";
|
|
stateTimeoutValue[7] = 0.1;
|
|
stateTransitionOnTimeout[7] = "Ready";
|
|
};
|
|
|
|
////////////////////////////////////
|
|
// SUPPORTING FUNCTIONS
|
|
function TextureToolImage::onFire(%data,%obj,%slot)
|
|
{
|
|
%pos = %obj.getMuzzlePoint($WeaponSlot);
|
|
%vec = %obj.getMuzzleVector($WeaponSlot);
|
|
%targetpos = VectorAdd(%pos, VectorScale(%vec, 200));
|
|
%piece = containerRaycast(%pos, %targetpos, $TypeMasks::StaticShapeObjectType | $TypeMasks::ForceFieldObjectType, %obj);
|
|
%piece = getWord(%piece, 0);
|
|
|
|
if(!isObject(%piece))
|
|
return;
|
|
|
|
// Order reversed to eliminate console spam.
|
|
if(!isObject(Deployables) || !Deployables.isMember(%piece))
|
|
{
|
|
messageClient(%obj.client, "", "\c2TT: That piece is a part of the map and cannot be modified.");
|
|
return;
|
|
}
|
|
|
|
if(%piece.getOwner() != %obj.client && !%obj.client.isAdmin)
|
|
{
|
|
messageClient(%obj.client, "", "\c2TT: You do not own that!");
|
|
return;
|
|
}
|
|
|
|
if(%obj.TTMode == 4)
|
|
RetextureForcefield(%obj, %piece, %obj.TTSubMode - 1);
|
|
else if(%obj.TTMode == 5)
|
|
RetextureDoor(%obj, %piece, %obj.TTSubMode);
|
|
else
|
|
RetexturePad(%obj, %piece, getWord($TextureTool[%obj.TTMode, %obj.TTSubMode], 0));
|
|
}
|
|
|
|
function TextureToolImage::onMount(%data, %obj, %slot)
|
|
{
|
|
parent::onMount(%data, %obj, %slot);
|
|
|
|
if(%obj.TTMode $= "")
|
|
%obj.TTMode = 1;
|
|
if(%obj.TTSubMode $= "")
|
|
%obj.TTSubMode = 1;
|
|
|
|
TTMessage(%obj.client);
|
|
%obj.usingTextureTool = 1;
|
|
}
|
|
|
|
function TextureToolImage::onUnmount(%data, %obj, %slot)
|
|
{
|
|
parent::onUnmount(%data, %obj, %slot);
|
|
%obj.usingTextureTool = 0;
|
|
}
|
|
|
|
function TTMessage(%client)
|
|
{
|
|
if(!isObject(%client))
|
|
return;
|
|
|
|
if(%client.player.TTMode == 5)
|
|
Bottomprint(%client, "<spush><font:Sui Generis:14>>>>Texture Tool<<<<spop>\n<spush><font:Arial:14>Texture tool mode set to "@$TextureToolLabel[%client.player.TTMode]@"\nCurrent door swap set to "@$TextureTool[%client.player.TTMode, %client.player.TTSubMode]@".<spop>", 5, 3);
|
|
else
|
|
Bottomprint(%client, "<spush><font:Sui Generis:14>>>>Texture Tool<<<<spop>\n<spush><font:Arial:14>Texture category set to "@$TextureToolLabel[%client.player.TTMode]@"\nCurrent texture set to "@getWords($TextureTool[%client.player.TTMode, %client.player.TTSubMode], 1, 10)@".<spop>", 5, 3);
|
|
}
|
|
|
|
function RetextureForcefield(%player, %piece, %ff)
|
|
{
|
|
if(%piece.getDatablock().className !$= "forcefield")
|
|
{
|
|
messageClient(%player.client, "", "\c2TT: Wrong type of object.");
|
|
return;
|
|
}
|
|
|
|
%new = new ForceFieldBare() {
|
|
datablock = "DeployedForceField"@%ff;
|
|
scale = %piece.getScale();
|
|
};
|
|
|
|
%new.setTransform(%piece.getTransform());
|
|
|
|
// Each time a forcefield is added, the game automatically adds a new physical zone.
|
|
// We want to make our own, so we'll delete theirs.
|
|
if(isObject(%new.pzone))
|
|
%new.pzone.delete();
|
|
|
|
// Set up all of the statistics and junk -----------------------
|
|
|
|
// Can't forget this...
|
|
if(%piece.noSlow)
|
|
%new.noSlow = true;
|
|
|
|
%new.grounded = %piece.grounded;
|
|
%new.needsFit = %piece.needsFit;
|
|
|
|
%new.team = %piece.team;
|
|
%new.setOwner(%piece.getOwner().player);
|
|
|
|
%new.powerFreq = %piece.powerFreq;
|
|
|
|
if (%new.getTarget() != -1)
|
|
setTargetSensorGroup(%new.getTarget(), %piece.team);
|
|
|
|
addToDeployGroup(%new);
|
|
|
|
AIDeployObject(%new.getOwner(), %new);
|
|
|
|
// Don't increment the team count.
|
|
|
|
checkPowerObject(%new);
|
|
|
|
// Now we delete the old piece.
|
|
if(isObject(%piece.pzone))
|
|
%piece.pzone.delete();
|
|
|
|
%piece.delete();
|
|
}
|
|
|
|
function RetexturePad(%player, %piece, %datablock)
|
|
{
|
|
%classname = %piece.getDatablock().className;
|
|
if((%classname $= "decoration" && (%piece.getDataBlock().getname() $= "DeployedDecoration6" || %piece.getDataBlock().getname() $= "DeployedDecoration16")) || %classname $= "crate" || %classname $= "floor" || %classname $= "spine" || %classname $= "mspine" || %classname $= "wall" || %classname $= "wwall" || %classname $= "Wspine" || %classname $= "Sspine" || %classname $= "floor" || %classname $= "door")
|
|
{
|
|
// %datablock = getword($EditorTool[5, %player.ETSubMode], 0);
|
|
if(%piece.isdoor || %piece.getDatablock().getName() $= "Deployeddoor")
|
|
{
|
|
if(%piece.canMove == false)
|
|
{
|
|
messageClient(%player.client, "", "\c2You can only retexture moveable doors.");
|
|
return;
|
|
}
|
|
|
|
if(%piece.state !$= "closed" && %piece.state !$= "")
|
|
{
|
|
messageClient(%player.client, "", "\c2You can only retexture fully closed doors.");
|
|
return;
|
|
}
|
|
}
|
|
|
|
%new = new StaticShape() {
|
|
datablock = %datablock;
|
|
};
|
|
|
|
%new.setRealSize(%piece.getRealSize());
|
|
%new.setTransform(%piece.getTransform());
|
|
|
|
// Eolk - no dsurface.
|
|
%new.grounded = %piece.grounded;
|
|
%new.needsFit = %piece.needsFit;
|
|
|
|
%new.team = %piece.team;
|
|
|
|
%new.setOwner(%piece.getOwner().player);
|
|
|
|
%new.powerFreq = %piece.powerFreq;
|
|
%new.originalPos = %piece.originalPos;
|
|
|
|
if (%new.getTarget() != -1)
|
|
setTargetSensorGroup(%new.getTarget(), %piece.team);
|
|
|
|
addToDeployGroup(%new);
|
|
|
|
AIDeployObject(%piece.getOwner(), %new);
|
|
|
|
// TODO: Make incrementing/decrementing possible for teamdeploycounts.
|
|
|
|
%new.deploy();
|
|
|
|
checkPowerObject(%new);
|
|
|
|
if(%piece.isDoor || %piece.getDatablock().getName() $= "DeployedDoor")
|
|
{
|
|
%new.closedScale = %piece.getScale();
|
|
%new.openedScale = getword(%piece.getScale(), 0) SPC getword(%piece.getScale(), 1) SPC 0.1;
|
|
%new.isDoor = 1;
|
|
%new.state = %piece.state;
|
|
%new.canMove = %piece.canMove;
|
|
%new.moving = %piece.moving;
|
|
%new.toggleType = %piece.toggleType;
|
|
%new.powerControl = %piece.powerControl;
|
|
%new.toggleType = %piece.toggleType;
|
|
%new.collisionType = %piece.collisionType;
|
|
%new.accessLevel = %piece.accessLevel;
|
|
%new.timeout = %piece.timeout;
|
|
}
|
|
|
|
%piece.delete();
|
|
}
|
|
else
|
|
messageClient(%player.client, "", "\c2TT: Wrong type of object.");
|
|
}
|
|
|
|
function RetextureDoor(%player, %piece, %mode)
|
|
{
|
|
%classname = %piece.getDatablock().className;
|
|
if((%classname $= "decoration" && %piece.getDataBlock().getname() $= "DeployedDecoration6") || %classname $= "crate" || %classname $= "floor" || %classname $= "spine" || %classname $= "mspine" || %classname $= "wall" || %classname $= "wwall" || %classname $= "Wspine" || %classname $= "Sspine" || %classname $= "floor" || %classname $= "door")
|
|
{
|
|
if(%piece.isDoor || %piece.getDatablock.className $= "door")
|
|
{
|
|
if(!%piece.canMove)
|
|
{
|
|
messageClient(%player.client, "", "\c2TT: You can only texture moveable doors.");
|
|
return;
|
|
}
|
|
|
|
if(%piece.state !$= "closed" && %piece.state !$= "")
|
|
{
|
|
messageClient(%player.client, "", "\c2TT: You can only texture fully closed doors.");
|
|
return;
|
|
}
|
|
}
|
|
|
|
%timeout = (%piece.timeout $= "" ? 1 : %piece.timeout);
|
|
if(%mode == 1)
|
|
{
|
|
%piece.isDoor = 0;
|
|
if(%piece.getDatablock().getName() $= "DeployedDoor")
|
|
%piece.setDatablock(DeployedSpine); // Risky...?
|
|
|
|
%piece.state = "";
|
|
%piece.canMove = "";
|
|
%piece.moving = "";
|
|
%piece.toggleType = "";
|
|
%piece.collisionType = "";
|
|
%piece.accessLevel = "";
|
|
%piece.closedScale = "";
|
|
%piece.openedScale = "";
|
|
%piece.powerControl = "";
|
|
}
|
|
else if(%mode == 2)
|
|
{
|
|
%piece.isDoor = 1;
|
|
%piece.collisionType = 0;
|
|
%piece.toggleType = 0;
|
|
%piece.powerControl = 0;
|
|
|
|
%piece.timeout = %timeout;
|
|
%piece.canMove = true;
|
|
%piece.state = "closed";
|
|
}
|
|
else if(%mode == 3)
|
|
{
|
|
%piece.isDoor = 1;
|
|
%piece.collisionType = 0;
|
|
%piece.toggleType = 1;
|
|
%piece.powerControl = 0;
|
|
|
|
%piece.timeout = %timeout;
|
|
%piece.canMove = true;
|
|
%piece.state = "closed";
|
|
}
|
|
else if(%mode == 4)
|
|
{
|
|
%piece.isDoor = 1;
|
|
%piece.collisionType = 0;
|
|
%piece.toggleType = 1;
|
|
%piece.powerControl = 1;
|
|
|
|
%piece.timeout = %timeout;
|
|
%piece.canMove = true;
|
|
%piece.state = "closed";
|
|
checkPowerObject(%piece);
|
|
}
|
|
else if(%mode == 5)
|
|
{
|
|
%piece.isDoor = 1;
|
|
%piece.collisionType = 0;
|
|
%piece.toggleType = 1;
|
|
%piece.powerControl = 2;
|
|
|
|
%piece.timeout = %timeout;
|
|
%piece.canMove = true;
|
|
%piece.state = "closed";
|
|
checkPowerObject(%piece);
|
|
}
|
|
else if(%mode == 6)
|
|
{
|
|
%piece.isDoor = 1;
|
|
%piece.collisionType = 1;
|
|
%piece.toggleType = 0;
|
|
%piece.powerControl = 0;
|
|
|
|
%piece.timeout = %timeout;
|
|
%piece.canMove = true;
|
|
%piece.state = "closed";
|
|
}
|
|
else if(%mode == 7)
|
|
{
|
|
%piece.isDoor = 1;
|
|
%piece.collisionType = 2;
|
|
%piece.toggleType = 0;
|
|
%piece.powerControl = 0;
|
|
%piece.accessLevel = 1;
|
|
messageClient(%player.client, "", "\c2Use \c3/setAccess [level] \c2- to set the access level needed for this door, use \c3/setPAccess [name] [level] \c2- to set someone's access level over your pieces.");
|
|
|
|
%piece.timeout = %timeout;
|
|
%piece.canMove = true;
|
|
%piece.state = "closed";
|
|
}
|
|
else if(%mode == 8)
|
|
{
|
|
%piece.isDoor = 1;
|
|
%piece.collisionType = 3;
|
|
%piece.toggleType = 0;
|
|
%piece.powerControl = 0;
|
|
|
|
%piece.timeout = %timeout;
|
|
%piece.canMove = true;
|
|
%piece.state = "closed";
|
|
}
|
|
else if(%mode == 9)
|
|
{
|
|
%piece.isDoor = 1;
|
|
%piece.collisionType = 4;
|
|
%piece.toggleType = 0;
|
|
%piece.powerControl = 0;
|
|
|
|
%piece.timeout = %timeout;
|
|
%piece.canMove = true;
|
|
%piece.state = "closed";
|
|
}
|
|
}
|
|
else
|
|
messageClient(%player.client, "", "\c2TT: Wrong type of object.");
|
|
}
|