T2-ACCM/Scripts/chatCommands.cs

1146 lines
39 KiB
C#
Raw Normal View History

2013-02-01 20:45:22 +00:00
//==============================================================================
// Chat Commands - Made by Blnukem and Eolk.
//------------------------------------------------------------------------------
// These basic chat commands were created by CCM and ACCM Dev teams.
// You may add additional commands here if you wish at the bottom of this file.
//------------------------------------------------------------------------------
// <20> The ACCM Chat Command database is located in another folder.
// <20> Make sure your new commands aren't abused or overpowered.
//==============================================================================
// This command was edited by Blnukem to work with ACCM.
function chatcommands(%sender, %message) {
%cmd = getWord(%message,0);
%cmd = stripChars(%cmd,"/");
%count = getWordCount(%message);
%args = getwords(%message,1);
%cmd = "cc" @ %cmd;
switch$(%cmd)
{
case "ccTips":
call("ccTips", %sender, "Join", %args);
case "ccOpen":
call("ccOpendoor", %sender, %args);
case "ccJoin" or "ccJoin":
call("ccJoin", %sender, %sender.sqinv);
case "ccDelmypieces":
call("ccDelpieces", %sender, "");
case "ccObjectScale" or "ccReSize" or "ccSetSize":
call("ccSetScale", %sender, %args);
case "ccGetSize":
call("ccGetScale", %sender, %args);
case "ccObjectName" or "ccSetName":
call("ccName", %sender, %args);
case "ccGetPos":
call("ccPos", %sender, "G", %args);
case "ccBasicCMDS" or "ccBasicCommands":
call("ccHelp", %sender, "BasicCommands", %args);
case "ccSCMDS" or "ccSentinelCommands":
call("ccHelp", %sender, "SentinelCommands", %args);
case "ccZCMDS" or "ccZombieCommands":
call("ccHelp", %sender, "ZombieCommands", %args);
case "ccDCMDS" or "ccDroneCommands":
call("ccHelp", %sender, "DroneCommands", %args);
case "ccBuildOptions" or "ccBuildingOptions":
call("ccHelp", %sender, "BuildingOptions", %args);
case "ccAdminCMDS" or "ccAdminCommands":
call("ccHelp", %sender, "AdminCommands", %args);
case "ccSACMDS" or "ccSACommands":
call("ccHelp", %sender, "SACommands", %args);
case "ccSetFreq":
call("ccPower", %sender, %args);
case "ccBuy":
call("ccBf", %sender, %args);
default:
call(%cmd, %sender, %args);
}
}
//==============================================================================
// The following was either made by the CCM or Construction development teams.
//==============================================================================
function VectToRot(%vec){
%x = getWord(%vec, 0);
%y = getWord(%vec, 1);
%z = getWord(%vec, 2);
%len = vectorLen(%vec);
%rotAngleXY = mATan(%z, %len);
%rotAngleZ = mATan(%x, %y);
%matrix = MatrixCreateFromEuler("0 0" SPC %rotAngleZ * -1);
%matrix2 = MatrixCreateFromEuler(%rotAngleXY SPC "0 0");
%finalMat = MatrixMultiply(%matrix, %matrix2);
return getWords(%finalMat, 3, 5)@" "@(getWord(%finalMat,6) * 360 / 3.14156);
}
function ccOpendoor(%sender,%args) {
%pos = %sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos = vectoradd(%pos,vectorscale(%vec,100));
%obj = containerraycast(%pos,%targetpos,$typemasks::staticshapeobjecttype,%sender.player);
%obj = getword(%obj,0);
%dataBlock = %obj.getDataBlock();
%className = %classname;
%cash = %obj.amount;
%owner = %obj.owner;
if(!isObject(%obj) || (!%obj.isDoor && %datablock.getName() !$= "DeployedDoor"))
{
messageclient(%sender, 'MsgClient', "\c2No door in range.");
return;
}
%obj.issliding = 0;
if (%obj.collisionType >= 1)
{
messageClient(%sender, "", "\c2This door is a collision-type door.");
return;
}
if (%obj.powercontrol >= 1)
{
messageclient(%sender, 'MsgClient', "\c2This door is controlled by a power supply.");
return;
}
if (%obj.canmove == false) //if it cant move
return; //stop here
%pass = %args;
if (%obj.pw $= %pass) {
if (%obj.toggletype ==1){
if (%obj.moving $="close" || %obj.moving $="" || %going $="opening"){
schedule(10,0,"open",%obj);
}
else if (%obj.moving $="open" || %going $="closeing"){
schedule(10,0,"close",%obj);
}
}
else
schedule(10,0,"open",%obj);
}
if (%obj.pw !$= %pass)
messageclient(%sender,'MsgClient',"\c2Password Denied.");
}
function ccSetdoorpass(%sender,%args){
%pos=%sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos=vectoradd(%pos,vectorscale(%vec,100));
%obj=containerraycast(%pos,%targetpos,$typemasks::staticshapeobjecttype,%sender.player);
%obj=getword(%obj,0);
%dataBlock = %obj.getDataBlock();
%className = %dataBlock.className;
if (!%obj.isDoor && %datablock.getName !$= "DeployedDoor") {
messageclient(%sender, 'MsgClient', '\c2No door in range.');
return;
}
if (%obj.owner!=%sender && %obj.owner !$="")
messageclient(%sender, 'MsgClient', '\c2You do not own this door.');
if (!isobject(%obj))
messageclient(%sender, 'MsgClient', '\c2No door in range.');
if (%obj.Collision $= true) {
messageclient(%sender, 'MsgClient', '\c2Collision doors can not have passwords.');
return;
}
if(isobject(%obj) && %obj.owner==%sender) {
%pw=getword(%args,0);
%obj.pw=%pw;
messageclient(%sender, 'MsgClient', '\c2Password set, password is\c3 %1\c2.',%pw);
}
}
function ccGetAmmo(%sender,%args){
%pos = %sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos = vectoradd(%pos,vectorscale(%vec,5));
%obj = containerraycast(%pos,%targetpos,$typemasks::VehicleObjectType,%sender.player);
if(%obj != ""){
%obj = getword(%obj,0);
%className = %obj.getClassName();
%Name = %obj.getDatablock().getName();
if(%className $= "WheeledVehicle" && %Name $= "AmmoCrateVeh"){
if(%obj.numReload >= 2){
buyDeployableFavorites(%sender);
%obj.numReload--;
}
else if(%obj.numReload == 1){
buyDeployableFavorites(%sender);
%obj.schedule(1000, delete);
}
}
}
}
function ccHack(%sender, %args){
%pos = %sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos = vectoradd(%pos,vectorscale(%vec,10));
%obj = containerraycast(%pos,%targetpos,$typemasks::staticshapeobjecttype,%sender.player);
%obj = getword(%obj,0);
%dataBlock = %obj.getDataBlock();
%className = %classname;
%DBname = %datablock.getName();
if(%args $= "help"){
messageClient(%sender, 'MsgClient', "\c2To hack you must guess the 4 digit binary code for each of the numbers in a randomly generated 5 digit code.");
messageClient(%sender, 'MsgClient', "\c2EX: /hack - you have 2 ones in this code.");
messageClient(%sender, 'MsgClient', "\c2... /hack 0 0 1 1 - you have 2 correct in this code.");
messageClient(%sender, 'MsgClient', "\c2... /hack 0 1 0 1 - you have 2 correct in this code.");
messageClient(%sender, 'MsgClient', "\c2... /hack 0 1 1 0 - you have got this number and you have 4 codes left to go.");
return;
}
if (!isobject(%obj)) {
messageclient(%sender, 'MsgClient', '\c2No teleport in range.');
return;
}
if (%DBname !$= "TelePadDeployedBase") {
messageclient(%sender, 'MsgClient', '\c2No teleport in range.');
return;
}
if(%obj.team == %sender.team)
{
messageClient(%sender, "", "\c2You can't hack your own team's teleports!");
return;
}
if(%obj.ishacked != 1){
if(%args $= ""){
%numones = 0;
for(%i = 0; %i < 4; %i++){
if(getWord(%obj.hackcode[(%obj.numhacked + 1)],%i) $= "1")
%numones++;
}
messageClient(%sender, 'MsgClient', "\c2There are "@ %numones @" ones in this code, and you have "@ (5 - %obj.numhacked) @" more codes to find.");
}
else{
%numsame = 0;
for(%i = 0; %i < 4; %i++){
if(getWord(%obj.hackcode[(%obj.numhacked + 1)],%i) $= getWord(%args,%i))
%numsame++;
}
if(%numsame == 4){
if(%obj.numhacked $= "")
%obj.numhacked = 0;
%obj.numhacked++;
if(%obj.numhacked == 5){
%obj.ishacked = 1;
messageClient(%sender, 'MsgClient', "\c2You have hacked this teleport.");
return;
}
messageClient(%sender, 'MsgClient', "\c2You have got this number you have "@(5 - %obj.numhacked)@" codes left to go.");
}
else
messageClient(%sender, 'MsgClient', "\c2You have "@%numsame@" of the code correct.");
}
}
else
messageClient(%sender, "" ,"\c2This teleport is already hacked.");
}
function teleresethack(%obj){
if(!isObject(%obj))
return;
if(%obj.ishacked == 1 || %obj.ishacked $= ""){
%obj.ishacked = 0;
%obj.numhacked = 0;
%num[0] = "0 0 0 0";
%num[1] = "0 0 0 1";
%num[2] = "0 0 1 0";
%num[3] = "0 0 1 1";
%num[4] = "0 1 0 0";
%num[5] = "0 1 0 1";
%num[6] = "0 1 1 0";
%num[7] = "0 1 1 1";
%num[8] = "1 0 0 0";
%num[9] = "1 0 0 1";
for(%i = 1; %i < 6; %i++){
%random = getRandom(0,9);
%obj.hackcode[%i] = %num[%random];
}
}
schedule(180000, %obj, "teleresethack", %obj);
}
function ccListSpawns(%sender){
if(%sender.team == 0)
return;
%team = %sender.team;
for(%i = 0; %i < $teamSPs[%team]; %i++){
if($teamSP[%team,%i].name $= "")
$teamSP[%team,%i].name = getWords($teamSP[%team,%i].getPosition(),0,1);
messageClient(%sender, 'MsgClient', "\c2"@(%i + 1)@". spawnpoint "@$teamSP[%team,%i].name@".");
}
}
function ccChooseSpawn(%sender,%args){
%team = %sender.team;
if(%team == 0)
return;
if($UseForcedTeamSpawn[%team] && !%sender.isAdmin)
{
messageClient(%sender, 'MsgClient', '\c2Your spawnpoint was forced by an admin. You cannot switch.');
return;
}
if(%args $= ""){
if(%sender.SP !$= ""){
%sender.SP = "";
messageClient(%sender, 'MsgClient', "\c2Spawn Point Reset, you will now spawn at the normal location.");
return;
}
messageClient(%sender, 'MsgClient', "\c2Please choose a number that corresponds with a spawnpoint.");
return;
}
%num = (firstWord(%args) - 1);
if(isObject($teamSP[%team,%num])){
if($teamSP[%team,%num].active == 1){
%sender.SP = $teamSP[%team,%num];
messageClient(%sender, 'MsgClient', "\c2Spawnpoint "@$teamSP[%team,%i].name@" choosen.");
}
else{
%sender.SP = $teamSP[%team,%num];
messageClient(%sender, 'MsgClient', "\c2Spawnpoint "@$teamSP[%team,%i].name@" choosen, but this point is not currently powered.");
}
}
else
messageClient(%sender, 'MsgClient', "\c2This spawnpoint dosent exist.");
}
//==============================================================================
// All of the following are the public ACCM Chat Commands.
//------------------------------------------------------------------------------
// The following functions were made by Blnukem.
//==============================================================================
function ccMenu (%sender, %args)
{
%arg1 = getWord(%args, 0);
if (%arg1 $= "Join")
{
CenterPrint(%sender, "<font:Sui Generis:14><color:ffffff><a:U>Advanced Combat Construction Mod</a> \n <font:Hey:14>ACCM Developers: <Color:888888>Blnukem, Eolk, and Dark Dragon DX. \n <Color:ffffff>Website:<Color:888888> http://www.freewebs.com/advancedccm", 10, 3);
if ($Host::MOTD !$= "")
{
Schedule(5000, 0, "CenterPrint", %sender, "<font:Sui Generis:14><color:ffffff><a:U>Message of the Day.</a> \n <Font:Hey:14> <Color:888888> "@$Host::MOTD@" ", 5 , 3);
Schedule(5000, 0, "MessageClient", %sender, "Msg", "\c2A message from "@$Host::GameName@" Administration:\n"@$Host::MOTD@"");
}
}
}
// Blnukem - This will tell the sender basic information on the target.
function ccInfo(%sender, %args)
{
%target = plnametocid(%args);
if(!isObject(%target))
{
messageClient(%sender, "", "\c2Cannot find player:\c3 "@%args@"\c2.");
return;
}
if(%target $= "")
{
messageClient(%sender, "", "\c2Please specify a person.");
return;
}
%rank = $Rank::Rank[%target.ranknum];
%score = $Rank::Score[%target.ranknum];
%smurf = (%target.isSmurf == 1 ? "Yes" : "No");
%keeper = (%target.isZombieKeeper == 1 ? "Yes" : "No");
%admin = (%target.isAdmin == 1 ? "Yes" : "No");
%superadmin = (%target.isSuperAdmin == 1 ? "Yes" : "No");
messageClient(%sender, "", "\c2Client Name:\c3 "@%target.nameBase@"\c2 - GUID:\c3 "@%target.guid@"\c2 - Player ID:\c3 "@%target@"");
messageClient(%sender, "", "\c2Smurf:\c3 "@%smurf@"\c2 - Zombie Keeper:\c3 "@%keeper@"\c2 - \c2Admin:\c3 "@%admin@"\c2 - Super Admin:\c3 "@%superadmin@"");
if($Rank::Squad[%target.ranknum] $= "")
{
messageClient(%sender, 'MsgClient', "\c2Current Squad:\c3 None\c2 - Current Rank:\c3 "@%rank@"\c2 - Total Score:\c3 "@%score@"");
} else for(%i = 0; %i < $squad::numsquads; %i++) {
%squad = $Squad::Name[%i];
messageClient(%sender, 'MsgClient', "\c2Current Squad:\c3 "@%squad@"\c2 - Current Rank:\c3 "@%rank@"\c2 - Total Score:\c3 "@%score@"");
}
}
//------------------------------------------------------------------------------
// Blnukem - Very basic command. I made this due to popular demand.
// This command just gives the target an armor variant.
// There is probably a better way to do this, but I got lazy... So deal with it.
function ccGiveArmor(%sender,%args)
{
%armor = strlwr(getword(%args, 0));
%target = plnametocid(getword(%args, 1));
if(!%sender.isAdmin)
return;
// TODO - Make this function check if the target exists and the gametype.
switch$(%armor)
{
case "Recon":
if(Game.class !$= "ConstructionGame")
{
%target.player.clearInventory();
%target.setWeaponsHudClearAll();
%target.player.setArmor(SpecOps);
%target.player.setInventory(Snipergun,1,true);
%target.player.setInventory(LSMG,1,true);
%target.player.setInventory(AmmoPack,1,true);
%target.player.setInventory(SnipergunAmmo,30,true);
%target.player.setInventory(LSMGAmmo,60,true);
%target.player.setInventory(LSMGClip,5,true);
}
case "Commando":
if(Game.class !$= "ConstructionGame")
{
%target.player.clearInventory();
%target.setWeaponsHudClearAll();
%target.player.setArmor(Medium);
%target.player.setInventory(HRPChaingun,1,true);
%target.player.setInventory(Shotgun,1,true);
%target.player.setInventory(AmmoPack,1,true);
%target.player.setInventory(RPChaingunAmmo,30,true);
%target.player.setInventory(MGClip,4,true);
%target.player.setInventory(RPGAmmo,3,true);
%target.player.setInventory(ShotgunAmmo,8,true);
%target.player.setInventory(ShotgunClip,1,true);
}
case "Powered":
if(Game.class !$= "ConstructionGame")
{
%target.player.clearInventory();
%target.setWeaponsHudClearAll();
%target.player.setArmor(Heavy);
%target.player.setInventory(MG42,1,true);
%target.player.setInventory(RShotgun,1,true);
%target.player.setInventory(RailGun,1,true);
%target.player.setInventory(BoosterPack,1,true);
%target.player.setInventory(MG42Ammo,200,true);
%target.player.setInventory(MG42Clip,5,true);
%target.player.setInventory(RShotgunAmmo,25,true);
%target.player.setInventory(RShotgunClip,2,true);
%target.player.setInventory(RailGunAmmo,8,true);
}
default: // Just a check on the valid armors.
MessageClient(%sender, "Msg", "\c2Invalid armor. Valid armors are Recon, Commando and Powered.");
return;
}
// Lets set the basic items and stuff throughout each armor variant.
%target.player.startFade(2000, 0, false); // Just a cheap effect.
%target.player.setInventory(Grenade,5,true);
%target.player.setInventory(Mine,2,true);
%target.player.setInventory(Beacon,3,true);
%target.player.setInventory(RepairKit,2,true);
BottomPrint(%target, "<Color:ffffff>You now have "@%armor@" armor.", 5, 1);
MessageClient(%target, "Msg", "\c2You were given "@%armor@" armor by\c3 "@%sender.nameBase@"\c2.");
MessageClient(%sender, "Msg", "\c2You gave\c3 "@%target.nameBase@" \c2"@%armor@" armor.");
}
//------------------------------------------------------------------------------
// Blnukem - I modified this command so it has cheat protection for those who
// want to be jackasses with pure off, and also so it can work with Technicians.
function ccBf(%sender,%args)
{
if (!isObject(%sender.player))
{ // No player object? Bitch, you can't use this command.
MessageClient(%sender, "Msg", "\c2You you have a player object in order to buy your inventory. ~wfx/misc/misc.error.wav");
}
if (%sender.BasicTimer > 0)
{ // Hello cheat protection!
MessageClient(%sender, "", "\c3CHEAT PROTECTION:\c0 You must wait "@%sender.BasicTimer@" more seconds until you can use /bf again.");
return;
}
if (($Host::Purebuild == 0) && (%sender.armor $= "Light") || ($Host::Purebuild == 0) && (%sender.armor $= "Pure"))
{ // This allows Technicians to use /bf with purebuild off.
buyFavorites(%sender);
%sender.BasicTimer = 10; // Cheat protection time in seconds.
ClearBasicTimer(%sender);
} else if (($Host::Purebuild == 1) || (%sender.armor $= "Pure"))
{ // No cheat protection, just good ole' /bf with some inventory buying fun.
buyFavorites(%sender);
}
}
//------------------------------------------------------------------------------
function ccMe(%sender,%args)
{
messageall("", '\c0%1 %2', %sender.name, %args);
}
//------------------------------------------------------------------------------
function ccName(%sender,%args, %special)
{
%pos = %sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos = vectoradd(%pos,vectorscale(%vec,100));
%obj = containerraycast(%pos,%targetpos,$typemasks::staticshapeobjecttype,%sender.player);
%obj = getword(%obj,0);
%dataBlock = %obj.getDataBlock();
%className = %dataBlock.className;
if (%obj==0){
messageclient(%sender, 'MsgClient', "\c2No object to label.");
return;
}
if(!deployables.ismember(%obj)){
messageClient(%sender, "MsgClient", "\c2You can\'t rename map objects!");
return;
}
if(%obj.getowner() != %sender){
messageclient(%sender, 'MsgClient', "\c2You do not own that object.");
return;
}
if (%classname $= "waypoint"){
%obj.wp.schedule(10, "delete");
%wp = new waypoint(){
dataBlock = WayPointMarker;
position = %obj.getPosition();
name = %args;
scale = "0.1 0.1 0.1";
team = %sender.team;
};
messageclient(%sender, 'MsgClient', "\c2Object name set to \c3"@%args@"");
%obj.wp = %wp;
MissionCleanup.add(%wp);
return;
}
messageclient(%sender, 'MsgClient', "\c2Object name set to \c3"@%args@"");
%obj.nametag = %args;
setTargetName(%obj.target,addTaggedString("\c6"@%args@""));
return;
}
//------------------------------------------------------------------------------
function ccRadius(%sender,%args, %special)
{
%pos = %sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos = vectoradd(%pos,vectorscale(%vec,100));
%obj = containerraycast(%pos,%targetpos,$typemasks::staticshapeobjecttype,%sender.player);
%obj = getword(%obj,0);
%dataBlock = %obj.getDataBlock();
%className = %dataBlock.className;
if (%args < 10 || %args > 10000)
{
messageclient(%sender, "", "\c2Invalid Range, must be between\c3 0 \c2and\c3 10000\c2.");
return;
}
if (%obj == 0)
{
messageclient(%sender, "", "\c2No object in range.");
return;
}
if(!deployables.ismember(%obj))
{
messageClient(%sender, "", "\c2You can\'t change the radius of map objects.");
return;
}
if(%obj.owner != %sender && !%sender.isAdmin)
{
messageClient(%sender, "", "\c2You do not own that object.");
return;
}
if (%classname $= "Switch" || %classname $= "Tripwire")
{
messageClient(%sender, "", "\c2Radius set to:\c3 "@%args@" \c2meters.");
%obj.switchradius = %args;
return;
} else if (%classname !$= "Switch" || %classname !$= "Tripwire")
{
messageClient(%sender, "", "\c2Invaild object, you can only change the radius of Tripwires and Switches.");
return;
}
}
//------------------------------------------------------------------------------
function ccCloak(%sender,%args, %special)
{
%pos = %sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos = vectoradd(%pos,vectorscale(%vec,100));
%obj = containerraycast(%pos,%targetpos,$typemasks::staticshapeobjecttype,%sender.player);
%obj = getword(%obj,0);
%dataBlock = %obj.getDataBlock().getName();
%className = %dataBlock.className;
if (%obj == 0)
{
messageclient(%sender, "", "\c2No valid objects in range.");
return;
}
if(!deployables.ismember(%obj) && (%sender.isAdmin !=1))
{
messageClient(%sender, "", "\c2You can\'t cloak map objects.");
return;
}
if(%obj.owner != %sender && !%sender.isAdmin)
{
messageClient(%sender, "", "\c2You do not own that object.");
return;
}
if (!%obj.cloak)
{
%obj.setCloaked(true);
%obj.cloak = true;
messageclient(%sender, "", "\c2Object cloaked.");
return;
} else {
%obj.setCloaked(false);
%obj.cloak = false;
messageclient(%sender, "", "\c2Object un-cloaked.");
return;
}
}
//------------------------------------------------------------------------------
function ccMOTD(%sender, %args)
{
if(!%sender.isSuperAdmin)
return;
%target = plnametocid(%args);
if (%args $= "Remove" || %args $= "remove")
{
$Host::MOTD = "";
MessageAll('MsgAdminForce', "\c3"@%sender.nameBase@" \c2has removed the message of the day.");
} else {
$Host::MOTD = %args;
MessageAll('MsgAdminForce', "\c3"@%sender.nameBase@" \c2has changed the message of the day to: \c3"@%args@"");
}
}
//------------------------------------------------------------------------------
function ccZAvoid(%sender,%args) // Makes Zombies avoid you.
{
if(!%sender.isSuperAdmin)
return;
if(Game.class $= "ConstructionGame")
{
messageClient(%sender, "", "\c2This command is disabled in the Construction Gametype. ~wfx/misc/misc.error.wav");
return;
}
if (%sender.player.isZombie == false){
%sender.player.isZombie = true;
messageClient(%sender, 'MsgAdminForce', "\c2Action Completed, zombies will now avoid you.");
return;
}
if (%sender.player.isZombie == true){
%sender.player.isZombie = false;
messageClient(%sender, 'MsgAdminForce', "\c2Action Completed, zombies will now attack you.");
return;
}
}
//------------------------------------------------------------------------------
function ccSwitch(%sender,%args)
{
if(!%sender.isSuperAdmin)
return;
%nametotest=getword(%args,0);
%target=plnametocid(%nametotest);
if (%target==%sender) {
messageClient(%sender, 'MsgClient', "\c2You can\'t control yourself.");
return;
}
if(%args $= ""){
messageClient(%sender, 'MsgClient', "\c2No target specified.");
return;
}
%sender.setcontrolobject(%target.player);
%target.setcontrolobject(%sender.player);
messageClient(%sender, "MsgClient", "\c2You are now controlling: \c3"@%target.namebase@".");
messageClient(%target, "MsgClient", "\c2You and \c3"@%target.namebase@" \c2have switched Bodies!");
return;
}
//==============================================================================
// The following functions were made by Eolk.
//==============================================================================
function ccDelPieces(%sender, %args)
{
if(!%sender.isAdmin || %args $= "")
{
if(!isObject(%sender.player))
{
messageClient(%sender, 'MsgClient', "\c2You must be playing in order to remove your pieces.");
return;
}
%group = nameToID("MissionCleanup/Deployables");
for(%i = 0; %i < %group.getCount(); %i++)
{
%obj = %group.getObject(%i);
if(%obj.getOwner() == %sender && isObject(%obj))
%obj.getDatablock().schedule(getRandom() * 10000, disassemble, %sender.player, %obj);
}
messageClient(%sender, 'MsgYes', "\c2All of your pieces have been removed.");
}
else
{
%target = plnametocid(%args);
if(!isObject(%target))
{
messageClient(%sender, 'MsgClient', "\c2That person's player object does not exist.");
return;
}
if((!%sender.isSuperAdmin && %target.isAdmin) || %target.isSuperAdmin)
{
messageClient(%sender, 'MsgClient', "\c2You must outrank that target in order to remove their pieces.");
return;
}
messageAll('MsgAdminForce', "\c3"@%sender.nameBase@" \c2has forced\c3 "@%target.nameBase@" \c2to delete all of their pieces.");
ccDelPieces(%target, "");
}
}
//------------------------------------------------------------------------------
function ccPower(%sender, %args)
{
if(!isObject(%sender.player))
{
messageClient(%sender, "", "\c2You have to be playing in order to do this.");
return;
}
%sender.player.powerFreq = %args;
displayPowerFreq(%sender.player);
}
//------------------------------------------------------------------------------
function ccSetScale(%sender, %args)
{
if(!isObject(%sender.player))
{
messageClient(%sender, "", "\c2You must be spawned in order to do this!");
return;
}
%pos = %sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos = vectoradd(%pos,vectorscale(%vec,100));
%obj = containerraycast(%pos,%targetpos,$typemasks::staticshapeobjecttype,%sender.player);
%obj = getword(%obj,0);
if(!isObject(%obj))
{
messageClient(%sender, "", "\c2There is nothing in range.");
return;
}
%dataBlock = %obj.getDataBlock();
%className = %dataBlock.className;
if(%obj.owner != %sender && !%sender.isAdmin)
{
messageClient(%sender, "", "\c2That piece isn't yours.");
return;
}
%test = nameToID("MissionCleanup/Deployables");
if(!isObject(%test) || !%test.isMember(%obj))
{
messageClient(%sender, "", "\c2That is part of the map.");
return;
}
if(getwordcount(%args) < 3)
{
messageClient(%sender, "", "\c2You must specify all paramenters: X, Y, and Z.");
return;
}
if(getwordcount(%args) > 3)
{
messageClient(%sender, "", "\c2Too many parameters. They should be X, Y, and Z.");
return;
}
if(%classname $= "spine" || %classname $= "mspine" || %classname $= "spine2" || %classname $= "floor" || %classname $= "wall" || %classname $= "wwall" || %classname $= "floor" || %classname $= "door")
{
%or = %args;
%args = VectorMultiply(%args, "0.250 0.333333 2");
%check = EditorCheckScale(%args);
if(%check == 1)
{
messageClient(%sender, "", "\c2Scale is too small.");
return;
}
if(%check == 2)
{
messageClient(%sender, "", "\c2Scale is too big.");
return;
}
%obj.setScale(%args);
messageClient(%sender, "", "\c2Object scale set to:\c3 "@%or@"");
return;
}
%check = EditorCheckScale(%args);
if(%check == 1)
{
messageClient(%sender, "", "\c2Scale is too small.");
return;
}
if(%check == 2)
{
messageClient(%sender, "", "\c2Scale is too big.");
return;
}
if(%dataBlock $= "DeployedLTarget")
{
%obj.lMain.setScale(%args);
adjustLMain(%obj);
messageClient(%sender, "", "\c2Object scale set to:\c3 "@%args@"");
return;
}
if(%dataBlock $= "DeployedLogoProjector")
{
%obj.setScale(%args);
if(isObject(%obj.holo))
{
%obj.holo.setScale(%args);
adjustHolo(%obj);
messageClient(%sender, "", "\c2Object scale set to:\c3 "@%args@"");
}
return;
}
%obj.setScale(%args);
messageClient(%sender, "", "\c2Object scale set to:\c3 "@%args@"");
}
//------------------------------------------------------------------------------
function ccGetScale(%sender, %args)
{
if(!isObject(%sender.player))
{
messageClient(%sender, "", "\c2You must be spawned in order to do this.");
return;
}
%pos=%sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos=vectoradd(%pos,vectorscale(%vec,100));
%obj=containerraycast(%pos,%targetpos,$typemasks::staticshapeobjecttype,%sender.player);
%obj=getword(%obj,0);
if(!isObject(%obj))
{
messageClient(%sender, "", "\c2There is nothing in range.");
return;
}
%dataBlock = %obj.getDataBlock();
%className = %dataBlock.className;
%test = nameToID("MissionCleanup/Deployables");
if(!isObject(%test) || !%test.isMember(%obj))
{
messageClient(%sender, "", "\c2That is part of the map.");
return;
}
%scale = %obj.getScale();
if(%classname $= "spine" || %classname $= "mspine" || %classname $= "spine2" || %classname $= "floor" || %classname $= "wall" || %classname $= "wwall" || %classname $= "floor" || %classname $= "door")
%scale = getword(%scale, 0) / 0.250 SPC getword(%scale, 1) / 0.333333 SPC getword(%scale, 2) / 2;
if(%dataBlock $= "DeployedLTarget")
%scale = %obj.lMain.getScale();
messageClient(%sender, "", "\c2The scale of that object is:\c3 "@%scale@"");
}
//------------------------------------------------------------------------------
// Idea from Insane Turkey
function ccPos(%sender, %args)
{
if(!isObject(%sender.player))
{
messageClient(%sender, "", "\c2You have to be playing in order to do this.");
return;
}
%pos=%sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos=vectoradd(%pos,vectorscale(%vec,100));
%obj=containerraycast(%pos,%targetpos,$typemasks::staticshapeobjecttype,%sender.player);
%obj=getword(%obj,0);
if(!isObject(%obj))
{
messageClient(%sender, "", "\c2There is nothing in range.");
return;
}
if(%obj.getOwner() != %sender && !%sender.isAdmin)
{
messageClient(%sender, "", "\c2That piece is not yours.");
return;
}
%test = nameToID("MissionCleanup/Deployables");
if(!isObject(%test) || !%test.isMember(%obj))
{
messageClient(%sender, "", "\c2That is part of the map.");
return;
}
if(getwordcount(%args) == 4 || getword(%args, 0) $= "g")
{
%option = getword(%args, 0);
if(%option $= "s")
{
%pos = getwords(%args, 1, 3);
}
else if(%option $= "g")
{
messageClient(%sender, "", "\c2Object's position is:\c3 "@%obj.getPosition()@"");
return;
}
else if(%option $= "m")
{
%xyz = getwords(%args, 1, 3);
%positive = VectorPositive(%xyz);
%start = VectorCheck(%xyz);
%x = getword(%start, 0) SPC 0 SPC 0;
%realx = realvec(%obj, %x);
%obj.setPosition(VectorAdd(%obj.getPosition(), VectorScale(%realx, getword(%positive, 0))));
%y = 0 SPC getword(%start, 1) SPC 0;
%realy = realvec(%obj, %y);
%obj.setPosition(VectorAdd(%obj.getPosition(), VectorScale(%realy, getword(%positive, 1))));
%z = 0 SPC 0 SPC getword(%start, 2);
%realz = realvec(%obj, %z);
%obj.setPosition(VectorAdd(%obj.getPosition(), VectorScale(%realz, getword(%positive, 2))));
}
else
{
messageClient(%sender, "", "\c2Unknown mode for /Pos:\c3 "@%option@"\c2.");
messageClient(%sender, "", "\c2Use:\c3 /Pos X Y Z");
return;
}
}
else if(getwordcount(%args) == 3)
{
%xyz = getwords(%args, 0, 2);
%positive = VectorPositive(%xyz);
%start = VectorCheck(%xyz);
%x = getword(%start, 0) SPC 0 SPC 0;
%realx = realvec(%obj, %x);
%obj.setPosition(VectorAdd(%obj.getPosition(), VectorScale(%realx, getword(%positive, 0))));
%y = 0 SPC getword(%start, 1) SPC 0;
%realy = realvec(%obj, %y);
%obj.setPosition(VectorAdd(%obj.getPosition(), VectorScale(%realy, getword(%positive, 1))));
%z = 0 SPC 0 SPC getword(%start, 2);
%realz = realvec(%obj, %z);
%obj.setPosition(VectorAdd(%obj.getPosition(), VectorScale(%realz, getword(%positive, 2))));
}
else
{
messageClient(%sender, "", "\c2Wrong number of arguments for\c3 /Pos\c2.");
messageClient(%sender, "", "\c2Use:\c3 /Pos X Y Z");
return;
}
%pos = %obj.getPosition();
messageClient(%sender, "", "\c2Object's position modified to:\c3 "@%pos@"");
}
//------------------------------------------------------------------------------
function GivePieces(%from, %to)
{
if(!isObject(Deployables))
return;
for(%i = 0; %i < Deployables.getCount(); %i++)
{
%piece = Deployables.getObject(%i);
if(%from !$= "orphan")
{
%owner = %piece.getOwner();
if(%owner !$= "") // Regular giving
{
if(%owner == %from)
%piece.setOwner(%to.player);
}
else // For giving by clientID.
{
if(%piece.owner == %from)
%piece.setOwner(%to.player);
}
}
else // Give orphans.
{
if(!isObject(%piece.getOwner()))
%piece.setOwner(%to.player);
}
}
logEcho("Pieces given to "@%to.nameBase@" ("@%to@") from "@%from.nameBase@" ("@%from@")");
}
function ccGivePieces(%sender, %args)
{
%target = plnametocid(%args);
if(!isObject(%target))
{
messageClient(%sender, "", "\c2You can't give your pieces to a non-existant person!");
return;
}
if(%target == %sender)
{
messageClient(%sender, "", "\c2You can't give your pieces to yourself!");
return;
}
if(isObject(%target.transferTo) || isObject(%target.transferFrom))
{
messageClient(%sender, "", "\c3"@%target.nameBase@"\c2 is already in a transaction. Please wait a moment for it to complete.");
return;
}
if(isObject(%sender.transferTo))
{
messageClient(%sender, "", "\c2You are already transferring to someone! You must first cancel the first transaction.");
return;
}
if(!%sender.isAdmin)
{
%sender.transferTo = %target;
%target.transferFrom = %sender;
messageClient(%sender, "", "\c2You are pending piece transfer to \c3"@%target.nameBase@"\c2. If you wish to cancel the transaction, press the \"vote no\" key (delete).");
messageClient(%target, "", "\c3"@%sender.nameBase@"\c2 is pending transfer to you. Press the \"vote yes\" key (insert) to accept, and the \"vote no\" key (delete) to decline.~wfx/misc/diagnostic_beep.wav");
}
else
{
// Eolk - This isn't possible with the above checks.
// if(getWordCount(%args) > 1) // Super accident protection.
// {
// messageClient(%sender, "", "\c2Admins should use /ForceGivePieces to give pieces from one person to the other. Use /givePieces target to give your OWN pieces to the target.");
// return;
// }
messageAll('MsgAdminForce', "\c3"@%sender.nameBase@"\c2 is transferring "@(%sender.sex $= "Male" ? "his" : "her")@" pieces to \c3"@%target.nameBase@"\c2.");
GivePieces(%sender, %target);
}
}
function ccSetAccess(%sender, %args)
{
if(!isObject(%sender.player))
return;
%pos = %sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos = vectoradd(%pos,vectorscale(%vec,100));
%obj = containerraycast(%pos,%targetpos,$typemasks::staticshapeobjecttype,%sender.player);
%obj = getword(%obj,0);
%dataBlock = %obj.getDataBlock();
%className = %classname;
%owner = %obj.owner;
if(!isObject(%obj))
return;
if(!%obj.isDoor || %obj.collisionType != 2)
{
messageClient(%sender, "", "\c2Object is either not a door, or is not the right type of door.");
return;
}
if(%obj.getOwner() != %sender && !%sender.isAdmin)
{
messageClient(%sender, "", "\c2You do not own that.");
return;
}
%args = getWord(%args, 0);
if(%args < 1)
{
messageClient(%sender, "", "\c2Invalid access level.");
return;
}
%obj.accessLevel = %args;
messageClient(%sender, "", "\c2Door's access level set to \c3"@%args@".");
}
function ccSetPAccess(%sender, %args)
{
%target = plnametocid(getword(%args, 0));
if(!isObject(%target))
{
messageClient(%sender, "", "\c2Target doesn't exist.");
return;
}
%level = getWord(%args, 1);
if(%level < 0)
{
messageClient(%sender, "", "\c2Invalid access level to give.");
return;
}
%formerLevel = %target.givenAccess[%sender];
if(%formerLevel == %level)
{
messageClient(%sender, "", "\c2That person's access level is already \c3"@%level@"\c2!");
return;
}
%target.givenAccess[%sender] = %level;
messageClient(%target, "", "\c3"@%sender.nameBase@"\c2 has \c3"@(%formerLevel < %level ? "increased" : "decreased")@"\c2 your access level to \c3"@%level@"\c2.");
messageClient(%sender, "", "\c2You have \c3"@(%formerLevel < %level ? "increased" : "decreased") SPC %target.nameBase@"'s\c2 access level to \c3"@%level@"\c2.");
}
//==============================================================================
// Below is where you may add custom chat commands, to keep things organized.
//------------------------------------------------------------------------------
// Custom Chat Commands:
//==============================================================================