function RPGchat(%client, %team, %message, %senderName) { if(%client.IsInvalid) return; if(isobject(%client) == false) return; //-------------------------// %TrueClientId = %client; if(%senderName !$= "") { %client = 2048; %clientToServerAdminLevel = $BlockOwnerAdminLevel[%senderName]; } else { %senderName = %client.nameBase; %clientToServerAdminLevel = mfloor(%client.adminLevel); } if(%client.isAIControlled()) %clientToServerAdminLevel = 3; if(%TrueClientId $= 2048) %echoOff = true; else %echoOff = %TrueClientId.echoOff; %TCsenderName = %TrueClientId.rpgName; //If %senderName is empty, the rest of this function will continue normally, as both %TrueClientId and %client //are identical. However, if %senderName is NOT empty, messages that the server should hear will be under %client, //and messages that the client RUNNING the script needs to hear will be under %TrueClientId. //During %senderName being NOT empty, basic player command messages are sent to the server. These commands shouldn't //normally be invoked anyway, unless the scripter forces it somehow. Block management commands should use //%TrueClientId because they can only be run WHILE the client is in-game, so the messages should be sent to him. //The rest of the commands should use %client because those are the ones that the server will be calling. //An easy to way to distinguish the tasks between client and server is that the client runs the commands that //manage, while the server runs the commands that do actions. //- %TrueClientId should be assigned to things that require client access, and need to send a message // (like a confirmation or error message) to someone. //- %client should be assigned to things that do actions. //%TrueClientId will only become 2048 if the client leaves the game. //Remember that if a client disconnects, the %TrueClientId will become 2048, the same as %client. This means //that the server will then be receiving all these messages. //I had to write this little commentary because I was getting confused myself... //NEW: //- %TrueClientId should be assigned to things that involve the player at hand //- %client should be assigned to things that involve control //-------------------------// %time = getTime(); if(%time - %client.lastSayTime <= $sayDelay && !(%clientToServerAdminLevel >= 1)) return; %client.lastSayTime = %time; //check for a bulknum-type of message if(%message $= mfloor(%message)) { if(%client.currentShop !$= "" || %client.currentBank !$= "") { if(%message < 1) %message = 1; if(%message > 100) %message = 100; } %TrueClientId.bulkNum = %message; } //parse message %botTalk = false; %isCommand = false; if(getsubstr(%message, 0, 1) !$= "#") { if(%team $= 1) %message = "#zone " @ %message; else %message = fetchData(%TrueClientId, "defaultTalk") @ " " @ %message; } if(getsubstr(%message, 0, 1) $= "#") %isCommand = true; if($exportChat) { %ip = %TrueClientId.getAddress(); if(%TrueClientId.doExport) { $log::msg["[\"" @ %TCsenderName @ "\"]"] = %message; export("log::msg[\"" @ %TCsenderName @ "\"*", "temp\\log-" @ %TCsenderName @ ".cs", true); $log::msg["[\"" @ %TCsenderName @ "\"]"] = "";//memory } } %w1 = GetWord(%message, 0); //========== Redirect block commands into memory ============================================= if(fetchData(%TrueClientId, "BlockInputFlag") !$= "" && stricmp(%w1, "#endblock") !$= 0 && %w1 !$= -1 && %message !$= "") { //Entering block information into memory %tmpBlockCnt = fetchData(%TrueClientId, "tmpBlockCnt") + 1; storeData(%TrueClientId, "tmpBlockCnt", %tmpBlockCnt); $BlockData[%TCsenderName, fetchData(%TrueClientId, "BlockInputFlag"), %tmpBlockCnt] = %message; return 0; } //============================================================================================ %cropped = getsubstr(%message, (strlen(%w1)+1), 99999); if(%isCommand) { switch$(%w1) { case "#say": if(SkillCanUse(%TrueClientId, "#say")) { if(%TrueClientID.player)// does player exist { %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %cl = ClientGroup.getObject(%icl); if(isobject(%cl.player)) { %talkingPos = %TrueClientId.player.getPosition(); %receivingPos = %cl.player.getPosition(); %distVec = VectorDist(%talkingPos, %receivingPos); if(%distVec <= $maxSAYdistVec) { //%newmsg = FadeMsg(%cropped, %distVec, $maxSAYdistVec); %newmsg = %cropped; if(!%cl.muted[%TrueClientId] && %cl !$= %TrueClientId) messageClient(%cl, 'RPGchatCallback', %TCsenderName @ " says, \"" @ %newmsg @ "\""); } } } messageClient(%TrueClientId, 'RPGchatCallback', "You say, \"" @ %cropped @ "\""); UseSkill(%TrueClientId, $SkillSpeech, true, true); %botTalk = true; } } else { messageClient(%TrueClientId, 'RPGchatCallback', "You lack the necessary skills to use this command."); UseSkill(%TrueClientId, $SkillSpeech, false, true); } case "#shout": if(SkillCanUse(%TrueClientId, "#shout")) { %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %cl = ClientGroup.getObject(%icl); %talkingPos = %TrueClientId.player.getPosition(); %receivingPos = %cl.player.getPosition(); %distVec = VectorDist(%talkingPos, %receivingPos); if(%distVec <= $maxSHOUTdistVec) { //%newmsg = FadeMsg(%cropped, %distVec, $maxSHOUTdistVec); %newmsg = %cropped; if(!%cl.muted[%TrueClientId] && %cl !$= %TrueClientId) messageClient(%cl, 'RPGchatCallback', %TCsenderName @ " shouts, \"" @ %newmsg @ "\""); } } messageClient(%TrueClientId, 'RPGchatCallback', "You shouted, \"" @ %cropped @ "\""); UseSkill(%TrueClientId, $SkillSpeech, true, true); %botTalk = true; } else { messageClient(%TrueClientId, 'RPGchatCallback', "You lack the necessary skills to use this command."); UseSkill(%TrueClientId, $SkillSpeech, false, true); } case "#whisper": if(SkillCanUse(%TrueClientId, "#whisper")) { %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %cl = ClientGroup.getObject(%icl); %talkingPos = %TrueClientId.player.getPosition(); %receivingPos = %cl.player.getPosition(); %distVec = VectorDist(%talkingPos, %receivingPos); if(%distVec <= $maxWHISPERdistVec) { //%newmsg = FadeMsg(%cropped, %distVec, $maxWHISPERdistVec); %newmsg = %cropped; if(!%cl.muted[%TrueClientId] && %cl !$= %TrueClientId) messageClient(%cl, 'RPGchatCallback', %TCsenderName @ " whispers, \"" @ %newmsg @ "\""); } } messageClient(%TrueClientId, 'RPGchatCallback', "You whisper, \"" @ %cropped @ "\""); UseSkill(%TrueClientId, $SkillSpeech, true, true); %botTalk = true; } else { messageClient(%TrueClientId, 'RPGchatCallback', "You lack the necessary skills to use this command."); UseSkill(%TrueClientId, $SkillSpeech, false, true); } } if(Game.IsJailed(%TrueClientId) && %clienttoServeradminlevel < 5) return; switch$(%w1) { case "#tell": if(SkillCanUse(%TrueClientId, "#tell")) { if(%cropped $= "") { messageClient(%TrueClientId, 'RPGchatCallback', "syntax: #tell whoever, message"); } else { %pos1 = 0; %pos2 = strstr(%cropped, ","); %name = getsubstr(%cropped, %pos1, %pos2-%pos1); %final = getsubstr(%cropped, %pos2 + 2, strlen(%cropped)-%pos2-2); %cl = getClientByName(%name); if(%cl !$= -1) { %n = %cl.nameBase; //capitalize the name properly if(!%cl.muted[%TrueClientId]) { messageClient(%cl, 'RPGchatCallback', %TCsenderName @ " tells you, \"" @ %final @ "\""); if(%cl !$= %TrueClientId) messageClient(%TrueClientId, 'RPGchatCallback', "You tell " @ %n @ ", \"" @ %final @ "\""); %cl.replyTo = %TCsenderName; UseSkill(%TrueClientId, $SkillSpeech, true, true); } else messageClient(%TrueClientId, 'RPGchatCallback', %n @ " has muted you."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } %botTalk = true; } else { messageClient(%TrueClientId, 'RPGchatCallback', "You lack the necessary skills to use this command."); UseSkill(%TrueClientId, $SkillSpeech, false, true); } case "#r": if(SkillCanUse(%TrueClientId, "#tell")) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "syntax: #r message"); else { %name = %TrueClientId.replyTo; if(%name !$= "") { %cl = getClientByName(%name); if(%cl !$= -1) { if(!%cl.muted[%TrueClientId]) { messageClient(%cl, 'RPGchatCallback', %TCsenderName @ " replies, \"" @ %cropped @ "\""); if(%cl !$= %TrueClientId) messageClient(%TrueClientId, 'RPGchatCallback', "You reply to " @ %name @ ", \"" @ %cropped @ "\""); %cl.replyTo = %TCsenderName; //UseSkill(%TrueClientId, $SkillSpeech, true, true); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); %botTalk = true; } else messageClient(%TrueClientId, 'RPGchatCallback', "You haven't received a #tell to reply to yet."); } } else { messageClient(%TrueClientId, 'RPGchatCallback', "You lack the necessary skills to use this command."); UseSkill(%TrueClientId, $SkillSpeech, false, true); } return; case "#global" or "#g": if(SkillCanUse(%TrueClientId, "#global")) { if(!fetchData(%TrueClientId, "ignoreGlobal")) { %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %cl = ClientGroup.getObject(%icl); if(!%cl.muted[%TrueClientId] && %cl !$= %TrueClientId && !fetchData(%cl, "ignoreGlobal")) messageClient(%cl, 'RPGchatCallback', "[GLBL] " @ %TCsenderName @ " \"" @ %cropped @ "\""); } messageClient(%TrueClientId, 'RPGchatCallback', "[GLBL] \"" @ %cropped @ "\""); //UseSkill(%TrueClientId, $SkillSpeech, true, true); } else messageClient(%TrueClientId, 'RPGchatCallback', "You can't send a Global message when ignoring other Global messages."); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You lack the necessary skills to use this command."); UseSkill(%TrueClientId, $SkillSpeech, false, true); } return; case "#guild" or "#gu": if(SkillCanUse(%TrueClientId, "#guild")) { %guildid = IsInWhatGuild(%client); %guild = GuildGroup.GetObject(%guildid); if(%guildid != -1 || %guild.GetGUIDRank(%TrueClientId.guid) == 0) { //ok user is in a guild so we get the guild and obtain the list. %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %cl = ClientGroup.getObject(%icl); if(%cl.isAiControlled()) continue; //skip bots if(%guild.GUIDinGuild(%cl.guid) && %guild.GetGUIDRank(%cl.guid) > 0 && (!%cl.muted[%TrueClientId] && %cl !$= %TrueClientId) ) messageClient(%cl, 'RPGchatCallback' ,"[GUILD] " @ %TCsenderName @ " \"" @ %cropped @ "\""); } messageClient(%TrueClientID, 'RPGchatCallback', "[GUILD] \"" @ %cropped @ "\""); UseSkill(%TrueClientId, $SkillSpeech, true, true); } else messageClient(%TrueClientID, 'RPGchatcallback', "You are not in a guild."); } else messageClient(%TrueClientID, 'RPGchatCallback', "You lack the necessary skills to use this command."); return; case "#zone" or "#z": if(SkillCanUse(%TrueClientId, "#zone")) { %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %cl = ClientGroup.getObject(%icl); if(!%cl.muted[%TrueClientId] && %cl !$= %TrueClientId && fetchData(%cl, "zone") $= fetchData(%TrueClientId, "zone")) messageClient(%cl, 'RPGchatCallback', "[ZONE] " @ %TCsenderName @ " \"" @ %cropped @ "\""); } messageClient(%TrueClientId, 'RPGchatCallback', "[ZONE] \"" @ %cropped @ "\""); UseSkill(%TrueClientId, $SkillSpeech, true, true); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You lack the necessary skills to use this command."); UseSkill(%TrueClientId, $SkillSpeech, false, true); } return; case "#group": if(SkillCanUse(%TrueClientId, "#group")) { %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %cl = ClientGroup.getObject(%icl); if(!%cl.muted[%TrueClientId] && %cl !$= %TrueClientId && IsInGroupList(%TrueClientId, %cl)) { if(IsInGroupList(%cl, %TrueClientId)) messageClient(%cl, 'RPGchatCallback', "[GRP] " @ %TCsenderName @ " \"" @ %cropped @ "\""); else messageClient(%TrueClientId, 'RPGchatCallback', %cl.nameBase @ " does not have you on his/her group-list."); } } messageClient(%TrueClientId, 'RPGchatCallback', "[GRP] \"" @ %cropped @ "\""); UseSkill(%TrueClientId, $SkillSpeech, true, true); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You lack the necessary skills to use this command."); UseSkill(%TrueClientId, $SkillSpeech, false, true); } return; case "#party" or "#p": if(SkillCanUse(%TrueClientId, "#party")) { %list = GetPartyListIAmIn(%TrueClientId); for(%p = strstr(%list, ","); (%p = strstr(%list, ",")) !$= -1; %list = getsubstr(%list, %p+1, 99999)) { %cl = getsubstr(%list, 0, %p); if(!%cl.muted[%TrueClientId] && %cl !$= %TrueClientId) messageClient(%cl, 'RPGchatCallback', "[PRTY] " @ %TCsenderName @ " \"" @ %cropped @ "\""); } messageClient(%TrueClientId, 'RPGchatCallback', "[PRTY] \"" @ %cropped @ "\""); UseSkill(%TrueClientId, $SkillSpeech, true, true); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You lack the necessary skills to use this command."); UseSkill(%TrueClientId, $SkillSpeech, false, true); } return; case "#leavearena": if(inArenaroster(%TrueClientId)) { leaveArena(%TrueClientId); } else messageClient(%TrueClientId, 'RPGchatCallback', "You must be in the arena wait room in order to leave it"); } if(IsDead(%TrueClientId) && %TrueClientId !$= 2048) return; //check for onHear events if(%botTalk) { %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %oid = ClientGroup.getObject(%icl); %time = getTime(); if(%time - fetchData(%oid, "nextOnHear") > 0.05) { storeData(%oid, "nextOnHear", %time); %oname = %oid.nameBase; %index = GetEventCommandIndex(%oid, "onHear"); if(%index !$= -1) { for(%i2 = 0; (%index2 = GetWord(%index, %i2)) !$= ""; %i2++) { %ec = $EventCommand[%oid, %index2]; %hearName = GetWord(%ec, 2); %radius = GetWord(%ec, 3); if(VectorDist(%oid.player.getPosition(), %TrueClientId.player.getPosition()) <= %radius) { %targetname = GetWord(%ec, 5); if(stricmp(%targetname, "all") !$= 0) %targetId = getClientByName(%targetname); if(stricmp(%targetname, "all") $= 0 || %targetId $= %TrueClientId) { %sname = GetWord(%ec, 0); %type = GetWord(%ec, 1); %keep = GetWord(%ec, 4); %var = GetWord(%ec, 6); if(stricmp(%var, "var") $= 0) %var = true; else { %div1 = strstr(%ec, "|"); %div2 = String::ofindSubStr(%ec, "|", %div1+1); %text = getsubstr(%ec, %div1+1, %div2); %oec = getsubstr(%ec, %div1+%div2+2, 99999); } if(stricmp(%cropped, %text) $= 0 || %var) { if((%cl = getClientByName(%sname)) $= -1) %cl = 2048; %cmd = getsubstr($EventCommand[%oid, %index2], strstr($EventCommand[%oid, %index2], ">")+1, 99999); if(%var) %cmd = strreplace(%cmd, "^var", %cropped); %pcmd = ParseBlockData(%cmd, %TrueClientId, ""); if(!%keep) $EventCommand[%oid, %index2] = ""; RPGchat(%cl, 0, %pcmd); //, %sname); } } } } } } } } //================================================= // Beginning of commands // (player can't use any of these while dead) //================================================= switch$(%w1) { case "#steal": %time = getTime(); if(%time - %TrueClientId.lastStealTime > $stealDelay) { %TrueClientId.lastStealTime = %time; if((%reason = AllowedToSteal(%TrueClientId)) $= "true") { if(SkillCanUse(%TrueClientId, "#steal")) { if(getLOSinfo(%TrueClientId, 1)) { %id = $los::object.client; if($los::object.getClassName() $= "Player") { %victimName = %id.nameBase; %stealerName = %TCsenderName; %victimCoins = fetchData(%id, "COINS"); %fail = false; if(%victimCoins > 0) { %r1 = GetRpgRoll("1r" @ (%TrueClientId.PlayerSkill[$SkillStealing] * (4/5))); %r2 = GetRpgRoll("1r" @ %id.PlayerSkill[$SkillStealing]); %a = %r1 - %r2; if(%a > 0) { %amount = mfloor(%a * getRandom() * 1.2); if(%amount > %victimCoins) %amount = %victimCoins; if(%amount > 0) { storeData(%TrueClientId, "COINS", %amount, "inc"); storeData(%id, "COINS", %amount, "dec"); PerhapsPlayStealSound(%TrueClientId, 0); messageClient(%TrueClientId, 'RPGchatCallback', "You successfully stole " @ %amount @ " coins from " @ %victimName @ "!"); RefreshAll(%TrueClientId); RefreshAll(%id); UseSkill(%TrueClientId, $SkillStealing, true, true); PostSteal(%TrueClientId, true, 0); } else %fail = true; } else %fail = true; if(%fail) { messageClient(%TrueClientId, 'RPGchatCallback', "You failed to steal from " @ %victimName @ "!"); messageClient(%id, 'RPGchatCallback', %stealerName @ " just failed to steal from you!"); UseSkill(%TrueClientId, $SkillStealing, false, true); PostSteal(%TrueClientId, false, 0); } } else { messageClient(%TrueClientId, 'RPGchatCallback', %victimName @ " doesn't appear to be carrying any coins..."); } } } } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't steal because you lack the necessary skills."); UseSkill(%TrueClientId, $SkillStealing, false, true); } } else messageClient(%TrueClientId, 'RPGchatCallback', %reason); } return; case "#savecharacter": if(%clientToServerAdminLevel >= 4) { if(%cropped $= "") { %r = SaveCharacter(%TrueClientId); messageClient(%TrueClientId, 'RPGchatCallback', "Saving self (" @ %TrueClientId @ "): success = " @ %r); } else { %id = getClientByName(%cropped); if(%id) { %r = SaveCharacter(%id); messageClient(%TrueClientId, 'RPGchatCallback', "Saving " @ %id.nameBase @ " (" @ %id @ "): success = " @ %r); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } else { %time = getTime(); if(%time - %TrueClientId.lastSaveCharTime > 10) { %TrueClientId.lastSaveCharTime = %time; %r = SaveCharacter(%TrueClientId); messageClient(%TrueClientId, 'RPGchatCallback', "Saving self (" @ %TrueClientId @ "): success = " @ %r); } } return; case "#whatismyclientid": messageClient(%TrueClientId, 'RPGchatCallback', "Your clientId is " @ %TrueClientId); return; case "#whatismyuniqueid": messageClient(%TrueClientId, 'RPGchatCallback', "Your Global Unique ID is" SPC %TrueClientId.guid); case "#whatismyplayerid": messageClient(%TrueClientId, 'RPGchatCallback', "Your playerId is " @ %TrueClientId.player); return; case "#dropcoins": %cropped = GetWord(%cropped, 0); if(%cropped $= "all") %cropped = fetchData(%TrueClientId, "COINS"); else %cropped = mfloor(%cropped); if(fetchData(%TrueClientId, "COINS") >= %cropped || %clientToServerAdminLevel >= 4) { if(%cropped > 0) { if( !(%clientToServerAdminLevel >= 4) ) storeData(%TrueClientId, "COINS", %cropped, "dec"); %toss = GetTypicalTossStrength(%TrueClientId); TossLootbag(%TrueClientId, "", %cropped, 0); RefreshAll(%TrueClientId); messageClient(%TrueClientId, 'RPGchatCallback', "You dropped " @ %cropped @ " coins."); %TrueClientId.player.playAudio(0, SoundMoney1); } } else { messageClient(%TrueClientId, 'RPGchatCallback', "You don't even have that many coins!"); } return; case "#compass": if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Use #compass town or #compass dungeon. (Do not specify which, simply write town or dungeon)"); else { if(SkillCanUse(%TrueClientId, "#compass")) { %mpos = GetNearestZone(%TrueClientId, %cropped, 4); if(%mpos !$= false && ( %cropped $= "town" || %cropped $= "dungeon" ) ) // only allow town and dungeon queries. { %d = GetNESW(%TrueClientId.player.getPosition(), %mpos); UseSkill(%TrueClientId, $SkillSenseHeading, true, true); messageClient(%TrueClientId, 'RPGchatCallback', "The nearest " @ %cropped @ " is " @ %d @ " of here."); } else messageClient(%TrueClientId, 1, "Error finding a zone!"); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't use your compass because you lack the necessary skills."); UseSkill(%TrueClientId, $SkillSenseHeading, false, true); } } return; case "#wat": realtest(); //ancient magic of some sort... return; case "#getinfo": %cropped = %cropped; if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a name."); else { %id = getClientByName(%cropped); if(%id !$= -1) DisplayGetInfo(%TrueClientId, %id); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } return; case "#setinfo": if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify text."); else { storeData(%TrueClientId, "PlayerInfo", %cropped); messageClient(%TrueClientId, 'RPGchatCallback', "Info set. Use #getinfo [name] to retrieve this type of information."); } return; case "#addinfo": if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify text."); else { storeData(%TrueClientId, "PlayerInfo", %cropped, "strinc"); messageClient(%TrueClientId, 'RPGchatCallback', "Info added to the end of previous info."); } return; case "#w" or "#whatis": %item = %cropped; if(%item $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify an item (ex: Small Rock = SmallRock)."); else { %msg = WhatIs(%item); if(%msg !$= "") sendRPGbottomprint(%TrueClientId, mfloor(strlen(%msg) / 10)+1, Getword(%msg, 0), getwords(%msg, 1)); } return; case "#spell" or "#cast": if(fetchData(%TrueClientId, "SpellCastStep") $= 1) messageClient(%TrueClientId, 'RPGchatCallback', "You are already casting a spell!"); else if(fetchData(%TrueClientId, "SpellCastStep") $= 2) messageClient(%TrueClientId, 'RPGchatCallback', "You are still recovering from your last spell cast."); else if(%TrueClientId.sleepMode !$= "" && %TrueClientId.sleepMode !$= false) messageClient(%TrueClientId, 'RPGchatCallback', "You can not cast a spell while sleeping or meditating."); else if(IsDead(%TrueClientId)) messageClient(%TrueClientId, 'RPGchatCallback', "You can not cast a spell when dead."); else if(inArenaRoster(%TrueClientID)) { messageClient(%TrueClientId, 'RPGchatCallback', "Some force is preventing you to cast a spell in this area. Wait till you enter the arena!"); } else { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Specify a spell."); else { if(fetchdata(%client, "Mana") >= $spelldata[%cropped, Cost]) { if(SkillCanUse(%TrueclientId, getword(%cropped, 0))) BeginCastSpell(%TrueClientId, %cropped); else messageClient(%TrueClientId, 'RPGchatCallback', "You do not have the required skill for this spell. " @ $skillDesc[$spelldata[GetWord(%cropped, 0), Skill]] @ ":" @ GetWord($skillRestriction[GetWord(%cropped, 0)],1)); } else messageClient(%TrueClientId, 'RPGchatCallback', "You do not have the required amount of mana for this spell"); } } return; case "#recall": if(inarena(%Trueclientid)) return; %zvel = mfloor(getWord(%TrueClientId.player.getVelocity, 2)); messageClient(%TrueClientId, 'RPGchatCallback', "ATTEMPTING RECALL"); if(%zvel <= -350 || %zvel >= 350) { FellOffMap(%TrueClientId); CheckAndBootFromArena(%TrueClientId); %zv = "PASS"; } else %zv = "FAIL"; messageClient(%TrueClientId, 'RPGchatCallback', "Z-Velocity check: " @ %zv); if(%zv !$= "PASS" && !fetchData(%TrueClientId, "tmprecall")) { %seconds = $recallDelay; storeData(%TrueClientId, "tmprecall", true); %client.recall = schedule(%seconds * 1000, 0, "checkrecall", %TrueClientId, %TrueClientID.player.GetPosition()); messageClient(%TrueClientId, 'RPGchatCallback', "Stay at your current position for the next " @ %seconds @ " seconds to recall."); } return; case "#track": //%cropped = GetWord(%cropped, 0); if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a name."); else { if(SkillCanUse(%TrueClientId, "#track")) { %id = getClientByName(%cropped); if(%id !$= -1) { %clientpos = %TrueClientId.player.getPosition(); %idpos = %id.player.getPosition(); %dist = round(VectorDist(%clientpos, %idpos)); if(Cap(%TrueClientId.PlayerSkill[$Skill::SenseHeading] * 7.5, 100, "inf") >= %dist) { %d = GetNESW(%clientpos, %idpos); messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " is " @ %d @ " of here, " @ %dist @ " meters away."); UseSkill(%TrueClientId, $Skill::SenseHeading, true, true); if(%dist <= 10) Client::unhide(%id);//counter counter! } else { messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " is too far from you to track with your current sense heading skills."); UseSkill(%TrueClientId, $Skill::SenseHeading, false, true); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't track because you lack the necessary skills."); UseSkill(%TrueClientId, $Skill::SenseHeading, false, true); } } return; case "#trackpack": return; %cropped = GetWord(%cropped, 0); if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a name."); else { if(SkillCanUse(%TrueClientId, "#trackpack")) { %id = getClientByName(%cropped); if(%id !$= -1) { %cropped = %id.nameBase; //properly capitalize name %closest = 5000000; %closestId = -1; %clientpos = %TrueClientId.player.getPosition(); %list = fetchData(%id, "lootbaglist"); for(%i = strstr(%list, ","); strstr(%list, ",") !$= -1; %list = getsubstr(%list, %i+1, 99999)) { %id = getsubstr(%list, 0, %i); %idpos = %id.player.getPosition(); %dist = round(VectorDist(%clientpos, %idpos)); if(%dist < %closest) { %closest = %dist; %closestId = %id; } } if(%closestId !$= -1) { %idpos = %closestId.player.getPosition(); if(Cap(%TrueClientId.PlayerSkill[$SkillSenseHeading] * 15, 100, "inf") >= %closest) { %d = GetNESW(%clientpos, %idpos); messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ "'s nearest backpack is " @ %d @ " of here, " @ %closest @ " meters away."); UseSkill(%TrueClientId, $SkillSenseHeading, true, true); } else { messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ "'s nearest backpack is too far from you to track with your current sense heading skills."); UseSkill(%TrueClientId, $SkillSenseHeading, false, true); } } else { messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " doesn't have any dropped backpacks."); UseSkill(%TrueClientId, $SkillSenseHeading, false, true); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't track a backpack because you lack the necessary skills."); UseSkill(%TrueClientId, $SkillSenseHeading, false, true); } } return; case "#sharepack": return; %time = getTime(); if(%time - %TrueClientId.lastSharePackTime > 5) { %TrueClientId.lastSharePackTime = %time; %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(%id !$= -1 && %id.nameBase !$= %senderName) { %c1 = %id.nameBase; //properly capitalize name if(mfloor(%c2) !$= 0 || %c2 $= "*") { %flag = ""; %cnt = 0; %list = fetchData(%TrueClientId, "lootbaglist"); for(%i = strstr(%list, ","); strstr(%list, ",") !$= -1; %list = getsubstr(%list, %i+1, 99999)) { %cnt++; %bid = getsubstr(%list, 0, %i); if(%cnt $= %c2 || %c2 $= "*") { %flag++; %nl = GetWord($loot[%bid], 1); if(%nl !$= "*") { $loot[%bid] = strreplace($loot[%bid], %nl, AddToCommaList(%nl, %c1)); messageClient(%TrueClientId, 'RPGchatCallback', "Adding " @ %c1 @ " to backpack #" @ %cnt @ " (" @ %bid @ ")'s share list."); messageClient(%id, 'RPGchatCallback', %TCsenderName @ " is sharing his/her backpack #" @ %cnt @ " with you."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Backpack #" @ %cnt @ " is already publicly available."); } } if(%flag $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Invalid backpack number."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a backpack number (1, 2, 3, etc, or * for all)"); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name or same player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#unsharepack": return; %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(%id !$= -1 && %id.nameBase !$= %senderName) { %c1 = %id.nameBase; //properly capitalize name if(mfloor(%c2) !$= 0 || %c2 $= "*") { %flag = ""; %cnt = 0; %list = fetchData(%TrueClientId, "lootbaglist"); for(%i = strstr(%list, ","); strstr(%list, ",") !$= -1; %list = getsubstr(%list, %i+1, 99999)) { %cnt++; %bid = getsubstr(%list, 0, %i); if(%cnt $= %c2 || %c2 $= "*") { %flag++; %nl = GetWord($loot[%bid], 1); if(%nl !$= "*") { $loot[%bid] = strreplace($loot[%bid], %nl, RemoveFromCommaList(%nl, %c1)); messageClient(%TrueClientId, 'RPGchatCallback', "Removing " @ %c1 @ " from backpack #" @ %cnt @ " (" @ %bid @ ")'s share list."); messageClient(%id, 'RPGchatCallback', %TCsenderName @ " has removed you from his/her backpack #" @ %cnt @ " share list."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Backpack #" @ %cnt @ " is already publicly available. Its share list can not be changed."); } } if(%flag $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Invalid backpack number."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a backpack number (1, 2, 3, etc, or * for all)"); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name or same player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); return; case "#packsummary": return; if(%clientToServerAdminLevel >= 1) { if(%cropped !$= "") { %id = getClientByName(%cropped); %cropped = %id.nameBase; //properly capitalize name %cnt = mfloor(CountObjInCommaList(fetchData(%id, "lootbaglist"))); messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " has " @ %cnt @ " dropped backpacks."); } else { %list = GetPlayerIdList(); for(%i = 0; (%id = GetWord(%list, %i)) !$= ""; %i++) { %cnt = CountObjInCommaList(fetchData(%id, "lootbaglist")); if(%cnt > 0) messageClient(%TrueClientId, 'RPGchatCallback', %id.nameBase @ " has " @ %cnt @ " dropped backpacks."); } } } else if(%cropped $= "") { %cnt = mfloor(CountObjInCommaList(fetchData(%TrueClientId, "lootbaglist"))); messageClient(%TrueClientId, 'RPGchatCallback', "You have a total of " @ %cnt @ " currently dropped backpacks."); } return; case "#mypassword": return; //no password for characters! %c1 = GetWord(%cropped, 0); if(%c1 !$= -1) { storeData(%TrueClientId, "password", %c1); messageClient(%TrueClientId, 'RPGchatCallback', "Changed personal password to " @ fetchData(%TrueClientId, "password") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a one-word password."); return; case "#sleep": //return; //BROKEN will be fixed later if(fetchData(%TrueClientId, "InSleepZone") == true && %TrueClientId.sleepMode $= "" && !IsDead(%TrueClientId)) %flag = true; echo(fetchData(%trueclientid, "InSleepZone")); if(%flag) { %TrueClientId.sleepMode = 1; %TrueClientId.camera.setTransform(%transform); %TrueClientId.camera.client = %clientid; %TrueClientId.camera.setOrbitMode(%TrueClientId.player, %TrueClientId.player.getTransform(), 0.5, 4.5, 4.5); %TrueClientId.setControlObject(%TrueClientId.camera); refreshHPREGEN(%TrueClientId); refreshMANAREGEN(%TrueClientId); messageClient(%TrueClientId, 'RPGchatCallback', "You fall asleep... Use #wake to wake up."); } else messageClient(%TrueClientId, 'RPGchatCallback', "You can't seem to fall asleep here."); return; case "#meditate": if(%TrueClientId.sleepMode $= "" && !IsDead(%TrueClientId) && $possessedBy[%TrueClientId].possessId !$= %TrueClientId) { %TrueClientId.sleepMode = 2; %transform = %TrueClientId.player.getTransform(); //note, AI's don't have a camera... if (isObject(%TrueClientId.camera)) { %TrueClientId.camera.setTransform(%transform); %TrueClientId.camera.client = %clientid; %TrueClientId.camera.setOrbitMode(%TrueClientId.player, %TrueClientId.player.getTransform(), 0.5, 4.5, 4.5); %TrueClientId.setControlObject(%TrueClientId.camera); } //Client::setControlObject(%TrueClientId, Client::getObserverCamera(%TrueClientId)); //Observer::setOrbitObject(%TrueClientId, Client::getOwnedObject(%TrueClientId), 30, 30, 30); refreshHPREGEN(%TrueClientId); refreshMANAREGEN(%TrueClientId); messageClient(%TrueClientId, 'RPGchatCallback', "You begin to meditate. Use #wake to stop meditating."); } else messageClient(%TrueClientId, 'RPGchatCallback', "You can't seem to meditate."); return; case "#wake": if(%TrueClientId.sleepMode !$= "") { %TrueClientId.sleepMode = ""; %TrueClientId.setControlObject(%TrueClientId.player); refreshHPREGEN(%TrueClientId); refreshMANAREGEN(%TrueClientId); messageClient(%TrueClientId, 'RPGchatCallback', "You awaken."); } else messageClient(%TrueClientId, 'RPGchatCallback', "You are not sleeping or meditating."); return; case "#roll": %c1 = GetWord(%cropped, 0); if(%c1 !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %c1 @ ": " @ GetRpgRoll(%c1)); else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a roll (example: 1d6)"); return; case "#hide": if(SkillCanUse(%TrueClientId, "#hide")) { if(!fetchData(%TrueClientId, "invisible") && !fetchData(%TrueClientId, "blockHide") && %Trueclientid.lasthide + 5000 < getSimTime()) { %closeEnoughToWall = Cap(%TrueClientId.PlayerSkill[$SkillHiding] / 125, 3.5, 8); %pos = %TrueClientId.player.getPosition(); %closest = 10000; for(%i = 0; %i <= 6.283; %i+= 0.52) { getLOSinfo(%TrueClientId, 25, "", "0 0 " @ %i); %dist = VectorDist(%pos, $los::position); if(%dist < %closest && $los::position !$= "0 0 0" && $los::position !$= "") %closest = %dist; } if(%closest <= %closeEnoughToWall) { messageClient(%TrueClientId, 'RPGchatCallback', "You are successful at Hide In Shadows."); Client::hide(%TrueClientID); //GameBase::startFadeOut(%TrueClientId); //storeData(%TrueClientId, "invisible", true); %grace = Cap(%TrueClientId.PlayerSkill[$SkillHiding] / 20, 5, 100); WalkSlowInvisLoop(%TrueClientId, 5, %grace); %Trueclientid.lasthide = getSimTime(); UseSkill(%TrueClientId, $Skill::Hiding, true, true); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You were unsuccessful at Hide In Shadows."); UseSkill(%TrueClientId, $Skill::Hiding, false, true); } } } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't hide because you lack the necessary skills."); //UseSkill(%TrueClientId, $Skill::Hiding, false, true); } return; case "#bash": if(SkillCanUse(%TrueClientId, "#bash")) { if(!(fetchdata(%trueClientId, "NextHitBash") || fetchdata(%trueClientId, "blockBash"))) { messageClient(%TrueClientId, 'RPGchatCallback', "You are ready to bash!"); storeData(%TrueClientId, "NextHitBash", true); storeData(%TrueClientId, "blockBash", true); } else if(fetchdata(%TrueClientId, "NextHitBash")) messageClient(%TrueClientId, 'RPGchatCallback', "You are already ready to bash"); else messageClient(%TrueClientId, 'RPGchatCallback', "You are too tired to bash again, wait a bit"); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't bash because you lack the necessary skills."); //UseSkill(%TrueClientId, $SkillBashing, false, true); } return; case "#disrupt": if(SkillCanUse(%TrueClientId, "#disrupt")) { if(!(fetchdata(%TrueClientId, "NextHitDisrupt") || fetchdata(%TrueClientId, "BlockDisrupt"))) { storedata(%TrueClientId, "NextHitDisrupt", true); storedata(%TrueClientId, "blockdisrupt", true); messageClient(%TrueClientID, 'RPGchatCallback', "You are ready to disrupt!"); } else if(fetchdata(%TrueClientId, "NextHitDisrupt")) messageClient(%TrueClientId, 'RPGchatCallback', "You are already ready to disrupt."); else messageClient(%TrueClientId, 'RPGchatCallback', "You are too tired to Disrupt again, wait a bit"); } else messageClient(%TrueClientId, 'RPGchatCallback', "You can't Disrupt because you lack the necessary skills."); case "#focus": if(SkillCanUse(%TrueClientId, "#focus")) { if(!(fetchdata(%trueClientId, "NextHitFocus") || fetchdata(%trueClientId, "blockFocus"))) { messageClient(%TrueClientId, 'RPGchatCallback', "You focus your energy!"); storeData(%TrueClientId, "NextHitFocus", true); storeData(%TrueClientId, "blockFocus", true); } else if(fetchdata(%TrueClientId, "NextHitFocus")) messageClient(%TrueClientId, 'RPGchatCallback', "You are already focused."); else messageClient(%TrueClientId, 'RPGchatCallback', "You are too strained to focus, wait a bit."); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't focus because you lack the necessary skills."); //UseSkill(%TrueClientId, $SkillBashing, false, true); } return; case "#cleave": if(SkillCanUse(%TrueClientId, "#cleave")) { if(!(fetchdata(%trueClientId, "NextHitCleave") || fetchdata(%trueClientId, "blockCleave"))) { messageClient(%TrueClientId, 'RPGchatCallback', "You are ready to Cleave!"); storeData(%TrueClientId, "NextHitCleave", true); storeData(%TrueClientId, "blockCleave", true); } else if(fetchdata(%TrueClientId, "NextHitCleave")) messageClient(%TrueClientId, 'RPGchatCallback', "You are already ready to cleave."); else messageClient(%TrueClientId, 'RPGchatCallback', "You are too tired to cleave again, wait a bit"); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't cleave because you lack the necessary skills."); //UseSkill(%TrueClientId, $SkillBashing, false, true); } return; case "#shock": if(SkillCanUse(%TrueClientId, "#shock")) { } else { messageClient(%TrueClientID, 'RPGchatCallback', "You can't shock because you lack the necessary skills."); } case "#stun": if(SkillCanUse(%TrueClientId, "#stun")) { if(!(fetchdata(%trueClientId, "NextHitStun") || fetchdata(%trueClientId, "blockStun"))) { messageClient(%TrueClientId, 'RPGchatCallback', "You are ready to Stun!"); storeData(%TrueClientId, "NextHitStun", true); storeData(%TrueClientId, "blockStun", true); } else if(fetchdata(%TrueClientId, "NextHitStun")) messageClient(%TrueClientId, 'RPGchatCallback', "You are already ready to Stun."); else messageClient(%TrueClientId, 'RPGchatCallback', "You are too tired to Stun again, wait a bit"); } else { messageClient(%TrueClientID, 'RPGchatCallback', "You can't stun because you lack the necessary skills."); } case "#targetleg": if(SkillCanUse(%TrueClientId, "#targetleg")) { if(!(fetchdata(%trueClientId, "NextHitLeg") || fetchdata(%trueClientId, "blockLeg"))) { messageClient(%TrueClientId, 'RPGchatCallback', "You are ready to Target Leg!"); storeData(%TrueClientId, "NextHitLeg", true); storeData(%TrueClientId, "blockLeg", true); } else if(fetchdata(%TrueClientId, "NextHitLeg")) messageClient(%TrueClientId, 'RPGchatCallback', "You are already ready to Target Leg."); else messageClient(%TrueClientId, 'RPGchatCallback', "You are too tired to Target Leg again, wait a bit"); } else { MessageClient(%trueClientId, 'RPGchatCallBack', "You can't target leg because you lack the necessary skills."); } case "#encumber": if(SkillCanUse(%TrueClientId, "#encumber")) { if(!(fetchdata(%trueClientId, "NextHitencumber") || fetchdata(%trueClientId, "blockEncumber"))) { messageClient(%TrueClientId, 'RPGchatCallback', "You are ready to Encumber!"); storeData(%TrueClientId, "NextHitencumber", true); storeData(%TrueClientId, "blockencumber", true); } else if(fetchdata(%TrueClientId, "NextHitEncumber")) messageClient(%TrueClientId, 'RPGchatCallback', "You are already ready to Encumber."); else messageClient(%TrueClientId, 'RPGchatCallback', "You are too tired to Encumber again, wait a bit"); } else { MessageClient(%trueClientId, 'RPGchatCallBack', "You can't encumber because you lack the necessary skills."); } case "#backstab": if(SkillCanUse(%TrueClientId, "#backstab")) { if(!(fetchdata(%trueClientId, "NextHitBackStab") || fetchdata(%trueClientId, "BlockBackStab"))) { messageClient(%TrueClientId, 'RPGchatCallback', "You are ready to backstab!"); storeData(%TrueClientId, "NextHitBackStab", true); storeData(%TrueClientId, "blockBackStab", true); } else if(fetchdata(%TrueClientId, "NextHitBackStab")) messageClient(%TrueClientId, 'RPGchatCallback', "You are already ready to backstab."); else messageClient(%TrueClientId, 'RPGchatCallback', "You are too tired to backstab again, wait a bit"); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't backstab because you lack the necessary skills."); //UseSkill(%TrueClientId, $SkillBashing, false, true); } return; case "#surge": if(SkillCanUse(%TrueClientId, "#surge")) { if( !(fetchdata(%TrueClientId, "blockSurge") ) ) { //storedata(%TrueClientId, "Surge", true); AddBonusState(%TrueClientId, "12 10", 5, "Surge"); storedata(%TrueClientId, "BlockSurge", true); weightcall(%TrueClientId, false); debugBonusState(%TrueClientId); schedule(5000, %client, "endsurge", %client); messageClient(%TrueClientid, 'RPGchatCallback', "You begin to surge!"); } else messageClient(%TrueClientId, 'RPGchatCallback', "You are too tired to boost your speed."); } else messageClient(%TrueClientId, 'RPGchatCallback', "You can't surge because you lack the necessary skills."); case "#berserk": if(SkillCanuse(%trueclientid, "#berserk")) { if( !(fetchdata(%TrueClientId, "blockberserk") || fetchdata(%TrueClientId, "Surge") ) ) { storedata(%TrueClientId, "Surge", true); weightcall(%TrueClientId, false); storedata(%TrueClientId, "BlockBerserk", true); schedule(5000, %client, "endberserk", %client); messageClient(%TrueClientId, 'RPGchatCallBack', "You go Berserk!"); } } else messageClient(%TrueClientId, 'RPGchatCallback', "You can't berserk because you lack the necessary skills."); case "#ignite": if(SkillCanUse(%TrueClientId, "#ignite")) { if(!(fetchdata(%trueClientId, "NextHitignite") || fetchdata(%trueClientId, "Blockignite"))) { messageClient(%TrueClientId, 'RPGchatCallback', "You light your projectile!"); storeData(%TrueClientId, "NextHitignite", true); storeData(%TrueClientId, "blockignite", true); } else if(fetchdata(%TrueClientId, "NextHitignite")) messageClient(%TrueClientId, 'RPGchatCallback', "You are already ready to ignite."); else messageClient(%TrueClientId, 'RPGchatCallback', "You are too tired to ignite again, wait a bit"); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't ignite arrows because you lack the necessary skills."); //UseSkill(%TrueClientId, $SkillBashing, false, true); } return; case "#shove": %time = getTime(); if(%time - %TrueClientId.lastShoveTime > 1.5) { %TrueClientId.lastShoveTime = %time; if(SkillCanUse(%TrueClientId, "#shove")) { %player = %trueClientId.player; if(getLOSinfo(%TrueClientId, 5)) { %pl = $los::object; %id = %pl.client; if(%TrueClientId.adminLevel > %id.adminLevel || %id.adminLevel < 1 && %id != 0) { %b = %TrueClientId.player.rotation; %c1 = Cap(20 + fetchData(%TrueClientId, "LVL"), 0, 250); %c2 = %c1 / 4; %muzzlevec = %client.player.getMuzzleVector(1); %vel = %id.player.getVelocity(); %mom = GetWord(%muzzlevec, 0)*20+GetWord(%vel, 0) SPC GetWord(%muzzlevec, 1)*20+GetWord(%vel, 1) SPC GetWord(%muzzlevec, 2)*20+GetWord(%vel, 2); %id.player.setVelocity(%mom); } } } else messageClient(%TrueClientId, 'RPGchatCallback', "You can't shove because you lack the necessary skills."); } return; case "#defaulttalk": if(%cropped !$= "") { storeData(%TrueClientId, "defaultTalk", %cropped); messageClient(%TrueClientId, 'RPGchatCallback', "Changed Default Talk to " @ fetchData(%TrueClientId, "defaultTalk") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify what will be added to the beginning of each of your messages."); return; case "#zonelist": if(SkillCanUse(%TrueClientId, "#zonelist")) { %c1 = GetWord(%cropped, 0); if(%c1 !$= -1) { if(stricmp(%c1, "all") $= 0) %t = 1; else if(stricmp(%c1, "players") $= 0) %t = 2; else if(stricmp(%c1, "enemies") $= 0) %t = 3; %list = Zone::getPlayerList(fetchData(%TrueClientId, "zone"), %t); if(%list !$= "") { for(%i = 0; (%id = GetWord(%list, %i)) !$= ""; %i++) messageClient(%TrueClientId, 'RPGchatCallback', %id.nameBase); } else messageClient(%TrueClientId, 'RPGchatCallback', "[none]"); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify 'players', 'enemies', or 'all'"); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't zonelist because you lack the necessary skills."); UseSkill(%TrueClientId, $SkillSenseHeading, false, true); } return; case "#pickpocket": %time = getTime();//ok pickpocket will only steal small items, user really wont have a choice to what they steal either unlike tribes rpg. if(%time - %TrueClientId.lastStealTime > $stealDelay) { %TrueClientId.lastStealTime = %time; if((%reason = AllowedToSteal(%TrueClientId)) $= "true") { if(SkillCanUse(%TrueClientId, "#pickpocket")) { if(getLOSinfo(%TrueClientId, 1)) { %id = $los::object.client; %pos = $los::position; if($los::object.getClassName() $= "Player") { %damloc = %id.player.getDamageLocation(%pos); %tciskill = %TrueClientID.PlayerSkill[$SkillStealing] * 4/5; %idskill = %id.playerSkill[$skillStealing]; //echo(%damloc); //%TrueClientId.stealType = 1; //SetupInvSteal(%TrueClientId, %id); //attempt to steal %inv = fetchdata(%id, "inventory"); %num = getwordcount(%inv); //randomly select an item %itemid = GetWord(%inv, getrandom(0,%num-1)); if(%itemid) { %item = getItem(%itemid); if($itemtype[%item] $= "armor" || $itemType[%item] $= "weapon") { //error cannot steal %fail = true; } else { %backfront = getword(%damloc, 1); if(%backfront $= "back_right" || %backfront $= "back" || %backfront $= "back_left" || %backfront $= "middle_back") %multi = 1; else %multi = 0.5;//odds of stealing 1/2 if(!id.isAIControlled()) %oddcalc = %num - 10; else %oddcalc = %num; if(%oddcalc < 0) %oddcalc = 0; %ooddcalc = %oddcalc * %tciskill * %multi; %doddcalc = 35 * %idskill + 10; %success = getRandom(-%doddcalc, %ooddcalc); if(%success > 0) %fail = false; else %fail = true; } echo("PICKPOCKET:" SPC -%doddcalc SPC %ooddcalc SPC %success SPC %tciskill SPC %idskill); if(!%fail) { RemoveFromInventory(%id, %itemid); AddToInventory(%TrueClientId, %itemid); messageClient(%TrueClientId, 'RPGchatCallback', "You sucessfully stole a" SPC GetFullItemName(%itemid)); MessageClient(%TrueClientID, 'RPGchatcallback', "DEBUG, ODDS TO STEAL:" SPC -%doddcalc SPC " to " SPC %ooddcalc SPC "NUMBER:" SPC %success); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You failed to steal from" SPC %id.rpgname @ "!"); MessageClient(%TrueClientID, 'RPGchatcallback', "DEBUG, ODDS TO STEAL:" SPC -%doddcalc SPC " to " SPC %ooddcalc SPC "NUMBER:" SPC %success); messageClient(%id, 'RPGchatCallback', %TrueClientid.rpgname SPC "failed to steal from you!"); //failed to steal, notify victim? lashback? } } else messageClient(%TrueClientId, 'RPGchatCallback', "Your target has no items on him"); } } } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't pickpocket because you lack the necessary skills."); UseSkill(%TrueClientId, $SkillStealing, false, true); } } else messageClient(%TrueClientId, 'RPGchatCallback', %reason); } return; case "#mug": //can steal ANYTHING unequiped at a higher success rate, however player must be in your target list to attempt! %time = getTime(); if(%time - %TrueClientId.lastStealTime > $stealDelay) { %TrueClientId.lastStealTime = %time; if(skillcanuse(%TrueClientId, "#mug") ) { if(fetchdata(%TrueClientId, "NextHitMug") ) { messageClient(%TrueClientId, 'RPGchatCallback', "You are already ready to mug"); } else if( fetchdata(%TrueClientId, "blockHitMug") ) { messageClient(%TrueClientId, 'RPGchatCallback', "You are not ready to mug"); } else { storedata(%TrueClientId, "blockhitmug", true); storedata(%TrueClientId, "NextHitMug", true); messageClient(%TrueClientId, 'RPGchatCallback', "You are ready to mug."); } } else messageClient(%TrueClientId, 'RPGchatCallback', "You do not have enough skill to mug"); } return; case "#createpack": return; if(fetchData(%TrueClientId, "TempPack") !$= "") { if(HasThisStuff(%TrueClientId, fetchData(%TrueClientId, "TempPack"))) { TakeThisStuff(%TrueClientId, fetchData(%TrueClientId, "TempPack")); %namelist = %TCsenderName @ ","; TossLootbag(%TrueClientId, fetchData(%TrueClientId, "TempPack"), 5, %namelist, 0); RefreshAll(%TrueClientId); remotePlayMode(%TrueClientId); } } return; case "#camp": return; if(Player::getItemCount(%TrueClientId, Tent)) { %camp = nameToId("MissionCleanup/Camp" @ %TrueClientId); if(%camp $= -1) { if(fetchData(%TrueClientId, "zone") $= "") { messageClient(%TrueClientId, 'RPGchatCallback', "Setting up camp..."); %pos = %TrueClientId.player.getPosition(); Player::decItemCount(%TrueClientId, Tent); RefreshAll(%TrueClientId); %group = newObject("Camp" @ %TrueClientId, SimGroup); addToSet("MissionCleanup", %group); schedule(2000, "DoCampSetup(" @ %TrueClientId @ ", 1, \"" @ %pos @ "\");"); schedule(10000, "DoCampSetup(" @ %TrueClientId @ ", 2, \"" @ %pos @ "\");"); schedule(17000, "DoCampSetup(" @ %TrueClientId @ ", 3, \"" @ %pos @ "\");"); schedule(20000, "DoCampSetup(" @ %TrueClientId @ ", 4, \"" @ %pos @ "\");"); } else messageClient(%TrueClientId, 'RPGchatCallback', "You can't set up a camp here."); } else messageClient(%TrueClientId, 'RPGchatCallback', "You already have a camp setup somewhere."); } else messageClient(%TrueClientId, 'RPGchatCallback', "You aren't carrying a tent."); return; case "#uncamp": return; %camp = nameToId("MissionCleanup/Camp" @ %TrueClientId); if(%camp !$= -1) { %obj = nameToId("MissionCleanup/Camp" @ %TrueClientId @ "/woodfire"); if(VectorDist(%TrueClientId.player.getPosition(), %obj.getPosition()) <= 10) { DoCampSetup(%TrueClientId, 5); messageClient(%TrueClientId, 'RPGchatCallback', "Camp has been packed up."); } else messageClient(%TrueClientId, 'RPGchatCallback', "You are too far from your camp."); } else messageClient(%TrueClientId, 'RPGchatCallback', "You don't have a camp."); return; case "#advcompass": if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Use #advcompass zone keyword"); else { if(SkillCanUse(%TrueClientId, "#advcompass")) { %obj = GetZoneByKeywords(%TrueClientId, %cropped, 3); if(%obj !$= false) { %mpos = Zone::getMarker(%obj); %d = GetNESW(%TrueClientId.player.getPosition(), %mpos); UseSkill(%TrueClientId, $SkillSenseHeading, true, true); messageClient(%TrueClientId, 'RPGchatCallback', Zone::getDesc(%obj) @ " is " @ %d @ " of here."); } else messageClient(%TrueClientId, 1, "Couldn't fine a zone to match those keywords."); } else { messageClient(%TrueClientId, 'RPGchatCallback', "You can't use #advcompass because you lack the necessary skills."); UseSkill(%TrueClientId, $SkillSenseHeading, false, true); } } return; case "#smith": %ret = getLOSInfo(%TrueClientId, 10); %obj = GetWord(%ret, 0); if(%obj.special !$= "Smith") { MessageClient(%TrueClientId, 'RPGchatCallback', "You need to be looking at an anvil to smith"); return false; } if(!%TrueClientId.IsSmithing) { %TrueClientId.IsSmithing = true; %command = GetWord(%cropped, 0); %nitem = GetWord(%cropped, 1); %from = GetWord(%cropped, 2); Game.smith(%TrueClientID, %command, %nitem, %from); %TrueClientId.IsSmithing = false; } case "#myexp": messageClient(%TrueClientId, 'RPGchatCallback', "Your EXP:" SPC fetchdata(%TrueClientId, "EXP")); case "#mylevel": messageClient(%TrueClientId, 'RPGchatCallback', "Your Level:" SPC fetchdata(%TrueClientId, "LVL")); case "#quickbind": if(%cropped !$= "") { %number = GetWord(%cropped, 0); %rest = GetWords(%cropped, 1, 99); %number = mfloor(%number); if(%number > 0 && %number <= 10) { %number--; storedata(%client, "QuickBind" @ %number, %rest); } else messageClient(%TrueClientId, 'RPGchatCallBack', "Incorrect usage, syntax: #QuickBind [number 1-10] [#command...] example #quickbind 1 #cast thorn"); } else messageClient(%TrueClientId, 'RPGchatCallBack', "Incorrect usage, syntax: #QuickBind [number 1-10] [#command...] example #quickbind 1 #cast thorn"); case "#resetplayer": %race = fetchdata(%TrueClientID, "RACE"); %race = "MaleHuman";//until femalehuman is put in %apm = "Armor"; %dbname = %race @ %apm @ %TrueClientID.cweight; %e = %TrueClientID.player.getEnergyLevel(); %d = %TrueClientID.player.getDamageLevel(); %TrueClientID.player.setDataBlock(MaleHuman); %TrueClientID.player.setdatablock(%dbname); %TrueClientID.player.setEnergyLevel(%e); %TrueClientID.player.setDamageLevel(%d); MessageClient(%TrueClientId, 'RPGchatCallBack', "Player Reset"); case "#mount": //getlosinfo %obj = getword(getlosinfo(%TrueClientId, 10), 0); %dataBlock = %obj.getDataBlock(); %className = %dataBlock.className; %player = %TrueClientID.player; if (%forceVehicleNode !$= "" || (%className $= WheeledVehicleData || %className $= FlyingVehicleData || %className $= HoverVehicleData) && %player.mountVehicle && %player.getState() $= "Move" && %obj.getDamageState() !$= "Destroyed") { if (%TrueClientID.isAIControlled()) { %transform = %col.getTransform(); //either the AI is *required* to pilot, or they'll pick the first available passenger seat if (%client.pilotVehicle) { //make sure the bot is in light armor if (%player.getArmorSize() $= "Light") { //make sure the pilot seat is empty if (!%obj.getMountNodeObject(0)) %node = 0; } } else %node = findAIEmptySeat(%obj, %player); } else %node = findEmptySeat(%obj, %player); //now mount the player in the vehicle if(%node >= 0) { %obj.mountObject(%player,%node); %obj.playAudio(0, MountVehicleSound); %player.mVehicle = %obj; //%player.mountnode = %node; // if player is repairing something, stop it if(%player.repairing) stopRepairing(%player); //this will setup the huds as well... // %dataBlock.playerMounted(%obj,%player, %node); } } else messageClient(%TrueClientId, 'RPGchatCallback', "You cannot mount this object"); } //another break... //============================ //Guild commands============== //============================ switch$(%w1) { case "#claim": %guildid = IsInWhatGuild(%TrueClientId); %guild = GuildGroup.getObject(%guildid); if(%guildid == -1 || %guild.getGUIDRank(%TrueClientId.guid) < 1) { MessageClient(%TrueClientId, 'MessageClaimFail', "You have to be in a guild to claim land."); return; } %zone = fetchdata(%TrueClientId, "zone"); if(%zone.type $= "GuildZone") { if(%zone.owned) { if(%zone.owner == %guild) { MessageClient(%TrueClientId, 'MessageClaimFail', "Your guild already owns this zone."); } else { MessageClient(%TrueClientId, 'MessageClaimFail', "You cannot claim this zone because it is owned by a guild, in order to obtain it you must #challenge the current owner."); } } else { %list = Zone::getPlayerList(fetchData(%TrueClientId, "zone"), 2); %flag = true; for(%i = 0; GetWord(%list, %i); %i++) { %id = GetWord(%list, %i); if(%id != %TrueClientId) { %gid = IsInWhatGuild(%id); if(%gid != -1 && %gid != %guildid) { %flag = false; break; } } } if(%flag) { if(GetWordCount(%guild.getzonelist()) < $guildownerzonelimit ) { //check to see if there are any other guild members in this zone. MessageClient(%TrueClientId, 'MessageClaim', "You claim this zone in the name of" SPC %guild.getName() @ "!"); %guild.addZone(%zone); %zone.owned = true; %zone.owner = %guild; SaveServerGuilds(); } else MessageClient(%TrueClientId, 'MessageClaim', "Your guild already owns too many zones"); } else MessageClient(%TrueClientId, 'MessageClaimFail', "You cannot claim this zone until you are the only guild in this zone."); } } else MessageClient(%TrueClientId, 'MessageClaimFail', "You must be in a guild zone to claim it."); case "#challenge": %guildid = IsInWhatGuild(%Trueclientid); %guild = GuildGroup.getObject(%guildid); %zone = fetchdata(%TrueClientId, "Zone"); if(%guildid == -1 || %guild.getGUIDRank(%TrueClientId.guid) <= 1) { if(%guildid == -1) MessageClient(%TrueClientId, 'RPGchatcallback', "Error, you must be in a guild to use this command"); else MessageClient(%TrueClientId, 'RPGchatCallback', "You are not of sufficent rank to start a challenge with another guild"); return; } if(%zone.type $= "GuildZone") { if(%zone.owned) { if(%zone.owner == %guild) { MessageClient(%TrueClientId, 'RPGchatcallback', "Error, your guild already owns this zone!"); } else { if(%zone.challenged) { MessageClient(%TrueClientId, 'RPGchatCallback', "Error, someone has already challenged this zone"); } else { if(GetWordCount(%guild.getzonelist()) < $guildownerzonelimit ) { //success MessageClient(%TrueClientId, 'RPGchatcallback', "Success, registering challenge..."); %zone.owner.startChallenge(%zone, %guild); } else MessageClient(%TrueClientId, 'RPGchatcallback', "Your guild already has too many zones"); } } } else MessageClient(%TrueClientId, 'RPGchatCallback', "Zone is unclaimed, #claim to gain possession of it"); } else MessageClient(%TrueClientId, 'RPGchatCallback', "You must be in an enemy guild's zone to challenge it."); case "#accept": %guildid = IsInWhatGuild(%Trueclientid); %guild = GuildGroup.getObject(%guildid); %zone = %guild.challengedzone; if(%guildid == -1 || %guild.getGUIDRank(%TrueClientId.guid) <= 1) { if(%guildid == -1) MessageClient(%TrueClientId, 'RPGchatcallback', "Error, you must be in a guild to use this command"); else MessageClient(%TrueClientId, 'RPGchatCallback', "You are not of sufficent rank to accept a challenge with another guild"); return; } //find state... if(%zone.owner == %guild && %zone.canacceptchallenge) { %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %cl = ClientGroup.getObject(%icl); if(%cl.isAiControlled()) continue; //skip bots if(%guild.GUIDinGuild(%cl.guid) && %guild.GetGUIDRank(%cl.guid) > 0 ) %home++; else if(%zone.challenger.GUIDinGuild(%cl.guid) && %zone.challenger.getGUIDRank(%cl.guid) > 0 ) %away++; } if(IsEventPending(%zone.challengeEvent) && %away >= %zone.minchallenger) { cancel(%zone.challengeEvent); %guild.PrepareChallenge(%zone, %zone.challenger, 0); } } else MessageClient(%TrueClientId, 'RPGchatcallback', "There is no challenge to accept"); } switch$(%w1) { //============================ //ADMIN COMMANDS ============= //============================ case "#anon": if(%clientToServerAdminLevel >= 3) { %aname = GetWord(%cropped, 0); %cn = mfloor(GetWord(%cropped, 1)); if(%cn !$= -1 && %aname !$= -1) { %anonmsg = getsubstr(%cropped, strstr(%cropped, %cn)+strlen(%cn)+1, 99999); if(%aname $= "all") { %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %cl = ClientGroup.getObject(%icl); if(mfloor(%cl.adminLevel) >= mfloor(%clientToServerAdminLevel)) messageClient(%cl, %cn, "[ANON] " @ %TCsenderName @ ": " @ %anonmsg); else messageClient(%cl, %cn, %anonmsg); } } else { %id = getClientByName(%aname); if(%id !$= -1) { if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel)) messageClient(%id, %cn, "[ANON] " @ %TCsenderName @ ": " @ %anonmsg); else messageClient(%id, %cn, %anonmsg); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Syntax: #anon name/all colorNumber message"); } return; case "#fw": %c1 = GetWord(%cropped, 0); if(%c1 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id !$= %TrueClientId && mfloor(%id.adminLevel) !$= 0) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(%clientToServerAdminLevel >= 3) { %rest = getsubstr(%cropped, (strlen(%c1)+1), strlen(%cropped)-(strlen(%c1)+1)); RPGchat(%id, 0, %rest); //, %senderName); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Sent a forwarded message to " @ %id @ "."); } } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name, or name is of a superAdmin."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify name, command and text."); return; case "#forcespawn": if(%clientToServerAdminLevel >= 1) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); else { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(IsDead(%id)) { Game.playerSpawn(%id, true); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Forced " @ %cropped @ " to spawn."); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " isn't dead."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } return; case "#attacklos": if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a bot name."); else { %event = strstr(%cropped, ">"); if(%event !$= -1) { %info = getsubstr(%cropped, 0, %event); %cmd = getsubstr(%cropped, %event, 99999); } else %info = %cropped; %c1 = getWord(%info, 0); %ox = GetWord(%info, 1); %oy = GetWord(%info, 2); %oz = GetWord(%info, 3); %id = getClientByName(%c1); if(%id !$= -1) { if(IsInCommaList(fetchData(%TrueClientId, "PersonalPetList"), %id) || %clientToServerAdminLevel >= 1) { if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id !$= %TrueClientId && mfloor(%id.adminLevel) !$= 0) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id.isAiControlled()) { %player = %TrueClientId.player; if(%ox $= -1 && %oy $= -1 && %oz $= -1) { getLOSinfo(%TrueClientId, 50000); %pos = $los::position; } else %pos = %ox @ " " @ %oy @ " " @ %oz; if(%event !$= -1) AddEventCommand(%id, %senderName, "onPosCloseEnough " @ %pos, %cmd); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %c1 @ " (" @ %id @ ") is attacking position " @ %pos @ "."); storeData(%id, "botAttackMode", 3); storeData(%id, "tmpbotdata", %pos); } else messageClient(%TrueClientId, 'RPGchatCallback', "Player must be a bot."); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } return; case "#botnormal": if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a bot name."); else { %id = getClientByName(%cropped); if(%id !$= -1) { if(IsInCommaList(fetchData(%TrueClientId, "PersonalPetList"), %id) || %clientToServerAdminLevel >= 1) { if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id !$= %TrueClientId && mfloor(%id.adminLevel) !$= 0) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id.isAiControlled()) { if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Bot is now in normal attack mode."); storeData(%id, "botAttackMode", 1); AI::newDirectiveRemove(fetchData(%id, "BotInfoAiName"), 99); storeData(%id, "tmpbotdata", ""); if(fetchData(%id, "petowner") !$= "") { storeData(%id, "botAttackMode", 2); storeData(%id, "tmpbotdata", fetchData(%id, "petowner")); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Player must be a bot."); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } return; case "#createbotgroup": if(%clientToServerAdminLevel >= 1) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a one-word BotGroup name."); else { if(GetWord(%cropped, 1) $= "") { %g = GetWord(%cropped, 0); %n = AI::CountBotGroupMembers(%g); if(!AI::BotGroupExists(%g)) { if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Created BotGroup '" @ %g @ "'."); AI::CreateBotGroup(%g); } else messageClient(%TrueClientId, 'RPGchatCallback', "BotGroup already exists and contains " @ %n @ " members. Use #discardbotgroup to delete a BotGroup."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a ONE-WORD BotGroup name."); } } return; case "#discardbotgroup": if(%clientToServerAdminLevel >= 1) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a one-word BotGroup name."); else { if(GetWord(%cropped, 1) $= "") { %g = GetWord(%cropped, 0); if(AI::BotGroupExists(%g)) { if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Discarded BotGroup '" @ %g @ "'."); AI::DiscardBotGroup(%g); } else messageClient(%TrueClientId, 'RPGchatCallback', "BotGroup does not exist."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a ONE-WORD BotGroup name."); } } return; case "#getbotgroupleader": if(%clientToServerAdminLevel >= 1) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a one-word BotGroup name."); else { if(GetWord(%cropped, 1) $= "") { %g = GetWord(%cropped, 0); if(AI::BotGroupExists(%g)) { %tl = GetWord($tmpBotGroup[%g], 0); %tln = %tl.nameBase; messageClient(%TrueClientId, 'RPGchatCallback', "BotGroup leader is " @ %tln @ " (" @ %tl @ ")."); } else messageClient(%TrueClientId, 'RPGchatCallback', "BotGroup does not exist."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a ONE-WORD BotGroup name."); } } return; case "#botgroup": if(%clientToServerAdminLevel >= 1) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(%id !$= -1) { if(%id.isAiControlled()) { if(AI::BotGroupExists(%c2)) { %b = AI::IsInWhichBotGroup(%id); if(%b $= -1) { if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Adding minion " @ %c1 @ " (" @ %id @ ") to BotGroup '" @ %c2 @ "'."); AI::AddBotToBotGroup(%id, %c2); } else messageClient(%TrueClientId, 'RPGchatCallback', "This bot already belongs to the BotGroup '" @ %b @ "'. Use #rbotgroup to remove a bot from a BotGroup."); } else messageClient(%TrueClientId, 'RPGchatCallback', "BotGroup '" @ %c2 @ "' does not exist. Use #createbotgroup to create a BotGroup."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Name must be a bot."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#rbotgroup": if(%clientToServerAdminLevel >= 1) { %c1 = GetWord(%cropped, 0); if(%c1 !$= -1) { %id = getClientByName(%c1); if(%id !$= -1) { if(%id.isAiControlled()) { %b = AI::IsInWhichBotGroup(%id); if(%b !$= -1) { if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Removing minion " @ %c1 @ " (" @ %id @ ") from BotGroup '" @ %b @ "'."); AI::RemoveBotFromBotGroup(%id, %b); } else messageClient(%TrueClientId, 'RPGchatCallback', "This bot does not belong to a BotGroup."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Name must be a bot."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#listbotgroups": if(%clientToServerAdminLevel >= 1) { messageClient(%TrueClientId, 'RPGchatCallback', $BotGroups); } return; case "#setupai": if(%clientToServerAdminLevel >= 5) { for(%i = 0; (%id = GetWord($TownBotList, %i)) !$= ""; %i++) deleteObject(%id); InitTownBots(); } return; case "#getadmin": if(%clientToServerAdminLevel >= 1) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); else { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %a = mfloor(%id.adminLevel); messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ "'s Admin Clearance Level: " @ %a); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } return; case "#setadmin": if(%clientToServerAdminLevel >= 1) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %a = mfloor(%c2); if(%a < 0) %a = 0; if(%a > %clientToServerAdminLevel) %a = %clientToServerAdminLevel; %id.adminLevel = %a; if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Changed " @ %c1 @ " (" @ %id @ ") Admin Clearance Level to " @ %id.adminLevel @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#eyes": if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); else { %id = getClientByName(%cropped); if(IsInCommaList(fetchData(%TrueClientId, "PersonalPetList"), %id) || %clientToServerAdminLevel >= 1) { if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id !$= %TrueClientId && mfloor(%id.adminLevel) !$= 0) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(!IsDead(%id)) { if(%clientToServerAdminLevel >= 1) { Revert(%TrueClientId); //eyes //note, AI's don't have a camera... if(isObject(%TrueClientId.camera)) { %transform = %id.player.getTransform(); %TrueClientId.camera.setTransform(%transform); %TrueClientId.camera.setOrbitMode(%id.player, %transform, 0.5, 4.5, 4.5); %TrueClientId.setControlObject(%TrueClientId.camera); } } } else messageClient(%TrueClientId, 'RPGchatCallback', "Target client is dead."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } return; case "#possess": if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); else { %id = getClientByName(%cropped); if(IsInCommaList(fetchData(%TrueClientId, "PersonalPetList"), %id) || %clientToServerAdminLevel >= 1) { if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id !$= %TrueClientId && mfloor(%id.adminLevel) !$= 0) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(!IsDead(%id)) { if(%clientToServerAdminLevel >= 4) { Revert(%TrueClientId); //possess %TrueClientId.possessId = %id; %id.possessedBy = %TrueClientId; %TrueClientId.setControlObject(%id.player); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Target client is dead."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } return; case "#revert": if(%TrueClientId.sleepMode $= "") { Revert(%TrueClientId); } return; case "#fixspellflag": if(%clientToServerAdminLevel >= 4) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); else { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "SpellCastStep", ""); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Spell flag reset."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } return; case "#fixbashflag": if(%clientToServerAdminLevel >= 4) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); else { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "blockBash", ""); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Bash flag reset."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } return; case "#kick": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c2 $= -1) %c2 = false; if(%c1 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %id.setDisconnectReason( "You have been kicked out of the game." ); savecharacter(%id); %id.schedule(700, "delete"); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#kickid": if(%clientToServerAdminLevel >= 2) { %id = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c2 $= -1) %c2 = false; if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) Admin::Kick(%TrueClientId, %id, %c2); else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify clientId & data."); } return; case "#ban": if(%clienttoserverAdminLevel >= 3) { %absolute = false; %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c2 $= "absolute" && %clientToServerAdminLevel >= 5) %absolute = true; if(%c2 <= 0 ) %c2 = $host::bantime; if(%c2 > $Host::MaxBanTime) %c2 = $Host::MaxBanTime; %bantime = %c2; echo("absolute:" SPC %absolute); if(%c1 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %id.setDisconnectReason( "You have been banned." ); savecharacter(%id); %id.schedule(700, "delete"); if(%absolute) { BanList::Addabsolute(%id.guid, %id.getAddress(), mpow(2,32)-1); BanList::Add(%id.guid, %id.getAddress(), 60*60*24*7); echo("ABSOLUTE BAN"); } else BanList::add(%id.guid, %id.getAddress(),%bantime); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } case "#admin": if($Host::UseSanctionedAdmin) { for(%ii = 0; (%cguid = GetWord($SanctionedAdminList,%ii) ) !$= ""; %ii = %ii+2 ) { if(%cguid == %TrueClientId.guid) { %TrueClientId.adminLevel = GetWord($SanctionedAdminList,%ii+1); if(%TrueClientId.adminLevel >= 4) ChangeRace(%TrueClientId, "DeathKnight"); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Admin Clearance Level " @ %TrueClientId.adminLevel @ " Granted."); } } } else { for(%i = 1; %i <= 8; %i++) { if(%cropped $= $AdminPassword[%i] && $AdminPassword[%i] !$= "") { %TrueClientId.adminLevel = %i; if(%TrueClientId.adminLevel >= 4) ChangeRace(%TrueClientId, "DeathKnight"); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Password accepted for Admin Clearance Level " @ %TrueClientId.adminLevel @ "."); break; } } } return; case "#human": if(%clientToServerAdminLevel >= 4) ChangeRace(%TrueClientId, "Human"); %TrueClientId.adminLevel = 0; return; case "#loadworld": if(%clientToServerAdminLevel >= 5) { if(%cropped $= "") LoadWorld(); else messageClient(%TrueClientId, 'RPGchatCallback', "Do not use parameters for this function call."); } return; case "#saveworld": if(%clientToServerAdminLevel >= 4) { if(%cropped $= "") SaveWorld(); else messageClient(%TrueClientId, 'RPGchatCallback', "Do not use parameters for this function call."); } return; case "#loadcharacter": if(%clientToServerAdminLevel >= 4) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify clientId."); else LoadCharacter(%cropped); } return; case "#item": return; if(%clientToServerAdminLevel >= 2) { %name = GetWord(%cropped, 0); %id = getClientByName(%name); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { Player::setItemCount(%id, GetWord(%cropped, 1), GetWord(%cropped, 2)); RefreshAll(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Set " @ %name @ " (" @ %id @ ") " @ GetWord(%cropped, 1) @ " count to " @ GetWord(%cropped, 2)); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } return; case "#getitemcount": if(%clientToServerAdminLevel >= 1) { %id = getClientByName(GetWord(%cropped, 0)); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %c = Player::getItemCount(%id, GetWord(%cropped, 1)); messageClient(%TrueClientId, 'RPGchatCallback', "Item count for (" @ %id @ ") " @ GetWord(%cropped, 1) @ " is " @ %c); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } return; case "#myitem": if(%clientToServerAdminLevel >= 2) { if(GetWord(%cropped, 0) !$= "") { %item = GetWord(%cropped, 0); %amt = GetWord(%cropped, 1); %prefix = GetWord(%cropped, 2); %suffix = GetWord(%cropped, 3); if(%prefix == 0) %prefix = 3; if(%suffix == 0) %suffix = 1; if(%amt == 0) %amt = 1; //Player::setItemCount(%TrueClientId, GetWord(%cropped, 0), GetWord(%cropped, 1)); //AddToInventory(%TrueClientID, CreateItem( GetWord(%cropped, 0), (GetWord(%cropped, 1) $= "" ? 3 : GetWord(%cropped, 1) ), ( GetWord(%cropped, 2) $= "" ? 1 : GetWord(%cropped, 2) ))); Game.AddToInventory(%TrueClientID, %amt, %item, %prefix, %suffix); RefreshAll(%TrueClientId); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Gave " @ %TCsenderName @ " (" @ %TrueClientId @ ") " @ %amt SPC %item SPC "Prefix:" SPC %prefix SPC "Suffix:" SPC %suffix @ "."); } else messageClient(%TrueCientId, 'RPGchatCallback', "Useage: #myitem itemname [amt] [prefix] [suffix]. Prefix and suffix are a number 1-6. (3 is normal for prefix 1 is normal for suffix)"); } return; case "#arenacutshort": if(%clientToServerAdminLevel >= 1) { $IsABotMatch = true; $ArenaBotMatchTicker = $ArenaBotMatchLengthInTicks; } return; case "#teleport": if(%clientToServerAdminLevel >= 2) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); else { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { getLOSinfo(%TrueClientId, 50000); if(%id.player.ismounted()) { //unmount the player %id.player.getobjectMount().unmountobject(%id.player); %id.player.setcontrolobject(0); } %id.player.setPosition($los::position); CheckAndBootFromArena(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Teleporting " @ %cropped @ " (" @ %id @ ") to " @ $los::position @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } return; case "#teleport2": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id1 = getClientByName(%c1); %id2 = getClientByName(%c2); if(mfloor(%id1.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id1 !$= %TrueClientId) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id1 !$= -1 && %id2 !$= -1) { if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Teleporting " @ %c1 @ " (" @ %id1 @ ") to " @ %c2 @ " (" @ %id2 @ ")."); %id1.player.setPosition(%id2.player.getPosition()); CheckAndBootFromArena(%id1); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name(s)."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#follow": if(%clientToServerAdminLevel >= 1) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id1 = getClientByName(%c1); %id2 = getClientByName(%c2); if(%id1 !$= -1 && %id2 !$= -1) { if(%id1.isAiControlled()) { if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Making " @ %c1 @ " (" @ %id1 @ ") follow " @ %c2 @ " (" @ %id2 @ ")."); %event = strstr(%cropped, ">"); if(%event !$= -1) { %cmd = getsubstr(%cropped, %event, 99999); AddEventCommand(%id1, %senderName, "onIdCloseEnough " @ %id2, %cmd); } storeData(%id1, "tmpbotdata", %id2); storeData(%id1, "botAttackMode", 2); } else messageClient(%TrueClientId, 'RPGchatCallback', "First name must be a bot."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name(s)."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#cancelfollow": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(%id !$= -1) { if(%id.isAiControlled()) { AI::newDirectiveRemove(fetchData(%id, "BotInfoAiName"), 99); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") has stopped following its target."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Player must be a bot."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#freeze": if(%cropped !$= -1) { %id = getClientByName(%cropped); if(%id !$= -1) { if(IsInCommaList(fetchData(%TrueClientId, "PersonalPetList"), %id) || %clientToServerAdminLevel >= 1) { if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Freezing " @ %cropped @ " (" @ %id @ ")."); %id.setControlObject(%id.camera); storeData(%id, "frozen", true); if(%id.isAiControlled()) { //bot hack %tmp = %id.player; %client.setControlObject(%id.player); %client.setControlObject(%client.player); %id.player = %tmp; } } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); return; case "#cancelfreeze": if(%cropped !$= -1) { %id = getClientByName(%cropped); if(%id !$= -1) { if(IsInCommaList(fetchData(%TrueClientId, "PersonalPetList"), %id) || %clientToServerAdminLevel >= 1) { if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") is no longer frozen."); %id.setControlObject(%id.player); storeData(%id, "frozen", ""); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); return; case "#kill": if(%clientToServerAdminLevel >= 2) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %id.player.scriptKill(0); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") was executed."); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#clearchar": if(%clientToServerAdminLevel >= 5) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %id.player.scriptKill(0); ResetPlayer(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") profile was RESET."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; } //another break... switch$(%w1) { case "#spawn": if(%clientToServerAdminLevel >= 3) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "syntax: #spawn botType displayName loadout [team] [x] [y] [z]"); else { %event = strstr(%cropped, ">"); if(%event !$= -1) { %info = getsubstr(%cropped, 0, %event); %cmd = getsubstr(%cropped, %event, 99999); } else %info = %cropped; %c1 = GetWord(%info, 0); %c2 = GetWord(%info, 1); %loadout = GetWord(%info, 2); %team = GetWord(%info, 3); %ox = GetWord(%info, 4); %oy = GetWord(%info, 5); %oz = GetWord(%info, 6); if(%c1 !$= -1 && %c2 !$= -1 && %loadout !$= -1) { if(getClientByName(%c2) $= -1) { if(%ox $= -1 && %oy $= -1 && %oz $= -1) { %player = %TrueClientId.player; getLOSinfo(%TrueClientId, 50000); %lospos = $los::position; } else %lospos = %ox @ " " @ %oy @ " " @ %oz; if(%team $= -1) %team = 1; //%n = AI::helper(%c1, %c2, "TempSpawn " @ %lospos @ " " @ %team, %loadout); //%id = AI::getId(%n); %id = aiconnect(%c2, %team); if(%event !$= -1) AddEventCommand(%id, %senderName, "onkill", %cmd); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Spawned " @ %c2 @ " (" @ %id @ ") at " @ %id.player.getPosition() @ "."); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %c2 @ " already exists."); } else messageClient(%TrueClientId, 'RPGchatCallback', "syntax: #spawn botType displayName loadout [team] [x] [y] [z]"); } } return; case "#playanim": if(%clientToServerAdminLevel >= 5) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify animation."); else { %anim = GetWord(%cropped, 0); %sound = GetWord(%cropped, 1); if(%sound != -1 && %sound !$= "") { } } } return; case "#spawntestplayer": if(%clientToServerAdminLevel >= 5) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify animation."); else { %tplayer = %cropped; } } return; case "#gettransform": if(%clienttoserverAdminLevel >=1 ) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Transform" SPC %TrueClientID.player.getTransform()); } return; } //there appears to be a limit of ~74 cases per switch switch$(%w1) { case "#fell": if(%clientToServerAdminLevel >= 2) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); else { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Processing fell-off-map for " @ %cropped @ " (" @ %id @ ")"); //Zone::handleTeleport(fetchdata(%id, "zone"), %id); FellOffMap(%id); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } return; case "#getstorage": if(%clientToServerAdminLevel >= 1) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); else { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { messageClient(%TrueClientId, 'RPGchatCallback', %id @ ": " @ fetchData(%id, "BankStorage")); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } return; case "#clearstorage": if(%clientToServerAdminLevel >= 4) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); else { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "BankStorage", ""); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %id @ " bank storage cleared."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } return; case "#setstorage": if(%clientToServerAdminLevel >= 4) { %name = GetWord(%cropped, 0); %id = getClientByName(%name); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "BankStorage", SetStuffString(fetchData(%id, "BankStorage"), GetWord(%cropped, 1), GetWord(%cropped, 2))); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %id @ " bank storage modified. Use #getstorage [name] to view."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } return; case "#addsp": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "SP", %c2, "inc"); RefreshAll(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") SP credits to " @ fetchData(%id, "SP") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#setsp": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "SP", %c2); RefreshAll(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") SP credits to " @ fetchData(%id, "SP") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#addlck": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= "" && %c2 !$= "") { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "LCK", %c2, "inc"); RefreshAll(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") base LCK to " @ fetchData(%id, "LCK") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#sethp": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %max = fetchData(%id, "MaxHP"); if(%c2 < 1) %c2 = 1; else if(%c2 > %max) %c2 = %max; setHP(%id, %c2); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") HP to " @ fetchData(%id, "HP") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#setmana": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %max = fetchData(%id, "MaxMANA"); if(%c2 < 0) %c2 = 0; else if(%c2 > %max) %c2 = %max; setMANA(%id, %c2); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") MANA to " @ fetchData(%id, "MANA") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#addexp": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "EXP", %c2, "inc"); if(%id.isAiControlled()) HardcodeAIskills(%id); RefreshExp(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") EXP to " @ fetchData(%id, "EXP") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#setexp": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "EXP", %c2); RefreshExp(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") EXP to " @ fetchData(%id, "EXP") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#addcoins": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "COINS", %c2, "inc"); RefreshAll(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") COINS to " @ fetchData(%id, "COINS") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#addbank": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "BANK", %c2, "inc"); RefreshAll(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") BANK to " @ fetchData(%id, "BANK") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#setteam": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %id.team = %c2; //RefreshAll(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") team to " @ %id.team @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#setrace": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(%c2 $= "DeathKnight" && %clientToServerAdminLevel >= 4 || %c2 !$= "DeathKnight") ChangeRace(%id, %c2, %clientToServerAdminLevel); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Changed " @ %c1 @ " (" @ %id @ ") race to " @ fetchData(%id, "RACE") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#setinvis": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(%c2 $= 0) { if(fetchData(%id, "invisible")) UnHide(%id); } else if(%c2 $= 1) { if(!fetchData(%id, "invisible")) GameBase::startFadeOut(%id); storeData(%id, "invisible", true); } if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Changed " @ %c1 @ " (" @ %id @ ") invisible state to " @ %c2 @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#dumbai": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(%c2 $= 0) storeData(%id, "dumbAIflag", ""); else if(%c2 $= 1) storeData(%id, "dumbAIflag", true); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Changed " @ %c1 @ " (" @ %id @ ") dumb AI flag state to '" @ fetchData(%id, "dumbAIflag") @ "'."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#getlck": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") base LCK is " @ fetchData(%id, "LCK") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#gethp": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= "") { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") HP is " @ fetchData(%id, "HP") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getmana": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= "") { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") MANA is " @ fetchData(%id, "MANA") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getmaxhp": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= "") { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") max HP is " @ fetchData(%id, "MaxHP") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getmaxmana": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= "") { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") max MANA is " @ fetchData(%id, "MaxMANA") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getexp": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %cl = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %cl @ ") EXP is " @ fetchData(%cl, "EXP") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getcoins": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") COINS is " @ fetchData(%id, "COINS") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getbank": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") BANK is " @ fetchData(%id, "BANK") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getteam": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") team is " @ %id.team @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getclientid": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " clientId is " @ %id @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getuniqueid": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " Global Unique ID is " @ %id.guid @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getplayerid": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " playerId is " @ %id.player @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getname": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %n = %cropped.nameBase; if(%n !$= "") messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " name is " @ %n @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid clientId."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a clientId."); } return; case "#getpassword": if(%clientToServerAdminLevel >= 5) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " password[" @ %id @ "] is " @ fetchData(%id, "password") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getotherinfo": if(%clientToServerAdminLevel >= 5) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " $Client::info[" @ %id @ ", 5] is " @ $Client::info[%id, 5] @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getlvl": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") LEVEL is " @ fetchData(%id, "LVL") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getfinallck": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") final LCK is " @ fetchData(%id, "LCK") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getfinaldef": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") max DEF roll is " @ fetchData(%id, "DEF") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#getfinalatk": if(%clientToServerAdminLevel >= 1) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") max ATK roll is " @ fetchData(%id, "ATK") @ "."); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#exportchat": if(%clientToServerAdminLevel >= 5) { if(%cropped !$= "") { if(%cropped $= "0") $exportChat = false; else if(%cropped $= "1") $exportChat = true; if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "exportChat set to " @ $exportChat @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Specify 1 or 0 (1 = true, 0 = false)."); } return; case "#doexport": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(%c2 $= 0) %id.doExport = false; else if(%c2 $= 1) %id.doExport = true; if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Changed " @ %c1 @ " (" @ %id @ ") doExport to " @ %id.doExport @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#getip": if(%clientToServerAdminLevel >= 3) { if(%cropped !$= "") { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") IP is " @ %id.getAddress()); else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#spawnpack": return; if(%clientToServerAdminLevel >= 3) { if(%cropped !$= "") { %event = strstr(%cropped, ">"); if(%event !$= -1) { %info = getsubstr(%cropped, 0, %event); %cmd = getsubstr(%cropped, %event, 99999); } else %info = %cropped; %div = strstr(%info, "|"); if(%div !$= -1) { %a = getsubstr(%info, 0, %div-1); %tag = GetWord(%a, 0); %ox = GetWord(%a, 1); %oy = GetWord(%a, 2); %oz = GetWord(%a, 3); if(%ox $= -1 && %oy $= -1 && %oz $= -1) { //didn't enter coordinates. getLOSinfo(%TrueClientId, 50000); %pos = $los::position; } else %pos = %ox @ " " @ %oy @ " " @ %oz; if(!IsInCommaList($SpawnPackList, %tag)) { %pack = getsubstr(%info, %div+1, 99999); %pid = DeployLootbag(%pos, "0 0 0", %pack); $SpawnPackList = AddToCommaList($SpawnPackList, %tag); $tagToObjectId[%tag] = %pid; %pid.tag = %tag; if(%event !$= -1) AddEventCommand(%pid, %senderName, "onpickup", %cmd); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Spawned pack (" @ %pid @ ") at position " @ %pos @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Tagname " @ %tag @ " already exists."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Divider not found. Type #spawnpack with no parameters to get a quick overview."); } else messageClient(%TrueClientId, 'RPGchatCallback', "#spawnpack tagname [x] [y] [z] | packstring. Use this command only if you know what you're doing."); } return; case "#delpack": return; if(%clientToServerAdminLevel >= 3) { %tag = GetWord(%cropped, 0); if(%cropped !$= -1) { if($tagToObjectId[%tag] !$= "") { %object = $tagToObjectId[%tag]; ClearEvents(%object); deleteObject(%object); $tagToObjectId[%tag] = ""; $SpawnPackList = RemoveFromCommaList($SpawnPackList, %tag); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Deleted " @ %tag @ " (" @ %object @ ")"); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Invalid tagname."); } else messageClient(%TrueClientId, 'RPGchatCallback', "#delpack tagname."); } return; case "#spawndis" or "#spawndif": if(%clientToServerAdminLevel >= 3) { if(%cropped !$= "") { %f = GetWord(%cropped, 0); %tag = GetWord(%cropped, 1); %x = GetWord(%cropped, 2); %y = GetWord(%cropped, 3); %z = GetWord(%cropped, 4); %r1 = GetWord(%cropped, 5); %r2 = GetWord(%cropped, 6); %r3 = GetWord(%cropped, 7); %r4 = GetWord(%cropped, 8); %s1 = GetWord(%cropped, 9); %s2 = GetWord(%cropped, 10); %s3 = GetWord(%cropped, 11); if(getwords(%cropped, 2, 4) $= "") { //getLOSinfo(%client, %searchRange, %mask) %d = getLOSinfo(%TrueClientId, 50000); %pos =getwords(%d, 1,3); } else %pos = %x @ " " @ %y @ " " @ %z; if(getwords(%cropped, 5, 7) $= "") %rot = "0 0 0 1"; else %rot = %r1 @ " " @ %r2 @ " " @ %r3 SPC %r4; if(GetWords(%cropped, 8, 10) $= "") { %scale = "1 1 1"; } else %scale = %s1 SPC %s2 SPC %s3;//scale %fname = %f @ ".dif"; //%object = newObject(%tag, InteriorShape, %fname); if(%tag !$= "" && isfile("interiors/" @ %fname)) %object = new InteriorInstance() { position = %pos; rotation = %rot; scale = %scale; interiorFile = %fname; }; if(%object != 0 && %tag !$= "") { if( $tagToObjectId[%tag] !$= "") { %o = $tagToObjectId[%tag]; //deleteobject(%o); %o.delete(); $tagToObjectId[%tag] = ""; %w = "Replaced"; } else { $DISlist = AddToCommaList($DISlist, %tag); %w = "Spawned"; } MissionCleanup.add(%object); $tagToObjectId[%tag] = %object; %object.nametag = %tag; //%object.position = %pos; //if(%rot !$= -1) // %object.rotation = %rot; if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %w @ " " @ %tag @ " (" @ %object @ ") at pos " @ %pos); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid DIF filename or tagname."); } else messageClient(%TrueClientId, 'RPGchatCallback', "#spawndis filename tagname [x] [y] [z] [r1] [r2] [r3] [r4] [s1] [s2] [s3]. Do not specify .dis, this will automatically be added."); } return; case "#deldis" or "#deldif": if(%clientToServerAdminLevel >= 3) { %tag = GetWord(%cropped, 0); if(%cropped !$= -1) { if($tagToObjectId[%tag] !$= "") { %object = $tagToObjectId[%tag]; ClearEvents(%object); %object.delete(); $tagToObjectId[%tag] = ""; $DISlist = RemoveFromCommaList($DISlist, %tag); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Deleted " @ %tag @ " (" @ %object @ ")"); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Invalid tagname."); } else messageClient(%TrueClientId, 'RPGchatCallback', "#deldis tagname."); } return; case "#listdis" or "#listdis": if(%clientToServerAdminLevel >= 1) { messageClient(%TrueClientId, 'RPGchatCallback', $DISlist); } return; case "#listpacks": return;//add later if(%clientToServerAdminLevel >= 1) { messageClient(%TrueClientId, 'RPGchatCallback', $SpawnPackList); } return; case "#deleteobject": if(%clientToServerAdminLevel >= 5) { %c1 = GetWord(%cropped, 0); if(%c1 !$= -1) { if(%c1.tag !$= "") { $tagToObjectId[%c1.tag] = ""; if(IsInCommaList($DISlist, %c1.tag)) $DISlist = RemoveFromCommaList($DISlist, %c1.tag); else if(IsInCommaList($SpawnPackList, %c1.tag)) $SpawnPackList = RemoveFromCommaList($SpawnPackList, %c1.tag); } deleteObject(%c1); ClearEvents(%c1); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Attempted to deleteObject(" @ %c1 @ ")"); } else messageClient(%TrueClientId, 'RPGchatCallback', "#deleteobject [objectId]. Be careful with this command."); } return; case "#getposition": if(%clientToServerAdminLevel >= 1) { %player = %TrueClientId.player; getLOSinfo(%TrueClientId, 50000); messageClient(%TrueClientId, 'RPGchatCallback', "Position at LOS is " @ $los::position); } return; case "#deathmsg": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %msg = getsubstr(%cropped, (strlen(%c1)+1), 99999); if(%c1 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "deathmsg", %msg); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Changed " @ %c1 @ " (" @ %id @ ") deathmsg to " @ fetchData(%id, "deathmsg")); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } else { storeData(%TrueClientId, "deathmsg", %cropped); messageClient(%TrueClientId, 'RPGchatCallback', "Changed your death message to: " @ fetchData(%TrueClientId, "deathmsg")); } return; case "#block": if(%clientToServerAdminLevel >= 3) { %bname = GetWord(%cropped, 0); if(%bname !$= -1) { //Always clear the blockdata ClearBlockData(%senderName, %bname); if(!IsInCommaList($BlockList[%senderName], %bname)) $BlockList[%senderName] = AddToCommaList($BlockList[%senderName], %bname); storeData(%TrueClientId, "BlockInputFlag", %bname); storeData(%TrueClientId, "tmpBlockCnt", ""); ManageBlockOwnersList(%senderName); } else messageClient(%TrueClientId, 'RPGchatCallback', "Incorrect syntax for #block [blockname]"); } return; case "#endblock": if(%clientToServerAdminLevel >= 3) { if(fetchData(%TrueClientId, "BlockInputFlag") !$= "") { storeData(%TrueClientId, "BlockInputFlag", ""); storeData(%TrueClientId, "tmpBlockCnt", ""); } else messageClient(%TrueClientId, 'RPGchatCallback', "No block to end!"); } return; case "#delblock": if(%clientToServerAdminLevel >= 3) { %bname = GetWord(%cropped, 0); if(%bname !$= -1) { if(IsInCommaList($BlockList[%senderName], %bname)) { ClearBlockData(%senderName, %bname); $BlockList[%senderName] = RemoveFromCommaList($BlockList[%senderName], %bname); ManageBlockOwnersList(%senderName); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Block " @ %bname @ " deleted."); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Block does not exist!"); } else messageClient(%TrueClientId, 'RPGchatCallback', "Incorrect syntax for #delblock [blockname]"); } return; case "#clearblocks": if(%clientToServerAdminLevel >= 5) { %targetName = GetWord(%cropped, 0); %id = getClientByName(%targetName); } else if(%clientToServerAdminLevel >= 3) { %targetName = %senderName; %id = %TrueClientId; } if(%id !$= -1) { if($BlockList[%targetName] !$= "") { %list = $BlockList[%targetName]; $BlockList[%targetName] = ""; for(%p = strstr(%list, ","); (%p = strstr(%list, ",")) !$= -1; %list = getsubstr(%list, %p+1, 99999)) { %w = getsubstr(%list, 0, %p); ClearBlockData(%targetName, %w); } ManageBlockOwnersList(%targetName); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Deleted ALL of " @ %targetName @ "'s blocks."); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); return; case "#clearallblocks": if(%clientToServerAdminLevel >= 5) { %bname = GetWord(%cropped, 0); if(%bname $= "confirm") { %blist = $BlockOwnersList; for(%bp = strstr(%blist, ","); (%bp = strstr(%blist, ",")) !$= -1; %blist = getsubstr(%blist, %bp+1, 99999)) { %name = getsubstr(%blist, 0, %bp); if($BlockList[%name] !$= "") { %list = $BlockList[%name]; $BlockList[%name] = ""; for(%p = strstr(%list, ","); (%p = strstr(%list, ",")) !$= -1; %list = getsubstr(%list, %p+1, 99999)) { %w = getsubstr(%list, 0, %p); ClearBlockData(%name, %w); } } ManageBlockOwnersList(%name); } if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Deleted EVERYONE's blocks."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Type #clearallblocks confirm to clear EVERYONE's blocks."); } return; case "#listblocks": if(%clientToServerAdminLevel >= 5) { if(%cropped !$= "") { if(IsInCommaList($BlockOwnersList, %cropped)) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ "'s BlockList: " @ $BlockList[%cropped]); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } else if(%clientToServerAdminLevel >= 3) { messageClient(%TrueClientId, 'RPGchatCallback', "Your BlockList: " @ $BlockList[%senderName]); } return; case "#echo": if(stricmp(%cropped, "off") $= 0) %TrueClientId.echoOff = true; else if(stricmp(%cropped, "on") $= 0) %TrueClientId.echoOff = ""; else messageClient(%TrueClientId, 'RPGchatCallback', %cropped); return; case "#call": if(%clientToServerAdminLevel >= 3) { %bname = GetWord(%cropped, 0); if(%bname !$= -1) { %list = getsubstr(%cropped, (strlen(%bname)+1), 99999); for(%p = strstr(%list, ","); (%p = strstr(%list, ",")) !$= -1; %list = getsubstr(%list, %p+1, 99999)) %a[%c++] = getsubstr(%list, 0, %p); if(%c <= 8) { if(IsInCommaList($BlockList[%senderName], %bname)) { %TrueClientId.echoOff = true; for(%i = 1; (%bd = $BlockData[%senderName, %bname, %i]) !$= ""; %i++) { if(%a[1] !$= "") %bd = nsprintf(%bd, %a[1], %a[2], %a[3], %a[4], %a[5], %a[6], %a[7], %a[8]); RPGchat(%client, 0, %bd); //, %senderName); } %TrueClientId.echoOff = ""; } else messageClient(%TrueClientId, 'RPGchatCallback', "Block does not exist!"); } else messageClient(%TrueClientId, 'RPGchatCallback', "Too many parameters for #call (max of 8)"); } else messageClient(%TrueClientId, 'RPGchatCallback', "Incorrect syntax for #call [blockname]"); } return; case "#givethisstuff": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %stuff = getsubstr(%cropped, (strlen(%c1)+1), 99999); if(%c1 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { GiveThisStuff(%id, %stuff, true); if(%id.isAiControlled()) HardcodeAIskills(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Gave " @ %c1 @ " (" @ %id @ "): " @ %stuff); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#takethisstuff": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %stuff = getsubstr(%cropped, (strlen(%c1)+1), 99999); if(%c1 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(HasThisStuff(%id, %stuff)) { TakeThisStuff(%id, %stuff); if(%id.isAiControlled()) HardcodeAIskills(%id); RefreshAll(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Took " @ %c1 @ " (" @ %id @ "): " @ %stuff); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Could not take stuff."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#refreshbotskills": if(%clientToServerAdminLevel >= 2) { if(%cropped $= "") messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); else { %id = getClientByName(%cropped); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { HardcodeAIskills(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Refreshed skills for " @ %cropped @ " (" @ %id @ ")."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } } return; case "#listblockowners": if(%clientToServerAdminLevel >= 5) { messageClient(%TrueClientId, 'RPGchatCallback', $BlockOwnersList); } return; case "#nodroppack": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(%c2 $= 0) storeData(%id, "noDropLootbagFlag", ""); else if(%c2 $= 1) storeData(%id, "noDropLootbagFlag", true); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Changed " @ %c1 @ " (" @ %id @ ") noDropLootbagFlag to '" @ fetchData(%id, "noDropLootbagFlag") @ "'."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#playsound": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %pos = getsubstr(%cropped, (strlen(%c1)+1), 99999); if(%c1 !$= -1) { if(GetWord(%pos, 0) $= "") { if(getLOSinfo(%TrueClientId, 50000)) %pos = $los::position; else %pos = %TrueClientId.player.getPosition(); } serverPlay3D(%c1, %pos); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Playing sound " @ %c1 @ " at pos " @ %pos); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify nsound & position."); } return; case "#delbot": if(%clientToServerAdminLevel >= 3) { if(%cropped !$= -1) { %id = getClientByName(%cropped); if(%id !$= -1) { if(%id.isAiControlled()) { storeData(%id, "noDropLootbagFlag", true); ClearEvents(%id); %id.player.scriptKill(0); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %cropped @ " (" @ %id @ ") was deleted."); } else messageClient(%TrueClientId, 'RPGchatCallback', "This command only works on bots."); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#loadout": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); %stuff = getsubstr(%cropped, (strlen(%c1)+1), 99999); if(%c1 !$= -1) { if(!IsInCommaList($LoadOutList, %c1)) { $LoadOutList = AddToCommaList($LoadOutList, %c1); $LoadOut[%c1] = %stuff; if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Loadout " @ %c1 @ " defined."); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Loadout tagname already exists."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify tagname & data."); } return; case "#delloadout": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); if(%c1 !$= -1) { if(IsInCommaList($LoadOutList, %c1)) { $LoadOutList = RemoveFromCommaList($LoadOutList, %c1); $LoadOut[%c1] = ""; if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Loadout " @ %c1 @ " deleted."); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Loadout tagname does not exist."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify tagname."); } return; case "#clearloadouts": if(%clientToServerAdminLevel >= 4) { %list = $LoadOutList; $LoadOutList = ""; for(%p = strstr(%list, ","); (%p = strstr(%list, ",")) !$= -1; %list = getsubstr(%list, %p+1, 99999)) { %w = getsubstr(%list, 0, %p); $LoadOut[%w] = ""; } if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Deleted ALL loadouts."); } return; case "#showloadout": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); if(%c1 !$= -1) { if(IsInCommaList($LoadOutList, %c1)) messageClient(%TrueClientId, 'RPGchatCallback', %c1 @ ": " @ $LoadOut[%c1]); else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Loadout tagname does not exist."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify tagname."); } return; case "#listloadouts": if(%clientToServerAdminLevel >= 3) { %list = $LoadOutList; for(%p = strstr(%list, ","); (%p = strstr(%list, ",")) !$= -1; %list = getsubstr(%list, %p+1, 99999)) { %w = getsubstr(%list, 0, %p); messageClient(%TrueClientId, 'RPGchatCallback', %w @ ": " @ $LoadOut[%w]); } } return; case "#nobotsniff": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { if(%c2 $= 0) storeData(%id, "noBotSniff", ""); else if(%c2 $= 1) storeData(%id, "noBotSniff", true); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Changed " @ %c1 @ " (" @ %id @ ") noBotSniff flag to " @ %c2 @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; case "#addrankpoints": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { storeData(%id, "RankPoints", %c2, "inc"); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") RankPoints to " @ fetchData(%id, "RankPoints") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; } //more breaks...this sucks switch$(%w1) { case "#delchar": if(%clientToServerAdminLevel >= 5) { %name = %cropped; %dclient = getClientByName(%name); //clear all skills. //ok FIRST delete the character files. %filename = "characters/" @ %dclient.realname @ "/" @ %dclient.namebase @ ".cs"; deletefile(%filename); deletefile(%filename @ ".dso"); %dclient.data.delete(); %dclient.data = new ScriptObject(CDATA @ %client.guid); GiveDefaults(%dclient); %dclient.clan = ""; %dclient.choosingGroup = true; %dclient.game = 'RPGgame'; %dclient.camera.getDataBlock().setMode( %client.camera, "observer"); %dclient.setControlObject( %dclient.camera ); %dclient.player.delete(); //bye bye player commandToClient(%dclient, 'OpenISMenu'); commandToClient(%dclient, 'RPGplayMusic', "SoftTown"); BuildMenu(%client, 0, 0); } case "#sethouse": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c1 !$= -1 && %c2 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %hn = ""; if(stricmp(%c2, "null") $= 0) %hn = 0; else { for(%i = 1; $HouseName[%i] !$= ""; %i++) { if(strstr($HouseName[%i], %c2) !$= -1) %hn = %i; } } if(%hn !$= "") { %hname = $HouseName[%hn]; storeData(%id, "MyHouse", %hname); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Setting " @ %c1 @ " (" @ %id @ ") House to " @ fetchData(%id, "MyHouse") @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid House."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & house (to clear house, use: #sethouse name NULL)."); } return; case "#setspawnmultiplier": if(%clientToServerAdminLevel >= 5) { %c1 = GetWord(%cropped, 0); if(%c1 !$= -1) { $spawnMultiplier = Cap(%c1, 0, "inf"); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "spawnMultiplier set to " @ $spawnMultiplier @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify a number (normal should be 1. 0 will cease spawning.)"); } return; case "#jail": if(%clientToServerAdminLevel >= 3) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); %c3 = GetWord(%cropped, 2); if(%c1 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %c1 = %id.nameBase; if(%c2 $= "") %c2 = 300; if(%c3 $= "") %c3 = Game.GetRandomJailNumber(); %val = Game.ValidateJailNumber(%c3); if(%val) { Game.Jail(%id, %c2 * 1000, %c3); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %c1 @ " has been jailed for " @ %c2 @ " seconds in Jail #" @ %c3 @ "."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid jail number."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name, time, and jail number."); } return; case "#beg": if(%clientToServerAdminLevel >= 2) { %c1 = GetWord(%cropped, 0); %c2 = GetWord(%cropped, 1); if(%c2 $= -1) %c2 = false; if(%c1 !$= -1) { %id = getClientByName(%c1); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %ip = %id.getAddress(); BanList::add(%ip, 300); Net::kick(%id, "Do not beg from an admin! The next time you might be banned, so quit your begging."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name & data."); } return; } //another break due to the switch limitation switch$(%w1) { case "#onhear": if(%clientToServerAdminLevel >= 3) { if(%cropped !$= "") { %event = strstr(%cropped, ">"); if(%event !$= -1) { %info = getsubstr(%cropped, 0, %event); %cmd = getsubstr(%cropped, %event, 99999); } else %info = %cropped; %var = GetWord(%info, 4); if(stricmp(%var, "var") $= 0) %var = "var"; else { %var = ""; %quote1 = strstr(%info, "\""); %quote2 = String::ofindSubStr(%info, "\"", %quote1+1); } if(%quote1 !$= -1 && %quote2 !$= -1 || %var !$= "") { %pname = GetWord(%info, 0); %id = getClientByName(%pname); if(%id !$= -1) { %pname = %id.nameBase; //properly capitalize name %radius = GetWord(%info, 1); %keep = GetWord(%info, 2); if(%keep $= "true" || %keep $= "false") { %targetname = GetWord(%info, 3); %tid = getClientByName(%targetname); if(stricmp(%targetname, "all") $= 0 || %tid !$= -1) { if(%var !$= "") { %vtxt = %var; %text = "var"; } else { %text = getsubstr(%info, %quote1+1, %quote2); %vtxt = "|" @ %text @ "|"; } if(%text !$= "") { if(%event !$= -1) { AddEventCommand(%id, %senderName, "onHear " @ %pname @ " " @ %radius @ " " @ %keep @ " " @ %targetname @ " " @ %vtxt, %cmd); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "onHear event set for " @ %pname @ "(" @ %id @ ") with text: \"" @ %text @ "\""); } else messageClient(%TrueClientId, 'RPGchatCallback', "onHear event definition failed."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid text."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid name. Please specify 'all' or target's name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Specify 'true' or 'false'. 'true' means that the onHear event won't be deleted after use. 'false' is recommended to keep things clean."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Quotes for text not found."); } else messageClient(%TrueClientId, 'RPGchatCallback', "#onhear name radius keep all/targetname \"text\"/var."); } return; case "#if": if(%clientToServerAdminLevel >= 3) { if(%cropped !$= "") { %info = %cropped; %para1 = strstr(%info, "{"); %para2 = String::ofindSubStr(%info, "}", %para1+1); if(%para1 !$= -1 && %para2 !$= -1) { %expression = getsubstr(%info, %para1+1, %para2); if((%pw = CheckForProtectedWords(%expression)) $= "") { %command = getsubstr(%info, %para1+%para2+3, 99999); %retval = eval("%x = (" @ %expression @ ");"); if(%retval $= 0) %r = false; else %r = true; if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "(" @ %expression @ ") = " @ %r); if(%retval && %command !$= "") RPGchat(%client, 0, %command); //, %senderName); } else messageClient(%TrueClientId, 'RPGchatCallback', "Protected word '" @ %pw @ "' can't be used in the #if statement."); } else messageClient(%TrueClientId, 'RPGchatCallback', "{ and } found."); } else messageClient(%TrueClientId, 'RPGchatCallback', "#if {expression} command"); } return; case "#addskill": if(%clientToServerAdminLevel >= 3) { %name = GetWord(%cropped, 0); %id = getClientByName(%name); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %sid = GetWord(%cropped, 1); if($SkillDesc[%sid] !$= "") { %sn = mfloor(GetWord(%cropped, 2)); if(%sn !$= 0) { %id.PlayerSkill[%sid] += %sn; RefreshAll(%id); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Set " @ %name @ " (" @ %id @ ") " @ $SkillDesc[%sid] @ " to " @ %id.PlayerSkill[%sid]); } } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } return; case "#setvelocity": if(%clientToServerAdminLevel >= 2) { %name = GetWord(%cropped, 0); %id = getClientByName(%name); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %max = 5000; %x = Cap(mfloor(GetWord(%cropped, 1)), -%max, %max); %y = Cap(mfloor(GetWord(%cropped, 2)), -%max, %max); %z = Cap(mfloor(GetWord(%cropped, 3)), -%max, %max); %vel = %x @ " " @ %y @ " " @ %z; %id.player.setVelocity(%vel); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Set " @ %name @ " (" @ %id @ ") velocity to " @ %vel); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } return; case "#getskill": if(%clientToServerAdminLevel >= 2) { %name = GetWord(%cropped, 0); %id = getClientByName(%name); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %sid = GetWord(%cropped, 1); if($SkillDesc[%sid] !$= "") messageClient(%TrueClientId, 'RPGchatCallback', %name @ " (" @ %id @ ") " @ $SkillDesc[%sid] @ " is " @ %id.PlayerSkill[%sid]); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } return; case "#scheduleblock": if(%clientToServerAdminLevel >= 3) { %bname = GetWord(%cropped, 0); if(%bname !$= -1) { if(IsInCommaList($BlockList[%senderName], %bname)) { %delay = GetWord(%cropped, 1); if(%delay >= 0.05) { %repeat = mfloor(GetWord(%cropped, 2)); if(%repeat >= 0) { %rp = (%repeat+1); %arglist = getsubstr(%cropped, (strlen(%bname @ %delay @ %repeat @ " ")+1), 99999); if(GetWord(%arglist, 0) !$= "") %txt = "#call " @ %bname @ " " @ %arglist; else %txt = "#call " @ %bname; for(%sbi = 1; %sbi <= %rp; %sbi++) schedule(%delay * %sbi * 1000, "RPGchat(" @ %client @ ", 0, \"" @ %txt @ "\");"); //, \"" @ %senderName @ "\");"); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Block " @ %bname @ " scheduled for " @ %repeat @ " repeats at " @ %delay @ " second intervals."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Schedule repeat too low, minimum is 0"); } else messageClient(%TrueClientId, 'RPGchatCallback', "Schedule delay too low, minimum is 0.05"); } else if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "Block does not exist!"); } else messageClient(%TrueClientId, 'RPGchatCallback', "Incorrect syntax for #scheduleblock blockName delay numRepeat"); } return; case "#listonhear": if(%clientToServerAdminLevel >= 3) { if(%cropped !$= "") { %id = getClientByName(%cropped); if(%id !$= -1) { %index = GetEventCommandIndex(%id, "onHear"); if(%index !$= -1) { for(%i2 = 0; (%index2 = GetWord(%index, %i2)) !$= ""; %i2++) messageClient(%TrueClientId, 'RPGchatCallback', %id.nameBase @ " onHear " @ %index2 @ ": " @ $EventCommand[%id, %index2]); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Please specify player name."); } return; case "#clearonhear": if(%clientToServerAdminLevel >= 3) { %name = GetWord(%cropped, 0); %oindex = GetWord(%cropped, 1); if(%name !$= -1) { %id = getClientByName(%name); if(%id !$= -1) { %index = GetEventCommandIndex(%id, "onHear"); if(%index !$= -1) { for(%i2 = 0; (%index2 = GetWord(%index, %i2)) !$= ""; %i2++) { if(mfloor(%index2) $= mfloor(%oindex) || %oindex $= -1) { $EventCommand[%id, %index2] = ""; if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %id.nameBase @ " onHear " @ %index2 @ " cleared."); } } } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Incorrect syntax for #clearonhear name [index]. If index is missing or -1, all onHears for name are cleared."); } return; case "#getvelocity": if(%clientToServerAdminLevel >= 2) { %name = GetWord(%cropped, 0); %id = getClientByName(%name); if(mfloor(%id.adminLevel) >= mfloor(%clientToServerAdminLevel) && %id.nameBase !$= %senderName) messageClient(%TrueClientId, 'RPGchatCallback', "Could not process command: Target admin clearance level too high."); else if(%id !$= -1) { %vel = %id.player.getVelocity(); messageClient(%TrueClientId, 'RPGchatCallback', %name @ " (" @ %id @ ") velocity: " @ %vel); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid player name."); } return; case "#onconsider": if(%clientToServerAdminLevel >= 3) { if(%cropped !$= "") { %event = strstr(%cropped, ">"); if(%event !$= -1) { %info = getsubstr(%cropped, 0, %event); %cmd = getsubstr(%cropped, %event, 99999); } else %info = %cropped; %tag = GetWord(%info, 0); %object = $tagToObjectId[%tag]; if(%object !$= "") { %radius = GetWord(%info, 1); %keep = GetWord(%info, 2); if(%keep $= "true" || %keep $= "false") { %targetname = GetWord(%info, 3); %tid = getClientByName(%targetname); if(stricmp(%targetname, "all") $= 0 || %tid !$= -1) { if(%event !$= -1) { AddEventCommand(%object, %senderName, "onConsider " @ %radius @ " " @ %keep @ " " @ %targetname, %cmd); if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', "onConsider event set for tagname " @ %tag @ "(" @ %object @ ") for radius " @ %radius); } else messageClient(%TrueClientId, 'RPGchatCallback', "onConsider event definition failed."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid name. Please specify 'all' or target's name."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Specify 'true' or 'false'. 'true' means that the onConsider event won't be deleted after use."); } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid tagname."); } else messageClient(%TrueClientId, 'RPGchatCallback', "#onconsider tagname radius keep all/targetname"); } return; case "#listonconsider": if(%clientToServerAdminLevel >= 3) { if(%cropped !$= "") { %tag = GetWord(%cropped, 0); %object = $tagToObjectId[%tag]; if(%object !$= "") { %index = GetEventCommandIndex(%object, "onConsider"); if(%index !$= -1) { for(%i2 = 0; (%index2 = GetWord(%index, %i2)) !$= ""; %i2++) messageClient(%TrueClientId, 'RPGchatCallback', %tag @ " (" @ %object @ ") onConsider " @ %index2 @ ": " @ $EventCommand[%object, %index2]); } } else messageClient(%TrueClientId, 'RPGchatCallback', "Invalid tagname."); } else { %list = $DISlist; for(%p = strstr(%list, ","); (%p = strstr(%list, ",")) !$= -1; %list = getsubstr(%list, %p+1, 99999)) { %w = getsubstr(%list, 0, %p); %object = $tagToObjectId[%w]; %index = GetEventCommandIndex(%object, "onConsider"); if(%index !$= -1) messageClient(%TrueClientId, 'RPGchatCallback', %w @ ": " @ %index); } } } return; case "#clearonconsider": if(%clientToServerAdminLevel >= 3) { %tag = GetWord(%cropped, 0); %object = $tagToObjectId[%tag]; if(%object !$= "") { %oindex = GetWord(%cropped, 1); %index = GetEventCommandIndex(%object, "onConsider"); if(%index !$= -1) { for(%i2 = 0; (%index2 = GetWord(%index, %i2)) !$= ""; %i2++) { if(mfloor(%index2) $= mfloor(%oindex) || %oindex $= -1) { $EventCommand[%object, %index2] = ""; if(!%echoOff) messageClient(%TrueClientId, 'RPGchatCallback', %tag @ " (" @ %object @ ") onConsider " @ %index2 @ " cleared."); } } } } else messageClient(%TrueClientId, 'RPGchatCallback', "Incorrect tagname for #clearonconsider tagname [index]. If index is missing or -1, all onConsiders for name are cleared."); } return; } } //========== BOT TALK ====================================================================================== if(%botTalk) { //process TownBot talk %initTalk = ""; for(%i = 0; (%w = GetWord("hail hello hi greetings yo hey sup salutations g'day howdy", %i)) !$= ""; %i++) if(stricmp(%cropped, %w) $= 0) %initTalk = true; %clientPos = %TrueClientId.player.getTransform(); %closest = 5000000; for(%i = 0; (%id = GetWord($TownBotList, %i)) !$= ""; %i++) { %botPos = %id.getTransform(); %dist = VectorDist(%clientPos, %botPos); if(%dist < %closest) { %closest = %dist; %closestId = %id; %closestPos = %botPos; } } %aiName = %closestId.name;//hrm %aiType = %closestID.mtype; %displayName = %aiName; if(%closest <= ($maxAIdistVec + (%TrueClientId.PlayerSkill[$SkillSpeech] / 50)) && %TrueClientId.team $= %closestId.team) { if(%aitype $= "merchant") { //process merchant code %trigger[2] = "buy"; %trigger[3] = "yes"; if($state[%closestId, %TrueClientId] $= "") { if(%initTalk) { AI::sayLater(%TrueClientId, %closestId, "Did you come to see what items you can BUY?", true); $state[%closestId, %TrueClientId] = 1; } } else if($state[%closestId, %TrueClientId] $= 1) { if(strstr(%message, %trigger[2]) !$= -1) { $state[%closestId, %TrueClientId] = ""; SetupShop(%TrueClientId, %closestId); AI::sayLater(%TrueClientId, %closestId, "Take a look at what I have.", true); } if(strstr(%message, %trigger[3]) !$= -1) { $state[%closestId, %TrueClientId] = ""; SetupShop(%TrueClientId, %closestId); AI::sayLater(%TrueClientId, %closestId, "Take a look at what I have.", true); } } return; } else if(%aitype $= "bank") { //process banker code %trigger[2] = "yes"; %trigger[3] = "no"; if($state[%closestId, %TrueClientId] $= "") { if(%initTalk) { AI::sayLater(%TrueClientId, %closestId, "Would you like to access your bank account? (Yes or No)", true); $state[%closestId, %TrueClientId] = 1; } } if($state[%closestId, %TrueClientId] $= 1) { if(strstr(%message, %trigger[2]) !$= -1) { //deposit question AI::sayLater(%TrueClientId, %closestId, "Ok, here is what you have stored here.", true); setupbank(%TrueClientId, %closestId); $state[%closestId, %TrueClientId] = ""; } if(strstr(%message, %trigger[3]) !$= -1) { //withdraw question AI::sayLater(%TrueClientId, %closestId, "Good day, sir.", true); $state[%closestId, %TrueClientId] = ""; } } } if(%aitype $= "assassin") { //process assassin code %trigger[2] = "yes"; %trigger[3] = "no"; %trigger[4] = "buy"; if($state[%closestId, %TrueClientId] $= "") { if(%initTalk) { %highest = -1; %list = GetPlayerIdList(); for(%i = 0; (%id = GetWord(%list, %i)) !$= ""; %i++) { if(fetchData(%id, "bounty") $= "") storeData(%id, "bounty", 0); if(fetchData(%id, "bounty") > %highest) { %h = %id; %highest = fetchData(%id, "bounty"); } } %n = %h.nameBase; %c = fetchData(%h, "bounty"); AI::sayLater(%TrueClientId, %closestId, "The highest bounty is currently on " @ %n @ " for $" @ %c @ ". Give me someone's name and I'll tell you their bounty, unless you want to BUY something." , true); $state[%closestId, %TrueClientId] = 1; } } else if($state[%closestId, %TrueClientId] $= 1) { if(strstr(%message, %trigger[4]) !$= -1) { %cost = GetLCKcost(%TrueClientId); AI::sayLater(%TrueClientId, %closestId, "I will sell you one LCK point for $" @ %cost @ ". (YES/NO)", true); $state[%closestId, %TrueClientId] = 2; } else { %lowest = 99999; %h = ""; %list = GetPlayerIdList(); for(%i = 0; (%id = GetWord(%list, %i)) !$= ""; %i++) { %comp = stricmp(%cropped, %id.nameBase); if(%comp < 0) %comp = -%comp; if(%comp < %lowest) { %h = %id; %lowest = %comp; } } if(%h !$= "") { %l = fetchData(%h, "LVL"); %c = getFinalCLASS(%h); AI::sayLater(%TrueClientId, %closestId, "Are you talking about " @ %h.nameBase @ " the Level " @ %l @ " " @ %c @ "?", true); storeData(%TrueClientId, "tmpdata", %h); $state[%closestId, %TrueClientId] = 3; } else { AI::sayLater(%TrueClientId, %closestId, "I have no idea who you are talking about. Goodbye.", true); $state[%closestId, %TrueClientId] = ""; } } } else if($state[%closestId, %TrueClientId] $= 2) { if(strstr(%message, %trigger[2]) !$= -1) { %cost = GetLCKcost(%TrueClientId); if(fetchData(%TrueClientId, "COINS") >= %cost) { AI::sayLater(%TrueClientId, %closestId, "Here's your LCK point, thanks for your business.", true); GiveThisStuff(%TrueClientId, "LCK 1", true); storeData(%TrueClientId, "COINS", %cost, "dec"); RefreshAll(%TrueClientId); } else AI::sayLater(%TrueClientId, %closestId, "You can't afford this.", true); $state[%closestId, %TrueClientId] = ""; } else if(strstr(%message, %trigger[3]) !$= -1) { AI::sayLater(%TrueClientId, %closestId, "See ya.", true); $state[%closestId, %TrueClientId] = ""; } } else if($state[%closestId, %TrueClientId] $= 3) { if(strstr(%message, %trigger[2]) !$= -1) { %id = fetchData(%TrueClientId, "tmpdata"); if(%id !$= %TrueClientId) { %n = %id.nameBase; if(IsInCommaList(fetchData(%TrueClientId, "TempKillList"), %n)) { storeData(%TrueClientId, "TempKillList", RemoveFromCommaList(fetchData(%TrueClientId, "TempKillList"), %n)); AI::sayLater(%TrueClientId, %closestId, "I see you've killed " @ %n @ ". Here's your reward... " @ fetchData(%id, "bounty") @ " coins. Goodbye.", true); storeData(%TrueClientId, "COINS", fetchData(%id, "bounty"), "inc"); storeData(%id, "bounty", 0); %TrueClientId.player.playAudio(0, SoundMoney1); RefreshAll(%TrueClientId); } else AI::sayLater(%TrueClientId, %closestId, %n @ "'s bounty is currently at " @ fetchData(%id, "bounty") @ " coins. Goodbye.", true); } else AI::sayLater(%TrueClientId, %closestId, "You can't get a reward for killing yourself... idiot.", true); $state[%closestId, %TrueClientId] = ""; } else if(strstr(%message, %trigger[3]) !$= -1) { AI::sayLater(%TrueClientId, %closestId, "Well then, I have no idea who you are talking about. Goodbye.", true); storeData(%TrueClientId, "tmpdata", ""); $state[%closestId, %TrueClientId] = ""; } } } else if(%aitype $= "quest") { Schedule(0, game, "QUEST" @ %closestid.cFunction, %closestid.qobj, %closestid, %TrueClientId, %cropped); } else if(%aitype $= "Porter") { //process manager code %trigger[2] = "fight"; %trigger[3] = "refuse"; if($state[%closestId, %TrueClientId] $= "") { if(%initTalk) { //AI::sayLater(%TrueClientId, %closestId, "Hail. Welcome to the arena, where the strongest warriors in the land compete for dominance! You may chose to FIGHT or you may REFUSE.", true); AI::sayLater(%TrueClientId, %closestId, "Sorry, arena is currently closed. Come back later!", true); $state[%closestId, %TrueClientId] = 0; } } else if($state[%closestId, %TrueClientId] $= 1) { if(strstr(%message, %trigger[2]) !$= -1) { //FIGHT %x = AddToRoster(%TrueClientId); if(%x !$= 0) { //TeleportToMarker(%TrueClientId, "TheArena/WaitingRoomMarkers", 0, 1); $state[%closestId, %TrueClientId] = ""; MessageClient(%TrueClientId, 'RPGchatcallback', "You have entered the waiting room. To leave the wait room type #leavearena"); } else { //arena is full AI::sayLater(%TrueClientId, %closestId, "Sorry, the arena roster is full right now.", true); $state[%closestId, %TrueClientId] = ""; } } else if(strstr(%message, %trigger[3]) !$= -1) { AI::sayLater(%TrueClientId, %closestId, "That is too bad. However, we plan on some major improvements in the future, so I hope you choose to come fight later.", true); } } } else if(%aitype $= "botmaker") { //process botmaker code %trigger[2] = "yes"; %trigger[3] = "no"; if($state[%closestId, %TrueClientId] $= "") { if(%initTalk) { if(CountObjInCommaList($PetList) >= $maxPets) { AI::sayLater(%TrueClientId, %closestId, "I'm sorry but all my helpers are already on duty.", true); $state[%closestId, %TrueClientId] = ""; } else if(CountObjInCommaList(fetchData(%TrueClientId, "PersonalPetList")) >= $maxPetsPerPlayer) { AI::sayLater(%TrueClientId, %closestId, "I'm sorry but you have too many helpers currently at your disposal.", true); $state[%closestId, %TrueClientId] = ""; } else { AI::sayLater(%TrueClientId, %closestId, "I have all sorts of helpers at my disposal. Tell me which class you are interested in.", true); $state[%closestId, %TrueClientId] = 1; } } } else if($state[%closestId, %TrueClientId] $= 1) { %class = GetWord(%cropped, 0); %gender = GetWord(%cropped, 1); %defaults = $BotInfo[%aiName, DEFAULTS, %class]; if(%gender $= -1) %gender = "Male"; if(stricmp(%gender, "male") $= 0) { %gender = "Male"; %gflag = true; } else if(stricmp(%gender, "female") $= 0) { %gender = "Female"; %gflag = true; } if(stricmp(%class, "mage") $= 0) %class = "Mage"; else if(stricmp(%class, "fighter") $= 0) %class = "Fighter"; else if(stricmp(%class, "paladin") $= 0) %class = "Paladin"; else if(stricmp(%class, "thief") $= 0) %class = "Thief"; else if(stricmp(%class, "bard") $= 0) %class = "Bard"; else if(stricmp(%class, "ranger") $= 0) %class = "Ranger"; else if(stricmp(%class, "cleric") $= 0) %class = "Cleric"; else if(stricmp(%class, "druid") $= 0) %class = "Druid"; if(%defaults !$= "") { if(%gflag) { %lvl = GetStuffStringCount(%defaults, "LVL"); %nc = mpow(%lvl, 2) * 3; $tmpdata[%TrueClientId, 1] = %class; $tmpdata[%TrueClientId, 2] = %gender; $tmpdata[%TrueClientId, 3] = %nc; //just so the equation is only in one place. AI::sayLater(%TrueClientId, %closestId, "My " @ %class @ "s are Level " @ %lvl @ ", and will cost you " @ %nc @ " coins. [yes/no]", true); $state[%closestId, %TrueClientId] = 2; } else { AI::sayLater(%TrueClientId, %closestId, "Invalid gender. Use 'male' or 'female'.", true); $state[%closestId, %TrueClientId] = ""; } } else { AI::sayLater(%TrueClientId, %closestId, "Invalid class. Use any of the following: mage fighter paladin ranger thief bard cleric druid.", true); $state[%closestId, %TrueClientId] = ""; } } else if($state[%closestId, %TrueClientId] $= 2) { if(strstr(%message, %trigger[2]) !$= -1) { %nc = $tmpdata[%TrueClientId, 3]; if(%nc <= 0) { AI::sayLater(%TrueClientId, %closestId, "Invalid request. Your transaction has been cancelled.~wError_Message.wav", true); $state[%closestId, %TrueClientId] = ""; } else if(%nc <= fetchData(%TrueClientId, "COINS")) { %class = $tmpdata[%TrueClientId, 1]; %gender = $tmpdata[%TrueClientId, 2]; %defaults = $BotInfo[%aiName, DEFAULTS, %class]; %lvl = GetStuffStringCount(%defaults, "LVL"); storeData(%TrueClientId, "COINS", %nc, "dec"); %closestId.player.playAudio(0, SoundMoney1); RefreshAll(%TrueClientId); %n = ""; for(%i = 0; (%a = GetWord($BotInfo[%aiName, NAMES], %i)) !$= ""; %i++) { if(getClientByName(%a) $= -1) { %n = %a; break; } } if(%n $= "") %n = "generic"; $BotEquipment[generic] = "CLASS " @ %class @ " " @ %defaults; %an = AI::helper("generic", %n, "TempSpawn " @ $BotInfo[%aiName, DESTSPAWN].player.getPosition() @ " " @ GameBase::getTeam(%TrueClientId)); %id = AI::getId(%an); %id.sex = %gender; ChangeRace(%id, "Human"); storeData(%id, "tmpbotdata", %TrueClientId); storeData(%id, "botAttackMode", 2); schedule(55*60*1000, "Pet::BeforeTurnEvil(" @ %id @ ");"); schedule(60*60*1000, "Pet::TurnEvil(" @ %id @ ");"); $PetList = AddToCommaList($PetList, %id); storeData(%TrueClientId, "PersonalPetList", AddToCommaList(fetchData(%TrueClientId, "PersonalPetList"), %id)); storeData(%id, "petowner", %TrueClientId); AI::sayLater(%TrueClientId, %closestId, "This is " @ %n @ ", a Level " @ %lvl @ " " @ %class @ "! He is at your disposal. He will follow you around and fight for you for the next hour.", true); $state[%closestId, %TrueClientId] = ""; } else { AI::sayLater(%TrueClientId, %closestId, "You don't have enough coins. Goodbye.", true); $state[%closestId, %TrueClientId] = ""; } } else if(strstr(%message, %trigger[3]) !$= -1) { AI::sayLater(%TrueClientId, %closestId, "As you wish. Goodbye.", true); $state[%closestId, %TrueClientId] = ""; } } } else if(%aitype$= "Boat") { if($state[%closestId, %TrueClientId] $= "") { if(%inittalk) { AI::sayLater(%TrueClientId, %closestId, "Hello traveller! Welcome to my boat shop, would you like to RENT a boat for 100 coins?"); } else if(strstr(%message, "rent") !$= -1) { if(fetchdata(%TrueClientId, "COINS") >= 100) { %obj = Boat @ %closestid.shop; if(isobject(%obj)) { %flag = false; for(%i = 0; %i < %obj.getCount(); %i++) { %zobj = %obj.getObject(%i); InitContainerRadiusSearch(VectorAdd(%zobj.getWorldBoxCenter(), "-2 -2 -2"), "4 4 4", $TypeMasks::VehicleObjectType ); %ret = containerSearchNext(); if(%ret == 0) { %flag = true; break; } } if(%flag) { if(%TrueClientId.boat) { %TrueClientId.Boat.delete(); } AI::sayLater(%TrueClientId, %closestId, "Ok here you go!"); %spawnpos = %zobj.getWorldBoxCenter(); %boat = new HoverVehicle() { dataBlock = RPGBoat; }; %waterheight = getword(VectorAdd(GlobalWater.position, GlobalWater.scale) , 2); %spawnpos = GetWord(%spawnpos, 0) SPC Getword(%spawnpos, 1) SPC %waterheight+3; %ztran = %zobj.getTransform(); //%zrot = getword(%ztran, 3) SPC getword(%ztran, 4) SPC getword(%ztran, 5) SPC getword(%ztran, 6); %zrot = getWords(%ztran, 3, 5); %angle = 1; %boat.setTransform(%spawnpos SPC %zrot SPC %angle); MissionCleanup.add(%boat); %boat.owner = %trueclientid; %zobj.full = true; %trueclientid.boat = %boat; StoreData(%TrueClientId, "COINS", 100, "dec"); } else AI::sayLater(%TrueClientId, %closestId, "Sorry I do not have any spots availible, come back later."); } else AI::sayLater(%TrueClientId, %closestId, "Sorry I do not have any spots availible, come back later. [ERROR]"); } else AI::sayLater(%TrueClientId, %closestId, "Come back when you have enough money!"); } } } else if(%aiType $= "Guild") { //process guildmaster code if($state[%closestId, %TrueClientId] $= "") { if(%initTalk) { if(fetchData(%TrueClientId, "LVL") >= 25) { AI::sayLater(%TrueClientId, %closestId, "Hello adventurer. Here is a list of the guilds currently registered in this land.", true); $state[%closestId, %TrueClientId] = ""; CommandToClient(%TrueClientId, 'OpenGuildGUI'); } else { AI::sayLater(%TrueClientId, %closestId, "Come back when you are at least level 25. Goodbye.", true); $state[%closestId, %TrueClientId] = ""; } } } } } else { //This condition occurs when you are talking from too far of any TownBot. All states are cleared here. //This means that potentially, you could initiate a conversation with the banker, travel for an hour //WITHOUT saying a word, come back and continue the conversation. As soon as you speak in a way that //townbots hear you (#say, #shout, #tell) and are too far from them, all conversations are reset. for(%i = 0; (%id = GetWord($TownBotList, %i)) !$= ""; %i++) $state[%id, %TrueClientId] = ""; } } } function AI::sayLater(%clientID, %aiId, %message, %all) { %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %cl = ClientGroup.getObject(%icl); %talkingPos = %aiId.getPosition(); if(!isobject(%cl.player)) continue; %receivingPos = %cl.player.getPosition(); %distVec = VectorDist(%talkingPos, %receivingPos); if(%distVec <= $maxSAYdistVec+5) { //%newmsg = FadeMsg(%cropped, %distVec, $maxSAYdistVec); %newmsg = %cropped; messageClient(%cl, 'RPGchatCallback', %aiID.name @ " says, \"" @ %message @ "\""); } } //messageClient(%TrueClientId, 'RPGchatCallback', "You say, \"" @ %cropped @ "\""); //UseSkill(%TrueClientId, $SkillSpeech, true, true); //%botTalk = true; } function radiusAllExcept(%except1, %except2, %message) { %epos1 = %except1.player.getPosition(); %epos2 = %except2.player.getPosition(); %count = ClientGroup.getCount(); for(%icl = 0; %icl < %count; %icl++) { %cl = ClientGroup.getObject(%icl); if(%cl.player) { %clpos = %cl.player.getPosition(); %dist1 = VectorDist(%clpos, %epos1); %dist2 = VectorDist(%clpos, %epos2); if(%cl !$= %except1 && %cl !$= %except2 && !IsDead(%cl)) { if(%dist1 <= $maxSAYdistVec || %dist2 <= $maxSAYdistVec) messageClient(%cl, 'radiusAllExcept', %message); } } } } function FadeMsg(%txt, %dist, %max) { if(%dist <= %max) return %txt; else { for(%i = 0; (%z = GetWord(%txt, %i)) !$= ""; %i++) %ntxt = %ntxt @ %z; %lntxt = strlen(%ntxt); %x = %dist - %max; %amt = round((%x / %max) * %lntxt); %txt = BuildDotString(%txt, %amt); return %txt; } } function BuildDotString(%txt, %n) { %len = strlen(%txt); //i currently dont really know any other way to put a certain amount of characters in a string in a random fashion //other than to "sprinkle" them on until the count is correct. Maybe someday someone will decide to rework this //function and make it more CPU friendly. Right now this method sucks. %retry = 0; for(%i = %n; %i > 0; %i) { %p = mfloor(getRandom() * %len); %a = getsubstr(%txt, %p, 1); if(%a !$= " " && %a !$= ".") { %txt = getsubstr(%txt, 0, %p) @ "." @ getsubstr(%txt, %p+1, 99999); %i--; %retry = 0; } else %retry++; if(%retry > 10) break; } return %txt; } function ClearBlockData(%name, %block) { for(%i = 1; $BlockData[%name, %block, %i] !$= ""; %i++) $BlockData[%name, %block, %i] = ""; } function ManageBlockOwnersList(%name) { %client = getClientByName(%name); if(CountObjInCommaList($BlockList[%name]) > 0) { if(!IsInCommaList($BlockOwnersList, %name)) { $BlockOwnersList = AddToCommaList($BlockOwnersList, %name); if(%name !$= "Server") $BlockOwnerAdminLevel[%name] = mfloor(%client.adminLevel); } } else { $BlockOwnersList = RemoveFromCommaList($BlockOwnersList, %name); if(%name !$= "Server") $BlockOwnerAdminLevel[%name] = ""; } return $BlockOwnersList; } function ParseBlockData(%bd, %victimId, %killerId) { //the passed variables MUST BE IN COMMALIST FORMAT! %vtype[1] = "^victimName"; %vtype[2] = "^victimId"; %vtype[3] = "^victimPos"; %vtype[4] = "^victimRot"; %vtype[5] = "^victimZoneId"; %vtype[6] = "^victimZoneType"; %vtype[7] = "^victimZoneDesc"; %vtype[8] = "^victimClass"; %vtype[9] = "^victimLevel"; %vtype[10] = "^victimX"; %vtype[11] = "^victimY"; %vtype[12] = "^victimZ"; %vtype[13] = "^victimR1"; %vtype[14] = "^victimR2"; %vtype[15] = "^victimR3"; %vtype[16] = "^victimR4"; %vtype[17] = "^victimCoins"; %vtype[18] = "^victimBank"; %vtype[19] = "^victimVelX"; %vtype[20] = "^victimVelY"; %vtype[21] = "^victimVelZ"; %vtype[22] = "^killerName"; %vtype[23] = "^killerId"; %vtype[24] = "^killerPos"; %vtype[25] = "^killerRot"; %vtype[26] = "^killerZoneId"; %vtype[27] = "^killerZoneType"; %vtype[28] = "^killerZoneDesc"; %vtype[29] = "^killerClass"; %vtype[30] = "^killerLevel"; %vtype[31] = "^killerX"; %vtype[32] = "^killerY"; %vtype[33] = "^killerZ"; %vtype[34] = "^killerR1"; %vtype[35] = "^killerR2"; %vtype[36] = "^killerR3"; %vtype[37] = "^killerR4"; %vtype[38] = "^killerCoins"; %vtype[39] = "^killerBank"; %vtype[40] = "^killerVelX"; %vtype[41] = "^killerVelY"; %vtype[42] = "^killerVelZ"; if(%victimId !$= "") { %vpos = %victimId.player.getPosition(); %vrot = %victimId.player.rotation; %vvel = %victimId.player.getVelocity(); %var[1] = %victimId.nameBase; %var[2] = %victimId; %var[3] = %vpos; %var[4] = %vrot; %var[5] = fetchData(%victimId, "zone"); %var[6] = Zone::getType(fetchData(%victimId, "zone")); %var[7] = Zone::getDesc(fetchData(%victimId, "zone")); %var[8] = fetchData(%victimId, "CLASS"); %var[9] = fetchData(%victimId, "LVL"); %var[10] = GetWord(%vpos, 0); %var[11] = GetWord(%vpos, 1); %var[12] = GetWord(%vpos, 2); %var[13] = GetWord(%vrot, 0); %var[14] = GetWord(%vrot, 1); %var[15] = GetWord(%vrot, 2); %var[16] = GetWord(%vrot, 3); %var[17] = fetchData(%victimId, "COINS"); %var[18] = fetchData(%victimId, "BANK"); %var[19] = GetWord(%vvel, 0); %var[20] = GetWord(%vvel, 1); %var[21] = GetWord(%vvel, 2); } if(%killerId !$= "") { %kpos = %killerId.player.getPosition(); %krot = %killerId.player.rotation; %kvel = %killerId.player.getVelocity(); %var[22] = %killerId.nameBase; %var[23] = %killerId; %var[24] = %kpos; %var[25] = %krot; %var[26] = fetchData(%killerId, "zone"); %var[27] = Zone::getType(fetchData(%killerId, "zone")); %var[28] = Zone::getDesc(fetchData(%killerId, "zone")); %var[29] = fetchData(%killerId, "CLASS"); %var[30] = fetchData(%killerId, "LVL"); %var[31] = GetWord(%kpos, 0); %var[32] = GetWord(%kpos, 1); %var[33] = GetWord(%kpos, 2); %var[34] = GetWord(%krot, 0); %var[35] = GetWord(%krot, 1); %var[36] = GetWord(%krot, 2); %var[37] = GetWord(%krot, 3); %var[38] = fetchData(%killerId, "COINS"); %var[39] = fetchData(%killerId, "BANK"); %var[40] = GetWord(%kvel, 0); %var[41] = GetWord(%kvel, 1); %var[42] = GetWord(%kvel, 2); } for(%i = 1; %vtype[%i] !$= ""; %i++) %bd = strreplace(%bd, %vtype[%i], %var[%i], true); return %bd; } function checkrecall(%client, %oldpos) { if(%oldpos $= %client.player.getposition()) FellOffMap(%client); storeData(%client, "tmprecall", false); } function endsurge(%client) { CalculateBonusState(%client); debugBonusState(%client);//2 //storedata(%client, "surge", false); schedule(15000, %client, "resetblocksurge", %client); weightcall(%client, false); MessageClient(%client, 'SurgeOff', "You are no longer surging."); } function resetblocksurge(%client) { storedata(%client, "blocksurge", false); } function endberserk(%client) { storedata(%client, "surge", false); schedule(15000, %client, "resetblockberserk", %client); weightcall(%client, false); MessageClient(%client, 'BerserkOff', "You are no longer berserk."); } function resetblockberserk(%client) { storedata(%client, "blockberserk", false); } function domug(%client, %id, %damloc) { %fail = true; if((%reason = AllowedToSteal(%client)) $= "true") { if(SkillCanUse(%client, "#mug")) { if(%id.player.getClassName() $= "Player" ) { //%damloc = %id.player.getDamageLocation(%pos); %tciskill = %client.PlayerSkill[$SkillStealing]; %idskill = %id.playerSkill[$skillStealing]; //%TrueClientId.stealType = 1; //SetupInvSteal(%TrueClientId, %id); //attempt to steal %inv = fetchdata(%id, "inventory"); %num = getwordcount(%inv); //randomly select an item %itemid = GetWord(%inv, getrandom(0,%num-1)); if(%itemid) { if($InvInfo[%itemid, equipped]) %fail = true; else { %item = getItem(%itemid); %backfront = getword(%damloc, 1); if(%backfront $= "back_right" || %backfront $= "back" || %backfront $= "back_left" || %backfront $= "middle_back") %multi = 1; else %multi = 0.5;//odds of stealing 1/2 if(!id.isAIControlled()) %oddcalc = %num - 10; else %oddcalc = %num; if(%oddcalc < 0) %oddcalc = 0; %ooddcalc = %oddcalc * %tciskill * %multi; %doddcalc = 35 * %idskill + 10; %success = getRandom(-%doddcalc, %ooddcalc); if(%success > 0) %fail = false; else %fail = true; } //echo("MUG:" SPC -%doddcalc SPC %ooddcalc SPC %success SPC %tciskill SPC %idskill); if(!%fail) { RemoveFromInventory(%id, %itemid); AddToInventory(%client, %itemid); messageClient(%client, 'RPGchatCallback', "You sucessfully stole a" SPC GetFullItemName(%itemid)); //MessageClient(%client, 'RPGchatcallback', "DEBUG, ODDS TO STEAL:" SPC -%doddcalc SPC " to " SPC %ooddcalc SPC "NUMBER:" SPC %success); } else { messageClient(%client, 'RPGchatCallback', "You failed to steal from" SPC %id.rpgname @ "!"); //MessageClient(%client, 'RPGchatcallback', "DEBUG, ODDS TO STEAL:" SPC -%doddcalc SPC " to " SPC %ooddcalc SPC "NUMBER:" SPC %success); messageClient(%id, 'RPGchatCallback', %TrueClientid.rpgname SPC "failed to steal from you!"); //failed to steal, notify victim? lashback? } } else messageClient(%client, 'RPGchatCallback', "Your target has no items on him"); } } else { messageClient(%client, 'RPGchatCallback', "You can't pickpocket because you lack the necessary skills."); UseSkill(%TrueClientId, $SkillStealing, false, true); } } else messageClient(%client, 'RPGchatCallback', %reason); return !%fail; }