2013-02-01 15:45:22 -05: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" ) ;
2013-03-17 23:06:58 -04:00
return ;
2013-02-01 15:45:22 -05:00
}
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:
//==============================================================================