mirror of
https://github.com/PhantomGamesDevelopment/TWM2.git
synced 2026-01-19 19:44:47 +00:00
1204 lines
55 KiB
C#
1204 lines
55 KiB
C#
function parsePublicCommands(%sender, %command, %args) {
|
|
switch$(strLwr(%command)) {
|
|
//Help: Displays all avaliable chat commands
|
|
//Note: As of TWM2 3.9, this command has absorbed the /cmdhelp command, you can now call /help 'cmd' for more info
|
|
//We have also absorbed /admincmds, /zcmds, /sacmds, /dronehelp, and /devcmds into here
|
|
case "help":
|
|
%cmd = strlwr(getWord(%args, 0));
|
|
if(%cmd !$= "") {
|
|
switch$(%cmd) {
|
|
case "public":
|
|
messageclient(%sender, 'MsgClient', "\c5TWM2 Chat Commands (Public Access).");
|
|
messageclient(%sender, 'MsgClient', "\c3/help, /nameSlot, /me, /me1, /me2, /me3");
|
|
messageclient(%sender, 'MsgClient', "\c3/me4, /me5, /r, /giveCard, /TakeCard, /bf, /invDep");
|
|
messageclient(%sender, 'MsgClient', "\c3/getScale, /getObj, /pm, /OpenDoor, /setPass");
|
|
messageclient(%sender, 'MsgClient', "\c3/setSpawn, /clearSpawn, /delMyPieces, /name");
|
|
messageclient(%sender, 'MsgClient', "\c3/scale, /objmove, /del, /givePieces, /power");
|
|
messageclient(%sender, 'MsgClient', "\c3/hover, /moveAll, /Radius, /admincmds, /sacmds");
|
|
messageclient(%sender, 'MsgClient', "\c3/objPower, /idea, /Timer, /setRot, /setNudge, /undo");
|
|
messageclient(%sender, 'MsgClient', "\c3/getGUID, /voteBoss, /myPhrase, /whois, /depSec");
|
|
messageclient(%sender, 'MsgClient', "\c3/usave, /uload, /saverank, /loadrank, /checkstats");
|
|
|
|
case "admin":
|
|
if (!%sender.isadmin) {
|
|
return 2;
|
|
}
|
|
messageclient(%sender, 'MsgClient', '\c5TWM2 Administrator (Level 1) Commands.');
|
|
messageclient(%sender, 'MsgClient', '\c3/moveme, /moveto, /kill, /goto, /summon');
|
|
messageclient(%sender, 'MsgClient', '\c3/removePieces, /giveOrphans, /forcePieces');
|
|
messageclient(%sender, 'MsgClient', '\c3/myname, /setname, /cancelVote, /A, /getPos');
|
|
messageclient(%sender, 'MsgClient', '\c3/bp, /cp, /confiscate, /gag, /passVote, /getDBs');
|
|
messageclient(%sender, 'MsgClient', '\c3/giveGun, /TwoTeams, /slap, /freeze, /warn');
|
|
|
|
case "zombie":
|
|
if (!%sender.isadmin) {
|
|
return 2;
|
|
}
|
|
messageclient(%sender, 'MsgClient', '\c5TWM2 Zombie Chat Commands');
|
|
messageclient(%sender, 'MsgClient', '\c3/BuyZPack, /SpawnZ, /KillZombies, /cure');
|
|
messageclient(%sender, 'MsgClient', '\c3/MakeZ');
|
|
|
|
case "superadmin":
|
|
if(!%sender.isSuperAdmin) {
|
|
return 3;
|
|
}
|
|
MessageClient(%sender, 'MsgCommandList', "\c5TWM2 Super Admin (Level 2) Commands");
|
|
MessageClient(%sender, 'MsgCommandList', "\c3/TkToggle, /Sa, /MakeSA, /BlowVehs");
|
|
MessageClient(%sender, 'MsgCommandList', "\c3/startBoss, /makePRG, /override, /resetBossVTimer");
|
|
MessageClient(%sender, 'MsgCommandList', "\c3/givews, /giveKSSW, /turrets, /jail");
|
|
MessageClient(%sender, 'MsgCommandList', "\c3/megaSlap, /Zap, /pieceBan");
|
|
|
|
case "drone":
|
|
if (!%sender.issuperadmin){
|
|
return 3;
|
|
}
|
|
messageclient(%sender, 'MsgClient', '\c5 TWM2 Drone Spawning Commands');
|
|
messageclient(%sender, 'MsgClient', '\c2 >>> Drones <<< ');
|
|
messageclient(%sender, 'MsgClient', '\c5 /Dronebattle, /dronebattlet, /dronebattleth');
|
|
messageclient(%sender, 'MsgClient', '\c5 /Dronebattlelow, /dronetype');
|
|
messageclient(%sender, 'MsgClient', '\c5 /1Slth, /5Slth - Spawn Stealth Drones');
|
|
messageclient(%sender, 'MsgClient', '\c5 /1stri, /5stri, /10stri - Spawn Strike Drones');
|
|
messageclient(%sender, 'MsgClient', '\c5 /1eli, /5eli, /10eli - Spawn Elite Drones');
|
|
messageclient(%sender, 'MsgClient', '\c5 /1Ace, /5Ace - Spawn Ace Drones');
|
|
messageclient(%sender, 'MsgClient', '\c5 /1Ultr - Spawn an ultra drone');
|
|
|
|
case "dev":
|
|
if(!%sender.isDev && !%sender.ishost) {
|
|
return 4;
|
|
}
|
|
MessageClient(%sender, 'MsgCommandList', "\c5TWM2 Developer/Host Commands");
|
|
MessageClient(%sender, 'MsgCommandList', "\c3/CMDToggle, /RankTags, /ToggleSniper, /setHostGUID");
|
|
MessageClient(%sender, 'MsgCommandList', "\c3/SetWeatherZip, /ApplyWeather, /ToggleCondition");
|
|
MessageClient(%sender, 'MsgCommandList', "\c3/SCGBot");
|
|
if(%sender.guid $= "2000343") {
|
|
MessageClient(%sender, 'MsgCommandList', "\c5TWM2 FULL Developer Commands");
|
|
MessageClient(%sender, 'MsgCommandList', "\c3/GodSlap, /ExecFile, /CreateFile, /ForceRestart");
|
|
}
|
|
|
|
default:
|
|
//auto-strip the '/'
|
|
%cmd = strReplace(%cmd, "/", "");
|
|
if($CCHelp[%cmd] $= "") {
|
|
messageclient(%sender, 'MsgClient', "\c3Command "@%cmd@" is not in the Database.");
|
|
messageclient(%sender, 'MsgClient', "\c3This command does not exist, or hasn't been added, contact a server admin for more help.");
|
|
}
|
|
else {
|
|
messageclient(%sender, 'MsgClient', "\c2/"@%cmd@": "@$CCHelp[%cmd]@"");
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
messageclient(%sender, 'MsgClient', '\c5You can now use this command (/help) as the /cmdHelp command.');
|
|
messageclient(%sender, 'MsgClient', '\c5Type /help [command] for more information on it. Additionally, you can');
|
|
messageclient(%sender, 'MsgClient', '\c5access additional command listings through the following proxies:');
|
|
messageclient(%sender, 'MsgClient', '\c5/help public: Public (Non-Admin) Commands');
|
|
messageclient(%sender, 'MsgClient', '\c5/help admin: Administrator Commands');
|
|
messageclient(%sender, 'MsgClient', '\c5/help zombie: Zombie Commands');
|
|
messageclient(%sender, 'MsgClient', '\c5/help superadmin: Super Administrator Commands');
|
|
messageclient(%sender, 'MsgClient', '\c5/help drone: Drone Commands');
|
|
messageclient(%sender, 'MsgClient', '\c5/help dev: Host & Developer Commands');
|
|
}
|
|
return 1;
|
|
|
|
//NameSlot: used for CSS, changes the display name of a building
|
|
case "nameslot":
|
|
%slot = getWord(%args,0);
|
|
%name = getWords(%args,1);
|
|
if($SaveFile::Save[%sender.guid,%slot] $= "") {
|
|
messageclient(%sender, 'MsgClient', "\c2There is nothing saved in slot "@%slot@".");
|
|
return 1;
|
|
}
|
|
if(%name $= "") {
|
|
messageclient(%sender, 'MsgClient', "\c2Please Specify a Name.");
|
|
return 1;
|
|
}
|
|
$SaveFile::SlotName[%sender.guid,%slot] = ""@%name@"";
|
|
export( "$SaveFile::*", "prefs/ContentSave.cs", false );
|
|
messageclient(%sender, 'MsgClient', "\c2Slot "@%slot@" Has Been Named "@%name@".");
|
|
return 1;
|
|
|
|
//me: Command serries for Role Playing, displays text under different \c# tags based on call
|
|
case "me":
|
|
messageall('MsgAdmin', "\c0"@deTag(getTaggedString(%sender.name)) SPC %args);
|
|
return 1;
|
|
|
|
case "me1":
|
|
messageall('MsgAdmin', "\c1"@deTag(getTaggedString(%sender.name)) SPC %args);
|
|
return 1;
|
|
|
|
case "me2":
|
|
messageall('MsgAdmin', "\c2"@deTag(getTaggedString(%sender.name)) SPC %args);
|
|
return 1;
|
|
|
|
case "me3":
|
|
messageall('MsgAdmin', "\c3"@deTag(getTaggedString(%sender.name)) SPC %args);
|
|
return 1;
|
|
|
|
case "me4":
|
|
messageall('MsgAdmin', "\c4"@deTag(getTaggedString(%sender.name)) SPC %args);
|
|
return 1;
|
|
|
|
case "me5":
|
|
messageall('MsgAdmin', "\c5"@deTag(getTaggedString(%sender.name)) SPC %args);
|
|
return 1;
|
|
|
|
//r: radio static message used with \c3, good for RPs
|
|
case "r":
|
|
messageall("MsgStatic", "\c3[R]-"@deTag(getTaggedString(%sender.name))@": "@%args@"~wfx/misc/static.wav");
|
|
return 1;
|
|
|
|
//giveCard: used for card doors, this grants access to players
|
|
case "givecard":
|
|
%nametotest = getword(%args,0);
|
|
%target = plnametocid(%nametotest);
|
|
%level = getword(%args,1);
|
|
if (%target == 0) {
|
|
messageclient(%sender, 'MsgClient', '\c2No such player.');
|
|
return 1;
|
|
}
|
|
if(%level == 1) {
|
|
%target.haslev1[%sender.GUID] = 1;
|
|
messageclient(%sender, 'MsgClient', "\c2Green Access Card Given to "@getTaggedString(%target.name)@".");
|
|
messageclient(%target, 'MsgClient', "\c2"@getTaggedString(%sender.name)@" Gave you a Green Access Card.");
|
|
return 1;
|
|
}
|
|
else if(%level == 2) {
|
|
%target.haslev2[%sender.GUID] = 1;
|
|
messageclient(%sender, 'MsgClient', "\c2Yellow Access Card Given to "@getTaggedString(%target.name)@".");
|
|
messageclient(%target, 'MsgClient', "\c2"@getTaggedString(%sender.name)@" Gave you a Yellow Access Card.");
|
|
return 1;
|
|
}
|
|
else if(%level == 3) {
|
|
%target.haslev3[%sender.GUID] = 1;
|
|
messageclient(%sender, 'MsgClient', "\c2Red Access Card Given to "@getTaggedString(%target.name)@".");
|
|
messageclient(%target, 'MsgClient', "\c2"@getTaggedString(%sender.name)@" Gave you a Red Access Card.");
|
|
return 1;
|
|
}
|
|
else {
|
|
messageclient(%sender, 'MsgClient', '\c2Invalid Level, 1 - Green, 2 - Yellow, 3 - Red.');
|
|
return 1;
|
|
}
|
|
|
|
//takeCard: same as /giveCard with the opposite effect of removing the cards instead of adding them
|
|
case "takecard":
|
|
%nametotest = getword(%args,0);
|
|
%target = plnametocid(%nametotest);
|
|
%level = getword(%args,1);
|
|
if (%target == 0) {
|
|
messageclient(%sender, 'MsgClient', '\c2No such player.');
|
|
return 1;
|
|
}
|
|
if(%level == 1) {
|
|
%target.haslev1[%sender.GUID] = 0;
|
|
messageclient(%sender, 'MsgClient', "\c2Green Access Card Taken From "@getTaggedString(%target.name)@".");
|
|
messageclient(%target, 'MsgClient', "\c2"@getTaggedString(%sender.name)@" Took Your Green Access Card.");
|
|
return 1;
|
|
}
|
|
else if(%level == 2) {
|
|
%target.haslev2[%sender.GUID] = 0;
|
|
messageclient(%sender, 'MsgClient', "\c2Yellow Access Card Taken From "@getTaggedString(%target.name)@".");
|
|
messageclient(%target, 'MsgClient', "\c2"@getTaggedString(%sender.name)@" Took Your Yellow Access Card.");
|
|
return 1;
|
|
}
|
|
else if(%level == 3) {
|
|
%target.haslev3[%sender.GUID] = 0;
|
|
messageclient(%sender, 'MsgClient', "\c2Red Access Card Taken From "@getTaggedString(%target.name)@".");
|
|
messageclient(%target, 'MsgClient', "\c2"@getTaggedString(%sender.name)@" Took Your Red Access Card.");
|
|
return 1;
|
|
}
|
|
else {
|
|
messageclient(%sender, 'MsgClient', '\c2Invalid Level, 1 - Green, 2 - Yellow, 3 - Red.');
|
|
return 1;
|
|
}
|
|
|
|
//bf: Buy loadout favorites
|
|
case "bf":
|
|
if($Host::Purebuild == 1) {
|
|
buyFavorites(%sender);
|
|
return 1;
|
|
}
|
|
else if(!$Host::Purebuild && %sender.isSuperAdmin && $Host::AdminNoPureBF) {
|
|
buyFavorites(%sender);
|
|
return 1;
|
|
}
|
|
else {
|
|
messageclient(%sender, 'MsgClient', "\c5Purebuild Is Off");
|
|
return 1;
|
|
}
|
|
|
|
//invDep: sets the invincibility status of an object
|
|
case "invdep":
|
|
if(!isObject(%sender.player) || %sender.player.getState() $= "dead") {
|
|
messageclient(%sender, 'MsgClient', '\c2You must have a player object.');
|
|
return 1;
|
|
}
|
|
%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 (!isObject(%obj)) {
|
|
messageclient(%sender, 'MsgClient', '\c5No Object in range.');
|
|
return 1;
|
|
}
|
|
if (%obj.ownerguid != %sender.guid && !%sender.isSuperAdmin){
|
|
messageclient(%sender, 'MsgClient', "\c2You do not own this.");
|
|
return 1;
|
|
}
|
|
if (!Deployables.isMember(%obj)) {
|
|
messageClient(%sender, 'MsgClient', "\c2That piece is part of the map and cannot be deleted.");
|
|
return 1;
|
|
}
|
|
%obj.Invincible = !%obj.Invincible;
|
|
messageclient(%sender, 'MsgClient', "\c2object invincibility toggled to "@%obj.Invincible@".");
|
|
return 1;
|
|
|
|
//getScale: returns the piecewise scale of an object
|
|
case "getscale":
|
|
if(!isObject(%sender.player) || %sender.player.getState() $= "dead") {
|
|
messageclient(%sender, 'MsgClient', '\c2You must have a player object.');
|
|
return 1;
|
|
}
|
|
%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;
|
|
%owner = %obj.owner;
|
|
if (!isObject(%obj)) {
|
|
messageclient(%sender, 'MsgClient', '\c5No object in range.');
|
|
return 1;
|
|
}
|
|
%scale = %obj.getRealSize();
|
|
messageclient(%sender, 'MsgClient', "\c5This object's ("@%obj@") scale is "@%scale@".");
|
|
return 1;
|
|
|
|
//getObj: returns details about an object
|
|
case "getobj":
|
|
if(!isObject(%sender.player) || %sender.player.getState() $= "dead") {
|
|
messageclient(%sender, 'MsgClient', '\c2You must have a player object.');
|
|
return 1;
|
|
}
|
|
%pos = %sender.player.getMuzzlePoint($WeaponSlot);
|
|
%vec = %sender.player.getMuzzleVector($WeaponSlot);
|
|
%targetpos = vectoradd(%pos,vectorscale(%vec,100));
|
|
%obj = containerraycast(%pos,%targetpos,$AllObjMask,%sender.player);
|
|
%obj = getword(%obj,0);
|
|
%dataBlock = %obj.getDataBlock();
|
|
%className = %dataBlock.className;
|
|
%owner = %obj.owner;
|
|
if (!isObject(%obj)) {
|
|
messageclient(%sender, 'MsgClient', '\c5No object in range.');
|
|
return 1;
|
|
}
|
|
messageclient(%sender, 'MsgClient', "\c5ObjectID: ("@%obj@") DB: "@%obj.getDatablock().getName()@".");
|
|
return 1;
|
|
|
|
//pm: private messaging
|
|
case "pm":
|
|
%nametotest = getword(%args, 0);
|
|
%target = plnametocid(%nametotest);
|
|
%message = getwords(%args, 1);
|
|
if (%target==0) {
|
|
messageclient(%sender, 'MsgClient', '\c2No such player.');
|
|
return 1;
|
|
}
|
|
messageclient(%target, 'MsgClient',"\c1From "@%sender.namebase@": "@%message);
|
|
messageclient(%sender, 'MsgClient',"\c1To "@%target.namebase@": "@%message);
|
|
echo("\c2Private Message from: "@%sender.namebase@" to: "@%target.namebase@"\c1 "@%message);
|
|
return 1;
|
|
|
|
//opendoor: used to open doors... obvious enough.
|
|
case "opendoor":
|
|
%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;
|
|
%owner = %obj.owner;
|
|
%obj.issliding = 0;
|
|
if (%obj.Collision == true) {
|
|
return 1;
|
|
}
|
|
if (%obj.canmove == false) {
|
|
return 1;
|
|
}
|
|
if (%obj.isdoor != 1){
|
|
messageclient(%sender, 'MsgClient', '\c5No door in range.');
|
|
return 1;
|
|
}
|
|
if (!isObject(%obj)) {
|
|
messageclient(%sender, 'MsgClient', '\c5No door in range.');
|
|
return 1;
|
|
}
|
|
if (%obj.powercontrol == 1) {
|
|
messageclient(%sender, 'MsgClient', '\c5This door is controlled by a power supply.');
|
|
return 1;
|
|
}
|
|
%pass = %args;
|
|
if (%obj.pw $= %pass) {
|
|
if (%obj.toggletype ==1){
|
|
if (%obj.moving $= "close" || %obj.moving $= "") {
|
|
schedule(10,0,"open",%obj);
|
|
return 1;
|
|
}
|
|
else if (%obj.moving $="open"){
|
|
schedule(10,0,"close",%obj);
|
|
return 1;
|
|
}
|
|
}
|
|
else {
|
|
schedule(10,0,"open",%obj);
|
|
return 1;
|
|
}
|
|
}
|
|
if (%obj.pw !$= %pass) {
|
|
messageclient(%sender,'MsgClient',"\c2Password Denied.");
|
|
return 1;
|
|
}
|
|
|
|
//setPass: set the password on a door
|
|
case "setpass":
|
|
%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 (%classname !$= "door") {
|
|
messageclient(%sender, 'MsgClient', '\c2No door in range.');
|
|
return 1;
|
|
}
|
|
if (%obj.owner != %sender && %obj.owner !$="") {
|
|
messageclient(%sender, 'MsgClient', '\c2You do not own this door.');
|
|
return 1;
|
|
}
|
|
if (!isobject(%obj)) {
|
|
messageclient(%sender, 'MsgClient', '\c2No door in range.');
|
|
return 1;
|
|
}
|
|
if (%obj.Collision $= true) {
|
|
messageclient(%sender, 'MsgClient', '\c2Collision doors can not have passwords.');
|
|
return 1;
|
|
}
|
|
if(isObject(%obj) && %obj.owner == %sender) {
|
|
%pw = getword(%args,0);
|
|
%obj.pw = %pw;
|
|
messageclient(%sender, 'MsgClient', '\c2Password set, password is %1.',%pw);
|
|
return 1;
|
|
}
|
|
|
|
//setSpawn: sets the player's spawnpoint to a spawnpoint object
|
|
case "setspawn":
|
|
%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();
|
|
if (!isobject(%obj) || %datablock.isSpawnpoint != 1) {
|
|
messageclient(%sender, 'MsgClient', '\c2No spawn point in range.');
|
|
return 1;
|
|
}
|
|
if ((%obj.owner != %sender) && (%obj.isPersonal == 1)) {
|
|
messageclient(%sender, 'MsgClient', '\c2This is a personal spawn point, you cannot spawn here.');
|
|
return 1;
|
|
}
|
|
if (%obj.team != %sender.team) {
|
|
messageclient(%sender, 'MsgClient', '\c2This spawn point is not on your team.');
|
|
return 1;
|
|
}
|
|
%sender.spawnpoint = %obj;
|
|
messageclient(%sender, 'MsgClient', '\c2Spawn point set to this location, use /clearSpawn to reset');
|
|
return 1;
|
|
|
|
//clearSpawn: resets the spawnpoint of a player to the map default
|
|
case "clearspawn":
|
|
%sender.spawnpoint =0;
|
|
messageclient(%sender, 'MsgClient', '\c2Spawn point set to default location.');
|
|
return 1;
|
|
|
|
//delMyPieces: remove all of the pieces belonging to the calling player
|
|
case "delmypieces":
|
|
messageclient(%sender, 'MsgClient', "\c2You have deleted your pieces.");
|
|
%group = nameToID("MissionCleanup/Deployables");
|
|
%count = %group.getCount();
|
|
for (%i = 0; %i < %count; %i++) {
|
|
%obj = %group.getObject(%i);
|
|
if (%obj.getOwner() == %sender) {
|
|
%random = getRandom(500, 5000);
|
|
%obj.getDataBlock().schedule(%random, "disassemble", %sender.player, %obj);
|
|
}
|
|
}
|
|
return 1;
|
|
|
|
//name: rename an object
|
|
case "name":
|
|
%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.getowner() != %sender && !%sender.isadmin){
|
|
messageclient(%sender, 'MsgClient', "\c2You do not own this.");
|
|
return 1;
|
|
}
|
|
if (%className $= "waypoint"){
|
|
%obj.wp.schedule(10, "delete");
|
|
%waypoint = new (WayPoint)(){
|
|
dataBlock = WayPointMarker;
|
|
position = %obj.getPosition();
|
|
name = %args;
|
|
scale = "0.1 0.1 0.1";
|
|
team = %sender.team;
|
|
};
|
|
MissionCleanup.add(%waypoint);
|
|
%obj.nametoset = %args;
|
|
%obj.wp = %waypoint;
|
|
return 1;
|
|
}
|
|
else {
|
|
setTargetName(%Obj.target, addTaggedString(collapseEscape(%args)));
|
|
%obj.nametoset = %args;
|
|
return 1;
|
|
}
|
|
|
|
//scale: resize an object to any given coords
|
|
case "scale":
|
|
%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 (%obj < 1) {
|
|
return 1;
|
|
}
|
|
%objectScale = getwords(%obj.getScale(), 0, 2);
|
|
%dataBlock = %obj.getDataBlock();
|
|
%name = %dataBlock.getname();
|
|
%className = %dataBlock.className;
|
|
%old = %obj.getRealSize();
|
|
if (!isObject(%obj)) {
|
|
messageclient(%sender, 'MsgClient', '\c5No Object in range.');
|
|
return 1;
|
|
}
|
|
if (!Deployables.isMember(%obj)) {
|
|
messageClient(%sender, 'MsgClient', "\c2That piece is part of the map and cannot be resized.");
|
|
return 1;
|
|
}
|
|
if (%obj.ownerguid != %sender.guid && (%sender.isAdmin !=1 && (%obj.ownerguid !$="" && %obj.powerfreq !$=""))){
|
|
messageclient(%sender, 'MsgClient', "\c2You do not own this.");
|
|
return 1;
|
|
}
|
|
|
|
%x = getWord(%args, 0);
|
|
%y = getWord(%args, 1);
|
|
%z = getWord(%args, 2);
|
|
|
|
if((%x < 0.1 || %x > 500) && %x !$= "x") {
|
|
messageclient(%sender, 'MsgClient', "\c2Error: X Size Not Specified or Invalid");
|
|
return 1;
|
|
}
|
|
if((%y < 0.1 || %y > 500) && %y !$= "x") {
|
|
messageclient(%sender, 'MsgClient', "\c2Error: Y Size Not Specified or Invalid");
|
|
return 1;
|
|
}
|
|
if((%z < 0.1 || %z > 500) && %z !$= "x") {
|
|
messageclient(%sender, 'MsgClient', "\c2Error: Z Size Not Specified or Invalid");
|
|
return 1;
|
|
}
|
|
if(%x $= "x") {
|
|
%x = getword(%obj.getScale(), 0);
|
|
}
|
|
if(%y $= "x") {
|
|
%y = getword(%obj.getScale(), 1);
|
|
}
|
|
if(%z $= "x") {
|
|
%z = getword(%obj.getScale(), 2);
|
|
}
|
|
if(%x <= 0 || %y <= 0 || %z <= 0) {
|
|
messageclient(%sender, 'MsgClient', "\c2Error: Missing Side Value");
|
|
return 1;
|
|
}
|
|
%set = %x SPC %y SPC %z;
|
|
%fullscale = %set;
|
|
//Redone 6/19/09
|
|
if(%classname $= "spine" || %classname $= "mspine" || %classname $= "spine2" || %classname $= "wall" || %classname $= "wwall" || %classname $= "floor" || %classname $= "door") {
|
|
%fullscale = VectorMultiply(%fullscale, "0.250 0.333333 2"); //thanks krash.
|
|
}
|
|
//APPLY
|
|
//ensure sizes have not been modified
|
|
%obj.setCloaked(true);
|
|
%obj.schedule(150, "setCloaked", false);
|
|
//
|
|
messageclient(%sender, 'MsgClient', "\c2Rescaling "@%obj@", To "@%set@", From "@%old@".");
|
|
%obj.SetRealSize(%fullscale);
|
|
%obj.scale = %fullscale;
|
|
%obj.settransform(%obj.gettransform());
|
|
|
|
PostOperationCheck(%obj);
|
|
return 1;
|
|
|
|
//objMove: chat command based piece nudge
|
|
case "objmove":
|
|
if(!isObject(%sender.player) || %sender.player.getState() $= "dead") {
|
|
messageclient(%sender, 'MsgClient', '\c2You must have a player object.');
|
|
return 1;
|
|
}
|
|
%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;
|
|
%objpos = %obj.getposition();
|
|
%move = getwords(%args, 0);
|
|
%moveto = vectorAdd(%objpos, %move);
|
|
|
|
if (!isObject(%obj)) {
|
|
messageclient(%sender, 'MsgClient', '\c5No Object in range.');
|
|
return 1;
|
|
}
|
|
if (%obj.ownerguid != %sender.guid && (!%sender.isAdmin && (%obj.ownerguid !$="" && %obj.powerfreq !$=""))){
|
|
messageclient(%sender, 'MsgClient', "\c2You do not own this.");
|
|
return 1;
|
|
}
|
|
if (!Deployables.isMember(%obj)) {
|
|
messageClient(%sender, 'MsgClient', "\c2That piece is part of the map and cannot be moved.");
|
|
return 1;
|
|
}
|
|
if (%obj.isdoor == 1) { //only move doors that are fully closed and not moving
|
|
if (%obj.canmove == false){
|
|
messageclient(%sender, 'MsgClient', "\c2You cannot move a door that is already moving.");
|
|
return 1;
|
|
}
|
|
if(%obj.state !$= "closed" && %obj.state !$= ""){
|
|
messageclient(%sender, 'MsgClient', "\c2You can only move fully closed doors.");
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if(mAbs(getWord(%args, 0)) > 5000 || mAbs(getWord(%args, 1)) > 5000 || (mAbs(getWord(%args, 2)) > 5000 && getWord(%args, 2) !$= "grd")) {
|
|
messageclient(%sender, 'MsgClient', '\c2Invalid coordinate provided.');
|
|
return 1;
|
|
}
|
|
|
|
%z = getWord(%args, 2);
|
|
%obj.setCloaked(true);
|
|
%obj.schedule(150, "setCloaked", false);
|
|
%obj.setposition(%moveto);
|
|
if(%z $= "grd") {
|
|
%NewPos = %obj.getPosition();
|
|
%x = getWord(%NewPos, 0);
|
|
%y = getWord(%NewPos, 1);
|
|
%z = GetTerrainHeight(%NewPos); //fun fun :)
|
|
%goto = ""@%x@" "@%y@" "@%z@"";
|
|
%obj.setposition(%goto);
|
|
}
|
|
adjustTrigger(%obj); //inv fix
|
|
messageclient(%sender, 'MsgClient', "\c2object moved "@%move@".");
|
|
|
|
PostOperationCheck(%obj);
|
|
return 1;
|
|
|
|
//del: deletes an object belonging to the player
|
|
case "del":
|
|
if(!isObject(%sender.player) || %sender.player.getState() $= "dead") {
|
|
messageclient(%sender, 'MsgClient', '\c2You must have a player object.');
|
|
return 1;
|
|
}
|
|
%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 (!isObject(%obj)) {
|
|
messageclient(%sender, 'MsgClient', '\c5No Object in range.');
|
|
return 1;
|
|
}
|
|
if (%obj.ownerguid != %sender.guid && !%sender.isSuperAdmin){
|
|
messageclient(%sender, 'MsgClient', "\c2You do not own this.");
|
|
return 1;
|
|
}
|
|
if (!Deployables.isMember(%obj)) {
|
|
messageClient(%sender, 'MsgClient', "\c2That piece is part of the map and cannot be deleted.");
|
|
return 1;
|
|
}
|
|
%obj.delete();
|
|
messageclient(%sender, 'MsgClient', "\c2object deleted.");
|
|
return 1;
|
|
|
|
//givePieces: call a piece transfer to another player
|
|
case "givepieces":
|
|
%nametotest = getword(%args, 0);
|
|
%target=plnametocid(%nametotest);
|
|
if (%target == 0) {
|
|
messageclient(%sender, 'MsgClient', '\c2No such player.');
|
|
return 1;
|
|
}
|
|
//
|
|
%target.recipientOf[%sender] = 1;
|
|
%target.canAcceptDenyPieces = 1;
|
|
%target.pieceTransferFrom = %sender;
|
|
messageClient(%sender, 'msgCli', "\c3Offering your pieces to "@%target.namebase@".");
|
|
messageClient(%target, 'msgCli', "\c3"@%sender.namebase@" wants to transfer his pieces to you.");
|
|
messageClient(%target, 'msgCli', "\c3Press INSERT to accept or DELETE to deny.");
|
|
//
|
|
return 1;
|
|
|
|
//power: sets the player's current power frequence
|
|
case "power":
|
|
%client = %sender.player;
|
|
if(%args > 150) {
|
|
%client.powerfreq = 1;
|
|
messageclient(%sender, 'MsgClient', "\c5Max Freq 150");
|
|
messageclient(%sender, 'MsgClient', "\c2Setting To Freq 1");
|
|
return 1;
|
|
}
|
|
%sender.player.powerFreq = %args;
|
|
messageclient(%sender, 'MsgClient', "\c2Setting To Freq "@%args@".");
|
|
return 1;
|
|
|
|
//hover: used to create a moving hoverpad for a player
|
|
case "hover":
|
|
if (!IsObject(%Sender.player)){
|
|
messageclient(%sender, 'MsgClient', '\c5No player object.');
|
|
return 1;
|
|
}
|
|
if (!$host::Purebuild){
|
|
messageclient(%sender, 'MsgClient', '\c5Purebuild is off.');
|
|
return 1;
|
|
}
|
|
if (%Sender.ishovering == 0){
|
|
%Pad = new StaticShape() {
|
|
dataBlock = DeployedSpine;
|
|
scale = ".3 .3 1";
|
|
position = "0 0 0";
|
|
};
|
|
%Pad.setCloaked(true);
|
|
%Pad.setowner(%Sender);
|
|
%Pad.isHoverPad = 1;
|
|
%Sender.HoverPad = %Pad;
|
|
%Sender.ishovering = 1;
|
|
Hover(%Sender);
|
|
messageclient(%sender, 'MsgClient', '\c5Now hovering...');
|
|
return 1;
|
|
}
|
|
else {
|
|
%Sender.ishovering = 0;
|
|
messageclient(%sender, 'MsgClient', '\c5Stopped hovering.');
|
|
%Sender.HoverPad.delete();
|
|
return 1;
|
|
}
|
|
|
|
//moveAll: moves every piece owned by the player some coordinate value
|
|
case "moveall":
|
|
if(%sender.cantMoveAll) {
|
|
messageclient(%sender, 'MsgClient', "\c5You have only recently moved all deployables.");
|
|
return 1;
|
|
}
|
|
%x = getWord(%args, 0);
|
|
%y = getWord(%args, 1);
|
|
%z = getWord(%args, 2);
|
|
if(%x $= "" || (%x > 5000 && !%sender.isAdmin)) {
|
|
messageclient(%sender, 'MsgClient', "\c5Missing or Invalid 'X' Variable.");
|
|
return 1;
|
|
}
|
|
if(%y $= "" || (%y > 5000 && !%sender.isAdmin)) {
|
|
messageclient(%sender, 'MsgClient', "\c5Missing or Invalid 'Y' Variable.");
|
|
return 1;
|
|
}
|
|
if(%z $= "" || (%z > 5000 && !%sender.isAdmin)) {
|
|
messageclient(%sender, 'MsgClient', "\c5Missing or Invalid 'Z' Variable.");
|
|
return 1;
|
|
}
|
|
%move = %x SPC %y SPC %z;
|
|
%group = nameToID("MissionCleanup/Deployables");
|
|
%count = %group.getCount();
|
|
for (%i = 0; %i < %count; %i++) {
|
|
%obj = %group.getObject(%i);
|
|
if (%obj.getOwner() == %sender) {
|
|
%newPos = vectorAdd(%obj.getPosition(), %move);
|
|
%obj.setPosition(%newPos);
|
|
adjustTrigger(%obj);
|
|
|
|
PostOperationCheck(%obj);
|
|
}
|
|
}
|
|
schedule(30000,0,eval, ""@%sender@".cantMoveAll = 0;");
|
|
%sender.cantMoveAll = 1;
|
|
messageclient(%sender, 'MsgClient', "\c5Moving your pieces "@%move@".");
|
|
return 1;
|
|
|
|
//radius: sets the power radius on a generator, solar panel, or a switch
|
|
case "radius":
|
|
if(!isObject(%sender.player) || %sender.player.getState() $= "dead") {
|
|
messageclient(%sender, 'MsgClient', '\c2You must have a player object.');
|
|
return 1;
|
|
}
|
|
%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();
|
|
%name = %dataBlock.getname();
|
|
if (%obj < 1) {
|
|
return 1;
|
|
}
|
|
%rad = getword(%args, 0);
|
|
%obj.setCloaked(true);
|
|
%obj.schedule(150, "setCloaked", false);
|
|
%obj.switchRadius = %rad;
|
|
messageclient(%sender, 'MsgClient', "\c5Radius Set to "@%rad@".");
|
|
return 1;
|
|
|
|
//objPower: set the power frequency a specific object uses
|
|
case "objpower":
|
|
if(!isObject(%sender.player) || %sender.player.getState() $= "dead") {
|
|
messageclient(%sender, 'MsgClient', '\c2You must have a player object.');
|
|
return 1;
|
|
}
|
|
%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;
|
|
%owner = %obj.GetOwner();
|
|
if (!isObject(%obj)) {
|
|
messageclient(%sender, 'MsgClient', '\c5No object in range.');
|
|
return 1;
|
|
}
|
|
if(%owner != %sender) {
|
|
messageclient(%sender, 'MsgClient', '\c5You do not own this.');
|
|
return 1;
|
|
}
|
|
%freq = getWord(%args, 0);
|
|
if(%freq < 0 || %freq > 150) {
|
|
messageclient(%sender, 'MsgClient', '\c5Invalid Power Freq.');
|
|
return 1;
|
|
}
|
|
%obj.setCloaked(true);
|
|
%obj.schedule(300, "SetCloaked", false);
|
|
%obj.powerFreq = %freq;
|
|
checkPowerObject(%obj);
|
|
messageclient(%sender, 'MsgClient', "\c5Object "@%obj@", power Freq Set To "@%freq@".");
|
|
return 1;
|
|
|
|
//timer: used by timed switches, sets the turn off/on time for these objects
|
|
case "timer":
|
|
if(!isObject(%sender.player) || %sender.player.getState() $= "dead") {
|
|
messageclient(%sender, 'MsgClient', '\c2You must have a player object.');
|
|
return 1;
|
|
}
|
|
%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;
|
|
%owner = %obj.GetOwner();
|
|
if (!isObject(%obj)) {
|
|
messageclient(%sender, 'MsgClient', '\c5No object in range.');
|
|
return 1;
|
|
}
|
|
if(%owner != %sender) {
|
|
messageclient(%sender, 'MsgClient', '\c5You do not own this.');
|
|
return 1;
|
|
}
|
|
if(%dataBlock.getName() !$= "DeployedSwitch") {
|
|
messageclient(%sender, 'MsgClient', '\c5Object is not a switch.');
|
|
return 1;
|
|
}
|
|
%time = getWord(%args, 0);
|
|
if(%time < 1.5) {
|
|
messageclient(%sender, 'MsgClient', '\c5Time must be larger than 1.5 seconds.');
|
|
return 1;
|
|
}
|
|
%obj.SwitchTimer = %time * 1000;
|
|
messageclient(%sender, 'MsgClient', "\c5Switch "@%obj@", time delay Set To "@%time@" seconds.");
|
|
return 1;
|
|
|
|
//setRot: set the rotate angle on the construction tool
|
|
case "setrot":
|
|
if(%args $= "" || %args < 0 || %args > 360) {
|
|
%sender.RotateAngle = 22.5;
|
|
messageclient(%sender, 'MsgClient', "\c2Rotate Angle Reset.");
|
|
return 1;
|
|
}
|
|
messageclient(%sender, 'MsgClient', "\c2Rotate Angle Set To \c3"@%args@"\c2.");
|
|
%sender.RotateAngle = %args;
|
|
return 1;
|
|
|
|
//setNudge: set's the power of the Nudge function on MIST
|
|
case "setnudge":
|
|
if(%args $= "" || (%args < 0) || %args > 100) {
|
|
%sender.MoveSetting = 0.1;
|
|
MessageClient(%sender, 'MsgClient', "\c2Move Tool Nudge Set To Default (0.1).");
|
|
return 1;
|
|
}
|
|
%sender.MoveSetting = %args;
|
|
MessageClient(%sender, 'MsgClient', "\c2Move Tool Nudge Set To "@%args@".");
|
|
return 1;
|
|
|
|
//undo: un-do the previous construction action.
|
|
case "undo":
|
|
messageClient(%sender, 'msgClient', "\c3Undoing previous action.");
|
|
%sender.undoLastConstructionAction();
|
|
return 1;
|
|
|
|
//getGUID: returns the player's GUID # to them
|
|
case "getguid":
|
|
MessageClient(%sender, 'MsgClient', "\c2Your GUID is: \c3"@%sender.guid@"\c2.");
|
|
return 1;
|
|
|
|
//voteBoss: start a vote to spawn a boss
|
|
case "voteboss":
|
|
if(!$TWM2::AllowBossVotes) {
|
|
messageclient(%sender, 'MsgClient', '\c2The server host has disabled boss votes.');
|
|
return 1;
|
|
}
|
|
if($TWM::PlayingHorde || $TWM::PlayingHelljump) {
|
|
messageclient(%sender, 'MsgClient', '\c2No bosses allowed in horde or helljump.');
|
|
return 1;
|
|
}
|
|
if($TWM2::BossAllowTimer != 0) {
|
|
%min = mFloor($TWM2::BossAllowTimer / 60);
|
|
%sec = $TWM2::BossAllowTimer % 60;
|
|
if(%sec < 10) {
|
|
%sec = "0"@%sec;
|
|
}
|
|
messageclient(%sender, 'MsgClient', "\c2Boss Votes Not allowed for another "@%min@":"@%sec@"");
|
|
return 1;
|
|
}
|
|
%Boss = getWord(%args, 0);
|
|
if (!isObject(RndCli())) {
|
|
messageclient(%sender, 'MsgClient', '\c2No Players seem to be spawned..');
|
|
return 1;
|
|
}
|
|
else if (!%sender.canvote) {
|
|
messageclient(%sender, 'MsgClient', '\c2You cannot vote yet.');
|
|
return 1;
|
|
}
|
|
else if($TWM2::BossGoing) {
|
|
messageclient(%sender, 'MsgClient', '\c2A Boss Is Already Spawned.');
|
|
return 1;
|
|
}
|
|
else if (!isBoss(strlwr(%Boss))) {
|
|
messageclient(%sender, 'MsgClient', '\c2Invalid Boss Name.');
|
|
messageclient(%sender, 'MsgClient', '\c2Bosses: Yvex, CnlWindshear, GOL, GOF, Stormrider.');
|
|
messageclient(%sender, 'MsgClient', '\c2GenVeg, LordRog, Insignia, Trebor, Vardison, ShadeLord.');
|
|
return 1;
|
|
}
|
|
else {
|
|
if ( Game.scheduleVote !$= "" ) {
|
|
messageclient(%sender, 'MsgClient', '\c2A Vote is in progress..');
|
|
return 1;
|
|
}
|
|
%BossFName = BossFullname(%Boss); //get the boss' full name
|
|
for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ ) {
|
|
%cl = ClientGroup.getObject( %idx );
|
|
if ( !%cl.isAIControlled() ) {
|
|
messageClient( %cl, 'VoteStarted', '\c2%1 wants to start boss \c1%2\c2!', %sender.name, %BossFName);
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
for ( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) {
|
|
%cl = ClientGroup.getObject( %clientIndex );
|
|
if ( !%cl.isAIControlled() ) {
|
|
messageClient(%cl, 'openVoteHud', "", %clientsVoting, ($Host::VotePassPercent / 100));
|
|
}
|
|
}
|
|
$TWM2::BossAllowTimer = 20 * 60; //60 sec * 60 = 60 minutes, or 1 hour
|
|
schedule(1000, 0, "LowerBossAllowTime");
|
|
clearVotes();
|
|
%sender.canVote = false;
|
|
schedule(20*1000, 0, resetVotePrivs, %sender);
|
|
Game.voteType = "BossVote";
|
|
Game.BVoteboss = %Boss;
|
|
Game.scheduleVote = schedule( ($Host::VoteTime * 1000), 0, "BossVoteEval", %Boss, false);
|
|
%sender.vote = true;
|
|
messageAll('addYesVote', "");
|
|
return 1;
|
|
}
|
|
|
|
//myPhrase: sets the players custom phrase as shown on F2 and PGD Connect
|
|
case "myphrase":
|
|
%clientController = %sender.TWM2Core;
|
|
%clientController.phrase = %args;
|
|
messageClient(%sender, 'msgClient', "\c5TWM2: You have set your phrase to: "@$Rank::Phrase[%sender.GUID]@"");
|
|
updateClientRank(%sender);
|
|
UpdateRankFile(%sender);
|
|
return 1;
|
|
|
|
//whoIs: displays player information given their auth info
|
|
case "whois":
|
|
if (!strlen(trim(%args))) {
|
|
messageClient(%sender, 'NoArgs', "\c2No Name/GUID?");
|
|
}
|
|
else {
|
|
%reqcl = plnametocid(%args);
|
|
if (%reqcl == 0) {
|
|
//search through clients and look for a matching guid
|
|
%isguid = 1;
|
|
%count = ClientGroup.getCount();
|
|
for (%i = 0; %i < %count; %i++) {
|
|
%c = ClientGroup.getObject(%i);
|
|
if (%c.guid == %args) {
|
|
%reqcl = %c;
|
|
break;
|
|
}
|
|
}
|
|
if (%reqcl == 0) {
|
|
messageClient(%sender, 'NoCl', "\c2No Client was found with that name/guid.");
|
|
return 1;
|
|
}
|
|
}
|
|
%auth = %reqcl.getAuthInfo();
|
|
%name = stripChars(detag(getTaggedString(%reqcl.name)), "\cp\co\c6\c7\c8\c9");
|
|
%namebase = stripChars(detag(%reqcl.namebase),"\cp\co\c6\c7\c8\c9" );
|
|
%realname = stripChars(detag(getField(%auth,0)), "\cp\co\c6\c7\c8\c9");
|
|
%guid = %reqcl.guid;
|
|
%lastjoin = %reqcl.joinedtime;
|
|
%ip = strReplace(%reqcl.getAddress(), "IP:", "");
|
|
%ip = getSubStr(%ip, 0, strPos(%ip, ":"));
|
|
%admin = %reqcl.isAdmin + %reqcl.isSuperadmin;
|
|
|
|
%isastr = (%admin == 2 ? "is a Super Admin" : (%admin == 0 ? "isn't an Admin" : "is an Admin"));
|
|
%smurf = (strcmp(%name, %realname) == 0 ? 0 : 1);
|
|
%nstr = (%smurf == 1 ? "("@%realname@")" : "");
|
|
if (%isguid) {
|
|
%nstr = trim(%nstr) SPC "is" SPC %guid;
|
|
}
|
|
messageClient(%sender, 'WhoisReply', "\c2"@%name SPC %nstr);
|
|
messageClient(%sender, 'WhoisReply', "\c2\t" SPC %name SPC "is" SPC (%smurf ? "not a Smurf" : "a Smurf"));
|
|
messageClient(%sender, 'WhoisReply', "\c2\t" SPC %name @ "'s GUID is" SPC %guid);
|
|
messageClient(%sender, 'WhoisReply', "\c2\t" SPC %name SPC "is connecting from" SPC %ip);
|
|
messageClient(%sender, 'WhoisReply', "\c2\t" SPC %name SPC (%reqcl.isAIControlled() ? "is" : "isn't") SPC "a bot");
|
|
messageClient(%sender, 'WhoisReply', "\c2\t" SPC %name SPC (%reqcl.isPGDConnected() ? "is" : "isn't") SPC "PGD Connected");
|
|
messageClient(%sender, 'WhoisReply', "\c2\t" SPC %name SPC "last connected on" SPC %lastjoin);
|
|
messageClient(%sender, 'WhoisReply', "\c2\t" SPC %name SPC %isastr);
|
|
}
|
|
return 1;
|
|
|
|
//depSec: toggles permission to build on or near a players pieces
|
|
case "depsec":
|
|
%statString = %sender.pieceSecured ? "are no longer" : "are now";
|
|
%sender.pieceSecured = !%sender.pieceSecured;
|
|
messageClient(%sender, 'msgClient', "\c3Deploy rights on your pieces "@%statString@" secured.");
|
|
return 1;
|
|
|
|
//uSave: univerally save a building in a CSS slot
|
|
case "usave":
|
|
if($TWM2::PGDConnectDisabled) {
|
|
messageClient(%sender, 'msgPGDRequired', "\c5PGD: PGD Connect has been disabled.");
|
|
return 1;
|
|
}
|
|
if(!%sender.IsPGDConnected()) {
|
|
messageClient(%client, 'msgPGDRequired', "\c5PGD: PGD Connect account required to perform this action.");
|
|
return 1;
|
|
}
|
|
else {
|
|
echo("Client:" SPC %sender.namebase SPC "requests universal save.");
|
|
%file = strReplace(%args, ".cs", "");
|
|
%file = %file @ ".cs";
|
|
%file = "Buildings/Admin/"@%sender.guid@"/" @ %file;
|
|
if(isFile(%file)) {
|
|
MessageAll('MsgAdminForce', "\c3"@%sender.namebase@" is universally saving a building.");
|
|
Univ_ServerConnect(%sender, %file, "Save");
|
|
}
|
|
else {
|
|
messageClient(%client, 'msgPGDRequired', "\c5PGD: That slot/file does not exist");
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
//uLoad: load a universally saved building
|
|
case "uload":
|
|
if($TWM2::PGDConnectDisabled) {
|
|
messageClient(%sender, 'msgPGDRequired', "\c5PGD: PGD Connect has been disabled.");
|
|
return 1;
|
|
}
|
|
if(!%sender.IsPGDConnected()) {
|
|
messageClient(%sender, 'msgPGDRequired', "\c5PGD: PGD Connect account required to perform this action.");
|
|
return 1;
|
|
}
|
|
if(%sender.cantLoad) {
|
|
messageClient(%sender, 'msgPGDRequired', "\c5PGD: You have only recently loaded.");
|
|
return 1;
|
|
}
|
|
$SaveTime::TimeLeft[%sender.guid, "Load"] = $TWM::CSSTimeLoad*60; //5 mins
|
|
%sender.cantLoad = 1;
|
|
schedule(1,0,"ResetLoad",%sender);
|
|
%args = strReplace(%args, ".cs", "");
|
|
LoadUniversalBuilding(%sender, %args);
|
|
return 1;
|
|
|
|
//saveRank: save your rank to PGD
|
|
case "saverank":
|
|
if($TWM2::PGDConnectDisabled) {
|
|
messageClient(%sender, 'msgPGDRequired', "\c5PGD: PGD Connect has been disabled.");
|
|
return 1;
|
|
}
|
|
if(!%sender.canSaveRank) {
|
|
messageClient(%sender, 'MsgClient', "\c5PGD: You have only recently saved your rank.");
|
|
return 1;
|
|
}
|
|
if(!%sender.IsPGDConnected()) {
|
|
messageClient(%sender, 'msgPGDRequired', "\c5PGD: PGD Connect account required to perform this action.");
|
|
return;
|
|
}
|
|
if($IsAuthed $= false) {
|
|
messageClient(%sender, 'msgPGDRequired', "\c5PGD: This is a Satellite Server, only core servers can save ranks.");
|
|
return;
|
|
}
|
|
SaveClientFile(%sender);
|
|
PrepareUpload(%sender);
|
|
%sender.canSaveRank = 0;
|
|
schedule(60000 * 5, 0, "eval", ""@%sender@".canSaveRank = 1;");
|
|
return 1;
|
|
|
|
//loadRank: load your rank from PGD
|
|
case "loadrank":
|
|
if($TWM2::PGDConnectDisabled) {
|
|
messageClient(%sender, 'msgPGDRequired', "\c5PGD: PGD Connect has been disabled.");
|
|
return 1;
|
|
}
|
|
if(!%sender.canLoadRank) {
|
|
messageClient(%sender, 'MsgClient', "\c5PGD: You have only recently re-loaded your rank.");
|
|
return 1;
|
|
}
|
|
if(!%sender.IsPGDConnected()) {
|
|
messageClient(%sender, 'msgPGDRequired', "\c5PGD: PGD Connect account required to perform this action.");
|
|
return;
|
|
}
|
|
LoadUniversalRank(%sender);
|
|
%sender.canLoadRank = 0;
|
|
schedule(60000 * 5, 0, "eval", ""@%sender@".canLoadRank = 1;");
|
|
return 1;
|
|
|
|
//checkStats: check the current rank information on a player
|
|
case "checkstats":
|
|
%clientController = %sender.TWM2Core;
|
|
%todaysDate = sha1sum(formattimestring("yymmdd"));
|
|
if(%args $= "") {
|
|
if(%clientController.officer $= "") {
|
|
%clientController.officer = 0;
|
|
}
|
|
%name = %sender.NameBase;
|
|
%Rank = ""@$Prestige::Name[%clientController.officer]@""@%clientController.rank@"";
|
|
%Stats = getCurrentEXP(%sender);
|
|
for(%i = $Rank::RankCount; %i >= 0; %i--){
|
|
if(%stats >= $Ranks::MinPoints[%i]){
|
|
%nextrank = ""@$Prestige::Name[%clientController.officer]@""@$Ranks::NewRank[(%i + 1)]@"";
|
|
%nextrankXP = $Ranks::MinPoints[(%i + 1)];
|
|
%i = 0;
|
|
}
|
|
}
|
|
if(%Stats >= $Ranks::MinPoints[$Rank::RankCount]) {
|
|
messageClient(%sender, 'MsgClient', "\c2Your Rank is "@%Rank@", You Currently Have "@printCurrentEXP(%sender)@" XP.");
|
|
return 1;
|
|
}
|
|
else {
|
|
messageClient(%sender, 'MsgClient', "\c2Your Rank is "@%Rank@", You Currently Have "@printCurrentEXP(%sender)@" XP. Your next rank is "@%nextrank@" and you need "@(%nextrankXP - %stats)@" XP.");
|
|
return 1;
|
|
}
|
|
}
|
|
else {
|
|
%nametotest = getword(%args, 0);
|
|
%target = plnametocid(%nametotest);
|
|
if (%target==0) {
|
|
messageclient(%sender, 'MsgClient', '\c2No such player.');
|
|
return 1;
|
|
}
|
|
//
|
|
%targetController = %target.TWM2Core;
|
|
if(%targetController.officer $= "") {
|
|
%targetController.officer = 0;
|
|
}
|
|
%Rank = ""@$Prestige::Name[%targetController.officer]@""@%targetController.rank@"";
|
|
%Stats = printCurrentEXP(%target);
|
|
messageClient(%sender, 'MsgClient', "\c2"@%target.namebase@"'s Rank is "@%Rank@" and "@%target.namebase@"'s XP is "@%stats@".");
|
|
return 1;
|
|
}
|
|
|
|
//setEmail: used for the PGD IGC interface
|
|
case "setemail":
|
|
if(!isSet(%args)) {
|
|
return 1;
|
|
}
|
|
%sender.emailSet = %args;
|
|
messageClient(%sender, 'msgSent', "\c3SERVER: Email set to "@%args@"");
|
|
return 1;
|
|
|
|
//None Matching Case:
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
addCMD("Public", "Help", "Usage: /help [command / additional]: displays mod commands, or provide [command] for usage information on that command. Type 'additional' in the [command] area for a list of proxies.");
|
|
addCMD("Public", "Whois", "Usage: /Whois [name or guid]: displays information about a player.");
|
|
addCMD("Public", "MyPhrase", "Usage: /MyPhrase [phrase]: sets your personal phrase for your rank card.");
|
|
addCMD("Public", "VoteBoss", "Usage: /VoteBoss [name]: votes to start a boss.");
|
|
addCMD("Public", "getGUID", "Usage: /getGUID: gives you your GUID.");
|
|
addCMD("Public", "SetNudge", "Usage: /SetNudge [Val]: sets your move tool's move snap.");
|
|
addCMD("Public", "SetRot", "Usage: /SetRot [Angle]: set your construction tool's rotation angle.");
|
|
addCMD("Public", "NameSlot", "Usage: /NameSlot [Save Slot] [Name]: Names a CSS Slot.");
|
|
addCMD("Public", "me", "Usage: /me [Text]: Sends a message under the \c0 Tag.");
|
|
addCMD("Public", "me1", "Usage: /me1 [Text]: Sends a message under the \c1 Tag.");
|
|
addCMD("Public", "me2", "Usage: /me2 [Text]: Sends a message under the \c2 Tag.");
|
|
addCMD("Public", "me3", "Usage: /me3 [Text]: Sends a message under the \c3 Tag.");
|
|
addCMD("Public", "me4", "Usage: /me4 [Text]: Sends a message under the \c4 Tag.");
|
|
addCMD("Public", "me5", "Usage: /me5 [Text]: Sends a message under the \c5 Tag.");
|
|
addCMD("Public", "r", "Usage: /r [Text]: Sends a radio message with the \c3 tag, good for role-playing.");
|
|
addCMD("Public", "givecard", "Usage: /givecard [name] [Level# 1,2,or 3]: Gives a player a card for leveled doors.");
|
|
addCMD("Public", "takecard", "Usage: /takecard [name] [Level# 1,2,or 3]: remove a player's card for leveled doors.");
|
|
addCMD("Public", "GetScale", "Usage: /GetScale: Displays the size of an object.");
|
|
addCMD("Public", "getobj", "Usage: /getobj: Displays object information.");
|
|
addCMD("Public", "pm", "Usage: /pm [name] [message]: sends a private message to clients, ![name] [message] is another way.");
|
|
addCMD("Public", "opendoor", "Usage: /opendoor [pass ?]: opens a door.");
|
|
addCMD("Public", "setpass", "Usage: /setpass [pass]: sets a password on Normal & Toggle Doors.");
|
|
addCMD("Public", "bf", "Usage: /bf: gives you your current loadout in the inventory, purebuild must be on.");
|
|
addCMD("Public", "setSpawn", "Usage: /setSpawn: sets your spawn point.");
|
|
addCMD("Public", "clearspawn", "Usage: /clearspawn: sets you to spawn at the default location.");
|
|
addCMD("Public", "DelMyPieces", "Usage: /Delmypieces: deletes all objects you have deployed.");
|
|
addCMD("Public", "name", "Usage: /name [name]: names an object, you can use tags in this command.");
|
|
addCMD("Public", "scale", "Usage: /scale [# or x] [# or x] [# or x]: Sets the size of an object, 'x' will leave the current size on that axis.");
|
|
addCMD("Public", "objmove", "Usage: /objmove [#] [#] [#|Grd]: moves an object.");
|
|
addCMD("Public", "del", "Usage: /del: Deletes an object you own.");
|
|
addCMD("Public", "invDep", "Usage: /invDep: Toggles Object Invincibility.");
|
|
addCMD("Public", "power", "Usage: /power [#]: sets your current power frequency.");
|
|
addCMD("Public", "givePieces", "Usage: /givePieces [name]: gives your pieces to another player.");
|
|
addCMD("Public", "hover", "Usage: /hover: allows you to maintain your position in mid air.");
|
|
addCMD("Public", "radius", "Usage: /radius [#]: sets the radius of a switch.");
|
|
addCMD("Public", "MoveAll", "Usage: /MoveAll [X] [Y] [Z]: Moves All You Your Pieces");
|
|
addCMD("Public", "ObjPower", "Usage: /ObjPower [freq]: sets the power freq of an object.");
|
|
addCMD("Public", "Timer", "Usage: /Timer [time > 1.5]: sets the switch delay on a switch.");
|
|
addCMD("Public", "DepSec", "Usage: /DepSec: secure deploy rights on your pieces.");
|
|
addCMD("Public", "undo", "Usage: /undo: undo your last construction action.");
|
|
addCMD("Public", "checkStats", "Usage: /checkStats [name or blank]: check the current rank info on a player.");
|
|
addCMD("Public", "uSave", "Usage: /uSave [slot #]: Save a building on the PGD server for loading in other servers.");
|
|
addCMD("Public", "uLoad", "Usage: /uLoad [slot #]: Load a universally saved building.");
|
|
addCMD("Public", "LoadRank", "Usage: /LoadRank: load your universal rank if it failed.");
|
|
addCMD("Public", "SaveRank", "Usage: /SaveRank: save your universal rank if it failed.");
|
|
addCMD("Public", "setEmail", "Usage: /setEmail [email]: set email for PGD IGC.");
|