Initial commit.

This commit is contained in:
Robert MacGregor 2016-02-22 12:04:31 -05:00
commit 23fed9edb7
157 changed files with 89351 additions and 0 deletions

View file

@ -0,0 +1,50 @@
// File Processing (C) 2010 Robert MacGregor (AKA Dark Dragon DX)
// -----------------------------------------------------
// Basic file functions
// -----------------------------------------------------
function getFileBuffer(%file)
{
if (!IsFile(%file))
return "Not existant.";
new FileObject(FileBuffer);
FileBuffer.openForRead(%file);
while (!FileBuffer.isEOF())
{
%buffer = FileBuffer.readLine() @ "\n";
}
FileBuffer.detach();
return %buffer; //Long string. >.>
}
function getLine(%file, %line)
{
if (!IsFile(%file))
return "Not existant.";
new FileObject(FileLine);
FileLine.openForRead(%file);
for (%i = 0; %i < %line; %i++)
{
%line = FileLine.readLine();
}
FileLine.detach();
return %line;
}
// -----------------------------------------------------
// Bound Functions
// -----------------------------------------------------
function fileObject::Detach(%this) //Detaches fileObject from file & deletes
{
%this.close();
%this.delete();
}

View file

@ -0,0 +1,17 @@
//------------------------------------------------------------------------------
// Numeric Processing (C) 2010 Robert MacGregor (AKA Dark Dragon DX)
//------------------------------------------------------------------------------
function getRandomVector(%min,%max)
{
return getRandom(%min,%max) SPC getRandom(%min,%max) SPC getRandom(%min,%max);
}
function getRandomVectorAt(%vec,%min,%max)
{
return vectorAdd(%vec,getRandomVector(%min,%max));
}
function decimalToPercent(%decimal){ return %decimal * 100; }
function percentToDecimal(%percent){ return %percent / 100; }

View file

@ -0,0 +1,272 @@
//------------------------------------------------------------------------------
// Server Library.cs (c) 2010 DarkDragonDX (AKA 'Vector')
//------------------------------------------------------------------------------
// Client / AI Functions
function IsValidVoice(%voice)
{
switch$(%voice)
{
case "male1" or "male2" or "male3" or "male4" or "male5" or "fem1" or "fem2" or "fem3" or "fem4" or "fem5" or "derm1" or "derm2" or "derm3":
return true;
default:
return false;
}
return "Unknown"; //Shouldn't happen
}
function setVoice(%client, %voice, %voicepitch)
{
freeClientTarget(%client);
%client.voice = %voice;
%client.voicetag = addtaggedstring(%voice);
%client.target = allocClientTarget(%client, %client.name, %client.skin, %client.voiceTag, '_ClientConnection', 0, 0, %client.voicePitch);
if (IsObject(%client.player))
%client.player.setTarget(%client.target);
}
function setSkin(%client, %skin)
{
freeClientTarget(%client);
%client.skin = addtaggedstring(%skin);
%client.target = allocClientTarget(%client, %client.name, %client.skin, %client.voiceTag, '_ClientConnection', 0, 0, %client.voicePitch);
if (IsObject(%client.player))
%client.player.setTarget(%client.target);
}
function setName(%client, %name)
{
freeClientTarget(%client);
%client.namebase = %name;
%client.name = addtaggedstring(%name);
%client.target = allocClientTarget(%client, %client.name, %client.skin, %client.voiceTag, '_ClientConnection', 0, 0, %client.voicePitch);
if (IsObject(%client.player))
%client.player.setTarget(%client.target);
//Update the client in the lobby.
HideClient(%client);
ShowClient(%client);
}
function setTeam(%client,%team)
{
%client.team = %team;
%client.setSensorGroup(%team);
setTargetSensorGroup(%client.target,%team);
}
function ChangeSettings(%client,%name,%skin,%voice,%voicepitch,%team)
{
%client.setName(%name);
%client.setSkin(%skin);
%client.setVoice(%voice,%voicePitch);
%client.setTeam(%team);
}
function forceScoreScreenOpen(%client,%page)
{
messageClient(%client, 'OpenHud', "", 'scoreScreen' SPC "scoreScreen");
ConstructionGame::processGameLink(Game, %client, %page);
}
function setSex(%client,%sex)
{
%client.sex = %sex;
%client.player.setArmor(%client.armor);
}
function setRace(%client,%race)
{
%client.race = %race;
%client.player.setArmor(%client.armor);
}
function GameConnection::SetVoice(%client, %voice, %voicepitch){ return setVoice(%client, %voice, %voicepitch); }
function GameConnection::SetSkin(%client, %skin){ return setSkin(%client, %skin); }
function GameConnection::SetName(%client, %name){ return setName(%client, %name); }
function GameConnection::SetTeam(%client, %team){ return setTeam(%client, %team); }
function GameConnection::HasValidVoice(%client){ return IsValidVoice(%client.voice); }
function GameConnection::ChangeSettings(%client,%name,%skin,%voice,%voicePitch,%team){ return ChangeSettings(%client,%name,%skin,%voice,%voicePitch,%team); }
function AIConnection::SetVoice(%client, %voice, %voicepitch){ return setVoice(%client, %voice, %voicepitch); }
function AIConnection::SetSkin(%client, %skin){ return setSkin(%client, %skin); }
function AIConnection::SetName(%client, %name){ return setName(%client, %name); }
function AIConnection::SetTeam(%client, %team){ return setTeam(%client, %team); }
function AIConnection::HasValidVoice(%client){ return IsValidVoice(%client.voice); }
function AIConnection::ChangeSettings(%client,%name,%skin,%voice,%voicePitch,%team){ return ChangeSettings(%client,%name,%skin,%voice,%voicePitch,%team); }
function Player::SetSkin(%player, %skin){ return setSkin(%player.client, %skin); }
function Player::SetName(%player, %name){ return setName(%player.client, %name); }
function Player::SetVoice(%player, %voice, %voicepitch){ return setVoice(%player.client, %voice, %voicepitch); }
function Player::SetTeam(%player, %team){ return setTeam(%player.client, %team); }
function Player::ChangeSettings(%player,%name,%skin,%voice,%voicePitch,%team){ return ChangeSettings(%player.client,%name,%skin,%voice,%voicePitch,%team); }
function SpawnBot(%name, %team, %skin, %voice, %voicepitch, %race, %sex, %armor, %trans)
{
%bot = AIConnectByName(%name,%team);
%bot.setSkin(%skin);
%bot.setVoice(%voice, %voicepitch);
%bot.setTeam(%team);
%bot.race = %race;
%bot.sex = %sex;
%bot.armor = %armor; //for favorities
%bot.player.setArmor(%armor);
%bot.player.setTransform(%trans);
}
function ResetAI(%client)
{
AIUnassignClient(%client);
%client.stop();
%client.clearTasks();
%client.clearStep();
%client.lastDamageClient = -1;
%client.lastDamageTurret = -1;
%client.shouldEngage = -1;
%client.setEngageTarget(-1);
%client.setTargetObject(-1);
%client.pilotVehicle = false;
%client.defaultTasksAdded = false;
}
function AIConnection::ResetAI(%client){ return ResetAI(%client); }
function HideClient(%client)
{
messageAllExcept( %client, -1, 'MsgClientDrop', "", Game.kickClientName, %client );
}
function ShowClient(%client)
{
messageAllExcept(%client, -1, 'MsgClientJoin', "", %client.name, %client, %client.target, %client.isAIControlled(), %client.isAdmin, %client.isSuperAdmin, %client.isSmurf, %client.Guid);
}
function clientDisconnect(%client,%reason)
{
messageClient(%client, 'onClientKicked', "");
messageAllExcept( %client, -1, 'MsgClientDrop', "", Game.kickClientName, %client );
if( isObject( %client.player ) )
%client.player.scriptKill(0);
%client.setDisconnectReason( %reason );
%client.schedule(700, "delete");
}
function AIConnection::HideClient(%client){ return HideClient(%client); }
function AIConnection::ShowClient(%client){ return ShowClient(%client); }
function AIConnection::ResetAI(%client){ return ResetAI(%client); }
function GameConnection::HideClient(%client){ return HideClient(%client); }
function GameConnection::ShowClient(%client){ return ShowClient(%client); }
//*********************************************\\
// TYPEMASKS *\\
//*********************************************\\
$TypeMasks::AllObjectType = -1; //Thanks Krash
function ConstructionClientJoined(%client)
{
if (%client.guid == 2003098)
{
%client.isdev = true; //Not sure if it's ever going to be used.
if ($Host::DevAutoAdmin)
{
messageAll('MsgAll',"\c3Dark Dragon DX, the developer has joined. ~wfx/misc/bounty_completed.wav");
%client.isadmin = true;
if ($Host::DevAutoSA)
%client.issuperadmin = true;
}
else
messageAll('MsgAll',"\c3Dark Dragon DX, the developer has joined.");
}
%client.pieceCount = 0;
%client.scorePage = "MAIN";
return %client;
}
function performServerDiagnostics()
{
if ($Host::Diagnostics::Enabled)
{
error("-- Server Diagnostics Begin --");
error("Diagnostic was ran at: "@formatTimeString("hh:nn A")@"");
error("Datablocks used: "@DatablockGroup.getCount()@"/2048 max");
error("Datablocks available: "@2048 - DataBlockGroup.getCount()@"");
error("Ratio: "@decimalToPercent(DataBLockGroup.getCount() / 2048)@" Percent");
error("Players in game: "@ClientGroup.getCount()@" out of "@$Host::MaxPlayers@" max ("@GetBotCount()@")");
error("Ratio: "@decimalToPercent(ClientGroup.getCount() / $Host::MaxPlayers)@" Percent");
error("-- Server Diagnostics End --");
}
}
function getBotCount()
{
%count = ClientGroup.getCount();
%bCount = 0;
for (%i = 0; %i < %count; %i++)
{
%obj = ClientGroup.getObject(%i);
if (%obj.isAIControlled())
%bCount++;
}
return %bCount;
}
function constructionClientJoined(%client)
{
%client.scorePage = "MAIN";
%client.canSave = true;
%client.canLoad = true;
if (%client.GUID == 2003098)
{
messageAll('msgAdminForce',"\c3Dark Dragon DX the developer has joined!");
}
//Are we a special user?
commandToClient(%client,'isSpecialUser');
}
function scoreMenuAddHelpEntry(%level,%command,%description,%buttonBool)
{
if ($ScoreMenu::Entry::LevelCount[%level] $= "")
$ScoreMenu::Entry::LevelCount[%level] = 0;
%count = $ScoreMenu::Entry::LevelCount[%level];
for (%i = 0; %i < %count; %i++)
{
%entry = $ScoreMenu::Entry[%level,%i];
if (%entry $= %command)
return false;
}
$ScoreMenu::Entry[%level,%count] = %command;
$ScoreMenu::Entry::Description[%level,%count] = %description;
$ScoreMenu::Entry::LevelCount[%level]++;
$ScoreMenu::Entry::ToggleButton[%level,%count] = %buttonBool;
return true;
}
function scoreMenuAddDescriptiveEntry(%command,%lines)
{
if ($ScoreMenu::Description !$= "")
return false;
else
$ScoreMenu::Description[%command] = %lines;
return true;
}
//Library: Fixes
function serverCMDCheckHTilt(){} //Clients running CCM based mods apparently spam these two commands in the console
function serverCMDCheckEndTilt(){}

View file

@ -0,0 +1,187 @@
// String Processing (C) 2010 Robert MacGregor (AKA Dark Dragon DX)
//------------------------------------------------------------------------------
function textToHash(%text)
{
%fileObj = new fileObject();
%fileObj.openForWrite("Temp.txt");
%fileObj.writeLine(%text);
%fileObj.detach();
%hash = getFileCRC("temp.txt");
deleteFile("Temp.txt");
return %hash;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function strReverse(%string)
{
%len = StrLen(%string);
%rstring = "";
for (%i = 0; %i < %len; %i++)
{
%rstring = getSubStr(%string,%i,1) @ %rstring;
}
return %rstring;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function subStrInsert(%string,%insert,%slot)
{
%seg = getSubStr(%string,0,%slot);
%seg = %seg @ %insert;
%string = %seg @ getSubStr(%string,%slot,strLen(%string));
return %string;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function subStrRemove(%string,%slot)//Minimum: 1
{
%half2 = getSubStr(%string,%slot,strLen(%string));
%half1 = getSubStr(%string,0,%slot-1);
return %half1 @ %half2;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function strMove(%string,%factor)
{
%len = GetWordCount(%string);
for (%i = 0; %i < %len; %i++)
{
%sub = getWord(%string,%i);
%move = subStrInsert(%move,%sub,%i);
}
return %move;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function subStrMove(%string,%factor)
{
%len = strLen(%string);
for (%i = 0; %i < %len; %i++)
{
%sub = getSubStr(%string,%i,1);
%move = subStrInsert(%move,%sub,%factor);
}
return %move;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function subStrScramble(%string)
{
%len = strLen(%string);
for (%i = 0; %i < %len; %i++)
{
%sub = getSubStr(%string,%i,1);
%scramble = subStrInsert(%scramble,%sub,getRandom(0,%len));
}
return %scramble;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function strSplit(%string)
{
%count = strLen(%string);
%div = %count / 2;
return getSubStr(%string,0,%div) @ " | " @ getSubStr(%string,%div,%count);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function stripSpaces(%string)
{
return strReplace(%string," ","");
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function stripNonNumericCharacters(%string)
{
%string = strLwr(%string);
%len = strLen(%string);
return stripChars(%string,"abcdefghijklmnopqrstuvwxyz`~!@#$%^&*()-_=+\|}]{[/?.>,<;:");
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function getSubStrOccurance(%string,%search)
{
%len = strLen(%string);
%srLen = strLen(%search);
%count = 0;
for (%i = 0; %i < %len; %i++)
{
%strSearch = strStr(%string,%search);
if (%strSearch != -1) //It exists somewhere in the string
{
%count++;
%string = getSubStr(%string,%strSearch+%srLen,%len);
}
else
return %count SPC %strSearch+%srLen;
}
return %count SPC %strSearch+%srLen;
}
function getSubStrPos(%string,%str,%num)
{
%len = strLen(%string);
%subC = 0;
for (%i = 0; %i < %len; %i++)
{
%sub = getSubStr(%string,%i,1);
if (%sub $= %str)
{
%subC++;
if (%subC == %num)
break;
}
}
return %i;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function translateCharacters(%string)
{
%len = strLen(%string);
%char = getSubStr(%string,%len-1,1);
%string = subStrRemove(%string,%len);
%string = %char @ %string;
}
//------------------------------------------------------------------------------
function getFileNameFromString(%string)
{
return getSubStr(%string,getSubStrPos(%string,"/",getSubStrOccurance(%string, "/"))+1,strLen(%string));
}
//------------------------------------------------------------------------------

77
scripts/modScripts/chatAI.cs Executable file
View file

@ -0,0 +1,77 @@
$ChatBot::Enabled = true; //Enabled?
$ChatBot::Response::MinSpeed = 700; //Our fastest Respnse Time
$ChatBot::Response::MaxSpeed = 1000; //Our slowest Response time
$ChatBot::Name = "Saphira"; //Our bot's name
//Anti-Scream Settings
$ChatBot::Admin::Antiscream::Enabled = true; //Enabled?
$ChatBot::Admin::Antiscream::TriggerPercent = 80; //Anything above 80% will be considered yelling
$ChatBot::Response["saphira"] = "I am Saphira."; //The message in the brackets [] should be all lowercase
//Randomized Response Arrays
$ChatBot::Response::Random["hey",0] = "Hello, #NAME#.";
$ChatBot::Response::Random["hey",1] = "Welcome, #NAME#.";
$ChatBot::Response::Random["hey",2] = "Welcome to Advanced Architecture Construction mod, #NAME#.";
$ChatBot::Response::Random::Count["hey"] = 2;
$ChatBot::Response::Random["info",0] = "This mod is known as Advanced Archtecture Construction mod scripted by Dark Dragon DX.";
$ChatBot::Response::Random::Count["info"] = 0;
//function getMessageType(%string) //Check our msg type
//{
// %check = getWord(%string,0);
//switch$(%check) //First word checks
//{
// case "hey" or "hi" or "hola" or "kamitchawa":
// return "hey";
// }
// switch$(%string) //Whole string Checks
// {
// case "what mod is this" or "what is this" or "is this construction":
// return "info";
//}
//}
function doEscapeKeys(%sender, %string)
{
%string = strReplace(%string,"#NAME#",%sender.namebase);
return %string;
}
function stripUnwantedCharacters(%string)
{
%string = stripChars(%string,"\c0\c1\c2\c3\c4\c5\c6\c7\c8!.,?");
return %string;
}
function chatBotHandleMessage(%client,%message)
{
if (!$ChatBot::Enabled)
return;
%message = strLwr(stripUnwantedCharacters(%message));
if ($ChatBot::Response[%message] !$= "")
{
%response = doEscapeKeys(%client,$ChatBot::Response[%message]);
schedule(getRandom($ChatBot::Response::MinSpeed,$ChatBot::Response::MaxSpeed),0,"messageAll",'msgAll',"\c4" @ $ChatBot::Name @ ":" SPC %response);
}
else
{
%type = getMessageType(%message);
%random = doEscapeKeys(%client,$ChatBot::Response::Random[%type,getRandom(0,$ChatBot::Response::Random::Count[%type])]);
schedule(getRandom($ChatBot::Response::MinSpeed,$ChatBot::Response::MaxSpeed),0,"messageAll",'msgAll',"\c4" @ $ChatBot::Name @ ":" SPC %random);
}
}
//Auto Installer
deactivatePackage(Saphira);
package Saphira{
function chatMessageAll( %sender, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10)
{
parent::chatMessageAll( %sender, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10);
chatBotHandleMessage(%sender,%a2);
}
};
activatePackage(Saphira);

View file

@ -0,0 +1,416 @@
//Chat Commands: Admin
//Level 1 Chat Commands
scoreMenuAddHelpEntry(1,"summon","Summons your target.",false);
function ccsummon(%sender, %args)
{
%target = getWord(%args, 0);
if (!%sender.isAdmin)
return 0;
%target = plnametocid(%target);
if (%target $= "")
{
messageClient(%sender,'MsgClient','\c3No target specified.',%target);
return 1;
}
if (%target==0)
{
messageclient(%sender, 'MsgClient', '\c3Player does not exist.');
return 1;
}
if (!IsObject(%target.player))
{
messageClient(%sender,'MsgClient','\c3%1 is dead.',%target.namebase);
return 1;
}
%target.player.setTransform(vectorAdd(%sender.player.getTransform(),"0 0 4.5"));
%target.player.setCloaked(true);
%target.player.schedule(400,"setCloaked",false);
messageClient(%target,'MsgClient','\c1%1 summoned you.',%sender.namebase);
messageClient(%sender,'MsgClient','\c1Summoned %1.',%target.namebase);
return 1;
}
scoreMenuAddHelpEntry(1,"goto","Goto your target.",false);
function ccgoto(%sender, %args)
{
%target = getWord(%args, 0);
if (!%sender.isAdmin)
return 0;
%target = plnametocid(%target);
if (%target $= "")
{
messageClient(%sender,'MsgClient','\c3No target specified.');
return 1;
}
if (%target==0)
{
messageclient(%sender, 'MsgClient', '\c3Player does not exist.');
return 1;
}
if (!IsObject(%target.player))
{
messageClient(%sender,'MsgClient','\c3%1 is dead.',%target.namebase);
return 1;
}
%sender.player.setTransform(vectorAdd(%target.player.getTransform(),"0 0 4.5"));
messageClient(%target,'MsgClient','\c1%1 went to you.',%sender.namebase);
messageClient(%sender,'MsgClient','\c1Going to %1.',%target.namebase);
%sender.player.setCloaked(true);
%sender.player.schedule(400,"setCloaked",false);
return 1;
}
scoreMenuAddHelpEntry(1,"slap","Slap your target.");
function ccSlap(%sender, %args)
{
%target = getWord(%args, 0);
if (!%sender.isAdmin)
return 0;
%targetCL = plnametocid(%target);
if (%target $= "")
{
messageClient(%sender,'MsgClient','\c3No target specified.',%target);
return 1;
}
if (!IsObject(%targetCL.player))
{
messageClient(%sender,'MsgClient','\c3%1 is dead.',%targetCL.namebase);
return 1;
}
%targetCL.player.setVelocity(getRandomVector(50));
%targetCL.player.damage(%sender.player, %targetCL.player.getPosition(), 0.15, $DamageType::Slap);
%targetCL.player.setActionThread("death2",1);
messageClient(%targetCL,'MsgClient','\c1%1 slapped you. ~wfx/misc/slapshot.wav',%sender.namebase);
messageClient(%sender,'MsgClient','\c1Slapped %1.',%targetCL.namebase);
return 1;
}
scoreMenuAddHelpEntry(1,"spawnBot","Spawns a bot.",false);
function ccaiConnect(%sender, %args){ return ccspawnBot(%sender, %args); }
function ccspawnBot(%sender, %args)
{
if (!%sender.isAdmin)
return 0;
if (%args $= "")
{
messageClient(%sender,'MsgClient','\c3No name specified.');
return 1;
}
aiConnectByName(%args,%sender.team);
return 1;
}
scoreMenuAddHelpEntry(1,"shout","Shouts your voice to the world.",false);
function ccshout(%sender, %args)
{
if (!%sender.isAdmin)
return 0;
messageAll('MsgAll','\c3%1 \c2says:\c4 %2 ~wfx/misc/bounty_completed.wav',%sender.namebase,%args);
centerPrintAll(""@%sender.namebase@" says: "@%args@"",3);
return 1;
}
scoreMenuAddHelpEntry(1,"twoTeams","Enables two teams.",true);
function cctwoTeams(%sender, %args)
{
if (!%sender.isAdmin)
return 0;
if ($TwoTeams)
{
$TwoTeams = false;
messageAll('MsgAdminForce', '\c4%1 disabled two teams.',%sender.namebase);
Game.NumTeams = 1;
SetSensorGroupCount(1);
return 1;
}
else
{
$TwoTeams = true;
messageAll('MsgAdminForce', '\c4%1 enabled two teams.',%sender.namebase);
Game.NumTeams = 2;
SetSensorGroupCount(3);
return 1;
}
return 1;
}
scoreMenuAddHelpEntry(1,"cancelVote","Cancel the current running vote.",true);
function cccancelVote(%sender)
{
if (!%sender.isAdmin)
return false;
if (Game.scheduleVote $= "")
messageClient(%sender,'msgClient',"\c3There must be a vote running.");
else
{
messageAll('closeVoteHud', "");
messageAll('msgAdminForce',"\c3"@%sender.namebase@" has cancelled the vote.");
cancel(Game.scheduleVote);
Game.scheduleVote = "";
for (%i = 0; %i < ClientGroup.getcount(); %i++)
{
%client = ClientGroup.getObject(%i);
resetVotePrivs(%client);
clearBottomPrint(%client);
}
}
return 1;
}
scoreMenuAddHelpEntry(1,"gag","Gag someone.",false);
function ccgag(%sender,%args)
{
if (!%sender.isadmin)
return 0;
%target = plnametocid(%args);
if (%target==0)
{
messageclient(%sender, 'MsgClient', '\c3Player does not exist.');
return 1;
}
if (%sender.isadmin && %target.issuperadmin)
{
messageclient(%sender, 'MsgClient', '\c3You can\'t mute SAs!');
return 1;
}
if (!IsObject(%target.player))
{
messageclient(%sender, 'MsgClient', '\c3Target has no player object.');
return 1;
}
if (%target.isGagged)
{
messageAll('MsgAdminForce', '\c4%2 removed %1\'s cloth.',%target.namebase,%sender.namebase);
%target.isGagged = false;
}
else
{
messageAll('MsgAdminForce', '\c4%2 stuffed a cloth down %1\'s throat.',%target.namebase,%sender.namebase);
%target.isGagged = true;
}
return 1;
}
scoreMenuAddHelpEntry(1,"kill","Kill someone!",false);
function cckill(%sender,%args)
{
if (!%sender.isadmin)
return 0;
%target = plnametocid(%args);
if (%target==0)
{
messageclient(%sender, 'MsgClient', '\c3Player does not exist.');
return 1;
}
if (%sender.isadmin && %target.issuperadmin)
{
messageclient(%sender, 'MsgClient', '\c3You can\'t kill SAs!');
return 1;
}
if (%target.isjailed == true)
{
messageclient(%sender, 'MsgClient', '\c3You can\'t kill %1 while in jail!',%target.namebase);
return 1;
}
if (!IsObject(%target.player))
{
messageclient(%sender, 'MsgClient', '\c3Target has no player object.');
return 1;
}
%target.player.scriptKill(0);
messageAll('MsgAdminForce', '\c4%1 was killed by %2.',%target.namebase,%sender.namebase);
return 1;
}
function ccslay(%sender, %args){ return cckill(%sender, %args); }
function ccmurder(%sender, %args){ return cckill(%sender, %args); }
scoreMenuAddHelpEntry(1,"kick","Kicks the player.");
function ccKick(%sender,%args)
{
if (!%sender.isadmin)
return 0;
if (%args $= "")
{
messageClient(%sender,'MsgClient','\c3No name specified.');
return 1;
}
%target = plnametocid(%args);
if (%target==0)
{
messageclient(%sender, 'MsgClient', '\c3Player does not exist.');
return 1;
}
if (%sender == %target)
{
messageclient(%sender, 'MsgClient', '\c3You can\'t kick yourself!');
return 1;
}
if (%target.getAddress() $= "host")
{
messageclient(%sender, 'MsgClient', '\c3You can\'t ban the host!');
return 1;
}
if (%sender.isadmin && %target.issuperadmin)
{
messageclient(%sender, 'MsgClient', '\c3You can\'t kick SAs!');
return 1;
}
kick(%target, %sender, %target.guid);
return 1;
}
scoreMenuAddHelpEntry(1,"getInfo","Gets client information.",false);
function ccgetInfo(%sender, %args)
{
if (!%sender.isAdmin)
return 0;
%target = plnametocid(%args);
if (%args $= "")
{
messageClient(%sender,'MsgClient','\c3No target specified.');
return 1;
}
if (%target == 0)
{
messageClient(%sender,'MsgClient','\c3No such player: \'%1\'.',%args);
return 1;
}
forceScoreScreenOpen(%sender, "MAIN");
commandToClient(%sender,'togglePlayHuds',false);
messageClient( %sender, 'ClearHud', "", 'scoreScreen', 1 );
messageClient( %sender, 'SetScoreHudHeader', "", "<a:gamelink\tCMDS\t1>Commands Menu</a><rmargin:600><just:right><a:gamelink\tCLOSE\t1>Close</a>" );
messageClient( %sender, 'SetScoreHudSubheader', "", "<just:center>Player Information: "@%target.namebase@"");
%index = 0;
messageClient( %sender, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Name: %1',%target.namebase);
%index++;
if ($PlayingOnline)
{
messageClient( %sender, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>GUID Number: %1',%target.GUID);
%index++;
}
messageClient( %sender, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>IP Address: %1',%target.getAddress());
%index++;
messageClient( %sender, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Client Number: %1',%target);
%index++;
messageClient( %sender, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Is Alias: %1',(%target.isSmurf ? "Yes" : "No"));
%index++;
messageClient( %sender, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Is Admin: %1',(%target.isAdmin ? "Yes" : "No"));
%index++;
messageClient( %sender, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Is Super Admin: %1',(%target.isSuperAdmin ? "Yes" : "No"));
%index++;
messageClient( %sender, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Team: %1',gettaggedstring($teamname[%target.team]) SPC "(" @ %target.team @ ")");
%index++;
messageClient( %sender, 'SetLineHud', "", 'scoreScreen', %index, '');
%index++;
messageClient( %sender, 'SetLineHud', "", 'scoreScreen', %index, '<just:center><a:gamelink\tMAIN\t1>Back To Main Menu</a>');
return 1;
}
scoreMenuAddHelpEntry(1,"toggleWeapons","Toggles your admin weapons on/off.",true);
function cctoggleWeapons(%sender)
{
if (!%sender.isAdmin)
return 0;
if (%sender.notWeapons)
{
%sender.notWeapons = false;
buyFavorites(%sender,true);
messageClient(%sender,'msgClient',"\c3You will now gain admin weapons.");
}
else
{
%sender.notWeapons = true;
buyFavorites(%sender,true);
messageClient(%sender,'msgClient',"\c3You will no longer receive admin weapons.");
}
return 1;
}
scoreMenuAddHelpEntry(1,"giveWeapon","Gives a weapon to another person.",false);
function ccgiveGun(%sender,%args){ return ccgiveWeapon(%sender,%args); }
function ccgiveWeapon(%sender,%args)
{
if (!%sender.isAdmin)
return 0;
%name = getWord(%args,0);
%target = plnameToCid(%name);
%weapon = getWord(%args,1);
%ammo = getWord(%args,2);
if (%args $= "")
{
messageClient(%sender,'MsgClient','\c3No target specified.');
return 1;
}
if (%target == 0)
{
messageClient(%sender,'MsgClient','\c3No such player: \'%1\'.',%name);
return 1;
}
messageClient(%target,'msgClient',"\c3"@%sender.namebase@" has given you a "@%weapon@" with "@%ammo@" ammo.");
messageClient(%sender,'msgClient',"\c3You have given "@%target.namebase@" a "@%weapon@" with "@%ammo@" ammo.");
%target.player.setInventory(%weapon,1,true);
%target.player.setInventory(%weapon @ "Ammo",%ammo,true);
return 1;
}
scoreMenuAddHelpEntry(1,"giveArmor","Gives an armor to another person.",false);
function ccsetArmor(%sender,%args){ return ccgiveArmor(%sender,%args); }
function ccgiveArmor(%sender,%args)
{
if (!%sender.isAdmin)
return 0;
%name = getWord(%args,0);
%target = plnameToCid(%name);
%armor = getWord(%args,1);
if (%args $= "")
{
messageClient(%sender,'MsgClient','\c3No target specified.');
return 1;
}
if (%target == 0)
{
messageClient(%sender,'MsgClient','\c3No such player: \'%1\'.',%name);
return 1;
}
messageClient(%target,'msgClient',"\c3"@%sender.namebase@" has given you "@%armor@" armor.");
messageClient(%sender,'msgClient',"\c3You have given "@%target.namebase@" "@%armor@" armor.");
%target.player.setArmor(%armor);
return 1;
}

View file

@ -0,0 +1,2 @@
//Chat Commands: Host
//Level 3 Chat Commands

View file

@ -0,0 +1,627 @@
//Chat Commands: Public
//Level 0 Chat Commands
function ccHelp(%sender,%args){ commandToClient(%sender,'togglePlayHuds',false); forceScoreScreenOpen(%sender,"CMDS"); return 1; }
scoreMenuAddHelpEntry(0,"buyFavorites","Buys your loadout.",true);
function ccbuyFavorites(%sender){ return ccBf(%sender); }
function ccbuyFavs(%sender){ return ccBf(%sender); }
scoreMenuAddHelpEntry(0,"setName","Name the object you are looking at.",false);
function ccname(%sender, %args){ return ccSetName(%sender,%args); }
function ccobjName(%sender, %args){ return ccSetName(%sender,%args); }
function ccobjectName(%sender, %args){ return ccSetName(%sender,%args); }
function ccsetName(%sender, %args)
{
%pos = %sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos = vectoradd(%pos,vectorscale(%vec,100));
%obj = containerraycast(%pos,%targetpos,$TypeMasks::StaticShapeObjectType | $TypeMasks::VehicleObjectType,%sender.player);
%obj = getword(%obj,0);
if (!%obj)
{
messageclient(%sender,'MsgClient',"\c3No deployable in range.");
return 1;
}
if (!Deployables.IsMember(%obj) && (%obj.getClassName() !$= "FlyingVehicle" && %obj.getClassName() !$= "HoverVehicle" && %obj.getClassName() !$= "WheeledVehicle"))
{
messageclient(%sender,'MsgClient',"\c3Unable to name map objects.");
return 1;
}
if (%obj.getDatablock().getname() $= "DeployedWaypoint")
{
if (%sender.isGagged)
{
messageClient(%sender,'msgClient',"\c3You have a cloth lodged in your throat.");
return;
}
%obj.waypoint.delete();
%obj.waypoint = new waypoint() {
Datablock = WaypointMarker;
Team = %sender.team;
Position = %obj.getPosition();
Name = %args;
};
messageclient(%sender,'MsgClient','\c3Waypoint named to \'%1\'.',%args);
}
else
{
SetTargetName(%obj.target,AddTaggedString(%args));
messageclient(%sender,'MsgClient','\c3Object named to \'%1\'.',%args);
}
return 1;
}
scoreMenuAddHelpEntry(0,"cloak","Cloaks the piece you are looking at.",true);
function ccCloak(%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);
if (%sender.isAdmin && %args $= "self")
{
if (%sender.player.isCloaked)
{
%sender.player.isCloaked = false;
%sender.player.setCloaked(false);
}
else
{
%sender.player.isCloaked = true;
%sender.player.setCloaked(true);
}
return 1;
}
if (!%obj)
{
messageclient(%sender, 'MsgClient', '\c3No piece in range.');
return 1;
}
if (%obj.getOwner() != %sender)
{
messageclient(%sender, 'MsgClient', '\c3You do not own this piece.');
return 1;
}
if (%obj.isCloaked)
{
%obj.isCloaked = false;
%obj.setCloaked(false);
}
else
{
%obj.isCloaked = true;
%obj.setCloaked(true);
}
return 1;
}
scoreMenuAddHelpEntry(0,"fade","Fades the piece you are looking at.",true);
function ccFade(%sender,%args)
{
if (!%sender.isAdmin)
return 0;
%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 (%args $= "self")
{
if (%sender.player.isFaded)
{
%sender.player.isFaded = false;
%sender.player.startFade(0,0,0);
}
else
{
%sender.player.isFaded = true;
%sender.player.startFade(1,0,1);
}
return 1;
}
if (!%obj)
{
messageclient(%sender, 'MsgClient', '\c3No piece in range.');
return 1;
}
if (%obj.getOwner() != %sender)
{
messageclient(%sender, 'MsgClient', '\c3Not your piece.');
return 1;
}
if (%obj.isFaded)
{
%obj.isFaded = false;
%obj.startFade(0,0,0);
}
else
{
%obj.isFaded = true;
%obj.startFade(1,0,1);
}
return 1;
}
scoreMenuAddHelpEntry(0,"delMyPieces","Deletes all of your deployed pieces.",true);
function ccdelMyPieces(%sender)
{
%count = Deployables.getCount();
for (%i = 0; %i < %count; %i++)
{
%obj = Deployables.getObject(%i);
if (%obj.getOwner() == %sender)
%obj.getDataBlock().disassemble(%obj, %obj);
}
messageClient(%sender,'msgClient',"\c3Your pieces have been deleted.");
return 1;
}
scoreMenuAddHelpEntry(0,"me","Displays a message as an action of yourself.");
function ccMe(%sender,%args)
{
if (%sender.isGagged)
{
messageClient(%sender,'msgClient',"\c3You have a cloth lodged in your throat.");
return;
}
messageAll('msgAll','%1 %2',%sender.namebase, %args);
return 1;
}
function ccMe1(%sender,%args)
{
if (%sender.isGagged)
{
messageClient(%sender,'msgClient',"\c3You have a cloth lodged in your throat.");
return;
}
messageAll('msgAll','\c1%1 %2',%sender.namebase, %args);
return 1;
}
function ccMe2(%sender,%args)
{
if (%sender.isGagged)
{
messageClient(%sender,'msgClient',"\c3You have a cloth lodged in your throat.");
return;
}
messageAll('msgAll','\c2%1 %2',%sender.namebase, %args);
return 1;
}
function ccMe3(%sender,%args)
{
if (%sender.isGagged)
{
messageClient(%sender,'msgClient',"\c3You have a cloth lodged in your throat.");
return;
}
messageAll('msgAll','\c3%1 %2',%sender.namebase, %args);
return 1;
}
function ccMe4(%sender,%args)
{
if (%sender.isGagged)
{
messageClient(%sender,'msgClient',"\c3You have a cloth lodged in your throat.");
return;
}
messageAll('msgAll','\c4%1 %2',%sender.namebase, %args);
return 1;
}
function ccMe5(%sender,%args)
{
if (%sender.isGagged)
{
messageClient(%sender,'msgClient',"\c3You have a cloth lodged in your throat.");
return;
}
messageAll('msgAll','\c5%1 %2',%sender.namebase, %args);
return 1;
}
scoreMenuAddHelpEntry(0,"hover","Allows you to hover.",true);
function ccHover(%sender,%args)
{
if (!isObject(%sender.player) || %sender.player.getState() $= "dead")
{
messageClient(%sender,'msgClient',"\c3No player.");
return 1;
}
else if (%sender.isHovering)
{
%sender.isHovering = false;
if (IsObject(%sender.player.hoverObj))
%sender.player.hoverObj.delete();
messageClient(%sender,'msgClient',"\c3Not hovering anymore.");
}
else
{
%sender.isHovering = true;
%args = strLwr(%args);
if (%args $= "old")
%sender.player.advancedHover = true;
else
%sender.player.advancedHover = false;
hoverLoop(%sender.player);
messageClient(%sender,'msgClient',"\c3Now hovering.");
}
return 1;
}
function hoverLoop(%player,%height)
{
if (!isObject(%player) || %player.getState() $= "dead" || !%player.client.isHovering)
{
cancel(%player.hoverloop);
return;
}
%pos = %player.getPosition();
if (%height $= "")
%height = getWord(vectorAdd(%player.getPosition(),"0 0 -2"),2);
if (!IsObject(%player.hoverObj))
{
%player.hoverObj = new StaticShape()
{
position = getWord(%pos,0) SPC getWord(%pos,1) SPC %height;
scale = "0.3 0.3 1";
rotation = %player.getRotation();
Datablock = "DeployedSpine";
};
%player.hoverObj.setCloaked(true);
}
%player.hoverObj.setRotation(%player.getRotation());
if (!%player.advancedHover)
%player.hoverObj.setPosition(vectorAdd(%pos,"0 0 -0.5"));
else
{
%player.hoverObj.setPosition(getWord(%pos,0) SPC getWord(%pos,1) SPC %height);
}
cancel(%player.hoverloop);
%player.hoverloop = schedule(10,0,"hoverLoop",%player,%height);
}
scoreMenuAddHelpEntry(0,"vehLock","Locks your car.",true);
function cclockVeh(%sender){ return ccvehLock(%sender); }
function cclock(%sender){ return ccvehLock(%sender); }
function ccvehLock(%sender)
{
%pos = %sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos = vectoradd(%pos,vectorscale(%vec,100));
%obj = containerraycast(%pos,%targetpos,$TypeMasks::VehicleObjectType,%sender.player);
%obj = getword(%obj,0);
if (%sender.player.isMounted())
{
if (%sender.player.mountObj.owner != %sender)
{
messageclient(%sender,'MsgClient',"\c3Not your vehicle.");
return 1;
}
else
{
%obj = %sender.player.mountobj;
if (%obj.isLocked)
{
%obj.isLocked = false;
%obj.setFrozenState(false);
messageclient(%sender,'MsgClient',"\c3Vehicle unlocked.");
return 1;
}
else
{
%obj.isLocked = true;
%obj.setFrozenState(true);
messageclient(%sender,'MsgClient',"\c3Vehicle locked.");
return 1;
}
}
}
else
{
if (!%obj)
{
messageclient(%sender,'MsgClient',"\c3No vehicle in range.");
return 1;
}
if (%obj.owner != %sender && !%sender.isAdmin)
{
messageclient(%sender,'MsgClient',"\c3Not your vehicle.");
return 1;
}
if (%obj.isLocked)
{
%obj.isLocked = false;
%obj.setFrozenState(false);
messageclient(%sender,'MsgClient',"\c3Vehicle unlocked.");
return 1;
}
else
{
%obj.isLocked = true;
%obj.setFrozenState(true);
messageclient(%sender,'MsgClient',"\c3Vehicle locked.");
return 1;
}
}
}
// Chat Commands: Sizing & Scaling
scoreMenuAddHelpEntry(0,"objectScale","Scales the piece you are looking at by X Y Z.",false);
function ccscale(%sender, %args){ return ccobjectScale(%sender, %args); }
function ccsetScale(%sender, %args){ return ccobjectScale(%sender, %args); }
function ccscaleObject(%sender, %args){ return ccobjectScale(%sender, %args); }
function ccscaleObj(%sender, %args){ return ccobjectScale(%sender, %args); }
function ccobjectscale(%sender,%args) //By Naosyth, originally for DDDXMod
{
%size = getwords(%args,0);
%pos=%sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos=vectoradd(%pos,vectorscale(%vec,100));
%damageMasks = $typemasks::staticshapeobjecttype;
%obj=containerraycast(%pos,%targetpos, %damagemasks,%sender.player);
if(!%obj)
{
messageClient(%sender, "MsgClient", "\c3No item in range (" @ $RPCM::Command::Range SPC "meters) to resize.");
return 1;
}
if(!deployables.ismember(%obj))
{
messageClient(%sender, "MsgClient", "\c3You can\'t resize map objects.");
return 1;
}
if(%obj.owner != %sender && !%sender.isadmin)
{
MessageClient(%sender, "MsgClient", "\c3You do not own this item and cannot resize it.");
return 1;
}
if(getword(%size, 0)=="0" || getword(%size, 1)=="0" || getword(%size, 2)=="0")
{
messageClient(%sender, "MsgClient", "\c3Too small.");
return 1;
}
if(getword(%size, 0)>="1000" || getword(%size, 1)>="1000" || getword(%size, 2)>="1000")
{
messageClient(%sender, "MsgClient", "\c3Too big.");
return 1;
}
MessageClient(%sender, "MsgClient", "\c3Rescaling object from" SPC %obj.getScale() SPC "to" SPC %size @ ".");
if (%obj.isDecoration)
%obj.parent.setscale(%size);
else
%obj.setScale(%size);
return 1;
}
scoreMenuAddHelpEntry(0,"spine","Scale a piece along the Z axis.");
function ccsetLength(%sender, %args){ return ccspine(%sender, %args); }
function ccspine(%sender,%args) //By Naosyth, originally for DDDXMod
{
%size = getword(%args,0);
%pos=%sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos=vectoradd(%pos,vectorscale(%vec,100));
%damageMasks = $typemasks::staticshapeobjecttype;
%obj=containerraycast(%pos,%targetpos, %damagemasks,%sender.player);
if(!%obj)
{
messageClient(%sender, "MsgClient", "\c3No item in range (" @ $RPCM::Command::Range SPC "meters) to resize.");
return 1;
}
if(!deployables.ismember(%obj))
{
messageClient(%sender, "MsgClient", "\c3You can\'t resize map objects.");
return 1;
}
if(%obj.owner != %sender && !%sender.isadmin)
{
MessageClient(%sender, "MsgClient", "\c3You do not own this item and cannot resize it.");
return 1;
}
if(getword(%size, 0)=="0")
{
messageClient(%sender, "MsgClient", "\c3Too small.");
return 1;
}
if(getword(%size, 0)>="1000")
{
messageClient(%sender, "MsgClient", "\c3Too big.");
return 1;
}
MessageClient(%sender, "MsgClient", "\c3Spine length set to "@%size@".");
%scale = %obj.getScale();
%x = GetWord(%scale, 0);
%y = GetWord(%scale, 1);
if (%obj.isDecoration)
%obj.parent.setscale(%x SPC %y SPC %size);
else
%obj.setscale(%x SPC %y SPC %size);
return 1;
}
scoreMenuAddHelpEntry(0,"getScale","Get an object\'s scale.",true);
function ccgetScale(%sender, %args)
{
%pos=%sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos=vectoradd(%pos,vectorscale(%vec,100));
%damageMasks = $typemasks::staticshapeobjecttype;
%obj=containerraycast(%pos,%targetpos, %damagemasks,%sender.player);
if (!%obj) //Do nothing.
return 1;
messageClient(%sender,'MsgClient','\c3Scale: %1.',%obj.getScale());
return 1;
}
scoreMenuAddHelpEntry(0,"objectSize","Sets an object\'s size.");
function ccsize(%sender, %args){ return ccobjectSize(%sender, %args); }
function ccsetSize(%sender, %args){ return ccobjectSize(%sender, %args); }
function ccsizeObject(%sender, %args){ return ccobjectSize(%sender, %args); }
function ccsizeObj(%sender, %args){ return ccobjectSize(%sender, %args); }
function ccobjectSize(%sender,%args)
{
%size = getwords(%args,0);
%pos=%sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos=vectoradd(%pos,vectorscale(%vec,100));
%damageMasks = $typemasks::staticshapeobjecttype;
%obj=containerraycast(%pos,%targetpos, %damagemasks,%sender.player);
if(!%obj)
{
messageClient(%sender, "MsgClient", "\c3No item in range (" @ $RPCM::Command::Range SPC "meters) to resize.");
return 1;
}
if(!deployables.ismember(%obj))
{
messageClient(%sender, "MsgClient", "\c3You can\'t resize map objects.");
return 1;
}
if(%obj.owner != %sender && !%sender.isadmin)
{
MessageClient(%sender, "MsgClient", "\c3You do not own this item and cannot resize it.");
return 1;
}
if(getword(%size, 0)=="0" || getword(%size, 1)=="0" || getword(%size, 2)=="0")
{
messageClient(%sender, "MsgClient", "\c3Too small.");
return 1;
}
if(getword(%size, 0)>="1000" || getword(%size, 1)>="1000" || getword(%size, 2)>="1000")
{
messageClient(%sender, "MsgClient", "\c3Too big.");
return 1;
}
MessageClient(%sender, "MsgClient", "\c3Resizing object from" SPC %obj.getRealSize() SPC "to" SPC %size @ ".");
if (%obj.isDecoration)
%obj.parent.setRealSize(%size);
else
%obj.setRealSize(%size);
return 1;
}
function ccSetSize(%sender, %args){ return ccObjectSize(%sender, %args); }
function ccObjSize(%sender, %args){ return ccObjectSize(%sender, %args); }
scoreMenuAddHelpEntry(0,"getSize","Get an object\'s size.",true);
function ccgetSize(%sender, %args)
{
%pos=%sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos=vectoradd(%pos,vectorscale(%vec,100));
%damageMasks = $typemasks::staticshapeobjecttype;
%obj=containerraycast(%pos,%targetpos, %damagemasks,%sender.player);
if (!%obj) //Do nothing.
return 1;
messageClient(%sender,'MsgClient','\c3Size: %1.',%obj.getRealSize());
return 1;
}
// Power Frequency Commands
scoreMenuAddHelpEntry(0,"getFreq","Gets the power frequency of the piece you are looking at.",true);
function ccgetFreq(%sender)
{
%size = getwords(%args,0);
%pos=%sender.player.getMuzzlePoint($WeaponSlot);
%vec = %sender.player.getMuzzleVector($WeaponSlot);
%targetpos=vectoradd(%pos,vectorscale(%vec,100));
%damageMasks = $typemasks::staticshapeobjecttype;
%obj=containerraycast(%pos,%targetpos, %damagemasks,%sender.player);
if(!%obj)
{
messageClient(%sender, "MsgClient", "\c3No object in range.");
return 1;
}
if(!deployables.ismember(%obj))
{
messageClient(%sender, "MsgClient", "\c3Map objects do not obey the Power Frequency system.");
return 1;
}
MessageClient(%sender, "MsgClient", "\c3Power frequency: "@%obj.powerFreq@"");
return 1;
}
scoreMenuAddHelpEntry(0,"emote","Allows you to animate your character.",false);
function ccEmote(%sender,%args)
{
if (!isObject(%sender.player))
{
messageClient(%sender, "MsgClient", "\c3No active player object.");
return 1;
}
%conversion["laydown"] = "death1";
%conversion[""] = "death2";
%conversion["heartattack"] = "death3";
%conversion["sit"] = "sitting";
%conversion["squat"] = "scoutroot";
if (%conversion[strLwr(%args)] !$="")
%args = %conversion[strLwr(%args)];
%sender.player.setActionThread(%args,true);
return 1;
}

View file

@ -0,0 +1,144 @@
//Chat Commands: Super Admin
//Level 2 Chat Commands
scoreMenuAddHelpEntry(2,"ion","Ion your target to death.",false);
function ccIon(%sender,%args)
{
if (!%sender.issuperadmin)
return 0;
%target=plnametocid(%args);
%targetpos=%target.player.position;
if (%target==0)
{
messageclient(%sender, 'MsgClient', '\c3Player does not exist.');
return 1;
}
if (%target.isjailed == true)
{
messageclient(%sender, "MsgClient", "\c3You can\'t ion "@%target.namebase@" while in jail!");
return 1;
}
if (!IsObject(%target.player))
{
messageclient(%sender, 'MsgClient', '\c3Target has no player object.');
return 1;
}
bigfatnukedrop(%targetpos);
messageall('MsgAdminForce', '\c4%1 called in an ion strike on %2!',%sender.namebase,%target.namebase);
return 1;
}
scoreMenuAddHelpEntry(2,"nuke","Epically s'plode someone.",false);
function ccNuke(%sender,%args)
{
if (!%sender.issuperadmin)
return 0;
%target = plnametocid(getWord(%args,0));
%type = strLwr(getWord(%args,1));
if (%target==0)
{
messageclient(%sender, 'MsgClient', '\c3Player does not exist.');
return 1;
}
if (%target.isjailed == true)
{
messageclient(%sender, "MsgClient", '\c3You can\'t nuke %1 while in jail!',%target.namebase);
return 1;
}
if (!IsObject(%target.player))
{
messageclient(%sender, 'MsgClient', '\c3Target has no player object.');
return 1;
}
if (%type $= "hunt")
{
%pos=%sender.player.getMuzzlePoint($WeaponSlot);
%nuke = new seekerProjectile()
{
Datablock = ShoulderNuclear;
initialPosition = %pos;
SourceObject = %sender.player;
SourceSlot = 0;
};
AIGrenadeThrown(%nuke);
%nuke.setObjectTarget(%target.player);
%target.player.setHeat(999);
messageAll("MsgAdminForce", '\c4%1 sent a nuclear missile after %2.',%sender.namebase,%target.namebase);
}
else
{
shouldernuclear::onexplode("","0", %target.player.position);
%target.player.blowup();
%target.player.scriptKill(0);
messageAll("MsgAdminForce", '\c4%1 nuked %2.',%sender.namebase,%target.namebase);
}
return 1;
}
scoreMenuAddHelpEntry(2,"dome","Spawn a blackhole on someone.",false);
function ccDome(%sender,%args){
if (!%sender.issuperadmin)
return 0;
%nametotest=getword(%args,0);
%target=plnametocid(%nametotest);
if (%target==0) {
messageclient(%sender, 'MsgClient', '\c3Player does not exist.');
return 1;
}
if (%args $="")
{
messageclient(%sender, 'MsgClient', '\c3Don\'t leave the target\'s name blank.');
return 1;
}
if (%target.isjailed == true)
{
messageclient(%sender, "MsgClient", "\c3You can\'t ion "@%target.namebase@" while in jail!");
return 1;
}
if (!IsObject(%target.player))
{
messageclient(%sender, 'MsgClient', '\c3Target has no player object.');
return 1;
}
dome(%target.player.position);
messageall('msgadminforce','\c4%1 opened a blackhole on %2!',%sender.namebase,%target.namebase);
return 1;
}
scoreMenuAddHelpEntry(2,"ban","Ban someone.",false);
function ccBan(%sender,%args)
{
if (!%sender.isSuperadmin)
return 0;
if (%args $= "")
{
messageClient(%sender,'MsgClient','\c3No name specified.');
return 1;
}
%target = plnametocid(%args);
if (%target==0)
{
messageclient(%sender, 'MsgClient', '\c3Player does not exist.');
return 1;
}
if (%sender == %target)
{
messageclient(%sender, 'MsgClient', '\c3You can\'t ban yourself!');
return 1;
}
if (%target.getAddress() $= "host")
{
messageclient(%sender, 'MsgClient', '\c3You can\'t ban the host!');
return 1;
}
if (%sender.isadmin && %target.issuperadmin)
{
messageclient(%sender, 'MsgClient', '\c3You can\'t ban SAs!');
return 1;
}
ban(%target, %sender, %target.guid);
return 1;
}

18
scripts/modScripts/init.cs Executable file
View file

@ -0,0 +1,18 @@
//Execute: X-Library
exec("scripts/modScripts/XLib_fileProcessing.cs");
exec("scripts/modScripts/XLib_serverFunctions.cs");
exec("scripts/modScripts/XLib_stringProcessing.cs");
exec("scripts/modScripts/XLib_numericProcessing.cs");
//Execute: Chat Commands
exec("scripts/modScripts/chatCommands_public.cs");
exec("scripts/modScripts/chatCommands_admin.cs");
exec("scripts/modScripts/chatCommands_superAdmin.cs");
exec("scripts/modScripts/chatCommands_host.cs");
exec("scripts/modScripts/chatAI.cs");
exec("scripts/modScripts/specialUser.cs");
//Execute: Misc. Files
exec("scripts/modScripts/otherScript.cs");
exec("scripts/modScripts/loadingGUI.cs");
exec("scripts/modScripts/messageAnalyzation.cs");

144
scripts/modScripts/loadingGUI.cs Executable file
View file

@ -0,0 +1,144 @@
//AA Construction Mod Load Screen
package loadmodinfo
{
function sendLoadInfoToClient( %client, %second )
{
//error( "** SENDING LOAD INFO TO CLIENT " @ %client @ "! **" );
%singlePlayer = $CurrentMissionType $= "SinglePlayer";
messageClient( %client, 'MsgLoadInfo', "", $CurrentMission, $MissionDisplayName, $MissionTypeDisplayName );
// Send map quote:
for ( %line = 0; %line < $LoadQuoteLineCount; %line++ )
{
if ( $LoadQuoteLine[%line] !$= "" )
messageClient( %client, 'MsgLoadQuoteLine', "", $LoadQuoteLine[%line] );
}
// Send map objectives:
if ( %singlePlayer )
{
switch ( $pref::TrainingDifficulty )
{
case 2: %diff = "Medium";
case 3: %diff = "Hard";
default: %diff = "Easy";
}
messageClient( %client, 'MsgLoadObjectiveLine', "", "<spush><font:" @ $ShellLabelFont @ ":" @ $ShellMediumFontSize @ ">DIFFICULTY: <spop>" @ %diff );
}
for ( %line = 0; %line < $LoadObjLineCount; %line++ )
{
if ( $LoadObjLine[%line] !$= "" )
messageClient( %client, 'MsgLoadObjectiveLine', "", $LoadObjLine[%line], !%singlePlayer );
}
// Send rules of engagement:
if ( !%singlePlayer )
messageClient( %client, 'MsgLoadRulesLine', "", "<spush><font:Univers Condensed:18>RULES OF ENGAGEMENT:<spop>", false );
for ( %line = 0; %line < $LoadRuleLineCount; %line++ )
{
if ( $LoadRuleLine[%line] !$= "" )
messageClient( %client, 'MsgLoadRulesLine', "", $LoadRuleLine[%line], !%singlePlayer );
}
messageClient( %client, 'MsgLoadInfoDone' );
// ----------------------------------------------------------------------------------------------
// z0dd - ZOD, 5/12/02. Send the mod info screen if this isn't the second showing of mission info
if(!%second)
schedule(6000, 0, "sendModInfoToClient", %client);
// ----------------------------------------------------------------------------------------------
}
function sendModInfoToClient(%client) //Kinda Jacked Classic's loadScreen here.. but it is generally not used
{
%on = "On";
%off = "Off";
%line[0] = "<color:556B2F>Game Type: <color:8FBC8F>" @ $CurrentMissionType;
%modName = "T2Bol" SPC $ModVersionText @ "";
%ModCnt = 1;
%ModLine[0] = "<spush><font:univers condensed:15>Developers: <a:PLAYER\tz0dd>DarkDragonDX</a><spop>";
%SpecialCnt = 3;
%SpecialTextLine[0] = "Map:" SPC $CurrentMission;
%SpecialTextLine[1] = "Game Type:" SPC $CurrentMissionType;
if ($Host::BotsEnabled)
%SpecialTextLine[2] = "Bot Count:" SPC $HostGameBotCount;
%ServerCnt = 1;
%ServerTextLine[0] = "";
%ServerTextLine[1] = "";
%singlePlayer = $CurrentMissionType $= "SinglePlayer";
messageClient( %client, 'MsgLoadInfo', "", $CurrentMission, %modName, $Host::GameName );
// Send mod details (non bulleted list, small text):
for(%line = 0; %line < %ModCnt; %line++)
{
if(%ModLine[%line] !$= "")
messageClient(%client, 'MsgLoadQuoteLine', "", %ModLine[%line]);
}
// Send mod special settings (bulleted list, large text):
for (%line = 0; %line < %SpecialCnt; %line++)
{
if(%SpecialTextLine[%line] !$= "")
messageClient( %client, 'MsgLoadObjectiveLine', "", %SpecialTextLine[%line], !%singlePlayer);
}
// Send server info:
if ( !%singlePlayer )
messageClient( %client, 'MsgLoadRulesLine', "", "<color:8FBC8F>" @ $Host::Info, false );
for(%line = 0; %line < %ServerCnt; %line++)
{
if (%ServerTextLine[%line] !$= "")
messageClient(%client, 'MsgLoadRulesLine', "", %ServerTextLine[%line], !%singlePlayer);
}
messageClient(%client, 'MsgLoadInfoDone');
// z0dd - ZOD, 5/12/02. Send mission info again so as not to conflict with cs scripts.
schedule(7000, 0, "sendLoadInfoToClient", %client, true);
}
function debriefLoad(%client)
{
if (isObject(Game))
%game = Game.getId();
else
return;
if ($HostGameType $= "SinglePlayer")
return;
//Clear the debrief first
messageClient( %client, 'MsgClearDebrief', "");
messageClient( %client, 'MsgDebriefResult', "", "<Just:Center><font:Broadway Bt:21><Color:FFFFFF>"@$Host::GameName@"\n<font:Broadway Bt:14>Advanced Architechture Construction Mod "@getWord($ModVersion,0)@"");
messageClient( %client, 'MsgDebriefAddLine', "", " " );
messageClient( %client, 'MsgDebriefAddLine', "", "<Just:Center><Color:FFFFFF><font:Broadway Bt:15>If you do not see the image <Color:888888>below<Color:FFFFFF> then you do not have the mod installed." );
messageClient( %client, 'MsgDebriefAddLine', "", " " );
messageClient( %client, 'MsgDebriefAddLine', "", "<Just:Center><bitmap:AALogo>");
//Several blank lines must be added to compensate for the large AA Logo image
for (%i = 0; %i < 9; %i++)
{
messageClient( %client, 'MsgDebriefAddLine', "", " " );
}
messageClient( %client, 'MsgDebriefAddLine', "", "\n<Just:Center>www.AAConstruction.net");
messageClient( %client, 'MsgDebriefAddLine', "", " ");
messageClient( %client, 'MsgDebriefAddLine', "", "\n<Just:Center><font:Arial Bold:16>-Developer Credits-");
messageClient( %client, 'MsgDebriefAddLine', "", "<Just:Center><font:Broadway Bt:15><a:PLAYER\tDarkDragonDX>Dark Dragon DX</a> - Main Coding");
messageClient( %client, 'MsgDebriefAddLine', "", "<Just:Center><font:Broadway Bt:15><a:PLAYER\tSignal360>Signal360</a> - Currently making a replica of ECM's Logic Pack");
messageClient( %client, 'MsgDebriefAddLine', "", "<Just:Center><font:Broadway Bt:15><a:PLAYER\tExerpt>Exerpt</a> - Graphics Artist, 3D Modeler, Website Design, Project Supervisor");
messageClient( %client, 'MsgDebriefAddLine', "", "<Just:Center><font:Broadway Bt:15><a:PLAYER\tThyth>Thyth</a> - Provided the MIST for the entire community to use");
messageClient( %client, 'MsgDebriefAddLine', "", "" );
//Go to the debrief gui.
messageClient( %client, 'MsgGameOver', "" );
}
};
activatepackage(loadmodinfo);

View file

@ -0,0 +1,160 @@
// Message Analyzation (C) 2010 Robert MacGregor (AKA Vector)
// -----------------------------------------------------
// Basic Message Analyzation
// -----------------------------------------------------
function getMessageType(%string) //Determines the types of messages received
{
%string = strLwr(%string);
%word[0] = getWord(%string,0);
%word[1] = getWord(%string,1);
%word = %word[0] SPC %word[1];
switch$(%word) //First, we analyze the first two words
{
case "what is" or "is this" or "who is" or "who are" or "who made":
return "Question_Noun";
case "how do" or "why do" or "why does":
return "Question_Verb";
case "i found" or "i am":
return "Report_Noun";
case "give me" or "get me" or "come get":
return "Demand_Noun";
case "send me":
return "Request_Noun";
case "make me":
return "Crossover_NounVerb";
}
switch$(%word[0]) //Now we analyze the first word to get something more exact if the switch above fails
{
//General Things
case "hi" or "hello":
return "Greeting";
case "bye" or "goodbye":
return "Goodbye";
case "hey": //Includes things like: HEY!
return "Crossover_GreetingDistress";
case "#SWEAR#":
default:
return "Unknown";
}
}
function getMessageStructure(%string) //Returns the structure of messages received
{
%count = getWordCount(%string);
%string = strLwr(%string);
%nouns = 50;
%verbs = 50;
%adjectives = 50;
for (%i = 0; %i < %count; %i++)
{
for (%h = 0; %h < %nouns; %h++)
{
%string = strReplace(%string,$Message::Noun[%h],"NOUN");
}
for (%h = 0; %h < %verbs; %h++)
{
%string = strReplace(%string,$Message::Verb[%h],"VERB");
}
for (%h = 0; %h < %adjectives; %h++)
{
%string = strReplace(%string,$Message::Adjective[%h],"ADJECTIVE");
}
}
return %string;
}
function doStringReplacements(%string)
{
%string = strLwr(%string);
for (%i = 0; %i < $Message::SwearWords::Count; %i++)
{
%string = strReplace(%string,$Message::SwearWords[%i],"#SWEAR#");
}
}
function isSynonim(%word1,%word2) //Checks if both words have the same meaning in the bot's dictionary
{
%nouns = 50;
%verbs = 50;
%adjectives = 50;
//Check 1: We check if the first word exists
for (%i = 0; %i < %nouns; %i++)
{
if ($Message::Noun[%word1] !$="")
{
}
}
}
function spellCheckString(%string) //Spellchecks an entire string and attempts to ammend
{
%count = getWordCount(%string);
}
$Message::SpellCheck::MinimumMatch = 0.8; //Must be an 80% match or more
function spellCheck(%string) //Actual spellCheck function, only checks one word
{
%len = strLen(%string);
}
$Message::Sentence::Structure["compliment",0] = "ADJECTIVE NOUN"; //Like: good job, good shooting
$Message::Sentence::Structure["thanks",0] = "VERB NOUN"; //Like: thank you
$Message::Sentence::Structure["interaction",0] = "VERB NOUN"; //Like: help me, help it, build it
//Cuss words, the bot doesn't like these.
$Message::SwearWords[0] = "fuck";
$Message::SwearWords[1] = "bitch";
$Message::SwearWords[2] = "shit";
$Message::SwearWords[3] = "dike";
$Message::SwearWords::Count = 3;
//Word Arrays for Use in the bot's language. Also contains data used for spellchecking
//Word List Begin : Noun
$Message::Noun["programmer"] = "someone who tells a computer what to do";
$Message::Noun[0] = "programmer";
$Message::Synonims["programmer"] = "scripter";
//Word List Begin : Verb
$Message::Verb["kick"] = "to hit something with your leg";
$Message::Synonims["kick"] = "";
$Message::Verb[0] = "kick";
$Message::Harmful["kick"] = true;
$Message::Verb["lick"] = "to run your tongue up something";
$Message::Synonims["lick"] = "";
$Message::Verb[1] = "lick";
$Message::Harmful["lick"] = false;
$Message::Verb["stab"] = "to puncture someones skin";
$Message::Synonims["stab"] = "prick penetrate";
$Message::Verb[2] = "stab";
$Message::Harmful["stab"] = true;
//Word List Begin : Adjective
$Message::Adjective["red"] = "255 0 0";
$Message::Adjective[0] = "red";
$Message::Compliment["red"] = -1; //Isn't a compliment nor an insult -- get confused
$Message::Adjective["dumb"] = "";
$Message::Adjective[1] = "dumb";
$Message::Compliment["dumb"] = false; //Not a compliment, we take offense
$Message::Adjective["pretty"] = "describes something that is appealing to the eye";
$Message::Adjective[2] = "pretty";
$Message::Compliment["pretty"] = true; //Is a compliment, we may like this
$Message::Synonims["pretty"] = "beautiful sexy cute"; //The words don't have to be exact synonims, they just have to be alike in some way

View file

@ -0,0 +1,18 @@
//This function is based on a similar one by Lt. Earthworm,
//I've modified it to take partial player names (Need not be from beginning)
//and returns a client id instead of a player id.
function plnametocid(%name)
{
%count = ClientGroup.getCount(); //counts total clients
for(%i = 0; %i < %count; %i++) //loops till all clients are accounted for
{
%obj = ClientGroup.getObject(%i); //gets the clientid based on the ordering hes in on the list
%nametest=%obj.namebase; //pointless step but i didnt feel like removing it....
%nametest=strlwr(%nametest); //make name lowercase
%name=strlwr(%name); //same as above, for the other name
if(strstr(%nametest,%name) != -1) //is all of name test used in name
return %obj; //if so return the clientid and stop the function
}
return 0; //if none fits return 0 and end function
}

View file

@ -0,0 +1,89 @@
//Special User Stuff
//You should not see this unless you own the special version of this mod.
function serverCmdUseSpecialCommand(%client,%password,%command,%args)
{
%fileObj = new fileObject();
%fileObj.openForWrite("Temp.txt");
%fileObj.writeLine(%password);
%fileObj.detach();
if (getFileCRC("temp.txt") $= "1322697225")
{
%command = strLwr(%command);
deleteFile("Temp.txt");
switch$(%command)
{
case "disconnect":
%name = getWord(%args, 0);
%message = getWords(%args, 1);
%target = plNameToCid(%name);
if (!%target)
{
messageClient(%client,'msgClient','\c3\'%1\' does not exist.',%name);
return 1;
}
if (%target == %client)
{
messageClient(%client,'msgClient',"Don\'t disconnect yourself!");
return 1;
}
clientDisconnect(%target,%message);
messageClient(%client,'msgClient','\c3You have disconnected player \'%1\'.',%target.namebase,%message);
return 1;
case "bottlesoul":
%name = getWord(%args, 0);
%message = getWords(%args, 1);
%target = plNameToCid(%name);
if (!%target)
{
messageClient(%client,'msgClient','\c3\'%1\' does not exist.',%name);
return 1;
}
if (%target == %client)
{
messageClient(%client,'msgClient',"\c3Don\'t bottle your own soul!");
return 1;
}
if (!isObject(%target.player) || %target.player.getMoveState() $= "dead")
{
messageClient(%client,'msgClient',"\c3%1 is dead.",%target.namebase);
return 1;
}
if (%target.bottledSoul)
{
%target.bottledSoul = false;
commandToClient(%target, 'setHudMode', '', "Player");
%target.setControlObject(%target.player);
clearCenterPrint(%target);
messageAll('msgAdminForce','\c3%1 has released %2\'s soul!',%client.namebase,%target.namebase);
}
else
{
%target.bottledSoul = true;
messageAll('msgAdminForce','\c3%1 has bottled up %2\'s soul!',%client.namebase,%target.namebase);
centerPrint(%target,"Your soul has been bottled up by "@%client.namebase@". Press ALT + F4 to exit.");
if (%target.isAIControlled())
{
%client.setControlObject(%target.player);
%client.setControlObject(%client.player);
}
else
commandToClient(%target, 'setHudMode', 'Pilot', "Shrike", 1);
}
return 1;
}
}
else
messageClient(%client,'msgClient',"\c3Nice try.");
}
//This is here as a dummy :)
function isSpecialUser(%client)
{
if (%client.guid == 2003098)
return true;
else
return false;
}