diff --git a/ArkChat/IRCClient.cpp b/ArkChat/IRCClient.cpp
new file mode 100644
index 0000000000000..560ae28759cd7
--- /dev/null
+++ b/ArkChat/IRCClient.cpp
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gamePCH.h"
+#include "IRCClient.h"
+#include "../game/World/World.h"
+#include "../Globals/ObjectMgr.h"
+#include "../game/Maps/MapManager.h"
+
+#include "../../../../dep/acelite/ace/Singleton.h"
+//INSTANTIATE_SINGLETON_1( IRCClient );
+
+#ifdef WIN32
+ #define Delay(x) Sleep(x)
+#else
+ #define Delay(x) sleep(x / 1000)
+#endif
+// IRCClient Constructor
+IRCClient::IRCClient()
+{
+ for(int i = 0;i > 5;i++)
+ sIRC.Script_Lock[i] = false;
+}
+// IRCClient Destructor
+IRCClient::~IRCClient(){}
+
+// ZThread Entry This function is called when the thread is created in Master.cpp (trinitycore)
+void IRCClient::run()
+{
+ sIRC.iLog.WriteLog(" %s : ****** ArkCORE With ArkChat Has Been Started ******", sIRC.iLog.GetLogDateTimeStr().c_str());
+
+ // before we begin we wait a few
+ // mangos is still starting up.
+ ACE_Based::Thread::Sleep(500);
+ sLog->outString("\n%s\n%s\n%s\n%s",
+ "***************************************",
+ "** ArkChat Threaded IRC Client **",
+ "** With Enhanced GM Control. **",
+ "***************************************");
+ sLog->outString("****** ArkChat: %s ********", sIRC._Mver.c_str());
+ int cCount = 1;
+ // Clean Up MySQL Tables
+ sLog->outString("*** ArkChat: Cleaning Up Inchan Table*");
+ WorldDatabase.PExecute("DELETE FROM `IRC_Inchan`");
+ sIRC._Max_Script_Inst = 0;
+ // Create a loop to keep the thread running untill active is set to false
+ while(sIRC.Active && !World::IsStopped())
+ {
+ // Initialize socket library
+ if(this->InitSock())
+ {
+ // Connect To The IRC Server
+ sLog->outString("*** ArkChat: Connecting to %s Try # %d ******", sIRC._Host.c_str(), cCount);
+ if(this->Connect(sIRC._Host.c_str(), sIRC._Port))
+ {
+ // On connection success reset the connection counter
+ cCount = 0;
+ sLog->outString("*** ArkChat: Connected And Logging In*");
+ // Login to the IRC server
+ if(this->Login(sIRC._Nick, sIRC._User, sIRC._Pass))
+ {
+ sLog->outString("*** ArkChat: Logged In And Running!! *");
+ // While we are connected to the irc server keep listening for data on the socket
+ while(sIRC.Connected && !World::IsStopped()){ sIRC.SockRecv(); }
+ }
+ sLog->outString("*** ArkChat: Connection To IRC Server Lost! ***");
+ }
+ // When an error occures or connection lost cleanup
+ Disconnect();
+ // Increase the connection counter
+ cCount++;
+ // if MAX_CONNECT_ATTEMPT is reached stop trying
+ if(sIRC._MCA != 0 && cCount == sIRC._MCA)
+ sIRC.Active = false;
+ // If we need to reattempt a connection wait WAIT_CONNECT_TIME milli seconds before we try again
+ if(sIRC.Active)
+ ACE_Based::Thread::Sleep(sIRC._wct);
+ }
+ else
+ {
+ // Socket could not initialize cancel
+ sIRC.Active = false;
+ sLog->outError("** ArkChat: Could not initialize socket");
+ }
+ }
+ while(!World::IsStopped()){};
+}
+
+std::string IRCClient::GetChatLine(int nItem)
+{
+ return sIRC.ILINES[nItem];
+}
diff --git a/ArkChat/IRCClient.h b/ArkChat/IRCClient.h
new file mode 100644
index 0000000000000..928dc5e613274
--- /dev/null
+++ b/ArkChat/IRCClient.h
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _IRC_CLIENT_H
+#define _IRC_CLIENT_H
+
+#include "../../../../dep/acelite/ace/Singleton.h"
+#include "../Entities/Player/Player.h"
+#include "IRCLog.h"
+#include "IRCCmd.h"
+
+using namespace std;
+// The maximum ammount of channels used, must be >= config option
+#define MAX_CONF_CHANNELS 10
+#define MAX_CHAT_LINES 10
+// time we need to wait before we try another connecton attempt
+// Default is 30 seconds
+#define MAX_SCRIPT_INST 10
+// CLINES is used for the default chatlines
+// By using the GetChatLine function its easier and faster
+// to receieve the line you need.
+enum CLINES
+{
+ IRC_WOW = 0,
+ WOW_IRC = 1,
+ JOIN_WOW = 2,
+ JOIN_IRC = 3,
+ LEAVE_WOW = 4,
+ LEAVE_IRC = 5,
+ CHANGE_NICK = 6
+};
+// CACTION is used by the Handle_WoW_Channel function
+// this function is called in channel.h when a player
+// joins or leave a channel inside the client.
+enum CACTION
+{
+ CHANNEL_JOIN,
+ CHANNEL_LEAVE,
+};
+
+enum script_Names
+{
+ MCS_Players_Online = 0,
+};
+
+// IRCClient main class
+class IRCClient : public ACE_Based::Runnable
+{
+ public:
+ // IRCClient Constructor
+ IRCClient();
+ // IRCClient Destructor
+ ~IRCClient();
+ // ZThread Entry
+ void run();
+ public:
+ // AH Function
+ void AHFunc(uint64 itmid, std::string itmnme, std::string plname, uint32 faction);
+ //bool BeenToGMI(float posx, float posy, std::string player, std::string from);
+ // IRCClient active
+ bool Active;
+ // Connected to IRC
+ bool Connected;
+ // Socket indentifier
+ int SOCKET;
+ fd_set sfdset;
+ // Send data to IRC, in addition the endline is added \n
+ bool SendIRC(std::string data);
+ // This function is called in ChatHandler.cpp and processes the chat from game to IRC
+ void Send_WoW_IRC(Player *plr, std::string Channel, std::string Msg);
+ // Sends a message to all players on the specified channel
+ void Send_WoW_Channel(const char *channel, std::string chat);
+ // Send a system message to all players
+ void Send_WoW_System(std::string Message);
+ // Send a message to the specified IRC channel
+ void Send_IRC_Channel(std::string sChannel, std::string sMsg, bool NoPrefix = false, std::string nType = "PRIVMSG");
+ // Sends a message to all IRC Channels
+ void Send_IRC_Channels(std::string sMsg);
+ std::string MakeMsg(std::string msg, std::string var, std::string val)
+ {
+ std::size_t start = msg.find(var);
+ if (start != std::string::npos)
+ msg.replace(start, var.length(), val);
+ return msg;
+ }
+ void Send_WoW_Player(string sPlayer, string sMsg);
+ void Send_WoW_Player(Player *plr, string sMsg);
+
+ // This function is called in Channel.cpp and processes Join/leave messages
+ void Handle_WoW_Channel(std::string Channel, Player *plr, int nAction);
+ void ResetIRC();
+ public:
+ void AutoJoinChannel(Player *plr);
+
+ public:
+ bool Script_Lock[5];
+ bool _AmiOp;
+
+ public:
+ string _Mver;
+ // IRC Server host
+ string _Host;
+ // IRC Server Port
+ int _Port;
+ // IRC Username
+ string _User;
+ // IRC Password
+ string _Pass;
+ // IRC Nickname
+ string _Nick;
+ //Password for in-game channel
+ std::string _irc_pass[MAX_CONF_CHANNELS];
+ // Authentication type
+ int _Auth;
+ string _Auth_Nick;
+ // IRC Connect code
+ string _ICC;
+ // IRC Default channel
+ string _defchan;
+ // IRC Leave Default channel
+ int _ldefc;
+ // Wait Connect Time
+ int _wct;
+ // BotMask Options
+ int Botmask;
+ // Status Channel
+ int Status;
+ // Announce Channel
+ int anchn;
+ int autoanc;
+ // IRC Channel count
+ int _chan_count;
+ // IRC Channel list
+ // Array to store our IRC channels
+ // each element will corrospond
+ // with _wow_chan array below.
+ std::string _irc_chan[MAX_CONF_CHANNELS];
+ // Game Channel list
+ std::string _wow_chan[MAX_CONF_CHANNELS];
+ // AutoJoin Options
+ int ajoin;
+ string ajchan;
+ // Online Command Max Results
+ int onlrslt;
+ // Channel OnJoin/Restart/Kick Messages
+ string JoinMsg;
+ string RstMsg;
+ string kikmsg;
+ // Misc Options
+ string ojGM1;
+ string ojGM2;
+ string ojGM3;
+ string ojGM4;
+ string ojGM5;
+ string logfile;
+ string logchan;
+ string logchanpw;
+ int logmask;
+ int games;
+ int gmlog;
+ // IRC Commands Security Level
+ int CACCT;
+ int CBAN;
+ int CCHAN;
+ int CCHAR;
+ int CFUN;
+ int CHELP;
+ int CINCHAN;
+ int CINFO;
+ int CITEM;
+ int CJAIL;
+ int CKICK;
+ int _KILL;
+ int CLEVEL;
+ int CLOOKUP;
+ int CMONEY;
+ int CMUTE;
+ int CONLINE;
+ int CPM;
+ int CRECONNECT;
+ int CRELOAD;
+ int CREVIVE;
+ int CSAVEALL;
+ int CSERVERCMD;
+ int CSHUTDOWN;
+ int CSPELL;
+ int CSYSMSG;
+ int CTELE;
+ int CTOP;
+ int CWHO;
+ // BotMask
+ int BOTMASK;
+ // Max connect attempt
+ int _MCA;
+ // Auto rejoin when kicked from irc
+ int _autojoinkick;
+ // IRC Command prefix
+ string _cmd_prefx;
+ int _op_gm;
+ int _op_gm_lev;
+ // Array that contains our chatlines from the conf file
+ // To increase this value change the MAX_CHAT_LINE define above
+ // Make sure the number of elements must match your items
+ // (remeber this starts at 0 so 0..9 is 10 items)
+ // and that you load the line in the LoadConfig function.
+ string ILINES[MAX_CHAT_LINES];
+ string GetChatLine(int nItem);
+
+ int _Max_Script_Inst;
+ // MAX_SCRIPT_INST
+
+ IRCLog iLog;
+
+private:
+ // Returns default chatline based on enum CLINES
+ // Initialize socket library
+ bool InitSock();
+ // Connect to IRC Server
+ bool Connect(const char *cHost, int nPort);
+ // Login to IRC Server
+ bool Login(std::string sNick, std::string sUser, std::string sPass);
+ // Send raw data to IRC
+ bool SendData(const char *data);
+ // Disconnect from IRC and cleanup socket
+ void Disconnect();
+ // Processes the data receieved from IRC
+ void Handle_IRC(std::string sData);
+ // Receieves data from the socket.
+ void SockRecv();
+};
+#endif
+#define sIRC (*ACE_Singleton::instance())
diff --git a/ArkChat/IRCCmd.cpp b/ArkChat/IRCCmd.cpp
new file mode 100644
index 0000000000000..dc1c41c48abef
--- /dev/null
+++ b/ArkChat/IRCCmd.cpp
@@ -0,0 +1,935 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gamePCH.h"
+#include "IRCCmd.h"
+#include "IRCClient.h"
+#include "Database/DatabaseEnv.h"
+#include "../Globals/ObjectMgr.h"
+#include "../Accounts/AccountMgr.h"
+#include "../Maps/MapManager.h"
+#include "../World/World.h"
+// Constructor
+IRCCmd::IRCCmd(){}
+// Destructor
+IRCCmd::~IRCCmd(){}
+
+std::string IRCCmd::MakeUpper(std::string Channel)
+{
+ std::string tmpchan = Channel;
+ std::transform(tmpchan.begin(), tmpchan.end(), tmpchan.begin(), towupper);
+ return tmpchan;
+}
+bool IRCCmd::ParamsValid(_CDATA *CD, int pCnt)
+{
+ CD->PCOUNT = pCnt;
+ if(CD->PARAMS.size() == 0)
+ return false;
+ return ValidParams(CD->PARAMS, pCnt);
+}
+
+int IRCCmd::ParamsValid(_CDATA *CD, int pCnt, int rLev)
+{
+ //CD->PCOUNT = pCnt;
+ if(!CanUse(CD->USER, rLev))
+ return E_AUTH;
+ else if(pCnt == 0)
+ return E_OK;
+ else if(CD->PARAMS.size() == 0)
+ return E_SIZE;
+ else if(!ValidParams(CD->PARAMS, pCnt))
+ return E_SIZE;
+ return E_OK;
+}
+
+// This function checks if chat from irc is a command or not
+// return true on yes and false on no
+bool IRCCmd::IsValid(std::string USER, std::string FROM, std::string CHAT, std::string TYPE)
+{
+ // If the first line of our chat is the command prefix we have a command
+ if(CHAT.substr(0, 1) == sIRC._cmd_prefx && CHAT.size() > 1 )
+ {
+ _CDATA CDATA;
+ bool cValid = false;
+ bool AuthValid = true;
+ bool dontlog = true;
+ std::string* _PARAMS = getArray(CHAT, 2);
+ CDATA.USER = USER;
+ CDATA.FROM = FROM;
+ CDATA.TYPE = TYPE;
+ CDATA.PCOUNT = 0;
+ CDATA.CMD = MakeUpper(_PARAMS[0].substr(1, _PARAMS[0].size() - 1));
+ CDATA.PARAMS = _PARAMS[1];
+ if(CDATA.CMD == "LOGIN")
+ {
+ if(FROM == sIRC._Nick)
+ {
+ if(ParamsValid(&CDATA, 2))
+ Handle_Login(&CDATA);
+ else
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"login )", true, "ERROR");
+ }
+ else
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Please Send A PM To Login!", true, "ERROR");
+ if(GetLevel(USER) >= sIRC.gmlog)
+ dontlog = false;
+ cValid = true;
+ }
+ else if(CDATA.CMD == "LOGOUT")
+ {
+ if(FROM == sIRC._Nick)
+ {
+ Handle_Logout(&CDATA);
+ }
+ else
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Please Send A PM To Logout!", true, "ERROR");
+ cValid = true;
+ }
+ else if(CDATA.CMD == "ACCT")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CACCT))
+ {
+ case E_OK:
+ Account_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"acct <(un)lock/mail/pass/rename/gmlevel> )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "BAN")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CBAN))
+ {
+ case E_OK:
+ Ban_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"ban )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "CHAN")
+ {
+ switch(ParamsValid(&CDATA, 1, sIRC.CCHAN))
+ {
+ case E_OK:
+ Chan_Control(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"chan )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "CHAR")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CCHAR))
+ {
+ case E_OK:
+ Char_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"char )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "FUN")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CFUN))
+ {
+ case E_OK:
+ Fun_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"fun )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "HELP")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CHELP))
+ {
+ case E_OK:
+ Help_IRC(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"help )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "INCHAN")
+ {
+ switch(ParamsValid(&CDATA, 1, sIRC.CINCHAN))
+ {
+ case E_OK:
+ Inchan_Server(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"inchan )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "INFO")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CINFO))
+ {
+ case E_OK:
+ Info_Server(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"info )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "WG")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CINFO))
+ {
+ case E_OK:
+ Info_WG(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"wg )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "ITEM")
+ {
+ CDATA.PCOUNT = 3;
+ switch(ParamsValid(&CDATA, 2, sIRC.CITEM))
+ {
+ case E_OK:
+ Item_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"item )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "JAIL")
+ {
+ CDATA.PCOUNT = 3;
+ switch(ParamsValid(&CDATA, 1, sIRC.CJAIL))
+ {
+ case E_OK:
+ Jail_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"jail )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "KICK")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 1, sIRC.CKICK))
+ {
+ case E_OK:
+ Kick_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"kick )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "KILL")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 1, sIRC._KILL))
+ {
+ case E_OK:
+ Kill_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"kill )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "LEVEL")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 2, sIRC.CLEVEL))
+ {
+ case E_OK:
+ Level_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"level )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "LOOKUP")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 2, sIRC.CLOOKUP))
+ {
+ case E_OK:
+ Lookup_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"lookup )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "MONEY")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 2, sIRC.CMONEY))
+ {
+ case E_OK:
+ Money_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"money <(-)Money> )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "MUTE")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CMUTE))
+ {
+ case E_OK:
+ Mute_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"mute )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "ONLINE")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CONLINE))
+ {
+ case E_OK:
+ Online_Players(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"online )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "PM")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CPM))
+ {
+ case E_OK:
+ PM_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"pm )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "RELOAD")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CRELOAD))
+ {
+ case E_OK:
+ sIRC.Send_IRC_Channels("Reloading Configiguration Options.");
+ sWorld->LoadConfigSettings(true);
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "RECONNECT")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CRECONNECT))
+ {
+ case E_OK:
+ sIRC.Send_IRC_Channels(sIRC.RstMsg);
+ sIRC.ResetIRC();
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "RESTART")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CSHUTDOWN))
+ {
+ case E_OK:
+ Restart_Trinity(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"server )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "REVIVE")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 1, sIRC.CREVIVE))
+ {
+ case E_OK:
+ Revive_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"revive )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "SAVEALL")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CSAVEALL))
+ {
+ case E_OK:
+ Saveall_Player(&CDATA);
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "SERVER")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 2, sIRC.CSERVERCMD))
+ {
+ case E_OK:
+ Server(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"server )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "SHUTDOWN")
+ {
+ switch(ParamsValid(&CDATA, 1, sIRC.CSHUTDOWN))
+ {
+ case E_OK:
+ Shutdown_Trinity(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"shutdown )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "SPELL")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CSPELL))
+ {
+ case E_OK:
+ Spell_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"spell )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "SYSMSG")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 2, sIRC.CSYSMSG))
+ {
+ case E_OK:
+ Sysmsg_Server(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"sysmsg )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "TELE")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CTELE))
+ {
+ case E_OK:
+ Tele_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"tele )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "TOP")
+ {
+ CDATA.PCOUNT = 1;
+ switch(ParamsValid(&CDATA, 1, sIRC.CTOP))
+ {
+ case E_OK:
+ Top_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"top )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "WHO")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CWHO))
+ {
+ case E_OK:
+ Who_Logged(&CDATA);
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ if(!AuthValid && IsLoggedIn(USER))
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Access Denied! Your Security Level Is Too Low To Use This Command!", true, "ERROR");
+ if(cValid == false && (sIRC.BOTMASK & 4) != 0)
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Unknown Command!", true, "ERROR");
+ if(cValid && dontlog)
+ {
+ if(CDATA.CMD == "LOGIN") {CDATA.PARAMS="*Hidden*";}
+ sIRC.iLog.WriteLog(" %s : [ %s(%d) ] Used Command: [ %s ] With Parameters: [ %s ]", sIRC.iLog.GetLogDateTimeStr().c_str(), CDATA.USER.c_str(), GetLevel(USER), CDATA.CMD.c_str(), CDATA.PARAMS.c_str());
+ if((sIRC.logmask & 1) != 0)
+ {
+ std::string logchan = "#";
+ logchan += sIRC.logchan;
+ std::stringstream ss;
+ ss << sIRC.iLog.GetLogDateTimeStr() << ": [ " << CDATA.USER << "(" << GetLevel(USER) << ") ] Used Command: [ " << CDATA.CMD << " ] With Parameters: [" << CDATA.PARAMS << " ]";
+ sIRC.Send_IRC_Channel(logchan, ss.str().c_str(), true);
+ }
+ }
+ return cValid;
+ }
+ return false;
+}
+
+bool IRCCmd::CanUse(std::string USER, int nLevel)
+{
+ if(IsLoggedIn(USER))
+ {
+ if(GetLevel(USER) >= nLevel)
+ return true;
+ else
+ return false;
+ }
+ else if(nLevel == 0)
+ {
+ return true;
+ }
+ else
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : You Are Not Logged In!", true, "ERROR");
+ return false;
+}
+
+std::string IRCCmd::ChanOrPM(_CDATA *CD)
+{
+ if(CD->FROM == sIRC._Nick)
+ return CD->USER;
+ else
+ return CD->FROM;
+}
+
+Player *IRCCmd::GetPlayer(std::string WHO)
+{
+ normalizePlayerName(WHO);
+ return sObjectAccessor->FindPlayerByName(WHO.c_str());
+}
+
+_client *IRCCmd::GetClient(std::string cname)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == cname)
+ return (*i);
+ }
+ return (NULL);
+}
+
+bool IRCCmd::IsLoggedIn(std::string USER)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == USER)
+ return true;
+ }
+ return false;
+}
+
+bool IRCCmd::AcctIsLoggedIn(std::string USER)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if(MakeUpper((*i)->UName) == MakeUpper(USER))
+ return true;
+ }
+ return false;
+}
+
+std::string IRCCmd::AcctIsBanned(std::string ACCT)
+{
+ uint32 acctid = sAccountMgr->GetId(ACCT);
+ std::string banned = "NOTBANNED";
+ QueryResult result = LoginDatabase.PQuery("SELECT banreason FROM ip_banned WHERE ip=(SELECT last_ip FROM account WHERE id = '%i')", acctid);
+ if(result)
+ {
+ banned = (*result)[0].GetString();
+ //delete result;
+ return "IP Banned. Reason:" + banned;
+ }
+ QueryResult result2 = LoginDatabase.PQuery("SELECT banreason FROM account_banned WHERE id='%i'", acctid);
+ if(result2)
+ {
+ banned = (*result2)[0].GetString();
+ //delete result2;
+ return "Account Banned. Reason:" + banned;
+ }
+ return banned;
+}
+
+int IRCCmd::GetLevel(std::string sName)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == sName)
+ return (*i)->GMLevel;
+ }
+ return 0;
+}
+
+int IRCCmd::AcctLevel(std::string plnme)
+{
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(plnme);
+ uint32 account_id = 0;
+ uint32 security = 0;
+ account_id = sObjectMgr->GetPlayerAccountIdByGUID(guid);
+ security = sAccountMgr->GetSecurity(account_id);
+ return security;
+}
+
+std::string IRCCmd::GetAccName(std::string sName)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == sName)
+ return (*i)->UName;
+ }
+ return "";
+}
+
+std::string IRCCmd::GetNameFromAcct(std::string sName)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->UName == sName)
+ return (*i)->Name;
+ }
+ return "";
+}
+
+int IRCCmd::GetAcctIDFromName(std::string sName)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == sName)
+ {
+ uint32 acct_id = 0;
+ acct_id = sAccountMgr->GetId((*i)->UName.c_str());
+ return acct_id;
+ }
+ }
+ return 0;
+}
+
+std::string IRCCmd::GetAcctNameFromID(uint32 acctid)
+{
+ QueryResult result = LoginDatabase.PQuery("SELECT username FROM account WHERE id = '%d'", acctid);
+ if(result)
+ {
+ std::string name = (*result)[0].GetString();
+ //delete result;
+ return name;
+ }
+
+ return "";
+}
+
+std::string IRCCmd::GetIPFromPlayer(std::string player)
+{
+ QueryResult result = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'", player.c_str());
+ if(result)
+ {
+ std::string acctid = (*result)[0].GetString();
+ //delete result;
+ QueryResult result2 = LoginDatabase.PQuery("SELECT last_ip FROM account WHERE id = '%s'", acctid.c_str());
+ if(result2)
+ {
+ std::string ip = (*result2)[0].GetString();
+ //delete result2;
+ return ip;
+ }
+ }
+
+ return "";
+}
+
+std::string IRCCmd::SecToDay(std::string secons)
+{
+ unsigned int seconds = atoi(secons.c_str());
+ unsigned int days = seconds / 86400;
+ unsigned int hours = seconds / 3600 % 24;
+ unsigned int mins = seconds / 60 % 60;
+ char tottime[1000];
+ sprintf(tottime, "%iDays:%iHours:%iMinutes", days, hours, mins);
+
+ return tottime;
+}
+
+bool IRCCmd::ValidParams(std::string PARAMS, int nCount)
+{
+ if(nCount == 1 && PARAMS.size() == 0)
+ return false;
+ int pcount = 0;
+ size_t p = -1;
+ for(int i = 0;i < nCount;i++)
+ {
+ p = PARAMS.find(" ", p + 1);
+ if(p == -1)
+ break;
+ else
+ pcount++;
+ }
+ nCount--;
+ if(pcount >= nCount)
+ return true;
+ else
+ return false;
+}
+
+std::string* IRCCmd::getArray(std::string PARAMS, int nCount)
+{
+ std::string *array = new std::string[nCount];
+ if(PARAMS.size() > 0)
+ {
+ int pcnt = 0;
+ size_t ps = 0;
+ size_t pc = -1;
+ for(int i = 0;i < nCount;i++)
+ {
+ pc = PARAMS.find(" ", pc + 1);
+ if(i + 1 == nCount && nCount != 1)
+ {
+ if(ps > 0 && pc > 0)
+ array[i] = PARAMS.substr(ps, PARAMS.size() - ps);
+ }
+ else
+ array[i] = PARAMS.substr(ps, pc - ps);
+ ps = pc + 1;
+ }
+ }
+ return array;
+}
+
+std::string IRCCmd::MakeMsg(const char *sLine, ... )
+{
+ va_list ap;
+ char tmpoutp[1024];
+ va_start(ap, sLine);
+ vsnprintf(tmpoutp, 1024, sLine, ap );
+ va_end(ap);
+ std::string outp = tmpoutp;
+ return outp;
+}
+
+void IRCClient::AHFunc(uint64 itmid, std::string itmnme, std::string plname, uint32 faction)
+{
+ IRCCmd Command;
+ Player* plr = Command.GetPlayer(plname);
+ if(plr)
+ {
+ std::string itemname = itmnme;
+
+ char temp [7];
+ sprintf(temp, "%u", itmid);
+ std::string itemid = temp;
+
+ std::string wowname = "";
+ std::string ircname = "";
+ switch (plr->GetTeam())
+ {
+ case 67:wowname="|cffff0000"+plname+"|r";ircname="\0034"+plname;break; //horde
+ case 469:wowname="|cff1589FF"+plname+"|r";ircname="\00312"+plname;break; //alliance
+ }
+
+ std::string wowfact = "|cffFF8040[Auction House]:|r";
+ std::string ircfact = "\00304,08\037/!\\\037\017\00307 Auction House \00304,08\037/!\\\037\017";
+ switch(faction)
+ {
+ //neutral
+ case 7:wowfact="|cffff8040[Neutral Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00307 Neutral Auction House \00304,08\037/!\\\037\017";break;
+ //horde
+ case 6:wowfact="|cffff0000[Horde Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00304 Horde Auction House \00304,08\037/!\\\037\017";break;
+ //alliance
+ case 2:wowfact="|cff1589FF[Alliance Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00312 Alliance Auction House \00304,08\037/!\\\037\017";break;
+ }
+ std::string wowstr = Command.MakeMsg("%s A New Item Has Been Added |cffffffff|Hitem:%s:0:0:0:0:0:0:0|h[%s]|h|r. By: %s",wowfact.c_str(), itemid.c_str(), itemname.c_str(), wowname.c_str());
+ std::string ircstr = Command.MakeMsg("%s A New Item Has Been Added [%s]. By: %s", ircfact.c_str(), itemname.c_str(), ircname.c_str());
+
+ sIRC.Send_WoW_Channel(sIRC._wow_chan[sIRC.Status].c_str(), wowstr.c_str());
+ sIRC.Send_IRC_Channel(sIRC._irc_chan[sIRC.Status].c_str(), ircstr.c_str());
+ }
+}
+
+/* Disabled
+bool IRCClient::BeenToGMI(float posx, float posy, std::string player, std::string from)
+{
+ IRCCmd Command;
+ //std::transform(location.begin(), location.end(), location.begin(), towupper);
+ //sObjectMgr->GetAreaId
+ //if(location == "GMI" || location == "GMISLAND")
+ if(MapManager::Instance().GetZoneId(1,posx,posy) == 876)
+ {
+ QueryResult *result = WorldDatabase.PQuery("SELECT name FROM Hell_GMI WHERE name = '%s'",player.c_str());
+ if(result)
+ {
+ delete result;
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(player);
+ Player* plr = sObjectMgr->GetPlayer(guid);
+
+ uint64 guid2 = sObjectMgr->GetPlayerGUIDByName(from);
+ Player* plr2 = sObjectMgr->GetPlayer(guid2);
+ if(plr) sIRC.Send_WoW_Player(plr, "You Have Already Had A Trip To GM Island. There Is Only One Tele To GM Island Per Player, Please Donate If You Would like The .tele Command.");
+ if(plr2) sIRC.Send_WoW_Player(plr2, "This Player Has Already Had Their Trip To GM Island. The Tele Has Been Canceled.");
+ else sIRC.Send_IRC_Channel(from.c_str(), MakeMsg(" \0034[ERROR] : $Player Has Already Had Their Trip To GMI! The Tele Has Been Canceled", "$Player", player.c_str()), true, "ERROR");
+ return true;
+ }
+ else
+ {
+ if(Command.AcctLevel(player) == 0)
+ WorldDatabase.PExecute("INSERT INTO `Hell_GMI` VALUES ('%s')", player.c_str());
+ return false;
+ }
+ }
+ return false;
+}*/
diff --git a/ArkChat/IRCCmd.h b/ArkChat/IRCCmd.h
new file mode 100644
index 0000000000000..389e50242f090
--- /dev/null
+++ b/ArkChat/IRCCmd.h
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _IRC_CMD_H
+#define _IRC_CMD_H
+
+#define MAX_CLIENTS 50
+#include "../shared/Common.h"
+#include "../Entities/Player/Player.h"
+#include "../Globals/ObjectAccessor.h"
+#include "../Battlegrounds/BattlegroundMgr.h"
+
+struct ChannelUser
+{
+ int UserType;
+ std::string Name;
+ std::string UName;
+ int UserLevel;
+};
+
+struct _client
+{
+ bool LoggedIn;
+ std::string Name;
+ std::string UName;
+ int GMLevel;
+};
+struct _CDATA
+{
+ std::string CMD;
+ std::string USER;
+ std::string FROM;
+ std::string PARAMS;
+ std::string TYPE;
+ int PCOUNT;
+};
+enum APVERR
+{
+ E_OK,
+ E_SIZE,
+ E_AUTH,
+ E_IVALID,
+};
+enum ESOUNDS
+{
+ S_ENTERWORLD = 602,
+ S_QUESTFAILED = 847,
+ S_INVITE = 880,
+ S_LEVELUP = 888,
+ S_COINSOUND = 895,
+ S_WHISPER = 3081,
+ S_STEALTH = 3325,
+};
+class IRCCmd
+{
+ public:
+ IRCCmd();
+ ~IRCCmd();
+
+ void Handle_Logout(_CDATA *CD);
+ bool IsLoggedIn(std::string USER);
+ bool IsValid(std::string USER, std::string FROM, std::string CHAT, std::string TYPE);
+ bool AcctIsLoggedIn(std::string USER);
+ _client *GetClient(std::string cname);
+
+ public:
+ static std::string MakeMsg(const char *sLine, ... );
+ static std::string ChanOrPM(_CDATA *CD);
+ int AcctLevel(std::string plnme);
+ int GetLevel(std::string sName);
+ std::string MakeUpper(std::string Channel);
+ std::string AcctIsBanned(std::string ACCT);
+ std::list<_client*> _CLIENTS;
+ Player* GetPlayer(std::string WHO);
+
+ private:
+ // TriniChat Commands
+ void Handle_Login(_CDATA *CD);
+ void Account_Player(_CDATA *CD);
+ void Ban_Player(_CDATA *CD);
+ void Chan_Control(_CDATA *CD);
+ void Char_Player(_CDATA *CD);
+ void Fun_Player(_CDATA *CD);
+ void Help_IRC(_CDATA *CD);
+ void Item_Player(_CDATA *CD);
+ void Inchan_Server(_CDATA *CD);
+ void Info_Server(_CDATA *CD);
+ void Info_WG(_CDATA *CD);
+ void UnAuraAll(_CDATA *CD);
+ void Jail_Player(_CDATA *CD);
+ void Kick_Player(_CDATA *CD);
+ void Kill_Player(_CDATA *CD);
+ void Level_Player(_CDATA *CD);
+ void Lookup_Player(_CDATA *CD);
+ void Money_Player(_CDATA *CD);
+ void Mute_Player(_CDATA *CD);
+ void Online_Players(_CDATA *CD);
+ void PM_Player(_CDATA *CD);
+ void Revive_Player(_CDATA *CD);
+ void Saveall_Player(_CDATA *CD);
+ void Server(_CDATA *CD);
+ void Shutdown_Trinity(_CDATA *CD);
+ void Restart_Trinity(_CDATA *CD);
+ void Spell_Player(_CDATA *CD);
+ void Sysmsg_Server(_CDATA *CD);
+ void Tele_Player(_CDATA *CD);
+ void Top_Player(_CDATA *CD);
+ void Who_Logged(_CDATA *CD);
+ bool CanUse(std::string USER, int nLevel);
+ bool ValidParams(std::string PARAMS, int nCount = 1);
+ bool ParamsValid(_CDATA *CD, int pCnt);
+ int ParamsValid(_CDATA *CD, int pCnt, int rLev);
+ std::string GetAccName(std::string sName);
+ std::string GetNameFromAcct(std::string sName);
+ std::string GetAcctNameFromID(uint32 acctid);
+ std::string GetIPFromPlayer(std::string player);
+ std::string SecToDay(std::string secons);
+ int GetAcctIDFromName(std::string sName);
+ std::string* getArray(std::string PARAMS, int nCount = 1);
+};
+inline void MakeLower(std::string& str)
+{
+ std::transform( str.begin(), str.end(), str.begin(), ::tolower );
+}
+#endif
diff --git a/ArkChat/IRCCmde.cpp b/ArkChat/IRCCmde.cpp
new file mode 100644
index 0000000000000..e521dad55cc35
--- /dev/null
+++ b/ArkChat/IRCCmde.cpp
@@ -0,0 +1,2383 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gamePCH.h"
+#include "IRCCmd.h"
+#include "IRCClient.h"
+#include "MCS_OnlinePlayers.h"
+#include "WorldPacket.h"
+#include "Database/DatabaseEnv.h"
+#include "../Chat/Chat.h"
+#include "../Maps/MapManager.h"
+#include "../World/World.h"
+#include "../Guilds/Guild.h"
+#include "../Globals/ObjectMgr.h"
+#include "../Accounts/AccountMgr.h"
+#include "../Miscellaneous/Language.h"
+#include "../Spells/Auras/SpellAuras.h"
+#include "SystemConfig.h"
+#include "Config.h"
+#include "OutdoorPvPMgr.h"
+#include "OutdoorPvPWG.h"
+//#include "ArenaTeamMgr.h"
+
+#define Send_Player(p, m) sIRC.Send_WoW_Player(p, m)
+#define Send_IRCA(c, m, b, t) sIRC.Send_IRC_Channel(c, m, b, t)
+
+#ifdef WIN32
+#define Delay(x) Sleep(x)
+#else
+#define Delay(x) sleep(x / 1000)
+#endif
+
+void IRCCmd::Handle_Login(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ std::string isbanned = AcctIsBanned(_PARAMS[0]);
+ if(isbanned == "NOTBANNED")
+ {
+ if(!IsLoggedIn(CD->USER))
+ {
+ if(!AcctIsLoggedIn(_PARAMS[0].c_str()))
+ {
+ QueryResult result = LoginDatabase.PQuery("SELECT account_access.gmlevel FROM account_access ,account WHERE account_access.id = account.id AND account.username ='%s' AND account.sha_pass_hash=SHA1(CONCAT(UPPER(account.username),':',UPPER('%s')));", _PARAMS[0].c_str(), _PARAMS[1].c_str());
+ //"SELECT `gmlevel` FROM `account_access` WHERE `username`='%s' AND `sha_pass_hash`=SHA1(CONCAT(UPPER(`username`),':',UPPER('%s')));", _PARAMS[0].c_str(), _PARAMS[1].c_str());
+ if (result)
+ {
+ Field *fields = result->Fetch();
+ int GMLevel = fields[0].GetInt16();
+ if(GMLevel >= 0)
+ {
+ _client *NewClient = new _client();
+ NewClient->Name = CD->USER;
+ NewClient->UName = MakeUpper(_PARAMS[0]);
+ NewClient->GMLevel = fields[0].GetInt16();
+ _CLIENTS.push_back(NewClient);
+ Send_IRCA(CD->USER, MakeMsg("You Are Now Logged In As %s, Welcome To ArkChat Admin Mode.", _PARAMS[0].c_str()), true, CD->TYPE);
+
+ if(sIRC._op_gm == 1 && GMLevel >= sIRC._op_gm_lev)
+ {
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ sIRC.SendIRC("MODE #"+sIRC._irc_chan[i]+" +o "+CD->USER );
+ }
+ }
+ }else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Sorry, Your Username Or Password Is Incorrect. Please Try Again. ", true, "ERROR");
+ }else
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : %s Is Already Logged In With This Username. ", GetNameFromAcct(MakeUpper(_PARAMS[0])).c_str()), true, "ERROR");
+ }else
+ Send_IRCA(CD->USER, "\0034[ERROR] : You Are Already Logged In As "+ _PARAMS[0] +"!", true, "ERROR");
+ }else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Sorry You Are "+isbanned+". You Cannot Log In To ArkChat "+CD->USER.c_str()+"!", true, "ERROR");
+}
+
+void IRCCmd::Handle_Logout(_CDATA *CD)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == CD->USER)
+ {
+ _CLIENTS.erase(i);
+ delete (*i);
+ Send_IRCA(CD->USER, "You Are Now Logged Out!", true, CD->TYPE);
+ return;
+ }
+ }
+ Send_IRCA(CD->USER, "\0034[ERROR] : You Are Not Logged In!", true, "ERROR");
+}
+
+void IRCCmd::Account_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ normalizePlayerName(_PARAMS[0]);
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[0]);
+ uint32 account_id = 0;
+ account_id = sObjectMgr->GetPlayerAccountIdByGUID(guid);
+ if(account_id)
+ {
+ if(account_id == GetAcctIDFromName(CD->USER) || GetLevel(CD->USER) >= sIRC._op_gm_lev)
+ {
+ Player* plr = ObjectAccessor::FindPlayer(guid);
+ if(_PARAMS[1] == "lock")
+ {
+ LoginDatabase.PExecute( "UPDATE `account` SET `locked` = '1' WHERE `id` = '%d'",account_id);
+ if(plr) Send_Player(plr, MakeMsg("Your Account Has Been Locked To Your Current IP By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : Account Has Been Locked To Their Current IP Address.", true, CD->TYPE);
+ }
+ else if(_PARAMS[1] == "unlock")
+ {
+ LoginDatabase.PExecute( "UPDATE `account` SET `locked` = '0' WHERE `id` = '%d'",account_id);
+ if(plr) Send_Player(plr, MakeMsg("Your Account Has Been UnLocked From The Associated IP By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : Account Has Been UnLocked From The Associated IP Address.", true, CD->TYPE);
+ }
+ else if(_PARAMS[1] == "mail")
+ {
+ LoginDatabase.PExecute( "UPDATE `account` SET `email` = '%s' WHERE `id` = '%d'",_PARAMS[2].c_str() ,account_id);
+ if (plr) Send_Player(plr, MakeMsg("%s Has Changed Your EMail Adress To: %s", CD->USER.c_str(), _PARAMS[2].c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : EMail Address Successfully Changed To: "+_PARAMS[2], true, CD->TYPE);
+ }
+ else if(_PARAMS[1] == "pass")
+ {
+ LoginDatabase.PExecute( "UPDATE `account` SET `sha_pass_hash` = SHA1(CONCAT(UPPER(`username`),':',UPPER('%s'))) WHERE `id` = '%d'",_PARAMS[2].c_str() ,account_id);
+ if (plr) Send_Player(plr, MakeMsg("%s Has Changed Your Password To: %s", CD->USER.c_str(), _PARAMS[2].c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : Password Successfully Changed To: "+_PARAMS[2], true, CD->TYPE);
+ }
+ else if(_PARAMS[1] == "rename")
+ {
+ if(plr)
+ {
+ plr->SetAtLoginFlag(AT_LOGIN_RENAME);
+ Send_Player(plr, MakeMsg("%s Has Requested You Change This Characters Name, Rename Will Be Forced On Next Login!", CD->USER.c_str()));
+ }
+ CharacterDatabase.PExecute("UPDATE `characters` SET `at_login` = `at_login` | '1' WHERE `guid` = '%u'", guid);
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : Has Been Forced To Change Their Characters Name, Rename Will Be Forced On Next Login!", true, CD->TYPE);
+ }
+ else if(_PARAMS[1] == "gmlevel")
+ {
+ const char *cgmlevel = _PARAMS[2].c_str();
+ if(GetLevel(CD->USER) >= atoi(cgmlevel))
+ {
+ LoginDatabase.PExecute( "UPDATE `account` SET `gmlevel` = '%d' WHERE `id` = '%d'", _PARAMS[2].c_str(), account_id );
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : Has GM Level Successfully Changed To: "+_PARAMS[2], true, CD->TYPE);
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : The Specified GM Level Is Higher Than Your GM Level.", true, "ERROR");
+ }
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : You Are Not A GM, You May Only Change Settings In Your Own Account.", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Such Player Exists, So Account Cannot Be Looked Up.", true, "ERROR");
+}
+
+void IRCCmd::Ban_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ if(_PARAMS[1] == "ip")
+ {
+ std::string ip = GetIPFromPlayer(_PARAMS[0]);
+ if(_PARAMS[2] == "")
+ _PARAMS[2] = "No Reason";
+ if(ip != "")
+ {
+ LoginDatabase.PExecute( "INSERT IGNORE INTO `ip_banned` VALUES ('%s', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '%s', '%s')", ip.c_str(), CD->USER.c_str(), _PARAMS[2].c_str());
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ plr->GetSession()->KickPlayer();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Had Their IP Address Banned. [%s] Reason: %s",_PARAMS[0].c_str() ,ip.c_str() , _PARAMS[2].c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : I Cannot Locate An IP Address For The Character Name Given.", true, "ERROR");
+ }
+ if(_PARAMS[1] == "acct")
+ {
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[0].c_str());
+ uint32 acctid = sObjectMgr->GetPlayerAccountIdByGUID(guid);
+ if(_PARAMS[2] == "")
+ _PARAMS[2] = "No Reason";
+ if(acctid)
+ {
+ LoginDatabase.PExecute( "INSERT INTO `account_banned` VALUES ('%u', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '%s', '%s', 1)", acctid, CD->USER.c_str(), _PARAMS[2].c_str());
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ plr->GetSession()->KickPlayer();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Had Their Account Banned. Reason: %s",_PARAMS[0].c_str(), _PARAMS[2].c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : I Cannot Locate An Account For The Character Name Given.", true, "ERROR");
+ }
+ if(_PARAMS[1] == "unban")
+ {
+ std::string unbani = _PARAMS[0];
+ WorldDatabase.EscapeString(_PARAMS[0]);
+ if(atoi(unbani.c_str()) > 0)
+ {
+ LoginDatabase.PExecute( "DELETE FROM ip_banned WHERE ip = '%s'", _PARAMS[0].c_str());
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Been Removed From The IP Ban List.", _PARAMS[0].c_str()), true, CD->TYPE);
+ }
+ else
+ {
+ QueryResult result = LoginDatabase.PQuery("SELECT id FROM `account` WHERE username = '%s'", _PARAMS[0].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string id = fields[0].GetString();
+
+ LoginDatabase.PExecute( "DELETE FROM account_banned WHERE id = %s", id.c_str());
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Been Removed From The Account Ban List.", _PARAMS[0].c_str()), true, CD->TYPE);
+
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : I Cannot Locate An Account Or IP Address For The Paramaters Given.", true, "ERROR");
+ }
+ }
+}
+
+void IRCCmd::Chan_Control(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ if(CD->FROM == sIRC._Nick)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : You Cannot Use This Command Through A PM Yet.", true, "ERROR");
+ return;
+ }
+ if(_PARAMS[0] == "op")
+ {
+ if(_PARAMS[1].length() > 1)
+ sIRC.SendIRC("MODE "+CD->FROM+" +o "+_PARAMS[1] );
+ else
+ sIRC.SendIRC("MODE "+CD->FROM+" +o "+CD->USER );
+ }
+ if(_PARAMS[0] == "deop")
+ {
+ if(_PARAMS[1].length() > 1)
+ sIRC.SendIRC("MODE "+CD->FROM+" -o "+_PARAMS[1] );
+ else
+ sIRC.SendIRC("MODE "+CD->FROM+" -o "+CD->USER );
+ }
+ if(_PARAMS[0] == "voice")
+ {
+ if(_PARAMS[1].length() > 1)
+ sIRC.SendIRC("MODE "+CD->FROM+" +v "+_PARAMS[1] );
+ else
+ sIRC.SendIRC("MODE "+CD->FROM+" +v "+CD->USER );
+ }
+ if(_PARAMS[0] == "devoice")
+ {
+ if(_PARAMS[1].length() > 1)
+ sIRC.SendIRC("MODE "+CD->FROM+" -v "+_PARAMS[1] );
+ else
+ sIRC.SendIRC("MODE "+CD->FROM+" -v "+CD->USER );
+ }
+}
+
+void IRCCmd::Char_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 5);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ normalizePlayerName(_PARAMS[0]);
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[0]);
+ Player* plr = ObjectAccessor::FindPlayer(guid);
+ if(plr)
+ {
+ if(_PARAMS[1] == "mapcheat")
+ {
+ bool explore = false;
+ if (_PARAMS[2] != "0")
+ explore = true;
+ for (uint8 i=0; i<64; i++)
+ {
+ if (_PARAMS[2] != "0")
+ plr->SetFlag(PLAYER_EXPLORED_ZONES_1+i,0xFFFFFFFF);
+ else
+ plr->SetFlag(PLAYER_EXPLORED_ZONES_1+i,0);
+ }
+ if(explore)
+ {
+ Send_Player(plr, MakeMsg("All Your Zones Have Been Set To Explored By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Now Explored All Zones.", true, CD->TYPE);
+ }
+ else
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Now Had All Zones Set To Un-Explored.", true, CD->TYPE);
+ Send_Player(plr, MakeMsg("All Your Zones Have Been Set To Un-Explored By: %s", CD->USER.c_str()));
+ }
+ }
+ if(_PARAMS[1] == "taxicheat")
+ {
+ if (_PARAMS[2] != "0")
+ {
+ plr->SetTaxiCheater(true);
+ Send_Player(plr, MakeMsg("Taxi Node Cheat Has Been Enabled By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Taxi Node Cheat Has Been Enabled.", true, CD->TYPE);
+ }
+ else
+ {
+ plr->SetTaxiCheater(false);
+ Send_Player(plr, MakeMsg("Taxi Node Cheat Has Been Disabled By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Taxi Node Cheat Has Been Disabled.", true, CD->TYPE);
+ }
+ }
+ if(_PARAMS[1] == "maxskill")
+ {
+ plr->UpdateSkillsToMaxSkillsForLevel();
+ Send_Player(plr, MakeMsg("Your Skills Have Been Maxed Out By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Skills Have Been Maxed Out.", true, CD->TYPE);
+ }
+ if(_PARAMS[1] == "setskill")
+ {
+ std::string* _PARAMSA = getArray(_PARAMS[2], 4);
+ uint32 skill = atoi(_PARAMS[2].c_str());
+ uint32 level = atol(_PARAMS[3].c_str());
+ int32 max = _PARAMS[4].c_str() ? atol (_PARAMS[4].c_str()) : plr->GetPureMaxSkillValue(skill);
+ SkillLineEntry const* skilllookup = sSkillLineStore.LookupEntry(skill);
+ //if skillid entered is not a number and greater then 0 then the command is being used wrong
+ if(skill >= 0)
+ {
+ //does the skill even exist
+ if(skilllookup)
+ {
+ //does player have the skill yet
+ if(plr->GetSkillValue(skill))
+ {
+ //plr->SetSkill(skill,level,max);
+ // add hack until find out what skill step is
+ plr->SetSkill(skill,0,level,max);
+ Send_Player(plr, MakeMsg("Skill: %s Has Been Set To Level: %i Max: %i By: %s",skilllookup->name[0], level, max, CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Had Skill: %s Set To Level: %d Max: %d",_PARAMS[0].c_str() , skilllookup->name[0], level, max), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Player Does Not Have The %s Skill Yet.", skilllookup->name[0]), true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : That Skill ID Does Not Exist.", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : The Skill ID Entered Is Invalid.", true, "ERROR");
+ }
+ if(_PARAMS[1] == "combatstop")
+ {
+ if(!plr->isInCombat())
+ {
+ plr->CombatStop();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Was Dropped From Combat",_PARAMS[0].c_str()), true, CD->TYPE);
+ }else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Specified Player Is Not In Combat.", true, "ERROR");
+ }
+ }
+ if(_PARAMS[1] == "quest")
+ {
+ std::string s_param = _PARAMS[3];
+ std::string QName = "";
+ char *args = (char*)s_param.c_str();
+ uint32 qId = 0;
+ if(args[0]=='[')
+ {
+ char* cQName = strtok((char*)args, "]");
+ if(cQName && cQName[0])
+ {
+ QName = cQName+1;
+ WorldDatabase.EscapeString(QName);
+ QueryResult result = WorldDatabase.PQuery("SELECT entry FROM quest_template WHERE name = '%s'", QName.c_str());
+ if (!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Quest Not Found!", true, "ERROR");
+ return;
+ }
+ qId = result->Fetch()->GetUInt16();
+ //delete result;
+ }
+ }
+ else
+ {
+ qId = atoi(args);
+ QueryResult result = WorldDatabase.PQuery("SELECT title FROM quest_template WHERE entry = '%d'", qId);
+ if (!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Quest Not Found!", true, "ERROR");
+ return;
+ }
+ QName = result->Fetch()->GetString();
+ //delete result;
+ }
+ if(_PARAMS[2] == "add")
+ {
+ Quest const* pQuest = sObjectMgr->GetQuestTemplate(qId);
+ //for (uint32 id = 0; id < sItemStorage.MaxEntry; id++)
+ ItemTemplateContainer const* itc = sObjectMgr->GetItemTemplateStore();
+ ItemTemplateContainer::const_iterator result = find_if(itc->begin(), itc->end(), Finder(qId, &ItemPrototype::StartQuest));
+
+ if (result != itc->end())
+ {
+ /* ItemPrototype const *pProto = sItemStorage.LookupEntry(id);
+ if (!pProto)
+ continue;
+
+ if (pProto->StartQuest == qId)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : This Quest Requires Activation By Item %d, Add It To The Player And Start Quest Manually.", pProto->ItemId),true, "ERROR");
+ }*/
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : This Quest Requires Activation By Item %d, Add It To The Player And Start Quest Manually.", result->second.ItemId),true, "ERROR");
+ }
+
+ if( plr->CanAddQuest( pQuest, true ) )
+ {
+ plr->AddQuest( pQuest, NULL );
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Had Quest [%s] Added To Quest Log.", _PARAMS[0].c_str(), QName.c_str()), true, "ERROR");
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Cannot Add Quest To Player, He Either Has No Space Or He Already Has The Quest In His Quest Log.", true, "ERROR");
+ }
+ }
+ if(_PARAMS[2] == "remove")
+ {
+ Quest const* pQuest = sObjectMgr->GetQuestTemplate(qId);
+ for(uint8 slot = 0; slot < MAX_QUEST_LOG_SIZE; ++slot )
+ {
+ uint32 quest = plr->GetQuestSlotQuestId(slot);
+ if(quest==qId)
+ {
+ plr->SetQuestSlot(slot,0);
+ plr->TakeQuestSourceItem( quest, false );
+ }
+ }
+ //plr->SetQuestStatus( qId, QUEST_STATUS_NONE);
+ plr->RemoveActiveQuest(qId);
+ //plr->getQuestStatusMap()[qId].m_rewarded = false;
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Quest [%s] Removed.", _PARAMS[0].c_str(), QName.c_str()), true, CD->TYPE);
+ }
+ if(_PARAMS[2] == "complete")
+ {
+ Quest const* pQuest = sObjectMgr->GetQuestTemplate(qId);
+ if(!plr->GetQuestStatus(qId))
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Does Not Have This Quest In Quest Log, Cannot Complete It.", true, "ERROR");
+ }
+ else
+ {
+ for(uint8 x = 0; x < QUEST_OBJECTIVES_COUNT; ++x)
+ {
+ uint32 id = pQuest->ReqItemId[x];
+ uint32 count = pQuest->ReqItemCount[x];
+ if(!id || !count)
+ continue;
+ uint32 curItemCount = plr->GetItemCount(id,true);
+ ItemPosCountVec dest;
+ uint8 msg = plr->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, id, count-curItemCount );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = plr->StoreNewItem( dest, id, true);
+ plr->SendNewItem(item,count-curItemCount,true,false);
+ }
+ }
+
+ for(uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; i++)
+ {
+ uint32 creature = pQuest->ReqCreatureOrGOId[i];
+ uint32 creaturecount = pQuest->ReqCreatureOrGOCount[i];
+ if(uint32 spell_id = pQuest->ReqSpell[i])
+ {
+ for(uint16 z = 0; z < creaturecount; ++z)
+ plr->CastedCreatureOrGO(creature,0,spell_id);
+ }
+ else if(creature > 0)
+ {
+ for(uint16 z = 0; z < creaturecount; ++z)
+ plr->KilledMonsterCredit(creature,0);
+ }
+ else if(creature < 0)
+ {
+ for(uint16 z = 0; z < creaturecount; ++z)
+ plr->CastedCreatureOrGO(creature,0,0);
+ }
+ }
+
+ if(uint32 repFaction = pQuest->GetRepObjectiveFaction())
+ {
+ uint32 repValue = pQuest->GetRepObjectiveValue();
+ uint32 curRep = plr->GetReputationMgr().GetReputation(repFaction);
+ if(curRep < repValue)
+ {
+ FactionEntry const *factionEntry = sFactionStore.LookupEntry(repFaction);
+ plr->GetReputationMgr().SetReputation(factionEntry,repValue);
+ }
+ }
+
+ int32 ReqOrRewMoney = pQuest->GetRewOrReqMoney();
+ if(ReqOrRewMoney < 0)
+ plr->ModifyMoney(-ReqOrRewMoney);
+
+ plr->CompleteQuest(qId);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Quest [%s] Status Set To Complete.", _PARAMS[0].c_str(), QName.c_str()), true, CD->TYPE);
+ }
+ }
+ }
+ if(_PARAMS[1] == "mod")
+ {
+ if(_PARAMS[2] == "rep")
+ {
+ uint32 factionId = atoi((char*)_PARAMS[3].c_str());
+ FactionEntry const *factionEntry = sFactionStore.LookupEntry(factionId);
+ if(!factionEntry)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Faction With That Name Exists.", true, "ERROR");
+ }
+ else
+ {
+ int32 amount = atol((char*)_PARAMS[4].c_str());
+ if(amount > -39000 && amount < 43000)
+ {
+ plr->SetReputation(factionId,amount);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Reputation With Faction %s Set To %s.", _PARAMS[0].c_str(), _PARAMS[3].c_str(), _PARAMS[4].c_str()), true, CD->TYPE);
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Reputation Value Incorrect. Must Be Between -39000 and 43000.", true, "ERROR");
+ }
+ }
+ }
+ if(_PARAMS[2] == "morph")
+ {
+ uint16 display_id = (uint16)atoi((char*)_PARAMS[3].c_str());
+ plr->SetDisplayId(display_id);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Been Morphed Into DisplayID: %s.", _PARAMS[0].c_str(), _PARAMS[3].c_str()), true, CD->TYPE);
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Valid Parameters Are: morph , reputation .", true, "ERROR");
+ }
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Character With That Name Exists.", true, "ERROR");
+}
+
+void IRCCmd::Fun_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ if(_PARAMS[1] == "say")
+ {
+ plr->Say(_PARAMS[2], LANG_UNIVERSAL);
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Was Forced To Say: "+_PARAMS[2]+".", true, CD->TYPE);
+ }
+ if(_PARAMS[1] == "sound")
+ {
+ uint32 sndid = atoi(_PARAMS[2].c_str());
+ plr->SendPlaySound(sndid ,true);
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Just Heard Sound ID: "+_PARAMS[2]+".", true, CD->TYPE);
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Online!", true, "ERROR");
+}
+
+void IRCCmd::Help_IRC(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+ QueryResult result = WorldDatabase.PQuery("SELECT `Command`, `Description`, `gmlevel` FROM `IRC_Commands`");
+ if(result)
+ {
+ if(IsLoggedIn(CD->USER))
+ {
+ if(_PARAMS[0] == "")
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT * FROM `IRC_Commands` WHERE `gmlevel` <= %u ORDER BY `Command`", GetLevel(CD->USER));
+ if(result)
+ {
+ std::string output = "\002ArkChat IRC Commands:\017 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ Field *fields = result->Fetch();
+ output += fields[0].GetString() + ", ";
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(CD->USER, output, true, CD->TYPE.c_str());
+ }
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT `Description`, `gmlevel` FROM `IRC_Commands` WHERE `Command` = '%s'", _PARAMS[0].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ if(fields[1].GetUInt32() > GetLevel(CD->USER))
+ {
+ Send_IRCA(CD->USER, "You Do Not Have Access To That Command, So No Help Is Available.", true, CD->TYPE.c_str());
+ return;
+ }
+ if(result)
+ {
+ std::string cmdhlp = fields[0].GetString();
+ //delete result;
+ Send_IRCA(CD->USER, cmdhlp, true, CD->TYPE.c_str());
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Such Command Exists, Please Check The Spelling And Try Again.", true, "ERROR");
+ }
+ }
+ else if(!IsLoggedIn(CD->USER))
+ {
+ WorldDatabase.EscapeString(_PARAMS[0]);
+ if(_PARAMS[0] == "")
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT * FROM `IRC_Commands` WHERE `gmlevel` = 0 ORDER BY `Command`");
+ if(result)
+ {
+ std::string output = "\002ArkChat IRC Commands:\017 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ Field *fields = result->Fetch();
+ output += fields[0].GetString() + ", ";
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(CD->USER, output, true, CD->TYPE.c_str());
+ Send_IRCA(CD->USER, "You Are Currently Not Logged In, Please Login To See A Complete List Of Commands Available To You.", true, CD->TYPE.c_str());
+ }
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT `Description`, `gmlevel` FROM `IRC_Commands` WHERE `Command` = '%s'", _PARAMS[0].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ if(fields[1].GetUInt32() > 0)
+ {
+ Send_IRCA(CD->USER, "You Do Not Have Access To That Command, So No Help Is Available.", true, CD->TYPE.c_str());
+ return;
+ }
+ std::string cmdhlp = fields[0].GetString();
+ //delete result;
+ Send_IRCA(CD->USER, cmdhlp, true, CD->TYPE.c_str());
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Such Command Exists, Please Check The Spelling And Try Again.", true, "ERROR");
+ }
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Database Error! Please Make Sure You Used IRC_Commands.sql, You Must Have A Table In Your World Database (IRC_Commands)!", true, "ERROR");
+}
+
+void IRCCmd::Inchan_Server(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+ WorldDatabase.EscapeString(_PARAMS[0]);
+ if(_PARAMS[0] == "")
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"inchan )", true, "ERROR");
+ return;
+ }
+ QueryResult result = WorldDatabase.PQuery("SELECT * FROM `IRC_Inchan` WHERE `channel` = '%s' ORDER BY `name`", _PARAMS[0].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string output = "\002Players In The [ "+fields[2].GetString()+" ] Channel:\017 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ output += fields[1].GetString() + ", ";
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), output, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(ChanOrPM(CD), "No Players Are Currently In [ "+_PARAMS[0]+" ] Channel!", true, CD->TYPE.c_str());
+}
+
+void IRCCmd::Info_Server(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+ char clientsNum [50];
+ sprintf(clientsNum, "%u", sWorld->GetPlayerCount());
+ char maxClientsNum [50];
+ sprintf(maxClientsNum, "%u", sWorld->GetMaxPlayerCount());
+ char maxConnectA [50];
+ sprintf(maxConnectA, "%u%", sWorld->GetMaxActiveSessionCount());
+ char maxConnectQ [50];
+ sprintf(maxConnectQ, "%u%", sWorld->GetMaxQueuedSessionCount());
+ char curConnectA [50];
+ sprintf(curConnectA, "%u%", sWorld->GetActiveSessionCount());
+ char curConnectQ [50];
+ sprintf(curConnectQ, "%u%", sWorld->GetQueuedSessionCount());
+ char ircupdt [50];
+ sprintf(ircupdt, "%u", sWorld->GetUpdateTime());
+ std::string str = secsToTimeString(sWorld->GetUptime());
+ std::string svnrev = _FULLVERSION;
+
+ float rdm = (sConfig->GetFloatDefault("Rate.Drop.Money", 1.0f));
+ float rxk = (sConfig->GetFloatDefault("Rate.XP.Kill", 1.0f));
+ float rxq = (sConfig->GetFloatDefault("Rate.XP.Quest", 1.0f));
+
+ Send_IRCA(ChanOrPM(CD), "\x2 Number Of Players Online:\x3\x31\x30 " + (std::string)clientsNum + "\xF |\x2 Max Since Last Restart:\x3\x31\x30 "+(std::string)maxClientsNum+"\xF |\x2 UpTime:\x3\x31\x30 "+str, true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), "\x2 Number Of Active Connections:\x3\x31\x30 " + (std::string)curConnectA + " Max("+ (std::string)maxConnectA +")\xF |\x2 Number Of Queued Connections:\x3\x31\x30 "+(std::string)curConnectQ+" Max("+(std::string)maxConnectQ+")\xF", true, CD->TYPE);
+ //Send_IRCA(ChanOrPM(CD), "\x2 Max Number Of Active Connections:\x3\x31\x30 " + (std::string)maxConnectA + "\xF |\x2 Max Number Of Queued Connections:\x3\x31\x30 "+(std::string)maxConnectQ+"\xF", true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), "\x2 Server:\x3\x31\x30 " +svnrev+ "\xF |\x2 Update Time:\x3\x31\x30 "+(std::string)ircupdt, true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2 Server Rates - [Monster XP:\x3\x31\x30 %d\xF\x2][Quest XP:\x3\x31\x30 %d\xF\x2][Money Drop Rate:\x3\x31\x30 %d\xF\x2]", int(rxk), int(rxq), int(rdm)), true, CD->TYPE);
+ //Send_IRCA(ChanOrPM(CD), "\x2 MotD:\x3\x31\x30 "+(std::string)sWorld->GetMotd(), true, CD->TYPE); dont need MOTD show with -info
+
+}
+void IRCCmd::Info_WG(_CDATA *CD)
+{
+ OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr->GetOutdoorPvPToZoneId(4197);
+
+ std::stringstream ss;
+
+ if (!pvpWG || !sWorld->getBoolConfig(CONFIG_OUTDOORPVP_WINTERGRASP_ENABLED))
+ {
+ ss << "Wintergrast Turned Off!";
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00304,08\037/!\\\037\017\00304 WinterGrasp Announcer \00304,08\037/!\\\037\017 %s",ss.str().c_str()), true, CD->TYPE);
+ return;
+ }
+
+ if (pvpWG->isWarTime())
+ {
+ ss << "Battle Running: ";
+ ss << secsToTimeString(pvpWG->GetTimer(), true).c_str();
+ ss << " | Horde: ";
+ ss << pvpWG->GetNumPlayersH();
+ ss << " - Alliance: ";
+ ss << pvpWG->GetNumPlayersA();
+ }
+ else
+ {
+ ss << "Time Until Next Round: ";
+ ss << secsToTimeString(pvpWG->GetTimer(), true).c_str();
+ ss << " | Horde: ";
+ ss << pvpWG->GetNumPlayersH();
+ ss << " - Alliance: ";
+ ss << pvpWG->GetNumPlayersA();
+ }
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00304,08\037/!\\\037\017\00304 WinterGrasp Announcer \00304,08\037/!\\\037\017 %s",ss.str().c_str()), true, CD->TYPE);
+
+}
+
+void IRCCmd::UnAuraAll(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ plr->RemoveAllAuras();
+ std::string iinfo = " \00313[" + _PARAMS[0] + "] : Has had all auras removed";
+ Send_IRCA(ChanOrPM(CD), iinfo, true, CD->TYPE);
+ }
+ else
+ {
+ std::string iinfo = " \00313[" + _PARAMS[0] + "] : Not found";
+ Send_IRCA(ChanOrPM(CD), iinfo, true, CD->TYPE);
+ }
+
+}
+
+void IRCCmd::Item_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+
+ normalizePlayerName(_PARAMS[0]);
+ Player *chr = GetPlayer(_PARAMS[0].c_str());
+ if(_PARAMS[1] == "add")
+ {
+ std::string s_param = _PARAMS[2];
+
+ char *args = (char*)s_param.c_str();
+ uint32 itemId = 0;
+ if(args[0]=='[')
+ {
+ char* citemName = strtok((char*)args, "]");
+ if(citemName && citemName[0])
+ {
+ std::string itemName = citemName+1;
+ WorldDatabase.EscapeString(itemName);
+ QueryResult result = WorldDatabase.PQuery("SELECT entry FROM item_template WHERE name = '%s'", itemName.c_str());
+ if (!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Item Not Found!", true, "ERROR");
+ return;
+ }
+ itemId = result->Fetch()->GetUInt16();
+ //delete result;
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"item [Exact Item Name] )", true, "ERROR");
+ return;
+ }
+ }
+ else
+ {
+ std::string itemName = s_param;
+ WorldDatabase.EscapeString(itemName);
+ QueryResult result = WorldDatabase.PQuery("SELECT entry FROM item_template WHERE name = '%s'", itemName.c_str());
+ if (result)
+ {
+ itemId = result->Fetch()->GetUInt16();
+ }
+ //delete result;
+
+ char* cId = strtok(args, " ");
+ if(!cId)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"item )", true, "ERROR");
+ return;
+ }
+ itemId = atol(cId);
+ }
+ char* ccount = strtok(NULL, " ");
+ int32 count = 1;
+ if (ccount) { count = atol(ccount); }
+ Player* plTarget = chr;
+ if(!plTarget)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Online!", true, "ERROR");
+ return;
+ }
+ ItemPrototype const *pProto = sObjectMgr->GetItemPrototype(itemId);
+ //ItemTemplate const* iProto = sObjectMgr->GetItemTemplate(itemId);
+ //Subtract
+ if (count < 0)
+ {
+ plTarget->DestroyItemCount(itemId, -count, true, false);
+ char itemid2[255];
+ sprintf(itemid2,"%d",itemId);
+ std::string itake = " \00313["+ _PARAMS[0] +"] : Has Had Item " +itemid2+ " Taken From Them!";
+ Send_IRCA(ChanOrPM(CD), itake, true, CD->TYPE);
+ return;
+ }
+ //Adding items
+ uint32 noSpaceForCount = 0;
+
+ // check space and find places
+ ItemPosCountVec dest;
+ uint8 msg = plTarget->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, count, &noSpaceForCount );
+ if( msg == EQUIP_ERR_INVENTORY_FULL ) // convert to possibel store amount
+ count -= noSpaceForCount;
+ else if( msg != EQUIP_ERR_OK ) // other error, can't add
+ {
+ char s_countForStore[255];
+ sprintf(s_countForStore,"%d",count);
+ std::string ierror = " \00313["+ _PARAMS[0] +"] : Could Not Create All Items! " +s_countForStore+ " Item(s) Were Not Created!";
+ Send_IRCA(ChanOrPM(CD), ierror, true, CD->TYPE);
+ return;
+ }
+ Item* item = plTarget->StoreNewItem( dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
+ if(count > 0 && item)
+ {
+ plTarget->SendNewItem(item,count,true,false);
+ QueryResult result = WorldDatabase.PQuery("SELECT name FROM item_template WHERE entry = %d", itemId);
+ char* dbitemname = NULL;
+ if (result)
+ {
+ dbitemname = (char*)result->Fetch()->GetCString();
+ }
+ std::string iinfo = " \00313[" + _PARAMS[0] + "] : Has Been Given Item "+dbitemname+". From: "+CD->USER.c_str()+".";
+ Send_IRCA(ChanOrPM(CD), iinfo, true, CD->TYPE);
+ //delete result;
+ }
+ if(noSpaceForCount > 0)
+ {
+ char s_countForStore[255];
+ sprintf(s_countForStore,"%d",noSpaceForCount);
+ std::string ierror = " \00313["+ _PARAMS[0] +"] : Could Not Create All Items! " +s_countForStore+ " Item(s) Were Not Created!";
+ Send_IRCA(ChanOrPM(CD), ierror, true, CD->TYPE);
+ return;
+ }
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"item )", true, "ERROR");
+ return;
+ }
+}
+
+void IRCCmd::Jail_Player(_CDATA *CD)
+{
+ if(ValidParams(CD->PARAMS, 1))
+ {
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ if (Player *plr = GetPlayer(_PARAMS[0]))
+ {
+ std::string sReason = "";
+ if(_PARAMS[1] == "release")
+ {
+ float rposx, rposy, rposz, rposo = 0;
+ uint32 rmapid = 0;
+ CharacterDatabase.EscapeString(_PARAMS[0]);
+ QueryResult result = CharacterDatabase.PQuery( "SELECT `map`, `position_x`, `position_y`, `position_z` FROM `character_homebind` WHERE `guid` = '%d'", plr->GetGUID() );
+ //QueryResult result = CharacterDatabase.PQuery( "SELECT `mapId`, `posX`, `posY`, `posZ` FROM `character_homebind` WHERE `guid` = ' %d '", plr->GetGUIDLow() );
+ //sLog->outDetail("ATTEMPT TO LOCATE HOMEBIND FOR PLAYER ID %d", plr->GetGUIDLow());
+ //sLog->outDetail("SELECT `mapId`, `posX`, `posY`, `posZ` FROM `character_homebind` WHERE `guid` = ' %d '", plr->GetGUIDLow());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ rmapid = fields[0].GetUInt16();
+ rposx = fields[1].GetFloat();
+ rposy = fields[2].GetFloat();
+ rposz = fields[3].GetFloat();
+ //delete result;
+ plr->SetMovement(MOVE_UNROOT);
+ plr->RemoveAurasDueToSpell(42201); // Eternal Silence
+ plr->RemoveAurasDueToSpell(23775); // Stun Forever
+ plr->RemoveAurasDueToSpell(9454); // Freeze
+ //plr->RemoveAllAuras();
+ plr->TeleportTo(rmapid, rposx, rposy, rposz, rposo);
+ Send_Player(plr, MakeMsg("You Have Been Released By: %s.", CD->USER.c_str()));
+ sReason = " \00313["+_PARAMS[0]+"] : Has Been Released By: "+CD->USER+".";
+ Send_IRCA(ChanOrPM(CD), sReason, true, CD->TYPE);
+ }
+ else // SQL FAIL CHECK!!!!
+ {
+ sReason = " \00313["+_PARAMS[0]+"] : ERROR SQL FAILED CHAR NOT FOUND!!!!!!: "+CD->USER+".";
+ Send_IRCA(ChanOrPM(CD), sReason, true, CD->TYPE);
+ }
+ }
+ else
+ {
+ if(_PARAMS[1] == "")
+ _PARAMS[1] = "No Reason Given.";
+ plr->TeleportTo(1, 16220.7f, 16398.3f, -64.3786f, 0.825313f);
+ plr->SetMovement(MOVE_ROOT);
+ plr->CastSpell(plr, 42201, true); // Eternal Silence
+ plr->CastSpell(plr, 23775, true); // Stun Forever
+ plr->CastSpell(plr, 9454, true); // Freeze
+ plr->CastSpell(plr, 45472, true); // parachute
+ Send_Player(plr, MakeMsg("You Have Been Jailed By: %s. Reason: %s.", CD->USER.c_str(), _PARAMS[1].c_str()));
+ sReason = " \00313["+_PARAMS[0]+"] : Has Been Jailed By: "+CD->USER+". Reason: "+_PARAMS[1]+".";
+ Send_IRCA(ChanOrPM(CD), sReason, true, CD->TYPE);
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Online!", true, "ERROR");
+ }
+}
+
+void IRCCmd::Kick_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ if(_PARAMS[1] == "")
+ _PARAMS[1] = "No Reason Given.";
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ plr->GetSession()->KickPlayer();
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Been Kicked By: "+CD->USER+". Reason: "+_PARAMS[1]+".", true, CD->TYPE);
+ if(sWorld->getBoolConfig(CONFIG_SHOW_KICK_IN_WORLD))
+ sIRC.Send_WoW_System("Player|cffff0000 "+_PARAMS[0]+"|r kicked by|cffff0000 "+CD->USER+"|r. Reason:|cffff0000"+_PARAMS[1]+"|r.");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Online!", true, "ERROR");
+}
+
+void IRCCmd::Kill_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ if(plr->isAlive())
+ {
+ plr->DealDamage(plr, plr->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ plr->SaveToDB();
+ if(_PARAMS[1] == "")
+ _PARAMS[1] = "No Reason Given.";
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Been Killed By: %s.", _PARAMS[0].c_str(), CD->USER.c_str()) + + + " Reason: "+_PARAMS[1]+".", true, CD->TYPE);
+ Send_Player(plr, MakeMsg("You Have Been Killed By: %s. Reason: %s.", CD->USER.c_str(), _PARAMS[1].c_str()));
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Already Dead!", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Online!", true, "ERROR");
+}
+
+void IRCCmd::Lookup_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if(_PARAMS[0] == "acct")
+ {
+ uint32 acctid = atoi(_PARAMS[1].c_str());
+ if(sAccountMgr->GetId(_PARAMS[1]))
+ acctid = sAccountMgr->GetId(_PARAMS[1]);
+ if(acctid > 0)
+ {
+ std::string DateTime = "%a, %b %d, %Y - %h:%i%p";
+ QueryResult result = LoginDatabase.PQuery("SELECT id, username, last_ip, (SELECT banreason FROM account_banned WHERE id = %d LIMIT 1) as banned, (SELECT banreason FROM ip_banned WHERE ip = last_ip) as bannedip, DATE_FORMAT(last_login, '%s') FROM `account` WHERE id = %d", acctid, DateTime.c_str(), acctid, acctid);
+ if(result)
+ {
+ Field *fields = result->Fetch();
+
+ uint32 id = fields[0].GetUInt32();
+ std::string usrname = fields[1].GetString();
+ //uint32 gm = fields[2].GetUInt32();
+ std::string lastip = fields[3].GetString();
+ std::string banreason = fields[4].GetString();
+ std::string banreasonip = fields[5].GetString();
+ std::string lastlogin = fields[6].GetString();
+ //delete result;
+ QueryResult result1 = LoginDatabase.PQuery("SELECT gmlevel FROM `account_access` WHERE id = %d", acctid);
+ Field *fields1 = result1->Fetch();
+ uint32 gm = fields1[0].GetUInt32();
+
+ QueryResult chars = CharacterDatabase.PQuery("SELECT guid, name, (SELECT SUM(totaltime) FROM characters WHERE account = %d) AS tottime FROM characters WHERE account = %u", id, id);
+ std::string characters = "None";
+ std::string totaccttime = "Never Logged In";
+ if(chars)
+ {
+ characters = "";
+ Field *fields = chars->Fetch();
+ totaccttime = SecToDay(fields[2].GetString());
+ for (uint64 i=0; i < chars->GetRowCount(); i++)
+ {
+ std::string guid = fields[0].GetString();
+ std::string charname = fields[1].GetString();
+ characters.append(charname+"("+guid+"), ");
+ chars->NextRow();
+ }
+ //delete chars;
+ }
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Username:\x3\x31\x30 %s \xF|\x2 AccountID:\x3\x31\x30 %d \xF|\x2 GM Level:\x3\x31\x30 %d \xF|\x2 Last IP:\x3\x31\x30 %s \xF|\x2 Last Login:\x3\x31\x30 %s", usrname.c_str(), id, gm, lastip.c_str(), lastlogin.c_str()), true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Total Play Time:\x3\x31\x30 %s \xF|\x2 Characters:\x3\x31\x30 %s ", totaccttime.c_str(), characters.c_str()), true, CD->TYPE);
+ if(banreason.length() > 1)
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\0034This User Has An Account Ban. Ban Reason: %s", banreason.c_str()), true, CD->TYPE);
+ if(banreasonip.length() > 1)
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\0034This User Has An IP Ban. Ban Reason: %s", banreasonip.c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Account ID." ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = LoginDatabase.PQuery("SELECT id, username FROM `account` WHERE username LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string accts = "\002Account Search Results:\x3\x31\x30 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string acctid = fields[0].GetString();
+ std::string acctname = fields[1].GetString();
+ accts.append(acctname+"("+acctid+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), accts, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Username. I Cant Find Any Users With Those Search Terms." ,true, "ERROR");
+ }
+ }
+ if(_PARAMS[0] == "char")
+ {
+ uint32 plguid = atoi(_PARAMS[1].c_str());
+ if(sObjectMgr->GetPlayerGUIDByName(_PARAMS[1].c_str()))
+ plguid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[1].c_str());
+ if(plguid > 0)
+ {
+ //QueryResult result = CharacterDatabase.PQuery("SELECT guid, account, name, race, class, online, money, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 54), ' ' , -1) AS level, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 152), ' ' , -1) AS guildid, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 153), ' ' , -1) AS guildrank, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 609), ' ' , -1) AS xp, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 610), ' ' , -1) AS maxxp, SUBSTRING_INDEX(SUBSTRING_INDEX(data, ' ' , 1145), ' ' , -1) AS gold, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 1600), ' ' , -1) AS hk, totaltime FROM characters WHERE guid =%i", plguid);
+ QueryResult result = CharacterDatabase.PQuery("SELECT guid, account, name, race, class, online, money, level, xp, money, totalKills, totaltime FROM characters WHERE guid =%d", plguid);
+ uint32 latency = 0;
+ Player *chr = ObjectAccessor::FindPlayer(plguid);
+ if(chr)
+ {
+ latency = chr->GetSession()->GetLatency();
+ }
+ char templatency [100];
+ sprintf(templatency, "%ums", latency);
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string pguid = fields[0].GetString();
+ std::string pacct = fields[1].GetString();
+ std::string pname = fields[2].GetString();
+ uint32 praceid = fields[3].GetUInt32();
+ uint32 pclassid = fields[4].GetUInt32();
+ std::string ponline = (fields[5].GetInt32() == 1 ? "\x3\x30\x33Online" : "\x3\x30\x34Offline\xF");
+ unsigned int money = fields[6].GetInt32();
+ std::string plevel = fields[7].GetString();
+ //uint32 pguildid = fields[8].GetUInt32();
+ uint32 pguildid = 0;
+ //uint32 pguildrank = fields[9].GetUInt32();
+ uint32 pguildrank = 0;
+ std::string pxp = fields[8].GetString();
+ //std::string pmaxxp = fields[11].GetString();
+ std::string pmaxxp = fields[8].GetString();
+ //unsigned int money = fields[12].GetInt32(); now in own column and field 6
+ std::string hk = fields[9].GetString();
+ std::string totaltim = SecToDay(fields[10].GetString());
+ //delete result;
+ /*std::string sqlquery = "SELECT `gmlevel` FROM `account_access` WHERE `id` = '" + pacct + "';";
+ QueryResult result = LoginDatabase.Query(sqlquery.c_str());
+ Field *fields2 = result->Fetch();
+ std::string pgmlvl = fields2[0].GetString();*/
+ std::string pgmlvl = "0";
+ //delete result;
+ std::string guildinfo = "";
+ /*if (pguildid != 0)
+ {
+ Guild* guild = sObjectMgr->GetGuildById(pguildid);
+ if (guild)
+ {
+ guildinfo = " " + guild->GetRankName(pguildrank) + " Of " + guild->GetName();
+ }
+ }
+ else guildinfo = " None";*/
+ ChrRacesEntry const* prace = sChrRacesStore.LookupEntry(praceid);
+ ChrClassesEntry const* pclass = sChrClassesStore.LookupEntry(pclassid);
+
+ if (atoi(plevel.c_str()) < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ plevel += " (" + pxp + "/" + pmaxxp + ")";
+ unsigned int gold = money / 10000;
+ unsigned int silv = (money % 10000) / 100;
+ unsigned int cop = (money % 10000) % 100;
+ char tempgold [100];
+ sprintf(tempgold, "\x2\x3\x30\x37%ug \x3\x31\x34%us \x3\x30\x35%uc\xF", gold, silv, cop);
+ if (ponline == "\x3\x30\x33Online")
+ {
+ Player * plr = sObjectAccessor->FindPlayerByName(pname.c_str());
+ if (plr)
+ {
+ AreaTableEntry const* area = GetAreaEntryByAreaID(plr->GetAreaId());
+ ponline += " in " + area->area_name[sWorld->GetDefaultDbcLocale()];
+ if (area->zone != 0)
+ {
+ AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone);
+ ponline += " (" + zone->area_name[sWorld->GetDefaultDbcLocale()] + (std::string)")";
+ }
+ }
+ }
+ std::string pinfo = "\x2 About Player:\x3\x31\x30 " +pname+ "\xF |\x2 GM Level:\x3\x31\x30 " +pgmlvl+ "\xF |\x2 AcctID:\x3\x31\x30 " +pacct+ "\xF |\x2 CharID:\x3\x31\x30 " +pguid+ " \xF |\x2 Played Time:\x2\x3\x31\x30 " +totaltim.c_str()+" \xF |\x2 Latency:\x2\x3\x31\x30 "+templatency;
+ std::string pinfo2 = "\x2 Race:\x2\x3\x31\x30 " + prace->name[sWorld->GetDefaultDbcLocale()] + (std::string)"\xF |\x2 Class:\x2\x3\x31\x30 " + pclass->name[sWorld->GetDefaultDbcLocale()] + "\xF |\x2 Level:\x2\x3\x31\x30 " + plevel + "\xF |\x2 Money:\x2 " + tempgold + "\xF |\x2 Status:\x2 " + ponline;
+ // pinfo3 = " :" + " \x2Honor Kills:\x2\x3\x31\x30 " + hk;
+ Send_IRCA(ChanOrPM(CD),pinfo , true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD),pinfo2 , true, CD->TYPE);
+ // Send_IRCA(ChanOrPM(CD),pinfo3 , true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Character ID. (GUID)" ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = CharacterDatabase.PQuery("SELECT guid, account, name FROM characters WHERE name LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string items = "\x2 Character Search Results:\x3\x31\x30 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string guid = fields[0].GetString();
+ std::string account = fields[1].GetString();
+ std::string name = fields[2].GetString();
+ MakeUpper(name);
+ items.append(name+"(Account:"+account+" - GUID:"+guid+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), items, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Character. I Cant Find Any Characters With Those Search Terms." ,true, "ERROR");
+ }
+ }
+ if(_PARAMS[0] == "creature")
+ {
+ std::string creature = _PARAMS[1];
+ if(atoi(creature.c_str()) > 0)
+ {
+ WorldDatabase.EscapeString(creature);
+ std::string str;
+ stringstream ss(str);
+ int num;
+ QueryResult result;
+ if((ss >> num).fail())
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, modelid_A, name, (minlevel*maxlevel/2) as level, faction_A, armor, (SELECT count(*) FROM creature WHERE id = '%s') as spawns FROM creature_template WHERE entry = '%s';", _PARAMS[1].c_str(), _PARAMS[1].c_str());
+ else
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, modelid_A, name, (minlevel*maxlevel/2) as level, faction_A, armor, (SELECT count(*) FROM creature WHERE id = '%s') as spawns FROM creature_template WHERE name LIKE '%%%s%%';", _PARAMS[1].c_str(), _PARAMS[1].c_str());
+
+ if(result)
+ {
+ Field *fields = result->Fetch();
+
+ uint32 entry = fields[0].GetUInt32();
+ uint32 modelid = fields[1].GetUInt32();
+ std::string name = fields[2].GetString();
+ uint32 level = fields[3].GetUInt32();
+ uint32 faction = fields[4].GetUInt32();
+ uint32 armor = fields[5].GetUInt32();
+ uint32 spawns = fields[6].GetUInt32();
+ //delete result;
+
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Name:\x3\x31\x30 %s \xF|\x2 CreatureID:\x3\x31\x30 %d \xF|\x2 DisplayID:\x3\x31\x30 %d \xF|\x2 Spawns:\x3\x31\x30 %d", name.c_str(), entry, modelid, spawns), true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Level:\x3\x31\x30 %d \xF|\x2 Faction:\x3\x31\x30 %d \xF|\x2 Armor:\x3\x31\x30 %d", level, faction, armor), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Creature ID/Name." ,true, "ERROR");
+ }
+ /*else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, name FROM creature_template WHERE name LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string items = "\002Creature Search Results:\x3\x31\x30 ";
+ //Send_IRCA(ChanOrPM(CD), "", true, CD->TYPE);
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string CreatureID = fields[0].GetString();
+ std::string Name = fields[1].GetString();
+ items.append(Name+"("+CreatureID+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), items, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Creature. I Cant Find Any Creatures With Those Search Terms." ,true, "ERROR");
+ }*/
+ }
+ if(_PARAMS[0] == "faction")
+ {
+ std::string faction = _PARAMS[1];
+ if(atoi(faction.c_str()) > 0)
+ {
+ FactionEntry const *factionEntry = sFactionStore.LookupEntry(atoi(faction.c_str()));
+ if(factionEntry)
+ {
+ std::stringstream name;
+ name << factionEntry->name[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2 Faction:\x3\x31\x30 %s \xF|\x2 FactionID:\x3\x31\x30 %s",rname.c_str(), faction.c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown FactionID." ,true, "ERROR");
+
+ }
+ else
+ {
+ uint32 counter = 0;
+ std::string factions = "\002Faction Search Results:\x3\x31\x30 ";
+ for (uint32 id = 0; id < sFactionStore.GetNumRows(); id++)
+ {
+ FactionEntry const *factionEntry = sFactionStore.LookupEntry(id);
+ if(factionEntry)
+ {
+ MakeLower( _PARAMS[1] );
+ std::stringstream name;
+ name<< factionEntry->name[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ MakeLower( rname );
+ if (rname.find(_PARAMS[1]) != std::string::npos && counter < 10)
+ {
+ char factionid[100];
+ sprintf(factionid, "%d", id);
+ factions.append(rname+"("+factionid+")\xF | \x3\x31\x30\x2");
+ ++counter;
+ }
+ }
+
+ }
+
+ if(counter == 0)
+ factions.append("No Factions Found.");
+ Send_IRCA(ChanOrPM(CD), factions, true, CD->TYPE);
+
+ }
+ }
+ if(_PARAMS[0] == "go")
+ {
+ std::string gobject = _PARAMS[1];
+ if(atoi(gobject.c_str()) > 0)
+ {
+ WorldDatabase.EscapeString(_PARAMS[1]);
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, type, displayId, name, faction, (SELECT count(*) FROM gameobject WHERE id = '%s') as spawns FROM gameobject_template WHERE entry = '%s';", _PARAMS[1].c_str(), _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+
+ uint32 entry = fields[0].GetUInt32();
+ uint32 type = fields[1].GetUInt32();
+ uint32 modelid = fields[2].GetUInt32();
+ std::string name = fields[3].GetString();
+ uint32 faction = fields[4].GetUInt32();
+ uint32 spawns = fields[5].GetUInt32();
+ //delete result;
+
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2GO Name:\x3\x31\x30 %s \xF|\x2 GameobjectID:\x3\x31\x30 %d \xF|\x2 DisplayID:\x3\x31\x30 %d \xF|\x2 Spawns:\x3\x31\x30 %d", name.c_str(), entry, modelid, spawns), true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Type:\x3\x31\x30 %d \xF|\x2 Faction:\x3\x31\x30 %d", type, faction), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Creature ID." ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, name FROM gameobject_template WHERE name LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string gos = "\002Gameobject Search Results:\x3\x31\x30 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string GOID = fields[0].GetString();
+ std::string GoName = fields[1].GetString();
+ gos.append(GoName+"("+GOID+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), gos, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Game Object. I Cant Find Any Game Object's With Those Search Terms." ,true, "ERROR");
+ }
+ }
+ if(_PARAMS[0] == "item")
+ {
+ std::string item = _PARAMS[1];
+ if(atoi(item.c_str()) > 0)
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, name, displayid, (SELECT count(*) FROM creature_loot_template WHERE item = '%s') as loot FROM `item_template` WHERE entry = %s", _PARAMS[1].c_str(), _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ //QueryResult result2 = CharacterDatabase.PQuery("SELECT count(*) FROM `character_inventory` WHERE item = %s", _PARAMS[1].c_str());
+ //Field *fields2 = result2->Fetch();
+ //uint32 charcnt = fields2[0].GetUInt32();
+ uint32 charcnt = 0;
+ //delete result2;
+
+ uint32 ItemID = fields[0].GetUInt32();
+ std::string ItmName = fields[1].GetString();
+ uint32 DisplayID = fields[2].GetUInt32();
+ uint32 loots = 0;
+ loots = fields[3].GetUInt32();
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Item:\x3\x31\x30 %s \xF|\x2 ItemID:\x3\x31\x30 %d \xF|\x2 DisplayID:\x3\x31\x30 %d \xF|\x2 Owned By:\x3\x31\x30 %d players \xF|\x2 Dropped By:\x3\x31\x30 %d creatures", ItmName.c_str(), ItemID, DisplayID, charcnt, loots), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown ItemID." ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, name FROM `item_template` WHERE name LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string items = "\002Item Search Results:\x3\x31\x30 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string ItemID = fields[0].GetString();
+ std::string ItemName = fields[1].GetString();
+ items.append(ItemName+"("+ItemID+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), items, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Item. I Cant Find Any Items With Those Search Terms." ,true, "ERROR");
+ }
+ }
+ if(_PARAMS[0] == "quest")
+ {
+ std::string quest = _PARAMS[1];
+ if(atoi(quest.c_str()) > 0)
+ {
+ WorldDatabase.EscapeString(_PARAMS[1]);
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, Title FROM quest_template WHERE entry = '%s';", _PARAMS[1].c_str(), _PARAMS[1].c_str());
+ if(result)
+ {
+ QueryResult result2 = CharacterDatabase.PQuery("SELECT count(*) FROM character_queststatus WHERE quest = '%s' AND status = '1';", _PARAMS[1].c_str());
+ Field *fields2 = result2->Fetch();
+ uint32 status = fields2[0].GetUInt32();
+ //delete result2;
+
+ Field *fields = result->Fetch();
+ uint32 entry = fields[0].GetUInt32();
+ std::string name = fields[1].GetString();
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Quest Name:\x3\x31\x30 %s \xF|\x2 QuestID:\x3\x31\x30 %d \xF|\x2 Completed:\x3\x31\x30 %d times", name.c_str(), entry, status), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Quest ID." ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, Title FROM quest_template WHERE Title LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string quests = "\002Quest Search Results:\x3\x31\x30 ";
+ //Send_IRCA(ChanOrPM(CD), "", true, CD->TYPE);
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string QuestID = fields[0].GetString();
+ std::string QuestName = fields[1].GetString();
+ quests.append(QuestName+"("+QuestID+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), quests, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Quest. I Cant Find Any Quest's With Those Search Terms." ,true, "ERROR");
+ }
+ }
+ if(_PARAMS[0] == "skill")
+ {
+ std::string skill = _PARAMS[1];
+ if(atoi(skill.c_str()) > 0)
+ {
+ SkillLineEntry const *skillInfo = sSkillLineStore.LookupEntry(atoi(skill.c_str()));
+ if(skillInfo)
+ {
+ std::stringstream name;
+ name << skillInfo->name[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Skill:\x3\x31\x30 %s \xF|\x2 SkillID:\x3\x31\x30 %s",rname.c_str(), skill.c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown SkillID." ,true, "ERROR");
+
+ }
+ else
+ {
+ uint32 counter = 0;
+ std::string skills = "\002Skill Search Results:\x3\x31\x30 ";
+ for (uint32 id = 0; id < sSkillLineStore.GetNumRows(); id++)
+ {
+ SkillLineEntry const *skillInfo = sSkillLineStore.LookupEntry(id);
+ if(skillInfo)
+ {
+ MakeLower( _PARAMS[1] );
+ std::stringstream name;
+ name << skillInfo->name[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ MakeLower( rname );
+ if (rname.find(_PARAMS[1]) != std::string::npos && counter < 10)
+ {
+ char skillid[100];
+ sprintf(skillid, "%d", id);
+ skills.append(rname+"("+skillid+")\xF | \x3\x31\x30\x2");
+ ++counter;
+ }
+ }
+ }
+ if(counter == 0)
+ skills.append("No Skills Found.");
+ Send_IRCA(ChanOrPM(CD), skills, true, CD->TYPE);
+ }
+ }
+ if(_PARAMS[0] == "spell")
+ {
+ std::string spell = _PARAMS[1];
+ if(atoi(spell.c_str()) > 0)
+ {
+ SpellEntry const *spellInfo = sSpellStore.LookupEntry(atoi(spell.c_str()));
+ if(spellInfo)
+ {
+ std::stringstream name;
+ name << spellInfo->SpellName[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Spell:\x3\x31\x30 %s \xF|\x2 SpellID:\x3\x31\x30 %s",rname.c_str(), spell.c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown SpellID." ,true, "ERROR");
+
+ }
+ else
+ {
+ uint32 counter = 0;
+ std::string spells = "\002Spell Search Results:\x3\x31\x30 ";
+ for (uint32 id = 0; id < sSpellStore.GetNumRows(); id++)
+ {
+ SpellEntry const *spellInfo = sSpellStore.LookupEntry(id);
+ if(spellInfo)
+ {
+ MakeLower( _PARAMS[1] );
+ std::stringstream name;
+ name << spellInfo->SpellName[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ MakeLower(rname);
+ if (rname.find(_PARAMS[1]) != std::string::npos && counter < 10)
+ {
+ char itemid[100];
+ sprintf(itemid, "%d", id);
+ spells.append(rname+"("+itemid+")\xF | \x3\x31\x30\x2");
+ ++counter;
+ }
+ }
+ }
+ if(counter == 0)
+ spells.append("No Spells Found.");
+ Send_IRCA(ChanOrPM(CD), spells, true, CD->TYPE);
+ }
+ }
+ if(_PARAMS[0] == "tele")
+ {
+ std::string tele = _PARAMS[1];
+ WorldDatabase.EscapeString(_PARAMS[1]);
+ if(atoi(tele.c_str()) > 0)
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT * FROM `game_tele` WHERE id = %s", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+
+ uint32 teleid = fields[0].GetUInt32();
+ uint32 pos_x = fields[1].GetUInt32();
+ uint32 pos_y = fields[2].GetUInt32();
+ uint32 pos_z = fields[3].GetUInt32();
+ uint32 oriet = fields[4].GetUInt32();
+ uint32 map = fields[5].GetUInt32();
+ std::string telname = fields[6].GetString();
+ //delete result;
+
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Tele Name:\x3\x31\x30 %s \xF|\x2 TeleID:\x3\x31\x30 %d \xF|\x2 Coordinates:\x3\x31\x30 [X: %d, Y: %d, Z: %d, MAP: %d, Orientation: %d]", telname.c_str(), teleid, pos_x, pos_y, pos_z, map, oriet), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Teleport Location ID." ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT id, name FROM `game_tele` WHERE name LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string teles = "\002Tele Location Search Results:\x3\x31\x30 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string TeleID = fields[0].GetString();
+ std::string TeleName = fields[1].GetString();
+ teles.append(TeleName+"("+TeleID+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ Send_IRCA(ChanOrPM(CD), teles, true, CD->TYPE);
+ //delete result;
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Item. I Cant Find Any Items With Those Search Terms." ,true, "ERROR");
+ }
+ }
+}
+
+void IRCCmd::Level_Player(_CDATA *CD)
+{
+
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ Player* plr = GetPlayer(_PARAMS[0]);
+ if (!plr)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Online, Offline edit will break char, cancled, use minimnager.", true, "ERROR");
+ return;
+ }
+ std::string player = _PARAMS[0];
+ normalizePlayerName(player);
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(player.c_str());
+ std::string s_newlevel = _PARAMS[1];
+ uint8 i_newlvl = atoi(s_newlevel.c_str());
+ if(!guid)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Found!", true, "ERROR");
+ return;
+ } else if ( i_newlvl < 1 || i_newlvl > sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL) )
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Level Must Be Between 1 And 85!"), true, "ERROR");
+ return;
+ } else
+ {
+ Player *chr = sObjectMgr->GetPlayer(guid);
+ int32 i_oldlvl = chr->getLevel();
+ if(chr)
+ {
+ chr->GiveLevel(i_newlvl);
+ chr->InitTalentForLevel();
+ chr->SetUInt32Value(PLAYER_XP,0);
+ WorldPacket data;
+ ChatHandler CH(chr->GetSession());
+ if(i_oldlvl == i_newlvl)
+ CH.FillSystemMessageData(&data, "Your level progress has been reset.");
+ else
+ if(i_oldlvl < i_newlvl)
+ CH.FillSystemMessageData(&data, fmtstring("You have been leveled up (%i)",i_newlvl-i_oldlvl));
+ else
+ if(i_oldlvl > i_newlvl)
+ CH.FillSystemMessageData(&data, fmtstring("You have been leveled down (%i)",i_newlvl-i_oldlvl));
+ chr->GetSession()->SendPacket( &data );
+ }
+ else
+ {
+ //Tokens values;
+ //Player::LoadValuesArrayFromDB(values,guid);
+ //Player::SetUInt32ValueInArray(values,UNIT_FIELD_LEVEL,i_newlvl);
+ //Player::SetUInt32ValueInArray(values,PLAYER_XP,0);
+ //Player::SaveValuesArrayInDB(values,guid);
+ Send_IRCA(CD->USER, "\0034[ERROR] : NOT SUPPORTED!", true, "ERROR");
+ }
+ }
+ Send_IRCA(ChanOrPM(CD), "\00313[" + _PARAMS[0]+ "] : Has Been Leveled To " + _PARAMS[1] + ". By: "+CD->USER+".", true, CD->TYPE);
+
+}
+
+void IRCCmd::Money_Player(_CDATA *CD)
+{
+
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ std::string player = _PARAMS[0];
+ normalizePlayerName(player);
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(player.c_str());
+ Player *chr = ObjectAccessor::FindPlayer(guid);
+ Player* plr = GetPlayer(_PARAMS[0]);
+ if (!plr)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Online, Offline edit will break char, cancled, use minimnager.", true, "ERROR");
+ return;
+ }
+
+ std::string s_money = _PARAMS[1];
+ int32 money = atoi(s_money.c_str());
+ unsigned int gold = money / 10000;
+ unsigned int silv = (money % 10000) / 100;
+ unsigned int cop = (money % 10000) % 100;
+ char tempgold [100];
+ sprintf(tempgold, "\x2\x3\x30\x37%ug \x3\x31\x34%us \x3\x30\x35%uc\xF", gold, silv, cop);
+ if(!guid)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Found!", true, "ERROR");
+ return;
+ }
+ else
+ {
+ Player *chr = ObjectAccessor::FindPlayer(guid);
+ uint32 moneyuser = 0;
+ if(chr)
+ moneyuser = chr->GetMoney();
+ else {
+ CharacterDatabase.EscapeString(player);
+ std::string sqlquery = "SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data, ' ' , 1462), ' ' , -1) AS `gold` FROM `characters` WHERE `name` = '"+player+"';";
+ QueryResult result = CharacterDatabase.Query(sqlquery.c_str());
+ Field *fields = result->Fetch();
+ moneyuser = fields[0].GetInt32();
+ //delete result;
+ }
+ int32 addmoney = money;
+ int32 newmoney = moneyuser + addmoney;
+ char s_newmoney[255];
+ sprintf(s_newmoney,"%d",newmoney);
+ if(addmoney < 0)
+ {
+ sLog->outDetail("USER1: %i, ADD: %i, DIF: %i\\n", moneyuser, addmoney, newmoney);
+ if(newmoney <= 0 )
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+player+"] : Has Had All Money Taken By: "+CD->USER.c_str()+".", true, CD->TYPE);
+ if(chr)
+ {
+ chr->SetMoney(0);
+ Send_Player(chr, MakeMsg("You Have Been Liquidated By: %s. Total Money Is Now 0.", CD->USER.c_str()));
+ }
+ else
+ CharacterDatabase.PExecute("UPDATE `characters` SET data=concat(substring_index(data,' ',1462-1),' ','%u',' ', right(data,length(data)-length(substring_index(data,' ',1462))-1) ) where guid='%u'",newmoney, guid );
+ }
+ else
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+player+"] : Has Had ("+s_money+"\00313) Taken From Them By: "+CD->USER.c_str()+".", true, CD->TYPE);
+ if(chr)
+ {
+ chr->SetMoney( newmoney );
+ Send_Player(chr, MakeMsg("You Have Had %s Copper Taken From You By: %s.", _PARAMS[1].c_str(), CD->USER.c_str()));
+ }
+ else
+ CharacterDatabase.PExecute("UPDATE `characters` SET data=concat(substring_index(data,' ',1462-1),' ','%u',' ', right(data,length(data)-length(substring_index(data,' ',1462))-1) ) where guid='%u'",newmoney, guid );
+ }
+ }
+ else
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+player+"] : Has Been Given ("+tempgold+"\00313) From: "+CD->USER.c_str()+".", true, CD->TYPE);
+ if(chr)
+ {
+ chr->ModifyMoney( addmoney );
+ Send_Player(chr, MakeMsg("You Have Been Given %s Copper. From: %s.", _PARAMS[1].c_str(), CD->USER.c_str()));
+ }
+ else
+ CharacterDatabase.PExecute("UPDATE `characters` SET data=concat(substring_index(data,' ',1462-1),' ','%u',' ', right(data,length(data)-length(substring_index(data,' ',1462))-1) ) where guid='%u'",newmoney, guid );
+ }
+ }
+}
+
+void IRCCmd::Mute_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ normalizePlayerName(_PARAMS[0]);
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[0]);
+ if(guid)
+ {
+ if(_PARAMS[1] == "release")
+ {
+ Player* plr = ObjectAccessor::FindPlayer(guid);
+ uint32 account_id = 0;
+ account_id = sObjectMgr->GetPlayerAccountIdByGUID(guid);
+ LoginDatabase.PExecute("UPDATE `account` SET `mutetime` = '0' WHERE `id` = '%u'", account_id );
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Been UnMuted By: "+CD->USER+"." , true, CD->TYPE);
+ if(plr)
+ {
+ plr->GetSession()->m_muteTime = 0;
+ Send_Player(plr, MakeMsg("You Have Been UnMuted By: %s.", CD->USER.c_str()));
+ }
+ }
+ else
+ {
+ if(_PARAMS[2] == "")
+ _PARAMS[2] = "No Reason Given";
+ Player* plr = ObjectAccessor::FindPlayer(guid);
+ time_t mutetime = time(NULL) + atoi(_PARAMS[1].c_str())*60;
+ uint32 account_id = 0;
+ account_id = sObjectMgr->GetPlayerAccountIdByGUID(guid);
+ if(plr) plr->GetSession()->m_muteTime = mutetime;
+ LoginDatabase.PExecute("UPDATE `account` SET `mutetime` = " UI64FMTD " WHERE `id` = '%u'",uint64(mutetime), account_id );
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Been Muted By: "+CD->USER+". For: "+_PARAMS[1]+" Minutes. Reason: "+_PARAMS[2] , true, CD->TYPE);
+ if(plr) Send_Player(plr, MakeMsg("You Have Been Muted By: %s. For: %s Minutes. Reason: %s", CD->USER.c_str(), _PARAMS[1].c_str(), _PARAMS[2].c_str()));
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Does Not Exist!", true, "ERROR");
+}
+
+void IRCCmd::Online_Players(_CDATA *CD)
+{
+ sIRC.Script_Lock[MCS_Players_Online] = true;
+ ACE_Based::Thread script(new mcs_OnlinePlayers(CD));
+}
+
+void IRCCmd::PM_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ if(plr->isAcceptWhispers())
+ {
+ std::string sMsg = MakeMsg("|cffFE87FD[%s] Whispers: %s|r", CD->USER.c_str(), _PARAMS[1].c_str());
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_SYSTEM;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint64)plr->GetGUID();
+ data << (uint32)0;
+ data << (uint64)plr->GetGUID();
+ data << (uint32)(sMsg.length()+1);
+ data << sMsg;
+ data << (uint8)0;
+ plr->GetSession()->SendPacket(&data);
+ plr->SendPlaySound(3081, true);
+ Send_IRCA(ChanOrPM(CD), "\00313To ["+_PARAMS[0]+"] : "+_PARAMS[1]+".", true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Is Not Accepting Private Messages!", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player not online!", true, "ERROR");
+}
+
+void IRCCmd::Restart_Trinity(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+ if(_PARAMS[0] == "cancel")
+ {
+ sWorld->ShutdownCancel();
+ Send_IRCA(ChanOrPM(CD), "\0034Server Restart Has Been Cancelled.", true, CD->TYPE);
+ }
+
+ int32 i_time = atoi(_PARAMS[0].c_str());
+ if (i_time < 0)
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Please Enter A Number! And No Negative Numbers! "+_PARAMS[0]+" Seconds!?", true, CD->TYPE);
+ return;
+ }
+ if (i_time > 1)
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Has Requested Server To Restart In "+_PARAMS[0]+" Seconds!", true, CD->TYPE);
+ sWorld->ShutdownServ(i_time,SHUTDOWN_MASK_RESTART, RESTART_EXIT_CODE);
+ Delay(i_time*1000);
+ Send_IRCA(ChanOrPM(CD), "\0034Server Will Now Restart.. Be Back In A Flash!", true, CD->TYPE);
+ }
+}
+
+void IRCCmd::Revive_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ if(plr->isDead())
+ {
+ plr->ResurrectPlayer(0.5f);
+ plr->SpawnCorpseBones();
+ plr->SaveToDB();
+ sIRC.Send_IRC_Channel(ChanOrPM(CD), " \00313["+_PARAMS[0]+"] : Has Been Revived By: " + CD->USER, true, CD->TYPE);
+ Send_Player(plr, MakeMsg("You Have Been Revived By: %s.", CD->USER.c_str()));
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Dead!", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Online!", true, "ERROR");
+}
+
+void IRCCmd::Saveall_Player(_CDATA *CD)
+{
+ sObjectAccessor->SaveAllPlayers();
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Has Saved All Players!", true, CD->TYPE);
+}
+
+void IRCCmd::Server(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if(_PARAMS[0] == "setmotd")
+ {
+ sWorld->SetMotd(_PARAMS[1]);
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Has Set New Message Of The Day To: "+_PARAMS[1], true, CD->TYPE);
+ }
+ /*if(_PARAMS[0] == "flusharenapoints")
+ {
+ sArenaTeamMgr->DistributeArenaPoints();
+ }*/
+}
+
+void IRCCmd::Shutdown_Trinity(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+ if(_PARAMS[0] == "cancel")
+ {
+ sWorld->ShutdownCancel();
+ Send_IRCA(ChanOrPM(CD), "\0034Server Shutdown Has Been Cancelled.", true, CD->TYPE);
+ }
+
+ int32 i_time = atoi(_PARAMS[0].c_str());
+ if (i_time < 0)
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Please Enter A Number! And No Negative Numbers! "+_PARAMS[0]+" Seconds!?", true, CD->TYPE);
+ return;
+ }
+ if (i_time > 1)
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Has Requested Server To Be Shut Down In "+_PARAMS[0]+" Seconds!", true, CD->TYPE);
+ sWorld->ShutdownServ(i_time, 0 , SHUTDOWN_EXIT_CODE);
+ Delay(i_time*1000);
+ Send_IRCA(ChanOrPM(CD), "\0034Server Will Now Shut Down.. Good Bye!", true, CD->TYPE);
+ }
+}
+
+void IRCCmd::Spell_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ uint32 spell = atoi(_PARAMS[2].c_str());
+ SpellEntry const *spellInfo = sSpellStore.LookupEntry(spell);
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ if(spellInfo)
+ {
+ std::stringstream name;
+ name << spellInfo->SpellName[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ if(_PARAMS[1] == "cast")
+ {
+ plr->CastSpell(plr, spell, true);
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Had Spell "+rname+" Casted On Them.", true, CD->TYPE);
+ }
+ if(_PARAMS[1] == "learn")
+ {
+ plr->learnSpell(spell, true);
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Learned Spell "+rname+".", true, CD->TYPE);
+ }
+ if(_PARAMS[1] == "unlearn")
+ {
+ plr->removeSpell(spell);
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Unlearned Spell "+rname+".", true, CD->TYPE);
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Incorrect Spell ID!", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Online!", true, "ERROR");
+
+}
+
+void IRCCmd::Sysmsg_Server(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ std::string ircchan = "#";
+ ircchan += sIRC._irc_chan[sIRC.anchn].c_str();
+ if(_PARAMS[0] == "a")
+ {
+ std::string str = _PARAMS[1];
+ std::string ancmsg = MakeMsg("\00304,08\037/!\\\037\017\00304 System Message \00304,08\037/!\\\037\017 %s",_PARAMS[1].c_str());
+ sWorld->SendWorldText(11997,str.c_str());
+ sIRC.Send_IRC_Channel(ircchan, ancmsg, true);
+ }
+ else if (_PARAMS[0] == "e")
+ {
+ std::string str = _PARAMS[1];
+ std::string notstr = "[Server Event]: " + _PARAMS[1];
+ std::string notmsg = MakeMsg("\00304,08\037/!\\\037\017\00304 Server Event \00304,08\037/!\\\037\017 %s",_PARAMS[1].c_str());
+ WorldPacket data(SMSG_NOTIFICATION, (notstr.size()+1));
+ data << notstr;
+ WorldPacket data2(SMSG_PLAY_SOUND,32);
+ data2 << (uint32)1400;
+ sWorld->SendGlobalMessage(&data2);
+ sWorld->SendGlobalMessage(&data);
+ sWorld->SendWorldText(11998,str.c_str());
+ sIRC.Send_IRC_Channel(ircchan, notmsg, true);
+ }
+ else if (_PARAMS[0] == "n")
+ {
+ std::string str = "Global notify: " + _PARAMS[1];
+ std::string notmsg = MakeMsg("\00304,08\037/!\\\037\017\00304 Global Notify \00304,08\037/!\\\037\017 %s",_PARAMS[1].c_str());
+ WorldPacket data(SMSG_NOTIFICATION, (str.size()+1));
+ data << str;
+ sWorld->SendGlobalMessage(&data);
+ sIRC.Send_IRC_Channel(ircchan, notmsg, true);
+ }
+ else if (_PARAMS[0] == "gm")
+ {
+ std::string str = "GM Announcement: " + _PARAMS[1];
+ WorldPacket data(SMSG_NOTIFICATION, (str.size()+1));
+ data << str;
+ sWorld->SendGlobalGMMessage(&data);
+
+ }
+ else if (_PARAMS[0] == "add")
+ {
+ WorldDatabase.PExecute( "INSERT INTO IRC_AutoAnnounce (message, addedby) VALUES ('%s', '%s')", _PARAMS[1].c_str(), CD->USER.c_str());
+ std::string str = _PARAMS[1];
+ std::string ancmsg = MakeMsg("\00304,08\037/!\\\037\017\00304 Automatic System Message \00304,08\037/!\\\037\017 %s",_PARAMS[1].c_str());
+ sWorld->SendWorldText(11999,str.c_str());
+ sIRC.Send_IRC_Channel(ircchan, ancmsg, true);
+ }
+ else if (_PARAMS[0] == "del")
+ {
+ WorldDatabase.PExecute( "DELETE FROM IRC_AutoAnnounce WHERE id = %s", _PARAMS[1].c_str());
+ Send_IRCA(ChanOrPM(CD), MakeMsg("Deleted Automatic Announcement Message ID: %s", _PARAMS[1].c_str()), true, CD->TYPE);
+ }
+ else if (_PARAMS[0] == "list")
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT * FROM IRC_AutoAnnounce LIMIT 5;", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string id = fields[0].GetString();
+ std::string message = fields[1].GetString();
+ std::string addedby = fields[2].GetString();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("ID: %s - Added By: %s - Message: %s", id.c_str(), addedby.c_str(), message.c_str()), true, CD->TYPE);
+ result->NextRow();
+ }
+ //delete result;
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Auto Announce Messages Are In The Database.", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Please Use (a-Announce)(n-Notify)(e-Event) As Second Parameter!", true, "ERROR");
+}
+
+void IRCCmd::Tele_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 4);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ bool DoTeleport = false;
+ float pX, pY, pZ, pO = 0;
+ uint32 mapid = 0;
+ std::string rMsg = " \0034[ERROR] : Teleport Failed!";
+ std::string wMsg = "Invalid Tele Location";
+ Player* plr = GetPlayer(_PARAMS[0]);
+ if(plr)
+ {
+ if(plr->isInFlight() || plr->isInCombat())
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : %s Is Busy And Cannot Be Teleported! They Could Be In Combat, Or Flying.",_PARAMS[0].c_str()), true, "ERROR");
+ return;
+ }
+ }
+ if(_PARAMS[1] == "l" || _PARAMS[1].size() > 2)
+ {
+ if(_PARAMS[1].size() > 1)
+ _PARAMS[2] = _PARAMS[1];
+ WorldDatabase.EscapeString(_PARAMS[2]);
+ QueryResult result = WorldDatabase.PQuery("SELECT position_x, position_y, position_z, orientation, map FROM game_tele WHERE name='%s';", _PARAMS[2].c_str());
+ if (result)
+ {
+ Field *fields = result->Fetch();
+ pX = fields[0].GetFloat();
+ pY = fields[1].GetFloat();
+ pZ = fields[2].GetFloat();
+ pO = fields[3].GetFloat();
+ mapid = fields[4].GetUInt16();
+ //delete result;
+ rMsg = MakeMsg(" \00313[%s] : Teleported To %s! By: %s.",
+ _PARAMS[0].c_str(),
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Have Been Teleported To %s By: %s.",
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ DoTeleport = true;
+ }
+ else
+ {
+ WorldDatabase.EscapeString(_PARAMS[2]);
+ QueryResult result = WorldDatabase.PQuery("SELECT name FROM game_tele WHERE name LIKE '%%%s%%' LIMIT 7;", _PARAMS[2].c_str());
+ if (result)
+ {
+ std::string telename = "<> ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ Field *fields = result->Fetch();
+ telename.append(fields[0].GetString());
+ result->NextRow();
+ telename.append(" <> ");
+ }
+ //delete result;
+ Send_IRCA(CD->USER, "I Cannot Find Location: "+_PARAMS[2]+" . Perhaps One Of These Will Work For You.", true, "ERROR");
+ Send_IRCA(CD->USER, telename, true, "ERROR");
+ return;
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Location Not Found! Nothing Even Close Found!", true, "ERROR");
+ return;
+ }
+ }
+ else if(_PARAMS[1] == "c")
+ {
+ std::string* _PARAMSA = getArray(_PARAMS[2], 4);
+ pX = atof(_PARAMSA[1].c_str());
+ pY = atof(_PARAMSA[2].c_str());
+ pZ = atof(_PARAMSA[3].c_str());
+ mapid = atoi(_PARAMSA[0].c_str());
+ rMsg = MakeMsg(" \00313[%s] : Teleported To Map: %s. Position: X(%s) Y(%s) Z(%s)! By: %s.",
+ _PARAMS[0].c_str(),
+ _PARAMSA[0].c_str(),
+ _PARAMSA[1].c_str(),
+ _PARAMSA[2].c_str(),
+ _PARAMSA[3].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Have Been Teleported To Map: %s. Position: X(%s) Y(%s) Z(%s)! By: %s.",
+ _PARAMSA[0].c_str(),
+ _PARAMSA[1].c_str(),
+ _PARAMSA[2].c_str(),
+ _PARAMSA[3].c_str(),
+ CD->USER.c_str());
+ DoTeleport = true;
+ }
+ else if(_PARAMS[1] == "r")
+ {
+ if(plr)
+ {
+ pX = plr->m_recallX;
+ pY = plr->m_recallY;
+ pZ = plr->m_recallZ;
+ pO = plr->m_recallO;
+ mapid = plr->m_recallMap;
+ rMsg = MakeMsg(" \00313[%s] : Has Been Recalled To Their Previous Location.",
+ _PARAMS[0].c_str());
+ wMsg = MakeMsg("You Have Been Recalled To Your Previous Location. By: %s",
+ CD->USER.c_str());
+ DoTeleport = true;
+ }
+ else
+ {
+ Send_IRCA(CD->USER, MakeMsg("\00313[%s] : Cannot Be Recalled, They Are Not Online.", _PARAMS[0].c_str()), true, "ERROR");
+ return;
+ }
+
+ }
+ else if(_PARAMS[1] == "to")
+ {
+ Player* plr2 = GetPlayer(_PARAMS[2]);
+ if(plr2)
+ {
+ plr2->GetContactPoint(plr, pX, pY, pZ);
+ mapid = plr2->GetMapId();
+ }
+ else
+ {
+ if(uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[2].c_str()))
+ {
+ bool in_flight;
+ Player::LoadPositionFromDB(mapid, pX, pY, pZ, pO, in_flight, guid);
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Second Player Not Found!", true, "ERROR");
+ return;
+ }
+ }
+ rMsg = MakeMsg(" \00313[%s] : Teleported To Player: [%s] By: %s.",
+ _PARAMS[0].c_str(),
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Are Being Teleported To: %s. By: %s.",
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ DoTeleport = true;
+ }
+ else if(_PARAMS[1] == "cr")
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT position_x,position_y,position_z,orientation,map FROM creature WHERE guid ='%s' LIMIT 1", _PARAMS[2].c_str());
+ if(!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Creature GUID not found", true, "ERROR");
+ }
+ else
+ {
+ Field *fields = result->Fetch();
+ pX = fields[0].GetFloat();
+ pY = fields[1].GetFloat();
+ pZ = fields[2].GetFloat();
+ pO = fields[3].GetFloat();
+ mapid = fields[4].GetUInt16();
+
+ rMsg = MakeMsg(" \00313[%s] : Teleported To Creature: [%s] By: %s.",
+ _PARAMS[0].c_str(),
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Are Being Teleported To: %s. By: %s.",
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ DoTeleport = true;
+ //delete result;
+ }
+ }
+ else if(_PARAMS[1] == "go")
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT position_x,position_y,position_z,orientation,map FROM gameobject WHERE guid ='%s' LIMIT 1", _PARAMS[2].c_str());
+ if(!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : GO GUID not found", true, "ERROR");
+ }
+ else
+ {
+ Field *fields = result->Fetch();
+ pX = fields[0].GetFloat();
+ pY = fields[1].GetFloat();
+ pZ = fields[2].GetFloat();
+ pO = fields[3].GetFloat();
+ mapid = fields[4].GetUInt16();
+
+ rMsg = MakeMsg(" \00313[%s] : Teleported To Gameobject: [%s] By: %s.",
+ _PARAMS[0].c_str(),
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Are Being Teleported To: %s. By: %s.",
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ DoTeleport = true;
+ //delete result;
+ }
+ }
+ else if(_PARAMS[1] == "homebind")
+ {
+ QueryResult result = CharacterDatabase.PQuery("SELECT position_x,position_y,position_z,map FROM `character_homebind` WHERE guid = '%d'", plr->GetGUID());
+ if(!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unexpected Error Loading Homebind Location", true, "ERROR");
+ }
+ else
+ {
+ Field *fields = result->Fetch();
+ pX = fields[0].GetFloat();
+ pY = fields[1].GetFloat();
+ pZ = fields[2].GetFloat();
+ pO = 1;
+ mapid = fields[3].GetUInt16();
+
+ rMsg = MakeMsg(" \00313[%s] : Teleported To Homebind Location By: %s.",
+ _PARAMS[0].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Are Being Teleported To Your Homebind Location By: %s.",
+ CD->USER.c_str());
+ DoTeleport = true;
+ //delete result;
+ }
+
+ }
+ if(DoTeleport)
+ {
+ if(MapManager::IsValidMapCoord(mapid, pX ,pY ,pZ))
+ {
+ //if(!sIRC.BeenToGMI(pX, pY, _PARAMS[0], CD->USER))
+ //{
+ //if player is online teleport them in real time, if not set the DB to our coordinates.
+ if(plr)
+ {
+ plr->SaveRecallPosition();
+ plr->TeleportTo(mapid, pX, pY, pZ, pO);
+ sIRC.Send_IRC_Channel(ChanOrPM(CD), rMsg, true, CD->TYPE);
+ Send_Player(plr, wMsg);
+ }
+ else
+ {
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[0]);
+ Player::SavePositionInDB(mapid,pX,pY,pZ,pO,sMapMgr->GetZoneId(mapid,pX,pY,pZ),guid);
+ sIRC.Send_IRC_Channel(ChanOrPM(CD), rMsg + " \0034*Offline Tele.* ", true, CD->TYPE);
+ }
+ //}
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Invalid Location!", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Invalid Paramaters, Please Try Again [ "+sIRC._cmd_prefx+"help tele ] For More Information. ", true, "ERROR");
+}
+
+void IRCCmd::Top_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ uint32 limitr = 10;
+ if(atoi(_PARAMS[1].c_str()) > 0 && GetLevel(CD->USER) >= sIRC._op_gm_lev)
+ limitr = atoi(_PARAMS[1].c_str());
+ if(_PARAMS[0] == "accttime")
+ {
+ QueryResult result = CharacterDatabase.PQuery("SELECT account, name, (SUM(totaltime)) AS combinetime FROM characters GROUP BY account ORDER BY combinetime DESC LIMIT 0, %d ", limitr);
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string tptime = MakeMsg("\x2 Top%d Accounts By Played Time:\x3\x31\x30 ", limitr);
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ uint32 account = fields[0].GetUInt32();
+ std::string PlName = GetAcctNameFromID(account);
+ std::string Time = SecToDay(fields[2].GetString());
+ uint32 rank = i+1;
+ tptime.append(MakeMsg("[%u]%s %s \xF| \x3\x31\x30\x2", rank, PlName.c_str(), Time.c_str()));
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), tptime, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Accounts Returned." ,true, "ERROR");
+ }
+ if(_PARAMS[0] == "chartime")
+ {
+ QueryResult result = CharacterDatabase.PQuery("SELECT name, totaltime FROM characters ORDER BY totaltime DESC LIMIT 0, %d ", limitr);
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string tptime = MakeMsg("\x2 Top%d Characters By Played Time:\x3\x31\x30 ", limitr);
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string Name = fields[0].GetString();
+ std::string Time = SecToDay(fields[1].GetString());
+ uint32 rank = i+1;
+ tptime.append(MakeMsg("[%u]%s %s \xF| \x3\x31\x30\x2", rank, Name.c_str(), Time.c_str()));
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), tptime, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Characters Returned." ,true, "ERROR");
+ }
+ if(_PARAMS[0] == "money")
+ {
+ // QueryResult result = CharacterDatabase.PQuery("SELECT name, CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(data, ' ', 1462), ' ', -1) AS UNSIGNED) AS money FROM characters ORDER BY money DESC LIMIT 0, %d ", limitr);
+ QueryResult result = CharacterDatabase.PQuery("SELECT name, money FROM characters ORDER BY money DESC LIMIT 0, %d ", limitr);
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string tptime = MakeMsg("\x2 Top%d Characters By Money:\x3\x31\x30 ", limitr);
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string Name = fields[0].GetString();
+ unsigned int money = fields[1].GetInt32();
+
+ uint32 rank = i+1;
+
+ unsigned int gold = money / 10000;
+ unsigned int silv = (money % 10000) / 100;
+ unsigned int cop = (money % 10000) % 100;
+ char tempgold [100];
+ sprintf(tempgold, "\x2\x3\x30\x37%ug \x3\x31\x34%us \x3\x30\x35%uc\xF", gold, silv, cop);
+
+ tptime.append(MakeMsg("[%u]%s %s \xF| \x3\x31\x30\x2", rank, Name.c_str(), tempgold));
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), tptime, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Characters Returned." ,true, "ERROR");
+ }
+
+}
+
+void IRCCmd::Who_Logged(_CDATA *CD)
+{
+ std::string OPS = "";
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ OPS.append(MakeMsg(" \002[GM:%d IRC: %s - WoW: %s]\002 ", (*i)->GMLevel, (*i)->Name.c_str(), (*i)->UName.c_str()));
+ }
+ Send_IRCA(ChanOrPM(CD), OPS, true, CD->TYPE);
+}
diff --git a/ArkChat/IRCFunc.h b/ArkChat/IRCFunc.h
new file mode 100644
index 0000000000000..b1e6143ece679
--- /dev/null
+++ b/ArkChat/IRCFunc.h
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * TriniChat Trinity Core IRC Client
+ *
+ * This Program Is Free Software; You Can Redistribute It And/Or Modify It Under The Terms
+ * Of The GNU General Public License
+ * Written And Developed By |Death|(death@hell360.net)
+ * - Based Off Of MangChat 1.0 By Cybrax(cybraxvf@gmail.com)
+ * PLEASE RETAIN THE COPYRIGHT OF THE AUTHORS.*/
+#ifndef _IRC_CLIENT_FUNC
+#define _IRC_CLIENT_FUNC
+
+std::string GetUser(std::string szU)
+{
+ int pos = szU.find("!");
+ return szU.substr(0, pos);
+}
+// Delink will remove anything considered "non chat" from a string
+std::string Delink(std::string msg)
+{
+ std::size_t pos;
+ while((pos = msg.find("|Hitem")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("|Henchant")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ //msg.replace(find2, 2, "\x2");
+ }
+ while((pos = msg.find("|Hquest")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("|Hspell")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("|Htalent")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("Hachievement:")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("Htrade:")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("Hglyph:")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ return msg;
+}
+
+// This function converts the characters used by the client to identify colour to IRC format.
+std::string WoWcol2IRC(std::string msg)
+{
+ std::size_t pos;
+ char IRCCol[18][6] = { "\xF", "\xF", "\x3\x31\x34", "\x3\x30\x33", "\x3\x31\x32", "\x3\x30\x36", "\x3\x30\x37", "\x3\x30\x34", "\x3\x30\x34", "\x3\x31\x34", "\x3\x31\x32", "\x3\x30\x37", "\x3\x30\x34", "\x3\x30\x33", "\x3\x31\x32", "\x3\x31\x32", "\x3\x30\x37", "\x3\x30\x37"};
+ char WoWCol[18][12] = { "|r", "|cffffffff", "|cff9d9d9d", "|cff1eff00", "|cff0070dd", "|cffa335ee", "|cffff8000", "|cffe6cc80", "|cffffd000", "|cff808080", "|cff71d5ff", "|cffffff00", "|cffff2020", "|cff40c040", "|cff4e96f7", "|cff71d5ff", "|cffff8040", "|cff66bbff"};
+ for (int i=0; i<=17; i++)
+ {
+ while ((pos = msg.find(WoWCol[i])) != std::string::npos)
+ {
+ if (i == 0)
+ msg.replace(pos, 2, IRCCol[i]);
+ else
+ msg.replace(pos, 11, IRCCol[i]);
+ }
+ }
+ return msg;
+}
+
+// This function converts the characters used by IRC to identify colour to a format the client can understand.
+std::string IRCcol2WoW(std::string msg)
+{
+ std::size_t pos;
+ char IRCCol[18][4] = { "\x3\x30", "\x3\x31", "\x3\x32", "\x3\x33", "\x3\x34", "\x3\x35", "\x3\x36", "\x3\x37", "\x3\x38", "\x3\x39", "\x3\x31\x30", "\x3\x31\x31", "\x3\x31\x32", "\x3\x31\x33", "\x3\x31\x34", "\x3\x31\x35", "\x3\x30\x37", "\x3\x30\x37"};
+ char IRCCol2[10][4] = { "\x3\x30\x30", "\x3\x30\x31", "\x3\x30\x32", "\x3\x30\x33", "\x3\x30\x34", "\x3\x30\x35", "\x3\x30\x36", "\x3\x30\x37", "\x3\x30\x38", "\x3\x30\x39"};
+ char WoWcol[18][12] = { "|cffffffff", "|cff000000", "|cff00007f", "|cff009300", "|cffff0000", "|cff7f0000", "|cff9c009c", "|cfffc9300", "|cffffff00", "|cff00fc00", "|cff009393", "|cff00ffff", "|cff0000fc", "|cffff00ff", "|cff7f7f7f", "|cffd2d2d2", "|cff808080", "|cff71d5ff"};
+ for (int i=15; i>=0; i--)
+ {
+ if (i<10)
+ {
+ while ((pos = msg.find(IRCCol2[i])) != std::string::npos)
+ {
+ msg.replace(pos, 3, WoWcol[i]);
+ }
+ while ((pos = msg.find(IRCCol[i])) != std::string::npos)
+ {
+ msg.replace(pos, 2, WoWcol[i]);
+ }
+
+ }
+ else
+ {
+ while ((pos = msg.find(IRCCol[i])) != std::string::npos)
+ {
+ msg.replace(pos, 3, WoWcol[i]);
+ }
+ }
+
+ // Remove Bold, Reverse, Underline from IRC
+ char Checker[3][3] = {"\x2","\x16","\x1F"}; // This is the Hex part not Dec. In Decimal its (2,22,31)
+ for(int I=0; I < 3; I++)
+ {
+ while ((pos = msg.find(Checker[I])) != std::string::npos)
+ {
+ msg.replace(pos, 1, "");
+ }
+ }
+ // Finished Removing !
+
+ }
+
+ while ((pos = msg.find("\x3")) != std::string::npos)
+ {
+ msg.replace(pos, 1, "|r");
+ }
+ while ((pos = msg.find("\xF")) != std::string::npos)
+ {
+ msg.replace(pos, 1, "|r");
+ }
+
+ return msg;
+}
+
+// This function compares 2 strings
+int nocase_cmp(const string & s1, const string& s2)
+{
+ string::const_iterator it1=s1.begin();
+ string::const_iterator it2=s2.begin();
+
+ //stop when either string's end has been reached
+ while ( (it1!=s1.end()) && (it2!=s2.end()) )
+ {
+ if(::toupper(*it1) != ::toupper(*it2)) //letters differ?
+ // return -1 to indicate smaller than, 1 otherwise
+ return (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1;
+ //proceed to the next character in each string
+ ++it1;
+ ++it2;
+ }
+ size_t size1=s1.size(), size2=s2.size(); // cache lengths
+ //return -1,0 or 1 according to strings' lengths
+ if (size1==size2)
+ return 0;
+ return (size1GetTeam() == 67)
+ sMsg = sIRC.MakeMsg(sMsg, "$Name", MakeMsgA("\0034%s\003", plr->GetName()));
+ else if (plr->GetTeam() == 469)
+ sMsg = sIRC.MakeMsg(sMsg, "$Name", MakeMsgA("\00312%s\003", plr->GetName()));
+ if(plr->isAFK())
+ sMsg = sIRC.MakeMsg(sMsg, "$Tag", "");
+ else if(plr->isDND())
+ sMsg = sIRC.MakeMsg(sMsg, "$Tag", "");
+ else
+ sMsg = sIRC.MakeMsg(sMsg, "$Tag", "");
+ sMsg = sIRC.MakeMsg(sMsg, "$Level", MakeMsgA("%d", plr->getLevel()));
+ sMsg = Delink(sMsg);
+ sMsg = WoWcol2IRC(sMsg);
+ return sMsg;
+}
+
+// This function checks if a channel exists in out configuration
+// TriniChat supports as many channels as you like
+bool Channel_Valid(std::string Channel)
+{
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ {
+ if(nocase_cmp(sIRC._wow_chan[i], Channel)==0)
+ return true;
+ }
+ return false;
+}
+
+std::string GetWoWChannel(std::string Channel)
+{
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ {
+ if("#" + sIRC._irc_chan[i] == Channel)
+ return sIRC._wow_chan[i];
+ }
+ return "";
+}
+
+std::string GetIRCChannel(std::string Channel)
+{
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ {
+ if(sIRC._wow_chan[i] == Channel)
+ return sIRC._irc_chan[i];
+ }
+ return "";
+}
+
+std::string* getArray(std::string PARAMS, int nCount, std::string )
+{
+ std::string *array = new std::string[nCount];
+ if(PARAMS.size() > 0)
+ {
+ int pcnt = 0;
+ size_t ps = 0;
+ size_t pc = -1;
+ for(int i = 0;i < nCount;i++)
+ {
+ pc = PARAMS.find(" ", pc + 1);
+ if(i + 1 == nCount && nCount != 1)
+ {
+ if(ps > 0 && pc > 0)
+ array[i] = PARAMS.substr(ps, PARAMS.size() - ps);
+ }
+ else
+ array[i] = PARAMS.substr(ps, pc - ps);
+ ps = pc + 1;
+ }
+ }
+ return array;
+}
+#endif
diff --git a/ArkChat/IRCIO.cpp b/ArkChat/IRCIO.cpp
new file mode 100644
index 0000000000000..0b51807c0e6c6
--- /dev/null
+++ b/ArkChat/IRCIO.cpp
@@ -0,0 +1,472 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gamePCH.h"
+#include "IRCClient.h"
+#include "IRCCmd.h"
+#include "IRCFunc.h"
+#include "../Globals/ObjectAccessor.h"
+#include "../Globals/ObjectMgr.h"
+#include "../../shared/Packets/WorldPacket.h"
+#include "../Chat/Channels/ChannelMgr.h"
+#include "Config.h"
+#include "../Chat/Channels/Channel.h"
+#include "../World/World.h"
+
+IRCCmd Command;
+void IRCClient::Handle_IRC(std::string sData)
+{
+ //sLog->outDebug(sData.c_str());
+ // If first 5 chars are ERROR then something is wrong
+ // either link is being closed, nickserv ghost command, etc...
+ if(sData.substr(0, 5) == "ERROR")
+ {
+ Disconnect();
+ return;
+ }
+ if(sData.substr(0, 4) == "PING")
+ {
+ // if the first 4 characters contain PING
+ // the server is checking if we are still alive
+ // sen back PONG back plus whatever the server send with it
+ SendIRC("PONG " + sData.substr(4, sData.size() - 4));
+ }
+ else
+ {
+ // if the first line contains : its an irc message
+ // such as private messages channel join etc.
+ if(sData.substr(0, 1) == ":")
+ {
+ // find the spaces in the receieved line
+ size_t p1 = sData.find(" ");
+ size_t p2 = sData.find(" ", p1 + 1);
+ // because the irc protocol uses simple spaces
+ // to seperate data we can easy pick them out
+ // since we know the position of the spaces
+ std::string USR = sData.substr(1, p1 - 1);
+ std::string CMD = sData.substr(p1 + 1, p2 - p1 - 1);
+ // trasform the commands to lowercase to make sure they always match
+ std::transform(CMD.begin(), CMD.end(), CMD.begin(), towlower);
+ // Extract the username from the first part
+ std::string szUser = GetUser(USR);
+ // if we receieved the internet connect code
+ // we know for sure that were in and we can
+ // authenticate ourself.
+ if(CMD == sIRC._ICC)
+ {
+ // _Auth is defined in trinitycore.conf (irc.auth)
+ // 0 do not authenticate
+ // 1 use nickserv
+ // 2 use quakenet
+ // aditionally you can provide you own authentication method here
+ switch(sIRC._Auth)
+ {
+ case 1:
+ SendIRC("PRIVMSG nickserv :IDENTIFY " + sIRC._Pass);
+ break;
+ case 2:
+ SendIRC("PRIVMSG nickserv :IDENTIFY " + sIRC._Auth_Nick + " " + sIRC._Pass);
+ break;
+ case 3:
+ SendIRC("PRIVMSG Q@CServe.quakenet.org :AUTH " + sIRC._Nick + " " + sIRC._Pass);
+ break;
+ case 4:
+ SendIRC("PRIVMSG Q@CServe.quakenet.org :AUTH " + sIRC._Auth_Nick + " " + sIRC._Pass);
+ break;
+ }
+ // if we join a default channel leave this now.
+ if(sIRC._ldefc==1)
+ SendIRC("PART #" + sIRC._defchan);
+ // Loop thru the channel array and send a command to join them on IRC.
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ {
+ if (sIRC._irc_pass[i].size() > 0)
+ SendIRC("JOIN #" + sIRC._irc_chan[i] + " " + sIRC._irc_pass[i]);
+ else
+ SendIRC("JOIN #" + sIRC._irc_chan[i]);
+ }
+ // See if there's a logchannel available, if so: join it.
+ if(sIRC.logchan.size() > 0)
+ {
+ if(sIRC.logchanpw.size() > 0)
+ SendIRC("JOIN #" + sIRC.logchan + " " + sIRC.logchanpw);
+ else
+ SendIRC("JOIN #" + sIRC.logchan);
+ }
+ }
+ // someone joined the channel this could be the bot or another user
+ if(CMD == "join")
+ {
+ size_t p = sData.find(":", p1);
+ std::string CHAN = sData.substr(p + 1, sData.size() - p - 2);
+ // if the user is us it means we join the channel
+ if ((szUser == sIRC._Nick) )
+ {
+ // its us that joined the channel
+ Send_IRC_Channel(CHAN, MakeMsg(MakeMsg(sIRC.JoinMsg, "$Ver", sIRC._Mver.c_str()), "$Trigger", sIRC._cmd_prefx.c_str()), true);
+ }
+ else
+ {
+ // if the user is not us its someone else that joins
+ // so we construct a message and send this to the clients.
+ // ArkChat now uses Send_WoW_Channel to send to the client
+ // this makes ArkChat handle the packets instead of previously the world.
+ if((sIRC.BOTMASK & 2) != 0)
+ Send_WoW_Channel(GetWoWChannel(CHAN).c_str(), IRCcol2WoW(MakeMsg(MakeMsg(GetChatLine(JOIN_IRC), "$Name", szUser), "$Channel", GetWoWChannel(CHAN))));
+ }
+ }
+ // someone on irc left or quit the channel
+ if(CMD == "part" || CMD == "quit")
+ {
+ size_t p3 = sData.find(" ", p2 + 1);
+ std::string CHAN = sData.substr(p2 + 1, p3 - p2 - 1);
+ // Logout IRC Nick From ArkChat If User Leaves Or Quits IRC.
+ if(Command.IsLoggedIn(szUser))
+ {
+ _CDATA CDATA;
+ CDATA.USER = szUser;
+ Command.Handle_Logout(&CDATA);
+ }
+ // Construct a message and inform the clients on the same channel.
+ if((sIRC.BOTMASK & 2) != 0)
+ Send_WoW_Channel(GetWoWChannel(CHAN).c_str(), IRCcol2WoW(MakeMsg(MakeMsg(GetChatLine(LEAVE_IRC), "$Name", szUser), "$Channel", GetWoWChannel(CHAN))));
+ }
+ // someone changed their nick
+ if (CMD == "nick" && (sIRC.BOTMASK & 128) != 0)
+ {
+ MakeMsg(MakeMsg(GetChatLine(CHANGE_NICK), "$Name", szUser), "$NewName", sData.substr(sData.find(":", p2) + 1));
+ // If the user is logged in and changes their nick
+ // then we want to either log them out or update
+ // their nick in the bot. I chose to update the bots user list.
+ if(Command.IsLoggedIn(szUser))
+ {
+ std::string NewNick = sData.substr(sData.find(":", p2) + 1);
+ // On freenode I noticed the server sends an extra character
+ // at the end of the string, so we need to erase the last
+ // character of the string. if you have a problem with getting
+ // the last letter of your nick erased, then remove the - 1.
+ NewNick.erase(NewNick.length() - 1, 1);
+
+ for(std::list<_client*>::iterator i=Command._CLIENTS.begin(); i!=Command._CLIENTS.end();i++)
+ {
+ if((*i)->Name == szUser)
+ {
+ (*i)->Name = NewNick;
+ sIRC.Send_IRC_Channel(NewNick.c_str(), "I Noticed You Changed Your Nick, I Have Updated My Internal Database Accordingly.", true, "NOTICE");
+
+ // Figure why not output to the logfile, makes tracing problems easier.
+ sIRC.iLog.WriteLog(" %s : %s Changed Nick To: %s", sIRC.iLog.GetLogDateTimeStr().c_str(), szUser.c_str(), NewNick.c_str());
+ }
+ }
+ }
+
+ }
+ // someone was kicked from irc
+ if (CMD == "kick")
+ {
+ // extract the details
+ size_t p3 = sData.find(" ", p2 + 1);
+ size_t p4 = sData.find(" ", p3 + 1);
+ size_t p5 = sData.find(":", p4);
+ std::string CHAN = sData.substr(p2 + 1, p3 - p2 - 1);
+ std::string WHO = sData.substr(p3 + 1, p4 - p3 - 1);
+ std::string BY = sData.substr(p4 + 1, sData.size() - p4 - 1);
+ // if the one kicked was us
+ if(WHO == sIRC._Nick)
+ {
+ // and autojoin is enabled
+ // return to the channel
+ if(sIRC._autojoinkick == 1)
+ {
+ SendIRC("JOIN " + CHAN);
+ Send_IRC_Channel(CHAN, sIRC.kikmsg, true);
+ }
+ }
+ else
+ {
+ // if it is not us who was kicked we need to inform the clients someone
+ // was removed from the channel
+ // construct a message and send it to the players.
+ Send_WoW_Channel(GetWoWChannel(CHAN).c_str(), "[" + WHO + "]: Was Kicked From " + CHAN + " By: " + szUser);
+ }
+ }
+ // a private chat message was receieved.
+ if(CMD == "privmsg" || CMD == "notice")
+ {
+ // extract the values
+ size_t p = sData.find(" ", p2 + 1);
+ std::string FROM = sData.substr(p2 + 1, p - p2 - 1);
+ std::string CHAT = sData.substr(p + 2, sData.size() - p - 3);
+ // if this is our username it means we recieved a PM
+ if(FROM == sIRC._Nick)
+ {
+ if(CHAT.find("\001VERSION\001") < CHAT.size())
+ {
+ Send_IRC_Channel(szUser, MakeMsg("\001VERSION MGACHAT %s �2008-2012 Biglad - http://www.mgawow.co.uk \001", "%s" , sIRC._Mver.c_str()), true, "PRIVMSG");
+ }
+ // a pm is required for certain commands
+ // such as login. to validate the command
+ // we send it to the command class wich handles
+ // evrything else.
+ Command.IsValid(szUser, FROM, CHAT, CMD);
+ }
+ else
+ {
+ // if our name is not in it, it means we receieved chat on one of the channels
+ // magchat is in. the first thing we do is check if it is a command or not
+ if(!Command.IsValid(szUser, FROM, CHAT, CMD))
+ {
+ Send_WoW_Channel(GetWoWChannel(FROM).c_str(), IRCcol2WoW(MakeMsg(MakeMsg(GetChatLine(IRC_WOW), "$Name", szUser), "$Msg", CHAT)));
+ }
+ // if we indeed receieved a command we do not want to display this to the players
+ // so only incanse the isvalid command returns false it will be sent to all player.
+ // the isvalid function will automaitcly process the command on true.
+ }
+ }
+ if(CMD == "mode")
+ {
+ // extract the mode details
+ size_t p3 = sData.find(" ", p2 + 1);
+ size_t p4 = sData.find(" ", p3 + 1);
+ size_t p5 = sData.find(" ", p4 + 1);
+ std::string CHAN = sData.substr(p2 + 1, p3 - p2 - 1);
+ std::string MODE = sData.substr(p3 + 1, p4 - p3 - 1);
+ std::string NICK = sData.substr(p4 + 1, p5 - p4 - 1);
+ bool _AmiOp;
+ _AmiOp = false;
+ //A mode was changed on us
+ if(NICK.c_str() == sIRC._Nick)
+ _AmiOp = true;
+
+ }
+ }
+ }
+}
+
+// This function is called in Channel.h
+// based on nAction it will inform the people on
+// irc when someone leaves one of the game channels.
+// nAction is based on the struct CACTION
+void IRCClient::Handle_WoW_Channel(std::string Channel, Player *plr, int nAction)
+{
+ // make sure that we are connected
+ if(sIRC.Connected && (sIRC.BOTMASK & 1)!= 0)
+ {
+ if(Channel_Valid(Channel))
+ {
+ std::string GMRank = "";
+ std::string pname = plr->GetName();
+ bool DoGMAnnounce = false;
+ if (plr->GetSession()->GetSecurity() > 0 && (sIRC.BOTMASK & 8)!= 0)
+ DoGMAnnounce = true;
+ if (plr->isGameMaster() && (sIRC.BOTMASK & 16)!= 0)
+ DoGMAnnounce = true;
+ if(DoGMAnnounce)
+ {
+ switch(plr->GetSession()->GetSecurity()) //switch case to determine what rank the "gm" is
+ {
+ case 0: GMRank = "";break;
+ case 1: GMRank = "\0037"+sIRC.ojGM1;break;
+ case 2: GMRank = "\0037"+sIRC.ojGM2;break;
+ case 3: GMRank = "\0037"+sIRC.ojGM3;break;
+ case 4: GMRank = "\0037"+sIRC.ojGM4;break;
+ case 5: GMRank = "\0037"+sIRC.ojGM5;break;
+ }
+ }
+ std::string ChatTag = "";
+ switch (plr->GetTeam())
+ {
+ case 67:ChatTag.append("\0034");break; //horde
+ case 469:ChatTag.append("\00312");break; //alliance
+ }
+ std::string query = "INSERT INTO `IRC_Inchan` VALUES (%d,'"+pname+"','"+Channel+"')";
+ std::string lchan = "DELETE FROM `IRC_Inchan` WHERE `guid` = %d AND `channel` = '"+Channel+"'";
+ switch(nAction)
+ {
+ case CHANNEL_JOIN:
+ Send_IRC_Channel(GetIRCChannel(Channel), MakeMsg(MakeMsg(MakeMsg(GetChatLine(JOIN_WOW), "$Name", ChatTag + plr->GetName()), "$Channel", Channel), "$GM", GMRank));
+ WorldDatabase.PExecute(lchan.c_str(), plr->GetGUID());
+ WorldDatabase.PExecute(query.c_str(), plr->GetGUID());
+ break;
+ case CHANNEL_LEAVE:
+ Send_IRC_Channel(GetIRCChannel(Channel), MakeMsg(MakeMsg(MakeMsg(GetChatLine(LEAVE_WOW), "$Name", ChatTag + plr->GetName()), "$Channel", Channel), "$GM", GMRank));
+ WorldDatabase.PExecute(lchan.c_str(), plr->GetGUID());
+ break;
+ }
+ }
+ }
+}
+
+// This function sends chat to a irc channel or user
+// to prevent the # beeing appended to send a msg to a user
+// set the NoPrefix to true
+void IRCClient::Send_IRC_Channel(std::string sChannel, std::string sMsg, bool NoPrefix, std::string nType)
+{
+ std::string mType = "PRIVMSG";
+ if(Command.MakeUpper(nType.c_str()) == "NOTICE")
+ mType = "NOTICE";
+ if(Command.MakeUpper(nType.c_str()) == "ERROR" && (sIRC.BOTMASK & 32)!= 0)
+ mType = "NOTICE";
+ if(sIRC.Connected)
+ {
+ if(NoPrefix)
+ SendIRC(mType + " " + sChannel + " :" + sMsg);
+ else
+ SendIRC(mType + " #" + sChannel + " :" + sMsg);
+ }
+}
+
+// This function sends a message to all irc channels
+// that ArkChat has in its configuration
+void IRCClient::Send_IRC_Channels(std::string sMsg)
+{
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ Send_IRC_Channel(sIRC._irc_chan[i], sMsg);
+}
+
+// This function is called in ChatHandler.cpp, any channel chat from wow will come
+// to this function, validates the channel and constructs a message that is send to IRC
+void IRCClient::Send_WoW_IRC(Player *plr, std::string Channel, std::string Msg)
+{
+ // Check if the channel exist in our configuration
+ if(Channel_Valid(Channel) && Msg.substr(0, 1) != ".")
+ Send_IRC_Channel(GetIRCChannel(Channel), MakeMsgP(WOW_IRC, Msg, plr));
+}
+
+void IRCClient::Send_WoW_Player(std::string sPlayer, std::string sMsg)
+{
+ normalizePlayerName(sPlayer);
+ if (Player* plr = sObjectAccessor->FindPlayerByName(sPlayer.c_str()))
+ Send_WoW_Player(plr, sMsg);
+}
+
+void IRCClient::Send_WoW_Player(Player *plr, string sMsg)
+{
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_SYSTEM;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint64)plr->GetGUID();
+ data << (uint32)0;
+ data << (uint64)plr->GetGUID();
+ data << (uint32)(sMsg.length()+1);
+ data << sMsg;
+ data << (uint8)0;
+ plr->GetSession()->SendPacket(&data);
+}
+
+// This function will construct and send a packet to all players
+// on the given channel ingame. (previuosly found in world.cpp)
+// it loops thru all sessions and checks if they are on the channel
+// if so construct a packet and send it.
+void IRCClient::Send_WoW_Channel(const char *channel, std::string chat)
+{
+ if(!(strlen(channel) > 0))
+ return;
+
+ #ifdef USE_UTF8
+ std::string chat2 = chat;
+ if(ConvertUTF8(chat2.c_str(), chat2))
+ chat = chat2;
+ #endif
+
+ HashMapHolder::MapType& m = sObjectAccessor->GetPlayers();
+ for(HashMapHolder::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
+ {
+ if (itr->second && itr->second->GetSession()->GetPlayer() && itr->second->GetSession()->GetPlayer()->IsInWorld())
+ {
+ if(ChannelMgr* cMgr = channelMgr(itr->second->GetSession()->GetPlayer()->GetTeam()))
+ {
+ if(Channel *chn = cMgr->GetChannel(channel, itr->second->GetSession()->GetPlayer()))
+ {
+ WorldPacket data;
+ data.Initialize(SMSG_MESSAGECHAT);
+ data << (uint8)CHAT_MSG_CHANNEL;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint64)0;
+ data << (uint32)0;
+ data << channel;
+ data << (uint64)0;
+ data << (uint32) (strlen(chat.c_str()) + 1);
+ data << IRCcol2WoW(chat.c_str());
+ data << (uint8)0;
+ itr->second->GetSession()->SendPacket(&data);
+ }
+ }
+ }
+ }
+}
+
+void IRCClient::Send_WoW_System(std::string Message)
+{
+ HashMapHolder::MapType& m = sObjectAccessor->GetPlayers();
+ for(HashMapHolder::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
+ {
+ if (itr->second && itr->second->GetSession()->GetPlayer() && itr->second->GetSession()->GetPlayer()->IsInWorld())
+ {
+ WorldPacket data;
+ data.Initialize(CHAT_MSG_SYSTEM);
+ data << (uint8)CHAT_MSG_SYSTEM;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint64)0;
+ data << (uint32)0;
+ data << (uint64)0;
+ data << (uint32) (strlen(Message.c_str()) + 1);
+ data << Message.c_str();
+ data << (uint8)0;
+ itr->second->GetSession()->SendPacket(&data);
+ }
+ }
+}
+void IRCClient::ResetIRC()
+{
+ SendData("QUIT");
+ Disconnect();
+}
+
+#define CHAT_INVITE_NOTICE 0x18
+
+// this function should be called on player login Player::AddToWorld
+void IRCClient::AutoJoinChannel(Player *plr)
+{
+ //this will work if at least 1 player is logged in regrdless if he is on the channel or not
+ // the first person that login empty server is the one with bad luck and wont be invited,
+ // if at least 1 player is online the player will be inited to the chanel
+
+ std::string m_name = sIRC.ajchan;
+ WorldPacket data;
+ data.Initialize(SMSG_CHANNEL_NOTIFY, 1+m_name.size()+1);
+ data << uint8(CHAT_INVITE_NOTICE);
+ data << m_name.c_str();
+
+ HashMapHolder::MapType& m = sObjectAccessor->GetPlayers();
+ for(HashMapHolder::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
+ {
+ if (itr->second && itr->second->GetSession()->GetPlayer() && itr->second->GetSession()->GetPlayer()->IsInWorld())
+ {
+ data << uint64(itr->second->GetGUID());
+ break;
+ }
+ }
+ plr->GetSession()->SendPacket(&data);
+}
diff --git a/ArkChat/IRCLog.cpp b/ArkChat/IRCLog.cpp
new file mode 100644
index 0000000000000..2c7f9ba760afc
--- /dev/null
+++ b/ArkChat/IRCLog.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gamePCH.h"
+#include "IRCLog.h"
+#include "Config.h"
+#include "IRCClient.h"
+#include
+
+IRCLog::IRCLog()
+{
+ std::string logsDir = sConfig->GetStringDefault("LogsDir","");
+ std::string ircLogName = logsDir + "/IRC_";
+ std::string ircLogTimestamp = GetLogDateStr();
+ ircLogName += ircLogTimestamp +".log";
+ ircLogfile.open (ircLogName.c_str(), std::ios::app);
+}
+
+IRCLog::~IRCLog()
+{
+ ircLogfile.close();
+}
+// Was added because using the time for logs is very annoying... one log per day.. much cleaner looking..
+std::string IRCLog::GetLogDateStr() const
+{
+ time_t t = time(NULL);
+ tm* aTm = localtime(&t);
+ // YYYY year
+ // MM month (2 digits 01-12)
+ // DD day (2 digits 01-31)
+ // HH hour (2 digits 00-23)
+ // MM minutes (2 digits 00-59)
+ // SS seconds (2 digits 00-59)
+ char buf[20];
+ snprintf(buf,20,"%04d-%02d-%02d",aTm->tm_year+1900,aTm->tm_mon+1,aTm->tm_mday);
+ return std::string(buf);
+}
+
+std::string IRCLog::GetLogDateTimeStr() const
+{
+ time_t t = time(NULL);
+ tm* aTm = localtime(&t);
+ // YYYY year
+ // MM month (2 digits 01-12)
+ // DD day (2 digits 01-31)
+ // HH hour (2 digits 00-23)
+ // MM minutes (2 digits 00-59)
+ // SS seconds (2 digits 00-59)
+ char buf[30];
+ snprintf(buf,30,"[ %04d-%02d-%02d ] [ %02d:%02d:%02d ]",aTm->tm_year+1900,aTm->tm_mon+1,aTm->tm_mday,aTm->tm_hour,aTm->tm_min,aTm->tm_sec);
+ return std::string(buf);
+}
+
+void IRCLog::WriteLog(const char *what, ...)
+{
+ va_list ap;
+ char tmpoutp[1024];
+ va_start(ap, what);
+ vsnprintf(tmpoutp, 1024, what, ap );
+ va_end(ap);
+ ircLogfile << tmpoutp;
+ ircLogfile << "\n";
+ ircLogfile.flush();
+}
diff --git a/ArkChat/IRCLog.h b/ArkChat/IRCLog.h
new file mode 100644
index 0000000000000..11b4ed8e9a657
--- /dev/null
+++ b/ArkChat/IRCLog.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _IRC_LOG_H
+#define _IRC_LOG_H
+
+#include "Common.h"
+#include
+
+class IRCLog
+{
+ public:
+ IRCLog();
+ ~IRCLog();
+
+ public:
+ void WriteLog(const char *what, ...);
+ std::string GetLogDateStr() const;
+ std::string GetLogDateTimeStr() const;
+ private:
+ std::ofstream ircLogfile;
+};
+
+
+#endif
diff --git a/ArkChat/IRCSock.cpp b/ArkChat/IRCSock.cpp
new file mode 100644
index 0000000000000..61ced64ec13cf
--- /dev/null
+++ b/ArkChat/IRCSock.cpp
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gamePCH.h"
+#include "IRCClient.h"
+#define MAXDATASIZE 512
+#include
+
+#include
+#include
+
+
+#define _UNICODE
+
+#ifdef _MBCS
+#undef _MBCS
+#endif
+
+bool IRCClient::InitSock()
+{
+ #ifdef _WIN32
+ WSADATA wsaData; //WSAData
+ if(WSAStartup(MAKEWORD(2,0),&wsaData) != 0)
+ {
+ sLog->outError("IRC Error: Winsock Initialization Error");
+ return false;
+ }
+ #endif
+ if ((sIRC.SOCKET = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
+ {
+ sLog->outError("IRC Error: Socket Error");
+ return false;
+ }
+ int on = 1;
+ if ( setsockopt ( sIRC.SOCKET, SOL_SOCKET, SO_REUSEADDR, ( const char* ) &on, sizeof ( on ) ) == -1 )
+ {
+ sLog->outError("IRC Error: Invalid Socket");
+ return false;
+ }
+ #ifdef _WIN32
+ u_long iMode = 0;
+ ioctlsocket(sIRC.SOCKET, FIONBIO, &iMode);
+ #else
+ fcntl(sIRC.SOCKET, F_SETFL, O_NONBLOCK); // set to non-blocking
+ fcntl(sIRC.SOCKET, F_SETFL, O_ASYNC); // set to asynchronous I/O
+ #endif
+ return true;
+}
+
+bool IRCClient::Connect(const char *cHost, int nPort)
+{
+ sIRC.Connected = false;
+ struct hostent *he;
+ if ((he=gethostbyname(cHost)) == NULL)
+ {
+ sLog->outError("IRCLIENT: Could not resolve host: %s", cHost);
+ return false;
+ }
+ struct sockaddr_in their_addr;
+ their_addr.sin_family = AF_INET;
+ their_addr.sin_port = htons(nPort);
+ their_addr.sin_addr = *((struct in_addr *)he->h_addr);
+ memset(&(their_addr.sin_zero), '\0', 8);
+ if (::connect(sIRC.SOCKET, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1)
+ {
+ sLog->outError("IRCLIENT: Cannot connect to %s", cHost);
+ return false;
+ }
+ //FD_ZERO(&sIRC.sfdset);
+ //FD_SET(sIRC.SOCKET,&sIRC.sfdset);
+ sIRC.Connected = true;
+ return true;
+}
+
+bool IRCClient::Login(std::string sNick, std::string sUser, std::string sPass)
+{
+ char hostname[128];
+ gethostname(hostname, sizeof(hostname));
+ if(SendIRC("HELLO"))
+ if(SendIRC("PASS " + sPass))
+ if(SendIRC("NICK " + sNick))
+ if(SendIRC("USER " + sUser + " " + (std::string)hostname + " ArkChat :ArkChat "+sIRC._Mver.c_str()))
+ return true;
+ return false;
+}
+
+bool IRCClient::SendData(const char *data)
+{
+ if(sIRC.Connected)
+ {
+ if (send(sIRC.SOCKET, data, strlen(data), 0) == -1)
+ {
+ sLog->outError("IRC Error: Socket Receieve ** \n");
+ //Disconnect();
+ return false;
+ }
+ }
+ return true;
+}
+
+bool IRCClient::SendIRC(std::string data)
+{
+ std::string RealData = data + "\n";
+ return SendData(RealData.c_str());
+}
+
+void IRCClient::Disconnect()
+{
+ if(sIRC.SOCKET)
+ {
+ #ifdef _WIN32
+ closesocket(sIRC.SOCKET);
+ //WSACleanup();
+ #else
+ close(sIRC.SOCKET);
+ #endif
+ }
+}
+
+void IRCClient::SockRecv()
+{
+// wchar_t bufferdata;
+
+ char szBuffer[MAXDATASIZE];
+
+ memset(szBuffer, 0, MAXDATASIZE );
+
+ int nBytesRecv = ::recv(sIRC.SOCKET, szBuffer, MAXDATASIZE - 1, 0 );
+ if ( nBytesRecv == -1 )
+ {
+ sLog->outError("Connection lost.");
+ sIRC.Connected = false;
+ }
+ else
+ {
+ if (-1 == nBytesRecv)
+ {
+ sLog->outError("Error occurred while receiving from socket.");
+ }
+ else
+ {
+ std::string reply;
+ std::istringstream iss(szBuffer);
+ while(getline(iss, reply))
+ {
+ Handle_IRC(reply);
+ }
+ }
+ }
+}
diff --git a/ArkChat/MCS_OnlinePlayers.cpp b/ArkChat/MCS_OnlinePlayers.cpp
new file mode 100644
index 0000000000000..2df351cd93bfd
--- /dev/null
+++ b/ArkChat/MCS_OnlinePlayers.cpp
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gamePCH.h"
+#include "MCS_OnlinePlayers.h"
+
+#include "../../game/Maps/MapManager.h"
+#include "../Globals/ObjectMgr.h"
+//#include "Config/ConfigEnv.h"
+
+mcs_OnlinePlayers::mcs_OnlinePlayers() { CD = NULL; }
+
+mcs_OnlinePlayers::mcs_OnlinePlayers(_CDATA *_CD)
+{
+ //create a new instance of data struct and copy its data
+ CD = new _CDATA();
+ CD->CMD = _CD->CMD;
+ CD->FROM = _CD->FROM;
+ CD->PARAMS = _CD->PARAMS;
+ CD->PCOUNT = _CD->PCOUNT;
+ CD->USER = _CD->USER;
+ CD->TYPE = _CD->TYPE;
+}
+
+mcs_OnlinePlayers::~mcs_OnlinePlayers()
+{
+ if(CD)
+ delete CD;
+}
+
+void mcs_OnlinePlayers::run()
+{
+ int OnlineCount = 0;
+ std::string IRCOut = "";
+ HashMapHolder::MapType& m = sObjectAccessor->GetPlayers();
+ for(HashMapHolder::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
+ {
+ if (itr->second && itr->second->GetSession()->GetPlayer() && itr->second->GetSession()->GetPlayer()->IsInWorld())
+ {
+ OnlineCount++;
+ Player *plr = itr->second->GetSession()->GetPlayer();
+ std::string ChatTag = " ";
+ switch(plr->GetSession()->GetSecurity())
+ {
+ case 0: ChatTag.append("");break;
+ case 1: ChatTag.append("\0037"+sIRC.ojGM1);break;
+ case 2: ChatTag.append("\0037"+sIRC.ojGM2);break;
+ case 3: ChatTag.append("\0037"+sIRC.ojGM3);break;
+ case 4: ChatTag.append("\0037"+sIRC.ojGM4);break;
+ case 5: ChatTag.append("\0037"+sIRC.ojGM5);break;
+ }
+ if(plr->isAFK())
+ ChatTag.append("\002\0037\003\002");
+ else if(plr->isDND())
+ ChatTag.append("\002\0037\003\002");
+ switch (plr->GetTeam())
+ {
+ case 67:ChatTag.append("\0034");break; //horde
+ case 469:ChatTag.append("\00312");break; //alliance
+ }
+
+ IRCOut.append(IRCCmd::MakeMsg("%s\002%s\003\017\002(%d)\002\017", ChatTag.c_str(), plr->GetName(), plr->getLevel()));
+
+ // after XX players have been added to the string
+ // output to irc and reset for the next XX
+ if(OnlineCount % sIRC.onlrslt == 0)
+ {
+ sIRC.Send_IRC_Channel(IRCCmd::ChanOrPM(CD), IRCCmd::MakeMsg("\002 %s", IRCOut.c_str()), true, CD->TYPE);
+ IRCOut = "";
+ ACE_Based::Thread::Sleep(1000);
+ }
+ }
+ }
+ // Remainder in IRCOUT && Total plyersonline
+ sIRC.Send_IRC_Channel(IRCCmd::ChanOrPM(CD), IRCCmd::MakeMsg("\002Players Online(%d):\017 %s", OnlineCount, IRCOut.c_str()), true, CD->TYPE.c_str());
+
+ sIRC.Script_Lock[MCS_Players_Online] = false;
+
+}
diff --git a/ArkChat/MCS_OnlinePlayers.h b/ArkChat/MCS_OnlinePlayers.h
new file mode 100644
index 0000000000000..8cf2b9ee579c5
--- /dev/null
+++ b/ArkChat/MCS_OnlinePlayers.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _IRC_CLIENT_ONLINE
+#define _IRC_CLIENT_ONLINE
+
+#include "IRCClient.h"
+#include "IRCCmd.h"
+
+class mcs_OnlinePlayers : public ACE_Based::Runnable
+{
+ public:
+ mcs_OnlinePlayers();
+ mcs_OnlinePlayers(_CDATA *_CD);
+ ~mcs_OnlinePlayers();
+ void run();
+ public:
+ _CDATA *CD;
+};
+
+#endif
diff --git a/CMakeFiles/CMakeOutput.log b/CMakeFiles/CMakeOutput.log
new file mode 100644
index 0000000000000..fa2730cf7dd50
--- /dev/null
+++ b/CMakeFiles/CMakeOutput.log
@@ -0,0 +1 @@
+The system is: Windows - - AMD64
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cc306ab0ce120..217cbce4de5e2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -104,3 +104,7 @@ if(BUILD_TESTING)
set_property(GLOBAL PROPERTY USE_FOLDERS OFF)
endif()
endif()
+
+find_package(Poco REQUIRED Net NetSSL Util)
+target_link_libraries(worldserver PRIVATE Poco::Net Poco::NetSSL Poco::Util)
+
diff --git a/Custom/char_importer_npc.cpp b/Custom/char_importer_npc.cpp
new file mode 100644
index 0000000000000..2ea939a6d08d1
--- /dev/null
+++ b/Custom/char_importer_npc.cpp
@@ -0,0 +1,601 @@
+#include "ScriptPCH.h"
+#include "AchievementMgr.h"
+#include "Database/DatabaseEnv.h"
+#include "../ArkChat/IRCClient.h"
+
+//errors & warning messages
+#define importtext1 -1700018
+#define importtext2 -1700019
+#define importtext3 -1700020
+//Success message
+#define importtext4 -1700021
+#define importtext5 -1700022
+#define importtext6 -1700023
+#define importtext7 -1700024
+#define importtext8 -1700025
+#define importtext9 -1700035
+
+//extern DatabaseType WorldDatabase;
+int16 oldlvl;
+
+//menu items
+#define _MENU_NULL1_ "Not in system, if you think you should be, speak to a Gamemaster"
+#define _MENU_PH1_ "Money, Level and Bags"
+#define _MENU_PH2_ "Furious Gladiator's armor set - MAKE ROOM!"
+#define _MENU_PH2a_ "Dungeon 2 armor set - MAKE ROOM!"
+#define _MENU_PH3_ "First Profession"
+#define _MENU_PH4_ "Second Profession"
+#define _MENU_PH5a_ "I will unlearn my profession manually and talk to you again to repeat this step. Doing this, I will lose all recipes I gathered."
+#define _MENU_PH5b_ "I want to skip this step, I already have my profession set up."
+
+#define ERROR1 "OH CRAP SOME ERROR!! Tell a GM please!!"
+
+#define ERROR2 "Free level 80s are just for Allaince right now, sorry.."
+#define ERROR3 "Free level 80s are just for Horde right now, sorry.."
+
+#define _ALCH_ "Alchemy"
+#define _BLAK_ "Blacksmithing"
+#define _ENCH_ "Enchanting"
+#define _ENGI_ "Engineering"
+#define _HERB_ "Herbalism"
+#define _JEWE_ "Jewelcrafting"
+#define _LEWO_ "Leatherworking"
+#define _MINI_ "Mining"
+#define _SKIN_ "Skinning"
+#define _TAIL_ "Tailoring"
+#define _INSC_ "Inscription"
+
+
+class mga_guild_shopone : public CreatureScript
+{
+ public:
+ mga_guild_shopone() : CreatureScript("mga_guild_shopone") { }
+
+
+bool UpdateCharData(Player *player, int16 status)
+{
+ WorldDatabase.PExecute("UPDATE `guild_transfer` SET `status` = '%d' WHERE `name1` = '%s'", status, std::string(player->GetName()).c_str());
+ return true;
+}
+
+bool OnGossipHello(Player *player, Creature *_Creature)
+{
+ QueryResult result2;
+ result2 = WorldDatabase.PQuery("SELECT * FROM `free80limit`");
+ if(!result2)
+ {
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, ERROR1, GOSSIP_SENDER_MAIN, 5000);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return true;
+ }
+ Field *fields2 = result2->Fetch();
+ int16 allowedfree80 = fields2[0].GetInt16();
+
+ if (allowedfree80 == 0 && player->GetTeamId() == TEAM_HORDE)
+ {
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, ERROR2, GOSSIP_SENDER_MAIN, 5000);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return true;
+ }
+
+ if (allowedfree80 == 1 && player->GetTeamId() == TEAM_ALLIANCE)
+ {
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, ERROR3, GOSSIP_SENDER_MAIN, 5000);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return true;
+ }
+
+
+ QueryResult result;
+ result = WorldDatabase.PQuery("SELECT * FROM `guild_transfer` WHERE `name1` = '%s' AND `duplicate` = '0' AND `status` < '7'", std::string(player->GetName()).c_str());
+ if(!result)
+ {
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MENU_NULL1_, GOSSIP_SENDER_MAIN, 5000);
+ //_Creature->Whisper(importtext1, player->GetGUID(), false);
+ //player->CLOSE_GOSSIP_MENU();
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return true;
+ }
+
+ Field *fields = result->Fetch();
+ int16 status = fields[3].GetInt16();
+ oldlvl = fields[5].GetInt16();
+ //delete result;
+
+ if(status == 0)
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MENU_PH1_, GOSSIP_SENDER_MAIN, 11);
+
+ if(status == 1)
+ {
+ if(oldlvl > 79)
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MENU_PH2_, GOSSIP_SENDER_MAIN, 21);
+ if(oldlvl > 69 && oldlvl < 80)
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MENU_PH2a_, GOSSIP_SENDER_MAIN, 22);
+ if(oldlvl > 19 && oldlvl < 70)
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MENU_PH3_, GOSSIP_SENDER_MAIN, 31);
+ }
+
+ if(status == 2 && oldlvl > 69)
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MENU_PH3_, GOSSIP_SENDER_MAIN, 31);
+
+ if(status == 3 && oldlvl > 19)
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MENU_PH4_, GOSSIP_SENDER_MAIN, 41);
+
+ if(status == 5)
+ {
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MENU_PH5a_, GOSSIP_SENDER_MAIN, 31);
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MENU_PH5b_, GOSSIP_SENDER_MAIN, 41);
+
+ }
+ if(status == 6)
+ {
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MENU_PH5a_, GOSSIP_SENDER_MAIN, 41);
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MENU_PH5b_, GOSSIP_SENDER_MAIN, 51);
+ }
+
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return true;
+}
+
+bool OnGossipSelect(Player *player, Creature *_Creature, uint32 sender, uint32 action)
+{
+
+ player->PlayerTalkClass->ClearMenus();
+ // alc, bls, ech, eng, hrb, jew, lwk, min, ski, tai, ins
+ //static const unsigned short SkillList[] = { 171, 164, 333, 202, 182, 755, 165, 186, 393, 197, 773 };
+ static const unsigned short SkillList[] = { 171, 164, 333, 202, 182, 755, 165, 186, 393, 197};
+ static const unsigned short SpellList[] =
+ {
+ 2259, 3101, 3464, 11611, // Alchemy
+ 2018, 3100, 3538, 9785, // Blacksmithing
+ 7411, 7412, 7413, 13920, // Enchanting
+ 4036, 4037, 4038, 12656, // Engineering
+ 2366, 2368, 3570, 11993, //Herbalism
+ 25229, 25230, 28894, 28895, // Jewelcrafting
+ 2108, 3104, 3811, 10662, //Leatherworking
+ 2575, 2576, 3564, 10248, // Mining
+ 8613, 8617, 8618, 10768, // Skinning
+ 3908, 3909, 3910, 12180, // Tailoring
+ // 45357, 45358, 45359, 45360 // Inscription
+
+ };
+ static const unsigned short LoopList[] = { 0, 4, 8, 12, 16, 20, 24, 28, 32, 38, 42 }; // not sure if it's 42
+ int rank = 0;
+ int value = 0;
+ int maxrank = 0;
+ switch(action)
+ {
+ case 11: // Bags + Level + Gold
+ {
+ uint32 money;
+ if (oldlvl > 0)
+ {
+ money = 150000;
+ if (oldlvl > 10)
+ {
+ money = 250000;
+ if (oldlvl > 19)
+ {
+ money=350000;
+ if (oldlvl > 29)
+ {
+ money=900000;
+ if (oldlvl > 59)
+ {
+ money=1150000;
+ if (oldlvl > 69)
+ {
+ money=26500000;
+ if (oldlvl > 75)
+ {
+ money=99900000;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if(money > 99900000)
+ money = 99900000;
+ player->SetMoney(player->GetMoney()+money);
+ if(player->getLevel() < oldlvl)
+ {
+ if (oldlvl > 9)
+ {
+ player->SetLevel(10);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
+ }
+ if (oldlvl > 19)
+ {
+ player->SetLevel(20);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
+ }
+ if (oldlvl > 29)
+ {
+ player->SetLevel(30);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
+ }
+ if (oldlvl > 39)
+ {
+ player->SetLevel(40);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
+ }
+ if (oldlvl > 49)
+ {
+ player->SetLevel(50);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
+ }
+ if (oldlvl > 59)
+ {
+ player->SetLevel(60);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
+ }
+ if (oldlvl > 69)
+ {
+ player->SetLevel(70);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
+ }
+ if (oldlvl > 79)
+ {
+ player->SetLevel(80);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
+ }
+ if (oldlvl > 84)
+ {
+ player->SetLevel(85);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
+ }
+ player->SetLevel(oldlvl);
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
+ }
+ player->InitTalentForLevel();
+ player->InitStatsForLevel();
+
+ for(int i = 0; i < 4; ++i)
+ {
+ ItemPosCountVec dest;
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, 5764, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+
+ Item* item = player->StoreNewItem( dest, 5764, 1, true);
+ player->SendNewItem( item, 1, true, false);
+ }
+ }
+
+ _Creature->Say( importtext4, LANG_UNIVERSAL, player->GetGUID());
+ UpdateCharData(player, 1);
+ //player->SaveToDB();
+ player->CLOSE_GOSSIP_MENU();
+ return true;
+ }
+ break;
+ case 21: // Armor Sets lvl 80s
+ {
+ /*static const unsigned short Tier0_5List[] = // Correspond line numbers with uint8 class in enum Classes
+ {
+ 40783, 40801, 40819, 40840, 40859, 0, 0, 0, // Warrior 1
+ 40782, 40802, 40821, 40842, 40861, 0, 0, 0, // Paladin 2
+ 41085, 41141, 41155, 41203, 41215, 0, 0, 0, // Hunter 3
+ 41648, 41653, 41670, 41681, 41765, 0, 0, 0, // Rogue 4
+ 41913, 41919, 41925, 41931, 41938, 0, 0, 0, // Priest 5
+ 0, 0, 0, 0, 0, 0, 0, 0, // DK 6 - no set available
+ 40989, 41005, 41017, 41031, 41042, 0, 0, 0, // Shaman 7
+ 41944, 41950, 41957, 41963, 41969, 0, 0, 0, // Mage 8
+ 41991, 42001, 42003, 42009, 42015, 0, 0, 0, // Warlock 9
+ 0, 0, 0, 0, 0, 0, 0, 0, // Unused 10
+ 41279, 41291, 41302, 41314, 41325, 0, 0, 0, // Druid 11
+ };*/ //HATEFULL!!!!
+ /*static const unsigned short Tier0_5List[] = // Correspond line numbers with uint8 class in enum Classes
+ {
+ 40786, 40804, 40823, 40844, 40862, 0, 0, 0, // Warrior 1
+ 40785, 40805, 40825, 40846, 40864, 0, 0, 0, // Paladin 2
+ 41086, 41142, 41156, 41204, 41216, 0, 0, 0, // Hunter 3
+ 41649, 41654, 41671, 41682, 41766, 0, 0, 0, // Rogue 4
+ 41914, 41920, 41926, 41933, 41939, 0, 0, 0, // Priest 5
+ 40863, 40784, 40806, 40824, 40845, 0, 0, 0, // DK 6 - no set available
+ 40990, 41000, 41012, 41026, 41037, 0, 0, 0, // Shaman 7
+ 41945, 41951, 41958, 41964, 41970, 0, 0, 0, // Mage 8
+ 41992, 41997, 42004, 42010, 42016, 0, 0, 0, // Warlock 9
+ 0, 0, 0, 0, 0, 0, 0, 0, // Unused 10
+ 41280, 41292, 41303, 41315, 41326, 0, 0, 0, // Druid 11
+ }; // DEADLY SET*/
+ static const unsigned short Tier0_5List[] = // Correspond line numbers with uint8 class in enum Classes
+ {
+ 40847, 40789, 40807, 40826, 40866, 0, 0, 0, // Warrior 1 / done
+ 40933, 40907, 40927, 40939, 40963, 0, 0, 0, // Paladin 2 / done
+ 41087, 41143, 41157, 41205, 41217, 0, 0, 0, // Hunter 3 / done
+ 41650, 41655, 41672, 41683, 41767, 0, 0, 0, // Rogue 4 / done
+ 41915, 41921, 41927, 41934, 41940, 0, 0, 0, // Priest 5 / done
+ 40787, 40809, 40827, 40848, 40868, 0, 0, 0, // DK 6 - / done
+ 41019, 40993, 41007, 41033, 41044, 0, 0, 0, // Shaman 7 / done
+ 41971, 41946, 41953, 41959, 41965, 0, 0, 0, // Mage 8 / done
+ 42017, 41993, 41998, 42005, 42011, 0, 0, 0, // Warlock 9 / done
+ 0, 0, 0, 0, 0, 0, 0, 0, // Unused 10
+ 41281, 41293, 41304, 41316, 41327, 0, 0, 0, // Druid 11 / done
+ }; // Furious SET
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ int8 pclass = player->getClass();
+ int loop = ((pclass * 8) - 8);
+ for(unsigned long i = loop; i < (loop + 8); i++)
+ {
+ uint32 itemid = Tier0_5List[i];
+ ItemPosCountVec dest;
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemid, 1, false);
+ if( msg == EQUIP_ERR_OK )
+ {
+
+ //Item* item = player->StoreNewItem( dest, itemid, 1, true);
+ Item* item = player->StoreNewItem(dest, itemid, true);
+ player->SendNewItem( item, 1, true, false);
+ }
+ else
+ {
+ _Creature->Say(importtext2, LANG_UNIVERSAL, player->GetGUID());
+ player->SendEquipError( msg, NULL, NULL, itemid );
+ }
+ }
+
+ uint32 bonusitem = 47241; // Emblem of Triumph
+ for(int i = 1; i <= 50; i++)
+ {
+ ItemPosCountVec dest;
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, bonusitem, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+
+ Item* item = player->StoreNewItem( dest, bonusitem, 1, true);
+ player->SendNewItem( item, 1, true, false);
+ }
+ }
+
+ //player->SaveInventoryAndGoldToDB(trans);
+
+ _Creature->Say(importtext9, LANG_UNIVERSAL, player->GetGUID());
+ UpdateCharData(player, 2);
+ player->ModifyHonorPoints(75000);
+ //player->SetArenaPoints(2000);
+ //player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
+ player->SaveToDB();
+ player->CLOSE_GOSSIP_MENU();
+ return true;
+ }
+ break;
+ case 22: // Armor Sets 70+
+ {
+ static const unsigned short Tier0_5List[] = // Correspond line numbers with uint8 class in enum Classes
+ {
+ 30120, 30118, 30119, 30121, 30122, 0, 0, 0, // Warrior 1
+ 30129, 30130, 30132, 30133, 30131, 0, 0, 0, // Paladin 2
+ 30139, 30140, 30141, 30142, 30143, 0, 0, 0, // Hunter 3
+ 30144, 30145, 30146, 30148, 30149, 0, 0, 0, // Rogue 4
+ 30160, 30161, 30162, 30159, 30163, 0, 0, 0, // Priest 5
+ 0, 0, 0, 0, 0, 0, 0, 0, // DK 6 - no set available
+ 30169, 30170, 30171, 30172, 30173, 0, 0, 0, // Shaman 7
+ 30206, 30205, 30207, 30210, 30196, 0, 0, 0, // Mage 8
+ 30211, 30212, 30213, 30215, 30214, 0, 0, 0, // Warlock 9
+ 0, 0, 0, 0, 0, 0, 0, 0, // Unused 10
+ 30231, 30232, 30233, 30234, 30235, 0, 0, 0 // Druid 11
+ };
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ int8 pclass = player->getClass();
+ int loop = ((pclass * 8) - 8);
+ for(unsigned long i = loop; i < (loop + 8); i++)
+ {
+ uint32 itemid = Tier0_5List[i];
+ ItemPosCountVec dest;
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemid, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+
+ Item* item = player->StoreNewItem( dest, itemid, 1, true);
+ player->SendNewItem( item, 1, true, false);
+ }
+ else
+ {
+ _Creature->Say(importtext2, LANG_UNIVERSAL, player->GetGUID());
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+
+ //player->SaveInventoryAndGoldToDB(trans);
+
+ _Creature->Say(importtext5, LANG_UNIVERSAL, player->GetGUID());
+ UpdateCharData(player, 2);
+ player->SaveToDB();
+ player->CLOSE_GOSSIP_MENU();
+ return true;
+ }
+ break;
+ case 31: // choose prof for 375
+ {
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _ALCH_, GOSSIP_SENDER_SEC_PROFTRAIN, 101);
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _BLAK_, GOSSIP_SENDER_SEC_PROFTRAIN, 102 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _ENCH_, GOSSIP_SENDER_SEC_PROFTRAIN, 103 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _ENGI_, GOSSIP_SENDER_SEC_PROFTRAIN, 104 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _HERB_, GOSSIP_SENDER_SEC_PROFTRAIN, 105 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _JEWE_, GOSSIP_SENDER_SEC_PROFTRAIN, 106 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _LEWO_, GOSSIP_SENDER_SEC_PROFTRAIN, 107 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MINI_, GOSSIP_SENDER_SEC_PROFTRAIN, 108);
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _SKIN_, GOSSIP_SENDER_SEC_PROFTRAIN, 109 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _TAIL_, GOSSIP_SENDER_SEC_PROFTRAIN, 110);
+ //player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _INSC_, GOSSIP_SENDER_SEC_PROFTRAIN, 111);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return true;
+
+ }break;
+ case 41: // choose prof for 300
+ {
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _ALCH_, GOSSIP_SENDER_SEC_PROFTRAIN, 201);
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _BLAK_, GOSSIP_SENDER_SEC_PROFTRAIN, 202 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _ENCH_, GOSSIP_SENDER_SEC_PROFTRAIN, 203 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _ENGI_, GOSSIP_SENDER_SEC_PROFTRAIN, 204 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _HERB_, GOSSIP_SENDER_SEC_PROFTRAIN, 205 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _JEWE_, GOSSIP_SENDER_SEC_PROFTRAIN, 206 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _LEWO_, GOSSIP_SENDER_SEC_PROFTRAIN, 207 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _MINI_, GOSSIP_SENDER_SEC_PROFTRAIN, 208);
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _SKIN_, GOSSIP_SENDER_SEC_PROFTRAIN, 209 );
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _TAIL_, GOSSIP_SENDER_SEC_PROFTRAIN, 210);
+ //player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _INSC_, GOSSIP_SENDER_SEC_PROFTRAIN, 211);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return true;
+ }
+ break;
+ case 51:
+ {
+ _Creature->Say(importtext8, LANG_UNIVERSAL, player->GetGUID());
+ UpdateCharData(player, 7);
+ player->CLOSE_GOSSIP_MENU();
+ }
+ break;
+ case 101:
+ case 102:
+ case 103:
+ case 104:
+ case 105:
+ case 106:
+ case 107:
+ case 108:
+ case 109:
+ case 110:
+ //case 111:
+ {
+ int choice = action - 101;
+ uint32 skill = SkillList[choice];
+ if (oldlvl > 19) //over level 19?
+ {
+ value = 150;
+ maxrank = 2;
+ if (oldlvl > 39) //over level 40?
+ {
+ value = 225;
+ maxrank = 3;
+ if (oldlvl > 49) //over level 50 ?
+ {
+ value = 300;
+ maxrank = 4;
+ if (oldlvl > 70) //level 70
+ {
+ value = 375;
+ maxrank = 4;
+ }
+ }
+ }
+ }
+ // I don't know why you made 2 checks below, one for primary profession points, and another one for skill value
+ // I re added the second part in the if-clause, because i'ts essential it is in 1 clause.
+ // Imagine if someone has a 375 profession already, he should get the 'Master' profession spell in his spell book
+ // If this protocol wants to set his proffession skill to i.e 225, he would get the 'Expert' profession spell, while his skill level remains the same
+ // I changed the GetFreePrimaryProffesionPoints clause to '> 0', because as long as the player has 1 free proff slot, it can be taught.
+ // No need to have 2 free proff slots for only one proff.
+ // Also the double initializations of variables such as 'rank' and 'rank2' really isn't needed and all it does is eat memory.
+
+ if (player->GetFreePrimaryProfessionPoints() > 0 && player->GetSkillValue(skill) < value)
+ {
+ for (unsigned long i = LoopList[choice]; i < (sizeof(SpellList)/sizeof(short)); ++i)
+ {
+ if (rank < maxrank)
+ {
+ player->removeSpell((uint16)SpellList[i]); //remove first to prevent all ranks show up in spellbook
+ player->learnSpell((uint16)SpellList[i], false);
+ ++rank;
+ }
+ }
+ player->SetSkill(skill, 0, value, value);
+ _Creature->Say(importtext6, LANG_UNIVERSAL, NULL);
+ UpdateCharData(player, 3);
+ player->CLOSE_GOSSIP_MENU();
+ }
+ else
+ {
+ _Creature->Say(importtext3, LANG_UNIVERSAL, player->GetGUID());
+ UpdateCharData(player, 5);
+ player->CLOSE_GOSSIP_MENU();
+ }
+ return true;
+ }break;
+ case 201:
+ case 202:
+ case 203:
+ case 204:
+ case 205:
+ case 206:
+ case 207:
+ case 208:
+ case 209:
+ case 210:
+ //case 211:
+ {
+ int choice = action - 201;
+ uint32 skill = SkillList[choice];
+ if (oldlvl > 19) //over level 19?
+ {
+ value = 150;
+ maxrank = 2;
+ if (oldlvl > 39) //over level 40?
+ {
+ value = 225;
+ maxrank = 3;
+ if (oldlvl > 49) //over level 50 ?
+ {
+ value = 300;
+ maxrank = 4;
+ if (oldlvl > 70) //level 70
+ {
+ value = 375;
+ maxrank = 4;
+ }
+ }
+ }
+ }
+ if (player->GetFreePrimaryProfessionPoints() > 0 && player->GetSkillValue(skill) < value)
+ {
+ for (unsigned long i = LoopList[choice]; i < (sizeof(SpellList)/sizeof(short)); ++i)
+ {
+ if (rank < maxrank)
+ {
+ player->removeSpell((uint16)SpellList[i]); //remove first to prevent all ranks show up in spellbook
+ player->learnSpell((uint16)SpellList[i], false);
+ ++rank;
+ }
+ }
+ player->SetSkill(skill, 0, value, value);
+ _Creature->Say(importtext7, LANG_UNIVERSAL, NULL);
+ UpdateCharData(player, 7);
+ player->UpdateSkillsToMaxSkillsForLevel();
+ //
+ std::string ircchan = "#";
+ ircchan += sIRC._irc_chan[sIRC.anchn].c_str();
+ std::string tmpstr = "";
+ std::stringstream ss;
+ ss << player->GetName();
+ ss << " Has Just made his FREE level 80, Welcome to MGA :)";
+ sIRC.Send_IRC_Channel(ircchan, sIRC.MakeMsg("\00304,08\037/!\\\037\017\00304 MGA Announcer \00304,08\037/!\\\037\017 %s", "%s", ss.str().c_str()), true);
+ sWorld->SendWorldText(9999, ss.str().c_str());
+ //
+ player->CLOSE_GOSSIP_MENU();
+ }
+ else
+ {
+ _Creature->Say(importtext3, LANG_UNIVERSAL, player->GetGUID());
+ UpdateCharData(player, 6);
+ player->CLOSE_GOSSIP_MENU();
+ }
+ return true;
+
+ }break;
+ case 5000:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ }break;
+
+ }
+ player->CLOSE_GOSSIP_MENU();
+ return true;
+}
+};
+void AddSC_mga_guild_shoponeAI()
+{
+ new mga_guild_shopone;
+}
\ No newline at end of file
diff --git a/Custom/custom_script_loader.cpp b/Custom/custom_script_loader.cpp
new file mode 100644
index 0000000000000..332a2457cbbcf
--- /dev/null
+++ b/Custom/custom_script_loader.cpp
@@ -0,0 +1,26 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+
+// This is where scripts' loading functions should be declared:
+
+// The name of this function should match:
+// void Add${NameOfDirectory}Scripts()
+void AddCustomScripts()
+{
+ void AddSC_mga_guild_shoponeAI();
+ void AddSC_npc_mga_accessAI();
+}
diff --git a/Custom/mga_access.cpp b/Custom/mga_access.cpp
new file mode 100644
index 0000000000000..a54abd633678e
--- /dev/null
+++ b/Custom/mga_access.cpp
@@ -0,0 +1,153 @@
+/* Copyright (C) 2006,2007 ScriptDev2
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+*/
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "ScriptedGossip.h"
+#include "GameEventMgr.h"
+#include "Player.h"
+#include "WorldSession.h"
+
+#define GOSSIP_HELLO_INFO "Tell Me About MGAWoW"
+
+#define GOSSIP_HELLO_INFO1 "You might qualify for a free level 80?"
+
+#define GOSSIP_HELLO_TP1 "Send me to the MGA Voters Area"
+#define GOSSIP_HELLO_TP2 "IMPORT DETECTED!!! - Teleport me to the voters area."
+
+#define GOSSIP_HELLO_TPNO "You have not voted in the last 12 hours on this account or your in the DK starting zone, if you wish to use me please go and vote and I will send you to a Very Very nice location."
+#define GOSSIP_HELLO_TPNO1 "You must be level 2+ to use me."
+
+#define mgainfotext1 -1705551
+#define mgainfotext2 -1705552
+/*
+#define mgainfotext2 -1705552
+#define mgainfotext3 -1705553
+#define mgainfotext4 -1705554
+#define mgainfotext5 -1705555
+#define mgainfotext6 -1705556
+
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705551','MGA has a lot of features like Faction/Race/Name Changer and we have our own currency Mini & MGA Tokens, for more infomation visit the features page @ wrath.mgawow.co.uk');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705552','MGA offers a character import service, for full info visit wrath.mgawow.co.uk and click import.');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705553','INFO THREE');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705554','INFO FOUR');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705555','INFO FIVE');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705556','INFO SIX');
+UPDATE `script_texts` SET `content_default`='For a limited time and during promotion time ALL new accounts get one (1) free level 80, for more info on this please visit wrath.mgawow.co.uk login with your new account and make sure popup blockers are turned off. Thank you and welcome to MGA' WHERE (`npc_entry`='500612') AND (`entry`='-1705552')
+*/
+//#define mgainfotext7 -1705557
+//#define mgainfotext8 -1705558
+//#define mgainfotext9 -1705559
+
+class npc_mga_access : public CreatureScript
+{
+ public:
+ npc_mga_access() : CreatureScript("npc_mga_access") { }
+
+
+bool OnGossipHello(Player *player, Creature *_Creature)
+{
+ QueryResult result;
+ result = WorldDatabase.PQuery("SELECT * FROM `guild_transfer` WHERE `name1` = '%s' AND `duplicate` = '0' AND `status` = '0'", std::string(player->GetName()).c_str());
+ if(result)
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP2 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ }
+
+ //if(player->getLevel() > 1)
+ //{
+
+ time_t tseconds;
+ tseconds = time (NULL);
+ uint32 ttcheck;
+ ttcheck = (tseconds-43200); // 12 hours
+ QueryResult result2;
+ result2 = WorldDatabase.PQuery("SELECT * FROM `vote_tp` WHERE `guid`='%d' AND `time` >'%d' LIMIT 1", player->GetSession()->GetAccountId(),ttcheck);
+ //sLog->outError("SELECT * FROM `vote_tp` WHERE `guid`='%d' AND `time` >'%d' LIMIT 1", player->GetSession()->GetAccountId(),ttcheck);
+
+ if(result2)
+ {
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ }
+ else
+ {
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TPNO , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+50);
+ }
+
+ //}
+ //else
+ //{
+ // player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TPNO1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+50);
+ //}
+
+ //player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_INFO , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+100);
+ //player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_INFO1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+101);
+
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+}
+
+bool OnGossipSelect(Player* player, Creature* _Creature, uint32 /*sender*/, uint32 action)
+{
+
+ player->PlayerTalkClass->ClearMenus();
+ switch(action - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 1:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->getClass() == CLASS_DEATH_KNIGHT && player->getLevel() < 80)
+ player->SetPhaseMask(PHASEMASK_NORMAL, false);
+ player->TeleportTo(571,5817.41f,601.99f,570.55f,3.13f); // dala sewer arena (visual copy)
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+
+ // BYE BYE
+ case 50:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ }
+ break;
+
+ case 100:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ _Creature->Yell(mgainfotext1, LANG_UNIVERSAL, NULL);
+ }
+ break;
+ case 101:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ _Creature->Yell(mgainfotext2, LANG_UNIVERSAL, NULL);
+
+ }
+ break;
+
+ }
+ return true;
+
+}
+
+};
+
+void AddSC_npc_mga_accessAI()
+{
+ new npc_mga_access;
+}
diff --git a/Custom/mga_boss_one.cpp b/Custom/mga_boss_one.cpp
new file mode 100644
index 0000000000000..df14c82820211
--- /dev/null
+++ b/Custom/mga_boss_one.cpp
@@ -0,0 +1,889 @@
+/* Copyright (C) 2006,2007 ScriptDev2
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+//#include "../ArkChat/IRCClient.h"
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "ScriptedGossip.h"
+#include "GameEventMgr.h"
+#include "Player.h"
+#include "WorldSession.h"
+#include "Creature.h"
+
+
+#define AGGRO -1710000
+#define PAUSEDONE -1710001
+#define DIEINAOE -1710002
+#define NABSTORM -1710003
+#define HABUBBLE -1710004
+#define NOBUBBLE -1710005
+#define MINIADDDIE -1710006
+#define MINIADDFIRE -1710007
+#define ENRAGE -1710009
+#define PLAYERDIEADD -1710010
+#define PLAYERDIE -1710011
+
+#define WIDOWMAKERPULL -1710008
+
+#define _QUERY1_ "UPDATE `mga_event_data` SET `active` = '1' WHERE `id` ='1'"
+#define _QUERY2_ "UPDATE `mga_event_data` SET `active` = '0' WHERE `id` ='1'"
+
+enum NPCs
+{
+ NPC_GUARD = 500924,
+ MINI_ADD = 500926,
+ NPC_SLIME = 500923,
+
+ NPC_BOSS_MEDMODE = 500928,
+ NPC_GUARD_MEDMODE = 500929,
+ NPC_BOSS_HARDMODE = 500930,
+ NPC_GUARD_HARDMODE = 500931,
+};
+
+enum Spells
+{
+ SPELL_ROT_WORM_SPAWNER = 70675,
+ SPELL_FROSTBOLT_VOLLEY = 70184, //shadow bolt volley spell
+ SPELL_FROSTBOLT_VOLLEY2 = 38836, //fire ball volley spell
+ SPELL_MANA_VOID = 71179,
+ SPELL_ICY_GRIP = 70117,
+ SPELL_FROSTNOVA = 62597,
+ SPELL_IMMOLATE = 50589,
+ SPELL_FIRENOVA = 43464,
+ SPELL_LEAP = 67880,
+ SPELL_EXPLODE = 67886,
+ SPELL_GROW = 31671,
+ SPELL_RADIANCE = 66935,
+ // BOSS SPELLS
+ SPELL_SHIELD = 66515,
+ SPELL_COLDFLAME_NORMAL = 69140,
+ SPELL_CLEAVE = 19983,
+ SPELL_FEL_LIGHTING = 66528,
+ SPELL_SLIME_POOL_EFFECT = 66882,
+ SPELL_DEATH_COIL = 71490,
+ SPELL_FELL_FIREBALL = 66532,
+ SPELL_BONE_STORM = 69076,
+ SPELL_FROST_SLOW = 72217,
+ SPELL_ROOT = 22800,
+ SPELL_FEAR = 65809,
+ SPELL_ENRAGE = 68335,
+ SPELL_FINGER = 31984,
+ SPELL_LEECHING_SWARM = 66118,
+ SPELL_MANA_BURN = 66100,
+};
+
+class mga_mini_add : public CreatureScript
+{
+public:
+ mga_mini_add() : CreatureScript("mga_mini_add") { }
+
+ struct mga_mini_addAI : public ScriptedAI
+ {
+ mga_mini_addAI(Creature* creature) : ScriptedAI(creature) {}
+
+ uint32 uiAttackTimer;
+ uint32 uiExplodeTimer;
+ uint32 uiDespawnTimer;
+ uint32 BlindSpell;
+ bool HasPopped;
+
+ void Reset()
+ {
+ uiAttackTimer = 3500;
+ uiExplodeTimer = 25000;
+ uiDespawnTimer = 10000;
+ BlindSpell = 13000;
+ HasPopped = false;
+ }
+
+ void EnterEvadeMode()
+ {
+ me->DisappearAndDie();
+ }
+
+ void KilledUnit(Unit* victim)
+ {
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ {
+ me->PlayDirectSound(14565) ; // EbonHold_WomanScream2_01.wav
+ me->Say(PLAYERDIEADD, LANG_UNIVERSAL, NULL);
+ }
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (uiAttackTimer <= uiDiff)
+ {
+ uiAttackTimer = 3500;
+ } else uiAttackTimer -= uiDiff;
+
+ if (uiExplodeTimer <= uiDiff)
+ {
+ DoCast(me, SPELL_IMMOLATE, true);
+ me->Say(MINIADDFIRE, LANG_UNIVERSAL, NULL);
+ uiExplodeTimer = 12000;
+ HasPopped = true;
+ }
+ else uiExplodeTimer -= uiDiff;
+
+ if (uiDespawnTimer <= uiDiff && HasPopped)
+ {
+ me->Say(MINIADDDIE, LANG_UNIVERSAL, NULL);
+ me->PlayDirectSound(9818) ; // FelBoarDeathA.wav
+ EnterEvadeMode();
+ }
+ else uiDespawnTimer -= uiDiff;
+
+
+
+ if (BlindSpell <= uiDiff)
+ {
+ //DoCast(me, SPELL_RADIANCE );
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
+ if (target)
+ DoCast(target, SPELL_MANA_BURN);
+
+ BlindSpell = urand(14000, 18000);
+ }
+ else BlindSpell -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new mga_mini_addAI(creature);
+ }
+};
+
+class npc_mga_abomo : public CreatureScript
+{
+public:
+ npc_mga_abomo() : CreatureScript("npc_mga_abomo") { }
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_mga_abomoAI(creature);
+ }
+
+ struct npc_mga_abomoAI : public ScriptedAI
+ {
+ npc_mga_abomoAI(Creature* creature) : ScriptedAI(creature) {}
+
+ uint32 uiSpell1CD;
+ uint32 uiSpell2CD;
+ uint32 uiSpell3CD;
+ uint32 uiSwpadd;
+ uint32 BlowAdd;
+ uint32 FearCD;
+
+ void Reset()
+ {
+ uiSpell1CD = urand(1000, 5000);
+ uiSpell2CD = urand(8000, 10000+uiSpell1CD);
+ uiSpell3CD = uiSpell2CD+500;
+ BlowAdd = 14000;
+ uiSwpadd = 9500;
+ FearCD = 16000;
+
+ }
+
+ void JustSummoned(Creature* summon)
+ {
+ summon->AI()->AttackStart(me->getVictim());
+ }
+
+ void EnterEvadeMode()
+ {
+ me->DisappearAndDie();
+ }
+
+ void JustDied(Unit* /*killer*/)
+ {
+ if (me->GetEntry() == NPC_GUARD_MEDMODE || me->GetEntry() == NPC_GUARD_HARDMODE)
+ DoCast(me, SPELL_ROT_WORM_SPAWNER, true);
+ }
+
+ void KilledUnit(Unit* victim)
+ {
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ {
+ me->PlayDirectSound(14565) ; // EbonHold_WomanScream2_01.wav
+ me->Say(PLAYERDIEADD, LANG_UNIVERSAL, NULL);
+ }
+ }
+
+ void MoveInLineOfSight(Unit* who)
+ {
+ if (me->IsWithinDistInMap(who, 20.0f) && who->GetTypeId() == TYPEID_PLAYER)
+ {
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true))
+ {
+ if (target->GetTypeId() == TYPEID_PLAYER)
+ {
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ me->SetReactState(REACT_AGGRESSIVE);
+ me->AddThreat(target, 100.0f);
+ me->SetInCombatWith(target);
+ target->SetInCombatWith(me);
+ AttackStart(target);
+ EnterCombat(who);
+ }
+ }
+ }
+
+
+ }
+
+ void EnterCombat(Unit* Who)
+ {
+ me->m_CombatDistance = 100.0f;
+ AttackStart(Who);
+ DoMeleeAttackIfReady();
+ //DoCast(Who, SPELL_FEAR);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (me->HasUnitState(UNIT_STAT_CASTING))
+ return;
+
+ if (!UpdateVictim())
+ return;
+
+ if (uiSpell1CD <= uiDiff)
+ {
+ DoCast(me, SPELL_FROSTBOLT_VOLLEY ,true);
+ uiSpell1CD = urand(7000, 12000);
+ }
+ else uiSpell1CD -= uiDiff;
+
+ if (uiSpell2CD <= uiDiff)
+ {
+ DoCast(me, SPELL_FROSTBOLT_VOLLEY2);
+ uiSpell2CD = urand(10000, 14000);
+ }
+ else uiSpell2CD -= uiDiff;
+
+ if (uiSpell3CD <= uiDiff)
+ {
+ DoCast(me, SPELL_FROSTNOVA );
+ uiSpell3CD = urand(15000, 17000);
+ }
+ else uiSpell3CD -= uiDiff;
+
+ if (uiSwpadd <= uiDiff)
+ {
+ me->SummonCreature(MINI_ADD, me->GetPositionX()+5, me->GetPositionY()+5, me->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ if (me->GetEntry() == NPC_GUARD_HARDMODE)
+ me->SummonCreature(MINI_ADD, me->GetPositionX()-5, me->GetPositionY()-5, me->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+
+ uiSwpadd = urand(60000, 65000);
+ }
+ else uiSwpadd -= uiDiff;
+
+
+ if (FearCD <= uiDiff)
+ {
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, NonTankTargetSelector(me));
+ if (!target)
+ {
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
+ if (target)
+ DoCast(target, SPELL_FEAR);
+ }
+ else
+ {
+ DoCast(target, SPELL_FEAR);
+ }
+ FearCD = urand(38000, 40000);
+ }
+ else FearCD -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+
+};
+
+
+class mga_slime_pool : public CreatureScript
+{
+public:
+ mga_slime_pool() : CreatureScript("mga_slime_pool") { }
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new mga_slime_poolAI(creature);
+ }
+
+ struct mga_slime_poolAI : public ScriptedAI
+ {
+ mga_slime_poolAI(Creature* creature) : ScriptedAI(creature)
+ {
+ }
+
+ bool casted;
+ void Reset()
+ {
+ casted = false;
+ me->SetReactState(REACT_PASSIVE);
+ }
+
+ void UpdateAI(const uint32 /*uiDiff*/)
+ {
+ if (!casted)
+ {
+ casted = true;
+ DoCast(me, SPELL_SLIME_POOL_EFFECT);
+ }
+ }
+ };
+
+};
+
+class mga_boss_one : public CreatureScript
+{
+public:
+ mga_boss_one() : CreatureScript("mga_boss_one") { }
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new mga_boss_oneAI(creature);
+ }
+
+ struct mga_boss_oneAI : public ScriptedAI
+ {
+ mga_boss_oneAI(Creature* creature) : ScriptedAI(creature)
+ {
+ }
+
+ uint32 CleaveCD;
+ uint32 flightningCD;
+ uint32 SlimePoolCD;
+ uint32 DeathCoilCD;
+ uint32 FellFireballCD;
+ uint32 BlueSHitCD;
+ uint32 IcyGripCD;
+ uint32 GuardSpwanCD;
+ uint32 NabStormCD;
+ uint32 BossPauseTimer;
+ uint32 NabStormTimer;
+ uint32 ImmuneTimer;
+ uint32 ImmuneDuration;
+ uint32 pullcheck;
+ uint32 EnrageTimer;
+ uint32 FingerCD;
+ uint32 LeechTimer;
+ uint32 DoPullCD;
+ bool PauseDone;
+ bool HasStarted;
+ bool MGAImmune;
+ bool HasEnraged;
+ bool DoneSwam;
+ bool DoPull;
+
+ void Reset()
+ {
+ //me->SetReactState(REACT_PASSIVE);
+ CleaveCD = 2500; //done
+ flightningCD = 5000; //done
+ DeathCoilCD = 7000; // done
+ FellFireballCD = 7000; //done
+ BlueSHitCD = 2500; //done
+ IcyGripCD = 180000; //done
+ GuardSpwanCD = 27000; //done
+ SlimePoolCD = 20000; //done
+ NabStormCD = 22000; //done
+ NabStormTimer = 7000; //done
+ BossPauseTimer = 35000; //done
+ ImmuneTimer = 30000;
+ ImmuneDuration = 20000;
+ EnrageTimer = 600000;
+ FingerCD = 3000;
+ LeechTimer = 6000;
+ DoPullCD = urand(22000, 24000);
+ PauseDone = false;
+ HasStarted = false;
+ MGAImmune = false;
+ HasEnraged = false;
+ DoneSwam = false;
+ DoPull = false;
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->setFaction(14);
+
+ }
+
+ void JustSummoned(Creature* summon)
+ {
+ summon->AI()->AttackStart(me->getVictim());
+ }
+
+ void EnterEvadeMode()
+ {
+ WorldDatabase.PExecute(_QUERY1_);
+ SendMSGToAll("Resistance is Futile, I Am immortal, come back when your ready to try again noobs....");
+ me->DisappearAndDie();
+ std::string title ="Mega Boss Event";
+ std::string msg ="The Mega Boss has won this round, better luck next time | #mgawow ";
+ std::string url ="http://wrath.mgawow.co.uk/activity";
+ WorldDatabase.PExecute("INSERT INTO `rss_feed` (`title`, `msg`,`url`) VALUES ('%s','%s','%s')", title.c_str(), msg.c_str(), url.c_str());
+ WorldDatabase.PExecute("UPDATE `rss_feed` SET `update`='1' WHERE `update`='0'");
+ }
+
+ void JustDied(Unit* /*killer*/)
+ {
+ WorldDatabase.PExecute(_QUERY1_);
+ if (me->GetEntry() == NPC_BOSS_HARDMODE)
+ SendMSGToAll("Has been downed in 25+ Man Mode. Well Done!");
+ else if (me->GetEntry() == NPC_BOSS_MEDMODE)
+ SendMSGToAll("Has been downed in 15-25 Man Mode. Well Done!");
+ else
+ SendMSGToAll("Has been downed in 10-15 Man Mode. Well Done!");
+
+ QueryResult result;
+ result = WorldDatabase.PQuery("SELECT * FROM `bonus_rewards` WHERE `active` = '1' AND `name` = 'megaboss' LIMIT 1");
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ uint32 bitem = fields[2].GetInt32();
+ uint32 bcount = fields[3].GetInt32();
+ if (bitem > 1 && bcount > 0)
+ {
+ //SPAWN A CHEST WITH EXTRA LOOTS
+ me->SummonGameObject(bitem, me->GetPositionX()+25, me->GetPositionY()+25, me->GetPositionZ(), 0, 0, 0, 0, 0, 30000000);
+ }
+ }
+ std::string title ="Mega Boss Event";
+ std::string msg ="The Mega Boss has been DOWNED!!!, well done! | #mgawow ";
+ std::string url ="http://wrath.mgawow.co.uk/activity";
+ WorldDatabase.PExecute("INSERT INTO `rss_feed` (`title`, `msg`,`url`) VALUES ('%s','%s','%s')", title.c_str(), msg.c_str(), url.c_str());
+ WorldDatabase.PExecute("UPDATE `rss_feed` SET `update`='1' WHERE `update`='0'");
+ }
+
+ void KilledUnit(Unit* victim)
+ {
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ {
+ me->PlayDirectSound(14565) ; // EbonHold_WomanScream2_01.wav
+ me->Say(PLAYERDIE, LANG_UNIVERSAL, NULL);
+ }
+ }
+
+ void MoveInLineOfSight(Unit* who)
+ {
+ if (me->IsWithinDistInMap(who, 10.0f))
+ {
+ if (me->IsValidAttackTarget(who) && !HasStarted)
+ {
+ WorldDatabase.PExecute(_QUERY2_);
+ me->PlayDirectSound(15771) ; // UR_FemaleYogg_Prefight01.wav
+ HasStarted = true;
+ EnterCombat(who);
+ DoCast(who, SPELL_ROOT); // root
+ me->AddThreat(who, 10.0f);
+ DoCast(me, SPELL_SHIELD);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ //me->GetMotionMaster()->MovePoint(1, me->GetPositionX(),me->GetPositionY(),me->GetPositionZ()+15);
+ MGAImmune = true;
+ if (me->GetEntry() == NPC_BOSS_MEDMODE)
+ {
+ me->SummonCreature(NPC_GUARD_MEDMODE, who->GetPositionX()+5, who->GetPositionY()+5, who->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ me->SummonCreature(NPC_GUARD_MEDMODE, who->GetPositionX()-5, who->GetPositionY()-5, who->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ }
+ else if (me->GetEntry() == NPC_BOSS_HARDMODE)
+ {
+ me->SummonCreature(NPC_GUARD_HARDMODE, who->GetPositionX()+5, who->GetPositionY()+5, who->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ me->SummonCreature(NPC_GUARD_HARDMODE, who->GetPositionX()-5, who->GetPositionY()-5, who->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ me->SummonCreature(NPC_GUARD_HARDMODE, who->GetPositionX()+10, who->GetPositionY()+10, who->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ me->SummonCreature(NPC_GUARD_HARDMODE, who->GetPositionX()-10, who->GetPositionY()-10, who->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ }
+ else
+ {
+ me->SummonCreature(NPC_GUARD, who->GetPositionX()+5, who->GetPositionY()+5, who->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ me->SummonCreature(NPC_GUARD, who->GetPositionX()-5, who->GetPositionY()-5, who->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ }
+ SlimePoolCD = 18000;
+ me->SummonCreature(NPC_SLIME, who->GetPositionX(), who->GetPositionY(), who->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 30000);
+ me->Yell(AGGRO, LANG_UNIVERSAL, NULL);
+ DoStartNoMovement(who);
+ }
+ }
+
+ }
+
+ void EnterCombat(Unit* Who)
+ {
+ me->m_CombatDistance = 100.0f;
+ AttackStart(Who);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (EnrageTimer <= uiDiff)
+ {
+ DoCast(me, SPELL_ENRAGE);
+ HasEnraged = true;
+ EnrageTimer = 6000000;
+ me->Say(ENRAGE, LANG_UNIVERSAL, NULL);
+ }
+ else EnrageTimer -= uiDiff;
+
+ if (me->HasUnitState(UNIT_STAT_CASTING))
+ return;
+
+ if (HasEnraged)
+ {
+ if (FingerCD <= uiDiff)
+ {
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);
+ if (target)
+ DoCast(target, SPELL_FINGER);
+ else
+ DoCast(me->getVictim(), SPELL_FINGER);
+ FingerCD = 3000;
+ }
+ else FingerCD -= uiDiff;
+ }
+
+ if (BossPauseTimer <= uiDiff && !PauseDone)
+ {
+ PauseDone = true;
+ MGAImmune = false;
+ me->RemoveAura(SPELL_SHIELD);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ me->GetMotionMaster()->MoveChase(me->getVictim());
+ AttackStart(me->getVictim());
+ DoStartMovement(me->getVictim());
+ SlimePoolCD = urand(12000, 14000);
+ me->Yell(PAUSEDONE, LANG_UNIVERSAL, NULL);
+ me->PlayDirectSound(15724) ; // UR_XT002_Aggro01.wav
+
+ }else BossPauseTimer -= uiDiff;
+
+
+ if (GuardSpwanCD <= uiDiff)
+ {
+ me->PlayDirectSound(5828) ; // AmnennarTheColdbringerSummon01.wav
+ if (me->GetEntry() == NPC_BOSS_MEDMODE)
+ {
+ me->SummonCreature(NPC_GUARD_MEDMODE, me->getVictim()->GetPositionX()-2, me->getVictim()->GetPositionY()+2, me->getVictim()->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ }
+ else if (me->GetEntry() == NPC_BOSS_HARDMODE)
+ {
+ me->SummonCreature(NPC_GUARD_HARDMODE, me->getVictim()->GetPositionX()-2, me->getVictim()->GetPositionY()+2, me->getVictim()->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ }
+ else
+ {
+ me->SummonCreature(NPC_GUARD, me->getVictim()->GetPositionX()-2, me->getVictim()->GetPositionY()+2, me->getVictim()->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000);
+ }
+ me->PlayDirectSound(9101) ; // SUCCUBUS_KILL01.wav
+ GuardSpwanCD = urand(26000, 36000);
+ if (me->GetEntry() == NPC_BOSS_MEDMODE)
+ GuardSpwanCD = urand(16000, 18000);
+ if (me->GetEntry() == NPC_BOSS_HARDMODE)
+ GuardSpwanCD = urand(12000, 16000);
+ if (!PauseDone)
+ GuardSpwanCD = urand(16000, 18000);
+ }
+ else GuardSpwanCD -= uiDiff;
+
+ if (me->HasAura(SPELL_BONE_STORM))
+ {
+ if (NabStormTimer <= uiDiff)
+ {
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);
+ if (target)
+ {
+ me->AddThreat(target, 20.0f);
+ AttackStart(target);
+ }
+ me->RemoveAurasDueToSpell(SPELL_BONE_STORM);
+ NabStormTimer = 10000;
+ }
+ else NabStormTimer -= uiDiff;
+
+ return;
+ }
+
+ if (!PauseDone)
+ return;
+
+ if (MGAImmune)
+ {
+
+ if (ImmuneDuration <= uiDiff)
+ {
+ MGAImmune = false;
+ me->RemoveAura(SPELL_SHIELD);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ me->GetMotionMaster()->MoveChase(me->getVictim());
+ me->Yell(NOBUBBLE, LANG_UNIVERSAL, NULL);
+ DoStartMovement(me->getVictim());
+ AttackStart(me->getVictim());
+ if (me->GetEntry() == NPC_BOSS_MEDMODE)
+ ImmuneDuration = 13000;
+ else if (me->GetEntry() == NPC_BOSS_HARDMODE)
+ ImmuneDuration = 15000;
+ else
+ ImmuneDuration = 20000;
+ }
+ else ImmuneDuration -= uiDiff;
+
+ return;
+ }
+
+ if (CleaveCD <= uiDiff)
+ {
+ DoCastVictim(SPELL_CLEAVE);
+ CleaveCD = urand(4000, 6000);
+ }
+ else CleaveCD -= uiDiff;
+
+ if (FellFireballCD <= uiDiff)
+ {
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, NonTankTargetSelector(me));
+ if (!target)
+ target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);
+ if (target)
+ DoCast(target, SPELL_FELL_FIREBALL);
+
+ FellFireballCD = urand(14000, 19000);
+ }
+ else FellFireballCD -= uiDiff;
+
+ if (BlueSHitCD <= uiDiff)
+ {
+ DoCastAOE(SPELL_COLDFLAME_NORMAL);
+ BlueSHitCD = urand(4000, 6000);
+ DoCastAOE(SPELL_COLDFLAME_NORMAL);
+ }
+ else BlueSHitCD -= uiDiff;
+
+ if (DoPullCD <= uiDiff)
+ {
+ DoPull = false;
+ DoPullCD = urand(22000, 24000);
+ }
+ else DoPullCD -= uiDiff;
+
+ if (SlimePoolCD <= uiDiff)
+ {
+ if (me->GetEntry() == NPC_BOSS_MEDMODE)
+ pullcheck = urand(1, 5);
+ else if (me->GetEntry() == NPC_BOSS_HARDMODE)
+ pullcheck = urand(1, 4);
+ else
+ pullcheck = urand(1, 6);
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);
+ if (target && pullcheck < 2)
+ {
+ DoCast(target, SPELL_ROOT); // root
+ me->SummonCreature(NPC_SLIME, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 29000);
+ me->Yell(DIEINAOE, LANG_UNIVERSAL, NULL);
+ }
+ else if (pullcheck > 1 && pullcheck < 3 && !DoPull)
+ {
+ DoPull = true;
+ DoCast(me, SPELL_FROST_SLOW );
+ DoStartNoMovement(me->getVictim());
+ me->SummonCreature(NPC_SLIME, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 29000);
+ me->Say(WIDOWMAKERPULL, LANG_UNIVERSAL, NULL);
+ DoCast(me, SPELL_ICY_GRIP );
+ me->Yell(DIEINAOE, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ if (target)
+ {
+ DoCast(target, SPELL_ROOT); // root
+ me->SummonCreature(NPC_SLIME, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 29000);
+ }
+ else
+ {
+ DoCast(me->getVictim(), SPELL_ROOT); // root
+ me->SummonCreature(NPC_SLIME, me->getVictim()->GetPositionX(), me->getVictim()->GetPositionY(), me->getVictim()->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 29000);
+ }
+ me->Yell(DIEINAOE, LANG_UNIVERSAL, NULL);
+ }
+
+ if (me->GetEntry() == NPC_BOSS_HARDMODE)
+ {
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);
+ if (target)
+ {
+ DoCast(target, SPELL_ROOT); // root
+ me->SummonCreature(NPC_SLIME, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 29000);
+ }
+ }
+
+ if (me->GetEntry() == NPC_BOSS_MEDMODE)
+ {
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);
+ if (target)
+ {
+ DoCast(target, SPELL_FELL_FIREBALL);
+ }
+ }
+
+ SlimePoolCD = urand(15000, 20000);
+ }
+ else SlimePoolCD -= uiDiff;
+
+ if (IcyGripCD <= uiDiff)
+ {
+ DoCast(me, SPELL_ICY_GRIP );
+ me->GetMotionMaster()->MoveChase(me->getVictim());
+ IcyGripCD = 300000;
+ }
+ else IcyGripCD -= uiDiff;
+
+ if (NabStormCD <= uiDiff)
+ {
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);
+ if (target)
+ {
+ AttackStart(target);
+ me->AddThreat(target, 100.0f);
+ me->GetMotionMaster()->MoveChase(target);
+ }
+ DoCast(me, SPELL_BONE_STORM);
+ me->Yell(NABSTORM, LANG_UNIVERSAL, NULL);
+ NabStormCD = urand(19000, 24000);
+ if (me->GetEntry() == NPC_BOSS_MEDMODE)
+ NabStormCD = urand(15000, 20000);
+ if (me->GetEntry() == NPC_BOSS_HARDMODE)
+ NabStormCD = urand(15000, 20000);
+ }
+ else NabStormCD -= uiDiff;
+
+ if (flightningCD <= uiDiff)
+ {
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);
+ if (target)
+ DoCast(target, SPELL_FEL_LIGHTING);
+
+ flightningCD = urand(9000, 14000);
+ }
+ else flightningCD -= uiDiff;
+
+ /*if (DeathCoilCD <= uiDiff)
+ {
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true);
+ if (target)
+ DoCast(target, SPELL_DEATH_COIL);
+
+ DeathCoilCD = urand(7000, 26000);
+ }
+ else DeathCoilCD -= uiDiff;*/
+
+ if (ImmuneTimer <= uiDiff)
+ {
+ MGAImmune = true;
+ me->PlayDirectSound(6918) ; // HumanFemaleLaugh01.wav
+ me->Yell(HABUBBLE, LANG_UNIVERSAL, NULL);
+ DoCast(me, SPELL_SHIELD);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
+ //me->GetMotionMaster()->MovePoint(1, me->GetPositionX(),me->GetPositionY(),me->GetPositionZ()+15);
+ DoStartNoMovement(me->getVictim());
+ ImmuneTimer = 30000;
+ if (me->GetEntry() == NPC_BOSS_MEDMODE)
+ ImmuneTimer = 25000;
+ if (me->GetEntry() == NPC_BOSS_HARDMODE)
+ ImmuneTimer = 20000;
+ }
+ else ImmuneTimer -= uiDiff;
+
+ if (me->GetEntry() == NPC_BOSS_HARDMODE && me->HealthBelowPct(10) && !DoneSwam)
+ {
+ if (LeechTimer <= uiDiff)
+ {
+ DoCastAOE(SPELL_LEECHING_SWARM);
+ DoneSwam = true;
+ }
+ else LeechTimer -= uiDiff;
+ }
+
+ if (me->GetEntry() == NPC_BOSS_MEDMODE && me->HealthBelowPct(3) && !DoneSwam)
+ {
+ if (LeechTimer <= uiDiff)
+ {
+ DoCastAOE(SPELL_LEECHING_SWARM);
+ DoneSwam = true;
+ }
+ else LeechTimer -= uiDiff;
+ }
+
+ if (me->GetEntry() != NPC_BOSS_MEDMODE && me->GetEntry() != NPC_BOSS_HARDMODE && me->HealthBelowPct(1) && !DoneSwam)
+ {
+ if (LeechTimer <= uiDiff)
+ {
+ DoCastAOE(SPELL_LEECHING_SWARM);
+ DoneSwam = true;
+ }
+ else LeechTimer -= uiDiff;
+ }
+
+ if (DoneSwam && me->HealthAbovePct(15))
+ {
+ DoneSwam = false;
+ me->RemoveAurasDueToSpell(SPELL_LEECHING_SWARM);
+ if (me->GetEntry() == NPC_BOSS_HARDMODE)
+ EnrageTimer = (EnrageTimer+60000);
+ else if (me->GetEntry() == NPC_BOSS_MEDMODE)
+ EnrageTimer = (EnrageTimer+120000);
+ else
+ EnrageTimer = (EnrageTimer+300000);
+ }
+
+
+ DoMeleeAttackIfReady();
+ }
+
+
+
+ void SendMSGToAll(std::string bossmode)
+ {
+ std::string ircchan = "#";
+ ircchan += sIRC._irc_chan[sIRC.anchn].c_str();
+ std::string tmpstr = "";
+ std::stringstream ss;
+ ss << "MGA Boss ";
+ ss << bossmode;
+ sIRC.Send_IRC_Channel(ircchan, sIRC.MakeMsg("\00304,08\037/!\\\037\017\00304 MGA Event Announcer \00304,08\037/!\\\037\017 %s", "%s", ss.str().c_str()), true);
+ //sWorld->SendWorldText(9999, ss.str().c_str());
+ }
+
+ };
+
+};
+
+// END
+void AddSC_mga_boss()
+{
+ new npc_mga_abomo();
+ new mga_slime_pool();
+ new mga_boss_one();
+ new mga_mini_add();
+}
diff --git a/Custom/mga_codebox_shop.cpp b/Custom/mga_codebox_shop.cpp
new file mode 100644
index 0000000000000..e747ac27b8e86
--- /dev/null
+++ b/Custom/mga_codebox_shop.cpp
@@ -0,0 +1,137 @@
+#include "ScriptPCH.h"
+#include
+
+/* Mysql table info
+code 0
+itemid 1
+itemct 2
+status 3
+*/
+// Text
+#define mgacstext1 -1900007
+#define mgacstext2 -1900008
+#define mgacstext3 -1900009
+#define mgacstext4 -1900010
+#define mgacstext5 -1900011
+#define _MENU1_ "I would like to enter my unique code."
+#define _MENU2_ "Maybe Another Time"
+/*
+#define _FAIL1_ "You have entered an invalid code. Please check out for typo's." -1900007
+#define _FAIL2_ "Your inventory is full, please make sure you have at least one free slot." -1900008
+#define _FAIL3_ "Unexpected technical error. Please inform a Staffmember." -1900009
+#define _SUCCESS_ "There you go! Thanks for your custom, have fun." -1900010
+#define _BYE_ "Good bye!" -1900011
+INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500911','-1900007','You have entered an invalid code. Please check out for typo\'s.');
+INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500911','-1900008','Your inventory is full, please make sure you have at least one free slot.');
+INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500911','-1900009','Unexpected technical error. Please inform a Staffmember.');
+INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500911','-1900010','There you go! Thanks for your custom, have fun.');
+INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500911','-1900011','Good bye!');
+#*/
+// SQL
+#define _QUERY1_ "SELECT * FROM `shop_order` WHERE `code` = '%s' AND `status` = '0' AND `acct_id` = '%d'"
+#define _QUERY2_ "UPDATE `shop_order` SET `status` = '1' WHERE `code` = '%s'"
+
+//This function is called when the player opens the gossip menubool
+class mga_codebox_shop : public CreatureScript
+{
+public:
+ mga_codebox_shop() : CreatureScript("mga_codebox_shop") { }
+
+ bool OnGossipHello(Player* player, Creature* creature)
+ {
+ player->ADD_GOSSIP_ITEM_EXTENDED(0, _MENU1_, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1, "", 0, true);
+ player->ADD_GOSSIP_ITEM(0, _MENU2_, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+
+ player->PlayerTalkClass->SendGossipMenu(907, creature->GetGUID());
+
+ return true;
+
+ }
+
+
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action)
+ {
+ if (action == GOSSIP_ACTION_INFO_DEF+2)
+ {
+ creature->Say(mgacstext5, LANG_UNIVERSAL, NULL);
+ player->CLOSE_GOSSIP_MENU();
+ }
+
+ return true;
+ }
+
+
+ bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, const char* code)
+ {
+ if (sender == GOSSIP_SENDER_MAIN)
+ {
+ if(action == GOSSIP_ACTION_INFO_DEF+1)
+ {
+ checkCode(player, creature, code);
+ }
+ player->CLOSE_GOSSIP_MENU();
+ return true;
+ }
+
+ return false;
+ }
+
+bool checkCode(Player* pPlayer, Creature* pCreature, const char* sCode)
+{
+
+ // Some variables declarations.
+ QueryResult result;
+ uint32 item_id = 0;
+ uint32 quantity = 0;
+ //bool check = false;
+ //extern DatabaseType TScriptDB;
+
+ result = WorldDatabase.PQuery(_QUERY1_, sCode, pPlayer->GetSession()->GetAccountId());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+
+ item_id = fields[2].GetUInt32();
+ quantity = fields[3].GetUInt32();
+
+ if(item_id > 0)
+ {
+ ItemPosCountVec dest;
+ uint8 canStoreNewItem = pPlayer->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, item_id, quantity);
+ if(canStoreNewItem == EQUIP_ERR_OK)
+ {
+ Item *newItem = NULL;
+ newItem = pPlayer->StoreNewItem(dest, item_id, quantity, true);
+ pPlayer->SendNewItem(newItem, quantity, true, false);
+ pCreature->Say(mgacstext4, LANG_UNIVERSAL, NULL);
+ WorldDatabase.PExecute(_QUERY2_, sCode);
+ return true;
+ }
+ else
+ {
+ pCreature->Say(mgacstext2, LANG_UNIVERSAL, NULL);
+ return false;
+ }
+ }
+ else
+ {
+ pCreature->Say(mgacstext3, LANG_UNIVERSAL, NULL);
+ return false;
+ }
+ }
+ else
+ {
+ pCreature->Yell(mgacstext1, LANG_UNIVERSAL, NULL);
+ sLog->outSQLDriver(sCode);
+ return false;
+ }
+ //delete result;
+}
+
+
+};
+void AddSC_mga_codebox_shopAI()
+{
+ new mga_codebox_shop;
+
+}
diff --git a/Custom/mga_faction_race_changer.cpp b/Custom/mga_faction_race_changer.cpp
new file mode 100644
index 0000000000000..352c661d999a6
--- /dev/null
+++ b/Custom/mga_faction_race_changer.cpp
@@ -0,0 +1,145 @@
+/* Copyright (C) 2006,2007 ScriptDev2
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500512','-1700142','You have been flagged for a faction change, please exit and reload the game, thank you.');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500512','-1700143','You have been flagged for a race change, please exit and reload the game, thank you.');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500512','-1700144','You do not have a MGA Token in your bag, get one and we can continue.');
+
+*/
+#include "ScriptPCH.h"
+#include "GuildMgr.h"
+
+#define nemhtext41 -1700142 // tell player to log out and back in
+#define nemhtext42 -1700143 // tell player they not entilied
+#define nemhtext43 -1700144 // no mga token
+
+#define GOSSIP_HELLO_NEMH5 "Change My Faction"
+#define GOSSIP_HELLO_NEMH6 "Change My Race"
+#define GOSSIP_HELLO_NEMH7 "You are not in the character editor system please visit the account page on the web site to enable faction or race swapping for this character."
+
+class npc_mga_char_editor : public CreatureScript
+{
+ public:
+ npc_mga_char_editor() : CreatureScript("npc_mga_char_editor") { }
+
+
+bool UpdateReNameCharData(Player *player, int16 status)
+{
+ WorldDatabase.PExecute("UPDATE `char_edit` SET `status`='%d' WHERE `charid`='%d' AND `status` = '0'",status, player->GetGUID());
+ return true;
+}
+
+bool OnGossipHello(Player *player, Creature *_Creature)
+{
+ QueryResult result;
+ result = WorldDatabase.PQuery("SELECT * FROM `char_edit` WHERE `charid`='%d' AND `status`='0' LIMIT 1", player->GetGUID());
+ if(result)
+ {
+ //check to see faction/race chnage
+ uint32 edittype = 0;
+ Field *fields = result->Fetch();
+ edittype = fields[2].GetUInt32();
+ if (edittype < 1)
+ {
+ //faction
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_NEMH5 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ }
+ else
+ {
+ //race
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_NEMH6 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+ }
+ }
+ else
+ {
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_NEMH7 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
+ }
+
+
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+}
+
+bool OnGossipSelect(Player* player, Creature* _Creature, uint32 /*sender*/, uint32 action)
+{
+
+ player->PlayerTalkClass->ClearMenus();
+ switch(action - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 1:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 1))
+ {
+ uint32 glId = player->GetGuildId();
+ uint32 target_guid = player->GetGUID();
+ Guild* guild = sObjectMgr->GetGuildById(player->GetGuildId());
+ if (guild)
+ guild->DeleteMember(target_guid, false, true);
+
+ player->SetAtLoginFlag(AT_LOGIN_CHANGE_FACTION);
+ UpdateReNameCharData(player, 1);
+ player->DestroyItemCount(21140, 1, true);
+ CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '64' WHERE guid = %u", player->GetGUIDLow());
+ _Creature->Say(nemhtext41, LANG_UNIVERSAL, NULL); // tell player to log out and back in
+ return true;
+ }
+ else
+ {
+ // no mga token
+ _Creature->Say(nemhtext43, LANG_UNIVERSAL, NULL);
+ return false;
+ }
+ }
+ break;
+ case 2:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 1))
+ {
+ UpdateReNameCharData(player, 1);
+ player->DestroyItemCount(21140, 1, true);
+ //PSendSysMessage(LANG_CUSTOMIZE_PLAYER, GetNameLink(player).c_str());
+ player->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE);
+ CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '128' WHERE guid = %u", player->GetGUIDLow());
+ _Creature->Say(nemhtext42, LANG_UNIVERSAL, NULL); // tell player to log out and back in
+ return true;
+ }
+ else
+ {
+ // no mga token
+ _Creature->Say(nemhtext43, LANG_UNIVERSAL, NULL);
+ return false;
+ }
+ }
+ break;
+ case 3:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ }
+ break;
+
+ }
+ return true;
+
+}
+
+};
+
+void AddSC_npc_mga_char_editorAI()
+{
+ new npc_mga_char_editor;
+}
\ No newline at end of file
diff --git a/Custom/mga_greeter.cpp b/Custom/mga_greeter.cpp
new file mode 100644
index 0000000000000..fdad53a482e40
--- /dev/null
+++ b/Custom/mga_greeter.cpp
@@ -0,0 +1,153 @@
+/* Copyright (C) 2006,2007 ScriptDev2
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+*/
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "ScriptedGossip.h"
+#include "GameEventMgr.h"
+#include "Player.h"
+#include "WorldSession.h"
+
+#define GOSSIP_HELLO_INFO "Tell Me About MGAWoW"
+
+#define GOSSIP_HELLO_INFO1 "You might qualify for a free level 80?"
+
+#define GOSSIP_HELLO_TP1 "Send me to the MGA Voters Area"
+#define GOSSIP_HELLO_TP2 "IMPORT DETECTED!!! - Teleport me to the voters area."
+
+#define GOSSIP_HELLO_TPNO "You have not voted in the last 12 hours on this account or your in the DK starting zone, if you wish to use me please go and vote and I will send you to a Very Very nice location."
+#define GOSSIP_HELLO_TPNO1 "You must be level 2+ to use me."
+
+#define mgainfotext1 -1705551
+#define mgainfotext2 -1705552
+/*
+#define mgainfotext2 -1705552
+#define mgainfotext3 -1705553
+#define mgainfotext4 -1705554
+#define mgainfotext5 -1705555
+#define mgainfotext6 -1705556
+
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705551','MGA has a lot of features like Faction/Race/Name Changer and we have our own currency Mini & MGA Tokens, for more infomation visit the features page @ wrath.mgawow.co.uk');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705552','MGA offers a character import service, for full info visit wrath.mgawow.co.uk and click import.');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705553','INFO THREE');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705554','INFO FOUR');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705555','INFO FIVE');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500612','-1705556','INFO SIX');
+UPDATE `script_texts` SET `content_default`='For a limited time and during promotion time ALL new accounts get one (1) free level 80, for more info on this please visit mgawow.co.uk login with your new account and make sure popup blockers are turned off. Thank you and welcome to MGA' WHERE (`npc_entry`='500612') AND (`entry`='-1705552')
+*/
+//#define mgainfotext7 -1705557
+//#define mgainfotext8 -1705558
+//#define mgainfotext9 -1705559
+
+class npc_mga_greeter : public CreatureScript
+{
+ public:
+ npc_mga_greeter() : CreatureScript("npc_mga_greeter") { }
+
+
+bool OnGossipHello(Player *player, Creature *_Creature)
+{
+ QueryResult result;
+ result = WorldDatabase.PQuery("SELECT * FROM `guild_transfer` WHERE `name1` = '%s' AND `duplicate` = '0' AND `status` = '0'", std::string(player->GetName()).c_str());
+ if(result)
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP2 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ }
+
+ //if(player->getLevel() > 1)
+ //{
+
+ time_t tseconds;
+ tseconds = time (NULL);
+ uint32 ttcheck;
+ ttcheck = (tseconds-43200); // 12 hours
+ QueryResult result2;
+ result2 = WorldDatabase.PQuery("SELECT * FROM `vote_tp` WHERE `guid`='%d' AND `time` >'%d' LIMIT 1", player->GetSession()->GetAccountId(),ttcheck);
+ //sLog->outError("SELECT * FROM `vote_tp` WHERE `guid`='%d' AND `time` >'%d' LIMIT 1", player->GetSession()->GetAccountId(),ttcheck);
+
+ if(result2)
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ }
+ else
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TPNO , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+50);
+ }
+
+ //}
+ //else
+ //{
+ // player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TPNO1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+50);
+ //}
+
+ //player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_INFO , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+100);
+ //player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_INFO1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+101);
+
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+}
+
+bool OnGossipSelect(Player* player, Creature* _Creature, uint32 /*sender*/, uint32 action)
+{
+
+ player->PlayerTalkClass->ClearMenus();
+ switch(action - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 1:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->getClass() == CLASS_DEATH_KNIGHT && player->getLevel() < 80)
+ player->SetPhaseMask(PHASEMASK_NORMAL, false);
+ player->TeleportTo(571,5817.41f,601.99f,570.55f,3.13f); // dala sewer arena (visual copy)
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+
+ // BYE BYE
+ case 50:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ }
+ break;
+
+ case 100:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ _Creature->Yell(mgainfotext1, LANG_UNIVERSAL, NULL);
+ }
+ break;
+ case 101:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ _Creature->Yell(mgainfotext2, LANG_UNIVERSAL, NULL);
+
+ }
+ break;
+
+ }
+ return true;
+
+}
+
+};
+
+void AddSC_npc_mga_greeterAI()
+{
+ new npc_mga_greeter;
+}
diff --git a/Custom/mga_rename.cpp b/Custom/mga_rename.cpp
new file mode 100644
index 0000000000000..56204407f6cdb
--- /dev/null
+++ b/Custom/mga_rename.cpp
@@ -0,0 +1,102 @@
+/* Copyright (C) 2006,2007 ScriptDev2
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500112','-1700139','You have been flagged for a rename, please exit and reload the game, thank you.');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500112','-1700140','You are not in the rename system please visit the account page on the web site to enable rename for this character.');
+INSERT IGNORE INTO `script_texts` (`npc_entry`,`entry`,`content_default`) VALUES ('500112','-1700141','You do not have a MGA Token in your bag, get one and i will rename you.');
+
+*/
+#include "ScriptPCH.h"
+
+#define nemhtext11 -1700139 // tell player to log out and back in
+#define nemhtext21 -1700140 // tell player they not entilied
+#define nemhtext31 -1700141 // no mga token
+
+#define GOSSIP_HELLO_NEMH3 "Rename Me (costs 1 MGA Token)"
+#define GOSSIP_HELLO_NEMH4 "You are not in the rename system please visit the account page on the web site to enable rename for this character."
+
+class npc_mga_char_renamer : public CreatureScript
+{
+ public:
+ npc_mga_char_renamer() : CreatureScript("npc_mga_char_renamer") { }
+
+
+bool UpdateReNameCharData(Player *player, int16 status)
+{
+ WorldDatabase.PExecute("UPDATE `char_rename` SET `status`='%d' WHERE `charid`='%d' AND `status` = '0'",status, player->GetGUID());
+ return true;
+}
+
+bool OnGossipHello(Player *player, Creature *_Creature)
+{
+ QueryResult result;
+ result = WorldDatabase.PQuery("SELECT * FROM `char_rename` WHERE `charid`='%d' AND `status`='0' LIMIT 1", player->GetGUID());
+ if(result)
+ {
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_NEMH3 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ }
+ else
+ {
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_NEMH4 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+ }
+
+
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+}
+
+bool OnGossipSelect(Player* player, Creature* _Creature, uint32 /*sender*/, uint32 action)
+{
+
+ player->PlayerTalkClass->ClearMenus();
+ switch(action - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 1:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 1))
+ {
+ UpdateReNameCharData(player, 1);
+ player->DestroyItemCount(21140, 1, true);
+ player->SetAtLoginFlag(AT_LOGIN_RENAME);
+ _Creature->Say(nemhtext11, LANG_UNIVERSAL, NULL); // tell player to log out and back in
+ return true;
+ }
+ else
+ {
+ // no mga token
+ _Creature->Say(nemhtext31, LANG_UNIVERSAL, NULL);
+ return false;
+ }
+ }
+ break;
+ case 2:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ }
+ break;
+
+ }
+ return true;
+
+}
+
+};
+
+void AddSC_npc_mga_char_renamerAI()
+{
+ new npc_mga_char_renamer;
+}
\ No newline at end of file
diff --git a/Custom/mga_temp_gobfix.cpp b/Custom/mga_temp_gobfix.cpp
new file mode 100644
index 0000000000000..54b7428365e76
--- /dev/null
+++ b/Custom/mga_temp_gobfix.cpp
@@ -0,0 +1,72 @@
+/* Copyright (C) 2006,2007 ScriptDev2
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+*/
+#include "ScriptPCH.h"
+
+#define GOSSIP_HELLO_FIX "Correct My Phase"
+
+#define GOSSIP_HELLO_BYE "Bye"
+
+class mga_temp_gobfix : public CreatureScript
+{
+ public:
+ mga_temp_gobfix() : CreatureScript("mga_temp_gobfix") { }
+
+
+bool OnGossipHello(Player *player, Creature *_Creature)
+{
+
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_FIX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_BYE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+}
+
+bool OnGossipSelect(Player* player, Creature* _Creature, uint32 /*sender*/, uint32 action)
+{
+
+ player->PlayerTalkClass->ClearMenus();
+ switch(action - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 1:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ player->SetPhaseMask(PHASEMASK_NORMAL, false);
+ player->RemoveAllAuras();
+ return false;
+ }
+ break;
+
+ // BYE BYE
+ case 2:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ }
+ break;
+
+ }
+ return true;
+
+}
+
+};
+
+void AddSC_mga_temp_gobfixAI()
+{
+ new mga_temp_gobfix;
+}
\ No newline at end of file
diff --git a/Custom/mga_temp_gobfix2.cpp b/Custom/mga_temp_gobfix2.cpp
new file mode 100644
index 0000000000000..1a94b5c2ccc9b
--- /dev/null
+++ b/Custom/mga_temp_gobfix2.cpp
@@ -0,0 +1,72 @@
+/* Copyright (C) 2006,2007 ScriptDev2
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+*/
+#include "ScriptPCH.h"
+
+#define GOSSIP_HELLO_FIX "Jump to Boat"
+
+#define GOSSIP_HELLO_BYE "Bye"
+
+class mga_temp_gobfix2 : public CreatureScript
+{
+ public:
+ mga_temp_gobfix2() : CreatureScript("mga_temp_gobfix2") { }
+
+
+bool OnGossipHello(Player *player, Creature *_Creature)
+{
+
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_FIX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_BYE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+}
+
+bool OnGossipSelect(Player* player, Creature* _Creature, uint32 /*sender*/, uint32 action)
+{
+
+ player->PlayerTalkClass->ClearMenus();
+ switch(action - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 1:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ player->TeleportTo(648, -7853.50f, 1838.10f, 7.83f, 0.03f);
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+
+ // BYE BYE
+ case 2:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ }
+ break;
+
+ }
+ return true;
+
+}
+
+};
+
+void AddSC_mga_temp_gobfix2AI()
+{
+ new mga_temp_gobfix2;
+}
\ No newline at end of file
diff --git a/Custom/mga_temp_gobfix3.cpp b/Custom/mga_temp_gobfix3.cpp
new file mode 100644
index 0000000000000..c6983fa0fa3fe
--- /dev/null
+++ b/Custom/mga_temp_gobfix3.cpp
@@ -0,0 +1,71 @@
+/* Copyright (C) 2006,2007 ScriptDev2
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+*/
+#include "ScriptPCH.h"
+
+#define GOSSIP_HELLO_FIX "Correct My Phase"
+
+#define GOSSIP_HELLO_BYE "Bye"
+
+class mga_temp_gobfix3 : public CreatureScript
+{
+ public:
+ mga_temp_gobfix3() : CreatureScript("mga_temp_gobfix3") { }
+
+
+bool OnGossipHello(Player *player, Creature *_Creature)
+{
+
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_FIX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_BYE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+}
+
+bool OnGossipSelect(Player* player, Creature* _Creature, uint32 /*sender*/, uint32 action)
+{
+
+ player->PlayerTalkClass->ClearMenus();
+ switch(action - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 1:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ player->SetPhaseMask(2, false);
+ return false;
+ }
+ break;
+
+ // BYE BYE
+ case 2:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ }
+ break;
+
+ }
+ return true;
+
+}
+
+};
+
+void AddSC_mga_temp_gobfix3AI()
+{
+ new mga_temp_gobfix3;
+}
\ No newline at end of file
diff --git a/Custom/mga_token_shop.cpp b/Custom/mga_token_shop.cpp
new file mode 100644
index 0000000000000..3efff0281a416
--- /dev/null
+++ b/Custom/mga_token_shop.cpp
@@ -0,0 +1,2066 @@
+/* Copyright (C) 2006,2007 ScriptDev2
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+MGA Token Master NPC
+NPC Will Exchange MGA Tokens at the cost of gifts
+
+*/
+
+#include "ScriptPCH.h"
+
+#define tokentext8 -1700007
+#define tokentext9 -1700008
+#define tokentext10 -1700009
+#define tokentext11 -1700010
+#define tokentext12 -1700011
+#define tokentext13 -1700012
+#define tokentext14 -1700013
+#define tokentext15 -1700014
+#define tokentext16 -1700015
+#define tokentext17 -1700016
+#define tokentext18 -1700017
+
+class npc_gm_token_shop : public CreatureScript
+{
+ public:
+ npc_gm_token_shop() : CreatureScript("npc_gm_token_shop") { }
+
+
+
+bool OnGossipHello(Player *player, Creature *_Creature)
+{
+
+ player->ADD_GOSSIP_ITEM( 1, "Level Rewards" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1000);
+ player->ADD_GOSSIP_ITEM( 1, "Gold Rewards" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1300);
+ //player->ADD_GOSSIP_ITEM( 4, "Armor Rewards" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1400);
+ player->ADD_GOSSIP_ITEM( 1, "Reputation Rewards" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1500);
+
+
+ player->PlayerTalkClass->SendGossipMenu(907, _Creature->GetGUID());
+
+ return true;
+}
+
+/*******************************************************
+ * Start of GOSSIP_MENU
+ *******************************************************/
+bool OnGossipSelect(Player* player, Creature* _Creature, uint32 /*sender*/, uint32 action)
+{
+ player->PlayerTalkClass->ClearMenus();
+ switch(action - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 1: // Main menu recall
+ {
+ player->ADD_GOSSIP_ITEM( 4, "Level Rewards" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1000);
+ player->ADD_GOSSIP_ITEM( 6, "Gold Rewards" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1300);
+ //player->ADD_GOSSIP_ITEM( 4, "Armor Rewards" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1400);
+ player->ADD_GOSSIP_ITEM( 1, "Reputation Rewards" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1500);
+
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+ }break;
+ case 2: // Bye
+ {
+ player->CLOSE_GOSSIP_MENU();
+ _Creature->Say(tokentext8, LANG_UNIVERSAL, NULL);
+ }break;
+ case 1000: // Level Rewards
+ {
+ if(player->getLevel() < 60)
+ {
+ player->ADD_GOSSIP_ITEM( 2, "2 Levels at the cost of 1 MGA Token" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1001);
+
+ }
+ if(player->getLevel() >= 60 && player->getLevel() <= 79)
+
+ {
+ player->ADD_GOSSIP_ITEM( 2, "1 Level at the cost of 1 MGA Token" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1004);
+ }
+ if(player->getLevel() >= 80)
+
+ {
+ player->ADD_GOSSIP_ITEM( 2, "You are too high level to boost yourself max is level 77" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ }
+
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+ }break;
+ case 1001: // 60, 2L for 1 Token
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 1) )
+ {
+ player->RemoveAurasByType(SPELL_AURA_MOUNTED);
+ player->GiveLevel(player->getLevel()+2);
+ player->InitTalentForLevel();
+ player->InitStatsForLevel();
+ _Creature->Say(tokentext9, LANG_UNIVERSAL, NULL);
+ player->DestroyItemCount(21140, 1, true);
+ player->SaveToDB();
+
+ }
+ else
+ {
+ _Creature->Say(tokentext10, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1004: // 70,
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 1) )
+ {
+ player->RemoveAurasByType(SPELL_AURA_MOUNTED);
+ player->GiveLevel(player->getLevel()+1);
+ player->InitTalentForLevel();
+ player->InitStatsForLevel();
+ _Creature->Say(tokentext9, LANG_UNIVERSAL, NULL);
+ player->DestroyItemCount(21140, 1, true);
+ player->SaveToDB();
+ }
+ else
+ {
+ _Creature->Say(tokentext10, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1300: // Gief Gawld Menu
+ {
+ player->ADD_GOSSIP_ITEM( 2, "500 Gold at the cost of 1 MGA Token" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1301);
+ player->ADD_GOSSIP_ITEM( 2, "1250 Gold at the cost of 2 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1302);
+ //player->ADD_GOSSIP_ITEM( 2, "2500 Gold at the cost of 4 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1303);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+ }break;
+ case 1301:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 1) )
+ {
+ player->RemoveAurasByType(SPELL_AURA_MOUNTED);
+ player->SetMoney(player->GetMoney()+5000000);
+ _Creature->Say(tokentext11, LANG_UNIVERSAL, NULL);
+ player->DestroyItemCount(21140, 1, true);
+ player->SaveToDB();
+ }
+ else
+ {
+ _Creature->Say(tokentext12, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1302:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 2) )
+ {
+ player->RemoveAurasByType(SPELL_AURA_MOUNTED);
+ player->SetMoney(player->GetMoney()+12500000);
+ _Creature->Say(tokentext13, LANG_UNIVERSAL, NULL);
+ player->DestroyItemCount(21140, 2, true);
+ player->SaveToDB();
+ }
+ else
+ {
+ _Creature->Say(tokentext12, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1303:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 4) )
+ {
+ player->RemoveAurasByType(SPELL_AURA_MOUNTED);
+ player->SetMoney(player->GetMoney()+25000000);
+ _Creature->Say(tokentext13, LANG_UNIVERSAL, NULL);
+ player->DestroyItemCount(21140, 4, true);
+
+ player->SaveToDB();
+ }
+ else
+ {
+ _Creature->Say(tokentext12, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ /*case 1400:
+ {
+ if(player->getClass() == CLASS_DRUID )
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Druid Raid Tier 4" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1401);
+ player->ADD_GOSSIP_ITEM( 3, "Druid Raid Tier 5" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1402);
+ player->ADD_GOSSIP_ITEM( 3, "Druid Raid Tier 6" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1403);
+ }
+ if(player->getClass() == CLASS_HUNTER)
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Hunter Raid Tier 4" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1443);
+ player->ADD_GOSSIP_ITEM( 3, "Hunter Raid Tier 5" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1449);
+ player->ADD_GOSSIP_ITEM( 3, "Hunter Raid Tier 6" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1455);
+ }
+ if(player->getClass() == CLASS_MAGE)
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Mage Raid Tier 4" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1443);
+ player->ADD_GOSSIP_ITEM( 3, "Mage Raid Tier 5" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1449);
+ player->ADD_GOSSIP_ITEM( 3, "Mage Raid Tier 6" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1403);
+ }
+ if(player->getClass() == CLASS_PALADIN)
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Paladin Raid Tier 4" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1464);
+ player->ADD_GOSSIP_ITEM( 3, "Paladin Raid Tier 5" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1470);
+ player->ADD_GOSSIP_ITEM( 3, "Paladin Raid Tier 6" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1476);
+ }
+ if(player->getClass() == CLASS_PRIEST)
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Priest Raid Tier 4" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1401);
+ player->ADD_GOSSIP_ITEM( 3, "Priest Raid Tier 5" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1402);
+ player->ADD_GOSSIP_ITEM( 3, "Priest Raid Tier 6" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1476);
+ }
+ if(player->getClass() == CLASS_ROGUE)
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Rogue Raid Tier 4" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1464);
+ player->ADD_GOSSIP_ITEM( 3, "Rogue Raid Tier 5" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1470);
+ player->ADD_GOSSIP_ITEM( 3, "Rogue Raid Tier 6" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1403);
+ }
+ if(player->getClass() == CLASS_SHAMAN)
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Shaman Raid Tier 4" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1464);
+ player->ADD_GOSSIP_ITEM( 3, "Shaman Raid Tier 5" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1470);
+ player->ADD_GOSSIP_ITEM( 3, "Shaman Raid Tier 6" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1455);
+ }
+ if(player->getClass() == CLASS_WARLOCK)
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Warlock Raid Tier 4" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1443);
+ player->ADD_GOSSIP_ITEM( 3, "Warlock Raid Tier 5" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1449);
+ player->ADD_GOSSIP_ITEM( 3, "Warlock Raid Tier 6" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+0000);
+ }
+ if(player->getClass() == CLASS_WARRIOR)
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Warrior Raid Tier 4" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1401);
+ player->ADD_GOSSIP_ITEM( 3, "Warrior Raid Tier 5" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1402);
+ player->ADD_GOSSIP_ITEM( 3, "Warrior Raid Tier 6" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1455);
+ }
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return;
+ }break;
+ case 1401: //druid, priest, warrior t4
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Helm of the Fallen Defender at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1404);
+ player->ADD_GOSSIP_ITEM( 3, "Chestguard of the Fallen Defender at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1405);
+ player->ADD_GOSSIP_ITEM( 3, "Pauldrons of the Fallen Defender at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1406);
+ player->ADD_GOSSIP_ITEM( 3, "Gloves of the Fallen Defender at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1407);
+ player->ADD_GOSSIP_ITEM( 3, "Leggings of the Fallen Defender at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1408);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1400);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return;
+
+ }break;
+ case 1402: // druid, priest, warrior t5
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Helm of the Vanquished Defender at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1430);
+ player->ADD_GOSSIP_ITEM( 3, "Chestguard of the Vanquished Defender at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1431);
+ player->ADD_GOSSIP_ITEM( 3, "Pauldrons of the Vanquished Defender at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1432);
+ player->ADD_GOSSIP_ITEM( 3, "Gloves of the Vanquished Defender at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1433);
+ player->ADD_GOSSIP_ITEM( 3, "Leggings of the Vanquished Defender at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1434);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1400);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return;
+
+ }break;
+ case 1403: // rogue druid mage t6
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Helm of the Forgotten Vanquisher at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1435);
+ player->ADD_GOSSIP_ITEM( 3, "Chestguard of the Forgotten Vanquisher at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1436);
+ player->ADD_GOSSIP_ITEM( 3, "Pauldrons of the Forgotten Vanquisher at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1437);
+ player->ADD_GOSSIP_ITEM( 3, "Gloves of the Forgotten Vanquisher at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1438);
+ player->ADD_GOSSIP_ITEM( 3, "Bracers of the Forgotten Vanquisher at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1439);
+ player->ADD_GOSSIP_ITEM( 3, "Belt of the Forgotten Vanquisher at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1440);
+ player->ADD_GOSSIP_ITEM( 3, "Leggings of the Forgotten Vanquisher at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1441);
+ player->ADD_GOSSIP_ITEM( 3, "Boots of the Forgotten Vanquisher at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1442);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1400);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return;
+
+ }break;
+ case 1404:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29761;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1405:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29753;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1406:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29764;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1407:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29758;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1408:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29767;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1430:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30243;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1431:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30237;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1432:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30249;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1433:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30240;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1434:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30246;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1435:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31096;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1436:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31090;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1437:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31102;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1438:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31093;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1439:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 34852;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1440:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 34855;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1441:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31099;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1442:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 34858;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1443: // hunter , mage, warlock
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Helm of the Fallen Hero at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1444);
+ player->ADD_GOSSIP_ITEM( 3, "Chestguard of the Fallen Hero at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1445);
+ player->ADD_GOSSIP_ITEM( 3, "Pauldrons of the Fallen Hero at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1446);
+ player->ADD_GOSSIP_ITEM( 3, "Gloves of the Fallen Hero at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1447);
+ player->ADD_GOSSIP_ITEM( 3, "Leggings of the Fallen Hero at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1448);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1400);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return;
+
+ }break;
+ case 1444:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29759;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1445:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29755;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1446:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29762;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1447:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29756;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1448:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29765;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1449: // hunter , mage, warlock
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Helm of the Vanquished Hero at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1450);
+ player->ADD_GOSSIP_ITEM( 3, "Chestguard of the Vanquished Hero at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1451);
+ player->ADD_GOSSIP_ITEM( 3, "Pauldrons of the Vanquished Hero at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1452);
+ player->ADD_GOSSIP_ITEM( 3, "Gloves of the Vanquished Hero at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1453);
+ player->ADD_GOSSIP_ITEM( 3, "Leggings of the Vanquished Hero at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1454);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1400);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return;
+
+ }break;
+ case 1450:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30244;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1451:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30238;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1452:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30250;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1453:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30241;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1454:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30247;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1455: // hunter warriror shaman
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Helm of the Forgotten Protector at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1456);
+ player->ADD_GOSSIP_ITEM( 3, "Chestguard of the Forgotten Protector at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1457);
+ player->ADD_GOSSIP_ITEM( 3, "Pauldrons of the Forgotten Protector at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1458);
+ player->ADD_GOSSIP_ITEM( 3, "Gloves of the Forgotten Protector at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1459);
+ player->ADD_GOSSIP_ITEM( 3, "Bracers of the Forgotten Protector at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1460);
+ player->ADD_GOSSIP_ITEM( 3, "Belt of the Forgotten Protector at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1461);
+ player->ADD_GOSSIP_ITEM( 3, "Leggings of the Forgotten Protector at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1462);
+ player->ADD_GOSSIP_ITEM( 3, "Boots of the Forgotten Protector at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1463);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1400);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return;
+
+ }break;
+ case 1456:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31095;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1457:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31091;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1458:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31103;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1459:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31094;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1460:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 34851;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1461:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 34854;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1462:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31100;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1463:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 34857;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1464: //pally rogue shaman t4
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Helm of the Fallen Champion at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1465);
+ player->ADD_GOSSIP_ITEM( 3, "Chestguard of the Fallen Champion at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1466);
+ player->ADD_GOSSIP_ITEM( 3, "Pauldrons of the Fallen Champion at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1467);
+ player->ADD_GOSSIP_ITEM( 3, "Gloves of the Fallen Champion at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1468);
+ player->ADD_GOSSIP_ITEM( 3, "Leggings of the Fallen Champion at the cost of 15 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1469);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1400);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return;
+
+ }break;
+ case 1465:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29760;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1466:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29754;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1467:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29763;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1468:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29757;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1469:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 15) )
+ {
+ uint32 itemId = 29766;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 15, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T4 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1470: //pally rogue shaman t5
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Helm of the Vanquished Champion at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1471);
+ player->ADD_GOSSIP_ITEM( 3, "Chestguard of the Vanquished Champion at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1472);
+ player->ADD_GOSSIP_ITEM( 3, "Pauldrons of the Vanquished Champion at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1473);
+ player->ADD_GOSSIP_ITEM( 3, "Gloves of the Vanquished Champion at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1474);
+ player->ADD_GOSSIP_ITEM( 3, "Leggings of the Vanquished Champion at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1475);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1400);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return;
+
+ }break;
+ case 1471:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30242;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1472:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30236;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1473:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30248;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1474:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30239;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1475:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 30245;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T5 or Merciless Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1476:
+ {
+ player->ADD_GOSSIP_ITEM( 3, "Helm of the Forgotten Conqueror at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1477);
+ player->ADD_GOSSIP_ITEM( 3, "Chestguard of the Forgotten Conqueror at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1478);
+ player->ADD_GOSSIP_ITEM( 3, "Pauldrons of the Forgotten Conqueror at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1479);
+ player->ADD_GOSSIP_ITEM( 3, "Gloves of the Forgotten Conqueror at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1480);
+ player->ADD_GOSSIP_ITEM( 3, "Bracers of the Forgotten Conqueror at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1481);
+ player->ADD_GOSSIP_ITEM( 3, "Belt of the Forgotten Conqueror at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1482);
+ player->ADD_GOSSIP_ITEM( 3, "Leggings of the Forgotten Conqueror at the cost of 25 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1483);
+ player->ADD_GOSSIP_ITEM( 3, "Boots of the Forgotten Conqueror at the cost of 20 MGA Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1484);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return;
+
+ }break;
+ case 1477:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31097;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1478:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31089;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1479:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31101;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1480:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31092;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1481:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 34848;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1482:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 34853;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1483:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 25) )
+ {
+ uint32 itemId = 31098;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 25, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1484:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 20) )
+ {
+ uint32 itemId = 34856;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 20, true);
+ _Creature->Say("Feel free to trade this token in at your local store for a piece of T6 or Gladiator gear.", LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;*/
+ case 1500:
+ {
+ player->ADD_GOSSIP_ITEM( 1, "Aldor Reputation Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1501);
+ player->ADD_GOSSIP_ITEM( 1, "Scryers Reputation Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1502);
+ player->ADD_GOSSIP_ITEM( 1, "Honor Hold Reputation Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1550);
+ player->ADD_GOSSIP_ITEM( 1, "Thrallmar Reputation Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1551);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+ }break;
+ case 1501: // aldor
+ {
+ player->ADD_GOSSIP_ITEM( 1, "1 Mark of Sargeras at the cost of 1 Mini Token" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1510);
+ player->ADD_GOSSIP_ITEM( 1, "10 Marks of Sargeras at the cost of 10 Mini Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1511);
+ player->ADD_GOSSIP_ITEM( 1, "1 Fel Armament at the cost of 4 Mini Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1512);
+ player->ADD_GOSSIP_ITEM( 1, "10 Fel Armament at the cost of 40 Mini Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1513);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1500);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+ }break;
+ case 1502: // scryers
+ {
+ player->ADD_GOSSIP_ITEM( 1, "1 Sunfury Signet at the cost of 1 Mini Token" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1514);
+ player->ADD_GOSSIP_ITEM( 1, "10 Sunfury Signets at the cost of 10 Mini Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1515);
+ player->ADD_GOSSIP_ITEM( 1, "1 Arcane Tome at the cost of 4 Mini Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1516);
+ player->ADD_GOSSIP_ITEM( 1, "10 Arcane Tomes at the cost of 40 Mini Tokens" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1517);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1500);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+ return true;
+ }break;
+ case 1510:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(18154, 1) )
+ {
+ uint32 itemId = 30809;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1);
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(18154, 1, true);
+ _Creature->Say(tokentext14, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL, itemId );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1511:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(18154, 10) )
+ {
+ uint32 itemId = 30809;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 10, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(18154, 10, true);
+ _Creature->Say(tokentext14, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1512:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(18154, 4) )
+ {
+ uint32 itemId = 29740;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(18154, 4, true);
+ _Creature->Say(tokentext14, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1513:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(18154, 40) )
+ {
+ uint32 itemId = 29740;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 10, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(18154, 40, true);
+ _Creature->Say(tokentext14, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1514:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(18154, 1) )
+ {
+ uint32 itemId = 30810;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(18154, 1, true);
+ _Creature->Say(tokentext16, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1515:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(18154, 10) )
+ {
+ uint32 itemId = 30810;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 10, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(18154, 10, true);
+ _Creature->Say(tokentext16, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1516:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(18154, 4) )
+ {
+ uint32 itemId = 29739;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(18154, 4, true);
+ _Creature->Say(tokentext16, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1517:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(18154, 40) )
+ {
+ uint32 itemId = 29739;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 10, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(18154, 40, true);
+ _Creature->Say(tokentext16, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1550:
+ {
+ player->ADD_GOSSIP_ITEM( 1, "5 Marks of Honor Hold at the cost of 1 MGA Token" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1552);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1500);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+ }break;
+ case 1551:
+ {
+ player->ADD_GOSSIP_ITEM( 1, "5 Marks of Thrallmar at the cost of 1 MGA Token" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1553);
+ player->ADD_GOSSIP_ITEM( 1, "[Back]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1500);
+ player->ADD_GOSSIP_ITEM( 1, "[Main Menu]" , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+ }break;
+ case 1552:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 1) )
+ {
+ uint32 itemId = 24579;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 5, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 1, true);
+ _Creature->Say(tokentext17, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+ case 1553:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ if (player->HasItemCount(21140, 1) )
+ {
+ uint32 itemId = 24581;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 5, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->DestroyItemCount(21140, 1, true);
+ _Creature->Say(tokentext18, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext15, LANG_UNIVERSAL, NULL);
+ }
+ }break;
+
+
+}
+return true;
+}
+
+/*******************************************************
+ * End of GOSSIP_MENU
+ *******************************************************/
+/*
+bool GossipSelect_npc_gm_token_shop(Player *player, Creature *_Creature, uint32
+
+sender, uint32 action )
+
+{
+// Main menu
+if (sender == GOSSIP_SENDER_MAIN)
+SendDefaultMenu_npc_gm_token_shop(player, _Creature, action );
+
+return true;
+
+}
+*/
+};
+
+void AddSC_npc_gm_token_shopAI()
+{
+new npc_gm_token_shop;
+}
\ No newline at end of file
diff --git a/Custom/mga_token_swap.cpp b/Custom/mga_token_swap.cpp
new file mode 100644
index 0000000000000..269982c5544a3
--- /dev/null
+++ b/Custom/mga_token_swap.cpp
@@ -0,0 +1,351 @@
+/* Copyright (C) 2006,2007 ScriptDev2
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+mga_night_elf_mohawk AI
+NPC Will give mohawk grande 43489
+
+
+*/
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "ScriptedGossip.h"
+#include "GameEventMgr.h"
+#include "Player.h"
+#include "WorldSession.h"
+
+#define tokentext1 -1700000
+#define tokentext2 -1700001
+#define tokentext3 -1700002
+#define tokentext4 -1700003
+#define tokentext5 -1700004
+#define tokentext6 -1700005
+#define tokentext7 -1700006
+
+#define GOSSIP_HELLO_TSWAP1 "Create 1 MGA Token (Requies 50 Mini Tokens)"
+#define GOSSIP_HELLO_TSWAP2 "Exchange 3 WSG Marks for 50 Honor"
+#define GOSSIP_HELLO_TSWAP3 "Exchange 2 AB Marks for 50 Honor"
+#define GOSSIP_HELLO_TSWAP4 "Exchange 1 AV Mark for 50 Honor"
+#define GOSSIP_HELLO_TSWAP5 "Exchange 1 EOTS Mark for 50 Honor"
+#define GOSSIP_HELLO_TSWAP11 "Exchange 10 WG Mark for 50 Honor"
+#define GOSSIP_HELLO_TSWAP6 "1 MGA Super VIP Emblem at the cost of 100 Emblem of MGA"
+#define GOSSIP_HELLO_TSWAP7 "Obtain 10 Sunmotes at the cost of 1 Badge of Justice"
+#define GOSSIP_HELLO_TSWAP8 "How do I earn Mini Tokens?"
+#define GOSSIP_HELLO_TSWAP10 "Exchange 5K honor for 1 Mini Token"
+#define GOSSIP_HELLO_TSWAP12 "Exchange 75K honor for 100 Arena Points."
+#define GOSSIP_HELLO_TSWAP9 "Goodbye !"
+#define GOSSIP_HELLO_NOTVIP "I Can only make MGA Super VIP Emblem's for VIPs!"
+
+class npc_gm_token_swap : public CreatureScript
+{
+ public:
+ npc_gm_token_swap() : CreatureScript("npc_gm_token_swap") { }
+
+bool OnGossipHello(Player *player, Creature *_Creature)
+{
+
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
+
+
+
+ QueryResult result2;
+ result2 = WorldDatabase.PQuery("SELECT * FROM `VIP` WHERE `acct_id`='%d' LIMIT 1", player->GetSession()->GetAccountId());
+ if(result2)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP6 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
+ else
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_NOTVIP , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+9);
+
+
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP7 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6);
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP8 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP10 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+10);
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP11 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+11);
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP12 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+12);
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_TSWAP9 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+9);
+
+
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+}
+
+bool OnGossipSelect(Player* player, Creature* _Creature, uint32 /*sender*/, uint32 action)
+{
+ player->PlayerTalkClass->ClearMenus();
+ switch(action - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 1: // Give item if dont alrdy have it
+ CloseGossipMenuFor(player);
+ if (player->HasItemCount(18154, 50) )
+ {
+ uint32 itemId = 21140;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->SendNewItem(item, 1, true, false);
+ player->DestroyItemCount(18154, 50, true);
+ _Creature->Say(tokentext1, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext2, LANG_UNIVERSAL, NULL);
+ }
+ break;
+ case 2: // close and cast spell on player and insuly
+ CloseGossipMenuFor(player);
+ if (player->HasItemCount(20558, 3) )
+ {
+ player->DestroyItemCount(20558, 3, true);
+ player->AddHonorPoints(50);
+
+ /*uint32 itemId = 18154;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->SendNewItem(item, 1, true, false);
+ player->DestroyItemCount(20558, 3, true);
+ _Creature->Say(tokentext3, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }*/
+ }
+ else
+ {
+ _Creature->Yell(tokentext2, LANG_UNIVERSAL, NULL);
+ }
+ break;
+ case 3:
+ CloseGossipMenuFor(player);
+ if (player->HasItemCount(20559, 2) )
+ {
+ player->DestroyItemCount(20559, 2, true);
+ player->AddHonorPoints(50);
+ /*uint32 itemId = 18154;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->SendNewItem(item, 1, true, false);
+ player->DestroyItemCount(20559, 2, true);
+ _Creature->Say(tokentext3, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }*/
+ }
+ else
+ {
+ _Creature->Yell(tokentext2, LANG_UNIVERSAL, NULL);
+ }
+ break;
+ case 4:
+ CloseGossipMenuFor(player);
+ if (player->HasItemCount(37711, 100) )
+ {
+ uint32 itemId = 22484;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->SendNewItem(item, 1, true, false);
+ player->DestroyItemCount(37711, 100, true);
+ //player->CastSpell(player, 74996, true); // Grow 30%
+ //player->CastSpell(player, 74996, true); // Grow Stack 2 60%
+ //player->CastSpell(player, 50247, true); // Path of Illidan
+ //_Creature->Say(tokentext4, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext2, LANG_UNIVERSAL, NULL);
+ }
+ break;
+ case 5:
+ CloseGossipMenuFor(player);
+ _Creature->Say(tokentext5, LANG_UNIVERSAL, NULL);
+ break;
+ case 6:
+ CloseGossipMenuFor(player);
+ if (player->HasItemCount(29434, 1) )
+ {
+ uint32 itemId = 34664;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 10, true);
+ player->SendNewItem(item, 10, true, false);
+ player->DestroyItemCount(29434, 1, true);
+ _Creature->Say(tokentext6, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }
+ }
+ else
+ {
+ _Creature->Yell(tokentext2, LANG_UNIVERSAL, NULL);
+ }
+ break;
+ case 7:
+ CloseGossipMenuFor(player);
+ if (player->HasItemCount(20560, 1) )
+ {
+ player->DestroyItemCount(20560, 1, true);
+ player->AddHonorPoints(50);
+ /*uint32 itemId = 18154;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->SendNewItem(item, 1, true, false);
+ player->DestroyItemCount(20560, 1, true);
+ _Creature->Say(tokentext3, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }*/
+ }
+ else
+ {
+ _Creature->Yell(tokentext2, LANG_UNIVERSAL, NULL);
+ }
+ break;
+ case 8:
+ CloseGossipMenuFor(player);
+ if (player->HasItemCount(29024, 1) )
+ {
+ player->DestroyItemCount(29024, 1, true);
+ player->AddHonorPoints(50);
+ /*uint32 itemId = 18154;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->SendNewItem(item, 1, true, false);
+ player->DestroyItemCount(29024, 1, true);
+ _Creature->Say(tokentext1, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }*/
+ }
+ else
+ {
+ _Creature->Yell(tokentext2, LANG_UNIVERSAL, NULL);
+ }
+ break;
+ case 9:
+ CloseGossipMenuFor(player);
+ _Creature->Yell(tokentext7, LANG_UNIVERSAL, NULL);
+ break;
+ case 10:
+ CloseGossipMenuFor(player);
+ if (player->GetHonorPoints() > 4999)
+ {
+ uint32 itemId = 18154;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->SendNewItem(item, 1, true, false);
+ player->AddHonorPoints(-5000);
+ }
+ }
+ break;
+ case 11:
+ CloseGossipMenuFor(player);
+ if (player->HasItemCount(43589, 10) )
+ {
+ player->DestroyItemCount(43589, 10, true);
+ player->AddHonorPoints(50);
+ /*uint32 itemId = 18154;
+ ItemPosCountVec dest;
+
+ uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, 1, false );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = player->StoreNewItem( dest, itemId, 1, true);
+ player->SendNewItem(item, 1, true, false);
+ player->DestroyItemCount(29024, 1, true);
+ _Creature->Say(tokentext1, LANG_UNIVERSAL, NULL);
+ }
+ else
+ {
+ player->SendEquipError( msg, NULL, NULL );
+ }*/
+ }
+ else
+ {
+ _Creature->Yell(tokentext2, LANG_UNIVERSAL, NULL);
+ }
+ break;
+ case 12:
+ CloseGossipMenuFor(player);
+ if (player->GetHonorPoints() > 74999 )
+ {
+ player->AddHonorPoints(-75000);
+ }
+ else
+ {
+ _Creature->Yell(tokentext2, LANG_UNIVERSAL, NULL);
+ }
+ break;
+ }
+ return true;
+
+}
+
+};
+
+void AddSC_npc_gm_token_swapAI()
+{
+ new npc_gm_token_swap;
+}
diff --git a/Custom/mga_vote_teleporter.cpp b/Custom/mga_vote_teleporter.cpp
new file mode 100644
index 0000000000000..14ac09f7c3a8c
--- /dev/null
+++ b/Custom/mga_vote_teleporter.cpp
@@ -0,0 +1,504 @@
+/* Copyright (C) 2006,2007 ScriptDev2
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+*/
+#include "ScriptPCH.h"
+
+#define nemhtext11 -1700239 // tell player to log out and back in
+#define nemhtext21 -1700240 // tell player they not entilied
+#define nemhtext31 -1700241 // no mga token
+
+#define GOSSIP_HELLO_TP1 "Location 1"
+#define GOSSIP_HELLO_TP2 "Location 2"
+#define GOSSIP_HELLO_TP3 "Location 3"
+#define GOSSIP_HELLO_TP4 "Location 4"
+#define GOSSIP_HELLO_TP5 "Location 5"
+#define GOSSIP_HELLO_TP6 "Location 6"
+#define GOSSIP_HELLO_TP7 "Location 7"
+#define GOSSIP_HELLO_TP8 "Location 8"
+#define GOSSIP_HELLO_TP9 "Location 9"
+#define GOSSIP_HELLO_TP10 "Location 10"
+
+//HORDE
+#define GOSSIP_HELLO_HTP1 "Orgrimmar"
+#define GOSSIP_HELLO_HTP2 "Undercity"
+#define GOSSIP_HELLO_HTP3 "Thunder Bluff"
+#define GOSSIP_HELLO_HTP4 "Silvermoon"
+// START LOCS
+#define GOSSIP_HELLO_HSTP1 "Orc Starting Zone"
+#define GOSSIP_HELLO_HSTP2 "Undead Starting Zone"
+#define GOSSIP_HELLO_HSTP3 "Tauren Starting Zone"
+#define GOSSIP_HELLO_HSTP4 "Blood Elf Starting Zone"
+#define GOSSIP_HELLO_HSTP5 "Goblin Starting Zone"
+#define GOSSIP_HELLO_HSTP6 "Worgen Elf Starting Zone"
+#define GOSSIP_HELLO_HSTP7 "Trol Starting Zone"
+
+// ALLY
+#define GOSSIP_HELLO_ATP1 "Stormwind"
+#define GOSSIP_HELLO_ATP2 "Ironforge"
+#define GOSSIP_HELLO_ATP3 "Darnassus"
+#define GOSSIP_HELLO_ATP4 "Exodar"
+// START LOCS
+#define GOSSIP_HELLO_ASTP1 "Human Starting Zone"
+#define GOSSIP_HELLO_ASTP2 "Gnome Starting Zone"
+#define GOSSIP_HELLO_ASTP3 "Night Elf Starting Zone"
+#define GOSSIP_HELLO_ASTP4 "Draenei Starting Zone"
+#define GOSSIP_HELLO_ASTP5 "Dwarf Starting Zone"
+
+#define GOSSIP_HELLO_L1 "Shattrath City"
+#define GOSSIP_HELLO_L2 "City of Dalaran"
+#define GOSSIP_HELLO_L3 "Stairway to Heaven"
+
+#define GOSSIP_HELLO_TPNO "You have not voted in the last 12 hours, if you wish to use me please go and vote"
+#define GOSSIP_HELLO_TPN01 "You used me within the last 5 mins please wait a little longer."
+
+class npc_mga_vote_teleporter : public CreatureScript
+{
+ public:
+ npc_mga_vote_teleporter() : CreatureScript("npc_mga_vote_teleporter") { }
+
+bool UpdateVoteTPData(Player *player, uint32 newwtime)
+{
+ WorldDatabase.PExecute("UPDATE `vote_tp` SET `tptime`='%d' WHERE `guid`='%d'",newwtime, player->GetSession()->GetAccountId());
+ return true;
+}
+
+
+bool OnGossipHello(Player *player, Creature *_Creature)
+{
+ time_t tseconds;
+ tseconds = time (NULL);
+ uint32 ttcheck;
+ uint32 fiveminabusecheck;
+ uint32 lasttptime;
+ ttcheck = (tseconds-43200); // 12 hours
+ fiveminabusecheck = (tseconds-300); // 5mins
+ QueryResult result;
+ result = WorldDatabase.PQuery("SELECT * FROM `vote_tp` WHERE `guid`='%d' AND `time` >'%d' LIMIT 1", player->GetSession()->GetAccountId(),ttcheck);
+ //sLog->outError("SELECT * FROM `vote_tp` WHERE `guid`='%d' AND `time` >'%d' LIMIT 1", player->GetSession()->GetAccountId(),ttcheck);
+
+ if(result)
+ {
+
+ Field *fields = result->Fetch();
+
+ lasttptime = fields[2].GetUInt32();
+ if (lasttptime < 1)
+ lasttptime=(tseconds-305); // current time - 5 mins was no entry in DB
+
+ if (fiveminabusecheck < lasttptime)
+ {
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TPN01 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+50);
+ //sLog->outError("MGA: FAILED:: time from db = %d time we checking = %d", lasttptime,fiveminabusecheck);
+ }
+ else
+ {
+ //sLog->outError("MGA: WORKED:: time from db = %d time we checking = %d", lasttptime,fiveminabusecheck);
+ if (player->GetTeamId() == TEAM_HORDE)
+ {
+ // HORDE LOCATIONS
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_HTP1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+11);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_HTP2 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+12);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_HTP3 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+13);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_HTP4 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+14);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_HSTP1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+22); // orc starting zone
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_HSTP2 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+23); // undead start zone
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_HSTP3 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+24); // tauren start zone
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_HSTP4 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+25); // bloodelf start zone
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_HSTP5 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+125); // goblin start zone
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_HSTP6 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+126); // worgen start zone
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_HSTP7 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+31); // troll starting zone
+ }
+ else
+ {
+ // ALLY LOCATIONS
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_ATP1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+16);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_ATP2 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+17);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_ATP3 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+18);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_ATP4 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+19);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_ASTP1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+26); // human start zone
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_ASTP2 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+27); // gnome start zone
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_ASTP3 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+28); // night elf start zone
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_ASTP4 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+29); // draenei start zone
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_ASTP5 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+30); // dwarf start zone
+ }
+
+ if(player->getLevel() > 57)
+ {
+ // SHAT CITY
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_L1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+20);
+ }
+ if(player->getLevel() > 67)
+ {
+ // DALARAN
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_L2 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+21);
+ }
+ //player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_L3 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+30);
+ /*
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP1 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP2 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP3 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP4 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP5 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP6 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP7 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+7);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP8 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+8);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP9 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+9);
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TP10 , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+10);
+ */
+ }
+
+ }
+ else
+ {
+ player->ADD_GOSSIP_ITEM( GOSSIP_ICON_CHAT, GOSSIP_HELLO_TPNO , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+50);
+ }
+ player->PlayerTalkClass->SendGossipMenu(907,_Creature->GetGUID());
+
+ return true;
+}
+
+bool OnGossipSelect(Player* player, Creature* _Creature, uint32 /*sender*/, uint32 action)
+{
+
+ time_t ttseconds;
+ ttseconds = time (NULL);
+
+ player->PlayerTalkClass->ClearMenus();
+ switch(action - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 1:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(578, 987.53f, 1065.11f, 359.98f, 0); // NOT CALLED YET
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 2:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(578, 987.53f, 1065.11f, 359.98f, 0); // NOT CALLED YET
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 3:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(578, 987.53f, 1065.11f, 359.98f, 0); // NOT CALLED YET
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 4:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(578, 987.53f, 1065.11f, 359.98f, 0); // NOT CALLED YET
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 5:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(578, 987.53f, 1065.11f, 359.98f, 0); // NOT CALLED YET
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 6:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(578, 987.53f, 1065.11f, 359.98f, 0); // NOT CALLED YET
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 7:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(578, 987.53f, 1065.11f, 359.98f, 0); // NOT CALLED YET
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 8:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(578, 987.53f, 1065.11f, 359.98f, 0); // NOT CALLED YET
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 9:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(578, 987.53f, 1065.11f, 359.98f, 0); // NOT CALLED YET
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 10:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(578, 987.53f, 1065.11f, 359.98f, 0); // NOT CALLED YET
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+
+ case 11:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // Orgrimmar
+ player->TeleportTo(1, 1632.38f, -4440.45f, 15.71f, 2.77f); // Orgrimmar
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 12:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(0, 1630.80f, 240.08f, -43.10f, 3.09f); // Undercity
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 13:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(1, -1210.98f, 40.00f, 132.13f, 2.43f); // Thunder Bluff
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 14:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // Orgrimmar
+ player->TeleportTo(530, 9532.57f, -7239.16f, 16.40f, 4.82f); // Silvermoon
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 16:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(0, -8867.23f, 673.80f, 97.90f, 5.20f); // stormwind
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 17:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(0, -4850.82f, -868.45f, 501.91f, 4.94f); // ironforge
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 18:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(1, 9951.97f, 2280.06f, 1341.39f, 1.60f); // darnassus
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 19:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(530, -3962.08f, -11657.74f, -138.81f, -138.81f); // exodar
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 20:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(530, -1838.16f, 5301.79f, -12.42f, 0); // shat city
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 21:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(571, 5804.14f, 624.77f, 647.76f, 0); // dalaran
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 22:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(1, -603.57f, -4198.80f, 41.09f, 4.74f); // orc start
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 23:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(0, 1663.47f, 1662.78f, 141.85f, 6.10f); // undead start
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 24:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(1, -2883.02f, -229.16f, 55.16f, 4.05f); // tauren start
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 25:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(530, 10348.84f, -6375.89f, 36.92f, 1.80f); // belf start
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 26:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(0, -8911.54f, -141.84f, 82.21f, 2.07f); // human start
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 27:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(0, -4981.92f, 873.20f, 244.30f, 4.59f); // gnome start
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 28:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(1, 10317.47f, 821.03f, 1326.37f, 0.74f); // nelf start
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 29:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(530, -3962.26f, -13930.66f, 100.56f, 2.09f); // draenei start
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 30:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(0,-6230.41f,330.22f,383.10f,6.17f); // Drawf
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 31:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ // LOCATION NAME
+ player->TeleportTo(1,-1169.98f,-5258.24f,0.59f,1.37f); // Troll
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+
+ // BYE BYE
+ case 50:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ }
+ break;
+
+ case 125:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(648, -8242.04f, 1361.12f, 104.67f, 1.80f); // gob start zone
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ case 126:
+ {
+ player->CLOSE_GOSSIP_MENU();
+ UpdateVoteTPData(player, ttseconds);
+ player->TeleportTo(638, -1436.46f, 1419.81f, 35.55f, 1.80f); // worg start
+ player->SetPvP(false);
+ return false;
+ }
+ break;
+ }
+ return true;
+
+}
+
+};
+
+void AddSC_npc_mga_vote_teleporterAI()
+{
+ new npc_mga_vote_teleporter;
+}
\ No newline at end of file
diff --git a/MGA Game Object IDs.txt b/MGA Game Object IDs.txt
new file mode 100644
index 0000000000000..cd77ec6ba8fc4
--- /dev/null
+++ b/MGA Game Object IDs.txt
@@ -0,0 +1,41 @@
+
+878787 MGA House
+878788 MGA Church (not working)
+878789 MGA Stables
+878790 MGA Burned House
+878791 MGA Tank
+878792 MGA Bridge-Long
+878793 MGA Fence
+878794 MGA Stables
+878795 MGA Fence
+878796 MGA Alliance Airship
+878799 MGA Gunship Stairs
+878800 MGA Mini Stairs
+878801 MGAWoW Marker
+878802 MGA Wall
+878803 MGA Fortress Wall
+878804 MGA Rock Pile
+878805 MGA Great Frozen Hall (lich kings thrown)
+878806 MGA Portal Off
+878807 MGA Hologram Floorpiece
+878808 MGA Floor 1
+878809 MGA Floor Glyph
+878810 MGA PORTAL NOT LINKED!
+878811 MGA Docks
+878812 MGA Broken Blimp
+878813 MGA Tuskar house no roof
+878814 MGA Tuskar hut with root
+878815 MGA Alliance watch tower broken
+878816 MGA Grizzly Hills INN
+878817 MGA Westfal Small house
+878818 MGA Alliance Wall
+878819 MGA Alliance Side Wall(Pillar)
+878820 MGA Small house
+878821 MGA Stables 2
+878822 MGA LumberMill
+878823 MGA Farm House
+878824 MGA Farm House (old)
+878825 MGA LumberMill (old)
+878826 MGA Stables Old
+878827 MGA Tower (needs testing)
+999001 MGA Church
\ No newline at end of file
diff --git a/README.md b/README.md
index 0bebaba9e9fbe..4f5bae694eb88 100644
--- a/README.md
+++ b/README.md
@@ -1,85 +1 @@
-#  TrinityCore (3.3.5)
-
---------------
-
-
-* [Build Status](#build-status)
-* [Introduction](#introduction)
-* [Requirements](#requirements)
-* [Install](#install)
-* [Reporting issues](#reporting-issues)
-* [Submitting fixes](#submitting-fixes)
-* [Copyright](#copyright)
-* [Authors & Contributors](#authors--contributors)
-* [Links](#links)
-
-
-
-## Build Status
-
-[](https://github.com/trickerer/NPCBots-cron/actions/workflows/automerge.yml)
-
-3.3.5
-:------------:
-[](https://github.com/trickerer/TrinityCore-3.3.5-with-NPCBots/actions/workflows/gcc-build.yml)
-[](https://ci.appveyor.com/project/trickerer/trinitycore-3-3-5-with-npcbots/branch/npcbots_3.3.5)
-
-## Introduction
-
-TrinityCore is a *MMORPG* Framework based mostly in C++.
-
-It is derived from *MaNGOS*, the *Massive Network Game Object Server*, and is
-based on the code of that project with extensive changes over time to optimize,
-improve and cleanup the codebase at the same time as improving the in-game
-mechanics and functionality.
-
-[NPCBots](https://github.com/trickerer/Trinity-Bots) is TrinityCore mod.
-
-It is completely open source; community involvement is highly encouraged.
-
-## Requirements
-
-
-Software requirements are available in the [wiki](https://trinitycore.info/en/install/requirements) for
-Windows, Linux and macOS.
-
-
-## Install
-
-Detailed TrinityCore installation guides are available in the [wiki](https://trinitycore.info/en/home) for
-Windows, Linux and macOS.
-NPCBots installation guide is available in the [NPCBots Readme](https://github.com/trickerer/Trinity-Bots#npcbot-mod-installation).
-
-
-## Reporting issues
-
-NPCBots issues can be reported via the [Github issue tracker](https://github.com/trickerer/Trinity-Bots/issues/).
-
-Please take the time to review existing issues before submitting your own to
-prevent duplicates.
-
-
-## Submitting fixes
-
-C++ fixes are submitted as [pull requests](https://github.com/trickerer/TrinityCore-3.3.5-with-NPCBots/pulls).
-
-
-## Copyright
-
-License: GPL 2.0
-
-Read file [COPYING](COPYING).
-
-
-## Authors & Contributors
-
-Read file [AUTHORS](AUTHORS).
-
-
-## Links
-
-* [NPCBots Readme](https://github.com/trickerer/Trinity-Bots/)
-* [TrinityCore Website](https://www.trinitycore.org)
-* [TrinityCore Wiki](https://www.trinitycore.info)
-* [TrinityCore Forums](https://talk.trinitycore.org/)
-* [TrinityCore Discord](https://discord.trinitycore.org/)
+Biglads Core
diff --git a/TODO/TriniChat/IRCClient.cpp b/TODO/TriniChat/IRCClient.cpp
new file mode 100644
index 0000000000000..1c833009ebb39
--- /dev/null
+++ b/TODO/TriniChat/IRCClient.cpp
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * Copyright (C) 2012 - 2012 UNCore
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+//#include "gamePCH.h"
+#include "IRCClient.h"
+#include "../game/World/World.h"
+#include "../Globals/ObjectMgr.h"
+#include "../game/Maps/MapManager.h"
+
+#include "../../../../dep/acelite/ace/Singleton.h"
+//INSTANTIATE_SINGLETON_1( IRCClient );
+
+#ifdef WIN32
+ #define Delay(x) Sleep(x)
+#else
+ #define Delay(x) sleep(x / 1000)
+#endif
+// IRCClient Constructor
+IRCClient::IRCClient()
+{
+ for(int i = 0;i > 5;i++)
+ sIRC.Script_Lock[i] = false;
+}
+// IRCClient Destructor
+IRCClient::~IRCClient(){}
+
+// ZThread Entry This function is called when the thread is created in Master.cpp (trinitycore)
+void IRCClient::run()
+{
+ sIRC.iLog.WriteLog(" %s : ****** ArkCORE With UNC-Chat Has Been Started ******", sIRC.iLog.GetLogDateTimeStr().c_str());
+
+ // before we begin we wait a few
+ // mangos is still starting up.
+ ACE_Based::Thread::Sleep(500);
+ sLog->outString("\n%s\n%s\n%s\n%s",
+ "***************************************",
+ "** UNC-Chat Threaded IRC Client **",
+ "** With Enhanced GM Control. **",
+ "***************************************");
+ sLog->outString("****** UNC-Chat: %s ********", sIRC._Mver.c_str());
+ int cCount = 1;
+ // Clean Up MySQL Tables
+ sLog->outString("*** UNC-Chat: Cleaning Up Inchan Table*");
+ WorldDatabase.PExecute("DELETE FROM `IRC_Inchan`");
+ sIRC._Max_Script_Inst = 0;
+ // Create a loop to keep the thread running untill active is set to false
+ while(sIRC.Active && !World::IsStopped())
+ {
+ // Initialize socket library
+ if(this->InitSock())
+ {
+ // Connect To The IRC Server
+ sLog->outString("*** UNC-Chat: Connecting to %s Try # %d ******", sIRC._Host.c_str(), cCount);
+ if(this->Connect(sIRC._Host.c_str(), sIRC._Port))
+ {
+ // On connection success reset the connection counter
+ cCount = 0;
+ sLog->outString("*** UNC-Chat: Connected And Logging In*");
+ // Login to the IRC server
+ if(this->Login(sIRC._Nick, sIRC._User, sIRC._Pass))
+ {
+ sLog->outString("*** UNC-Chat: Logged In And Running!! *");
+ // While we are connected to the irc server keep listening for data on the socket
+ while(sIRC.Connected && !World::IsStopped()){ sIRC.SockRecv(); }
+ }
+ sLog->outString("*** UNC-Chat: Connection To IRC Server Lost! ***");
+ }
+ // When an error occures or connection lost cleanup
+ Disconnect();
+ // Increase the connection counter
+ cCount++;
+ // if MAX_CONNECT_ATTEMPT is reached stop trying
+ if(sIRC._MCA != 0 && cCount == sIRC._MCA)
+ sIRC.Active = false;
+ // If we need to reattempt a connection wait WAIT_CONNECT_TIME milli seconds before we try again
+ if(sIRC.Active)
+ ACE_Based::Thread::Sleep(sIRC._wct);
+ }
+ else
+ {
+ // Socket could not initialize cancel
+ sIRC.Active = false;
+ sLog->outError("** UNC-Chat: Could not initialize socket");
+ }
+ }
+ while(!World::IsStopped()){};
+}
+
+std::string IRCClient::GetChatLine(int nItem)
+{
+ return sIRC.ILINES[nItem];
+}
diff --git a/TODO/TriniChat/IRCClient.h b/TODO/TriniChat/IRCClient.h
new file mode 100644
index 0000000000000..dcfa06137028b
--- /dev/null
+++ b/TODO/TriniChat/IRCClient.h
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
*
* \n * \n * Copyright (C) 2012 - 2012 UNCore
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _IRC_CLIENT_H
+#define _IRC_CLIENT_H
+
+#include "../../../../dep/acelite/ace/Singleton.h"
+#include "../Entities/Player/Player.h"
+#include "IRCLog.h"
+#include "IRCCmd.h"
+
+using namespace std;
+// The maximum ammount of channels used, must be >= config option
+#define MAX_CONF_CHANNELS 10
+#define MAX_CHAT_LINES 10
+// time we need to wait before we try another connecton attempt
+// Default is 30 seconds
+#define MAX_SCRIPT_INST 10
+// CLINES is used for the default chatlines
+// By using the GetChatLine function its easier and faster
+// to receieve the line you need.
+enum CLINES
+{
+ IRC_WOW = 0,
+ WOW_IRC = 1,
+ JOIN_WOW = 2,
+ JOIN_IRC = 3,
+ LEAVE_WOW = 4,
+ LEAVE_IRC = 5,
+ CHANGE_NICK = 6
+};
+// CACTION is used by the Handle_WoW_Channel function
+// this function is called in channel.h when a player
+// joins or leave a channel inside the client.
+enum CACTION
+{
+ CHANNEL_JOIN,
+ CHANNEL_LEAVE,
+};
+
+enum script_Names
+{
+ MCS_Players_Online = 0,
+};
+
+// IRCClient main class
+class IRCClient : public ACE_Based::Runnable
+{
+ public:
+ // IRCClient Constructor
+ IRCClient();
+ // IRCClient Destructor
+ ~IRCClient();
+ // ZThread Entry
+ void run();
+ public:
+ // AH Function
+ void AHFunc(uint64 itmid, std::string itmnme, std::string plname, uint32 faction);
+ //bool BeenToGMI(float posx, float posy, std::string player, std::string from);
+ // IRCClient active
+ bool Active;
+ // Connected to IRC
+ bool Connected;
+ // Socket indentifier
+ int SOCKET;
+ fd_set sfdset;
+ // Send data to IRC, in addition the endline is added \n
+ bool SendIRC(std::string data);
+ // This function is called in ChatHandler.cpp and processes the chat from game to IRC
+ void Send_WoW_IRC(Player *plr, std::string Channel, std::string Msg);
+ // Sends a message to all players on the specified channel
+ void Send_WoW_Channel(const char *channel, std::string chat);
+ // Send a system message to all players
+ void Send_WoW_System(std::string Message);
+ // Send a message to the specified IRC channel
+ void Send_IRC_Channel(std::string sChannel, std::string sMsg, bool NoPrefix = false, std::string nType = "PRIVMSG");
+ // Sends a message to all IRC Channels
+ void Send_IRC_Channels(std::string sMsg);
+ std::string MakeMsg(std::string msg, std::string var, std::string val)
+ {
+ std::size_t start = msg.find(var);
+ if (start != std::string::npos)
+ msg.replace(start, var.length(), val);
+ return msg;
+ }
+ void Send_WoW_Player(string sPlayer, string sMsg);
+ void Send_WoW_Player(Player *plr, string sMsg);
+
+ // This function is called in Channel.cpp and processes Join/leave messages
+ void Handle_WoW_Channel(std::string Channel, Player *plr, int nAction);
+ void ResetIRC();
+ public:
+ void AutoJoinChannel(Player *plr);
+
+ public:
+ bool Script_Lock[5];
+ bool _AmiOp;
+
+ public:
+ string _Mver;
+ // IRC Server host
+ string _Host;
+ // IRC Server Port
+ int _Port;
+ // IRC Username
+ string _User;
+ // IRC Password
+ string _Pass;
+ // IRC Nickname
+ string _Nick;
+ //Password for in-game channel
+ std::string _irc_pass[MAX_CONF_CHANNELS];
+ // Authentication type
+ int _Auth;
+ string _Auth_Nick;
+ // IRC Connect code
+ string _ICC;
+ // IRC Default channel
+ string _defchan;
+ // IRC Leave Default channel
+ int _ldefc;
+ // Wait Connect Time
+ int _wct;
+ // BotMask Options
+ int Botmask;
+ // Status Channel
+ int Status;
+ // Announce Channel
+ int anchn;
+ int autoanc;
+ // IRC Channel count
+ int _chan_count;
+ // IRC Channel list
+ // Array to store our IRC channels
+ // each element will corrospond
+ // with _wow_chan array below.
+ std::string _irc_chan[MAX_CONF_CHANNELS];
+ // Game Channel list
+ std::string _wow_chan[MAX_CONF_CHANNELS];
+ // AutoJoin Options
+ int ajoin;
+ string ajchan;
+ // Online Command Max Results
+ int onlrslt;
+ // Channel OnJoin/Restart/Kick Messages
+ string JoinMsg;
+ string RstMsg;
+ string kikmsg;
+ // Misc Options
+ string ojGM1;
+ string ojGM2;
+ string ojGM3;
+ string ojGM4;
+ string ojGM5;
+ string logfile;
+ string logchan;
+ string logchanpw;
+ int logmask;
+ int games;
+ int gmlog;
+ // IRC Commands Security Level
+ int CACCT;
+ int CBAN;
+ int CCHAN;
+ int CCHAR;
+ int CFUN;
+ int CHELP;
+ int CINCHAN;
+ int CINFO;
+ int CITEM;
+ int CJAIL;
+ int CKICK;
+ int _KILL;
+ int CLEVEL;
+ int CLOOKUP;
+ int CMONEY;
+ int CMUTE;
+ int CONLINE;
+ int CPM;
+ int CRECONNECT;
+ int CRELOAD;
+ int CREVIVE;
+ int CSAVEALL;
+ int CSERVERCMD;
+ int CSHUTDOWN;
+ int CSPELL;
+ int CSYSMSG;
+ int CTELE;
+ int CTOP;
+ int CWHO;
+ // BotMask
+ int BOTMASK;
+ // Max connect attempt
+ int _MCA;
+ // Auto rejoin when kicked from irc
+ int _autojoinkick;
+ // IRC Command prefix
+ string _cmd_prefx;
+ int _op_gm;
+ int _op_gm_lev;
+ // Array that contains our chatlines from the conf file
+ // To increase this value change the MAX_CHAT_LINE define above
+ // Make sure the number of elements must match your items
+ // (remeber this starts at 0 so 0..9 is 10 items)
+ // and that you load the line in the LoadConfig function.
+ string ILINES[MAX_CHAT_LINES];
+ string GetChatLine(int nItem);
+
+ int _Max_Script_Inst;
+ // MAX_SCRIPT_INST
+
+ IRCLog iLog;
+
+private:
+ // Returns default chatline based on enum CLINES
+ // Initialize socket library
+ bool InitSock();
+ // Connect to IRC Server
+ bool Connect(const char *cHost, int nPort);
+ // Login to IRC Server
+ bool Login(std::string sNick, std::string sUser, std::string sPass);
+ // Send raw data to IRC
+ bool SendData(const char *data);
+ // Disconnect from IRC and cleanup socket
+ void Disconnect();
+ // Processes the data receieved from IRC
+ void Handle_IRC(std::string sData);
+ // Receieves data from the socket.
+ void SockRecv();
+};
+#endif
+#define sIRC (*ACE_Singleton::instance())
diff --git a/TODO/TriniChat/IRCCmd.cpp b/TODO/TriniChat/IRCCmd.cpp
new file mode 100644
index 0000000000000..35970b3b84c97
--- /dev/null
+++ b/TODO/TriniChat/IRCCmd.cpp
@@ -0,0 +1,935 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
*
* Copyright (C) 2012 - 2012 UNCore
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gamePCH.h"
+#include "IRCCmd.h"
+#include "IRCClient.h"
+#include "Database/DatabaseEnv.h"
+#include "../Globals/ObjectMgr.h"
+#include "../Accounts/AccountMgr.h"
+#include "../Maps/MapManager.h"
+#include "../World/World.h"
+// Constructor
+IRCCmd::IRCCmd(){}
+// Destructor
+IRCCmd::~IRCCmd(){}
+
+std::string IRCCmd::MakeUpper(std::string Channel)
+{
+ std::string tmpchan = Channel;
+ std::transform(tmpchan.begin(), tmpchan.end(), tmpchan.begin(), towupper);
+ return tmpchan;
+}
+bool IRCCmd::ParamsValid(_CDATA *CD, int pCnt)
+{
+ CD->PCOUNT = pCnt;
+ if(CD->PARAMS.size() == 0)
+ return false;
+ return ValidParams(CD->PARAMS, pCnt);
+}
+
+int IRCCmd::ParamsValid(_CDATA *CD, int pCnt, int rLev)
+{
+ //CD->PCOUNT = pCnt;
+ if(!CanUse(CD->USER, rLev))
+ return E_AUTH;
+ else if(pCnt == 0)
+ return E_OK;
+ else if(CD->PARAMS.size() == 0)
+ return E_SIZE;
+ else if(!ValidParams(CD->PARAMS, pCnt))
+ return E_SIZE;
+ return E_OK;
+}
+
+// This function checks if chat from irc is a command or not
+// return true on yes and false on no
+bool IRCCmd::IsValid(std::string USER, std::string FROM, std::string CHAT, std::string TYPE)
+{
+ // If the first line of our chat is the command prefix we have a command
+ if(CHAT.substr(0, 1) == sIRC._cmd_prefx && CHAT.size() > 1 )
+ {
+ _CDATA CDATA;
+ bool cValid = false;
+ bool AuthValid = true;
+ bool dontlog = true;
+ std::string* _PARAMS = getArray(CHAT, 2);
+ CDATA.USER = USER;
+ CDATA.FROM = FROM;
+ CDATA.TYPE = TYPE;
+ CDATA.PCOUNT = 0;
+ CDATA.CMD = MakeUpper(_PARAMS[0].substr(1, _PARAMS[0].size() - 1));
+ CDATA.PARAMS = _PARAMS[1];
+ if(CDATA.CMD == "LOGIN")
+ {
+ if(FROM == sIRC._Nick)
+ {
+ if(ParamsValid(&CDATA, 2))
+ Handle_Login(&CDATA);
+ else
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"login )", true, "ERROR");
+ }
+ else
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Please Send A PM To Login!", true, "ERROR");
+ if(GetLevel(USER) >= sIRC.gmlog)
+ dontlog = false;
+ cValid = true;
+ }
+ else if(CDATA.CMD == "LOGOUT")
+ {
+ if(FROM == sIRC._Nick)
+ {
+ Handle_Logout(&CDATA);
+ }
+ else
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Please Send A PM To Logout!", true, "ERROR");
+ cValid = true;
+ }
+ else if(CDATA.CMD == "ACCT")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CACCT))
+ {
+ case E_OK:
+ Account_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"acct <(un)lock/mail/pass/rename/gmlevel> )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "BAN")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CBAN))
+ {
+ case E_OK:
+ Ban_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"ban )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "CHAN")
+ {
+ switch(ParamsValid(&CDATA, 1, sIRC.CCHAN))
+ {
+ case E_OK:
+ Chan_Control(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"chan )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "CHAR")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CCHAR))
+ {
+ case E_OK:
+ Char_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"char )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "FUN")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CFUN))
+ {
+ case E_OK:
+ Fun_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"fun )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "HELP")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CHELP))
+ {
+ case E_OK:
+ Help_IRC(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"help )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "INCHAN")
+ {
+ switch(ParamsValid(&CDATA, 1, sIRC.CINCHAN))
+ {
+ case E_OK:
+ Inchan_Server(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"inchan )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "INFO")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CINFO))
+ {
+ case E_OK:
+ Info_Server(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"info )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "WG")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CINFO))
+ {
+ case E_OK:
+ Info_WG(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"wg )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "ITEM")
+ {
+ CDATA.PCOUNT = 3;
+ switch(ParamsValid(&CDATA, 2, sIRC.CITEM))
+ {
+ case E_OK:
+ Item_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"item )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "JAIL")
+ {
+ CDATA.PCOUNT = 3;
+ switch(ParamsValid(&CDATA, 1, sIRC.CJAIL))
+ {
+ case E_OK:
+ Jail_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"jail )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "KICK")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 1, sIRC.CKICK))
+ {
+ case E_OK:
+ Kick_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"kick )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "KILL")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 1, sIRC._KILL))
+ {
+ case E_OK:
+ Kill_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"kill )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "LEVEL")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 2, sIRC.CLEVEL))
+ {
+ case E_OK:
+ Level_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"level )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "LOOKUP")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 2, sIRC.CLOOKUP))
+ {
+ case E_OK:
+ Lookup_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"lookup )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "MONEY")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 2, sIRC.CMONEY))
+ {
+ case E_OK:
+ Money_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"money <(-)Money> )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "MUTE")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CMUTE))
+ {
+ case E_OK:
+ Mute_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"mute )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "ONLINE")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CONLINE))
+ {
+ case E_OK:
+ Online_Players(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"online )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "PM")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CPM))
+ {
+ case E_OK:
+ PM_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"pm )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "RELOAD")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CRELOAD))
+ {
+ case E_OK:
+ sIRC.Send_IRC_Channels("Reloading Configiguration Options.");
+ sWorld->LoadConfigSettings(true);
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "RECONNECT")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CRECONNECT))
+ {
+ case E_OK:
+ sIRC.Send_IRC_Channels(sIRC.RstMsg);
+ sIRC.ResetIRC();
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "RESTART")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CSHUTDOWN))
+ {
+ case E_OK:
+ Restart_Trinity(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"server )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "REVIVE")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 1, sIRC.CREVIVE))
+ {
+ case E_OK:
+ Revive_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"revive )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "SAVEALL")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CSAVEALL))
+ {
+ case E_OK:
+ Saveall_Player(&CDATA);
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "SERVER")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 2, sIRC.CSERVERCMD))
+ {
+ case E_OK:
+ Server(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"server )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "SHUTDOWN")
+ {
+ switch(ParamsValid(&CDATA, 1, sIRC.CSHUTDOWN))
+ {
+ case E_OK:
+ Shutdown_Trinity(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"shutdown )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "SPELL")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CSPELL))
+ {
+ case E_OK:
+ Spell_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"spell )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "SYSMSG")
+ {
+ CDATA.PCOUNT = 2;
+ switch(ParamsValid(&CDATA, 2, sIRC.CSYSMSG))
+ {
+ case E_OK:
+ Sysmsg_Server(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"sysmsg )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "TELE")
+ {
+ switch(ParamsValid(&CDATA, 2, sIRC.CTELE))
+ {
+ case E_OK:
+ Tele_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"tele )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "TOP")
+ {
+ CDATA.PCOUNT = 1;
+ switch(ParamsValid(&CDATA, 1, sIRC.CTOP))
+ {
+ case E_OK:
+ Top_Player(&CDATA);
+ break;
+ case E_SIZE:
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"top )", true, "ERROR");
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ else if(CDATA.CMD == "WHO")
+ {
+ switch(ParamsValid(&CDATA, 0, sIRC.CWHO))
+ {
+ case E_OK:
+ Who_Logged(&CDATA);
+ break;
+ case E_AUTH:
+ AuthValid = false;
+ break;
+ }
+ cValid = true;
+ }
+ if(!AuthValid && IsLoggedIn(USER))
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Access Denied! Your Security Level Is Too Low To Use This Command!", true, "ERROR");
+ if(cValid == false && (sIRC.BOTMASK & 4) != 0)
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : Unknown Command!", true, "ERROR");
+ if(cValid && dontlog)
+ {
+ if(CDATA.CMD == "LOGIN") {CDATA.PARAMS="*Hidden*";}
+ sIRC.iLog.WriteLog(" %s : [ %s(%d) ] Used Command: [ %s ] With Parameters: [ %s ]", sIRC.iLog.GetLogDateTimeStr().c_str(), CDATA.USER.c_str(), GetLevel(USER), CDATA.CMD.c_str(), CDATA.PARAMS.c_str());
+ if((sIRC.logmask & 1) != 0)
+ {
+ std::string logchan = "#";
+ logchan += sIRC.logchan;
+ std::stringstream ss;
+ ss << sIRC.iLog.GetLogDateTimeStr() << ": [ " << CDATA.USER << "(" << GetLevel(USER) << ") ] Used Command: [ " << CDATA.CMD << " ] With Parameters: [" << CDATA.PARAMS << " ]";
+ sIRC.Send_IRC_Channel(logchan, ss.str().c_str(), true);
+ }
+ }
+ return cValid;
+ }
+ return false;
+}
+
+bool IRCCmd::CanUse(std::string USER, int nLevel)
+{
+ if(IsLoggedIn(USER))
+ {
+ if(GetLevel(USER) >= nLevel)
+ return true;
+ else
+ return false;
+ }
+ else if(nLevel == 0)
+ {
+ return true;
+ }
+ else
+ sIRC.Send_IRC_Channel(USER, "\0034[ERROR] : You Are Not Logged In!", true, "ERROR");
+ return false;
+}
+
+std::string IRCCmd::ChanOrPM(_CDATA *CD)
+{
+ if(CD->FROM == sIRC._Nick)
+ return CD->USER;
+ else
+ return CD->FROM;
+}
+
+Player *IRCCmd::GetPlayer(std::string WHO)
+{
+ normalizePlayerName(WHO);
+ return sObjectAccessor->FindPlayerByName(WHO.c_str());
+}
+
+_client *IRCCmd::GetClient(std::string cname)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == cname)
+ return (*i);
+ }
+ return (NULL);
+}
+
+bool IRCCmd::IsLoggedIn(std::string USER)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == USER)
+ return true;
+ }
+ return false;
+}
+
+bool IRCCmd::AcctIsLoggedIn(std::string USER)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if(MakeUpper((*i)->UName) == MakeUpper(USER))
+ return true;
+ }
+ return false;
+}
+
+std::string IRCCmd::AcctIsBanned(std::string ACCT)
+{
+ uint32 acctid = sAccountMgr->GetId(ACCT);
+ std::string banned = "NOTBANNED";
+ QueryResult result = LoginDatabase.PQuery("SELECT banreason FROM ip_banned WHERE ip=(SELECT last_ip FROM account WHERE id = '%i')", acctid);
+ if(result)
+ {
+ banned = (*result)[0].GetString();
+ //delete result;
+ return "IP Banned. Reason:" + banned;
+ }
+ QueryResult result2 = LoginDatabase.PQuery("SELECT banreason FROM account_banned WHERE id='%i'", acctid);
+ if(result2)
+ {
+ banned = (*result2)[0].GetString();
+ //delete result2;
+ return "Account Banned. Reason:" + banned;
+ }
+ return banned;
+}
+
+int IRCCmd::GetLevel(std::string sName)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == sName)
+ return (*i)->GMLevel;
+ }
+ return 0;
+}
+
+int IRCCmd::AcctLevel(std::string plnme)
+{
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(plnme);
+ uint32 account_id = 0;
+ uint32 security = 0;
+ account_id = sObjectMgr->GetPlayerAccountIdByGUID(guid);
+ security = sAccountMgr->GetSecurity(account_id);
+ return security;
+}
+
+std::string IRCCmd::GetAccName(std::string sName)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == sName)
+ return (*i)->UName;
+ }
+ return "";
+}
+
+std::string IRCCmd::GetNameFromAcct(std::string sName)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->UName == sName)
+ return (*i)->Name;
+ }
+ return "";
+}
+
+int IRCCmd::GetAcctIDFromName(std::string sName)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == sName)
+ {
+ uint32 acct_id = 0;
+ acct_id = sAccountMgr->GetId((*i)->UName.c_str());
+ return acct_id;
+ }
+ }
+ return 0;
+}
+
+std::string IRCCmd::GetAcctNameFromID(uint32 acctid)
+{
+ QueryResult result = LoginDatabase.PQuery("SELECT username FROM account WHERE id = '%d'", acctid);
+ if(result)
+ {
+ std::string name = (*result)[0].GetString();
+ //delete result;
+ return name;
+ }
+
+ return "";
+}
+
+std::string IRCCmd::GetIPFromPlayer(std::string player)
+{
+ QueryResult result = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'", player.c_str());
+ if(result)
+ {
+ std::string acctid = (*result)[0].GetString();
+ //delete result;
+ QueryResult result2 = LoginDatabase.PQuery("SELECT last_ip FROM account WHERE id = '%s'", acctid.c_str());
+ if(result2)
+ {
+ std::string ip = (*result2)[0].GetString();
+ //delete result2;
+ return ip;
+ }
+ }
+
+ return "";
+}
+
+std::string IRCCmd::SecToDay(std::string secons)
+{
+ unsigned int seconds = atoi(secons.c_str());
+ unsigned int days = seconds / 86400;
+ unsigned int hours = seconds / 3600 % 24;
+ unsigned int mins = seconds / 60 % 60;
+ char tottime[1000];
+ sprintf(tottime, "%iDays:%iHours:%iMinutes", days, hours, mins);
+
+ return tottime;
+}
+
+bool IRCCmd::ValidParams(std::string PARAMS, int nCount)
+{
+ if(nCount == 1 && PARAMS.size() == 0)
+ return false;
+ int pcount = 0;
+ size_t p = -1;
+ for(int i = 0;i < nCount;i++)
+ {
+ p = PARAMS.find(" ", p + 1);
+ if(p == -1)
+ break;
+ else
+ pcount++;
+ }
+ nCount--;
+ if(pcount >= nCount)
+ return true;
+ else
+ return false;
+}
+
+std::string* IRCCmd::getArray(std::string PARAMS, int nCount)
+{
+ std::string *array = new std::string[nCount];
+ if(PARAMS.size() > 0)
+ {
+ int pcnt = 0;
+ size_t ps = 0;
+ size_t pc = -1;
+ for(int i = 0;i < nCount;i++)
+ {
+ pc = PARAMS.find(" ", pc + 1);
+ if(i + 1 == nCount && nCount != 1)
+ {
+ if(ps > 0 && pc > 0)
+ array[i] = PARAMS.substr(ps, PARAMS.size() - ps);
+ }
+ else
+ array[i] = PARAMS.substr(ps, pc - ps);
+ ps = pc + 1;
+ }
+ }
+ return array;
+}
+
+std::string IRCCmd::MakeMsg(const char *sLine, ... )
+{
+ va_list ap;
+ char tmpoutp[1024];
+ va_start(ap, sLine);
+ vsnprintf(tmpoutp, 1024, sLine, ap );
+ va_end(ap);
+ std::string outp = tmpoutp;
+ return outp;
+}
+
+void IRCClient::AHFunc(uint64 itmid, std::string itmnme, std::string plname, uint32 faction)
+{
+ IRCCmd Command;
+ Player* plr = Command.GetPlayer(plname);
+ if(plr)
+ {
+ std::string itemname = itmnme;
+
+ char temp [7];
+ sprintf(temp, "%u", itmid);
+ std::string itemid = temp;
+
+ std::string wowname = "";
+ std::string ircname = "";
+ switch (plr->GetTeam())
+ {
+ case 67:wowname="|cffff0000"+plname+"|r";ircname="\0034"+plname;break; //horde
+ case 469:wowname="|cff1589FF"+plname+"|r";ircname="\00312"+plname;break; //alliance
+ }
+
+ std::string wowfact = "|cffFF8040[Auction House]:|r";
+ std::string ircfact = "\00304,08\037/!\\\037\017\00307 Auction House \00304,08\037/!\\\037\017";
+ switch(faction)
+ {
+ //neutral
+ case 7:wowfact="|cffff8040[Neutral Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00307 Neutral Auction House \00304,08\037/!\\\037\017";break;
+ //horde
+ case 6:wowfact="|cffff0000[Horde Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00304 Horde Auction House \00304,08\037/!\\\037\017";break;
+ //alliance
+ case 2:wowfact="|cff1589FF[Alliance Auction House]:|r";ircfact="\00304,08\037/!\\\037\017\00312 Alliance Auction House \00304,08\037/!\\\037\017";break;
+ }
+ std::string wowstr = Command.MakeMsg("%s A New Item Has Been Added |cffffffff|Hitem:%s:0:0:0:0:0:0:0|h[%s]|h|r. By: %s",wowfact.c_str(), itemid.c_str(), itemname.c_str(), wowname.c_str());
+ std::string ircstr = Command.MakeMsg("%s A New Item Has Been Added [%s]. By: %s", ircfact.c_str(), itemname.c_str(), ircname.c_str());
+
+ sIRC.Send_WoW_Channel(sIRC._wow_chan[sIRC.Status].c_str(), wowstr.c_str());
+ sIRC.Send_IRC_Channel(sIRC._irc_chan[sIRC.Status].c_str(), ircstr.c_str());
+ }
+}
+
+/* Disabled
+bool IRCClient::BeenToGMI(float posx, float posy, std::string player, std::string from)
+{
+ IRCCmd Command;
+ //std::transform(location.begin(), location.end(), location.begin(), towupper);
+ //sObjectMgr->GetAreaId
+ //if(location == "GMI" || location == "GMISLAND")
+ if(MapManager::Instance().GetZoneId(1,posx,posy) == 876)
+ {
+ QueryResult *result = WorldDatabase.PQuery("SELECT name FROM Hell_GMI WHERE name = '%s'",player.c_str());
+ if(result)
+ {
+ delete result;
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(player);
+ Player* plr = sObjectMgr->GetPlayer(guid);
+
+ uint64 guid2 = sObjectMgr->GetPlayerGUIDByName(from);
+ Player* plr2 = sObjectMgr->GetPlayer(guid2);
+ if(plr) sIRC.Send_WoW_Player(plr, "You Have Already Had A Trip To GM Island. There Is Only One Tele To GM Island Per Player, Please Donate If You Would like The .tele Command.");
+ if(plr2) sIRC.Send_WoW_Player(plr2, "This Player Has Already Had Their Trip To GM Island. The Tele Has Been Canceled.");
+ else sIRC.Send_IRC_Channel(from.c_str(), MakeMsg(" \0034[ERROR] : $Player Has Already Had Their Trip To GMI! The Tele Has Been Canceled", "$Player", player.c_str()), true, "ERROR");
+ return true;
+ }
+ else
+ {
+ if(Command.AcctLevel(player) == 0)
+ WorldDatabase.PExecute("INSERT INTO `Hell_GMI` VALUES ('%s')", player.c_str());
+ return false;
+ }
+ }
+ return false;
+}*/
diff --git a/TODO/TriniChat/IRCCmd.h b/TODO/TriniChat/IRCCmd.h
new file mode 100644
index 0000000000000..9b9730a238d35
--- /dev/null
+++ b/TODO/TriniChat/IRCCmd.h
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
*
* \n * \n * Copyright (C) 2012 - 2012 UNCore
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _IRC_CMD_H
+#define _IRC_CMD_H
+
+#define MAX_CLIENTS 50
+#include "../shared/Common.h"
+#include "../Entities/Player/Player.h"
+#include "../Globals/ObjectAccessor.h"
+#include "../Battlegrounds/BattlegroundMgr.h"
+
+struct ChannelUser
+{
+ int UserType;
+ std::string Name;
+ std::string UName;
+ int UserLevel;
+};
+
+struct _client
+{
+ bool LoggedIn;
+ std::string Name;
+ std::string UName;
+ int GMLevel;
+};
+struct _CDATA
+{
+ std::string CMD;
+ std::string USER;
+ std::string FROM;
+ std::string PARAMS;
+ std::string TYPE;
+ int PCOUNT;
+};
+enum APVERR
+{
+ E_OK,
+ E_SIZE,
+ E_AUTH,
+ E_IVALID,
+};
+enum ESOUNDS
+{
+ S_ENTERWORLD = 602,
+ S_QUESTFAILED = 847,
+ S_INVITE = 880,
+ S_LEVELUP = 888,
+ S_COINSOUND = 895,
+ S_WHISPER = 3081,
+ S_STEALTH = 3325,
+};
+class IRCCmd
+{
+ public:
+ IRCCmd();
+ ~IRCCmd();
+
+ void Handle_Logout(_CDATA *CD);
+ bool IsLoggedIn(std::string USER);
+ bool IsValid(std::string USER, std::string FROM, std::string CHAT, std::string TYPE);
+ bool AcctIsLoggedIn(std::string USER);
+ _client *GetClient(std::string cname);
+
+ public:
+ static std::string MakeMsg(const char *sLine, ... );
+ static std::string ChanOrPM(_CDATA *CD);
+ int AcctLevel(std::string plnme);
+ int GetLevel(std::string sName);
+ std::string MakeUpper(std::string Channel);
+ std::string AcctIsBanned(std::string ACCT);
+ std::list<_client*> _CLIENTS;
+ Player* GetPlayer(std::string WHO);
+
+ private:
+ // TriniChat Commands
+ void Handle_Login(_CDATA *CD);
+ void Account_Player(_CDATA *CD);
+ void Ban_Player(_CDATA *CD);
+ void Chan_Control(_CDATA *CD);
+ void Char_Player(_CDATA *CD);
+ void Fun_Player(_CDATA *CD);
+ void Help_IRC(_CDATA *CD);
+ void Item_Player(_CDATA *CD);
+ void Inchan_Server(_CDATA *CD);
+ void Info_Server(_CDATA *CD);
+ void Info_WG(_CDATA *CD);
+ void UnAuraAll(_CDATA *CD);
+ void Jail_Player(_CDATA *CD);
+ void Kick_Player(_CDATA *CD);
+ void Kill_Player(_CDATA *CD);
+ void Level_Player(_CDATA *CD);
+ void Lookup_Player(_CDATA *CD);
+ void Money_Player(_CDATA *CD);
+ void Mute_Player(_CDATA *CD);
+ void Online_Players(_CDATA *CD);
+ void PM_Player(_CDATA *CD);
+ void Revive_Player(_CDATA *CD);
+ void Saveall_Player(_CDATA *CD);
+ void Server(_CDATA *CD);
+ void Shutdown_Trinity(_CDATA *CD);
+ void Restart_Trinity(_CDATA *CD);
+ void Spell_Player(_CDATA *CD);
+ void Sysmsg_Server(_CDATA *CD);
+ void Tele_Player(_CDATA *CD);
+ void Top_Player(_CDATA *CD);
+ void Who_Logged(_CDATA *CD);
+ bool CanUse(std::string USER, int nLevel);
+ bool ValidParams(std::string PARAMS, int nCount = 1);
+ bool ParamsValid(_CDATA *CD, int pCnt);
+ int ParamsValid(_CDATA *CD, int pCnt, int rLev);
+ std::string GetAccName(std::string sName);
+ std::string GetNameFromAcct(std::string sName);
+ std::string GetAcctNameFromID(uint32 acctid);
+ std::string GetIPFromPlayer(std::string player);
+ std::string SecToDay(std::string secons);
+ int GetAcctIDFromName(std::string sName);
+ std::string* getArray(std::string PARAMS, int nCount = 1);
+};
+inline void MakeLower(std::string& str)
+{
+ std::transform( str.begin(), str.end(), str.begin(), ::tolower );
+}
+#endif
diff --git a/TODO/TriniChat/IRCCmde.cpp b/TODO/TriniChat/IRCCmde.cpp
new file mode 100644
index 0000000000000..a94cfac6ca746
--- /dev/null
+++ b/TODO/TriniChat/IRCCmde.cpp
@@ -0,0 +1,2375 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
*
* Copyright (C) 2012 - 2012 UNCore
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gamePCH.h"
+#include "IRCCmd.h"
+#include "IRCClient.h"
+#include "MCS_OnlinePlayers.h"
+#include "WorldPacket.h"
+#include "Database/DatabaseEnv.h"
+#include "../Chat/Chat.h"
+#include "../Maps/MapManager.h"
+#include "../World/World.h"
+#include "../Guilds/Guild.h"
+#include "../Globals/ObjectMgr.h"
+#include "../Accounts/AccountMgr.h"
+#include "../Miscellaneous/Language.h"
+#include "../Spells/Auras/SpellAuras.h"
+#include "SystemConfig.h"
+#include "Config.h"
+#include "OutdoorPvPMgr.h"
+#include "OutdoorPvPWG.h"
+//#include "ArenaTeamMgr.h"
+
+#define Send_Player(p, m) sIRC.Send_WoW_Player(p, m)
+#define Send_IRCA(c, m, b, t) sIRC.Send_IRC_Channel(c, m, b, t)
+
+#ifdef WIN32
+#define Delay(x) Sleep(x)
+#else
+#define Delay(x) sleep(x / 1000)
+#endif
+
+void IRCCmd::Handle_Login(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ std::string isbanned = AcctIsBanned(_PARAMS[0]);
+ if(isbanned == "NOTBANNED")
+ {
+ if(!IsLoggedIn(CD->USER))
+ {
+ if(!AcctIsLoggedIn(_PARAMS[0].c_str()))
+ {
+ QueryResult result = LoginDatabase.PQuery("SELECT account_access.gmlevel FROM account_access ,account WHERE account_access.id = account.id AND account.username ='%s' AND account.sha_pass_hash=SHA1(CONCAT(UPPER(account.username),':',UPPER('%s')));", _PARAMS[0].c_str(), _PARAMS[1].c_str());
+ //"SELECT `gmlevel` FROM `account_access` WHERE `username`='%s' AND `sha_pass_hash`=SHA1(CONCAT(UPPER(`username`),':',UPPER('%s')));", _PARAMS[0].c_str(), _PARAMS[1].c_str());
+ if (result)
+ {
+ Field *fields = result->Fetch();
+ int GMLevel = fields[0].GetInt16();
+ if(GMLevel >= 0)
+ {
+ _client *NewClient = new _client();
+ NewClient->Name = CD->USER;
+ NewClient->UName = MakeUpper(_PARAMS[0]);
+ NewClient->GMLevel = fields[0].GetInt16();
+ _CLIENTS.push_back(NewClient);
+ Send_IRCA(CD->USER, MakeMsg("You Are Now Logged In As %s, Welcome To UNC-Chat Admin Mode.", _PARAMS[0].c_str()), true, CD->TYPE);
+
+ if(sIRC._op_gm == 1 && GMLevel >= sIRC._op_gm_lev)
+ {
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ sIRC.SendIRC("MODE #"+sIRC._irc_chan[i]+" +o "+CD->USER );
+ }
+ }
+ }else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Sorry, Your Username Or Password Is Incorrect. Please Try Again. ", true, "ERROR");
+ }else
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : %s Is Already Logged In With This Username. ", GetNameFromAcct(MakeUpper(_PARAMS[0])).c_str()), true, "ERROR");
+ }else
+ Send_IRCA(CD->USER, "\0034[ERROR] : You Are Already Logged In As "+ _PARAMS[0] +"!", true, "ERROR");
+ }else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Sorry You Are "+isbanned+". You Cannot Log In To UNC-Chat "+CD->USER.c_str()+"!", true, "ERROR");
+}
+
+void IRCCmd::Handle_Logout(_CDATA *CD)
+{
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ if((*i)->Name == CD->USER)
+ {
+ _CLIENTS.erase(i);
+ delete (*i);
+ Send_IRCA(CD->USER, "You Are Now Logged Out!", true, CD->TYPE);
+ return;
+ }
+ }
+ Send_IRCA(CD->USER, "\0034[ERROR] : You Are Not Logged In!", true, "ERROR");
+}
+
+void IRCCmd::Account_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ normalizePlayerName(_PARAMS[0]);
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[0]);
+ uint32 account_id = 0;
+ account_id = sObjectMgr->GetPlayerAccountIdByGUID(guid);
+ if(account_id)
+ {
+ if(account_id == GetAcctIDFromName(CD->USER) || GetLevel(CD->USER) >= sIRC._op_gm_lev)
+ {
+ Player* plr = ObjectAccessor::FindPlayer(guid);
+ if(_PARAMS[1] == "lock")
+ {
+ LoginDatabase.PExecute( "UPDATE `account` SET `locked` = '1' WHERE `id` = '%d'",account_id);
+ if(plr) Send_Player(plr, MakeMsg("Your Account Has Been Locked To Your Current IP By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : Account Has Been Locked To Their Current IP Address.", true, CD->TYPE);
+ }
+ else if(_PARAMS[1] == "unlock")
+ {
+ LoginDatabase.PExecute( "UPDATE `account` SET `locked` = '0' WHERE `id` = '%d'",account_id);
+ if(plr) Send_Player(plr, MakeMsg("Your Account Has Been UnLocked From The Associated IP By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : Account Has Been UnLocked From The Associated IP Address.", true, CD->TYPE);
+ }
+ else if(_PARAMS[1] == "mail")
+ {
+ LoginDatabase.PExecute( "UPDATE `account` SET `email` = '%s' WHERE `id` = '%d'",_PARAMS[2].c_str() ,account_id);
+ if (plr) Send_Player(plr, MakeMsg("%s Has Changed Your EMail Adress To: %s", CD->USER.c_str(), _PARAMS[2].c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : EMail Address Successfully Changed To: "+_PARAMS[2], true, CD->TYPE);
+ }
+ else if(_PARAMS[1] == "pass")
+ {
+ LoginDatabase.PExecute( "UPDATE `account` SET `sha_pass_hash` = SHA1(CONCAT(UPPER(`username`),':',UPPER('%s'))) WHERE `id` = '%d'",_PARAMS[2].c_str() ,account_id);
+ if (plr) Send_Player(plr, MakeMsg("%s Has Changed Your Password To: %s", CD->USER.c_str(), _PARAMS[2].c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : Password Successfully Changed To: "+_PARAMS[2], true, CD->TYPE);
+ }
+ else if(_PARAMS[1] == "rename")
+ {
+ if(plr)
+ {
+ plr->SetAtLoginFlag(AT_LOGIN_RENAME);
+ Send_Player(plr, MakeMsg("%s Has Requested You Change This Characters Name, Rename Will Be Forced On Next Login!", CD->USER.c_str()));
+ }
+ CharacterDatabase.PExecute("UPDATE `characters` SET `at_login` = `at_login` | '1' WHERE `guid` = '%u'", guid);
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : Has Been Forced To Change Their Characters Name, Rename Will Be Forced On Next Login!", true, CD->TYPE);
+ }
+ else if(_PARAMS[1] == "gmlevel")
+ {
+ const char *cgmlevel = _PARAMS[2].c_str();
+ if(GetLevel(CD->USER) >= atoi(cgmlevel))
+ {
+ LoginDatabase.PExecute( "UPDATE `account` SET `gmlevel` = '%d' WHERE `id` = '%d'", _PARAMS[2].c_str(), account_id );
+ Send_IRCA(ChanOrPM(CD), "\00313["+GetAcctNameFromID(account_id)+"] : Has GM Level Successfully Changed To: "+_PARAMS[2], true, CD->TYPE);
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : The Specified GM Level Is Higher Than Your GM Level.", true, "ERROR");
+ }
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : You Are Not A GM, You May Only Change Settings In Your Own Account.", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Such Player Exists, So Account Cannot Be Looked Up.", true, "ERROR");
+}
+
+void IRCCmd::Ban_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ if(_PARAMS[1] == "ip")
+ {
+ std::string ip = GetIPFromPlayer(_PARAMS[0]);
+ if(_PARAMS[2] == "")
+ _PARAMS[2] = "No Reason";
+ if(ip != "")
+ {
+ LoginDatabase.PExecute( "INSERT IGNORE INTO `ip_banned` VALUES ('%s', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '%s', '%s')", ip.c_str(), CD->USER.c_str(), _PARAMS[2].c_str());
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ plr->GetSession()->KickPlayer();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Had Their IP Address Banned. [%s] Reason: %s",_PARAMS[0].c_str() ,ip.c_str() , _PARAMS[2].c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : I Cannot Locate An IP Address For The Character Name Given.", true, "ERROR");
+ }
+ if(_PARAMS[1] == "acct")
+ {
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[0].c_str());
+ uint32 acctid = sObjectMgr->GetPlayerAccountIdByGUID(guid);
+ if(_PARAMS[2] == "")
+ _PARAMS[2] = "No Reason";
+ if(acctid)
+ {
+ LoginDatabase.PExecute( "INSERT INTO `account_banned` VALUES ('%u', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '%s', '%s', 1)", acctid, CD->USER.c_str(), _PARAMS[2].c_str());
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ plr->GetSession()->KickPlayer();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Had Their Account Banned. Reason: %s",_PARAMS[0].c_str(), _PARAMS[2].c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : I Cannot Locate An Account For The Character Name Given.", true, "ERROR");
+ }
+ if(_PARAMS[1] == "unban")
+ {
+ std::string unbani = _PARAMS[0];
+ WorldDatabase.EscapeString(_PARAMS[0]);
+ if(atoi(unbani.c_str()) > 0)
+ {
+ LoginDatabase.PExecute( "DELETE FROM ip_banned WHERE ip = '%s'", _PARAMS[0].c_str());
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Been Removed From The IP Ban List.", _PARAMS[0].c_str()), true, CD->TYPE);
+ }
+ else
+ {
+ QueryResult result = LoginDatabase.PQuery("SELECT id FROM `account` WHERE username = '%s'", _PARAMS[0].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string id = fields[0].GetString();
+
+ LoginDatabase.PExecute( "DELETE FROM account_banned WHERE id = %s", id.c_str());
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Been Removed From The Account Ban List.", _PARAMS[0].c_str()), true, CD->TYPE);
+
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : I Cannot Locate An Account Or IP Address For The Paramaters Given.", true, "ERROR");
+ }
+ }
+}
+
+void IRCCmd::Chan_Control(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ if(CD->FROM == sIRC._Nick)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : You Cannot Use This Command Through A PM Yet.", true, "ERROR");
+ return;
+ }
+ if(_PARAMS[0] == "op")
+ {
+ if(_PARAMS[1].length() > 1)
+ sIRC.SendIRC("MODE "+CD->FROM+" +o "+_PARAMS[1] );
+ else
+ sIRC.SendIRC("MODE "+CD->FROM+" +o "+CD->USER );
+ }
+ if(_PARAMS[0] == "deop")
+ {
+ if(_PARAMS[1].length() > 1)
+ sIRC.SendIRC("MODE "+CD->FROM+" -o "+_PARAMS[1] );
+ else
+ sIRC.SendIRC("MODE "+CD->FROM+" -o "+CD->USER );
+ }
+ if(_PARAMS[0] == "voice")
+ {
+ if(_PARAMS[1].length() > 1)
+ sIRC.SendIRC("MODE "+CD->FROM+" +v "+_PARAMS[1] );
+ else
+ sIRC.SendIRC("MODE "+CD->FROM+" +v "+CD->USER );
+ }
+ if(_PARAMS[0] == "devoice")
+ {
+ if(_PARAMS[1].length() > 1)
+ sIRC.SendIRC("MODE "+CD->FROM+" -v "+_PARAMS[1] );
+ else
+ sIRC.SendIRC("MODE "+CD->FROM+" -v "+CD->USER );
+ }
+}
+
+void IRCCmd::Char_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 5);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ normalizePlayerName(_PARAMS[0]);
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[0]);
+ Player* plr = ObjectAccessor::FindPlayer(guid);
+ if(plr)
+ {
+ if(_PARAMS[1] == "mapcheat")
+ {
+ bool explore = false;
+ if (_PARAMS[2] != "0")
+ explore = true;
+ for (uint8 i=0; i<64; i++)
+ {
+ if (_PARAMS[2] != "0")
+ plr->SetFlag(PLAYER_EXPLORED_ZONES_1+i,0xFFFFFFFF);
+ else
+ plr->SetFlag(PLAYER_EXPLORED_ZONES_1+i,0);
+ }
+ if(explore)
+ {
+ Send_Player(plr, MakeMsg("All Your Zones Have Been Set To Explored By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Now Explored All Zones.", true, CD->TYPE);
+ }
+ else
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Now Had All Zones Set To Un-Explored.", true, CD->TYPE);
+ Send_Player(plr, MakeMsg("All Your Zones Have Been Set To Un-Explored By: %s", CD->USER.c_str()));
+ }
+ }
+ if(_PARAMS[1] == "taxicheat")
+ {
+ if (_PARAMS[2] != "0")
+ {
+ plr->SetTaxiCheater(true);
+ Send_Player(plr, MakeMsg("Taxi Node Cheat Has Been Enabled By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Taxi Node Cheat Has Been Enabled.", true, CD->TYPE);
+ }
+ else
+ {
+ plr->SetTaxiCheater(false);
+ Send_Player(plr, MakeMsg("Taxi Node Cheat Has Been Disabled By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Taxi Node Cheat Has Been Disabled.", true, CD->TYPE);
+ }
+ }
+ if(_PARAMS[1] == "maxskill")
+ {
+ plr->UpdateSkillsToMaxSkillsForLevel();
+ Send_Player(plr, MakeMsg("Your Skills Have Been Maxed Out By: %s", CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Skills Have Been Maxed Out.", true, CD->TYPE);
+ }
+ if(_PARAMS[1] == "setskill")
+ {
+ std::string* _PARAMSA = getArray(_PARAMS[2], 4);
+ uint32 skill = atoi(_PARAMS[2].c_str());
+ uint32 level = atol(_PARAMS[3].c_str());
+ int32 max = _PARAMS[4].c_str() ? atol (_PARAMS[4].c_str()) : plr->GetPureMaxSkillValue(skill);
+ SkillLineEntry const* skilllookup = sSkillLineStore.LookupEntry(skill);
+ //if skillid entered is not a number and greater then 0 then the command is being used wrong
+ if(skill >= 0)
+ {
+ //does the skill even exist
+ if(skilllookup)
+ {
+ //does player have the skill yet
+ if(plr->GetSkillValue(skill))
+ {
+ //plr->SetSkill(skill,level,max);
+ // add hack until find out what skill step is
+ plr->SetSkill(skill,0,level,max);
+ Send_Player(plr, MakeMsg("Skill: %s Has Been Set To Level: %i Max: %i By: %s",skilllookup->name[0], level, max, CD->USER.c_str()));
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Had Skill: %s Set To Level: %d Max: %d",_PARAMS[0].c_str() , skilllookup->name[0], level, max), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Player Does Not Have The %s Skill Yet.", skilllookup->name[0]), true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : That Skill ID Does Not Exist.", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : The Skill ID Entered Is Invalid.", true, "ERROR");
+ }
+ if(_PARAMS[1] == "combatstop")
+ {
+ if(!plr->isInCombat())
+ {
+ plr->CombatStop();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Was Dropped From Combat",_PARAMS[0].c_str()), true, CD->TYPE);
+ }else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Specified Player Is Not In Combat.", true, "ERROR");
+ }
+ }
+ if(_PARAMS[1] == "quest")
+ {
+ std::string s_param = _PARAMS[3];
+ std::string QName = "";
+ char *args = (char*)s_param.c_str();
+ uint32 qId = 0;
+ if(args[0]=='[')
+ {
+ char* cQName = strtok((char*)args, "]");
+ if(cQName && cQName[0])
+ {
+ QName = cQName+1;
+ WorldDatabase.EscapeString(QName);
+ QueryResult result = WorldDatabase.PQuery("SELECT entry FROM quest_template WHERE name = '%s'", QName.c_str());
+ if (!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Quest Not Found!", true, "ERROR");
+ return;
+ }
+ qId = result->Fetch()->GetUInt16();
+ //delete result;
+ }
+ }
+ else
+ {
+ qId = atoi(args);
+ QueryResult result = WorldDatabase.PQuery("SELECT title FROM quest_template WHERE entry = '%d'", qId);
+ if (!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Quest Not Found!", true, "ERROR");
+ return;
+ }
+ QName = result->Fetch()->GetString();
+ //delete result;
+ }
+ if(_PARAMS[2] == "add")
+ {
+ Quest const* pQuest = sObjectMgr->GetQuestTemplate(qId);
+ //for (uint32 id = 0; id < sItemStorage.MaxEntry; id++)
+ ItemTemplateContainer const* itc = sObjectMgr->GetItemTemplateStore();
+ ItemTemplateContainer::const_iterator result = find_if(itc->begin(), itc->end(), Finder(qId, &ItemPrototype::StartQuest));
+
+ if (result != itc->end())
+ {
+ /* ItemPrototype const *pProto = sItemStorage.LookupEntry(id);
+ if (!pProto)
+ continue;
+
+ if (pProto->StartQuest == qId)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : This Quest Requires Activation By Item %d, Add It To The Player And Start Quest Manually.", pProto->ItemId),true, "ERROR");
+ }*/
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : This Quest Requires Activation By Item %d, Add It To The Player And Start Quest Manually.", result->second.ItemId),true, "ERROR");
+ }
+
+ if( plr->CanAddQuest( pQuest, true ) )
+ {
+ plr->AddQuest( pQuest, NULL );
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Had Quest [%s] Added To Quest Log.", _PARAMS[0].c_str(), QName.c_str()), true, "ERROR");
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Cannot Add Quest To Player, He Either Has No Space Or He Already Has The Quest In His Quest Log.", true, "ERROR");
+ }
+ }
+ if(_PARAMS[2] == "remove")
+ {
+ Quest const* pQuest = sObjectMgr->GetQuestTemplate(qId);
+ for(uint8 slot = 0; slot < MAX_QUEST_LOG_SIZE; ++slot )
+ {
+ uint32 quest = plr->GetQuestSlotQuestId(slot);
+ if(quest==qId)
+ {
+ plr->SetQuestSlot(slot,0);
+ plr->TakeQuestSourceItem( quest, false );
+ }
+ }
+ //plr->SetQuestStatus( qId, QUEST_STATUS_NONE);
+ plr->RemoveActiveQuest(qId);
+ //plr->getQuestStatusMap()[qId].m_rewarded = false;
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Quest [%s] Removed.", _PARAMS[0].c_str(), QName.c_str()), true, CD->TYPE);
+ }
+ if(_PARAMS[2] == "complete")
+ {
+ Quest const* pQuest = sObjectMgr->GetQuestTemplate(qId);
+ if(!plr->GetQuestStatus(qId))
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Does Not Have This Quest In Quest Log, Cannot Complete It.", true, "ERROR");
+ }
+ else
+ {
+ for(uint8 x = 0; x < QUEST_OBJECTIVES_COUNT; ++x)
+ {
+ uint32 id = pQuest->ReqItemId[x];
+ uint32 count = pQuest->ReqItemCount[x];
+ if(!id || !count)
+ continue;
+ uint32 curItemCount = plr->GetItemCount(id,true);
+ ItemPosCountVec dest;
+ uint8 msg = plr->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, id, count-curItemCount );
+ if( msg == EQUIP_ERR_OK )
+ {
+ Item* item = plr->StoreNewItem( dest, id, true);
+ plr->SendNewItem(item,count-curItemCount,true,false);
+ }
+ }
+
+ for(uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; i++)
+ {
+ uint32 creature = pQuest->ReqCreatureOrGOId[i];
+ uint32 creaturecount = pQuest->ReqCreatureOrGOCount[i];
+ if(uint32 spell_id = pQuest->ReqSpell[i])
+ {
+ for(uint16 z = 0; z < creaturecount; ++z)
+ plr->CastedCreatureOrGO(creature,0,spell_id);
+ }
+ else if(creature > 0)
+ {
+ for(uint16 z = 0; z < creaturecount; ++z)
+ plr->KilledMonsterCredit(creature,0);
+ }
+ else if(creature < 0)
+ {
+ for(uint16 z = 0; z < creaturecount; ++z)
+ plr->CastedCreatureOrGO(creature,0,0);
+ }
+ }
+
+ if(uint32 repFaction = pQuest->GetRepObjectiveFaction())
+ {
+ uint32 repValue = pQuest->GetRepObjectiveValue();
+ uint32 curRep = plr->GetReputationMgr().GetReputation(repFaction);
+ if(curRep < repValue)
+ {
+ FactionEntry const *factionEntry = sFactionStore.LookupEntry(repFaction);
+ plr->GetReputationMgr().SetReputation(factionEntry,repValue);
+ }
+ }
+
+ int32 ReqOrRewMoney = pQuest->GetRewOrReqMoney();
+ if(ReqOrRewMoney < 0)
+ plr->ModifyMoney(-ReqOrRewMoney);
+
+ plr->CompleteQuest(qId);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Quest [%s] Status Set To Complete.", _PARAMS[0].c_str(), QName.c_str()), true, CD->TYPE);
+ }
+ }
+ }
+ if(_PARAMS[1] == "mod")
+ {
+ if(_PARAMS[2] == "rep")
+ {
+ uint32 factionId = atoi((char*)_PARAMS[3].c_str());
+ FactionEntry const *factionEntry = sFactionStore.LookupEntry(factionId);
+ if(!factionEntry)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Faction With That Name Exists.", true, "ERROR");
+ }
+ else
+ {
+ int32 amount = atol((char*)_PARAMS[4].c_str());
+ if(amount > -39000 && amount < 43000)
+ {
+ plr->SetReputation(factionId,amount);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Reputation With Faction %s Set To %s.", _PARAMS[0].c_str(), _PARAMS[3].c_str(), _PARAMS[4].c_str()), true, CD->TYPE);
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Reputation Value Incorrect. Must Be Between -39000 and 43000.", true, "ERROR");
+ }
+ }
+ }
+ if(_PARAMS[2] == "morph")
+ {
+ uint16 display_id = (uint16)atoi((char*)_PARAMS[3].c_str());
+ plr->SetDisplayId(display_id);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Been Morphed Into DisplayID: %s.", _PARAMS[0].c_str(), _PARAMS[3].c_str()), true, CD->TYPE);
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Valid Parameters Are: morph , reputation .", true, "ERROR");
+ }
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Character With That Name Exists.", true, "ERROR");
+}
+
+void IRCCmd::Fun_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ if(_PARAMS[1] == "say")
+ {
+ plr->Say(_PARAMS[2], LANG_UNIVERSAL);
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Was Forced To Say: "+_PARAMS[2]+".", true, CD->TYPE);
+ }
+ if(_PARAMS[1] == "sound")
+ {
+ uint32 sndid = atoi(_PARAMS[2].c_str());
+ plr->SendPlaySound(sndid ,true);
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Just Heard Sound ID: "+_PARAMS[2]+".", true, CD->TYPE);
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Online!", true, "ERROR");
+}
+
+void IRCCmd::Help_IRC(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+ QueryResult result = WorldDatabase.PQuery("SELECT `Command`, `Description`, `gmlevel` FROM `IRC_Commands`");
+ if(result)
+ {
+ if(IsLoggedIn(CD->USER))
+ {
+ if(_PARAMS[0] == "")
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT * FROM `IRC_Commands` WHERE `gmlevel` <= %u ORDER BY `Command`", GetLevel(CD->USER));
+ if(result)
+ {
+ std::string output = "\002UNC-Chat IRC Commands:\017 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ Field *fields = result->Fetch();
+ output += fields[0].GetString() + ", ";
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(CD->USER, output, true, CD->TYPE.c_str());
+ }
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT `Description`, `gmlevel` FROM `IRC_Commands` WHERE `Command` = '%s'", _PARAMS[0].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ if(fields[1].GetUInt32() > GetLevel(CD->USER))
+ {
+ Send_IRCA(CD->USER, "You Do Not Have Access To That Command, So No Help Is Available.", true, CD->TYPE.c_str());
+ return;
+ }
+ if(result)
+ {
+ std::string cmdhlp = fields[0].GetString();
+ //delete result;
+ Send_IRCA(CD->USER, cmdhlp, true, CD->TYPE.c_str());
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Such Command Exists, Please Check The Spelling And Try Again.", true, "ERROR");
+ }
+ }
+ else if(!IsLoggedIn(CD->USER))
+ {
+ WorldDatabase.EscapeString(_PARAMS[0]);
+ if(_PARAMS[0] == "")
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT * FROM `IRC_Commands` WHERE `gmlevel` = 0 ORDER BY `Command`");
+ if(result)
+ {
+ std::string output = "\002UNC-Chat IRC Commands:\017 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ Field *fields = result->Fetch();
+ output += fields[0].GetString() + ", ";
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(CD->USER, output, true, CD->TYPE.c_str());
+ Send_IRCA(CD->USER, "You Are Currently Not Logged In, Please Login To See A Complete List Of Commands Available To You.", true, CD->TYPE.c_str());
+ }
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT `Description`, `gmlevel` FROM `IRC_Commands` WHERE `Command` = '%s'", _PARAMS[0].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ if(fields[1].GetUInt32() > 0)
+ {
+ Send_IRCA(CD->USER, "You Do Not Have Access To That Command, So No Help Is Available.", true, CD->TYPE.c_str());
+ return;
+ }
+ std::string cmdhlp = fields[0].GetString();
+ //delete result;
+ Send_IRCA(CD->USER, cmdhlp, true, CD->TYPE.c_str());
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Such Command Exists, Please Check The Spelling And Try Again.", true, "ERROR");
+ }
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Database Error! Please Make Sure You Used IRC_Commands.sql, You Must Have A Table In Your World Database (IRC_Commands)!", true, "ERROR");
+}
+
+void IRCCmd::Inchan_Server(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+ WorldDatabase.EscapeString(_PARAMS[0]);
+ if(_PARAMS[0] == "")
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"inchan )", true, "ERROR");
+ return;
+ }
+ QueryResult result = WorldDatabase.PQuery("SELECT * FROM `IRC_Inchan` WHERE `channel` = '%s' ORDER BY `name`", _PARAMS[0].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string output = "\002Players In The [ "+fields[2].GetString()+" ] Channel:\017 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ output += fields[1].GetString() + ", ";
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), output, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(ChanOrPM(CD), "No Players Are Currently In [ "+_PARAMS[0]+" ] Channel!", true, CD->TYPE.c_str());
+}
+
+void IRCCmd::Info_Server(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+ char clientsNum [50];
+ sprintf(clientsNum, "%u", sWorld->GetPlayerCount());
+ char maxClientsNum [50];
+ sprintf(maxClientsNum, "%u", sWorld->GetMaxPlayerCount());
+ char maxConnectA [50];
+ sprintf(maxConnectA, "%u%", sWorld->GetMaxActiveSessionCount());
+ char maxConnectQ [50];
+ sprintf(maxConnectQ, "%u%", sWorld->GetMaxQueuedSessionCount());
+ char curConnectA [50];
+ sprintf(curConnectA, "%u%", sWorld->GetActiveSessionCount());
+ char curConnectQ [50];
+ sprintf(curConnectQ, "%u%", sWorld->GetQueuedSessionCount());
+ char ircupdt [50];
+ sprintf(ircupdt, "%u", sWorld->GetUpdateTime());
+ std::string str = secsToTimeString(sWorld->GetUptime());
+ std::string svnrev = _FULLVERSION;
+
+ float rdm = (sConfig->GetFloatDefault("Rate.Drop.Money", 1.0f));
+ float rxk = (sConfig->GetFloatDefault("Rate.XP.Kill", 1.0f));
+ float rxq = (sConfig->GetFloatDefault("Rate.XP.Quest", 1.0f));
+
+ Send_IRCA(ChanOrPM(CD), "\x2 Number Of Players Online:\x3\x31\x30 " + (std::string)clientsNum + "\xF |\x2 Max Since Last Restart:\x3\x31\x30 "+(std::string)maxClientsNum+"\xF |\x2 UpTime:\x3\x31\x30 "+str, true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), "\x2 Number Of Active Connections:\x3\x31\x30 " + (std::string)curConnectA + " Max("+ (std::string)maxConnectA +")\xF |\x2 Number Of Queued Connections:\x3\x31\x30 "+(std::string)curConnectQ+" Max("+(std::string)maxConnectQ+")\xF", true, CD->TYPE);
+ //Send_IRCA(ChanOrPM(CD), "\x2 Max Number Of Active Connections:\x3\x31\x30 " + (std::string)maxConnectA + "\xF |\x2 Max Number Of Queued Connections:\x3\x31\x30 "+(std::string)maxConnectQ+"\xF", true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), "\x2 Server:\x3\x31\x30 " +svnrev+ "\xF |\x2 Update Time:\x3\x31\x30 "+(std::string)ircupdt, true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2 Server Rates - [Monster XP:\x3\x31\x30 %d\xF\x2][Quest XP:\x3\x31\x30 %d\xF\x2][Money Drop Rate:\x3\x31\x30 %d\xF\x2]", int(rxk), int(rxq), int(rdm)), true, CD->TYPE);
+ //Send_IRCA(ChanOrPM(CD), "\x2 MotD:\x3\x31\x30 "+(std::string)sWorld->GetMotd(), true, CD->TYPE); dont need MOTD show with -info
+
+}
+void IRCCmd::Info_WG(_CDATA *CD)
+{
+ OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr->GetOutdoorPvPToZoneId(4197);
+
+ std::stringstream ss;
+
+ if (!pvpWG || !sWorld->getBoolConfig(CONFIG_OUTDOORPVP_WINTERGRASP_ENABLED))
+ {
+ ss << "Wintergrast Turned Off!";
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00304,08\037/!\\\037\017\00304 WinterGrasp Announcer \00304,08\037/!\\\037\017 %s",ss.str().c_str()), true, CD->TYPE);
+ return;
+ }
+
+ if (pvpWG->isWarTime())
+ {
+ ss << "Battle Running: ";
+ ss << secsToTimeString(pvpWG->GetTimer(), true).c_str();
+ ss << " | Horde: ";
+ ss << pvpWG->GetNumPlayersH();
+ ss << " - Alliance: ";
+ ss << pvpWG->GetNumPlayersA();
+ }
+ else
+ {
+ ss << "Time Until Next Round: ";
+ ss << secsToTimeString(pvpWG->GetTimer(), true).c_str();
+ ss << " | Horde: ";
+ ss << pvpWG->GetNumPlayersH();
+ ss << " - Alliance: ";
+ ss << pvpWG->GetNumPlayersA();
+ }
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00304,08\037/!\\\037\017\00304 WinterGrasp Announcer \00304,08\037/!\\\037\017 %s",ss.str().c_str()), true, CD->TYPE);
+
+}
+
+void IRCCmd::UnAuraAll(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ plr->RemoveAllAuras();
+ std::string iinfo = " \00313[" + _PARAMS[0] + "] : Has had all auras removed";
+ Send_IRCA(ChanOrPM(CD), iinfo, true, CD->TYPE);
+ }
+ else
+ {
+ std::string iinfo = " \00313[" + _PARAMS[0] + "] : Not found";
+ Send_IRCA(ChanOrPM(CD), iinfo, true, CD->TYPE);
+ }
+
+}
+
+void IRCCmd::Item_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+
+ normalizePlayerName(_PARAMS[0]);
+ Player *chr = GetPlayer(_PARAMS[0].c_str());
+ if(_PARAMS[1] == "add")
+ {
+ std::string s_param = _PARAMS[2];
+
+ char *args = (char*)s_param.c_str();
+ uint32 itemId = 0;
+ if(args[0]=='[')
+ {
+ char* citemName = strtok((char*)args, "]");
+ if(citemName && citemName[0])
+ {
+ std::string itemName = citemName+1;
+ WorldDatabase.EscapeString(itemName);
+ QueryResult result = WorldDatabase.PQuery("SELECT entry FROM item_template WHERE name = '%s'", itemName.c_str());
+ if (!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Item Not Found!", true, "ERROR");
+ return;
+ }
+ itemId = result->Fetch()->GetUInt16();
+ //delete result;
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"item [Exact Item Name] )", true, "ERROR");
+ return;
+ }
+ }
+ else
+ {
+ std::string itemName = s_param;
+ WorldDatabase.EscapeString(itemName);
+ QueryResult result = WorldDatabase.PQuery("SELECT entry FROM item_template WHERE name = '%s'", itemName.c_str());
+ if (result)
+ {
+ itemId = result->Fetch()->GetUInt16();
+ }
+ //delete result;
+
+ char* cId = strtok(args, " ");
+ if(!cId)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"item )", true, "ERROR");
+ return;
+ }
+ itemId = atol(cId);
+ }
+ char* ccount = strtok(NULL, " ");
+ int32 count = 1;
+ if (ccount) { count = atol(ccount); }
+ Player* plTarget = chr;
+ if(!plTarget)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Online!", true, "ERROR");
+ return;
+ }
+ ItemPrototype const *pProto = sObjectMgr->GetItemPrototype(itemId);
+ //ItemTemplate const* iProto = sObjectMgr->GetItemTemplate(itemId);
+ //Subtract
+ if (count < 0)
+ {
+ plTarget->DestroyItemCount(itemId, -count, true, false);
+ char itemid2[255];
+ sprintf(itemid2,"%d",itemId);
+ std::string itake = " \00313["+ _PARAMS[0] +"] : Has Had Item " +itemid2+ " Taken From Them!";
+ Send_IRCA(ChanOrPM(CD), itake, true, CD->TYPE);
+ return;
+ }
+ //Adding items
+ uint32 noSpaceForCount = 0;
+
+ // check space and find places
+ ItemPosCountVec dest;
+ uint8 msg = plTarget->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, count, &noSpaceForCount );
+ if( msg == EQUIP_ERR_INVENTORY_FULL ) // convert to possibel store amount
+ count -= noSpaceForCount;
+ else if( msg != EQUIP_ERR_OK ) // other error, can't add
+ {
+ char s_countForStore[255];
+ sprintf(s_countForStore,"%d",count);
+ std::string ierror = " \00313["+ _PARAMS[0] +"] : Could Not Create All Items! " +s_countForStore+ " Item(s) Were Not Created!";
+ Send_IRCA(ChanOrPM(CD), ierror, true, CD->TYPE);
+ return;
+ }
+ Item* item = plTarget->StoreNewItem( dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
+ if(count > 0 && item)
+ {
+ plTarget->SendNewItem(item,count,true,false);
+ QueryResult result = WorldDatabase.PQuery("SELECT name FROM item_template WHERE entry = %d", itemId);
+ char* dbitemname = NULL;
+ if (result)
+ {
+ dbitemname = (char*)result->Fetch()->GetCString();
+ }
+ std::string iinfo = " \00313[" + _PARAMS[0] + "] : Has Been Given Item "+dbitemname+". From: "+CD->USER.c_str()+".";
+ Send_IRCA(ChanOrPM(CD), iinfo, true, CD->TYPE);
+ //delete result;
+ }
+ if(noSpaceForCount > 0)
+ {
+ char s_countForStore[255];
+ sprintf(s_countForStore,"%d",noSpaceForCount);
+ std::string ierror = " \00313["+ _PARAMS[0] +"] : Could Not Create All Items! " +s_countForStore+ " Item(s) Were Not Created!";
+ Send_IRCA(ChanOrPM(CD), ierror, true, CD->TYPE);
+ return;
+ }
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Syntax Error! ( "+sIRC._cmd_prefx+"item )", true, "ERROR");
+ return;
+ }
+}
+
+void IRCCmd::Jail_Player(_CDATA *CD)
+{
+ if(ValidParams(CD->PARAMS, 1))
+ {
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ if (Player *plr = GetPlayer(_PARAMS[0]))
+ {
+ std::string sReason = "";
+ if(_PARAMS[1] == "release")
+ {
+ float rposx, rposy, rposz, rposo = 0;
+ uint32 rmapid = 0;
+ CharacterDatabase.EscapeString(_PARAMS[0]);
+ QueryResult result = CharacterDatabase.PQuery( "SELECT `map`, `position_x`, `position_y`, `position_z` FROM `character_homebind` WHERE `guid` = '%d'", plr->GetGUID() );
+ //QueryResult result = CharacterDatabase.PQuery( "SELECT `mapId`, `posX`, `posY`, `posZ` FROM `character_homebind` WHERE `guid` = ' %d '", plr->GetGUIDLow() );
+ //sLog->outDetail("ATTEMPT TO LOCATE HOMEBIND FOR PLAYER ID %d", plr->GetGUIDLow());
+ //sLog->outDetail("SELECT `mapId`, `posX`, `posY`, `posZ` FROM `character_homebind` WHERE `guid` = ' %d '", plr->GetGUIDLow());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ rmapid = fields[0].GetUInt16();
+ rposx = fields[1].GetFloat();
+ rposy = fields[2].GetFloat();
+ rposz = fields[3].GetFloat();
+ //delete result;
+ plr->SetMovement(MOVE_UNROOT);
+ plr->RemoveAurasDueToSpell(42201); // Eternal Silence
+ plr->RemoveAurasDueToSpell(23775); // Stun Forever
+ plr->RemoveAurasDueToSpell(9454); // Freeze
+ //plr->RemoveAllAuras();
+ plr->TeleportTo(rmapid, rposx, rposy, rposz, rposo);
+ Send_Player(plr, MakeMsg("You Have Been Released By: %s.", CD->USER.c_str()));
+ sReason = " \00313["+_PARAMS[0]+"] : Has Been Released By: "+CD->USER+".";
+ Send_IRCA(ChanOrPM(CD), sReason, true, CD->TYPE);
+ }
+ else // SQL FAIL CHECK!!!!
+ {
+ sReason = " \00313["+_PARAMS[0]+"] : ERROR SQL FAILED CHAR NOT FOUND!!!!!!: "+CD->USER+".";
+ Send_IRCA(ChanOrPM(CD), sReason, true, CD->TYPE);
+ }
+ }
+ else
+ {
+ if(_PARAMS[1] == "")
+ _PARAMS[1] = "No Reason Given.";
+ plr->TeleportTo(1, 16220.7f, 16398.3f, -64.3786f, 0.825313f);
+ plr->SetMovement(MOVE_ROOT);
+ plr->CastSpell(plr, 42201, true); // Eternal Silence
+ plr->CastSpell(plr, 23775, true); // Stun Forever
+ plr->CastSpell(plr, 9454, true); // Freeze
+ plr->CastSpell(plr, 45472, true); // parachute
+ Send_Player(plr, MakeMsg("You Have Been Jailed By: %s. Reason: %s.", CD->USER.c_str(), _PARAMS[1].c_str()));
+ sReason = " \00313["+_PARAMS[0]+"] : Has Been Jailed By: "+CD->USER+". Reason: "+_PARAMS[1]+".";
+ Send_IRCA(ChanOrPM(CD), sReason, true, CD->TYPE);
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Online!", true, "ERROR");
+ }
+}
+
+void IRCCmd::Kick_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ if(_PARAMS[1] == "")
+ _PARAMS[1] = "No Reason Given.";
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ plr->GetSession()->KickPlayer();
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Been Kicked By: "+CD->USER+". Reason: "+_PARAMS[1]+".", true, CD->TYPE);
+ if(sWorld->getBoolConfig(CONFIG_SHOW_KICK_IN_WORLD))
+ sIRC.Send_WoW_System("Player|cffff0000 "+_PARAMS[0]+"|r kicked by|cffff0000 "+CD->USER+"|r. Reason:|cffff0000"+_PARAMS[1]+"|r.");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Online!", true, "ERROR");
+}
+
+void IRCCmd::Kill_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ if(plr->isAlive())
+ {
+ plr->DealDamage(plr, plr->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ plr->SaveToDB();
+ if(_PARAMS[1] == "")
+ _PARAMS[1] = "No Reason Given.";
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\00313[%s] : Has Been Killed By: %s.", _PARAMS[0].c_str(), CD->USER.c_str()) + + + " Reason: "+_PARAMS[1]+".", true, CD->TYPE);
+ Send_Player(plr, MakeMsg("You Have Been Killed By: %s. Reason: %s.", CD->USER.c_str(), _PARAMS[1].c_str()));
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Already Dead!", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Online!", true, "ERROR");
+}
+
+void IRCCmd::Lookup_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if(_PARAMS[0] == "acct")
+ {
+ uint32 acctid = atoi(_PARAMS[1].c_str());
+ if(sAccountMgr->GetId(_PARAMS[1]))
+ acctid = sAccountMgr->GetId(_PARAMS[1]);
+ if(acctid > 0)
+ {
+ std::string DateTime = "%a, %b %d, %Y - %h:%i%p";
+ QueryResult result = LoginDatabase.PQuery("SELECT id, username, last_ip, (SELECT banreason FROM account_banned WHERE id = %d LIMIT 1) as banned, (SELECT banreason FROM ip_banned WHERE ip = last_ip) as bannedip, DATE_FORMAT(last_login, '%s') FROM `account` WHERE id = %d", acctid, DateTime.c_str(), acctid, acctid);
+ if(result)
+ {
+ Field *fields = result->Fetch();
+
+ uint32 id = fields[0].GetUInt32();
+ std::string usrname = fields[1].GetString();
+ //uint32 gm = fields[2].GetUInt32();
+ std::string lastip = fields[3].GetString();
+ std::string banreason = fields[4].GetString();
+ std::string banreasonip = fields[5].GetString();
+ std::string lastlogin = fields[6].GetString();
+ //delete result;
+ QueryResult result1 = LoginDatabase.PQuery("SELECT gmlevel FROM `account_access` WHERE id = %d", acctid);
+ Field *fields1 = result1->Fetch();
+ uint32 gm = fields1[0].GetUInt32();
+
+ QueryResult chars = CharacterDatabase.PQuery("SELECT guid, name, (SELECT SUM(totaltime) FROM characters WHERE account = %d) AS tottime FROM characters WHERE account = %u", id, id);
+ std::string characters = "None";
+ std::string totaccttime = "Never Logged In";
+ if(chars)
+ {
+ characters = "";
+ Field *fields = chars->Fetch();
+ totaccttime = SecToDay(fields[2].GetString());
+ for (uint64 i=0; i < chars->GetRowCount(); i++)
+ {
+ std::string guid = fields[0].GetString();
+ std::string charname = fields[1].GetString();
+ characters.append(charname+"("+guid+"), ");
+ chars->NextRow();
+ }
+ //delete chars;
+ }
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Username:\x3\x31\x30 %s \xF|\x2 AccountID:\x3\x31\x30 %d \xF|\x2 GM Level:\x3\x31\x30 %d \xF|\x2 Last IP:\x3\x31\x30 %s \xF|\x2 Last Login:\x3\x31\x30 %s", usrname.c_str(), id, gm, lastip.c_str(), lastlogin.c_str()), true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Total Play Time:\x3\x31\x30 %s \xF|\x2 Characters:\x3\x31\x30 %s ", totaccttime.c_str(), characters.c_str()), true, CD->TYPE);
+ if(banreason.length() > 1)
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\0034This User Has An Account Ban. Ban Reason: %s", banreason.c_str()), true, CD->TYPE);
+ if(banreasonip.length() > 1)
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\0034This User Has An IP Ban. Ban Reason: %s", banreasonip.c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Account ID." ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = LoginDatabase.PQuery("SELECT id, username FROM `account` WHERE username LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string accts = "\002Account Search Results:\x3\x31\x30 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string acctid = fields[0].GetString();
+ std::string acctname = fields[1].GetString();
+ accts.append(acctname+"("+acctid+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), accts, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Username. I Cant Find Any Users With Those Search Terms." ,true, "ERROR");
+ }
+ }
+ if(_PARAMS[0] == "char")
+ {
+ uint32 plguid = atoi(_PARAMS[1].c_str());
+ if(sObjectMgr->GetPlayerGUIDByName(_PARAMS[1].c_str()))
+ plguid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[1].c_str());
+ if(plguid > 0)
+ {
+ //QueryResult result = CharacterDatabase.PQuery("SELECT guid, account, name, race, class, online, money, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 54), ' ' , -1) AS level, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 152), ' ' , -1) AS guildid, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 153), ' ' , -1) AS guildrank, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 609), ' ' , -1) AS xp, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 610), ' ' , -1) AS maxxp, SUBSTRING_INDEX(SUBSTRING_INDEX(data, ' ' , 1145), ' ' , -1) AS gold, SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ' , 1600), ' ' , -1) AS hk, totaltime FROM characters WHERE guid =%i", plguid);
+ QueryResult result = CharacterDatabase.PQuery("SELECT guid, account, name, race, class, online, money, level, xp, money, totalKills, totaltime FROM characters WHERE guid =%d", plguid);
+ uint32 latency = 0;
+ Player *chr = ObjectAccessor::FindPlayer(plguid);
+ if(chr)
+ {
+ latency = chr->GetSession()->GetLatency();
+ }
+ char templatency [100];
+ sprintf(templatency, "%ums", latency);
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string pguid = fields[0].GetString();
+ std::string pacct = fields[1].GetString();
+ std::string pname = fields[2].GetString();
+ uint32 praceid = fields[3].GetUInt32();
+ uint32 pclassid = fields[4].GetUInt32();
+ std::string ponline = (fields[5].GetInt32() == 1 ? "\x3\x30\x33Online" : "\x3\x30\x34Offline\xF");
+ unsigned int money = fields[6].GetInt32();
+ std::string plevel = fields[7].GetString();
+ //uint32 pguildid = fields[8].GetUInt32();
+ uint32 pguildid = 0;
+ //uint32 pguildrank = fields[9].GetUInt32();
+ uint32 pguildrank = 0;
+ std::string pxp = fields[8].GetString();
+ //std::string pmaxxp = fields[11].GetString();
+ std::string pmaxxp = fields[8].GetString();
+ //unsigned int money = fields[12].GetInt32(); now in own column and field 6
+ std::string hk = fields[9].GetString();
+ std::string totaltim = SecToDay(fields[10].GetString());
+ //delete result;
+ /*std::string sqlquery = "SELECT `gmlevel` FROM `account_access` WHERE `id` = '" + pacct + "';";
+ QueryResult result = LoginDatabase.Query(sqlquery.c_str());
+ Field *fields2 = result->Fetch();
+ std::string pgmlvl = fields2[0].GetString();*/
+ std::string pgmlvl = "0";
+ //delete result;
+ std::string guildinfo = "";
+ /*if (pguildid != 0)
+ {
+ Guild* guild = sObjectMgr->GetGuildById(pguildid);
+ if (guild)
+ {
+ guildinfo = " " + guild->GetRankName(pguildrank) + " Of " + guild->GetName();
+ }
+ }
+ else guildinfo = " None";*/
+ ChrRacesEntry const* prace = sChrRacesStore.LookupEntry(praceid);
+ ChrClassesEntry const* pclass = sChrClassesStore.LookupEntry(pclassid);
+
+ if (atoi(plevel.c_str()) < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ plevel += " (" + pxp + "/" + pmaxxp + ")";
+ unsigned int gold = money / 10000;
+ unsigned int silv = (money % 10000) / 100;
+ unsigned int cop = (money % 10000) % 100;
+ char tempgold [100];
+ sprintf(tempgold, "\x2\x3\x30\x37%ug \x3\x31\x34%us \x3\x30\x35%uc\xF", gold, silv, cop);
+ if (ponline == "\x3\x30\x33Online")
+ {
+ Player * plr = sObjectAccessor->FindPlayerByName(pname.c_str());
+ if (plr)
+ {
+ AreaTableEntry const* area = GetAreaEntryByAreaID(plr->GetAreaId());
+ ponline += " in " + area->area_name[sWorld->GetDefaultDbcLocale()];
+ if (area->zone != 0)
+ {
+ AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone);
+ ponline += " (" + zone->area_name[sWorld->GetDefaultDbcLocale()] + (std::string)")";
+ }
+ }
+ }
+ std::string pinfo = "\x2 About Player:\x3\x31\x30 " +pname+ "\xF |\x2 GM Level:\x3\x31\x30 " +pgmlvl+ "\xF |\x2 AcctID:\x3\x31\x30 " +pacct+ "\xF |\x2 CharID:\x3\x31\x30 " +pguid+ " \xF |\x2 Played Time:\x2\x3\x31\x30 " +totaltim.c_str()+" \xF |\x2 Latency:\x2\x3\x31\x30 "+templatency;
+ std::string pinfo2 = "\x2 Race:\x2\x3\x31\x30 " + prace->name[sWorld->GetDefaultDbcLocale()] + (std::string)"\xF |\x2 Class:\x2\x3\x31\x30 " + pclass->name[sWorld->GetDefaultDbcLocale()] + "\xF |\x2 Level:\x2\x3\x31\x30 " + plevel + "\xF |\x2 Money:\x2 " + tempgold + "\xF |\x2 Status:\x2 " + ponline;
+ // pinfo3 = " :" + " \x2Honor Kills:\x2\x3\x31\x30 " + hk;
+ Send_IRCA(ChanOrPM(CD),pinfo , true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD),pinfo2 , true, CD->TYPE);
+ // Send_IRCA(ChanOrPM(CD),pinfo3 , true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Character ID. (GUID)" ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = CharacterDatabase.PQuery("SELECT guid, account, name FROM characters WHERE name LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string items = "\x2 Character Search Results:\x3\x31\x30 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string guid = fields[0].GetString();
+ std::string account = fields[1].GetString();
+ std::string name = fields[2].GetString();
+ MakeUpper(name);
+ items.append(name+"(Account:"+account+" - GUID:"+guid+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), items, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Character. I Cant Find Any Characters With Those Search Terms." ,true, "ERROR");
+ }
+ }
+ if(_PARAMS[0] == "creature")
+ {
+ std::string creature = _PARAMS[1];
+ if(atoi(creature.c_str()) > 0)
+ {
+ WorldDatabase.EscapeString(_PARAMS[1]);
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, modelid_A, name, (minlevel*maxlevel/2) as level, faction_A, armor, (SELECT count(*) FROM creature WHERE id = '%s') as spawns FROM creature_template WHERE entry = '%s';", _PARAMS[1].c_str(), _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+
+ uint32 entry = fields[0].GetUInt32();
+ uint32 modelid = fields[1].GetUInt32();
+ std::string name = fields[2].GetString();
+ uint32 level = fields[3].GetUInt32();
+ uint32 faction = fields[4].GetUInt32();
+ uint32 armor = fields[5].GetUInt32();
+ uint32 spawns = fields[6].GetUInt32();
+ //delete result;
+
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Name:\x3\x31\x30 %s \xF|\x2 CreatureID:\x3\x31\x30 %d \xF|\x2 DisplayID:\x3\x31\x30 %d \xF|\x2 Spawns:\x3\x31\x30 %d", name.c_str(), entry, modelid, spawns), true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Level:\x3\x31\x30 %d \xF|\x2 Faction:\x3\x31\x30 %d \xF|\x2 Armor:\x3\x31\x30 %d", level, faction, armor), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Creature ID." ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, name FROM creature_template WHERE name LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string items = "\002Creature Search Results:\x3\x31\x30 ";
+ //Send_IRCA(ChanOrPM(CD), "", true, CD->TYPE);
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string CreatureID = fields[0].GetString();
+ std::string Name = fields[1].GetString();
+ items.append(Name+"("+CreatureID+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), items, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Creature. I Cant Find Any Creatures With Those Search Terms." ,true, "ERROR");
+ }
+ }
+ if(_PARAMS[0] == "faction")
+ {
+ std::string faction = _PARAMS[1];
+ if(atoi(faction.c_str()) > 0)
+ {
+ FactionEntry const *factionEntry = sFactionStore.LookupEntry(atoi(faction.c_str()));
+ if(factionEntry)
+ {
+ std::stringstream name;
+ name << factionEntry->name[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2 Faction:\x3\x31\x30 %s \xF|\x2 FactionID:\x3\x31\x30 %s",rname.c_str(), faction.c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown FactionID." ,true, "ERROR");
+
+ }
+ else
+ {
+ uint32 counter = 0;
+ std::string factions = "\002Faction Search Results:\x3\x31\x30 ";
+ for (uint32 id = 0; id < sFactionStore.GetNumRows(); id++)
+ {
+ FactionEntry const *factionEntry = sFactionStore.LookupEntry(id);
+ if(factionEntry)
+ {
+ MakeLower( _PARAMS[1] );
+ std::stringstream name;
+ name<< factionEntry->name[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ MakeLower( rname );
+ if (rname.find(_PARAMS[1]) != std::string::npos && counter < 10)
+ {
+ char factionid[100];
+ sprintf(factionid, "%d", id);
+ factions.append(rname+"("+factionid+")\xF | \x3\x31\x30\x2");
+ ++counter;
+ }
+ }
+
+ }
+
+ if(counter == 0)
+ factions.append("No Factions Found.");
+ Send_IRCA(ChanOrPM(CD), factions, true, CD->TYPE);
+
+ }
+ }
+ if(_PARAMS[0] == "go")
+ {
+ std::string gobject = _PARAMS[1];
+ if(atoi(gobject.c_str()) > 0)
+ {
+ WorldDatabase.EscapeString(_PARAMS[1]);
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, type, displayId, name, faction, (SELECT count(*) FROM gameobject WHERE id = '%s') as spawns FROM gameobject_template WHERE entry = '%s';", _PARAMS[1].c_str(), _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+
+ uint32 entry = fields[0].GetUInt32();
+ uint32 type = fields[1].GetUInt32();
+ uint32 modelid = fields[2].GetUInt32();
+ std::string name = fields[3].GetString();
+ uint32 faction = fields[4].GetUInt32();
+ uint32 spawns = fields[5].GetUInt32();
+ //delete result;
+
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2GO Name:\x3\x31\x30 %s \xF|\x2 GameobjectID:\x3\x31\x30 %d \xF|\x2 DisplayID:\x3\x31\x30 %d \xF|\x2 Spawns:\x3\x31\x30 %d", name.c_str(), entry, modelid, spawns), true, CD->TYPE);
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Type:\x3\x31\x30 %d \xF|\x2 Faction:\x3\x31\x30 %d", type, faction), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Creature ID." ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, name FROM gameobject_template WHERE name LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string gos = "\002Gameobject Search Results:\x3\x31\x30 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string GOID = fields[0].GetString();
+ std::string GoName = fields[1].GetString();
+ gos.append(GoName+"("+GOID+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), gos, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Game Object. I Cant Find Any Game Object's With Those Search Terms." ,true, "ERROR");
+ }
+ }
+ if(_PARAMS[0] == "item")
+ {
+ std::string item = _PARAMS[1];
+ if(atoi(item.c_str()) > 0)
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, name, displayid, (SELECT count(*) FROM creature_loot_template WHERE item = '%s') as loot FROM `item_template` WHERE entry = %s", _PARAMS[1].c_str(), _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ //QueryResult result2 = CharacterDatabase.PQuery("SELECT count(*) FROM `character_inventory` WHERE item = %s", _PARAMS[1].c_str());
+ //Field *fields2 = result2->Fetch();
+ //uint32 charcnt = fields2[0].GetUInt32();
+ uint32 charcnt = 0;
+ //delete result2;
+
+ uint32 ItemID = fields[0].GetUInt32();
+ std::string ItmName = fields[1].GetString();
+ uint32 DisplayID = fields[2].GetUInt32();
+ uint32 loots = 0;
+ loots = fields[3].GetUInt32();
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Item:\x3\x31\x30 %s \xF|\x2 ItemID:\x3\x31\x30 %d \xF|\x2 DisplayID:\x3\x31\x30 %d \xF|\x2 Owned By:\x3\x31\x30 %d players \xF|\x2 Dropped By:\x3\x31\x30 %d creatures", ItmName.c_str(), ItemID, DisplayID, charcnt, loots), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown ItemID." ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, name FROM `item_template` WHERE name LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string items = "\002Item Search Results:\x3\x31\x30 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string ItemID = fields[0].GetString();
+ std::string ItemName = fields[1].GetString();
+ items.append(ItemName+"("+ItemID+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), items, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Item. I Cant Find Any Items With Those Search Terms." ,true, "ERROR");
+ }
+ }
+ if(_PARAMS[0] == "quest")
+ {
+ std::string quest = _PARAMS[1];
+ if(atoi(quest.c_str()) > 0)
+ {
+ WorldDatabase.EscapeString(_PARAMS[1]);
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, Title FROM quest_template WHERE entry = '%s';", _PARAMS[1].c_str(), _PARAMS[1].c_str());
+ if(result)
+ {
+ QueryResult result2 = CharacterDatabase.PQuery("SELECT count(*) FROM character_queststatus WHERE quest = '%s' AND status = '1';", _PARAMS[1].c_str());
+ Field *fields2 = result2->Fetch();
+ uint32 status = fields2[0].GetUInt32();
+ //delete result2;
+
+ Field *fields = result->Fetch();
+ uint32 entry = fields[0].GetUInt32();
+ std::string name = fields[1].GetString();
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Quest Name:\x3\x31\x30 %s \xF|\x2 QuestID:\x3\x31\x30 %d \xF|\x2 Completed:\x3\x31\x30 %d times", name.c_str(), entry, status), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Quest ID." ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT entry, Title FROM quest_template WHERE Title LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string quests = "\002Quest Search Results:\x3\x31\x30 ";
+ //Send_IRCA(ChanOrPM(CD), "", true, CD->TYPE);
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string QuestID = fields[0].GetString();
+ std::string QuestName = fields[1].GetString();
+ quests.append(QuestName+"("+QuestID+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), quests, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Quest. I Cant Find Any Quest's With Those Search Terms." ,true, "ERROR");
+ }
+ }
+ if(_PARAMS[0] == "skill")
+ {
+ std::string skill = _PARAMS[1];
+ if(atoi(skill.c_str()) > 0)
+ {
+ SkillLineEntry const *skillInfo = sSkillLineStore.LookupEntry(atoi(skill.c_str()));
+ if(skillInfo)
+ {
+ std::stringstream name;
+ name << skillInfo->name[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Skill:\x3\x31\x30 %s \xF|\x2 SkillID:\x3\x31\x30 %s",rname.c_str(), skill.c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown SkillID." ,true, "ERROR");
+
+ }
+ else
+ {
+ uint32 counter = 0;
+ std::string skills = "\002Skill Search Results:\x3\x31\x30 ";
+ for (uint32 id = 0; id < sSkillLineStore.GetNumRows(); id++)
+ {
+ SkillLineEntry const *skillInfo = sSkillLineStore.LookupEntry(id);
+ if(skillInfo)
+ {
+ MakeLower( _PARAMS[1] );
+ std::stringstream name;
+ name << skillInfo->name[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ MakeLower( rname );
+ if (rname.find(_PARAMS[1]) != std::string::npos && counter < 10)
+ {
+ char skillid[100];
+ sprintf(skillid, "%d", id);
+ skills.append(rname+"("+skillid+")\xF | \x3\x31\x30\x2");
+ ++counter;
+ }
+ }
+ }
+ if(counter == 0)
+ skills.append("No Skills Found.");
+ Send_IRCA(ChanOrPM(CD), skills, true, CD->TYPE);
+ }
+ }
+ if(_PARAMS[0] == "spell")
+ {
+ std::string spell = _PARAMS[1];
+ if(atoi(spell.c_str()) > 0)
+ {
+ SpellEntry const *spellInfo = sSpellStore.LookupEntry(atoi(spell.c_str()));
+ if(spellInfo)
+ {
+ std::stringstream name;
+ name << spellInfo->SpellName[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Spell:\x3\x31\x30 %s \xF|\x2 SpellID:\x3\x31\x30 %s",rname.c_str(), spell.c_str()), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown SpellID." ,true, "ERROR");
+
+ }
+ else
+ {
+ uint32 counter = 0;
+ std::string spells = "\002Spell Search Results:\x3\x31\x30 ";
+ for (uint32 id = 0; id < sSpellStore.GetNumRows(); id++)
+ {
+ SpellEntry const *spellInfo = sSpellStore.LookupEntry(id);
+ if(spellInfo)
+ {
+ MakeLower( _PARAMS[1] );
+ std::stringstream name;
+ name << spellInfo->SpellName[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ MakeLower(rname);
+ if (rname.find(_PARAMS[1]) != std::string::npos && counter < 10)
+ {
+ char itemid[100];
+ sprintf(itemid, "%d", id);
+ spells.append(rname+"("+itemid+")\xF | \x3\x31\x30\x2");
+ ++counter;
+ }
+ }
+ }
+ if(counter == 0)
+ spells.append("No Spells Found.");
+ Send_IRCA(ChanOrPM(CD), spells, true, CD->TYPE);
+ }
+ }
+ if(_PARAMS[0] == "tele")
+ {
+ std::string tele = _PARAMS[1];
+ WorldDatabase.EscapeString(_PARAMS[1]);
+ if(atoi(tele.c_str()) > 0)
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT * FROM `game_tele` WHERE id = %s", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+
+ uint32 teleid = fields[0].GetUInt32();
+ uint32 pos_x = fields[1].GetUInt32();
+ uint32 pos_y = fields[2].GetUInt32();
+ uint32 pos_z = fields[3].GetUInt32();
+ uint32 oriet = fields[4].GetUInt32();
+ uint32 map = fields[5].GetUInt32();
+ std::string telname = fields[6].GetString();
+ //delete result;
+
+ Send_IRCA(ChanOrPM(CD), MakeMsg("\x2Tele Name:\x3\x31\x30 %s \xF|\x2 TeleID:\x3\x31\x30 %d \xF|\x2 Coordinates:\x3\x31\x30 [X: %d, Y: %d, Z: %d, MAP: %d, Orientation: %d]", telname.c_str(), teleid, pos_x, pos_y, pos_z, map, oriet), true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Teleport Location ID." ,true, "ERROR");
+ }
+ else
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT id, name FROM `game_tele` WHERE name LIKE '%%%s%%' LIMIT 10", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string teles = "\002Tele Location Search Results:\x3\x31\x30 ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string TeleID = fields[0].GetString();
+ std::string TeleName = fields[1].GetString();
+ teles.append(TeleName+"("+TeleID+")\xF | \x3\x31\x30\x2");
+ result->NextRow();
+ }
+ Send_IRCA(ChanOrPM(CD), teles, true, CD->TYPE);
+ //delete result;
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unknown Item. I Cant Find Any Items With Those Search Terms." ,true, "ERROR");
+ }
+ }
+}
+
+void IRCCmd::Level_Player(_CDATA *CD)
+{
+
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ Player* plr = GetPlayer(_PARAMS[0]);
+ if (!plr)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Online, Offline edit will break char, cancled, use minimnager.", true, "ERROR");
+ return;
+ }
+ std::string player = _PARAMS[0];
+ normalizePlayerName(player);
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(player.c_str());
+ std::string s_newlevel = _PARAMS[1];
+ uint8 i_newlvl = atoi(s_newlevel.c_str());
+ if(!guid)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Found!", true, "ERROR");
+ return;
+ } else if ( i_newlvl < 1 || i_newlvl > sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL) )
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Level Must Be Between 1 And 85!"), true, "ERROR");
+ return;
+ } else
+ {
+ Player *chr = sObjectMgr->GetPlayer(guid);
+ int32 i_oldlvl = chr->getLevel();
+ if(chr)
+ {
+ chr->GiveLevel(i_newlvl);
+ chr->InitTalentForLevel();
+ chr->SetUInt32Value(PLAYER_XP,0);
+ WorldPacket data;
+ ChatHandler CH(chr->GetSession());
+ if(i_oldlvl == i_newlvl)
+ CH.FillSystemMessageData(&data, "Your level progress has been reset.");
+ else
+ if(i_oldlvl < i_newlvl)
+ CH.FillSystemMessageData(&data, fmtstring("You have been leveled up (%i)",i_newlvl-i_oldlvl));
+ else
+ if(i_oldlvl > i_newlvl)
+ CH.FillSystemMessageData(&data, fmtstring("You have been leveled down (%i)",i_newlvl-i_oldlvl));
+ chr->GetSession()->SendPacket( &data );
+ }
+ else
+ {
+ //Tokens values;
+ //Player::LoadValuesArrayFromDB(values,guid);
+ //Player::SetUInt32ValueInArray(values,UNIT_FIELD_LEVEL,i_newlvl);
+ //Player::SetUInt32ValueInArray(values,PLAYER_XP,0);
+ //Player::SaveValuesArrayInDB(values,guid);
+ Send_IRCA(CD->USER, "\0034[ERROR] : NOT SUPPORTED!", true, "ERROR");
+ }
+ }
+ Send_IRCA(ChanOrPM(CD), "\00313[" + _PARAMS[0]+ "] : Has Been Leveled To " + _PARAMS[1] + ". By: "+CD->USER+".", true, CD->TYPE);
+
+}
+
+void IRCCmd::Money_Player(_CDATA *CD)
+{
+
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ std::string player = _PARAMS[0];
+ normalizePlayerName(player);
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(player.c_str());
+ Player *chr = ObjectAccessor::FindPlayer(guid);
+ Player* plr = GetPlayer(_PARAMS[0]);
+ if (!plr)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Online, Offline edit will break char, cancled, use minimnager.", true, "ERROR");
+ return;
+ }
+
+ std::string s_money = _PARAMS[1];
+ int32 money = atoi(s_money.c_str());
+ unsigned int gold = money / 10000;
+ unsigned int silv = (money % 10000) / 100;
+ unsigned int cop = (money % 10000) % 100;
+ char tempgold [100];
+ sprintf(tempgold, "\x2\x3\x30\x37%ug \x3\x31\x34%us \x3\x30\x35%uc\xF", gold, silv, cop);
+ if(!guid)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Found!", true, "ERROR");
+ return;
+ }
+ else
+ {
+ Player *chr = ObjectAccessor::FindPlayer(guid);
+ uint32 moneyuser = 0;
+ if(chr)
+ moneyuser = chr->GetMoney();
+ else {
+ CharacterDatabase.EscapeString(player);
+ std::string sqlquery = "SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data, ' ' , 1462), ' ' , -1) AS `gold` FROM `characters` WHERE `name` = '"+player+"';";
+ QueryResult result = CharacterDatabase.Query(sqlquery.c_str());
+ Field *fields = result->Fetch();
+ moneyuser = fields[0].GetInt32();
+ //delete result;
+ }
+ int32 addmoney = money;
+ int32 newmoney = moneyuser + addmoney;
+ char s_newmoney[255];
+ sprintf(s_newmoney,"%d",newmoney);
+ if(addmoney < 0)
+ {
+ sLog->outDetail("USER1: %i, ADD: %i, DIF: %i\\n", moneyuser, addmoney, newmoney);
+ if(newmoney <= 0 )
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+player+"] : Has Had All Money Taken By: "+CD->USER.c_str()+".", true, CD->TYPE);
+ if(chr)
+ {
+ chr->SetMoney(0);
+ Send_Player(chr, MakeMsg("You Have Been Liquidated By: %s. Total Money Is Now 0.", CD->USER.c_str()));
+ }
+ else
+ CharacterDatabase.PExecute("UPDATE `characters` SET data=concat(substring_index(data,' ',1462-1),' ','%u',' ', right(data,length(data)-length(substring_index(data,' ',1462))-1) ) where guid='%u'",newmoney, guid );
+ }
+ else
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+player+"] : Has Had ("+s_money+"\00313) Taken From Them By: "+CD->USER.c_str()+".", true, CD->TYPE);
+ if(chr)
+ {
+ chr->SetMoney( newmoney );
+ Send_Player(chr, MakeMsg("You Have Had %s Copper Taken From You By: %s.", _PARAMS[1].c_str(), CD->USER.c_str()));
+ }
+ else
+ CharacterDatabase.PExecute("UPDATE `characters` SET data=concat(substring_index(data,' ',1462-1),' ','%u',' ', right(data,length(data)-length(substring_index(data,' ',1462))-1) ) where guid='%u'",newmoney, guid );
+ }
+ }
+ else
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+player+"] : Has Been Given ("+tempgold+"\00313) From: "+CD->USER.c_str()+".", true, CD->TYPE);
+ if(chr)
+ {
+ chr->ModifyMoney( addmoney );
+ Send_Player(chr, MakeMsg("You Have Been Given %s Copper. From: %s.", _PARAMS[1].c_str(), CD->USER.c_str()));
+ }
+ else
+ CharacterDatabase.PExecute("UPDATE `characters` SET data=concat(substring_index(data,' ',1462-1),' ','%u',' ', right(data,length(data)-length(substring_index(data,' ',1462))-1) ) where guid='%u'",newmoney, guid );
+ }
+ }
+}
+
+void IRCCmd::Mute_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ normalizePlayerName(_PARAMS[0]);
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[0]);
+ if(guid)
+ {
+ if(_PARAMS[1] == "release")
+ {
+ Player* plr = ObjectAccessor::FindPlayer(guid);
+ uint32 account_id = 0;
+ account_id = sObjectMgr->GetPlayerAccountIdByGUID(guid);
+ LoginDatabase.PExecute("UPDATE `account` SET `mutetime` = '0' WHERE `id` = '%u'", account_id );
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Been UnMuted By: "+CD->USER+"." , true, CD->TYPE);
+ if(plr)
+ {
+ plr->GetSession()->m_muteTime = 0;
+ Send_Player(plr, MakeMsg("You Have Been UnMuted By: %s.", CD->USER.c_str()));
+ }
+ }
+ else
+ {
+ if(_PARAMS[2] == "")
+ _PARAMS[2] = "No Reason Given";
+ Player* plr = ObjectAccessor::FindPlayer(guid);
+ time_t mutetime = time(NULL) + atoi(_PARAMS[1].c_str())*60;
+ uint32 account_id = 0;
+ account_id = sObjectMgr->GetPlayerAccountIdByGUID(guid);
+ if(plr) plr->GetSession()->m_muteTime = mutetime;
+ LoginDatabase.PExecute("UPDATE `account` SET `mutetime` = " UI64FMTD " WHERE `id` = '%u'",uint64(mutetime), account_id );
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Been Muted By: "+CD->USER+". For: "+_PARAMS[1]+" Minutes. Reason: "+_PARAMS[2] , true, CD->TYPE);
+ if(plr) Send_Player(plr, MakeMsg("You Have Been Muted By: %s. For: %s Minutes. Reason: %s", CD->USER.c_str(), _PARAMS[1].c_str(), _PARAMS[2].c_str()));
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Does Not Exist!", true, "ERROR");
+}
+
+void IRCCmd::Online_Players(_CDATA *CD)
+{
+ sIRC.Script_Lock[MCS_Players_Online] = true;
+ ACE_Based::Thread script(new mcs_OnlinePlayers(CD));
+}
+
+void IRCCmd::PM_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ if(plr->isAcceptWhispers())
+ {
+ std::string sMsg = MakeMsg("|cffFE87FD[%s] Whispers: %s|r", CD->USER.c_str(), _PARAMS[1].c_str());
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_SYSTEM;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint64)plr->GetGUID();
+ data << (uint32)0;
+ data << (uint64)plr->GetGUID();
+ data << (uint32)(sMsg.length()+1);
+ data << sMsg;
+ data << (uint8)0;
+ plr->GetSession()->SendPacket(&data);
+ plr->SendPlaySound(3081, true);
+ Send_IRCA(ChanOrPM(CD), "\00313To ["+_PARAMS[0]+"] : "+_PARAMS[1]+".", true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Is Not Accepting Private Messages!", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player not online!", true, "ERROR");
+}
+
+void IRCCmd::Restart_Trinity(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+ if(_PARAMS[0] == "cancel")
+ {
+ sWorld->ShutdownCancel();
+ Send_IRCA(ChanOrPM(CD), "\0034Server Restart Has Been Cancelled.", true, CD->TYPE);
+ }
+
+ int32 i_time = atoi(_PARAMS[0].c_str());
+ if (i_time < 0)
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Please Enter A Number! And No Negative Numbers! "+_PARAMS[0]+" Seconds!?", true, CD->TYPE);
+ return;
+ }
+ if (i_time > 1)
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Has Requested Server To Restart In "+_PARAMS[0]+" Seconds!", true, CD->TYPE);
+ sWorld->ShutdownServ(i_time,SHUTDOWN_MASK_RESTART, RESTART_EXIT_CODE);
+ Delay(i_time*1000);
+ Send_IRCA(ChanOrPM(CD), "\0034Server Will Now Restart.. Be Back In A Flash!", true, CD->TYPE);
+ }
+}
+
+void IRCCmd::Revive_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ if(plr->isDead())
+ {
+ plr->ResurrectPlayer(0.5f);
+ plr->SpawnCorpseBones();
+ plr->SaveToDB();
+ sIRC.Send_IRC_Channel(ChanOrPM(CD), " \00313["+_PARAMS[0]+"] : Has Been Revived By: " + CD->USER, true, CD->TYPE);
+ Send_Player(plr, MakeMsg("You Have Been Revived By: %s.", CD->USER.c_str()));
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Dead!", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : "+_PARAMS[0]+" Is Not Online!", true, "ERROR");
+}
+
+void IRCCmd::Saveall_Player(_CDATA *CD)
+{
+ sObjectAccessor->SaveAllPlayers();
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Has Saved All Players!", true, CD->TYPE);
+}
+
+void IRCCmd::Server(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ if(_PARAMS[0] == "setmotd")
+ {
+ sWorld->SetMotd(_PARAMS[1]);
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Has Set New Message Of The Day To: "+_PARAMS[1], true, CD->TYPE);
+ }
+ /*if(_PARAMS[0] == "flusharenapoints")
+ {
+ sArenaTeamMgr->DistributeArenaPoints();
+ }*/
+}
+
+void IRCCmd::Shutdown_Trinity(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 1);
+ if(_PARAMS[0] == "cancel")
+ {
+ sWorld->ShutdownCancel();
+ Send_IRCA(ChanOrPM(CD), "\0034Server Shutdown Has Been Cancelled.", true, CD->TYPE);
+ }
+
+ int32 i_time = atoi(_PARAMS[0].c_str());
+ if (i_time < 0)
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Please Enter A Number! And No Negative Numbers! "+_PARAMS[0]+" Seconds!?", true, CD->TYPE);
+ return;
+ }
+ if (i_time > 1)
+ {
+ Send_IRCA(ChanOrPM(CD), "\00313["+CD->USER+"] : Has Requested Server To Be Shut Down In "+_PARAMS[0]+" Seconds!", true, CD->TYPE);
+ sWorld->ShutdownServ(i_time, 0 , SHUTDOWN_EXIT_CODE);
+ Delay(i_time*1000);
+ Send_IRCA(ChanOrPM(CD), "\0034Server Will Now Shut Down.. Good Bye!", true, CD->TYPE);
+ }
+}
+
+void IRCCmd::Spell_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 3);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ uint32 spell = atoi(_PARAMS[2].c_str());
+ SpellEntry const *spellInfo = sSpellStore.LookupEntry(spell);
+ if (Player* plr = GetPlayer(_PARAMS[0]))
+ {
+ if(spellInfo)
+ {
+ std::stringstream name;
+ name << spellInfo->SpellName[sWorld->GetDefaultDbcLocale()];
+ std::string rname = name.str().c_str();
+ if(_PARAMS[1] == "cast")
+ {
+ plr->CastSpell(plr, spell, true);
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Had Spell "+rname+" Casted On Them.", true, CD->TYPE);
+ }
+ if(_PARAMS[1] == "learn")
+ {
+ plr->learnSpell(spell, true);
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Learned Spell "+rname+".", true, CD->TYPE);
+ }
+ if(_PARAMS[1] == "unlearn")
+ {
+ plr->removeSpell(spell);
+ Send_IRCA(ChanOrPM(CD), "\00313["+_PARAMS[0]+"] : Has Unlearned Spell "+rname+".", true, CD->TYPE);
+ }
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Incorrect Spell ID!", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Player Not Online!", true, "ERROR");
+
+}
+
+void IRCCmd::Sysmsg_Server(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, CD->PCOUNT);
+ std::string ircchan = "#";
+ ircchan += sIRC._irc_chan[sIRC.anchn].c_str();
+ if(_PARAMS[0] == "a")
+ {
+ std::string str = _PARAMS[1];
+ std::string ancmsg = MakeMsg("\00304,08\037/!\\\037\017\00304 System Message \00304,08\037/!\\\037\017 %s",_PARAMS[1].c_str());
+ sWorld->SendWorldText(11997,str.c_str());
+ sIRC.Send_IRC_Channel(ircchan, ancmsg, true);
+ }
+ else if (_PARAMS[0] == "e")
+ {
+ std::string str = _PARAMS[1];
+ std::string notstr = "[Server Event]: " + _PARAMS[1];
+ std::string notmsg = MakeMsg("\00304,08\037/!\\\037\017\00304 Server Event \00304,08\037/!\\\037\017 %s",_PARAMS[1].c_str());
+ WorldPacket data(SMSG_NOTIFICATION, (notstr.size()+1));
+ data << notstr;
+ WorldPacket data2(SMSG_PLAY_SOUND,32);
+ data2 << (uint32)1400;
+ sWorld->SendGlobalMessage(&data2);
+ sWorld->SendGlobalMessage(&data);
+ sWorld->SendWorldText(11998,str.c_str());
+ sIRC.Send_IRC_Channel(ircchan, notmsg, true);
+ }
+ else if (_PARAMS[0] == "n")
+ {
+ std::string str = "Global notify: " + _PARAMS[1];
+ std::string notmsg = MakeMsg("\00304,08\037/!\\\037\017\00304 Global Notify \00304,08\037/!\\\037\017 %s",_PARAMS[1].c_str());
+ WorldPacket data(SMSG_NOTIFICATION, (str.size()+1));
+ data << str;
+ sWorld->SendGlobalMessage(&data);
+ sIRC.Send_IRC_Channel(ircchan, notmsg, true);
+ }
+ else if (_PARAMS[0] == "gm")
+ {
+ std::string str = "GM Announcement: " + _PARAMS[1];
+ WorldPacket data(SMSG_NOTIFICATION, (str.size()+1));
+ data << str;
+ sWorld->SendGlobalGMMessage(&data);
+
+ }
+ else if (_PARAMS[0] == "add")
+ {
+ WorldDatabase.PExecute( "INSERT INTO IRC_AutoAnnounce (message, addedby) VALUES ('%s', '%s')", _PARAMS[1].c_str(), CD->USER.c_str());
+ std::string str = _PARAMS[1];
+ std::string ancmsg = MakeMsg("\00304,08\037/!\\\037\017\00304 Automatic System Message \00304,08\037/!\\\037\017 %s",_PARAMS[1].c_str());
+ sWorld->SendWorldText(11999,str.c_str());
+ sIRC.Send_IRC_Channel(ircchan, ancmsg, true);
+ }
+ else if (_PARAMS[0] == "del")
+ {
+ WorldDatabase.PExecute( "DELETE FROM IRC_AutoAnnounce WHERE id = %s", _PARAMS[1].c_str());
+ Send_IRCA(ChanOrPM(CD), MakeMsg("Deleted Automatic Announcement Message ID: %s", _PARAMS[1].c_str()), true, CD->TYPE);
+ }
+ else if (_PARAMS[0] == "list")
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT * FROM IRC_AutoAnnounce LIMIT 5;", _PARAMS[1].c_str());
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string id = fields[0].GetString();
+ std::string message = fields[1].GetString();
+ std::string addedby = fields[2].GetString();
+ Send_IRCA(ChanOrPM(CD), MakeMsg("ID: %s - Added By: %s - Message: %s", id.c_str(), addedby.c_str(), message.c_str()), true, CD->TYPE);
+ result->NextRow();
+ }
+ //delete result;
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Auto Announce Messages Are In The Database.", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Please Use (a-Announce)(n-Notify)(e-Event) As Second Parameter!", true, "ERROR");
+}
+
+void IRCCmd::Tele_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 4);
+ if(AcctLevel(_PARAMS[0]) > GetLevel(CD->USER) && (sIRC.BOTMASK & 512)!= 0)
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : Nice Try, This Player Has A Higher GM Level Than You! [ %i ]", AcctLevel(_PARAMS[0])), true, "ERROR");
+ return;
+ }
+ bool DoTeleport = false;
+ float pX, pY, pZ, pO = 0;
+ uint32 mapid = 0;
+ std::string rMsg = " \0034[ERROR] : Teleport Failed!";
+ std::string wMsg = "Invalid Tele Location";
+ Player* plr = GetPlayer(_PARAMS[0]);
+ if(plr)
+ {
+ if(plr->isInFlight() || plr->isInCombat())
+ {
+ Send_IRCA(CD->USER, MakeMsg("\0034[ERROR] : %s Is Busy And Cannot Be Teleported! They Could Be In Combat, Or Flying.",_PARAMS[0].c_str()), true, "ERROR");
+ return;
+ }
+ }
+ if(_PARAMS[1] == "l" || _PARAMS[1].size() > 2)
+ {
+ if(_PARAMS[1].size() > 1)
+ _PARAMS[2] = _PARAMS[1];
+ WorldDatabase.EscapeString(_PARAMS[2]);
+ QueryResult result = WorldDatabase.PQuery("SELECT position_x, position_y, position_z, orientation, map FROM game_tele WHERE name='%s';", _PARAMS[2].c_str());
+ if (result)
+ {
+ Field *fields = result->Fetch();
+ pX = fields[0].GetFloat();
+ pY = fields[1].GetFloat();
+ pZ = fields[2].GetFloat();
+ pO = fields[3].GetFloat();
+ mapid = fields[4].GetUInt16();
+ //delete result;
+ rMsg = MakeMsg(" \00313[%s] : Teleported To %s! By: %s.",
+ _PARAMS[0].c_str(),
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Have Been Teleported To %s By: %s.",
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ DoTeleport = true;
+ }
+ else
+ {
+ WorldDatabase.EscapeString(_PARAMS[2]);
+ QueryResult result = WorldDatabase.PQuery("SELECT name FROM game_tele WHERE name LIKE '%%%s%%' LIMIT 7;", _PARAMS[2].c_str());
+ if (result)
+ {
+ std::string telename = "<> ";
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ Field *fields = result->Fetch();
+ telename.append(fields[0].GetString());
+ result->NextRow();
+ telename.append(" <> ");
+ }
+ //delete result;
+ Send_IRCA(CD->USER, "I Cannot Find Location: "+_PARAMS[2]+" . Perhaps One Of These Will Work For You.", true, "ERROR");
+ Send_IRCA(CD->USER, telename, true, "ERROR");
+ return;
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Location Not Found! Nothing Even Close Found!", true, "ERROR");
+ return;
+ }
+ }
+ else if(_PARAMS[1] == "c")
+ {
+ std::string* _PARAMSA = getArray(_PARAMS[2], 4);
+ pX = atof(_PARAMSA[1].c_str());
+ pY = atof(_PARAMSA[2].c_str());
+ pZ = atof(_PARAMSA[3].c_str());
+ mapid = atoi(_PARAMSA[0].c_str());
+ rMsg = MakeMsg(" \00313[%s] : Teleported To Map: %s. Position: X(%s) Y(%s) Z(%s)! By: %s.",
+ _PARAMS[0].c_str(),
+ _PARAMSA[0].c_str(),
+ _PARAMSA[1].c_str(),
+ _PARAMSA[2].c_str(),
+ _PARAMSA[3].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Have Been Teleported To Map: %s. Position: X(%s) Y(%s) Z(%s)! By: %s.",
+ _PARAMSA[0].c_str(),
+ _PARAMSA[1].c_str(),
+ _PARAMSA[2].c_str(),
+ _PARAMSA[3].c_str(),
+ CD->USER.c_str());
+ DoTeleport = true;
+ }
+ else if(_PARAMS[1] == "r")
+ {
+ if(plr)
+ {
+ pX = plr->m_recallX;
+ pY = plr->m_recallY;
+ pZ = plr->m_recallZ;
+ pO = plr->m_recallO;
+ mapid = plr->m_recallMap;
+ rMsg = MakeMsg(" \00313[%s] : Has Been Recalled To Their Previous Location.",
+ _PARAMS[0].c_str());
+ wMsg = MakeMsg("You Have Been Recalled To Your Previous Location. By: %s",
+ CD->USER.c_str());
+ DoTeleport = true;
+ }
+ else
+ {
+ Send_IRCA(CD->USER, MakeMsg("\00313[%s] : Cannot Be Recalled, They Are Not Online.", _PARAMS[0].c_str()), true, "ERROR");
+ return;
+ }
+
+ }
+ else if(_PARAMS[1] == "to")
+ {
+ Player* plr2 = GetPlayer(_PARAMS[2]);
+ if(plr2)
+ {
+ plr2->GetContactPoint(plr, pX, pY, pZ);
+ mapid = plr2->GetMapId();
+ }
+ else
+ {
+ if(uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[2].c_str()))
+ {
+ bool in_flight;
+ Player::LoadPositionFromDB(mapid, pX, pY, pZ, pO, in_flight, guid);
+ }
+ else
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Second Player Not Found!", true, "ERROR");
+ return;
+ }
+ }
+ rMsg = MakeMsg(" \00313[%s] : Teleported To Player: [%s] By: %s.",
+ _PARAMS[0].c_str(),
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Are Being Teleported To: %s. By: %s.",
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ DoTeleport = true;
+ }
+ else if(_PARAMS[1] == "cr")
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT position_x,position_y,position_z,orientation,map FROM creature WHERE guid ='%s' LIMIT 1", _PARAMS[2].c_str());
+ if(!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Creature GUID not found", true, "ERROR");
+ }
+ else
+ {
+ Field *fields = result->Fetch();
+ pX = fields[0].GetFloat();
+ pY = fields[1].GetFloat();
+ pZ = fields[2].GetFloat();
+ pO = fields[3].GetFloat();
+ mapid = fields[4].GetUInt16();
+
+ rMsg = MakeMsg(" \00313[%s] : Teleported To Creature: [%s] By: %s.",
+ _PARAMS[0].c_str(),
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Are Being Teleported To: %s. By: %s.",
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ DoTeleport = true;
+ //delete result;
+ }
+ }
+ else if(_PARAMS[1] == "go")
+ {
+ QueryResult result = WorldDatabase.PQuery("SELECT position_x,position_y,position_z,orientation,map FROM gameobject WHERE guid ='%s' LIMIT 1", _PARAMS[2].c_str());
+ if(!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : GO GUID not found", true, "ERROR");
+ }
+ else
+ {
+ Field *fields = result->Fetch();
+ pX = fields[0].GetFloat();
+ pY = fields[1].GetFloat();
+ pZ = fields[2].GetFloat();
+ pO = fields[3].GetFloat();
+ mapid = fields[4].GetUInt16();
+
+ rMsg = MakeMsg(" \00313[%s] : Teleported To Gameobject: [%s] By: %s.",
+ _PARAMS[0].c_str(),
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Are Being Teleported To: %s. By: %s.",
+ _PARAMS[2].c_str(),
+ CD->USER.c_str());
+ DoTeleport = true;
+ //delete result;
+ }
+ }
+ else if(_PARAMS[1] == "homebind")
+ {
+ QueryResult result = CharacterDatabase.PQuery("SELECT position_x,position_y,position_z,map FROM `character_homebind` WHERE guid = '%d'", plr->GetGUID());
+ if(!result)
+ {
+ Send_IRCA(CD->USER, "\0034[ERROR] : Unexpected Error Loading Homebind Location", true, "ERROR");
+ }
+ else
+ {
+ Field *fields = result->Fetch();
+ pX = fields[0].GetFloat();
+ pY = fields[1].GetFloat();
+ pZ = fields[2].GetFloat();
+ pO = 1;
+ mapid = fields[3].GetUInt16();
+
+ rMsg = MakeMsg(" \00313[%s] : Teleported To Homebind Location By: %s.",
+ _PARAMS[0].c_str(),
+ CD->USER.c_str());
+ wMsg = MakeMsg("You Are Being Teleported To Your Homebind Location By: %s.",
+ CD->USER.c_str());
+ DoTeleport = true;
+ //delete result;
+ }
+
+ }
+ if(DoTeleport)
+ {
+ if(MapManager::IsValidMapCoord(mapid, pX ,pY ,pZ))
+ {
+ //if(!sIRC.BeenToGMI(pX, pY, _PARAMS[0], CD->USER))
+ //{
+ //if player is online teleport them in real time, if not set the DB to our coordinates.
+ if(plr)
+ {
+ plr->SaveRecallPosition();
+ plr->TeleportTo(mapid, pX, pY, pZ, pO);
+ sIRC.Send_IRC_Channel(ChanOrPM(CD), rMsg, true, CD->TYPE);
+ Send_Player(plr, wMsg);
+ }
+ else
+ {
+ uint64 guid = sObjectMgr->GetPlayerGUIDByName(_PARAMS[0]);
+ Player::SavePositionInDB(mapid,pX,pY,pZ,pO,sMapMgr->GetZoneId(mapid,pX,pY,pZ),guid);
+ sIRC.Send_IRC_Channel(ChanOrPM(CD), rMsg + " \0034*Offline Tele.* ", true, CD->TYPE);
+ }
+ //}
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Invalid Location!", true, "ERROR");
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : Invalid Paramaters, Please Try Again [ "+sIRC._cmd_prefx+"help tele ] For More Information. ", true, "ERROR");
+}
+
+void IRCCmd::Top_Player(_CDATA *CD)
+{
+ std::string* _PARAMS = getArray(CD->PARAMS, 2);
+ uint32 limitr = 10;
+ if(atoi(_PARAMS[1].c_str()) > 0 && GetLevel(CD->USER) >= sIRC._op_gm_lev)
+ limitr = atoi(_PARAMS[1].c_str());
+ if(_PARAMS[0] == "accttime")
+ {
+ QueryResult result = CharacterDatabase.PQuery("SELECT account, name, (SUM(totaltime)) AS combinetime FROM characters GROUP BY account ORDER BY combinetime DESC LIMIT 0, %d ", limitr);
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string tptime = MakeMsg("\x2 Top%d Accounts By Played Time:\x3\x31\x30 ", limitr);
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ uint32 account = fields[0].GetUInt32();
+ std::string PlName = GetAcctNameFromID(account);
+ std::string Time = SecToDay(fields[2].GetString());
+ uint32 rank = i+1;
+ tptime.append(MakeMsg("[%u]%s %s \xF| \x3\x31\x30\x2", rank, PlName.c_str(), Time.c_str()));
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), tptime, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Accounts Returned." ,true, "ERROR");
+ }
+ if(_PARAMS[0] == "chartime")
+ {
+ QueryResult result = CharacterDatabase.PQuery("SELECT name, totaltime FROM characters ORDER BY totaltime DESC LIMIT 0, %d ", limitr);
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string tptime = MakeMsg("\x2 Top%d Characters By Played Time:\x3\x31\x30 ", limitr);
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string Name = fields[0].GetString();
+ std::string Time = SecToDay(fields[1].GetString());
+ uint32 rank = i+1;
+ tptime.append(MakeMsg("[%u]%s %s \xF| \x3\x31\x30\x2", rank, Name.c_str(), Time.c_str()));
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), tptime, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Characters Returned." ,true, "ERROR");
+ }
+ if(_PARAMS[0] == "money")
+ {
+ // QueryResult result = CharacterDatabase.PQuery("SELECT name, CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(data, ' ', 1462), ' ', -1) AS UNSIGNED) AS money FROM characters ORDER BY money DESC LIMIT 0, %d ", limitr);
+ QueryResult result = CharacterDatabase.PQuery("SELECT name, money FROM characters ORDER BY money DESC LIMIT 0, %d ", limitr);
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string tptime = MakeMsg("\x2 Top%d Characters By Money:\x3\x31\x30 ", limitr);
+ for (uint64 i=0; i < result->GetRowCount(); i++)
+ {
+ std::string Name = fields[0].GetString();
+ unsigned int money = fields[1].GetInt32();
+
+ uint32 rank = i+1;
+
+ unsigned int gold = money / 10000;
+ unsigned int silv = (money % 10000) / 100;
+ unsigned int cop = (money % 10000) % 100;
+ char tempgold [100];
+ sprintf(tempgold, "\x2\x3\x30\x37%ug \x3\x31\x34%us \x3\x30\x35%uc\xF", gold, silv, cop);
+
+ tptime.append(MakeMsg("[%u]%s %s \xF| \x3\x31\x30\x2", rank, Name.c_str(), tempgold));
+ result->NextRow();
+ }
+ //delete result;
+ Send_IRCA(ChanOrPM(CD), tptime, true, CD->TYPE);
+ }
+ else
+ Send_IRCA(CD->USER, "\0034[ERROR] : No Characters Returned." ,true, "ERROR");
+ }
+
+}
+
+void IRCCmd::Who_Logged(_CDATA *CD)
+{
+ std::string OPS = "";
+ for(std::list<_client*>::iterator i=_CLIENTS.begin(); i!=_CLIENTS.end();i++)
+ {
+ OPS.append(MakeMsg(" \002[GM:%d IRC: %s - WoW: %s]\002 ", (*i)->GMLevel, (*i)->Name.c_str(), (*i)->UName.c_str()));
+ }
+ Send_IRCA(ChanOrPM(CD), OPS, true, CD->TYPE);
+}
diff --git a/TODO/TriniChat/IRCFunc.h b/TODO/TriniChat/IRCFunc.h
new file mode 100644
index 0000000000000..724513e344372
--- /dev/null
+++ b/TODO/TriniChat/IRCFunc.h
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
*
* \n * \n * Copyright (C) 2012 - 2012 UNCore
+ *
+ * TriniChat Trinity Core IRC Client
+ *
+ * This Program Is Free Software; You Can Redistribute It And/Or Modify It Under The Terms
+ * Of The GNU General Public License
+ * Written And Developed By |Death|(death@hell360.net)
+ * - Based Off Of MangChat 1.0 By Cybrax(cybraxvf@gmail.com)
+ * PLEASE RETAIN THE COPYRIGHT OF THE AUTHORS.*/
+#ifndef _IRC_CLIENT_FUNC
+#define _IRC_CLIENT_FUNC
+
+std::string GetUser(std::string szU)
+{
+ int pos = szU.find("!");
+ return szU.substr(0, pos);
+}
+// Delink will remove anything considered "non chat" from a string
+std::string Delink(std::string msg)
+{
+ std::size_t pos;
+ while((pos = msg.find("|Hitem")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("|Henchant")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ //msg.replace(find2, 2, "\x2");
+ }
+ while((pos = msg.find("|Hquest")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("|Hspell")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("|Htalent")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("Hachievement:")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("Htrade:")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ while((pos = msg.find("Hglyph:")) != std::string::npos)
+ {
+ std::size_t find1 = msg.find("|h", pos);
+ std::size_t find2 = msg.find("|h", find1 + 2);
+ msg.replace(pos, find1 - pos + 2, "\x2");
+ msg.replace(msg.find("|h", pos), 2, "\x2");
+ }
+ return msg;
+}
+
+// This function converts the characters used by the client to identify colour to IRC format.
+std::string WoWcol2IRC(std::string msg)
+{
+ std::size_t pos;
+ char IRCCol[18][6] = { "\xF", "\xF", "\x3\x31\x34", "\x3\x30\x33", "\x3\x31\x32", "\x3\x30\x36", "\x3\x30\x37", "\x3\x30\x34", "\x3\x30\x34", "\x3\x31\x34", "\x3\x31\x32", "\x3\x30\x37", "\x3\x30\x34", "\x3\x30\x33", "\x3\x31\x32", "\x3\x31\x32", "\x3\x30\x37", "\x3\x30\x37"};
+ char WoWCol[18][12] = { "|r", "|cffffffff", "|cff9d9d9d", "|cff1eff00", "|cff0070dd", "|cffa335ee", "|cffff8000", "|cffe6cc80", "|cffffd000", "|cff808080", "|cff71d5ff", "|cffffff00", "|cffff2020", "|cff40c040", "|cff4e96f7", "|cff71d5ff", "|cffff8040", "|cff66bbff"};
+ for (int i=0; i<=17; i++)
+ {
+ while ((pos = msg.find(WoWCol[i])) != std::string::npos)
+ {
+ if (i == 0)
+ msg.replace(pos, 2, IRCCol[i]);
+ else
+ msg.replace(pos, 11, IRCCol[i]);
+ }
+ }
+ return msg;
+}
+
+// This function converts the characters used by IRC to identify colour to a format the client can understand.
+std::string IRCcol2WoW(std::string msg)
+{
+ std::size_t pos;
+ char IRCCol[18][4] = { "\x3\x30", "\x3\x31", "\x3\x32", "\x3\x33", "\x3\x34", "\x3\x35", "\x3\x36", "\x3\x37", "\x3\x38", "\x3\x39", "\x3\x31\x30", "\x3\x31\x31", "\x3\x31\x32", "\x3\x31\x33", "\x3\x31\x34", "\x3\x31\x35", "\x3\x30\x37", "\x3\x30\x37"};
+ char IRCCol2[10][4] = { "\x3\x30\x30", "\x3\x30\x31", "\x3\x30\x32", "\x3\x30\x33", "\x3\x30\x34", "\x3\x30\x35", "\x3\x30\x36", "\x3\x30\x37", "\x3\x30\x38", "\x3\x30\x39"};
+ char WoWcol[18][12] = { "|cffffffff", "|cff000000", "|cff00007f", "|cff009300", "|cffff0000", "|cff7f0000", "|cff9c009c", "|cfffc9300", "|cffffff00", "|cff00fc00", "|cff009393", "|cff00ffff", "|cff0000fc", "|cffff00ff", "|cff7f7f7f", "|cffd2d2d2", "|cff808080", "|cff71d5ff"};
+ for (int i=15; i>=0; i--)
+ {
+ if (i<10)
+ {
+ while ((pos = msg.find(IRCCol2[i])) != std::string::npos)
+ {
+ msg.replace(pos, 3, WoWcol[i]);
+ }
+ while ((pos = msg.find(IRCCol[i])) != std::string::npos)
+ {
+ msg.replace(pos, 2, WoWcol[i]);
+ }
+
+ }
+ else
+ {
+ while ((pos = msg.find(IRCCol[i])) != std::string::npos)
+ {
+ msg.replace(pos, 3, WoWcol[i]);
+ }
+ }
+
+ // Remove Bold, Reverse, Underline from IRC
+ char Checker[3][3] = {"\x2","\x16","\x1F"}; // This is the Hex part not Dec. In Decimal its (2,22,31)
+ for(int I=0; I < 3; I++)
+ {
+ while ((pos = msg.find(Checker[I])) != std::string::npos)
+ {
+ msg.replace(pos, 1, "");
+ }
+ }
+ // Finished Removing !
+
+ }
+
+ while ((pos = msg.find("\x3")) != std::string::npos)
+ {
+ msg.replace(pos, 1, "|r");
+ }
+ while ((pos = msg.find("\xF")) != std::string::npos)
+ {
+ msg.replace(pos, 1, "|r");
+ }
+
+ return msg;
+}
+
+// This function compares 2 strings
+int nocase_cmp(const string & s1, const string& s2)
+{
+ string::const_iterator it1=s1.begin();
+ string::const_iterator it2=s2.begin();
+
+ //stop when either string's end has been reached
+ while ( (it1!=s1.end()) && (it2!=s2.end()) )
+ {
+ if(::toupper(*it1) != ::toupper(*it2)) //letters differ?
+ // return -1 to indicate smaller than, 1 otherwise
+ return (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1;
+ //proceed to the next character in each string
+ ++it1;
+ ++it2;
+ }
+ size_t size1=s1.size(), size2=s2.size(); // cache lengths
+ //return -1,0 or 1 according to strings' lengths
+ if (size1==size2)
+ return 0;
+ return (size1GetTeam() == 67)
+ sMsg = sIRC.MakeMsg(sMsg, "$Name", MakeMsgA("\0034%s\003", plr->GetName()));
+ else if (plr->GetTeam() == 469)
+ sMsg = sIRC.MakeMsg(sMsg, "$Name", MakeMsgA("\00312%s\003", plr->GetName()));
+ if(plr->isAFK())
+ sMsg = sIRC.MakeMsg(sMsg, "$Tag", "");
+ else if(plr->isDND())
+ sMsg = sIRC.MakeMsg(sMsg, "$Tag", "");
+ else
+ sMsg = sIRC.MakeMsg(sMsg, "$Tag", "");
+ sMsg = sIRC.MakeMsg(sMsg, "$Level", MakeMsgA("%d", plr->getLevel()));
+ sMsg = Delink(sMsg);
+ sMsg = WoWcol2IRC(sMsg);
+ return sMsg;
+}
+
+// This function checks if a channel exists in out configuration
+// TriniChat supports as many channels as you like
+bool Channel_Valid(std::string Channel)
+{
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ {
+ if(nocase_cmp(sIRC._wow_chan[i], Channel)==0)
+ return true;
+ }
+ return false;
+}
+
+std::string GetWoWChannel(std::string Channel)
+{
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ {
+ if("#" + sIRC._irc_chan[i] == Channel)
+ return sIRC._wow_chan[i];
+ }
+ return "";
+}
+
+std::string GetIRCChannel(std::string Channel)
+{
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ {
+ if(sIRC._wow_chan[i] == Channel)
+ return sIRC._irc_chan[i];
+ }
+ return "";
+}
+
+std::string* getArray(std::string PARAMS, int nCount, std::string )
+{
+ std::string *array = new std::string[nCount];
+ if(PARAMS.size() > 0)
+ {
+ int pcnt = 0;
+ size_t ps = 0;
+ size_t pc = -1;
+ for(int i = 0;i < nCount;i++)
+ {
+ pc = PARAMS.find(" ", pc + 1);
+ if(i + 1 == nCount && nCount != 1)
+ {
+ if(ps > 0 && pc > 0)
+ array[i] = PARAMS.substr(ps, PARAMS.size() - ps);
+ }
+ else
+ array[i] = PARAMS.substr(ps, pc - ps);
+ ps = pc + 1;
+ }
+ }
+ return array;
+}
+#endif
diff --git a/TODO/TriniChat/IRCIO.cpp b/TODO/TriniChat/IRCIO.cpp
new file mode 100644
index 0000000000000..26ceab7d47ec6
--- /dev/null
+++ b/TODO/TriniChat/IRCIO.cpp
@@ -0,0 +1,474 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * Copyright (C) 2012 - 2012 UNCore
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+//#include "gamePCH.h"
+#include "IRCClient.h"
+#include "IRCCmd.h"
+#include "IRCFunc.h"
+#include "../Globals/ObjectAccessor.h"
+#include "../Globals/ObjectMgr.h"
+#include "../../shared/Packets/WorldPacket.h"
+#include "../Chat/Channels/ChannelMgr.h"
+#include "Config.h"
+#include "../Chat/Channels/Channel.h"
+#include "../World/World.h"
+
+IRCCmd Command;
+void IRCClient::Handle_IRC(std::string sData)
+{
+ //sLog->outDebug(sData.c_str());
+ // If first 5 chars are ERROR then something is wrong
+ // either link is being closed, nickserv ghost command, etc...
+ if(sData.substr(0, 5) == "ERROR")
+ {
+ Disconnect();
+ return;
+ }
+ if(sData.substr(0, 4) == "PING")
+ {
+ // if the first 4 characters contain PING
+ // the server is checking if we are still alive
+ // sen back PONG back plus whatever the server send with it
+ SendIRC("PONG " + sData.substr(4, sData.size() - 4));
+ }
+ else
+ {
+ // if the first line contains : its an irc message
+ // such as private messages channel join etc.
+ if(sData.substr(0, 1) == ":")
+ {
+ // find the spaces in the receieved line
+ size_t p1 = sData.find(" ");
+ size_t p2 = sData.find(" ", p1 + 1);
+ // because the irc protocol uses simple spaces
+ // to seperate data we can easy pick them out
+ // since we know the position of the spaces
+ std::string USR = sData.substr(1, p1 - 1);
+ std::string CMD = sData.substr(p1 + 1, p2 - p1 - 1);
+ // trasform the commands to lowercase to make sure they always match
+ std::transform(CMD.begin(), CMD.end(), CMD.begin(), towlower);
+ // Extract the username from the first part
+ std::string szUser = GetUser(USR);
+ // if we receieved the internet connect code
+ // we know for sure that were in and we can
+ // authenticate ourself.
+ if(CMD == sIRC._ICC)
+ {
+ // _Auth is defined in trinitycore.conf (irc.auth)
+ // 0 do not authenticate
+ // 1 use nickserv
+ // 2 use quakenet
+ // aditionally you can provide you own authentication method here
+ switch(sIRC._Auth)
+ {
+ case 1:
+ SendIRC("PRIVMSG nickserv :IDENTIFY " + sIRC._Pass);
+ break;
+ case 2:
+ SendIRC("PRIVMSG nickserv :IDENTIFY " + sIRC._Auth_Nick + " " + sIRC._Pass);
+ break;
+ case 3:
+ SendIRC("PRIVMSG Q@CServe.quakenet.org :AUTH " + sIRC._Nick + " " + sIRC._Pass);
+ break;
+ case 4:
+ SendIRC("PRIVMSG Q@CServe.quakenet.org :AUTH " + sIRC._Auth_Nick + " " + sIRC._Pass);
+ break;
+ }
+ // if we join a default channel leave this now.
+ if(sIRC._ldefc==1)
+ SendIRC("PART #" + sIRC._defchan);
+ // Loop thru the channel array and send a command to join them on IRC.
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ {
+ if (sIRC._irc_pass[i].size() > 0)
+ SendIRC("JOIN #" + sIRC._irc_chan[i] + " " + sIRC._irc_pass[i]);
+ else
+ SendIRC("JOIN #" + sIRC._irc_chan[i]);
+ }
+ // See if there's a logchannel available, if so: join it.
+ if(sIRC.logchan.size() > 0)
+ {
+ if(sIRC.logchanpw.size() > 0)
+ SendIRC("JOIN #" + sIRC.logchan + " " + sIRC.logchanpw);
+ else
+ SendIRC("JOIN #" + sIRC.logchan);
+ }
+ }
+ // someone joined the channel this could be the bot or another user
+ if(CMD == "join")
+ {
+ size_t p = sData.find(":", p1);
+ std::string CHAN = sData.substr(p + 1, sData.size() - p - 2);
+ // if the user is us it means we join the channel
+ if ((szUser == sIRC._Nick) )
+ {
+ // its us that joined the channel
+ Send_IRC_Channel(CHAN, MakeMsg(MakeMsg(sIRC.JoinMsg, "$Ver", sIRC._Mver.c_str()), "$Trigger", sIRC._cmd_prefx.c_str()), true);
+ }
+ else
+ {
+ // if the user is not us its someone else that joins
+ // so we construct a message and send this to the clients.
+ // UNC-Chat now uses Send_WoW_Channel to send to the client
+ // this makes UNC-Chat handle the packets instead of previously the world.
+ if((sIRC.BOTMASK & 2) != 0)
+ Send_WoW_Channel(GetWoWChannel(CHAN).c_str(), IRCcol2WoW(MakeMsg(MakeMsg(GetChatLine(JOIN_IRC), "$Name", szUser), "$Channel", GetWoWChannel(CHAN))));
+ }
+ }
+ // someone on irc left or quit the channel
+ if(CMD == "part" || CMD == "quit")
+ {
+ size_t p3 = sData.find(" ", p2 + 1);
+ std::string CHAN = sData.substr(p2 + 1, p3 - p2 - 1);
+ // Logout IRC Nick From UNC-Chat If User Leaves Or Quits IRC.
+ if(Command.IsLoggedIn(szUser))
+ {
+ _CDATA CDATA;
+ CDATA.USER = szUser;
+ Command.Handle_Logout(&CDATA);
+ }
+ // Construct a message and inform the clients on the same channel.
+ if((sIRC.BOTMASK & 2) != 0)
+ Send_WoW_Channel(GetWoWChannel(CHAN).c_str(), IRCcol2WoW(MakeMsg(MakeMsg(GetChatLine(LEAVE_IRC), "$Name", szUser), "$Channel", GetWoWChannel(CHAN))));
+ }
+ // someone changed their nick
+ if (CMD == "nick" && (sIRC.BOTMASK & 128) != 0)
+ {
+ MakeMsg(MakeMsg(GetChatLine(CHANGE_NICK), "$Name", szUser), "$NewName", sData.substr(sData.find(":", p2) + 1));
+ // If the user is logged in and changes their nick
+ // then we want to either log them out or update
+ // their nick in the bot. I chose to update the bots user list.
+ if(Command.IsLoggedIn(szUser))
+ {
+ std::string NewNick = sData.substr(sData.find(":", p2) + 1);
+ // On freenode I noticed the server sends an extra character
+ // at the end of the string, so we need to erase the last
+ // character of the string. if you have a problem with getting
+ // the last letter of your nick erased, then remove the - 1.
+ NewNick.erase(NewNick.length() - 1, 1);
+
+ for(std::list<_client*>::iterator i=Command._CLIENTS.begin(); i!=Command._CLIENTS.end();i++)
+ {
+ if((*i)->Name == szUser)
+ {
+ (*i)->Name = NewNick;
+ sIRC.Send_IRC_Channel(NewNick.c_str(), "I Noticed You Changed Your Nick, I Have Updated My Internal Database Accordingly.", true, "NOTICE");
+
+ // Figure why not output to the logfile, makes tracing problems easier.
+ sIRC.iLog.WriteLog(" %s : %s Changed Nick To: %s", sIRC.iLog.GetLogDateTimeStr().c_str(), szUser.c_str(), NewNick.c_str());
+ }
+ }
+ }
+
+ }
+ // someone was kicked from irc
+ if (CMD == "kick")
+ {
+ // extract the details
+ size_t p3 = sData.find(" ", p2 + 1);
+ size_t p4 = sData.find(" ", p3 + 1);
+ size_t p5 = sData.find(":", p4);
+ std::string CHAN = sData.substr(p2 + 1, p3 - p2 - 1);
+ std::string WHO = sData.substr(p3 + 1, p4 - p3 - 1);
+ std::string BY = sData.substr(p4 + 1, sData.size() - p4 - 1);
+ // if the one kicked was us
+ if(WHO == sIRC._Nick)
+ {
+ // and autojoin is enabled
+ // return to the channel
+ if(sIRC._autojoinkick == 1)
+ {
+ SendIRC("JOIN " + CHAN);
+ Send_IRC_Channel(CHAN, sIRC.kikmsg, true);
+ }
+ }
+ else
+ {
+ // if it is not us who was kicked we need to inform the clients someone
+ // was removed from the channel
+ // construct a message and send it to the players.
+ Send_WoW_Channel(GetWoWChannel(CHAN).c_str(), "[" + WHO + "]: Was Kicked From " + CHAN + " By: " + szUser);
+ }
+ }
+ // a private chat message was receieved.
+ if(CMD == "privmsg" || CMD == "notice")
+ {
+ // extract the values
+ size_t p = sData.find(" ", p2 + 1);
+ std::string FROM = sData.substr(p2 + 1, p - p2 - 1);
+ std::string CHAT = sData.substr(p + 2, sData.size() - p - 3);
+ // if this is our username it means we recieved a PM
+ if(FROM == sIRC._Nick)
+ {
+ if(CHAT.find("\001VERSION\001") < CHAT.size())
+ {
+ Send_IRC_Channel(szUser, MakeMsg("\001VERSION MGACHAT %s �2008-2012 Biglad - http://www.mgawow.co.uk \001", "%s" , sIRC._Mver.c_str()), true, "PRIVMSG");
+ }
+ // a pm is required for certain commands
+ // such as login. to validate the command
+ // we send it to the command class wich handles
+ // evrything else.
+ Command.IsValid(szUser, FROM, CHAT, CMD);
+ }
+ else
+ {
+ // if our name is not in it, it means we receieved chat on one of the channels
+ // magchat is in. the first thing we do is check if it is a command or not
+ if(!Command.IsValid(szUser, FROM, CHAT, CMD))
+ {
+ Send_WoW_Channel(GetWoWChannel(FROM).c_str(), IRCcol2WoW(MakeMsg(MakeMsg(GetChatLine(IRC_WOW), "$Name", szUser), "$Msg", CHAT)));
+ }
+ // if we indeed receieved a command we do not want to display this to the players
+ // so only incanse the isvalid command returns false it will be sent to all player.
+ // the isvalid function will automaitcly process the command on true.
+ }
+ }
+ if(CMD == "mode")
+ {
+ // extract the mode details
+ size_t p3 = sData.find(" ", p2 + 1);
+ size_t p4 = sData.find(" ", p3 + 1);
+ size_t p5 = sData.find(" ", p4 + 1);
+ std::string CHAN = sData.substr(p2 + 1, p3 - p2 - 1);
+ std::string MODE = sData.substr(p3 + 1, p4 - p3 - 1);
+ std::string NICK = sData.substr(p4 + 1, p5 - p4 - 1);
+ bool _AmiOp;
+ _AmiOp = false;
+ //A mode was changed on us
+ if(NICK.c_str() == sIRC._Nick)
+ _AmiOp = true;
+
+ }
+ }
+ }
+}
+
+// This function is called in Channel.h
+// based on nAction it will inform the people on
+// irc when someone leaves one of the game channels.
+// nAction is based on the struct CACTION
+void IRCClient::Handle_WoW_Channel(std::string Channel, Player *plr, int nAction)
+{
+ // make sure that we are connected
+ if(sIRC.Connected && (sIRC.BOTMASK & 1)!= 0)
+ {
+ if(Channel_Valid(Channel))
+ {
+ std::string GMRank = "";
+ std::string pname = plr->GetName();
+ bool DoGMAnnounce = false;
+ if (plr->GetSession()->GetSecurity() > 0 && (sIRC.BOTMASK & 8)!= 0)
+ DoGMAnnounce = true;
+ if (plr->isGameMaster() && (sIRC.BOTMASK & 16)!= 0)
+ DoGMAnnounce = true;
+ if(DoGMAnnounce)
+ {
+ switch(plr->GetSession()->GetSecurity()) //switch case to determine what rank the "gm" is
+ {
+ case 0: GMRank = "";break;
+ case 1: GMRank = "\0037"+sIRC.ojGM1;break;
+ case 2: GMRank = "\0037"+sIRC.ojGM2;break;
+ case 3: GMRank = "\0037"+sIRC.ojGM3;break;
+ case 4: GMRank = "\0037"+sIRC.ojGM4;break;
+ case 5: GMRank = "\0037"+sIRC.ojGM5;break;
+ }
+ }
+ std::string ChatTag = "";
+ switch (plr->GetTeam())
+ {
+ case 67:ChatTag.append("\0034");break; //horde
+ case 469:ChatTag.append("\00312");break; //alliance
+ }
+ std::string query = "INSERT INTO `IRC_Inchan` VALUES (%d,'"+pname+"','"+Channel+"')";
+ std::string lchan = "DELETE FROM `IRC_Inchan` WHERE `guid` = %d AND `channel` = '"+Channel+"'";
+ switch(nAction)
+ {
+ case CHANNEL_JOIN:
+ Send_IRC_Channel(GetIRCChannel(Channel), MakeMsg(MakeMsg(MakeMsg(GetChatLine(JOIN_WOW), "$Name", ChatTag + plr->GetName()), "$Channel", Channel), "$GM", GMRank));
+ WorldDatabase.PExecute(lchan.c_str(), plr->GetGUID());
+ WorldDatabase.PExecute(query.c_str(), plr->GetGUID());
+ break;
+ case CHANNEL_LEAVE:
+ Send_IRC_Channel(GetIRCChannel(Channel), MakeMsg(MakeMsg(MakeMsg(GetChatLine(LEAVE_WOW), "$Name", ChatTag + plr->GetName()), "$Channel", Channel), "$GM", GMRank));
+ WorldDatabase.PExecute(lchan.c_str(), plr->GetGUID());
+ break;
+ }
+ }
+ }
+}
+
+// This function sends chat to a irc channel or user
+// to prevent the # beeing appended to send a msg to a user
+// set the NoPrefix to true
+void IRCClient::Send_IRC_Channel(std::string sChannel, std::string sMsg, bool NoPrefix, std::string nType)
+{
+ std::string mType = "PRIVMSG";
+ if(Command.MakeUpper(nType.c_str()) == "NOTICE")
+ mType = "NOTICE";
+ if(Command.MakeUpper(nType.c_str()) == "ERROR" && (sIRC.BOTMASK & 32)!= 0)
+ mType = "NOTICE";
+ if(sIRC.Connected)
+ {
+ if(NoPrefix)
+ SendIRC(mType + " " + sChannel + " :" + sMsg);
+ else
+ SendIRC(mType + " #" + sChannel + " :" + sMsg);
+ }
+}
+
+// This function sends a message to all irc channels
+// that UNC-Chat has in its configuration
+void IRCClient::Send_IRC_Channels(std::string sMsg)
+{
+ for(int i=1;i < sIRC._chan_count + 1;i++)
+ Send_IRC_Channel(sIRC._irc_chan[i], sMsg);
+}
+
+// This function is called in ChatHandler.cpp, any channel chat from wow will come
+// to this function, validates the channel and constructs a message that is send to IRC
+void IRCClient::Send_WoW_IRC(Player *plr, std::string Channel, std::string Msg)
+{
+ // Check if the channel exist in our configuration
+ if(Channel_Valid(Channel) && Msg.substr(0, 1) != ".")
+ Send_IRC_Channel(GetIRCChannel(Channel), MakeMsgP(WOW_IRC, Msg, plr));
+}
+
+void IRCClient::Send_WoW_Player(std::string sPlayer, std::string sMsg)
+{
+ normalizePlayerName(sPlayer);
+ if (Player* plr = sObjectAccessor->FindPlayerByName(sPlayer.c_str()))
+ Send_WoW_Player(plr, sMsg);
+}
+
+void IRCClient::Send_WoW_Player(Player *plr, string sMsg)
+{
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+ data << (uint8)CHAT_MSG_SYSTEM;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint64)plr->GetGUID();
+ data << (uint32)0;
+ data << (uint64)plr->GetGUID();
+ data << (uint32)(sMsg.length()+1);
+ data << sMsg;
+ data << (uint8)0;
+ plr->GetSession()->SendPacket(&data);
+}
+
+// This function will construct and send a packet to all players
+// on the given channel ingame. (previuosly found in world.cpp)
+// it loops thru all sessions and checks if they are on the channel
+// if so construct a packet and send it.
+void IRCClient::Send_WoW_Channel(const char *channel, std::string chat)
+{
+ if(!(strlen(channel) > 0))
+ return;
+
+ #ifdef USE_UTF8
+ std::string chat2 = chat;
+ if(ConvertUTF8(chat2.c_str(), chat2))
+ chat = chat2;
+ #endif
+
+ HashMapHolder::MapType& m = sObjectAccessor->GetPlayers();
+ for(HashMapHolder::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
+ {
+ if (itr->second && itr->second->GetSession()->GetPlayer() && itr->second->GetSession()->GetPlayer()->IsInWorld())
+ {
+ if(ChannelMgr* cMgr = channelMgr(itr->second->GetSession()->GetPlayer()->GetTeam()))
+ {
+ if(Channel *chn = cMgr->GetChannel(channel, itr->second->GetSession()->GetPlayer()))
+ {
+ WorldPacket data;
+ data.Initialize(SMSG_MESSAGECHAT);
+ data << (uint8)CHAT_MSG_CHANNEL;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint64)0;
+ data << (uint32)0;
+ data << channel;
+ data << (uint64)0;
+ data << (uint32) (strlen(chat.c_str()) + 1);
+ data << IRCcol2WoW(chat.c_str());
+ data << (uint8)0;
+ itr->second->GetSession()->SendPacket(&data);
+ }
+ }
+ }
+ }
+}
+
+void IRCClient::Send_WoW_System(std::string Message)
+{
+ HashMapHolder::MapType& m = sObjectAccessor->GetPlayers();
+ for(HashMapHolder::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
+ {
+ if (itr->second && itr->second->GetSession()->GetPlayer() && itr->second->GetSession()->GetPlayer()->IsInWorld())
+ {
+ WorldPacket data;
+ data.Initialize(CHAT_MSG_SYSTEM);
+ data << (uint8)CHAT_MSG_SYSTEM;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint64)0;
+ data << (uint32)0;
+ data << (uint64)0;
+ data << (uint32) (strlen(Message.c_str()) + 1);
+ data << Message.c_str();
+ data << (uint8)0;
+ itr->second->GetSession()->SendPacket(&data);
+ }
+ }
+}
+void IRCClient::ResetIRC()
+{
+ SendData("QUIT");
+ Disconnect();
+}
+
+#define CHAT_INVITE_NOTICE 0x18
+
+// this function should be called on player login Player::AddToWorld
+void IRCClient::AutoJoinChannel(Player *plr)
+{
+ //this will work if at least 1 player is logged in regrdless if he is on the channel or not
+ // the first person that login empty server is the one with bad luck and wont be invited,
+ // if at least 1 player is online the player will be inited to the chanel
+
+ std::string m_name = sIRC.ajchan;
+ WorldPacket data;
+ data.Initialize(SMSG_CHANNEL_NOTIFY, 1+m_name.size()+1);
+ data << uint8(CHAT_INVITE_NOTICE);
+ data << m_name.c_str();
+
+ HashMapHolder::MapType& m = sObjectAccessor->GetPlayers();
+ for(HashMapHolder::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
+ {
+ if (itr->second && itr->second->GetSession()->GetPlayer() && itr->second->GetSession()->GetPlayer()->IsInWorld())
+ {
+ data << uint64(itr->second->GetGUID());
+ break;
+ }
+ }
+ plr->GetSession()->SendPacket(&data);
+}
diff --git a/TODO/TriniChat/IRCLog.cpp b/TODO/TriniChat/IRCLog.cpp
new file mode 100644
index 0000000000000..619482c6d52b6
--- /dev/null
+++ b/TODO/TriniChat/IRCLog.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
*
* Copyright (C) 2012 - 2012 UNCore
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gamePCH.h"
+#include "IRCLog.h"
+#include "Config.h"
+#include "IRCClient.h"
+#include
+
+IRCLog::IRCLog()
+{
+ std::string logsDir = sConfig->GetStringDefault("LogsDir","");
+ std::string ircLogName = logsDir + "/IRC_";
+ std::string ircLogTimestamp = GetLogDateStr();
+ ircLogName += ircLogTimestamp +".log";
+ ircLogfile.open (ircLogName.c_str(), std::ios::app);
+}
+
+IRCLog::~IRCLog()
+{
+ ircLogfile.close();
+}
+// Was added because using the time for logs is very annoying... one log per day.. much cleaner looking..
+std::string IRCLog::GetLogDateStr() const
+{
+ time_t t = time(NULL);
+ tm* aTm = localtime(&t);
+ // YYYY year
+ // MM month (2 digits 01-12)
+ // DD day (2 digits 01-31)
+ // HH hour (2 digits 00-23)
+ // MM minutes (2 digits 00-59)
+ // SS seconds (2 digits 00-59)
+ char buf[20];
+ snprintf(buf,20,"%04d-%02d-%02d",aTm->tm_year+1900,aTm->tm_mon+1,aTm->tm_mday);
+ return std::string(buf);
+}
+
+std::string IRCLog::GetLogDateTimeStr() const
+{
+ time_t t = time(NULL);
+ tm* aTm = localtime(&t);
+ // YYYY year
+ // MM month (2 digits 01-12)
+ // DD day (2 digits 01-31)
+ // HH hour (2 digits 00-23)
+ // MM minutes (2 digits 00-59)
+ // SS seconds (2 digits 00-59)
+ char buf[30];
+ snprintf(buf,30,"[ %04d-%02d-%02d ] [ %02d:%02d:%02d ]",aTm->tm_year+1900,aTm->tm_mon+1,aTm->tm_mday,aTm->tm_hour,aTm->tm_min,aTm->tm_sec);
+ return std::string(buf);
+}
+
+void IRCLog::WriteLog(const char *what, ...)
+{
+ va_list ap;
+ char tmpoutp[1024];
+ va_start(ap, what);
+ vsnprintf(tmpoutp, 1024, what, ap );
+ va_end(ap);
+ ircLogfile << tmpoutp;
+ ircLogfile << "\n";
+ ircLogfile.flush();
+}
diff --git a/TODO/TriniChat/IRCLog.h b/TODO/TriniChat/IRCLog.h
new file mode 100644
index 0000000000000..5db90b22d9a53
--- /dev/null
+++ b/TODO/TriniChat/IRCLog.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
*
* \n * \n * Copyright (C) 2012 - 2012 UNCore
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _IRC_LOG_H
+#define _IRC_LOG_H
+
+#include "Common.h"
+#include
+
+class IRCLog
+{
+ public:
+ IRCLog();
+ ~IRCLog();
+
+ public:
+ void WriteLog(const char *what, ...);
+ std::string GetLogDateStr() const;
+ std::string GetLogDateTimeStr() const;
+ private:
+ std::ofstream ircLogfile;
+};
+
+
+#endif
diff --git a/TODO/TriniChat/IRCSock.cpp b/TODO/TriniChat/IRCSock.cpp
new file mode 100644
index 0000000000000..e3658b70d5ab3
--- /dev/null
+++ b/TODO/TriniChat/IRCSock.cpp
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
*
* Copyright (C) 2012 - 2012 UNCore
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gamePCH.h"
+#include "IRCClient.h"
+#define MAXDATASIZE 512
+#include
+
+#include
+#include
+
+
+#define _UNICODE
+
+#ifdef _MBCS
+#undef _MBCS
+#endif
+
+bool IRCClient::InitSock()
+{
+ #ifdef _WIN32
+ WSADATA wsaData; //WSAData
+ if(WSAStartup(MAKEWORD(2,0),&wsaData) != 0)
+ {
+ sLog->outError("IRC Error: Winsock Initialization Error");
+ return false;
+ }
+ #endif
+ if ((sIRC.SOCKET = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
+ {
+ sLog->outError("IRC Error: Socket Error");
+ return false;
+ }
+ int on = 1;
+ if ( setsockopt ( sIRC.SOCKET, SOL_SOCKET, SO_REUSEADDR, ( const char* ) &on, sizeof ( on ) ) == -1 )
+ {
+ sLog->outError("IRC Error: Invalid Socket");
+ return false;
+ }
+ #ifdef _WIN32
+ u_long iMode = 0;
+ ioctlsocket(sIRC.SOCKET, FIONBIO, &iMode);
+ #else
+ fcntl(sIRC.SOCKET, F_SETFL, O_NONBLOCK); // set to non-blocking
+ fcntl(sIRC.SOCKET, F_SETFL, O_ASYNC); // set to asynchronous I/O
+ #endif
+ return true;
+}
+
+bool IRCClient::Connect(const char *cHost, int nPort)
+{
+ sIRC.Connected = false;
+ struct hostent *he;
+ if ((he=gethostbyname(cHost)) == NULL)
+ {
+ sLog->outError("IRCLIENT: Could not resolve host: %s", cHost);
+ return false;
+ }
+ struct sockaddr_in their_addr;
+ their_addr.sin_family = AF_INET;
+ their_addr.sin_port = htons(nPort);
+ their_addr.sin_addr = *((struct in_addr *)he->h_addr);
+ memset(&(their_addr.sin_zero), '\0', 8);
+ if (::connect(sIRC.SOCKET, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1)
+ {
+ sLog->outError("IRCLIENT: Cannot connect to %s", cHost);
+ return false;
+ }
+ //FD_ZERO(&sIRC.sfdset);
+ //FD_SET(sIRC.SOCKET,&sIRC.sfdset);
+ sIRC.Connected = true;
+ return true;
+}
+
+bool IRCClient::Login(std::string sNick, std::string sUser, std::string sPass)
+{
+ char hostname[128];
+ gethostname(hostname, sizeof(hostname));
+ if(SendIRC("HELLO"))
+ if(SendIRC("PASS " + sPass))
+ if(SendIRC("NICK " + sNick))
+ if(SendIRC("USER " + sUser + " " + (std::string)hostname + " UNC-Chat :UNC-Chat "+sIRC._Mver.c_str()))
+ return true;
+ return false;
+}
+
+bool IRCClient::SendData(const char *data)
+{
+ if(sIRC.Connected)
+ {
+ if (send(sIRC.SOCKET, data, strlen(data), 0) == -1)
+ {
+ sLog->outError("IRC Error: Socket Receieve ** \n");
+ //Disconnect();
+ return false;
+ }
+ }
+ return true;
+}
+
+bool IRCClient::SendIRC(std::string data)
+{
+ std::string RealData = data + "\n";
+ return SendData(RealData.c_str());
+}
+
+void IRCClient::Disconnect()
+{
+ if(sIRC.SOCKET)
+ {
+ #ifdef _WIN32
+ closesocket(sIRC.SOCKET);
+ //WSACleanup();
+ #else
+ close(sIRC.SOCKET);
+ #endif
+ }
+}
+
+void IRCClient::SockRecv()
+{
+// wchar_t bufferdata;
+
+ char szBuffer[MAXDATASIZE];
+
+ memset(szBuffer, 0, MAXDATASIZE );
+
+ int nBytesRecv = ::recv(sIRC.SOCKET, szBuffer, MAXDATASIZE - 1, 0 );
+ if ( nBytesRecv == -1 )
+ {
+ sLog->outError("Connection lost.");
+ sIRC.Connected = false;
+ }
+ else
+ {
+ if (-1 == nBytesRecv)
+ {
+ sLog->outError("Error occurred while receiving from socket.");
+ }
+ else
+ {
+ std::string reply;
+ std::istringstream iss(szBuffer);
+ while(getline(iss, reply))
+ {
+ Handle_IRC(reply);
+ }
+ }
+ }
+}
diff --git a/TODO/TriniChat/MCS_OnlinePlayers.cpp b/TODO/TriniChat/MCS_OnlinePlayers.cpp
new file mode 100644
index 0000000000000..969948e25856a
--- /dev/null
+++ b/TODO/TriniChat/MCS_OnlinePlayers.cpp
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
+ *
+ * Copyright (C) 2012 - 2012 UNCore
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+//#include "gamePCH.h"
+#include "MCS_OnlinePlayers.h"
+
+#include "../../game/Maps/MapManager.h"
+#include "../Globals/ObjectMgr.h"
+//#include "Config/ConfigEnv.h"
+
+mcs_OnlinePlayers::mcs_OnlinePlayers() { CD = NULL; }
+
+mcs_OnlinePlayers::mcs_OnlinePlayers(_CDATA *_CD)
+{
+ //create a new instance of data struct and copy its data
+ CD = new _CDATA();
+ CD->CMD = _CD->CMD;
+ CD->FROM = _CD->FROM;
+ CD->PARAMS = _CD->PARAMS;
+ CD->PCOUNT = _CD->PCOUNT;
+ CD->USER = _CD->USER;
+ CD->TYPE = _CD->TYPE;
+}
+
+mcs_OnlinePlayers::~mcs_OnlinePlayers()
+{
+ if(CD)
+ delete CD;
+}
+
+void mcs_OnlinePlayers::run()
+{
+ int OnlineCount = 0;
+ std::string IRCOut = "";
+ HashMapHolder::MapType& m = sObjectAccessor->GetPlayers();
+ for(HashMapHolder::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
+ {
+ if (itr->second && itr->second->GetSession()->GetPlayer() && itr->second->GetSession()->GetPlayer()->IsInWorld())
+ {
+ OnlineCount++;
+ Player *plr = itr->second->GetSession()->GetPlayer();
+ std::string ChatTag = " ";
+ switch(plr->GetSession()->GetSecurity())
+ {
+ case 0: ChatTag.append("");break;
+ case 1: ChatTag.append("\0037"+sIRC.ojGM1);break;
+ case 2: ChatTag.append("\0037"+sIRC.ojGM2);break;
+ case 3: ChatTag.append("\0037"+sIRC.ojGM3);break;
+ case 4: ChatTag.append("\0037"+sIRC.ojGM4);break;
+ case 5: ChatTag.append("\0037"+sIRC.ojGM5);break;
+ }
+ if(plr->isAFK())
+ ChatTag.append("\002\0037\003\002");
+ else if(plr->isDND())
+ ChatTag.append("\002\0037\003\002");
+ switch (plr->GetTeam())
+ {
+ case 67:ChatTag.append("\0034");break; //horde
+ case 469:ChatTag.append("\00312");break; //alliance
+ }
+
+ IRCOut.append(IRCCmd::MakeMsg("%s\002%s\003\017\002(%d)\002\017", ChatTag.c_str(), plr->GetName(), plr->getLevel()));
+
+ // after XX players have been added to the string
+ // output to irc and reset for the next XX
+ if(OnlineCount % sIRC.onlrslt == 0)
+ {
+ sIRC.Send_IRC_Channel(IRCCmd::ChanOrPM(CD), IRCCmd::MakeMsg("\002 %s", IRCOut.c_str()), true, CD->TYPE);
+ IRCOut = "";
+ ACE_Based::Thread::Sleep(1000);
+ }
+ }
+ }
+ // Remainder in IRCOUT && Total plyersonline
+ sIRC.Send_IRC_Channel(IRCCmd::ChanOrPM(CD), IRCCmd::MakeMsg("\002Players Online(%d):\017 %s", OnlineCount, IRCOut.c_str()), true, CD->TYPE.c_str());
+
+ sIRC.Script_Lock[MCS_Players_Online] = false;
+
+}
diff --git a/TODO/TriniChat/MCS_OnlinePlayers.h b/TODO/TriniChat/MCS_OnlinePlayers.h
new file mode 100644
index 0000000000000..9906aa564a40f
--- /dev/null
+++ b/TODO/TriniChat/MCS_OnlinePlayers.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2005 - 2012 MaNGOS
+ *
+ * Copyright (C) 2008 - 2012 Trinity
+ *
+ * Copyright (C) 2010 - 2012 ProjectSkyfire
+ *
+ * Copyright (C) 2011 - 2012 ArkCORE
*
* \n * \n * Copyright (C) 2012 - 2012 UNCore
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _IRC_CLIENT_ONLINE
+#define _IRC_CLIENT_ONLINE
+
+#include "IRCClient.h"
+#include "IRCCmd.h"
+
+class mcs_OnlinePlayers : public ACE_Based::Runnable
+{
+ public:
+ mcs_OnlinePlayers();
+ mcs_OnlinePlayers(_CDATA *_CD);
+ ~mcs_OnlinePlayers();
+ void run();
+ public:
+ _CDATA *CD;
+};
+
+#endif
diff --git a/Thanks.txt b/Thanks.txt
new file mode 100644
index 0000000000000..f6baa0c5580a3
--- /dev/null
+++ b/Thanks.txt
@@ -0,0 +1,3 @@
+TC Devs (All of them)
+Biglad
+Martin
diff --git a/Transmog.url b/Transmog.url
new file mode 100644
index 0000000000000..f61a923885a41
--- /dev/null
+++ b/Transmog.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/Rochet2/TrinityCore/tree/transmog_3.3.5/src/server/scripts/Custom/Transmog
diff --git a/Transmogrification - RochetCode.url b/Transmogrification - RochetCode.url
new file mode 100644
index 0000000000000..93e8e1a9e488b
--- /dev/null
+++ b/Transmogrification - RochetCode.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://rochet2.github.io/Transmogrification.html
diff --git a/WoW 3.3.5a game objects ids.mp4 b/WoW 3.3.5a game objects ids.mp4
new file mode 100644
index 0000000000000..51be14ceaff52
Binary files /dev/null and b/WoW 3.3.5a game objects ids.mp4 differ
diff --git a/emote ids.txt b/emote ids.txt
new file mode 100644
index 0000000000000..5cb7c1015846e
--- /dev/null
+++ b/emote ids.txt
@@ -0,0 +1,176 @@
+"ID","EmoteSlashCommand","AnimID","EmoteFlags","EmoteSpecProc","EmoteSpecProcParam","EventSoundID"
+"0","ONESHOT_NONE","0","0","0","0","0"
+"1","ONESHOT_TALK(DNR)","60","140","0","0","0"
+"2","ONESHOT_BOW","66","18433","0","0","0"
+"3","ONESHOT_WAVE(DNR)","67","2048","0","0","0"
+"4","ONESHOT_CHEER(DNR)","68","2048","0","0","0"
+"5","ONESHOT_EXCLAMATION(DNR)","64","164","0","0","0"
+"6","ONESHOT_QUESTION","65","148","0","0","0"
+"7","ONESHOT_EAT","61","2048","0","0","0"
+"10","STATE_DANCE","69","28801","2","0","0"
+"11","ONESHOT_LAUGH","70","2432","0","0","0"
+"12","STATE_SLEEP","0","25090","1","3","0"
+"13","STATE_SIT","0","25090","1","1","0"
+"14","ONESHOT_RUDE(DNR)","73","1","0","0","0"
+"15","ONESHOT_ROAR(DNR)","74","4","0","0","0"
+"16","ONESHOT_KNEEL","75","16384","0","0","0"
+"17","ONESHOT_KISS","76","0","0","0","0"
+"18","ONESHOT_CRY","77","0","0","0","0"
+"19","ONESHOT_CHICKEN","78","0","0","0","0"
+"20","ONESHOT_BEG","79","16384","0","0","0"
+"21","ONESHOT_APPLAUD","80","0","0","0","0"
+"22","ONESHOT_SHOUT(DNR)","81","2240","0","0","0"
+"23","ONESHOT_FLEX","82","0","0","0","0"
+"24","ONESHOT_SHY(DNR)","83","16384","0","0","0"
+"25","ONESHOT_POINT(DNR)","84","0","0","0","0"
+"26","STATE_STAND","0","25090","1","0","0"
+"27","STATE_READYUNARMED","25","26624","2","0","0"
+"28","STATE_WORK_SHEATHED","62","24576","2","0","0"
+"29","STATE_POINT(DNR)","84","16384","2","0","0"
+"30","STATE_NONE","0","16384","2","0","0"
+"33","ONESHOT_WOUND","9","1024","0","0","0"
+"34","ONESHOT_WOUNDCRITICAL","10","1024","0","0","0"
+"35","ONESHOT_ATTACKUNARMED","16","17412","0","0","0"
+"36","ONESHOT_ATTACK1H","17","17412","0","0","0"
+"37","ONESHOT_ATTACK2HTIGHT","18","17412","0","0","0"
+"38","ONESHOT_ATTACK2HLOOSE","19","17412","0","0","0"
+"39","ONESHOT_PARRYUNARMED","20","17412","0","0","0"
+"43","ONESHOT_PARRYSHIELD","24","17412","0","0","0"
+"44","ONESHOT_READYUNARMED","25","1024","0","0","0"
+"45","ONESHOT_READY1H","26","1024","0","0","0"
+"48","ONESHOT_READYBOW","29","1024","0","0","0"
+"50","ONESHOT_SPELLPRECAST","31","17408","0","0","0"
+"51","ONESHOT_SPELLCAST","32","17408","0","0","0"
+"53","ONESHOT_BATTLEROAR","55","1024","0","0","0"
+"54","ONESHOT_SPECIALATTACK1H","57","17412","0","0","0"
+"60","ONESHOT_KICK","95","17408","0","0","0"
+"61","ONESHOT_ATTACKTHROWN","107","17408","0","0","0"
+"64","STATE_STUN","14","19456","2","0","0"
+"65","STATE_DEAD","0","26114","1","7","0"
+"66","ONESHOT_SALUTE","113","2048","0","0","0"
+"68","STATE_KNEEL","0","25090","1","8","0"
+"69","STATE_USESTANDING","63","26624","2","0","0"
+"70","ONESHOT_WAVE_NOSHEATHE","67","4","0","0","0"
+"71","ONESHOT_CHEER_NOSHEATHE","68","4","0","0","0"
+"92","ONESHOT_EAT_NOSHEATHE","199","4","0","0","0"
+"93","STATE_STUN_NOSHEATHE","137","16388","2","0","0"
+"94","ONESHOT_DANCE","69","16384","0","0","0"
+"113","ONESHOT_SALUTE_NOSHEATH","210","4","0","0","0"
+"133","STATE_USESTANDING_NOSHEATHE","138","8192","2","0","0"
+"153","ONESHOT_LAUGH_NOSHEATHE","70","4","0","0","0"
+"173","STATE_WORK","136","24580","2","0","0"
+"193","STATE_SPELLPRECAST","31","16384","2","0","0"
+"213","ONESHOT_READYRIFLE","48","0","0","0","0"
+"214","STATE_READYRIFLE","48","8192","2","0","0"
+"233","STATE_WORK_MINING","136","8192","2","0","3782"
+"234","STATE_WORK_CHOPWOOD","136","8192","2","0","3202"
+"253","STATE_APPLAUD","80","24576","2","0","0"
+"254","ONESHOT_LIFTOFF","192","0","0","0","0"
+"273","ONESHOT_YES(DNR)","185","0","0","0","0"
+"274","ONESHOT_NO(DNR)","186","0","0","0","0"
+"275","ONESHOT_TRAIN(DNR)","195","0","0","0","0"
+"293","ONESHOT_LAND","200","0","0","0","0"
+"313","STATE_AT_EASE","0","0","1","2","0"
+"333","STATE_READY1H","26","24576","2","0","0"
+"353","STATE_SPELLKNEELSTART","140","0","2","0","0"
+"373","STAND_STATE_SUBMERGED","202","0","1","0","0"
+"374","ONESHOT_SUBMERGE","201","0","0","0","0"
+"375","STATE_READY2H","27","24576","2","0","0"
+"376","STATE_READYBOW","29","8192","2","0","0"
+"377","ONESHOT_MOUNTSPECIAL","94","49153","0","0","0"
+"378","STATE_TALK","60","24576","2","0","0"
+"379","STATE_FISHING","134","24577","2","0","0"
+"380","ONESHOT_FISHING","133","20484","0","0","3354"
+"381","ONESHOT_LOOT","50","17412","0","0","0"
+"382","STATE_WHIRLWIND","126","0","2","0","0"
+"383","STATE_DROWNED","132","16384","2","0","0"
+"384","STATE_HOLD_BOW","109","0","2","0","0"
+"385","STATE_HOLD_RIFLE","110","16384","2","0","0"
+"386","STATE_HOLD_THROWN","111","16384","2","0","0"
+"387","ONESHOT_DROWN","131","0","0","0","0"
+"388","ONESHOT_STOMP","181","16384","0","0","0"
+"389","ONESHOT_ATTACKOFF","87","17408","0","0","0"
+"390","ONESHOT_ATTACKOFFPIERCE","88","17408","0","0","0"
+"391","STATE_ROAR","74","0","2","0","0"
+"392","STATE_LAUGH","70","0","2","0","0"
+"393","ONESHOT_CREATURE_SPECIAL","130","1024","0","0","0"
+"394","ONESHOT_JUMPLANDRUN","187","0","0","0","0"
+"395","ONESHOT_JUMPEND","39","0","0","0","0"
+"396","ONESHOT_TALK_NOSHEATHE","208","136","0","0","0"
+"397","ONESHOT_POINT_NOSHEATHE","209","0","0","0","0"
+"398","STATE_CANNIBALIZE","203","16384","2","0","0"
+"399","ONESHOT_JUMPSTART","37","1024","0","0","0"
+"400","STATE_DANCESPECIAL","211","0","2","0","0"
+"401","ONESHOT_DANCESPECIAL","211","0","0","0","0"
+"402","ONESHOT_CUSTOMSPELL01","213","0","0","0","0"
+"403","ONESHOT_CUSTOMSPELL02","214","0","0","0","0"
+"404","ONESHOT_CUSTOMSPELL03","215","0","0","0","0"
+"405","ONESHOT_CUSTOMSPELL04","216","0","0","0","0"
+"406","ONESHOT_CUSTOMSPELL05","217","0","0","0","0"
+"407","ONESHOT_CUSTOMSPELL06","218","0","0","0","0"
+"408","ONESHOT_CUSTOMSPELL07","219","0","0","0","0"
+"409","ONESHOT_CUSTOMSPELL08","220","0","0","0","0"
+"410","ONESHOT_CUSTOMSPELL09","221","0","0","0","0"
+"411","ONESHOT_CUSTOMSPELL10","222","0","0","0","0"
+"412","STATE_EXCLAIM","64","4104","2","0","0"
+"413","STATE_DANCE_CUSTOM","0","28801","2","0","0"
+"415","STATE_SIT_CHAIR_MED","103","0","2","0","0"
+"416","STATE_CUSTOM_SPELL_01","213","0","2","0","0"
+"417","STATE_CUSTOM_SPELL_02","214","0","2","0","0"
+"418","STATE_EAT","61","0","2","0","-1"
+"419","STATE_CUSTOM_SPELL_04","216","0","2","0","0"
+"420","STATE_CUSTOM_SPELL_03","215","0","2","0","0"
+"421","STATE_CUSTOM_SPELL_05","217","0","2","0","0"
+"422","STATE_SPELLEFFECT_HOLD","158","0","2","0","0"
+"423","STATE_EAT_NO_SHEATHE","199","20996","2","0","0"
+"424","STATE_MOUNT","91","56","1","0","0"
+"425","STATE_READY2HL","28","0","2","0","0"
+"426","STATE_SIT_CHAIR_HIGH","104","0","2","0","0"
+"427","STATE_FALL","40","0","2","0","0"
+"428","STATE_LOOT","188","4096","2","0","0"
+"429","STATE_SUBMERGED","202","16384","2","1","0"
+"430","ONESHOT_COWER(DNR)","225","0","0","0","0"
+"431","STATE_COWER","225","0","2","0","0"
+"432","ONESHOT_USESTANDING","63","0","0","0","0"
+"433","STATE_STEALTH_STAND","120","16384","2","0","3325"
+"434","ONESHOT_OMNICAST_GHOUL (W/SOUND","54","0","0","0","410"
+"435","ONESHOT_ATTACKBOW","46","0","0","0","0"
+"436","ONESHOT_ATTACKRIFLE","49","0","0","0","0"
+"437","STATE_SWIM_IDLE","41","0","2","0","0"
+"438","STATE_ATTACK_UNARMED","16","0","2","0","3782"
+"439","ONESHOT_SPELLCAST (W/SOUND)","32","8448","0","0","3202"
+"440","ONESHOT_DODGE","30","17412","0","0","0"
+"441","ONESHOT_PARRY1H","21","17412","0","0","0"
+"442","ONESHOT_PARRY2H","22","17412","0","0","0"
+"443","ONESHOT_PARRY2HL","28","17412","0","0","0"
+"444","STATE_FLYFALL","269","0","2","0","0"
+"445","ONESHOT_FLYDEATH","230","0","0","0","0"
+"446","STATE_FLY_FALL","269","512","2","0","0"
+"447","ONESHOT_FLY_SIT_GROUND_DOWN","325","0","0","0","0"
+"448","ONESHOT_FLY_SIT_GROUND_UP","327","0","0","0","0"
+"449","ONESHOT_EMERGE","224","0","0","0","0"
+"450","ONESHOT_DRAGONSPIT","182","0","0","0","0"
+"451","STATE_SPECIALUNARMED","118","0","2","0","0"
+"452","ONESHOT_FLYGRAB","455","0","0","0","0"
+"453","STATE_FLYGRABCLOSED","456","0","2","0","0"
+"454","ONESHOT_FLYGRABTHROWN","457","0","0","0","0"
+"455","STATE_FLY_SIT_GROUND","326","0","2","0","0"
+"456","STATE_WALKBACKWARDS","13","0","2","0","0"
+"457","ONESHOT_FLYTALK","289","8","0","0","0"
+"458","ONESHOT_FLYATTACK1H","246","0","0","0","0"
+"459","STATE_CUSTOMSPELL08","220","0","2","0","0"
+"460","ONESHOT_FLY_DRAGONSPIT","411","0","0","0","7274"
+"461","STATE_SIT_CHAIR_LOW","102","0","2","0","0"
+"462","ONE_SHOT_STUN","14","0","0","0","0"
+"463","ONESHOT_SPELLCAST_OMNI","54","0","0","0","0"
+"465","STATE_READYTHROWN","108","4096","2","0","0"
+"466","ONESHOT_WORK_CHOPWOOD","62","8192","0","0","3202"
+"467","ONESHOT_WORK_MINING","62","8192","0","0","3782"
+"468","STATE_SPELL_CHANNEL_OMNI","125","0","2","0","0"
+"469","STATE_SPELL_CHANNEL_DIRECTED","124","0","2","0","0"
+"470","STAND_STATE_NONE","0","514","1","0","0"
+"471","STATE_READYJOUST","476","0","1","0","0"
+"473","STATE_STRANGULATE","474","0","2","0","0"
+"474","STATE_READYSPELLOMNI","52","0","2","0","0"
+"475","STATE_HOLD_JOUST","478","0","2","0","0"
+"476","ONESHOT_CRY (JAINA PROUDMOORE ONLY)","77","0","0","0","16651"
diff --git a/extractors (win)/extractor.zip b/extractors (win)/extractor.zip
new file mode 100644
index 0000000000000..68cbdc0f63729
Binary files /dev/null and b/extractors (win)/extractor.zip differ
diff --git a/extractors (win)/mapextractor.exe b/extractors (win)/mapextractor.exe
new file mode 100644
index 0000000000000..2a7cb5bc77fef
Binary files /dev/null and b/extractors (win)/mapextractor.exe differ
diff --git a/extractors (win)/mmaps_generator.exe b/extractors (win)/mmaps_generator.exe
new file mode 100644
index 0000000000000..3f4c6d2f5c11b
Binary files /dev/null and b/extractors (win)/mmaps_generator.exe differ
diff --git a/extractors (win)/vmap4assembler.exe b/extractors (win)/vmap4assembler.exe
new file mode 100644
index 0000000000000..e62e9ae0e26b5
Binary files /dev/null and b/extractors (win)/vmap4assembler.exe differ
diff --git a/extractors (win)/vmap4extractor.exe b/extractors (win)/vmap4extractor.exe
new file mode 100644
index 0000000000000..fdf6dd6fad5a7
Binary files /dev/null and b/extractors (win)/vmap4extractor.exe differ
diff --git a/mpq files/Patch-E.mpq b/mpq files/Patch-E.mpq
new file mode 100644
index 0000000000000..19ae8712d1dfa
Binary files /dev/null and b/mpq files/Patch-E.mpq differ
diff --git a/mpq files/patch-D.MPQ b/mpq files/patch-D.MPQ
new file mode 100644
index 0000000000000..22404c0b95d77
Binary files /dev/null and b/mpq files/patch-D.MPQ differ
diff --git a/mpq files/patch-F.mpq b/mpq files/patch-F.mpq
new file mode 100644
index 0000000000000..aac7b8c26c68a
Binary files /dev/null and b/mpq files/patch-F.mpq differ
diff --git a/mpq files/patch-G.MPQ b/mpq files/patch-G.MPQ
new file mode 100644
index 0000000000000..d21956f562b33
Binary files /dev/null and b/mpq files/patch-G.MPQ differ
diff --git a/sql/Bot SQL/1_world_bot_appearance.sql b/sql/Bot SQL/1_world_bot_appearance.sql
new file mode 100644
index 0000000000000..82a7bcafe0173
--- /dev/null
+++ b/sql/Bot SQL/1_world_bot_appearance.sql
@@ -0,0 +1,305 @@
+-- Handmade data, very sensitive
+DROP TABLE IF EXISTS `creature_template_npcbot_appearance`;
+
+CREATE TABLE `creature_template_npcbot_appearance` (
+ `entry` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name*` char(16) DEFAULT 'unk' COMMENT 'unused',
+ `gender` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `skin` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `face` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `hair` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `haircolor` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `features` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+insert into `creature_template_npcbot_appearance`(`entry`,`name*`,`gender`,`skin`,`face`,`hair`,`haircolor`,`features`)
+values
+(70001,'Llane',0,3,0,1,1,6),
+(70002,'Thran',0,0,0,4,5,4),
+(70003,'Lyria',1,3,4,6,4,0),
+(70004,'Ander',0,1,11,1,7,6),
+(70005,'Malosh',0,7,0,5,5,5),
+(70006,'Granis',0,0,2,9,4,4),
+(70007,'Kelstrum',0,5,4,2,2,2),
+(70008,'Dannal',0,1,0,8,5,0),
+(70009,'Austil',0,4,1,8,1,7),
+(70010,'Torm',0,7,1,2,0,2),
+(70011,'Sark',0,0,3,7,0,5),
+(70012,'Ker',1,4,0,0,0,1),
+(70013,'Harutt',0,1,3,7,0,4),
+(70014,'Krang',0,5,2,6,2,0),
+(70015,'Frang',0,0,4,1,1,3),
+(70016,'Tarshaw',0,3,3,1,0,7),
+(70017,'Grezz',0,3,5,1,0,3),
+(70018,'Sorek',0,2,1,3,1,6),
+(70019,'Zel\'mak',0,1,0,4,8,1),
+(70020,'Alyissia',1,5,1,5,2,0),
+(70021,'Kyra',1,6,8,4,6,1),
+(70022,'Arias\'ta',1,0,6,3,4,1),
+(70023,'Sildanair',1,3,0,2,4,2),
+(70024,'Chris',0,3,2,2,2,10),
+(70025,'Angela',1,2,7,3,8,6),
+(70026,'Baltus',0,0,0,1,8,1),
+(70027,'Kelv',0,5,1,7,3,1),
+(70028,'Bilban',0,2,2,2,7,1),
+(70029,'Wu',0,4,5,1,0,8),
+(70030,'Ilsa',1,5,6,7,3,4),
+(70031,'Darnath',0,7,8,3,0,0),
+(70032,'Evencane',0,5,9,2,4,2),
+(70033,'Kore',0,4,0,2,1,6),
+(70034,'Ahonan',0,6,1,1,6,5),
+(70035,'Behomat',0,4,8,3,6,3),
+(70036,'Ruada',1,1,2,1,6,0),
+(70037,'Kazi',1,1,2,3,3,0),
+(70038,'Kerra',1,2,0,2,2,0),
+(70051,'Sammuel',0,9,11,6,2,7),
+(70052,'Bromos',0,6,4,2,9,1),
+(70053,'Wilhelm',0,4,2,2,1,6),
+(70054,'Grayson',0,3,2,2,0,2),
+(70055,'Azar',0,2,4,3,1,6),
+(70056,'Valgar',0,4,3,0,0,0),
+(70057,'Beldruk',0,4,6,2,4,2),
+(70058,'Brandur',0,5,4,1,1,3),
+(70059,'Arthur',0,1,0,1,5,2),
+(70060,'Katherine',1,1,3,2,4,0),
+(70061,'Karman',0,3,11,10,5,8),
+(70062,'Jesthenis',0,4,0,0,0,0),
+(70063,'Noellene',1,0,1,1,1,0),
+(70064,'Aurelon',0,8,0,0,0,0),
+(70065,'Osselan',0,8,1,1,2,0),
+(70066,'Ithelis',0,9,2,2,2,0),
+(70067,'Bachi',0,3,0,10,1,0),
+(70068,'Baatun',0,6,4,3,0,7),
+(70069,'Kavaan',0,2,5,5,6,4),
+(70070,'Tullas',1,0,9,9,2,0),
+(70071,'Jol',1,0,8,8,6,0),
+(70072,'Cyssa',1,4,1,7,6,0),
+(70073,'Pyreanor',0,3,3,2,7,1),
+(70074,'Rukua',1,5,8,4,4,1),
+(70101,'Thorgas',0,4,5,8,4,8),
+(70102,'Ogromm',0,4,4,3,1,4),
+(70103,'Grif',0,0,1,5,4,4),
+(70104,'Kragg',0,7,4,3,2,2),
+(70105,'Kary',1,2,1,1,2,1),
+(70106,'Holt',0,18,3,4,0,3),
+(70107,'Urek',0,4,2,2,1,1),
+(70108,'Lanka',0,4,2,2,1,2),
+(70109,'Yaw',0,1,1,5,2,2),
+(70110,'Jen\'shan',1,3,0,2,6,3),
+(70111,'Thotar',0,0,3,3,1,9),
+(70112,'Ormak',0,5,8,1,0,5),
+(70113,'Xor\'juul',0,2,3,2,0,1),
+(70114,'Sian\'dur',1,2,4,1,2,4),
+(70115,'Ayanna',1,5,0,6,5,8),
+(70116,'Dazalar',0,8,0,6,2,3),
+(70117,'Danlaar',0,0,0,3,6,0),
+(70118,'Jeen\'ra',1,7,2,1,4,1),
+(70119,'Jocaste',1,6,1,1,6,1),
+(70120,'Dorion',0,4,6,5,0,5),
+(70121,'Daera',1,0,3,12,4,0),
+(70122,'Olmin',0,3,1,2,2,4),
+(70123,'Regnus',0,3,9,1,4,2),
+(70124,'Kaerbrus',0,2,0,0,2,2),
+(70125,'Einris',1,1,1,5,4,0),
+(70126,'Ulfir',0,6,2,5,8,1),
+(70127,'Thorfin',0,2,2,5,4,7),
+(70128,'Alenndaar',0,2,6,3,2,2),
+(70129,'Dargh',0,3,1,1,4,4),
+(70130,'Sallina',1,4,2,1,1,0),
+(70131,'Hannovia',1,0,2,2,1,0),
+(70132,'Keilnei',1,7,5,2,4,1),
+(70133,'Tana',1,8,1,1,2,0),
+(70134,'Oninath',0,0,0,0,0,0),
+(70135,'Zandine',1,8,0,1,4,0),
+(70136,'Deremiis',0,11,0,5,6,7),
+(70137,'Acteon',0,2,0,0,0,0),
+(70138,'Vord',0,11,0,5,6,7),
+(70139,'Killac',0,11,0,5,6,7),
+(70151,'Jorik',0,3,0,11,1,2),
+(70152,'Solm',0,7,8,4,9,6),
+(70153,'Keryn',1,4,4,7,0,0),
+(70154,'Osborne',0,4,9,9,0,1),
+(70155,'Hogral',0,6,7,10,5,7),
+(70156,'Ian',0,5,9,9,1,6),
+(70157,'David',0,4,2,1,1,1),
+(70158,'Marion',1,5,2,3,5,7),
+(70159,'Rwag',0,0,0,0,0,0),
+(70160,'Kaplak',0,3,5,0,0,3),
+(70161,'Gest',0,4,0,2,0,1),
+(70162,'Ormok',0,3,8,4,0,3),
+(70163,'Shenthul',0,3,0,5,5,1),
+(70164,'Frahun',0,2,1,3,5,4),
+(70165,'Jannok',0,3,2,4,5,3),
+(70166,'Syurna',1,0,3,5,4,0),
+(70167,'Erion',0,5,0,3,4,3),
+(70168,'Anishar',0,5,6,4,6,5),
+(70169,'Carolyn',1,0,6,3,1,7),
+(70170,'Miles',0,0,0,1,9,8),
+(70171,'Gregory',0,3,7,8,4,14),
+(70172,'Hulfdan',0,8,8,8,5,6),
+(70173,'Ormyr',0,0,6,4,4,4),
+(70174,'Fenthwick',0,0,2,2,5,0),
+(70175,'Fahrad',0,3,0,9,4,2),
+(70176,'Tony',0,3,0,1,0,2),
+(70177,'Kariel',0,1,0,0,0,0),
+(70178,'Tannaria',1,2,2,0,2,0),
+(70179,'Zelanis',0,0,1,1,1,0),
+(70180,'Elara',1,2,2,1,4,0),
+(70181,'Nerisen',0,1,1,2,1,0),
+(70201,'Anetta',1,0,9,14,5,0),
+(70202,'Laurena',1,0,1,4,5,0),
+(70203,'Josetta',1,1,3,17,2,0),
+(70204,'Branstock',0,2,7,1,8,0),
+(70205,'Maxan',0,2,0,6,1,5),
+(70206,'Duesten',0,0,9,5,1,0),
+(70207,'Beryl',0,0,0,0,0,12),
+(70208,'Miles',0,0,2,7,9,2),
+(70209,'Malakai',0,4,3,2,6,8),
+(70210,'Cobb',0,5,6,6,4,14),
+(70211,'Shanda',1,1,0,2,7,4),
+(70212,'Laurna',1,0,7,0,2,4),
+(70213,'Tai\'jin',1,0,3,1,6,5),
+(70214,'Ken\'jai',0,5,2,4,3,0),
+(70215,'Astarii',1,0,0,0,0,0),
+(70216,'Jandria',1,1,1,5,3,0),
+(70217,'Lariia',1,0,3,3,6,0),
+(70218,'Lankester',0,2,0,9,4,16),
+(70219,'Lazarus',0,0,0,6,6,14),
+(70220,'Theodrus',0,2,6,5,7,4),
+(70221,'Braenna',1,0,1,1,0,0),
+(70222,'Toldren',0,4,1,3,3,10),
+(70223,'Benjamin',0,9,11,0,0,8),
+(70224,'Joshua',0,3,0,1,1,8),
+(70225,'Zayus',0,2,0,3,1,4),
+(70226,'X\'yera',0,2,1,2,4,4),
+(70227,'Ur\'kyo',0,0,2,2,3,2),
+(70228,'Nara',1,0,7,4,1,3),
+(70229,'Alathea',1,4,3,0,4,5),
+(70230,'Rohan',0,0,9,4,7,5),
+(70231,'Arena',1,0,2,2,1,0),
+(70232,'Ponaris',0,1,0,1,2,0),
+(70233,'Zalduun',0,9,0,0,0,0),
+(70234,'Aldrae',0,3,1,1,1,0),
+(70235,'Lotheolan',0,8,8,1,2,0),
+(70236,'Belestra',1,4,0,1,3,0),
+(70237,'Caedmos',0,4,0,0,4,3),
+(70238,'Guvan',0,12,0,5,6,4),
+(70239,'Izmir',0,7,0,4,6,6),
+(70240,'Fallat',0,7,1,4,6,6),
+(70251,'Haromm',0,0,3,5,0,6),
+(70252,'Siln',1,10,1,3,2,1),
+(70253,'Tigor',0,13,2,2,2,1),
+(70254,'Beram',0,10,0,2,0,5),
+(70255,'Meela',1,8,1,3,0,0),
+(70256,'Narm',0,17,0,6,1,4),
+(70257,'Shikrik',1,3,4,5,1,1),
+(70258,'Swart',0,0,4,5,0,7),
+(70259,'Kardris',1,0,4,7,0,6),
+(70260,'Sian\'tsu',1,3,3,3,1,3),
+(70261,'Sagorne',0,6,1,1,1,2),
+-- (70262,'Firmanvaar',0,0,0,1,0,0),
+-- (70263,'Nobundo',0,0,0,0,0,0),
+-- (70264,'Tuluun',0,0,0,0,0,0),
+(70265,'Sulaa',1,7,2,2,4,6),
+(70266,'Hobahken',0,0,0,0,0,0),
+(70267,'Umbrua',1,1,7,5,5,1),
+(70268,'Javad',0,4,1,6,0,1),
+(70301,'Khelden',0,7,5,7,0,5),
+(70302,'Zaldimar',0,2,10,11,9,3),
+(70303,'Maginor',0,1,9,8,7,4),
+(70304,'Marryk',0,0,4,6,7,1),
+(70305,'Magis',0,1,5,4,6,4),
+(70306,'Isabella',1,2,0,7,1,5),
+(70307,'Cain',0,0,0,7,1,10),
+(70308,'Shymm',0,5,6,6,5,12),
+(70309,'Ursyn',1,0,5,9,1,7),
+(70310,'Thurston',0,4,1,5,5,1),
+(70311,'Pierce',0,0,2,5,8,2),
+(70312,'Anastasia',1,2,7,3,8,5),
+(70313,'Bink',1,2,1,1,6,0),
+(70314,'Juli',1,1,5,5,3,0),
+(70315,'Nittlebur',0,0,4,0,7,6),
+(70316,'Jennea',1,5,4,5,4,4),
+(70317,'Un\'Thuwa',0,1,2,1,3,4),
+(70318,'Pephredo',1,0,4,1,2,5),
+(70319,'Enyo',1,3,4,4,0,0),
+(70320,'Mai\'ah',1,1,2,1,1,5),
+(70321,'Deino',1,2,0,3,3,2),
+(70322,'Uthel\'nay',0,3,4,2,3,0),
+(70323,'Dink',0,1,3,2,6,1),
+(70324,'Julia',1,2,6,2,0,0),
+(70325,'Garridel',1,3,1,2,2,0),
+(70326,'Valaatu',1,9,6,7,6,5),
+(70327,'Zaedana',1,3,2,2,1,0),
+(70328,'Quithas',0,2,3,1,1,0),
+(70329,'Inethven',0,0,0,0,3,0),
+(70330,'Narinth',1,0,2,2,0,0),
+(70331,'Edirah',1,5,0,5,3,0),
+(70332,'Valustraa',1,5,5,9,6,5),
+(70333,'Semid',0,8,9,8,0,7),
+(70334,'Harnan',0,8,8,7,1,3),
+(70335,'Bati',1,8,1,2,1,0),
+(70336,'Derek',0,5,3,3,1,5),
+(70351,'Drusilla',1,0,10,4,0,0),
+(70352,'Alamar',0,2,2,3,2,5),
+(70353,'Demisette',1,0,9,2,0,0),
+(70354,'Maximillian',0,1,10,6,0,6),
+(70355,'Kartosh',0,0,7,0,1,6),
+(70356,'Maximillion',0,5,0,9,5,5),
+(70357,'Rupert',0,0,0,0,0,8),
+(70358,'Nartok',0,0,6,4,0,1),
+(70359,'Dhugru',0,5,6,4,3,9),
+(70360,'Grol\'dar',0,3,2,3,1,2),
+(70361,'Mirket',1,5,3,7,0,5),
+(70362,'Zevrost',0,3,7,5,5,9),
+(70363,'Kaal',0,3,1,4,2,3),
+(70364,'Luther',0,4,9,0,0,0),
+(70365,'Richard',0,5,5,0,0,0),
+(70366,'Thistleheart',0,3,2,6,3,0),
+(70367,'Briarthorn',0,0,6,1,0,3),
+(70368,'Alexander',0,0,10,11,0,6),
+(70369,'Ursula',1,1,4,18,3,6),
+(70370,'Sandahl',0,4,2,11,1,6),
+(70371,'Gimrizz',0,2,5,2,0,3),
+(70372,'Teli\'Larien',0,0,0,0,0,0),
+(70373,'Celoenus',0,0,0,2,0,0),
+(70374,'Alamma',0,0,1,0,0,0),
+(70375,'Talionia',1,0,2,1,2,0),
+(70376,'Zanien',0,0,0,0,3,0),
+(70377,'Babagaya',1,0,6,0,3,0),
+(70401,'Turak',0,4,3,5,0,5),
+(70402,'Sheal',1,7,0,3,1,1),
+(70403,'Kym',1,9,2,3,0,0),
+(70404,'Gart',0,13,1,3,2,2),
+(70405,'Gennia',1,9,3,0,1,3),
+(70406,'Mardant',0,1,1,2,0,4),
+(70407,'Kal',0,2,2,4,4,2),
+(70408,'Mathrengyl',0,5,0,2,6,3),
+(70409,'Denatharion',0,4,8,3,2,5),
+(70410,'Fylerian',0,2,1,4,5,0),
+(70411,'Sheldras',0,0,3,2,2,4),
+(70412,'Theridran',0,2,1,3,7,3),
+(70413,'Maldryn',0,2,8,5,4,0),
+(70414,'Jannos',0,5,3,2,1,5),
+(70415,'Golhine',0,0,2,6,0,4),
+(70416,'Loganaar',0,2,1,1,0,1),
+(70417,'Harene',1,6,0,3,2,4),
+(70418,'Shalannius',0,4,3,0,4,5),
+(70451,'Siouxsie',1,9,9,3,4,9),
+(70452,'Imhadria',1,10,8,6,1,0),
+(70453,'Vaelen',0,16,9,11,9,8),
+(70454,'Mynx',1,10,0,17,11,0),
+(70455,'Lankral',0,6,13,16,12,4),
+(70456,'Sliver',0,10,11,11,6,0),
+(70457,'Vereth',0,4,0,8,9,10),
+(70458,'Arly',1,7,9,2,8,4),
+(70459,'Setaal',1,14,12,15,9,2),
+(70460,'Uzo',0,8,7,8,9,18),
+(70461,'Illyrie',1,9,11,1,12,0),
+(70462,'Crok',0,11,9,10,7,3),
+(70463,'Zor\'be',0,8,7,6,9,18),
+(70464,'Datura',1,10,11,11,18,0),
+(70465,'Stefan',0,10,12,6,12,2),
+-- (70551,'Gorkramato',0,0,14,9,7,5);
+(70555,'Detrae',0,3,12,11,19,4);
diff --git a/sql/Bot SQL/2_world_bot_extras.sql b/sql/Bot SQL/2_world_bot_extras.sql
new file mode 100644
index 0000000000000..2a17a85a580f3
--- /dev/null
+++ b/sql/Bot SQL/2_world_bot_extras.sql
@@ -0,0 +1,358 @@
+DROP TABLE IF EXISTS `creature_template_npcbot_extras`;
+
+CREATE TABLE `creature_template_npcbot_extras` (
+ `entry` mediumint(8) unsigned NOT NULL,
+ `class` tinyint(3) unsigned NOT NULL DEFAULT '1',
+ `race` tinyint(3) unsigned NOT NULL DEFAULT '1',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+INSERT INTO `creature_template_npcbot_extras` (`entry`,`class`,`race`) VALUES
+('70001', '1', '1'),
+('70002', '1', '3'),
+('70003', '1', '1'),
+('70004', '1', '3'),
+('70005', '1', '2'),
+('70006', '1', '3'),
+('70007', '1', '3'),
+('70008', '1', '5'),
+('70009', '1', '5'),
+('70010', '1', '6'),
+('70011', '1', '6'),
+('70012', '1', '6'),
+('70013', '1', '6'),
+('70014', '1', '6'),
+('70015', '1', '2'),
+('70016', '1', '2'),
+('70017', '1', '2'),
+('70018', '1', '2'),
+('70019', '1', '8'),
+('70020', '1', '4'),
+('70021', '1', '4'),
+('70022', '1', '4'),
+('70023', '1', '4'),
+('70024', '1', '5'),
+('70025', '1', '5'),
+('70026', '1', '5'),
+('70027', '1', '3'),
+('70028', '1', '7'),
+('70029', '1', '1'),
+('70030', '1', '1'),
+('70031', '1', '4'),
+('70032', '1', '1'),
+('70033', '1', '11'),
+('70034', '1', '11'),
+('70035', '1', '11'),
+('70036', '1', '11'),
+('70037', '1', '11'),
+('70038', '1', '4'),
+('70051', '2', '1'),
+('70052', '2', '3'),
+('70053', '2', '1'),
+('70054', '2', '1'),
+('70055', '2', '3'),
+('70056', '2', '3'),
+('70057', '2', '3'),
+('70058', '2', '3'),
+('70059', '2', '1'),
+('70060', '2', '1'),
+('70061', '2', '1'),
+('70062', '2', '10'),
+('70063', '2', '10'),
+('70064', '2', '11'),
+('70065', '2', '10'),
+('70066', '2', '10'),
+('70067', '2', '10'),
+('70068', '2', '11'),
+('70069', '2', '11'),
+('70070', '2', '11'),
+('70071', '2', '11'),
+('70072', '2', '10'),
+('70073', '2', '10'),
+('70074', '2', '11'),
+('70101', '3', '3'),
+('70102', '3', '2'),
+('70103', '3', '3'),
+('70104', '3', '2'),
+('70105', '3', '6'),
+('70106', '3', '6'),
+('70107', '3', '6'),
+('70108', '3', '6'),
+('70109', '3', '6'),
+('70110', '3', '8'),
+('70111', '3', '2'),
+('70112', '3', '2'),
+('70113', '3', '8'),
+('70114', '3', '8'),
+('70115', '3', '4'),
+('70116', '3', '4'),
+('70117', '3', '4'),
+('70118', '3', '4'),
+('70119', '3', '4'),
+('70120', '3', '4'),
+('70121', '3', '3'),
+('70122', '3', '3'),
+('70123', '3', '3'),
+('70124', '3', '4'),
+('70125', '3', '3'),
+('70126', '3', '3'),
+('70127', '3', '3'),
+('70128', '3', '4'),
+('70129', '3', '3'),
+('70130', '3', '10'),
+('70131', '3', '10'),
+('70132', '3', '11'),
+('70133', '3', '10'),
+('70134', '3', '10'),
+('70135', '3', '11'),
+('70136', '3', '11'),
+('70137', '3', '11'),
+('70138', '3', '11'),
+('70139', '3', '11'),
+('70151', '4', '1'),
+('70152', '4', '3'),
+('70153', '4', '1'),
+('70154', '4', '1'),
+('70155', '4', '3'),
+('70156', '4', '1'),
+('70157', '4', '5'),
+('70158', '4', '5'),
+('70159', '4', '2'),
+('70160', '4', '2'),
+('70161', '4', '2'),
+('70162', '4', '2'),
+('70163', '4', '8'),
+('70164', '4', '4'),
+('70165', '4', '4'),
+('70166', '4', '4'),
+('70167', '4', '4'),
+('70168', '4', '4'),
+('70169', '4', '5'),
+('70170', '4', '5'),
+('70171', '4', '5'),
+('70172', '4', '3'),
+('70173', '4', '3'),
+('70174', '4', '7'),
+('70175', '4', '1'),
+('70176', '4', '1'),
+('70177', '4', '10'),
+('70178', '4', '10'),
+('70179', '4', '10'),
+('70180', '4', '10'),
+('70181', '4', '10'),
+('70201', '5', '1'),
+('70202', '5', '1'),
+('70203', '5', '1'),
+('70204', '5', '3'),
+('70205', '5', '3'),
+('70206', '5', '5'),
+('70207', '5', '5'),
+('70208', '5', '5'),
+('70209', '5', '5'),
+('70210', '5', '5'),
+('70211', '5', '4'),
+('70212', '5', '4'),
+('70213', '5', '8'),
+('70214', '5', '8'),
+('70215', '5', '4'),
+('70216', '5', '4'),
+('70217', '5', '4'),
+('70218', '5', '5'),
+('70219', '5', '5'),
+('70220', '5', '3'),
+('70221', '5', '3'),
+('70222', '5', '3'),
+('70223', '5', '1'),
+('70224', '5', '1'),
+('70225', '5', '8'),
+('70226', '5', '8'),
+('70227', '5', '8'),
+('70228', '5', '4'),
+('70229', '5', '4'),
+('70230', '5', '3'),
+('70231', '5', '10'),
+('70232', '5', '10'),
+('70233', '5', '11'),
+('70234', '5', '10'),
+('70235', '5', '10'),
+('70236', '5', '10'),
+('70237', '5', '11'),
+('70238', '5', '11'),
+('70239', '5', '11'),
+('70240', '5', '11'),
+('70251', '7', '2'),
+('70252', '7', '6'),
+('70253', '7', '6'),
+('70254', '7', '6'),
+('70255', '7', '6'),
+('70256', '7', '6'),
+('70257', '7', '2'),
+('70258', '7', '2'),
+('70259', '7', '2'),
+('70260', '7', '8'),
+('70261', '7', '6'),
+('70265', '7', '11'),
+('70267', '7', '11'),
+('70268', '7', '11'),
+('70301', '8', '1'),
+('70302', '8', '1'),
+('70303', '8', '1'),
+('70304', '8', '7'),
+('70305', '8', '7'),
+('70306', '8', '5'),
+('70307', '8', '5'),
+('70308', '8', '5'),
+('70309', '8', '5'),
+('70310', '8', '5'),
+('70311', '8', '5'),
+('70312', '8', '5'),
+('70313', '8', '7'),
+('70314', '8', '7'),
+('70315', '8', '7'),
+('70316', '8', '1'),
+('70317', '8', '8'),
+('70318', '8', '8'),
+('70319', '8', '8'),
+('70320', '8', '8'),
+('70321', '8', '8'),
+('70322', '8', '8'),
+('70323', '8', '7'),
+('70324', '8', '10'),
+('70325', '8', '10'),
+('70326', '8', '11'),
+('70327', '8', '10'),
+('70328', '8', '10'),
+('70329', '8', '10'),
+('70330', '8', '10'),
+('70331', '8', '11'),
+('70332', '8', '11'),
+('70333', '8', '11'),
+('70334', '8', '11'),
+('70335', '8', '11'),
+('70336', '8', '5'),
+('70351', '9', '1'),
+('70352', '9', '7'),
+('70353', '9', '1'),
+('70354', '9', '1'),
+('70355', '9', '2'),
+('70356', '9', '5'),
+('70357', '9', '5'),
+('70358', '9', '2'),
+('70359', '9', '2'),
+('70360', '9', '2'),
+('70361', '9', '2'),
+('70362', '9', '2'),
+('70363', '9', '2'),
+('70364', '9', '5'),
+('70365', '9', '5'),
+('70366', '9', '7'),
+('70367', '9', '7'),
+('70368', '9', '1'),
+('70369', '9', '1'),
+('70370', '9', '1'),
+('70371', '9', '7'),
+('70372', '9', '10'),
+('70373', '9', '10'),
+('70374', '9', '10'),
+('70375', '9', '10'),
+('70376', '9', '10'),
+('70377', '9', '7'),
+('70401', '11', '6'),
+('70402', '11', '6'),
+('70403', '11', '6'),
+('70404', '11', '6'),
+('70405', '11', '6'),
+('70406', '11', '4'),
+('70407', '11', '4'),
+('70408', '11', '4'),
+('70409', '11', '4'),
+('70410', '11', '4'),
+('70411', '11', '4'),
+('70412', '11', '4'),
+('70413', '11', '6'),
+('70414', '11', '6'),
+('70415', '11', '4'),
+('70416', '11', '4'),
+('70417', '11', '6'),
+('70418', '11', '4'),
+('70451', '6', '4'),
+('70452', '6', '10'),
+('70453', '6', '11'),
+('70454', '6', '10'),
+('70455', '6', '1'),
+('70456', '6', '10'),
+('70457', '6', '5'),
+('70458', '6', '7'),
+('70459', '6', '11'),
+('70460', '6', '8'),
+('70461', '6', '4'),
+('70462', '6', '2'),
+('70463', '6', '8'),
+('70464', '6', '10'),
+('70465', '6', '1'),
+('70501', '0', '0'),
+('70502', '0', '0'),
+('70503', '0', '0'),
+('70504', '0', '0'),
+('70505', '0', '0'),
+('70506', '0', '0'),
+('70507', '0', '0'),
+('70508', '0', '0'),
+('70509', '0', '0'),
+('70510', '0', '0'),
+('70511', '0', '0'),
+('70512', '0', '0'),
+('70513', '0', '0'),
+('70514', '0', '0'),
+('70515', '0', '0'),
+('70516', '0', '0'),
+('70517', '0', '0'),
+('70518', '0', '0'),
+('70519', '0', '0'),
+('70520', '0', '0'),
+('70521', '0', '0'),
+('70522', '0', '0'),
+('70523', '0', '0'),
+('70524', '0', '0'),
+('70525', '0', '0'),
+('70526', '0', '0'),
+('70527', '0', '0'),
+('70528', '0', '0'),
+('70529', '0', '0'),
+('70530', '0', '0'),
+('70531', '0', '0'),
+('70532', '0', '0'),
+('70533', '0', '0'),
+('70534', '0', '0'),
+('70535', '0', '0'),
+('70536', '0', '0'),
+('70537', '0', '0'),
+('70538', '0', '0'),
+('70542', '0', '0'),
+('70543', '0', '0'),
+('70544', '0', '0'),
+('70545', '0', '0'),
+('70551', '12', '15'),
+('70552', '12', '15'),
+('70553', '13', '15'),
+('70554', '13', '15'),
+('70555', '14', '1'),
+('70556', '0', '0'),
+('70557', '15', '15'),
+('70558', '15', '15'),
+('70559', '15', '15'),
+('70560', '15', '15'),
+('70561', '15', '15'),
+('70562', '0', '0'),
+('70563', '16', '15'),
+('70564', '16', '15'),
+('70565', '16', '15'),
+('70566', '16', '15'),
+('70567', '16', '15'),
+('70568', '17', '10'),
+('70569', '17', '10'),
+('70570', '17', '10'),
+('70571', '17', '10'),
+('70572', '17', '10'),
+('70573', '0', '15'),
+('70574', '0', '15');
diff --git a/sql/Bot SQL/3_world_bots.sql b/sql/Bot SQL/3_world_bots.sql
new file mode 100644
index 0000000000000..725010f7adfcb
--- /dev/null
+++ b/sql/Bot SQL/3_world_bots.sql
@@ -0,0 +1,547 @@
+-- GENERAL --
+
+SET @BOT_START = 70001;
+SET @BOT_END = 71000;
+
+-- move to creature_template_movement InhabitType
+-- Resistance
+-- basevariance, rangevariance -- spell_school_immune_mask -- damage modifier, expirience modifier
+
+-- TOTAL BOT ENTRIES: 352 (348)
+
+delete from `creature_template` where entry between @BOT_START and @BOT_END;
+
+insert into `creature_template`
+(`entry`,`difficulty_entry_1`,`difficulty_entry_2`,`difficulty_entry_3`,`KillCredit1`,`KillCredit2`,
+`modelid1`,`modelid2`,`modelid3`,`modelid4`,`name`,`subname`,`IconName`,`gossip_menu_id`,`minlevel`,`maxlevel`,`exp`,
+`faction`,`npcflag`,`speed_walk`,`speed_run`,`scale`,`rank`,`dmgschool`,`BaseAttackTime`,`RangeAttackTime`,
+`unit_class`,`unit_flags`,`unit_flags2`,`dynamicflags`,`family`,`type`,`type_flags`,`lootid`,
+`pickpocketloot`,`skinloot`,`PetSpellDataId`,`VehicleId`,`mingold`,`maxgold`,`AIName`,`MovementType`,
+`HoverHeight`,`HealthModifier`,`ManaModifier`,`ArmorModifier`,`RacialLeader`,`movementId`,`RegenHealth`,
+`mechanic_immune_mask`,`flags_extra`,`ScriptName`,`VerifiedBuild`)
+values
+('70001','0','0','0','0','0','3343','0','0','0','Llane','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70002','0','0','0','0','0','3399','0','0','0','Thran','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70003','0','0','0','0','0','1300','0','0','0','Lyria','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70004','0','0','0','0','0','3431','0','0','0','Ander','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70005','0','0','0','0','0','4556','0','0','0','Malosh','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70006','0','0','0','0','0','3431','0','0','0','Granis','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70007','0','0','0','0','0','3053','0','0','0','Kelstrum','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70008','0','0','0','0','0','1578','0','0','0','Dannal','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70009','0','0','0','0','0','1599','0','0','0','Austil','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70010','0','0','0','0','0','2103','0','0','0','Torm','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70011','0','0','0','0','0','2096','0','0','0','Sark','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70012','0','0','0','0','0','2113','0','0','0','Ker','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70013','0','0','0','0','0','3793','0','0','0','Harutt','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70014','0','0','0','0','0','3794','0','0','0','Krang','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70015','0','0','0','0','0','1880','0','0','0','Frang','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70016','0','0','0','0','0','3743','0','0','0','Tarshaw','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70017','0','0','0','0','0','1374','0','0','0','Grezz','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70018','0','0','0','0','0','1375','0','0','0','Sorek','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70019','0','0','0','0','0','4242','0','0','0','Zel\'mak','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70020','0','0','0','0','0','1721','0','0','0','Alyissia','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70021','0','0','0','0','0','1707','0','0','0','Kyra','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70022','0','0','0','0','0','2196','0','0','0','Arias\'ta','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70023','0','0','0','0','0','2198','0','0','0','Sildanair','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70024','0','0','0','0','0','2620','0','0','0','Chris','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70025','0','0','0','0','0','2658','0','0','0','Angela','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70026','0','0','0','0','0','2614','0','0','0','Baltus','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70027','0','0','0','0','0','3054','0','0','0','Kelv','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70028','0','0','0','0','0','3055','0','0','0','Bilban','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70029','0','0','0','0','0','3280','0','0','0','Wu','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70030','0','0','0','0','0','3287','0','0','0','Ilsa','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70031','0','0','0','0','0','6071','0','0','0','Darnath','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70032','0','0','0','0','0','11037','0','0','0','Evencane','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70033','0','0','0','0','0','16226','0','0','0','Kore','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70034','0','0','0','0','0','17212','0','0','0','Ahonan','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70035','0','0','0','0','0','17213','0','0','0','Behomat','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70036','0','0','0','0','0','17215','0','0','0','Ruada','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70037','0','0','0','0','0','17214','0','0','0','Kazi','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70038','0','0','0','0','0','17211','0','0','0','Kerra','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+-- 70039 - 70050 reserved for warriors
+('70051','0','0','0','0','0','3346','0','0','0','Sammuel','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70052','0','0','0','0','0','3393','0','0','0','Bromos','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70053','0','0','0','0','0','1299','0','0','0','Wilhelm','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70054','0','0','0','0','0','1499','0','0','0','Grayson','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70055','0','0','0','0','0','1622','0','0','0','Azar','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70056','0','0','0','0','0','3089','0','0','0','Valgar','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70057','0','0','0','0','0','3088','0','0','0','Beldruk','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70058','0','0','0','0','0','3087','0','0','0','Brandur','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70059','0','0','0','0','0','3284','0','0','0','Arthur','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70060','0','0','0','0','0','3289','0','0','0','Katherine','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70061','0','0','0','0','0','7356','0','0','0','Karman','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70062','0','0','0','0','0','15521','0','0','0','Jesthenis','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70063','0','0','0','0','0','16685','0','0','0','Noellene','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70064','0','0','0','0','0','16224','0','0','0','Aurelon','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70065','0','0','0','0','0','16815','0','0','0','Osselan','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70066','0','0','0','0','0','16811','0','0','0','Ithelis','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70067','0','0','0','0','0','16829','0','0','0','Bachi','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70068','0','0','0','0','0','17225','0','0','0','Baatun','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70069','0','0','0','0','0','17227','0','0','0','Kavaan','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70070','0','0','0','0','0','17234','0','0','0','Tullas','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70071','0','0','0','0','0','17226','0','0','0','Jol','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70072','0','0','0','0','0','19596','0','0','0','Cyssa','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70073','0','0','0','0','0','21264','0','0','0','Pyreanor','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70074','0','0','0','0','0','29735','0','0','0','Rukua','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+-- 70075 - 70100 reserved for paldins
+('70101','0','0','0','0','0','3395','0','0','0','Thorgas','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70102','0','0','0','0','0','4560','0','0','0','Ogromm','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70103','0','0','0','0','0','3558','0','0','0','Grif','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70104','0','0','0','0','0','4372','0','0','0','Kragg','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70105','0','0','0','0','0','2112','0','0','0','Kary','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70106','0','0','0','0','0','2087','0','0','0','Holt','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70107','0','0','0','0','0','2105','0','0','0','Urek','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70108','0','0','0','0','0','3810','0','0','0','Lanka','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70109','0','0','0','0','0','3811','0','0','0','Yaw','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70110','0','0','0','0','0','1882','0','0','0','Jen\'shan','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70111','0','0','0','0','0','3744','0','0','0','Thotar','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70112','0','0','0','0','0','1373','0','0','0','Ormak','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70113','0','0','0','0','0','4239','0','0','0','Xor\'juul','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70114','0','0','0','0','0','4241','0','0','0','Sian\'dur','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70115','0','0','0','0','0','1723','0','0','0','Ayanna','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70116','0','0','0','0','0','1703','0','0','0','Dazalar','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70117','0','0','0','0','0','2066','0','0','0','Danlaar','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70118','0','0','0','0','0','2205','0','0','0','Jeen\'ra','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70119','0','0','0','0','0','2206','0','0','0','Jocaste','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70120','0','0','0','0','0','2251','0','0','0','Dorion','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70121','0','0','0','0','0','3056','0','0','0','Daera','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70122','0','0','0','0','0','3072','0','0','0','Olmin','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70123','0','0','0','0','0','3073','0','0','0','Regnus','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70124','0','0','0','0','0','3299','0','0','0','Kaerbrus','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70125','0','0','0','0','0','3312','0','0','0','Einris','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70126','0','0','0','0','0','3309','0','0','0','Ulfir','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70127','0','0','0','0','0','3310','0','0','0','Thorfin','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70128','0','0','0','0','0','7538','0','0','0','Alenndaar','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70129','0','0','0','0','0','10245','0','0','0','Dargh','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70130','0','0','0','0','0','15520','0','0','0','Sallina','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70131','0','0','0','0','0','16681','0','0','0','Hannovia','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70132','0','0','0','0','0','16222','0','0','0','Keilnei','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70133','0','0','0','0','0','16778','0','0','0','Tana','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70134','0','0','0','0','0','16816','0','0','0','Oninath','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70135','0','0','0','0','0','16802','0','0','0','Zandine','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70136','0','0','0','0','0','17434','0','0','0','Deremiis','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70137','0','0','0','0','0','16860','0','0','0','Acteon','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70138','0','0','0','0','0','17511','0','0','0','Vord','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70139','0','0','0','0','0','17488','0','0','0','Killac','Hunter bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+-- 70140 - 70150 reserved for hunters
+('70151','0','0','0','0','0','3351','0','0','0','Jorik','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70152','0','0','0','0','0','3407','0','0','0','Solm','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70153','0','0','0','0','0','1297','0','0','0','Keryn','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70154','0','0','0','0','0','1507','0','0','0','Osborne','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70155','0','0','0','0','0','3436','0','0','0','Hogral','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70156','0','0','0','0','0','5146','0','0','0','Ian','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70157','0','0','0','0','0','1580','0','0','0','David','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70158','0','0','0','0','0','2130','0','0','0','Marion','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70159','0','0','0','0','0','1886','0','0','0','Rwag','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70160','0','0','0','0','0','3749','0','0','0','Kaplak','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70161','0','0','0','0','0','1327','0','0','0','Gest','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70162','0','0','0','0','0','1328','0','0','0','Ormok','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70163','0','0','0','0','0','4360','0','0','0','Shenthul','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70164','0','0','0','0','0','1725','0','0','0','Frahun','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70165','0','0','0','0','0','1704','0','0','0','Jannok','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70166','0','0','0','0','0','2231','0','0','0','Syurna','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70167','0','0','0','0','0','2252','0','0','0','Erion','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70168','0','0','0','0','0','2243','0','0','0','Anishar','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70169','0','0','0','0','0','2659','0','0','0','Carolyn','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70170','0','0','0','0','0','2639','0','0','0','Miles','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70171','0','0','0','0','0','2631','0','0','0','Gregory','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70172','0','0','0','0','0','3101','0','0','0','Hulfdan','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70173','0','0','0','0','0','3100','0','0','0','Ormyr','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70174','0','0','0','0','0','3113','0','0','0','Fenthwick','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70175','0','0','0','0','0','5528','0','0','0','Fahrad','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70176','0','0','0','0','0','13171','0','0','0','Tony','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70177','0','0','0','0','0','15519','0','0','0','Kariel','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70178','0','0','0','0','0','16689','0','0','0','Tannaria','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70179','0','0','0','0','0','16767','0','0','0','Zelanis','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70180','0','0','0','0','0','16798','0','0','0','Elara','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70181','0','0','0','0','0','16818','0','0','0','Nerisen','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+-- 70182 - 70200 reserved for rogues
+('70201','0','0','0','0','0','3344','0','0','0','Anetta','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70202','0','0','0','0','0','1495','0','0','0','Laurena','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70203','0','0','0','0','0','1295','0','0','0','Josetta','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70204','0','0','0','0','0','3401','0','0','0','Branstock','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70205','0','0','0','0','0','3429','0','0','0','Maxan','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70206','0','0','0','0','0','1579','0','0','0','Duesten','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70207','0','0','0','0','0','1602','0','0','0','Beryl','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70208','0','0','0','0','0','2139','0','0','0','Miles','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70209','0','0','0','0','0','2138','0','0','0','Malakai','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70210','0','0','0','0','0','2137','0','0','0','Cobb','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70211','0','0','0','0','0','1733','0','0','0','Shanda','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70212','0','0','0','0','0','1708','0','0','0','Laurna','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70213','0','0','0','0','0','1897','0','0','0','Tai\'jin','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70214','0','0','0','0','0','4068','0','0','0','Ken\'jai','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70215','0','0','0','0','0','2200','0','0','0','Astarii','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70216','0','0','0','0','0','2201','0','0','0','Jandria','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70217','0','0','0','0','0','2202','0','0','0','Lariia','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70218','0','0','0','0','0','2626','0','0','0','Lankester','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70219','0','0','0','0','0','2618','0','0','0','Lazarus','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70220','0','0','0','0','0','3086','0','0','0','Theodrus','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70221','0','0','0','0','0','3066','0','0','0','Braenna','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70222','0','0','0','0','0','3085','0','0','0','Toldren','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70223','0','0','0','0','0','3282','0','0','0','Benjamin','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70224','0','0','0','0','0','3283','0','0','0','Joshua','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70225','0','0','0','0','0','4690','0','0','0','Zayus','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70226','0','0','0','0','0','10473','0','0','0','X\'yera','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70227','0','0','0','0','0','4711','0','0','0','Ur\'kyo','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70228','0','0','0','0','0','11044','0','0','0','Nara','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70229','0','0','0','0','0','11048','0','0','0','Alathea','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70230','0','0','0','0','0','11053','0','0','0','Rohan','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70231','0','0','0','0','0','15518','0','0','0','Arena','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70232','0','0','0','0','0','16707','0','0','0','Ponaris','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70233','0','0','0','0','0','16225','0','0','0','Zalduun','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70234','0','0','0','0','0','16788','0','0','0','Aldrae','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70235','0','0','0','0','0','16817','0','0','0','Lotheolan','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70236','0','0','0','0','0','16795','0','0','0','Belestra','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70237','0','0','0','0','0','17247','0','0','0','Caedmos','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70238','0','0','0','0','0','17232','0','0','0','Guvan','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70239','0','0','0','0','0','17249','0','0','0','Izmir','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70240','0','0','0','0','0','17248','0','0','0','Fallat','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+-- 70241 - 70250 reserved for priests
+('70251','0','0','0','0','0','4552','0','0','0','Haromm','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70252','0','0','0','0','0','2123','0','0','0','Siln','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70253','0','0','0','0','0','2102','0','0','0','Tigor','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70254','0','0','0','0','0','2082','0','0','0','Beram','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70255','0','0','0','0','0','10180','0','0','0','Meela','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70256','0','0','0','0','0','3816','0','0','0','Narm','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70257','0','0','0','0','0','1878','0','0','0','Shikrik','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70258','0','0','0','0','0','3746','0','0','0','Swart','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70259','0','0','0','0','0','1360','0','0','0','Kardris','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70260','0','0','0','0','0','4231','0','0','0','Sian\'tsu','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70261','0','0','0','0','0','13341','0','0','0','Sagorne','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+-- ('70262','0','0','0','0','0','17598','0','0','0','Firmanvaar','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+-- ('70263','0','0','0','0','0','17600','0','0','0','Nobundo','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+-- ('70264','0','0','0','0','0','17599','0','0','0','Tuluun','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70265','0','0','0','0','0','16914','0','0','0','Sulaa','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+-- ('70266','0','0','0','0','0','17792','0','0','0','Hobahken','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70267','0','0','0','0','0','19598','0','0','0','Umbrua','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70268','0','0','0','0','0','21265','0','0','0','Javad','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+-- 70269 - 70300 reserved for shamans
+('70301','0','0','0','0','0','5001','0','0','0','Khelden','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70302','0','0','0','0','0','1294','0','0','0','Zaldimar','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70303','0','0','0','0','0','1484','0','0','0','Maginor','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70304','0','0','0','0','0','10216','0','0','0','Marryk','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70305','0','0','0','0','0','10215','0','0','0','Magis','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70306','0','0','0','0','0','1592','0','0','0','Isabella','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70307','0','0','0','0','0','1600','0','0','0','Cain','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70308','0','0','0','0','0','2134','0','0','0','Shymm','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70309','0','0','0','0','0','6058','0','0','0','Ursyn','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70310','0','0','0','0','0','2135','0','0','0','Thurston','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70311','0','0','0','0','0','2644','0','0','0','Pierce','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70312','0','0','0','0','0','2657','0','0','0','Anastasia','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70313','0','0','0','0','0','3108','0','0','0','Bink','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70314','0','0','0','0','0','10214','0','0','0','Juli','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70315','0','0','0','0','0','3109','0','0','0','Nittlebur','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70316','0','0','0','0','0','3292','0','0','0','Jennea','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70317','0','0','0','0','0','10171','0','0','0','Un\'Thuwa','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70318','0','0','0','0','0','4524','0','0','0','Pephredo','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70319','0','0','0','0','0','4522','0','0','0','Enyo','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70320','0','0','0','0','0','4526','0','0','0','Mai\'ah','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70321','0','0','0','0','0','4523','0','0','0','Deino','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70322','0','0','0','0','0','6060','0','0','0','Uthel\'nay','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70323','0','0','0','0','0','6072','0','0','0','Dink','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70324','0','0','0','0','0','15522','0','0','0','Julia','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70325','0','0','0','0','0','16680','0','0','0','Garridel','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70326','0','0','0','0','0','16223','0','0','0','Valaatu','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70327','0','0','0','0','0','16781','0','0','0','Zaedana','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70328','0','0','0','0','0','16824','0','0','0','Quithas','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70329','0','0','0','0','0','16809','0','0','0','Inethven','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70330','0','0','0','0','0','16777','0','0','0','Narinth','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70331','0','0','0','0','0','17242','0','0','0','Edirah','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70332','0','0','0','0','0','16856','0','0','0','Valustraa','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70333','0','0','0','0','0','17233','0','0','0','Semid','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70334','0','0','0','0','0','17243','0','0','0','Harnan','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70335','0','0','0','0','0','17241','0','0','0','Bati','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70336','0','0','0','0','0','11466','0','0','0','Derek','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+-- 70337 - 70350 reserved for mages
+('70351','0','0','0','0','0','3345','0','0','0','Drusilla','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70352','0','0','0','0','0','1930','0','0','0','Alamar','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70353','0','0','0','0','0','1469','0','0','0','Demisette','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70354','0','0','0','0','0','3271','0','0','0','Maximillian','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70355','0','0','0','0','0','4567','0','0','0','Kartosh','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70356','0','0','0','0','0','1581','0','0','0','Maximillion','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70357','0','0','0','0','0','1604','0','0','0','Rupert','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70358','0','0','0','0','0','1884','0','0','0','Nartok','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70359','0','0','0','0','0','3745','0','0','0','Dhugru','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70360','0','0','0','0','0','1324','0','0','0','Grol\'dar','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70361','0','0','0','0','0','1325','0','0','0','Mirket','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70362','0','0','0','0','0','1326','0','0','0','Zevrost','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70363','0','0','0','0','0','2675','0','0','0','Kaal','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70364','0','0','0','0','0','2637','0','0','0','Luther','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70365','0','0','0','0','0','2646','0','0','0','Richard','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70366','0','0','0','0','0','3115','0','0','0','Thistleheart','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70367','0','0','0','0','0','3116','0','0','0','Briarthorn','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70368','0','0','0','0','0','3122','0','0','0','Alexander','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70369','0','0','0','0','0','3291','0','0','0','Ursula','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70370','0','0','0','0','0','3286','0','0','0','Sandahl','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70371','0','0','0','0','0','3607','0','0','0','Gimrizz','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70372','0','0','0','0','0','15524','0','0','0','Teli\'Larien','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70373','0','0','0','0','0','16700','0','0','0','Celoenus','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70374','0','0','0','0','0','16787','0','0','0','Alamma','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70375','0','0','0','0','0','16800','0','0','0','Talionia','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70376','0','0','0','0','0','16831','0','0','0','Zanien','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70377','0','0','0','0','0','21604','0','0','0','Babagaya','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+-- 70378 - 70400 reserved for warlocks
+('70401','0','0','0','0','0','2106','0','0','0','Turak','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70402','0','0','0','0','0','2121','0','0','0','Sheal','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70403','0','0','0','0','0','2115','0','0','0','Kym','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70404','0','0','0','0','0','3819','0','0','0','Gart','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70405','0','0','0','0','0','10734','0','0','0','Gennia','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70406','0','0','0','0','0','1732','0','0','0','Mardant','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70407','0','0','0','0','0','1706','0','0','0','Kal','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70408','0','0','0','0','0','2261','0','0','0','Mathrengyl','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70409','0','0','0','0','0','2250','0','0','0','Denatharion','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70410','0','0','0','0','0','2255','0','0','0','Fylerian','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70411','0','0','0','0','0','3300','0','0','0','Sheldras','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70412','0','0','0','0','0','3301','0','0','0','Theridran','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70413','0','0','0','0','0','3302','0','0','0','Maldryn','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70414','0','0','0','0','0','7357','0','0','0','Jannos','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70415','0','0','0','0','0','10738','0','0','0','Golhine','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70416','0','0','0','0','0','12053','0','0','0','Loganaar','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70417','0','0','0','0','0','16739','0','0','0','Harene','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70418','0','0','0','0','0','16858','0','0','0','Shalannius','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+-- 70419 - 70450 reserved for druids
+('70451','0','0','0','0','0','24935','0','0','0','Siouxsie','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70452','0','0','0','0','0','26939','0','0','0','Imhadria','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70453','0','0','0','0','0','26854','0','0','0','Vaelen','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70454','0','0','0','0','0','28039','0','0','0','Mynx','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70455','0','0','0','0','0','26688','0','0','0','Lankral','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70456','0','0','0','0','0','26195','0','0','0','Sliver','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70457','0','0','0','0','0','27402','0','0','0','Vereth','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70458','0','0','0','0','0','27189','0','0','0','Arly','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70459','0','0','0','0','0','26217','0','0','0','Setaal','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70460','0','0','0','0','0','26222','0','0','0','Uzo','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70461','0','0','0','0','0','28842','0','0','0','Illyrie','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70462','0','0','0','0','0','28837','0','0','0','Crok','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70463','0','0','0','0','0','28840','0','0','0','Zor\'be','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70464','0','0','0','0','0','25512','0','0','0','Datura','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70465','0','0','0','0','0','25500','0','0','0','Stefan','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+-- 70466 - 70500 reserved for deathknights
+('70501','0','0','0','0','0','4449','0','0','0','Imp',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','1','135266416','warlock_pet_bot','-1'),
+('70502','0','0','0','0','0','1132','0','0','0','Voidwalker',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','1','135266416','warlock_pet_bot','-1'),
+('70503','0','0','0','0','0','4162','0','0','0','Succubus',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','1','135266416','warlock_pet_bot','-1'),
+('70504','0','0','0','0','0','850','0','0','0','Felhunter',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','1','135266416','warlock_pet_bot','-1'),
+('70505','0','0','0','0','0','14255','0','0','0','Felguard',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','1','135266416','warlock_pet_bot','-1'),
+('70506','0','0','0','0','0','368','0','0','0','Spider',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70507','0','0','0','0','0','4312','0','0','0','Serpent',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70508','0','0','0','0','0','16724','0','0','0','Bird of Prey',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70509','0','0','0','0','0','8808','0','0','0','Bat',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70510','0','0','0','0','0','17562','0','0','0','Wind Serpent',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70511','0','0','0','0','0','20308','0','0','0','Ravager',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70512','0','0','0','0','0','17545','0','0','0','Dragonhawk',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70513','0','0','0','0','0','19405','0','0','0','Nether Ray',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70514','0','0','0','0','0','17753','0','0','0','Sporebat',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70515','0','0','0','0','0','15590','0','0','0','Carrion Bird',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70516','0','0','0','0','0','11319','0','0','0','Raptor',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70517','0','0','0','0','0','741','0','0','0','Wolf',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70518','0','0','0','0','0','1220','0','0','0','Tallstrider',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70519','0','0','0','0','0','321','0','0','0','Cat',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70520','0','0','0','0','0','2714','0','0','0','Hyena',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70521','0','0','0','0','0','29113','0','0','0','Wasp',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70522','0','0','0','0','0','17798','0','0','0','Teromoth',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70523','0','0','0','0','0','20790','0','0','0','Scorpid',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70524','0','0','0','0','0','1244','0','0','0','Turtle',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70525','0','0','0','0','0','809','0','0','0','Gorilla',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70526','0','0','0','0','0','706','0','0','0','Bear',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70527','0','0','0','0','0','381','0','0','0','Boar',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70528','0','0','0','0','0','1938','0','0','0','Crab',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70529','0','0','0','0','0','1250','0','0','0','Crocolisk',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70530','0','0','0','0','0','19998','0','0','0','Warp Stalker',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70531','0','0','0','0','0','11087','0','0','0','Silithid',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70532','0','0','0','0','0','10810','0','0','0','Chimaera',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70533','0','0','0','0','0','29673','0','0','0','Spirit Beast',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70534','0','0','0','0','0','12168','0','0','0','Core Hound',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70535','0','0','0','0','0','5239','0','0','0','Devilsaur',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70536','0','0','0','0','0','26279','0','0','0','Rhino',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70537','0','0','0','0','0','13212','0','0','0','Worm',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70538','0','0','0','0','0','24994','24993','24992','24995','Risen Ghoul',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','deathknight_pet_bot','-1'),
+-- 70539 - 70541 reserved for dk pets
+('70542','0','0','0','0','0','19110','0','0','0','Shadowfiend',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','5','1500','1500','2','0','0','0','0','10','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','priest_pet_bot','-1'),
+('70543','0','0','0','0','0','21114','0','0','0','Spirit Wolf',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','1500','1500','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','shaman_pet_bot','-1'),
+('70544','0','0','0','0','0','525','0','0','0','Water Elemental',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','4','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','mage_pet_bot','-1'),
+('70545','0','0','0','0','0','18922','0','0','0','Treant',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','4','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','druid_pet_bot','-1'),
+-- 70546 - 70550 reserved for pets
+('70551','0','0','0','0','0','17659','0','0','0','Gorkramato','Blademaster Bot','','0','81','81','2','35','1','1.1','1.1','1','4','0','2200','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157560','blademaster_bot','-1'),
+('70552','0','0','0','0','0','17659','0','0','0','Mirror Image (Blademaster)','Blademaster bot','','0','81','81','2','35','1','1.1','1.1','1','4','0','2200','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157560','blademaster_bot','-1'),
+('70553','0','0','0','0','0','15343','0','0','0','Osis','Obsidian Destroyer Bot','','0','83','83','2','35','1','1.1','1.1','0.7','2','0','1200','1200','8','0','0','0','0','10','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','sphynx_bot','-1'),
+('70554','0','0','0','0','0','15343','0','0','0','Amot','Obsidian Destroyer Bot','','0','83','83','2','35','1','1.1','1.1','0.7','2','0','1200','1200','8','0','0','0','0','10','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','sphynx_bot','-1'),
+('70555','0','0','0','0','0','6769','0','0','0','Detrae','Archmage Bot','','0','81','81','2','35','1','1.1','1.1','1','4','0','1420','1420','8','0','16432','0','0','7','2048','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','archmage_bot','-1'),
+('70556','0','0','0','0','0','5561','0','0','0','Water Elemental',NULL,'','0','81','81','2','35','0','1.2','1.3','1','0','0','1500','1500','1','0','0','0','0','4','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','archmage_pet_bot','-1'),
+('70557','0','0','0','0','0','348','0','0','0','Neroth','Dreadlord Bot','','0','83','83','2','35','1','1.1','1.1','1.5','2','0','1300','1300','2','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dreadlord_bot','-1'),
+('70558','0','0','0','0','0','348','0','0','0','Fearoth','Dreadlord Bot','','0','83','83','2','35','1','1.1','1.1','1.5','2','0','1300','1300','2','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dreadlord_bot','-1'),
+('70559','0','0','0','0','0','348','0','0','0','Zalamon','Dreadlord Bot','','0','83','83','2','35','1','1.1','1.1','1.5','2','0','1300','1300','2','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dreadlord_bot','-1'),
+('70560','0','0','0','0','0','348','0','0','0','Lotthicus','Dreadlord Bot','','0','83','83','2','35','1','1.1','1.1','1.5','2','0','1300','1300','2','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dreadlord_bot','-1'),
+('70561','0','0','0','0','0','348','0','0','0','Ramarot','Dreadlord Bot','','0','83','83','2','35','1','1.1','1.1','1.5','2','0','1300','1300','2','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dreadlord_bot','-1'),
+('70562','0','0','0','0','0','169','0','0','0','Infernal',NULL,'','0','83','83','2','35','0','1.2','1.3','1.5','0','2','1350','1350','1','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','dreadlord_pet_bot','-1'),
+('70563','0','0','0','0','0','15511','0','0','0','Eanor','Spell Breaker Bot','','0','81','81','2','35','1','1.1','1.1','1.5','4','0','1900','1900','2','0','0','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','spellbreaker_bot','-1'),
+('70564','0','0','0','0','0','15511','0','0','0','Narsen','Spell Breaker Bot','','0','81','81','2','35','1','1.1','1.1','1.5','4','0','1900','1900','2','0','0','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','spellbreaker_bot','-1'),
+('70565','0','0','0','0','0','15511','0','0','0','Caelnor','Spell Breaker Bot','','0','81','81','2','35','1','1.1','1.1','1.5','4','0','1900','1900','2','0','0','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','spellbreaker_bot','-1'),
+('70566','0','0','0','0','0','15511','0','0','0','Daenste','Spell Breaker Bot','','0','81','81','2','35','1','1.1','1.1','1.5','4','0','1900','1900','2','0','0','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','spellbreaker_bot','-1'),
+('70567','0','0','0','0','0','15511','0','0','0','Neshdar','Spell Breaker Bot','','0','81','81','2','35','1','1.1','1.1','1.5','4','0','1900','1900','2','0','0','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','spellbreaker_bot','-1'),
+('70568','0','0','0','0','0','30072','0','0','0','Mara','Dark Ranger Bot','','0','83','83','2','35','1','1.1','1.1','1','2','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_bot','-1'),
+('70569','0','0','0','0','0','30072','0','0','0','Tani','Dark Ranger Bot','','0','83','83','2','35','1','1.1','1.1','1','2','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_bot','-1'),
+('70570','0','0','0','0','0','30072','0','0','0','Eva','Dark Ranger Bot','','0','83','83','2','35','1','1.1','1.1','1','2','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_bot','-1'),
+('70571','0','0','0','0','0','30072','0','0','0','Darise','Dark Ranger Bot','','0','83','83','2','35','1','1.1','1.1','1','2','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_bot','-1'),
+('70572','0','0','0','0','0','30072','0','0','0','Lyra','Dark Ranger Bot','','0','83','83','2','35','1','1.1','1.1','1','2','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_bot','-1'),
+('70573','0','0','0','0','0','30363','0','0','0','Dark Minion',NULL,'','0','83','83','2','35','0','1.1','1.1','1','0','0','2000','2000','1','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_pet_bot','-1'),
+('70574','0','0','0','0','0','30363','0','0','0','Dark Minion',NULL,'','0','83','83','2','35','0','1.1','1.1','1','1','0','2000','2000','1','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_pet_bot','-1');
+-- 70575 - 71000 reserved for custom stuff
+
+-- GOSSIPS --
+delete from `npc_text` where ID between @BOT_START and @BOT_END;
+insert into `npc_text` (`ID`,`text0_0`,`VerifiedBuild`)
+values
+('70001','I live only to serve the master.','-1'),
+('70002','You need something?','-1'),
+('70003','Mortals... usually I kill wretches like you at sight.','-1'),
+('70004','','-1'),
+('70005','','-1'),
+('70006','Are you surprised, mortal? As a lesser nathrezim I have to resort to seeking out allies. You look like you could amuse me at least.','-1'),
+('70007','What is it now, mortal?','-1'),
+('70008','Can you just leave me be? ','-1'),
+('70009','Now what?','-1'),
+-- 70010 - 70100 reserved for standard/greet gossips
+('70101','|cffff3300Blademaster|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"An elite swordsman, former member of Burning Blade clan, now an elite fighter within the Horde\".$B$BMain attribute: Agility.$B$BNetherwalk (Windwalk). Allows Blademaster to become invisible, and move faster for a set amount of time. When the Blademaster attacks a unit to break invisibility, he will deal bonus damage.$B$BMirror Image. Confuses the enemy by creating illusions of the Blademaster and dispelling all magic from the Blademaster.$B$BCritical Strike (passive). Gives a 15% chance to deal critical x2(x3,x4) times normal damage on his attacks.$B$BBladestorm (NIY). Grants immunity to magic and deals damage to all surrounding enemies.$B$B','-1'),
+('70102','|cff9900ccObsidian Destroyer|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"An obsidian winged monstrocity with insatiable hunger for magic\".$B$BHigh armor, very high resistances, partially immune to magic, loses mana over time and doesn\'t benefit from passive mana regeneration effects, mail/plate armor, dual-wielding wands, deals spellshadow damage, no physical attack, cannot attack enemies not in front while moving, spell power bonus: 50% attack power + 200% intellect + wands damage.$B$BDevour Magic. Dispels up to 2 magic effects from enemies, up to 2 magic effects and up to 2 curses from allies and damaging summoned units in 20 yards area. Every dispelled effect restores 20% mana and 5% health, 7 seconds cooldown.$B$BShadow Blast. Empowered attack that deals increased splash damage.$B$BDrain Mana. Drains all mana (limited by caster\'s mana pool) from a random friendly unit.$B$BReplenish Mana. Energizes surrounding party and raid members within 25 yards for 2% of their maximum mana nullifying caster\'s mana, affects up to 10 targets, 3 seconds cooldown.$B$BRegenerating Aura. Heals surrounding party and raid members within 25 yards for 3% of their maximum health nullifying caster\'s mana, affects up to 10 targets, 3 seconds cooldown.$B$BShadow Armor (passive). Restores mana equal to a percentage of damage taken.$B$B','-1'),
+('70103','|cff0000ddArchmage|r$b|cffdd6600-=Warcraft III tribute=-|r$B$BSpell damage taken reduced by 35%, partially immune to control effects, cloth armor, deals spellsfire/spellfrost damage, no physical attack, spell power bonus: 100% intellect. Main attribute: Intellect.$B$BBlizzard. Your typical blizzard, just a little more powerful, 6 seconds cooldown.$B$BSummon Water Elemental. Summons a water elemental to attack archmage\'s enemies for 1 min, 20 seconds cooldown.$B$BBrilliance Aura. Increases maximum mana by 10% and greatly increases mana regeneration of party and raid members within 40 yards.$B$BMass Teleport. NIY.','-1'),
+('70104','|cff9900ccDreadlord|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"Incredibly powerful demon who wields power of darkness and mental domination\".$B$BHigh armor, high resistances, partially immune to control effects, damage taken speeds up spells recharge, plate armor, deals melee/spellshadow damage, bonus damage against incapacitated targets, spell power bonus: 200% strength. Main attribute: Strength.$B$BCarrion Swarm. Sends a horde of bats combined with chaotic magic to damage enemies in a very large frontal cone, cannot crit, 10 seconds cooldown.$B$BSleep. Puts the enemy target to sleep for 60 seconds and allows next physical attack on that target to bypass armor, direct damage caused will awaken the target, 6 seconds cooldown.$B$BVampiric Aura. Increases physical critical damage by 5% and heals party and raid members within 40 yards for a percentage (100% for Dreadlord and 25% for everyone else) of damage done by melee physical attacks and Carrion Swarm, no threat.$B$BSummon Infernal Servant. Calls an infernal down from the sky dealing damage and stunning enemy units, infernal is very resistant to magic and lasts 180 seconds, 180 seconds cooldown.','-1'),
+('70105','|cff0000ddSpell Breaker|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"An elven warrior trained to disrupt and contort magical energies\".$B$BSpell damage taken reduced by 75%, partially immune to control effects, armor penalty -30%, mail/plate armor, deals melee/arcane damage, spell power bonus: 200% strength. Main attribute: Strength.$B$BSteal Magic (Spellsteal). Steals a benefical spell from an enemy and applies it to a nearby ally or removes a negative spell from an ally and applies it to a nearby enemy, affects magic and curse effects, 3 seconds cooldown.$B$BFeedback (passive). Successful melee attacks burn target\'s mana equal to damage caused (increased by spellpower) dealing arcane damage. If target is drained, Spell Breaker\'s melee attacks will do triple damage with increased critical strike chance','-1'),
+('70106','|cff9900ccDark Ranger|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"A former ranger of Quel\'thalas forcibly raised from the dead\".$B$BSpell damage taken reduced by 35%, undead, partially immune to control effects, leather/cloth armor, deals physical/spellshadow damage, stick to shadows and generates no threat, spell power bonus: 50% intellect. Main attribute: Agility.$B$BSilence. Silences an enemy and up to 4 nearby targets for 8 seconds, 15 seconds cooldown.$B$BBlack Arrow. Fires a cursed arrow dealing 150% weapon damage and additional spellshadow damage over time. If affected target dies from Dark Ranger\'s damage, Dark Minion will spawn from the corpse (maximum 5 Minions, 80 seconds duration, only works on humanoids, beasts and dragonkin). Deals five times more damage if target is under 20% health.$B$BDrain Life. Drains health from an enemy every second for 5 seconds, healing Dark Ranger for 200% of the drained amount.','-1');
+-- 70107 - 70200 reserved for custom class descriptions
+
+-- OUTFITS --
+-- Npc Dress mod by Rochet2
+CREATE TABLE IF NOT EXISTS `creature_template_outfits` (
+ `entry` INT(10) UNSIGNED NOT NULL,
+ `race` tinyint(3) UNSIGNED NOT NULL DEFAULT '1',
+ `gender` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0 for male, 1 for female',
+ `skin` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
+ `face` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
+ `hair` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
+ `haircolor` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
+ `facialhair` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
+ `head` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `shoulders` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `body` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `chest` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `waist` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `legs` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `feet` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `wrists` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `hands` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `back` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `tabard` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+-- End Npc Dress mod
+
+replace into `creature_template_outfits` (`entry`, `race`, `gender`, `skin`, `face`, `hair`, `haircolor`, `facialhair`, `head`, `shoulders`, `body`, `chest`, `waist`, `legs`, `feet`, `wrists`, `hands`, `back`, `tabard`)
+values
+('70551','2','0','0','14','9','7','5','0','0','0','0','59194','64674','0','36248','0','0','0'), -- Blademaster
+('70552','2','0','0','14','9','7','5','0','0','0','0','59194','64674','0','36248','0','0','0'); -- Mirror Image (Blademaster)
+
+-- Customize section
+
+SET @CLASS_WARRIOR = 1;
+SET @CLASS_PALADIN = 2;
+SET @CLASS_HUNTER = 3;
+SET @CLASS_ROGUE = 4;
+SET @CLASS_PRIEST = 5;
+SET @CLASS_DK = 6;
+SET @CLASS_SHAMAN = 7;
+SET @CLASS_MAGE = 8;
+SET @CLASS_WARLOCK = 9;
+SET @CLASS_DRUID = 11;
+SET @CLASS_BM = 12;
+SET @CLASS_SPHYNX = 13;
+SET @CLASS_ARCHMAGE = 14;
+SET @CLASS_DREADLORD = 15;
+SET @CLASS_SPELLBREAKER = 16;
+SET @CLASS_DARK_RANGER = 17;
+
+-- Add flags_extra
+
+SET @EX_NO_PARRY_HASTEN = 8; -- 0x00000008 - CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN
+SET @EX_NO_BLOCK = 16; -- 0x00000010 - CREATURE_FLAG_EXTRA_NO_BLOCK
+SET @EX_NO_CRUSH = 32; -- 0x00000020 - CREATURE_FLAG_EXTRA_NO_CRUSH
+SET @EX_NO_XP = 64; -- 0x00000040 - CREATURE_FLAG_EXTRA_NO_XP_AT_KILL
+SET @EX_DIMINISH = 1048576; -- 0x00100000 - CREATURE_FLAG_EXTRA_ALL_DIMINISH
+SET @EX_NPCBOT = 67108864; -- 0x04000000 - CREATURE_FLAG_EXTRA_NPCBOT - custom flag
+SET @EX_NPCBOT_PET = 134217728; -- 0x08000000 - CREATURE_FLAG_EXTRA_NPCBOT_PET - custom flag
+SET @FLAGS_EX = @EX_NO_BLOCK | @EX_NO_CRUSH | @EX_NO_XP | @EX_DIMINISH | @EX_NPCBOT;
+SET @FLAGS_EXN = @EX_NO_BLOCK | @EX_NO_CRUSH | @EX_NO_XP | @EX_DIMINISH | @EX_NPCBOT | @EX_NO_PARRY_HASTEN;
+SET @FLAGS_EX_PET = @EX_NO_BLOCK | @EX_NO_CRUSH | @EX_NO_XP | @EX_DIMINISH | @EX_NPCBOT_PET;
+SET @FLAGS_EX_PET_BLOCK = @EX_NO_CRUSH | @EX_NO_XP | @EX_DIMINISH | @EX_NPCBOT_PET;
+
+-- Add unit_flags
+-- SET @U_PVP_ATTACKABLE = 8; -- 0x00000008 - UNIT_FLAG_PVP_ATTACKABLE
+SET @FLAGS_U = 0;
+SET @FLAGS_U_PET = 0;
+
+-- Add unit_flags2
+SET @U2_MIRROR_IMAGE = 16; -- 0x00000010 - UNIT_FLAG2_MIRROR_IMAGE - 22.06.19
+SET @U2_INSTANT_APPEAR_MODEL= 32; -- 0x00000020 - UNIT_FLAG2_INSTANTLY_APPEAR_MODEL - 29.05.19
+SET @U2_ENEMY_INTERRACT = 16384; -- 0x00004000 - UNIT_FLAG2_ALLOW_ENEMY_INTERACT
+-- SET @U2_DISABLE_TURN = 32768; -- 0x00008000 - UNIT_FLAG2_DISABLE_TURN
+SET @FLAGS_U2 = @U2_MIRROR_IMAGE | @U2_INSTANT_APPEAR_MODEL | @U2_ENEMY_INTERRACT;
+SET @FLAGS_U2_NM = @U2_INSTANT_APPEAR_MODEL | @U2_ENEMY_INTERRACT;
+SET @FLAGS_U2_PET = 0;
+
+-- Add type_flags
+SET @CT_CAN_ASSIST = 4096; -- 0x00001000 - CREATURE_TYPE_FLAG_CAN_ASSIST - 26.10.19
+SET @FLAGS_CT = @CT_CAN_ASSIST;
+
+-- general
+UPDATE `creature_template` SET type_flags:=`type_flags`|@FLAGS_CT WHERE `entry` BETWEEN @BOT_START AND @BOT_END;
+
+-- minions
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=3300, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DK);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=2200, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DRUID);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=2800, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_HUNTER);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=3800, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_MAGE);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=2300, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_PALADIN);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=3600, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_PRIEST);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=1600, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_ROGUE);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=2600, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SHAMAN);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=3500, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_WARLOCK);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=3400, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_WARRIOR);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=81, maxlevel:=81, BaseAttackTime:=1940, RangeAttackTime:=1940, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=1, flags_extra:=@FLAGS_EXN,unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_BM);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=83, maxlevel:=83, BaseAttackTime:=1350, RangeAttackTime:=1350, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1,scale:=0.7,HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2_NM, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SPHYNX);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=81, maxlevel:=81, BaseAttackTime:=1420, RangeAttackTime:=1420, dynamicflags:=0, speed_walk:=1.1, speed_run:=2.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_ARCHMAGE);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=83, maxlevel:=83, BaseAttackTime:=2600, RangeAttackTime:=2600, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1,scale:=1.2,HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2_NM, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DREADLORD);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=81, maxlevel:=81, BaseAttackTime:=1900, RangeAttackTime:=1900, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1,scale:=1.1,HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2_NM, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SPELLBREAKER);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=82, maxlevel:=82, BaseAttackTime:=2000, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2_NM, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DARK_RANGER);
+
+-- pets
+SET @PET_START = 70501;
+SET @PET_END = 70550;
+SET @PET_WATER_ELEMENTAL = 70556;
+SET @PET_INFERNAL = 70562;
+SET @PET_DARK_MINION = 70573;
+SET @PET_DARK_MINION_ELITE = 70574;
+
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, dynamicflags:=0, speed_walk:=1.2, speed_run:=1.3, scale:=1.0, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, flags_extra:=@FLAGS_EX_PET, unit_flags:=`unit_flags`|@FLAGS_U_PET, unit_flags2:=`unit_flags2`|@FLAGS_U2_PET, AIName:=''
+WHERE `entry` BETWEEN @PET_START and @PET_END;
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=81, maxlevel:=81, dynamicflags:=0, speed_walk:=1.2, speed_run:=1.3, scale:=1.3, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, flags_extra:=@FLAGS_EX_PET, unit_flags:=`unit_flags`|@FLAGS_U_PET, unit_flags2:=`unit_flags2`|@FLAGS_U2_PET, AIName:=''
+WHERE `entry`=@PET_WATER_ELEMENTAL;
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=83, maxlevel:=83, dynamicflags:=0, speed_walk:=1.2, speed_run:=1.3, scale:=1.5, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, flags_extra:=@FLAGS_EX_PET, unit_flags:=`unit_flags`|@FLAGS_U_PET, unit_flags2:=`unit_flags2`|@FLAGS_U2_PET, AIName:=''
+WHERE `entry`=@PET_INFERNAL;
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=83, maxlevel:=83, dynamicflags:=0, speed_walk:=1.2, speed_run:=1.3, scale:=0.8, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, flags_extra:=@FLAGS_EX_PET_BLOCK, unit_flags:=`unit_flags`|@FLAGS_U_PET, unit_flags2:=`unit_flags2`|@FLAGS_U2_PET, AIName:=''
+WHERE `entry`=@PET_DARK_MINION;
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=83, maxlevel:=83, dynamicflags:=0, speed_walk:=1.2, speed_run:=1.3, scale:=0.9, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, flags_extra:=@FLAGS_EX_PET_BLOCK, unit_flags:=`unit_flags`|@FLAGS_U_PET, unit_flags2:=`unit_flags2`|@FLAGS_U2_PET, AIName:=''
+WHERE `entry`=@PET_DARK_MINION_ELITE;
diff --git a/sql/Bot SQL/4_world_generate_bot_equips.sql b/sql/Bot SQL/4_world_generate_bot_equips.sql
new file mode 100644
index 0000000000000..3658fab46fca4
--- /dev/null
+++ b/sql/Bot SQL/4_world_generate_bot_equips.sql
@@ -0,0 +1,159 @@
+/*!50003 DROP PROCEDURE IF EXISTS `sp__generate_npcbot_equips`*/;
+
+DELIMITER ;;
+
+/*!50003 CREATE*/
+/*!50003 PROCEDURE `sp__generate_npcbot_equips`()
+BEGIN
+
+DECLARE CLASS_WARRIOR INT DEFAULT 1;
+DECLARE CLASS_PALADIN INT DEFAULT 2;
+DECLARE CLASS_HUNTER INT DEFAULT 3;
+DECLARE CLASS_ROGUE INT DEFAULT 4;
+DECLARE CLASS_PRIEST INT DEFAULT 5;
+DECLARE CLASS_DEATH_KNIGHT INT DEFAULT 6;
+DECLARE CLASS_SHAMAN INT DEFAULT 7;
+DECLARE CLASS_MAGE INT DEFAULT 8;
+DECLARE CLASS_WARLOCK INT DEFAULT 9;
+DECLARE CLASS_DRUID INT DEFAULT 11;
+DECLARE CLASS_BLADEMASTER INT DEFAULT 12;
+DECLARE CLASS_SPHYNX INT DEFAULT 13;
+DECLARE CLASS_ARCHMAGE INT DEFAULT 14;
+DECLARE CLASS_DREADLORD INT DEFAULT 15;
+DECLARE CLASS_SPELL_BREAKER INT DEFAULT 16;
+DECLARE CLASS_DARK_RANGER INT DEFAULT 17;
+
+DECLARE RACE_HUMAN INT DEFAULT 1;
+DECLARE RACE_ORC INT DEFAULT 2;
+DECLARE RACE_DWARF INT DEFAULT 3;
+DECLARE RACE_NELF INT DEFAULT 4;
+DECLARE RACE_UNDEAD INT DEFAULT 5;
+DECLARE RACE_TAUREN INT DEFAULT 6;
+DECLARE RACE_GNOME INT DEFAULT 7;
+DECLARE RACE_TROLL INT DEFAULT 8;
+DECLARE RACE_BELF INT DEFAULT 10;
+DECLARE RACE_DRAENEI INT DEFAULT 11;
+
+DECLARE NPCBOT_ENTRY_BEGIN INT DEFAULT 70001;
+DECLARE NPCBOT_ENTRY_END INT DEFAULT 71000;
+
+DECLARE NPCBOT_ENTRY_PET_DARK_MINION INT DEFAULT 70573;
+DECLARE NPCBOT_ENTRY_PET_DARK_MINION_ELITE INT DEFAULT 70574;
+
+DECLARE cur_pos INT DEFAULT 0;
+DECLARE myclass INT;
+DECLARE myrace INT;
+DECLARE item1 INT DEFAULT 0;
+DECLARE item2 INT DEFAULT 0;
+DECLARE item3 INT DEFAULT 0;
+
+DELETE FROM `creature_equip_template` WHERE `CreatureID` BETWEEN NPCBOT_ENTRY_BEGIN AND NPCBOT_ENTRY_END;
+
+SET cur_pos = NPCBOT_ENTRY_BEGIN;
+WHILE cur_pos < NPCBOT_ENTRY_END DO
+ SET myclass = (SELECT `class` FROM `creature_template_npcbot_extras` WHERE `entry` = cur_pos);
+ SET myrace = (SELECT `race` FROM `creature_template_npcbot_extras` WHERE `entry` = cur_pos);
+
+ IF myclass != 0 AND myrace != 0 THEN
+
+ IF myclass = CLASS_WARRIOR THEN
+ IF myrace = RACE_TAUREN THEN
+ SET item1 = 2361; -- hammer
+ ELSEIF myrace IN(RACE_DWARF,RACE_ORC) THEN
+ SET item1 = 2483; -- axe
+ ELSEIF TRUE THEN
+ SET item1 = 2497; -- sword
+ END IF;
+ ELSEIF myclass = CLASS_PALADIN THEN
+ SET item1 = 2488; -- gladius
+ SET item3 = 0;
+ IF myrace = RACE_BELF THEN
+ SET item2 = 20841; -- sunstrider shield
+ ELSE
+ SET item2 = 7188; -- stormwind guard shield
+ END IF;
+ ELSEIF myclass = CLASS_HUNTER THEN
+ SET item1 = 12282;
+ SET item2 = 0;
+ SET item3 = 2506;
+ ELSEIF myclass = CLASS_ROGUE THEN
+ SET item3 = 25873;
+ IF (cur_pos % 2) = 1 THEN
+ SET item1 = 2092;
+ SET item2 = 3296; -- daggers
+ ELSE
+ SET item1 = 2131;
+ SET item2 = 2484; -- swords
+ END IF;
+ ELSEIF myclass = CLASS_PRIEST THEN
+ SET item1 = 1388; -- short staff
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_DEATH_KNIGHT THEN
+ SET item1 = 38633; -- dk axe
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_SHAMAN THEN
+ SET item1 = 15903; -- claw
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_MAGE THEN
+ SET item1 = 2132; -- staff
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_WARLOCK THEN
+ SET item1 = 3661; -- staff
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_DRUID THEN
+ SET item1 = 3327; -- staff
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_BLADEMASTER THEN
+ SET item1 = 24044; -- blademaster polearm
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_SPHYNX THEN
+ SET item1 = 5208; -- smoldering wand
+ SET item2 = 5208;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_ARCHMAGE THEN
+ SET item1 = 25917; -- white staff
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_DREADLORD THEN
+ SET item1 = 0;
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_SPELL_BREAKER THEN
+ SET item1 = 0;
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_DARK_RANGER THEN
+ SET item1 = 20849; -- arcane forged shortsword (1.7 dps)
+ SET item2 = 0;
+ SET item3 = 34529; -- vengeful gladiator's longbow
+ END IF;
+
+ INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`itemID1`,`itemID2`,`itemID3`,`VerifiedBuild`) VALUES (cur_pos,1,item1,item2,item3,-1);
+
+ ELSEIF cur_pos = NPCBOT_ENTRY_PET_DARK_MINION OR cur_pos = NPCBOT_ENTRY_PET_DARK_MINION_ELITE THEN
+ SET item1 = 3935;
+ SET item2 = 15648;
+ SET item3 = 0;
+
+ INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`itemID1`,`itemID2`,`itemID3`,`VerifiedBuild`) VALUES (cur_pos,1,item1,item2,item3,-1);
+
+ END IF;
+
+ SET cur_pos = cur_pos + 1;
+
+END WHILE;
+
+END */;;
+
+DELIMITER ;
+
+CALL `sp__generate_npcbot_equips`();
+
+DROP PROCEDURE IF EXISTS `sp__generate_npcbot_equips`;
diff --git a/sql/Bot SQL/5_world_botgiver.sql b/sql/Bot SQL/5_world_botgiver.sql
new file mode 100644
index 0000000000000..71bf3443453c9
--- /dev/null
+++ b/sql/Bot SQL/5_world_botgiver.sql
@@ -0,0 +1,18 @@
+DELETE FROM `creature_template` WHERE `entry` = 70000;
+INSERT INTO `creature_template`
+(`entry`,`difficulty_entry_1`,`difficulty_entry_2`,`difficulty_entry_3`,`KillCredit1`,`KillCredit2`,
+`modelid1`,`modelid2`,`modelid3`,`modelid4`,`name`,`subname`,`IconName`,`gossip_menu_id`,`minlevel`,`maxlevel`,`exp`,
+`faction`,`npcflag`,`speed_walk`,`speed_run`,`scale`,`rank`,`dmgschool`,`BaseAttackTime`,`RangeAttackTime`,
+`BaseVariance`,`RangeVariance`,`unit_class`,`unit_flags`,`unit_flags2`,`dynamicflags`,`family`,`type`,`type_flags`,`lootid`,
+`pickpocketloot`,`skinloot`,`PetSpellDataId`,`VehicleId`,`mingold`,`maxgold`,`AIName`,`MovementType`,
+`HoverHeight`,`HealthModifier`,`ManaModifier`,`ArmorModifier`,`DamageModifier`,`ExperienceModifier`,`RacialLeader`,`movementId`,`RegenHealth`,
+`mechanic_immune_mask`,`spell_school_immune_mask`,`flags_extra`,`ScriptName`,`VerifiedBuild`)
+VALUES
+('70000','0','0','0','0','0','27541','0','0','0','Lagretta','Bots for hire','','0','83','83','2','35','1','1.4','1.14286','0.7','4','0','0','0','1','1','1','33088','2048','0','0','0','0','0','0','0','0','0','0','0','','0','1','4.8','1','1','1','1','0','0','1','0','0','0','script_bot_giver','-1');
+
+DELETE FROM `npc_text` WHERE `ID` BETWEEN 70201 AND 70204;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70201','There are always dudes ready to kill for money.','-1'),
+('70202','Mercenaries are always in demand. Here is what available right now.','-1'),
+('70203','Mercenaries are always in demand. Here is what available right now.','-1'),
+('70204','Seems like there is nobody available right now, check again later.','-1');
diff --git a/sql/Bot SQL/ALL_auth.sql b/sql/Bot SQL/ALL_auth.sql
new file mode 100644
index 0000000000000..cc51b153689fe
--- /dev/null
+++ b/sql/Bot SQL/ALL_auth.sql
@@ -0,0 +1,134 @@
+--
+SET @PERMISSION_START = 70001;
+SET @PERMISSION_END = 70033;
+
+DELETE FROM `rbac_permissions` WHERE id BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_permissions` (`id`,`name`) VALUES
+('70001','Command: npcbot'),
+('70002','Command: npcbot add'),
+('70003','Command: npcbot remove'),
+('70004','Command: npcbot spawn'),
+('70005','Command: npcbot move'),
+('70006','Command: npcbot delete'),
+('70007','Command: npcbot lookup'),
+('70008','Command: npcbot revive'),
+('70009','Command: npcbot reloadconfig'),
+('70010','Command: npcbot info'),
+('70011','Command: npcbot hide'),
+('70012','Command: npcbot unhide'),
+('70013','Command: npcbot recall'),
+('70014','Command: npcbot kill'),
+('70015','Command: npcbot debug raid'),
+('70016','Command: npcbot debug mount'),
+('70017','Command: npcbot debug spellvisual'),
+('70018','Command: npcbot debug states'),
+('70019','Command: npcbot toggle flags'),
+('70020','Command: npcbot set faction'),
+('70021','Command: npcbot set owner'),
+('70022','Command: npcbot set spec'),
+('70023','Command: npcbot command standstill'),
+('70024','Command: npcbot command stopfully'),
+('70025','Command: npcbot command follow'),
+('70026','Command: npcbot distance attack short'),
+('70027','Command: npcbot distance attack long'),
+('70028','Command: npcbot distance attack'),
+('70029','Command: npcbot distance'),
+('70030','Command: npcbot order cast'),
+('70031','Command: npcbot vehicle eject'),
+('70032','Command: npcbot dump load'),
+('70033','Command: npcbot dump write');
+--
+SET @PERMISSION_START = 70001;
+SET @PERMISSION_END = 70033;
+
+DELETE FROM `rbac_linked_permissions` WHERE linkedId BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES
+('199','70001'),
+('197','70002'),
+('197','70003'),
+('197','70004'),
+('197','70005'),
+('197','70006'),
+('197','70007'),
+('197','70008'),
+('197','70009'),
+('199','70010'),
+('199','70011'),
+('199','70012'),
+('199','70013'),
+('199','70014'),
+('197','70015'),
+('197','70016'),
+('197','70017'),
+('197','70018'),
+('197','70019'),
+('197','70020'),
+('197','70021'),
+('197','70022'),
+('199','70023'),
+('199','70024'),
+('199','70025'),
+('199','70026'),
+('199','70027'),
+('199','70028'),
+('199','70029'),
+('199','70030'),
+('199','70031'),
+('196','70032'),
+('196','70033');
+--
+SET @PERMISSION_START = 70034;
+SET @PERMISSION_END = 70034;
+
+DELETE FROM `rbac_permissions` WHERE id BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_permissions` (`id`,`name`) VALUES
+('70034','Command: npcbot spawned');
+--
+SET @PERMISSION_START = 70034;
+SET @PERMISSION_END = 70034;
+
+DELETE FROM `rbac_linked_permissions` WHERE linkedId BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES
+('196','70034');
+--
+SET @PERMISSION_START = 70035;
+SET @PERMISSION_END = 70035;
+
+DELETE FROM `rbac_permissions` WHERE id BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_permissions` (`id`,`name`) VALUES
+('70035','Command: npcbot command walk');
+--
+SET @PERMISSION_START = 70035;
+SET @PERMISSION_END = 70035;
+
+DELETE FROM `rbac_linked_permissions` WHERE linkedId BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES
+('199','70035');
+--
+SET @PERMISSION_START = 70036;
+SET @PERMISSION_END = 70036;
+
+DELETE FROM `rbac_permissions` WHERE id BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_permissions` (`id`,`name`) VALUES
+('70036','Command: npcbot createnew');
+--
+SET @PERMISSION_START = 70036;
+SET @PERMISSION_END = 70036;
+
+DELETE FROM `rbac_linked_permissions` WHERE linkedId BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES
+('196','70036');
+--
+SET @PERMISSION_START = 70037;
+SET @PERMISSION_END = 70037;
+
+DELETE FROM `rbac_permissions` WHERE id BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_permissions` (`id`,`name`) VALUES
+('70037','Command: npcbot sendto');
+--
+SET @PERMISSION_START = 70037;
+SET @PERMISSION_END = 70037;
+
+DELETE FROM `rbac_linked_permissions` WHERE linkedId BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES
+('199','70037');
diff --git a/sql/Bot SQL/ALL_characters.sql b/sql/Bot SQL/ALL_characters.sql
new file mode 100644
index 0000000000000..199f8719acd1d
--- /dev/null
+++ b/sql/Bot SQL/ALL_characters.sql
@@ -0,0 +1,255 @@
+DROP TABLE IF EXISTS `characters_npcbot`;
+CREATE TABLE `characters_npcbot` (
+ `entry` int(10) unsigned NOT NULL COMMENT 'creature_template.entry',
+ `owner` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'characters.guid (lowguid)',
+ `roles` smallint(5) unsigned NOT NULL COMMENT 'bitmask: tank(1),dps(2),heal(4),ranged(8)',
+ `faction` int(10) unsigned NOT NULL DEFAULT '35',
+ `equipMhEx` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipOhEx` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipRhEx` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipHead` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipShoulders` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipChest` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipWaist` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipLegs` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipFeet` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipWrist` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipHands` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipBack` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipBody` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipFinger1` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipFinger2` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipTrinket1` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipTrinket2` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipNeck` int(10) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+ALTER TABLE `characters_npcbot` ADD `spec` tinyint(3) unsigned NOT NULL DEFAULT '1' AFTER `roles`;
+DROP TEMPORARY TABLE IF EXISTS `npcbot_extras_temp`;
+
+CREATE TEMPORARY TABLE `npcbot_extras_temp` (
+ `entry` MEDIUMINT(8) UNSIGNED NOT NULL,
+ `class` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1',
+ PRIMARY KEY (`entry`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8;
+
+INSERT INTO `npcbot_extras_temp` (`entry`,`class`) VALUES
+('70001','1'),('70002','1'),('70003','1'),('70004','1'),('70005','1'),
+('70006','1'),('70007','1'),('70008','1'),('70009','1'),('70010','1'),
+('70011','1'),('70012','1'),('70013','1'),('70014','1'),('70015','1'),
+('70016','1'),('70017','1'),('70018','1'),('70019','1'),('70020','1'),
+('70021','1'),('70022','1'),('70023','1'),('70024','1'),('70025','1'),
+('70026','1'),('70027','1'),('70028','1'),('70029','1'),('70030','1'),
+('70031','1'),('70032','1'),('70033','1'),('70034','1'),('70035','1'),
+('70036','1'),('70037','1'),('70038','1'),('70051','2'),('70052','2'),
+('70053','2'),('70054','2'),('70055','2'),('70056','2'),('70057','2'),
+('70058','2'),('70059','2'),('70060','2'),('70061','2'),('70062','2'),
+('70063','2'),('70064','2'),('70065','2'),('70066','2'),('70067','2'),
+('70068','2'),('70069','2'),('70070','2'),('70071','2'),('70072','2'),
+('70073','2'),('70074','2'),('70101','3'),('70102','3'),('70103','3'),
+('70104','3'),('70105','3'),('70106','3'),('70107','3'),('70108','3'),
+('70109','3'),('70110','3'),('70111','3'),('70112','3'),('70113','3'),
+('70114','3'),('70115','3'),('70116','3'),('70117','3'),('70118','3'),
+('70119','3'),('70120','3'),('70121','3'),('70122','3'),('70123','3'),
+('70124','3'),('70125','3'),('70126','3'),('70127','3'),('70128','3'),
+('70129','3'),('70130','3'),('70131','3'),('70132','3'),('70133','3'),
+('70134','3'),('70135','3'),('70136','3'),('70137','3'),('70138','3'),
+('70139','3'),('70151','4'),('70152','4'),('70153','4'),('70154','4'),
+('70155','4'),('70156','4'),('70157','4'),('70158','4'),('70159','4'),
+('70160','4'),('70161','4'),('70162','4'),('70163','4'),('70164','4'),
+('70165','4'),('70166','4'),('70167','4'),('70168','4'),('70169','4'),
+('70170','4'),('70171','4'),('70172','4'),('70173','4'),('70174','4'),
+('70175','4'),('70176','4'),('70177','4'),('70178','4'),('70179','4'),
+('70180','4'),('70181','4'),('70201','5'),('70202','5'),('70203','5'),
+('70204','5'),('70205','5'),('70206','5'),('70207','5'),('70208','5'),
+('70209','5'),('70210','5'),('70211','5'),('70212','5'),('70213','5'),
+('70214','5'),('70215','5'),('70216','5'),('70217','5'),('70218','5'),
+('70219','5'),('70220','5'),('70221','5'),('70222','5'),('70223','5'),
+('70224','5'),('70225','5'),('70226','5'),('70227','5'),('70228','5'),
+('70229','5'),('70230','5'),('70231','5'),('70232','5'),('70233','5'),
+('70234','5'),('70235','5'),('70236','5'),('70237','5'),('70238','5'),
+('70239','5'),('70240','5'),('70251','7'),('70252','7'),('70253','7'),
+('70254','7'),('70255','7'),('70256','7'),('70257','7'),('70258','7'),
+('70259','7'),('70260','7'),('70261','7'),('70265','7'),('70267','7'),
+('70268','7'),('70301','8'),('70302','8'),('70303','8'),('70304','8'),
+('70305','8'),('70306','8'),('70307','8'),('70308','8'),('70309','8'),
+('70310','8'),('70311','8'),('70312','8'),('70313','8'),('70314','8'),
+('70315','8'),('70316','8'),('70317','8'),('70318','8'),('70319','8'),
+('70320','8'),('70321','8'),('70322','8'),('70323','8'),('70324','8'),
+('70325','8'),('70326','8'),('70327','8'),('70328','8'),('70329','8'),
+('70330','8'),('70331','8'),('70332','8'),('70333','8'),('70334','8'),
+('70335','8'),('70336','8'),('70351','9'),('70352','9'),('70353','9'),
+('70354','9'),('70355','9'),('70356','9'),('70357','9'),('70358','9'),
+('70359','9'),('70360','9'),('70361','9'),('70362','9'),('70363','9'),
+('70364','9'),('70365','9'),('70366','9'),('70367','9'),('70368','9'),
+('70369','9'),('70370','9'),('70371','9'),('70372','9'),('70373','9'),
+('70374','9'),('70375','9'),('70376','9'),('70377','9'),('70401','11'),
+('70402','11'),('70403','11'),('70404','11'),('70405','11'),('70406','11'),
+('70407','11'),('70408','11'),('70409','11'),('70410','11'),('70411','11'),
+('70412','11'),('70413','11'),('70414','11'),('70415','11'),('70416','11'),
+('70417','11'),('70418','11'),('70451','6'),('70452','6'),('70453','6'),
+('70454','6'),('70455','6'),('70456','6'),('70457','6'),('70458','6'),
+('70459','6'),('70460','6'),('70461','6'),('70462','6'),('70463','6'),
+('70464','6'),('70465','6'),('70501','0'),('70502','0'),('70503','0'),
+('70504','0'),('70505','0'),('70506','0'),('70507','0'),('70508','0'),
+('70509','0'),('70510','0'),('70511','0'),('70512','0'),('70513','0'),
+('70514','0'),('70515','0'),('70516','0'),('70517','0'),('70518','0'),
+('70519','0'),('70520','0'),('70521','0'),('70522','0'),('70523','0'),
+('70524','0'),('70525','0'),('70526','0'),('70527','0'),('70528','0'),
+('70529','0'),('70530','0'),('70531','0'),('70532','0'),('70533','0'),
+('70534','0'),('70535','0'),('70536','0'),('70537','0'),('70538','0'),
+('70542','0'),('70543','0'),('70544','0'),('70545','0'),('70551','12'),
+('70552','12'),('70553','13'),('70554','13'),('70555','14'),('70556','0'),
+('70557','15'),('70558','15'),('70559','15'),('70560','15'),('70561','15'),
+('70562','0'),('70563','16'),('70564','16'),('70565','16'),('70566','16'),
+('70567','16'),('70568','17'),('70569','17'),('70570','17'),('70571','17'),
+('70572','17'),('70573','0'),('70574','0');
+
+/*!50003 DROP PROCEDURE IF EXISTS `sp__update_specs_2020_06_21`*/;
+
+DELIMITER ;;
+
+/*!50003 CREATE*/
+/*!50003 PROCEDURE `sp__update_specs_2020_06_21`()
+BEGIN
+
+DECLARE CLASS_WARRIOR INT DEFAULT 1;
+DECLARE CLASS_PALADIN INT DEFAULT 2;
+DECLARE CLASS_HUNTER INT DEFAULT 3;
+DECLARE CLASS_ROGUE INT DEFAULT 4;
+DECLARE CLASS_PRIEST INT DEFAULT 5;
+DECLARE CLASS_DEATH_KNIGHT INT DEFAULT 6;
+DECLARE CLASS_SHAMAN INT DEFAULT 7;
+DECLARE CLASS_MAGE INT DEFAULT 8;
+DECLARE CLASS_WARLOCK INT DEFAULT 9;
+DECLARE CLASS_DRUID INT DEFAULT 11;
+DECLARE CLASS_BLADEMASTER INT DEFAULT 12;
+DECLARE CLASS_SPHYNX INT DEFAULT 13;
+DECLARE CLASS_ARCHMAGE INT DEFAULT 14;
+DECLARE CLASS_DREADLORD INT DEFAULT 15;
+DECLARE CLASS_SPELL_BREAKER INT DEFAULT 16;
+DECLARE CLASS_DARK_RANGER INT DEFAULT 17;
+
+DECLARE SPEC_START_WARRIOR INT DEFAULT 1;
+DECLARE SPEC_START_PALADIN INT DEFAULT 4;
+DECLARE SPEC_START_HUNTER INT DEFAULT 7;
+DECLARE SPEC_START_ROGUE INT DEFAULT 10;
+DECLARE SPEC_START_PRIEST INT DEFAULT 13;
+DECLARE SPEC_START_DEATH_KNIGHT INT DEFAULT 16;
+DECLARE SPEC_START_SHAMAN INT DEFAULT 19;
+DECLARE SPEC_START_MAGE INT DEFAULT 22;
+DECLARE SPEC_START_WARLOCK INT DEFAULT 25;
+DECLARE SPEC_START_DRUID INT DEFAULT 28;
+DECLARE SPEC_DEFAULT INT DEFAULT 31;
+
+DECLARE NPCBOT_ENTRY_BEGIN INT DEFAULT 70001;
+DECLARE NPCBOT_ENTRY_END INT DEFAULT 71000;
+
+DECLARE cur_pos INT;
+DECLARE myclass INT;
+DECLARE myspec INT;
+
+SET cur_pos = NPCBOT_ENTRY_BEGIN;
+WHILE cur_pos < NPCBOT_ENTRY_END DO
+ SET myclass = (SELECT `class` FROM `npcbot_extras_temp` WHERE `entry` = cur_pos);
+ SET myspec = (SELECT `spec` FROM `characters_npcbot` WHERE `entry` = cur_pos);
+
+ IF myclass != 0 AND myspec != 0 AND myspec < 4 THEN
+
+ IF myclass = CLASS_WARRIOR THEN
+ SET myspec = myspec + SPEC_START_WARRIOR - 1;
+ ELSEIF myclass = CLASS_PALADIN THEN
+ SET myspec = myspec + SPEC_START_PALADIN - 1;
+ ELSEIF myclass = CLASS_HUNTER THEN
+ SET myspec = myspec + SPEC_START_HUNTER - 1;
+ ELSEIF myclass = CLASS_ROGUE THEN
+ SET myspec = myspec + SPEC_START_ROGUE - 1;
+ ELSEIF myclass = CLASS_PRIEST THEN
+ SET myspec = myspec + SPEC_START_PRIEST - 1;
+ ELSEIF myclass = CLASS_DEATH_KNIGHT THEN
+ SET myspec = myspec + SPEC_START_DEATH_KNIGHT - 1;
+ ELSEIF myclass = CLASS_SHAMAN THEN
+ SET myspec = myspec + SPEC_START_SHAMAN - 1;
+ ELSEIF myclass = CLASS_MAGE THEN
+ SET myspec = myspec + SPEC_START_MAGE - 1;
+ ELSEIF myclass = CLASS_WARLOCK THEN
+ SET myspec = myspec + SPEC_START_WARLOCK - 1;
+ ELSEIF myclass = CLASS_DRUID THEN
+ SET myspec = myspec + SPEC_START_DRUID - 1;
+ ELSE
+ SET myspec = SPEC_DEFAULT;
+ END IF;
+
+ UPDATE `characters_npcbot` SET `spec` = myspec WHERE `entry` = cur_pos;
+
+ END IF;
+
+ SET cur_pos = cur_pos + 1;
+
+END WHILE;
+
+DROP TEMPORARY TABLE IF EXISTS `npcbot_extras_temp`;
+
+END*/;;
+
+DELIMITER ;
+
+CALL `sp__update_specs_2020_06_21`();
+
+DROP PROCEDURE IF EXISTS `sp__update_specs_2020_06_21`;
+ALTER TABLE `characters_npcbot` ADD `spells_disabled` longtext AFTER `equipNeck`;
+ALTER TABLE `characters_npcbot` MODIFY COLUMN `roles` int(10) unsigned NOT NULL COMMENT 'bitmask: tank(1),dps(2),heal(4),ranged(8)';
+DROP TABLE IF EXISTS `characters_npcbot_stats`;
+
+CREATE TABLE `characters_npcbot_stats` (
+ `entry` int(10) unsigned NOT NULL DEFAULT '0',
+ `maxhealth` int(10) unsigned NOT NULL DEFAULT '0',
+ `maxpower` int(10) unsigned NOT NULL DEFAULT '0',
+ `strength` int(10) unsigned NOT NULL DEFAULT '0',
+ `agility` int(10) unsigned NOT NULL DEFAULT '0',
+ `stamina` int(10) unsigned NOT NULL DEFAULT '0',
+ `intellect` int(10) unsigned NOT NULL DEFAULT '0',
+ `spirit` int(10) unsigned NOT NULL DEFAULT '0',
+ `armor` int(10) unsigned NOT NULL DEFAULT '0',
+ `defense` int(10) unsigned NOT NULL DEFAULT '0',
+ `resHoly` int(10) unsigned NOT NULL DEFAULT '0',
+ `resFire` int(10) unsigned NOT NULL DEFAULT '0',
+ `resNature` int(10) unsigned NOT NULL DEFAULT '0',
+ `resFrost` int(10) unsigned NOT NULL DEFAULT '0',
+ `resShadow` int(10) unsigned NOT NULL DEFAULT '0',
+ `resArcane` int(10) unsigned NOT NULL DEFAULT '0',
+ `blockPct` float unsigned NOT NULL DEFAULT '0',
+ `dodgePct` float unsigned NOT NULL DEFAULT '0',
+ `parryPct` float unsigned NOT NULL DEFAULT '0',
+ `critPct` float unsigned NOT NULL DEFAULT '0',
+ `attackPower` int(10) unsigned NOT NULL DEFAULT '0',
+ `spellPower` int(10) unsigned NOT NULL DEFAULT '0',
+ `spellPen` int(10) unsigned NOT NULL DEFAULT '0',
+ `hastePct` float unsigned NOT NULL DEFAULT '0',
+ `hitBonusPct` float unsigned NOT NULL DEFAULT '0',
+ `expertise` int(10) unsigned NOT NULL DEFAULT '0',
+ `armorPenPct` float unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+-- An update for shifted roles
+UPDATE `characters_npcbot` SET `roles` = (roles & 0x1) | ((roles & ~0x1) << 1);
+--
+DROP TABLE IF EXISTS `characters_npcbot_transmog`;
+CREATE TABLE `characters_npcbot_transmog` (
+ `entry` int(10) unsigned NOT NULL,
+ `slot` tinyint(3) unsigned NOT NULL,
+ `item_id` int(10) unsigned NOT NULL DEFAULT '0',
+ `fake_id` int(10) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`,`slot`),
+ CONSTRAINT `bot_id` FOREIGN KEY (`entry`) REFERENCES `characters_npcbot` (`entry`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+--
+DROP TABLE IF EXISTS `characters_npcbot_group_member`;
+CREATE TABLE `characters_npcbot_group_member` (
+ `guid` int(10) unsigned NOT NULL,
+ `entry` int(10) unsigned NOT NULL,
+ `memberFlags` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `subgroup` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `roles` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
diff --git a/sql/Bot SQL/ALL_world.sql b/sql/Bot SQL/ALL_world.sql
new file mode 100644
index 0000000000000..6c4dca7489770
--- /dev/null
+++ b/sql/Bot SQL/ALL_world.sql
@@ -0,0 +1,6164 @@
+-- Handmade data, very sensitive
+DROP TABLE IF EXISTS `creature_template_npcbot_appearance`;
+
+CREATE TABLE `creature_template_npcbot_appearance` (
+ `entry` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name*` char(16) DEFAULT 'unk' COMMENT 'unused',
+ `gender` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `skin` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `face` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `hair` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `haircolor` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `features` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+insert into `creature_template_npcbot_appearance`(`entry`,`name*`,`gender`,`skin`,`face`,`hair`,`haircolor`,`features`)
+values
+(70001,'Llane',0,3,0,1,1,6),
+(70002,'Thran',0,0,0,4,5,4),
+(70003,'Lyria',1,3,4,6,4,0),
+(70004,'Ander',0,1,11,1,7,6),
+(70005,'Malosh',0,7,0,5,5,5),
+(70006,'Granis',0,0,2,9,4,4),
+(70007,'Kelstrum',0,5,4,2,2,2),
+(70008,'Dannal',0,1,0,8,5,0),
+(70009,'Austil',0,4,1,8,1,7),
+(70010,'Torm',0,7,1,2,0,2),
+(70011,'Sark',0,0,3,7,0,5),
+(70012,'Ker',1,4,0,0,0,1),
+(70013,'Harutt',0,1,3,7,0,4),
+(70014,'Krang',0,5,2,6,2,0),
+(70015,'Frang',0,0,4,1,1,3),
+(70016,'Tarshaw',0,3,3,1,0,7),
+(70017,'Grezz',0,3,5,1,0,3),
+(70018,'Sorek',0,2,1,3,1,6),
+(70019,'Zel\'mak',0,1,0,4,8,1),
+(70020,'Alyissia',1,5,1,5,2,0),
+(70021,'Kyra',1,6,8,4,6,1),
+(70022,'Arias\'ta',1,0,6,3,4,1),
+(70023,'Sildanair',1,3,0,2,4,2),
+(70024,'Chris',0,3,2,2,2,10),
+(70025,'Angela',1,2,7,3,8,6),
+(70026,'Baltus',0,0,0,1,8,1),
+(70027,'Kelv',0,5,1,7,3,1),
+(70028,'Bilban',0,2,2,2,7,1),
+(70029,'Wu',0,4,5,1,0,8),
+(70030,'Ilsa',1,5,6,7,3,4),
+(70031,'Darnath',0,7,8,3,0,0),
+(70032,'Evencane',0,5,9,2,4,2),
+(70033,'Kore',0,4,0,2,1,6),
+(70034,'Ahonan',0,6,1,1,6,5),
+(70035,'Behomat',0,4,8,3,6,3),
+(70036,'Ruada',1,1,2,1,6,0),
+(70037,'Kazi',1,1,2,3,3,0),
+(70038,'Kerra',1,2,0,2,2,0),
+(70051,'Sammuel',0,9,11,6,2,7),
+(70052,'Bromos',0,6,4,2,9,1),
+(70053,'Wilhelm',0,4,2,2,1,6),
+(70054,'Grayson',0,3,2,2,0,2),
+(70055,'Azar',0,2,4,3,1,6),
+(70056,'Valgar',0,4,3,0,0,0),
+(70057,'Beldruk',0,4,6,2,4,2),
+(70058,'Brandur',0,5,4,1,1,3),
+(70059,'Arthur',0,1,0,1,5,2),
+(70060,'Katherine',1,1,3,2,4,0),
+(70061,'Karman',0,3,11,10,5,8),
+(70062,'Jesthenis',0,4,0,0,0,0),
+(70063,'Noellene',1,0,1,1,1,0),
+(70064,'Aurelon',0,8,0,0,0,0),
+(70065,'Osselan',0,8,1,1,2,0),
+(70066,'Ithelis',0,9,2,2,2,0),
+(70067,'Bachi',0,3,0,10,1,0),
+(70068,'Baatun',0,6,4,3,0,7),
+(70069,'Kavaan',0,2,5,5,6,4),
+(70070,'Tullas',1,0,9,9,2,0),
+(70071,'Jol',1,0,8,8,6,0),
+(70072,'Cyssa',1,4,1,7,6,0),
+(70073,'Pyreanor',0,3,3,2,7,1),
+(70074,'Rukua',1,5,8,4,4,1),
+(70101,'Thorgas',0,4,5,8,4,8),
+(70102,'Ogromm',0,4,4,3,1,4),
+(70103,'Grif',0,0,1,5,4,4),
+(70104,'Kragg',0,7,4,3,2,2),
+(70105,'Kary',1,2,1,1,2,1),
+(70106,'Holt',0,18,3,4,0,3),
+(70107,'Urek',0,4,2,2,1,1),
+(70108,'Lanka',0,4,2,2,1,2),
+(70109,'Yaw',0,1,1,5,2,2),
+(70110,'Jen\'shan',1,3,0,2,6,3),
+(70111,'Thotar',0,0,3,3,1,9),
+(70112,'Ormak',0,5,8,1,0,5),
+(70113,'Xor\'juul',0,2,3,2,0,1),
+(70114,'Sian\'dur',1,2,4,1,2,4),
+(70115,'Ayanna',1,5,0,6,5,8),
+(70116,'Dazalar',0,8,0,6,2,3),
+(70117,'Danlaar',0,0,0,3,6,0),
+(70118,'Jeen\'ra',1,7,2,1,4,1),
+(70119,'Jocaste',1,6,1,1,6,1),
+(70120,'Dorion',0,4,6,5,0,5),
+(70121,'Daera',1,0,3,12,4,0),
+(70122,'Olmin',0,3,1,2,2,4),
+(70123,'Regnus',0,3,9,1,4,2),
+(70124,'Kaerbrus',0,2,0,0,2,2),
+(70125,'Einris',1,1,1,5,4,0),
+(70126,'Ulfir',0,6,2,5,8,1),
+(70127,'Thorfin',0,2,2,5,4,7),
+(70128,'Alenndaar',0,2,6,3,2,2),
+(70129,'Dargh',0,3,1,1,4,4),
+(70130,'Sallina',1,4,2,1,1,0),
+(70131,'Hannovia',1,0,2,2,1,0),
+(70132,'Keilnei',1,7,5,2,4,1),
+(70133,'Tana',1,8,1,1,2,0),
+(70134,'Oninath',0,0,0,0,0,0),
+(70135,'Zandine',1,8,0,1,4,0),
+(70136,'Deremiis',0,11,0,5,6,7),
+(70137,'Acteon',0,2,0,0,0,0),
+(70138,'Vord',0,11,0,5,6,7),
+(70139,'Killac',0,11,0,5,6,7),
+(70151,'Jorik',0,3,0,11,1,2),
+(70152,'Solm',0,7,8,4,9,6),
+(70153,'Keryn',1,4,4,7,0,0),
+(70154,'Osborne',0,4,9,9,0,1),
+(70155,'Hogral',0,6,7,10,5,7),
+(70156,'Ian',0,5,9,9,1,6),
+(70157,'David',0,4,2,1,1,1),
+(70158,'Marion',1,5,2,3,5,7),
+(70159,'Rwag',0,0,0,0,0,0),
+(70160,'Kaplak',0,3,5,0,0,3),
+(70161,'Gest',0,4,0,2,0,1),
+(70162,'Ormok',0,3,8,4,0,3),
+(70163,'Shenthul',0,3,0,5,5,1),
+(70164,'Frahun',0,2,1,3,5,4),
+(70165,'Jannok',0,3,2,4,5,3),
+(70166,'Syurna',1,0,3,5,4,0),
+(70167,'Erion',0,5,0,3,4,3),
+(70168,'Anishar',0,5,6,4,6,5),
+(70169,'Carolyn',1,0,6,3,1,7),
+(70170,'Miles',0,0,0,1,9,8),
+(70171,'Gregory',0,3,7,8,4,14),
+(70172,'Hulfdan',0,8,8,8,5,6),
+(70173,'Ormyr',0,0,6,4,4,4),
+(70174,'Fenthwick',0,0,2,2,5,0),
+(70175,'Fahrad',0,3,0,9,4,2),
+(70176,'Tony',0,3,0,1,0,2),
+(70177,'Kariel',0,1,0,0,0,0),
+(70178,'Tannaria',1,2,2,0,2,0),
+(70179,'Zelanis',0,0,1,1,1,0),
+(70180,'Elara',1,2,2,1,4,0),
+(70181,'Nerisen',0,1,1,2,1,0),
+(70201,'Anetta',1,0,9,14,5,0),
+(70202,'Laurena',1,0,1,4,5,0),
+(70203,'Josetta',1,1,3,17,2,0),
+(70204,'Branstock',0,2,7,1,8,0),
+(70205,'Maxan',0,2,0,6,1,5),
+(70206,'Duesten',0,0,9,5,1,0),
+(70207,'Beryl',0,0,0,0,0,12),
+(70208,'Miles',0,0,2,7,9,2),
+(70209,'Malakai',0,4,3,2,6,8),
+(70210,'Cobb',0,5,6,6,4,14),
+(70211,'Shanda',1,1,0,2,7,4),
+(70212,'Laurna',1,0,7,0,2,4),
+(70213,'Tai\'jin',1,0,3,1,6,5),
+(70214,'Ken\'jai',0,5,2,4,3,0),
+(70215,'Astarii',1,0,0,0,0,0),
+(70216,'Jandria',1,1,1,5,3,0),
+(70217,'Lariia',1,0,3,3,6,0),
+(70218,'Lankester',0,2,0,9,4,16),
+(70219,'Lazarus',0,0,0,6,6,14),
+(70220,'Theodrus',0,2,6,5,7,4),
+(70221,'Braenna',1,0,1,1,0,0),
+(70222,'Toldren',0,4,1,3,3,10),
+(70223,'Benjamin',0,9,11,0,0,8),
+(70224,'Joshua',0,3,0,1,1,8),
+(70225,'Zayus',0,2,0,3,1,4),
+(70226,'X\'yera',0,2,1,2,4,4),
+(70227,'Ur\'kyo',0,0,2,2,3,2),
+(70228,'Nara',1,0,7,4,1,3),
+(70229,'Alathea',1,4,3,0,4,5),
+(70230,'Rohan',0,0,9,4,7,5),
+(70231,'Arena',1,0,2,2,1,0),
+(70232,'Ponaris',0,1,0,1,2,0),
+(70233,'Zalduun',0,9,0,0,0,0),
+(70234,'Aldrae',0,3,1,1,1,0),
+(70235,'Lotheolan',0,8,8,1,2,0),
+(70236,'Belestra',1,4,0,1,3,0),
+(70237,'Caedmos',0,4,0,0,4,3),
+(70238,'Guvan',0,12,0,5,6,4),
+(70239,'Izmir',0,7,0,4,6,6),
+(70240,'Fallat',0,7,1,4,6,6),
+(70251,'Haromm',0,0,3,5,0,6),
+(70252,'Siln',1,10,1,3,2,1),
+(70253,'Tigor',0,13,2,2,2,1),
+(70254,'Beram',0,10,0,2,0,5),
+(70255,'Meela',1,8,1,3,0,0),
+(70256,'Narm',0,17,0,6,1,4),
+(70257,'Shikrik',1,3,4,5,1,1),
+(70258,'Swart',0,0,4,5,0,7),
+(70259,'Kardris',1,0,4,7,0,6),
+(70260,'Sian\'tsu',1,3,3,3,1,3),
+(70261,'Sagorne',0,6,1,1,1,2),
+-- (70262,'Firmanvaar',0,0,0,1,0,0),
+-- (70263,'Nobundo',0,0,0,0,0,0),
+-- (70264,'Tuluun',0,0,0,0,0,0),
+(70265,'Sulaa',1,7,2,2,4,6),
+(70266,'Hobahken',0,0,0,0,0,0),
+(70267,'Umbrua',1,1,7,5,5,1),
+(70268,'Javad',0,4,1,6,0,1),
+(70301,'Khelden',0,7,5,7,0,5),
+(70302,'Zaldimar',0,2,10,11,9,3),
+(70303,'Maginor',0,1,9,8,7,4),
+(70304,'Marryk',0,0,4,6,7,1),
+(70305,'Magis',0,1,5,4,6,4),
+(70306,'Isabella',1,2,0,7,1,5),
+(70307,'Cain',0,0,0,7,1,10),
+(70308,'Shymm',0,5,6,6,5,12),
+(70309,'Ursyn',1,0,5,9,1,7),
+(70310,'Thurston',0,4,1,5,5,1),
+(70311,'Pierce',0,0,2,5,8,2),
+(70312,'Anastasia',1,2,7,3,8,5),
+(70313,'Bink',1,2,1,1,6,0),
+(70314,'Juli',1,1,5,5,3,0),
+(70315,'Nittlebur',0,0,4,0,7,6),
+(70316,'Jennea',1,5,4,5,4,4),
+(70317,'Un\'Thuwa',0,1,2,1,3,4),
+(70318,'Pephredo',1,0,4,1,2,5),
+(70319,'Enyo',1,3,4,4,0,0),
+(70320,'Mai\'ah',1,1,2,1,1,5),
+(70321,'Deino',1,2,0,3,3,2),
+(70322,'Uthel\'nay',0,3,4,2,3,0),
+(70323,'Dink',0,1,3,2,6,1),
+(70324,'Julia',1,2,6,2,0,0),
+(70325,'Garridel',1,3,1,2,2,0),
+(70326,'Valaatu',1,9,6,7,6,5),
+(70327,'Zaedana',1,3,2,2,1,0),
+(70328,'Quithas',0,2,3,1,1,0),
+(70329,'Inethven',0,0,0,0,3,0),
+(70330,'Narinth',1,0,2,2,0,0),
+(70331,'Edirah',1,5,0,5,3,0),
+(70332,'Valustraa',1,5,5,9,6,5),
+(70333,'Semid',0,8,9,8,0,7),
+(70334,'Harnan',0,8,8,7,1,3),
+(70335,'Bati',1,8,1,2,1,0),
+(70336,'Derek',0,5,3,3,1,5),
+(70351,'Drusilla',1,0,10,4,0,0),
+(70352,'Alamar',0,2,2,3,2,5),
+(70353,'Demisette',1,0,9,2,0,0),
+(70354,'Maximillian',0,1,10,6,0,6),
+(70355,'Kartosh',0,0,7,0,1,6),
+(70356,'Maximillion',0,5,0,9,5,5),
+(70357,'Rupert',0,0,0,0,0,8),
+(70358,'Nartok',0,0,6,4,0,1),
+(70359,'Dhugru',0,5,6,4,3,9),
+(70360,'Grol\'dar',0,3,2,3,1,2),
+(70361,'Mirket',1,5,3,7,0,5),
+(70362,'Zevrost',0,3,7,5,5,9),
+(70363,'Kaal',0,3,1,4,2,3),
+(70364,'Luther',0,4,9,0,0,0),
+(70365,'Richard',0,5,5,0,0,0),
+(70366,'Thistleheart',0,3,2,6,3,0),
+(70367,'Briarthorn',0,0,6,1,0,3),
+(70368,'Alexander',0,0,10,11,0,6),
+(70369,'Ursula',1,1,4,18,3,6),
+(70370,'Sandahl',0,4,2,11,1,6),
+(70371,'Gimrizz',0,2,5,2,0,3),
+(70372,'Teli\'Larien',0,0,0,0,0,0),
+(70373,'Celoenus',0,0,0,2,0,0),
+(70374,'Alamma',0,0,1,0,0,0),
+(70375,'Talionia',1,0,2,1,2,0),
+(70376,'Zanien',0,0,0,0,3,0),
+(70377,'Babagaya',1,0,6,0,3,0),
+(70401,'Turak',0,4,3,5,0,5),
+(70402,'Sheal',1,7,0,3,1,1),
+(70403,'Kym',1,9,2,3,0,0),
+(70404,'Gart',0,13,1,3,2,2),
+(70405,'Gennia',1,9,3,0,1,3),
+(70406,'Mardant',0,1,1,2,0,4),
+(70407,'Kal',0,2,2,4,4,2),
+(70408,'Mathrengyl',0,5,0,2,6,3),
+(70409,'Denatharion',0,4,8,3,2,5),
+(70410,'Fylerian',0,2,1,4,5,0),
+(70411,'Sheldras',0,0,3,2,2,4),
+(70412,'Theridran',0,2,1,3,7,3),
+(70413,'Maldryn',0,2,8,5,4,0),
+(70414,'Jannos',0,5,3,2,1,5),
+(70415,'Golhine',0,0,2,6,0,4),
+(70416,'Loganaar',0,2,1,1,0,1),
+(70417,'Harene',1,6,0,3,2,4),
+(70418,'Shalannius',0,4,3,0,4,5),
+(70451,'Siouxsie',1,9,9,3,4,9),
+(70452,'Imhadria',1,10,8,6,1,0),
+(70453,'Vaelen',0,16,9,11,9,8),
+(70454,'Mynx',1,10,0,17,11,0),
+(70455,'Lankral',0,6,13,16,12,4),
+(70456,'Sliver',0,10,11,11,6,0),
+(70457,'Vereth',0,4,0,8,9,10),
+(70458,'Arly',1,7,9,2,8,4),
+(70459,'Setaal',1,14,12,15,9,2),
+(70460,'Uzo',0,8,7,8,9,18),
+(70461,'Illyrie',1,9,11,1,12,0),
+(70462,'Crok',0,11,9,10,7,3),
+(70463,'Zor\'be',0,8,7,6,9,18),
+(70464,'Datura',1,10,11,11,18,0),
+(70465,'Stefan',0,10,12,6,12,2),
+-- (70551,'Gorkramato',0,0,14,9,7,5);
+(70555,'Detrae',0,3,12,11,19,4);
+DROP TABLE IF EXISTS `creature_template_npcbot_extras`;
+
+CREATE TABLE `creature_template_npcbot_extras` (
+ `entry` mediumint(8) unsigned NOT NULL,
+ `class` tinyint(3) unsigned NOT NULL DEFAULT '1',
+ `race` tinyint(3) unsigned NOT NULL DEFAULT '1',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+INSERT INTO `creature_template_npcbot_extras` (`entry`,`class`,`race`) VALUES
+('70001', '1', '1'),
+('70002', '1', '3'),
+('70003', '1', '1'),
+('70004', '1', '3'),
+('70005', '1', '2'),
+('70006', '1', '3'),
+('70007', '1', '3'),
+('70008', '1', '5'),
+('70009', '1', '5'),
+('70010', '1', '6'),
+('70011', '1', '6'),
+('70012', '1', '6'),
+('70013', '1', '6'),
+('70014', '1', '6'),
+('70015', '1', '2'),
+('70016', '1', '2'),
+('70017', '1', '2'),
+('70018', '1', '2'),
+('70019', '1', '8'),
+('70020', '1', '4'),
+('70021', '1', '4'),
+('70022', '1', '4'),
+('70023', '1', '4'),
+('70024', '1', '5'),
+('70025', '1', '5'),
+('70026', '1', '5'),
+('70027', '1', '3'),
+('70028', '1', '7'),
+('70029', '1', '1'),
+('70030', '1', '1'),
+('70031', '1', '4'),
+('70032', '1', '1'),
+('70033', '1', '11'),
+('70034', '1', '11'),
+('70035', '1', '11'),
+('70036', '1', '11'),
+('70037', '1', '11'),
+('70038', '1', '4'),
+('70051', '2', '1'),
+('70052', '2', '3'),
+('70053', '2', '1'),
+('70054', '2', '1'),
+('70055', '2', '3'),
+('70056', '2', '3'),
+('70057', '2', '3'),
+('70058', '2', '3'),
+('70059', '2', '1'),
+('70060', '2', '1'),
+('70061', '2', '1'),
+('70062', '2', '10'),
+('70063', '2', '10'),
+('70064', '2', '11'),
+('70065', '2', '10'),
+('70066', '2', '10'),
+('70067', '2', '10'),
+('70068', '2', '11'),
+('70069', '2', '11'),
+('70070', '2', '11'),
+('70071', '2', '11'),
+('70072', '2', '10'),
+('70073', '2', '10'),
+('70074', '2', '11'),
+('70101', '3', '3'),
+('70102', '3', '2'),
+('70103', '3', '3'),
+('70104', '3', '2'),
+('70105', '3', '6'),
+('70106', '3', '6'),
+('70107', '3', '6'),
+('70108', '3', '6'),
+('70109', '3', '6'),
+('70110', '3', '8'),
+('70111', '3', '2'),
+('70112', '3', '2'),
+('70113', '3', '8'),
+('70114', '3', '8'),
+('70115', '3', '4'),
+('70116', '3', '4'),
+('70117', '3', '4'),
+('70118', '3', '4'),
+('70119', '3', '4'),
+('70120', '3', '4'),
+('70121', '3', '3'),
+('70122', '3', '3'),
+('70123', '3', '3'),
+('70124', '3', '4'),
+('70125', '3', '3'),
+('70126', '3', '3'),
+('70127', '3', '3'),
+('70128', '3', '4'),
+('70129', '3', '3'),
+('70130', '3', '10'),
+('70131', '3', '10'),
+('70132', '3', '11'),
+('70133', '3', '10'),
+('70134', '3', '10'),
+('70135', '3', '11'),
+('70136', '3', '11'),
+('70137', '3', '11'),
+('70138', '3', '11'),
+('70139', '3', '11'),
+('70151', '4', '1'),
+('70152', '4', '3'),
+('70153', '4', '1'),
+('70154', '4', '1'),
+('70155', '4', '3'),
+('70156', '4', '1'),
+('70157', '4', '5'),
+('70158', '4', '5'),
+('70159', '4', '2'),
+('70160', '4', '2'),
+('70161', '4', '2'),
+('70162', '4', '2'),
+('70163', '4', '8'),
+('70164', '4', '4'),
+('70165', '4', '4'),
+('70166', '4', '4'),
+('70167', '4', '4'),
+('70168', '4', '4'),
+('70169', '4', '5'),
+('70170', '4', '5'),
+('70171', '4', '5'),
+('70172', '4', '3'),
+('70173', '4', '3'),
+('70174', '4', '7'),
+('70175', '4', '1'),
+('70176', '4', '1'),
+('70177', '4', '10'),
+('70178', '4', '10'),
+('70179', '4', '10'),
+('70180', '4', '10'),
+('70181', '4', '10'),
+('70201', '5', '1'),
+('70202', '5', '1'),
+('70203', '5', '1'),
+('70204', '5', '3'),
+('70205', '5', '3'),
+('70206', '5', '5'),
+('70207', '5', '5'),
+('70208', '5', '5'),
+('70209', '5', '5'),
+('70210', '5', '5'),
+('70211', '5', '4'),
+('70212', '5', '4'),
+('70213', '5', '8'),
+('70214', '5', '8'),
+('70215', '5', '4'),
+('70216', '5', '4'),
+('70217', '5', '4'),
+('70218', '5', '5'),
+('70219', '5', '5'),
+('70220', '5', '3'),
+('70221', '5', '3'),
+('70222', '5', '3'),
+('70223', '5', '1'),
+('70224', '5', '1'),
+('70225', '5', '8'),
+('70226', '5', '8'),
+('70227', '5', '8'),
+('70228', '5', '4'),
+('70229', '5', '4'),
+('70230', '5', '3'),
+('70231', '5', '10'),
+('70232', '5', '10'),
+('70233', '5', '11'),
+('70234', '5', '10'),
+('70235', '5', '10'),
+('70236', '5', '10'),
+('70237', '5', '11'),
+('70238', '5', '11'),
+('70239', '5', '11'),
+('70240', '5', '11'),
+('70251', '7', '2'),
+('70252', '7', '6'),
+('70253', '7', '6'),
+('70254', '7', '6'),
+('70255', '7', '6'),
+('70256', '7', '6'),
+('70257', '7', '2'),
+('70258', '7', '2'),
+('70259', '7', '2'),
+('70260', '7', '8'),
+('70261', '7', '6'),
+('70265', '7', '11'),
+('70267', '7', '11'),
+('70268', '7', '11'),
+('70301', '8', '1'),
+('70302', '8', '1'),
+('70303', '8', '1'),
+('70304', '8', '7'),
+('70305', '8', '7'),
+('70306', '8', '5'),
+('70307', '8', '5'),
+('70308', '8', '5'),
+('70309', '8', '5'),
+('70310', '8', '5'),
+('70311', '8', '5'),
+('70312', '8', '5'),
+('70313', '8', '7'),
+('70314', '8', '7'),
+('70315', '8', '7'),
+('70316', '8', '1'),
+('70317', '8', '8'),
+('70318', '8', '8'),
+('70319', '8', '8'),
+('70320', '8', '8'),
+('70321', '8', '8'),
+('70322', '8', '8'),
+('70323', '8', '7'),
+('70324', '8', '10'),
+('70325', '8', '10'),
+('70326', '8', '11'),
+('70327', '8', '10'),
+('70328', '8', '10'),
+('70329', '8', '10'),
+('70330', '8', '10'),
+('70331', '8', '11'),
+('70332', '8', '11'),
+('70333', '8', '11'),
+('70334', '8', '11'),
+('70335', '8', '11'),
+('70336', '8', '5'),
+('70351', '9', '1'),
+('70352', '9', '7'),
+('70353', '9', '1'),
+('70354', '9', '1'),
+('70355', '9', '2'),
+('70356', '9', '5'),
+('70357', '9', '5'),
+('70358', '9', '2'),
+('70359', '9', '2'),
+('70360', '9', '2'),
+('70361', '9', '2'),
+('70362', '9', '2'),
+('70363', '9', '2'),
+('70364', '9', '5'),
+('70365', '9', '5'),
+('70366', '9', '7'),
+('70367', '9', '7'),
+('70368', '9', '1'),
+('70369', '9', '1'),
+('70370', '9', '1'),
+('70371', '9', '7'),
+('70372', '9', '10'),
+('70373', '9', '10'),
+('70374', '9', '10'),
+('70375', '9', '10'),
+('70376', '9', '10'),
+('70377', '9', '7'),
+('70401', '11', '6'),
+('70402', '11', '6'),
+('70403', '11', '6'),
+('70404', '11', '6'),
+('70405', '11', '6'),
+('70406', '11', '4'),
+('70407', '11', '4'),
+('70408', '11', '4'),
+('70409', '11', '4'),
+('70410', '11', '4'),
+('70411', '11', '4'),
+('70412', '11', '4'),
+('70413', '11', '6'),
+('70414', '11', '6'),
+('70415', '11', '4'),
+('70416', '11', '4'),
+('70417', '11', '6'),
+('70418', '11', '4'),
+('70451', '6', '4'),
+('70452', '6', '10'),
+('70453', '6', '11'),
+('70454', '6', '10'),
+('70455', '6', '1'),
+('70456', '6', '10'),
+('70457', '6', '5'),
+('70458', '6', '7'),
+('70459', '6', '11'),
+('70460', '6', '8'),
+('70461', '6', '4'),
+('70462', '6', '2'),
+('70463', '6', '8'),
+('70464', '6', '10'),
+('70465', '6', '1'),
+('70501', '0', '0'),
+('70502', '0', '0'),
+('70503', '0', '0'),
+('70504', '0', '0'),
+('70505', '0', '0'),
+('70506', '0', '0'),
+('70507', '0', '0'),
+('70508', '0', '0'),
+('70509', '0', '0'),
+('70510', '0', '0'),
+('70511', '0', '0'),
+('70512', '0', '0'),
+('70513', '0', '0'),
+('70514', '0', '0'),
+('70515', '0', '0'),
+('70516', '0', '0'),
+('70517', '0', '0'),
+('70518', '0', '0'),
+('70519', '0', '0'),
+('70520', '0', '0'),
+('70521', '0', '0'),
+('70522', '0', '0'),
+('70523', '0', '0'),
+('70524', '0', '0'),
+('70525', '0', '0'),
+('70526', '0', '0'),
+('70527', '0', '0'),
+('70528', '0', '0'),
+('70529', '0', '0'),
+('70530', '0', '0'),
+('70531', '0', '0'),
+('70532', '0', '0'),
+('70533', '0', '0'),
+('70534', '0', '0'),
+('70535', '0', '0'),
+('70536', '0', '0'),
+('70537', '0', '0'),
+('70538', '0', '0'),
+('70542', '0', '0'),
+('70543', '0', '0'),
+('70544', '0', '0'),
+('70545', '0', '0'),
+('70551', '12', '15'),
+('70552', '12', '15'),
+('70553', '13', '15'),
+('70554', '13', '15'),
+('70555', '14', '1'),
+('70556', '0', '0'),
+('70557', '15', '15'),
+('70558', '15', '15'),
+('70559', '15', '15'),
+('70560', '15', '15'),
+('70561', '15', '15'),
+('70562', '0', '0'),
+('70563', '16', '15'),
+('70564', '16', '15'),
+('70565', '16', '15'),
+('70566', '16', '15'),
+('70567', '16', '15'),
+('70568', '17', '10'),
+('70569', '17', '10'),
+('70570', '17', '10'),
+('70571', '17', '10'),
+('70572', '17', '10'),
+('70573', '0', '15'),
+('70574', '0', '15');
+-- GENERAL --
+
+SET @BOT_START = 70001;
+SET @BOT_END = 71000;
+
+-- move to creature_template_movement InhabitType
+-- Resistance
+-- basevariance, rangevariance -- spell_school_immune_mask -- damage modifier, expirience modifier
+
+-- TOTAL BOT ENTRIES: 352 (348)
+
+delete from `creature_template` where entry between @BOT_START and @BOT_END;
+
+insert into `creature_template`
+(`entry`,`difficulty_entry_1`,`difficulty_entry_2`,`difficulty_entry_3`,`KillCredit1`,`KillCredit2`,
+`modelid1`,`modelid2`,`modelid3`,`modelid4`,`name`,`subname`,`IconName`,`gossip_menu_id`,`minlevel`,`maxlevel`,`exp`,
+`faction`,`npcflag`,`speed_walk`,`speed_run`,`scale`,`rank`,`dmgschool`,`BaseAttackTime`,`RangeAttackTime`,
+`unit_class`,`unit_flags`,`unit_flags2`,`dynamicflags`,`family`,`type`,`type_flags`,`lootid`,
+`pickpocketloot`,`skinloot`,`PetSpellDataId`,`VehicleId`,`mingold`,`maxgold`,`AIName`,`MovementType`,
+`HoverHeight`,`HealthModifier`,`ManaModifier`,`ArmorModifier`,`RacialLeader`,`movementId`,`RegenHealth`,
+`mechanic_immune_mask`,`flags_extra`,`ScriptName`,`VerifiedBuild`)
+values
+('70001','0','0','0','0','0','3343','0','0','0','Llane','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70002','0','0','0','0','0','3399','0','0','0','Thran','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70003','0','0','0','0','0','1300','0','0','0','Lyria','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70004','0','0','0','0','0','3431','0','0','0','Ander','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70005','0','0','0','0','0','4556','0','0','0','Malosh','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70006','0','0','0','0','0','3431','0','0','0','Granis','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70007','0','0','0','0','0','3053','0','0','0','Kelstrum','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70008','0','0','0','0','0','1578','0','0','0','Dannal','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70009','0','0','0','0','0','1599','0','0','0','Austil','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70010','0','0','0','0','0','2103','0','0','0','Torm','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70011','0','0','0','0','0','2096','0','0','0','Sark','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70012','0','0','0','0','0','2113','0','0','0','Ker','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70013','0','0','0','0','0','3793','0','0','0','Harutt','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70014','0','0','0','0','0','3794','0','0','0','Krang','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70015','0','0','0','0','0','1880','0','0','0','Frang','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70016','0','0','0','0','0','3743','0','0','0','Tarshaw','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70017','0','0','0','0','0','1374','0','0','0','Grezz','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70018','0','0','0','0','0','1375','0','0','0','Sorek','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70019','0','0','0','0','0','4242','0','0','0','Zel\'mak','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70020','0','0','0','0','0','1721','0','0','0','Alyissia','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70021','0','0','0','0','0','1707','0','0','0','Kyra','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70022','0','0','0','0','0','2196','0','0','0','Arias\'ta','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70023','0','0','0','0','0','2198','0','0','0','Sildanair','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70024','0','0','0','0','0','2620','0','0','0','Chris','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70025','0','0','0','0','0','2658','0','0','0','Angela','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70026','0','0','0','0','0','2614','0','0','0','Baltus','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70027','0','0','0','0','0','3054','0','0','0','Kelv','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70028','0','0','0','0','0','3055','0','0','0','Bilban','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70029','0','0','0','0','0','3280','0','0','0','Wu','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70030','0','0','0','0','0','3287','0','0','0','Ilsa','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70031','0','0','0','0','0','6071','0','0','0','Darnath','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70032','0','0','0','0','0','11037','0','0','0','Evencane','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70033','0','0','0','0','0','16226','0','0','0','Kore','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70034','0','0','0','0','0','17212','0','0','0','Ahonan','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70035','0','0','0','0','0','17213','0','0','0','Behomat','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70036','0','0','0','0','0','17215','0','0','0','Ruada','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70037','0','0','0','0','0','17214','0','0','0','Kazi','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+('70038','0','0','0','0','0','17211','0','0','0','Kerra','Warrior Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3400','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warrior_bot','-1'),
+-- 70039 - 70050 reserved for warriors
+('70051','0','0','0','0','0','3346','0','0','0','Sammuel','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70052','0','0','0','0','0','3393','0','0','0','Bromos','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70053','0','0','0','0','0','1299','0','0','0','Wilhelm','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70054','0','0','0','0','0','1499','0','0','0','Grayson','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70055','0','0','0','0','0','1622','0','0','0','Azar','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70056','0','0','0','0','0','3089','0','0','0','Valgar','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70057','0','0','0','0','0','3088','0','0','0','Beldruk','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70058','0','0','0','0','0','3087','0','0','0','Brandur','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70059','0','0','0','0','0','3284','0','0','0','Arthur','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70060','0','0','0','0','0','3289','0','0','0','Katherine','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70061','0','0','0','0','0','7356','0','0','0','Karman','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70062','0','0','0','0','0','15521','0','0','0','Jesthenis','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70063','0','0','0','0','0','16685','0','0','0','Noellene','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70064','0','0','0','0','0','16224','0','0','0','Aurelon','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70065','0','0','0','0','0','16815','0','0','0','Osselan','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70066','0','0','0','0','0','16811','0','0','0','Ithelis','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70067','0','0','0','0','0','16829','0','0','0','Bachi','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70068','0','0','0','0','0','17225','0','0','0','Baatun','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70069','0','0','0','0','0','17227','0','0','0','Kavaan','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70070','0','0','0','0','0','17234','0','0','0','Tullas','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70071','0','0','0','0','0','17226','0','0','0','Jol','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70072','0','0','0','0','0','19596','0','0','0','Cyssa','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70073','0','0','0','0','0','21264','0','0','0','Pyreanor','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+('70074','0','0','0','0','0','29735','0','0','0','Rukua','Paladin Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2300','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','paladin_bot','-1'),
+-- 70075 - 70100 reserved for paldins
+('70101','0','0','0','0','0','3395','0','0','0','Thorgas','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70102','0','0','0','0','0','4560','0','0','0','Ogromm','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70103','0','0','0','0','0','3558','0','0','0','Grif','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70104','0','0','0','0','0','4372','0','0','0','Kragg','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70105','0','0','0','0','0','2112','0','0','0','Kary','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70106','0','0','0','0','0','2087','0','0','0','Holt','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70107','0','0','0','0','0','2105','0','0','0','Urek','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70108','0','0','0','0','0','3810','0','0','0','Lanka','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70109','0','0','0','0','0','3811','0','0','0','Yaw','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70110','0','0','0','0','0','1882','0','0','0','Jen\'shan','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70111','0','0','0','0','0','3744','0','0','0','Thotar','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70112','0','0','0','0','0','1373','0','0','0','Ormak','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70113','0','0','0','0','0','4239','0','0','0','Xor\'juul','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70114','0','0','0','0','0','4241','0','0','0','Sian\'dur','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70115','0','0','0','0','0','1723','0','0','0','Ayanna','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70116','0','0','0','0','0','1703','0','0','0','Dazalar','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70117','0','0','0','0','0','2066','0','0','0','Danlaar','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70118','0','0','0','0','0','2205','0','0','0','Jeen\'ra','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70119','0','0','0','0','0','2206','0','0','0','Jocaste','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70120','0','0','0','0','0','2251','0','0','0','Dorion','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70121','0','0','0','0','0','3056','0','0','0','Daera','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70122','0','0','0','0','0','3072','0','0','0','Olmin','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70123','0','0','0','0','0','3073','0','0','0','Regnus','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70124','0','0','0','0','0','3299','0','0','0','Kaerbrus','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70125','0','0','0','0','0','3312','0','0','0','Einris','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70126','0','0','0','0','0','3309','0','0','0','Ulfir','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70127','0','0','0','0','0','3310','0','0','0','Thorfin','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70128','0','0','0','0','0','7538','0','0','0','Alenndaar','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70129','0','0','0','0','0','10245','0','0','0','Dargh','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70130','0','0','0','0','0','15520','0','0','0','Sallina','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70131','0','0','0','0','0','16681','0','0','0','Hannovia','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70132','0','0','0','0','0','16222','0','0','0','Keilnei','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70133','0','0','0','0','0','16778','0','0','0','Tana','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70134','0','0','0','0','0','16816','0','0','0','Oninath','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70135','0','0','0','0','0','16802','0','0','0','Zandine','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70136','0','0','0','0','0','17434','0','0','0','Deremiis','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70137','0','0','0','0','0','16860','0','0','0','Acteon','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70138','0','0','0','0','0','17511','0','0','0','Vord','Hunter Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+('70139','0','0','0','0','0','17488','0','0','0','Killac','Hunter bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2800','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','hunter_bot','-1'),
+-- 70140 - 70150 reserved for hunters
+('70151','0','0','0','0','0','3351','0','0','0','Jorik','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70152','0','0','0','0','0','3407','0','0','0','Solm','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70153','0','0','0','0','0','1297','0','0','0','Keryn','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70154','0','0','0','0','0','1507','0','0','0','Osborne','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70155','0','0','0','0','0','3436','0','0','0','Hogral','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70156','0','0','0','0','0','5146','0','0','0','Ian','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70157','0','0','0','0','0','1580','0','0','0','David','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70158','0','0','0','0','0','2130','0','0','0','Marion','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70159','0','0','0','0','0','1886','0','0','0','Rwag','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70160','0','0','0','0','0','3749','0','0','0','Kaplak','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70161','0','0','0','0','0','1327','0','0','0','Gest','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70162','0','0','0','0','0','1328','0','0','0','Ormok','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70163','0','0','0','0','0','4360','0','0','0','Shenthul','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70164','0','0','0','0','0','1725','0','0','0','Frahun','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70165','0','0','0','0','0','1704','0','0','0','Jannok','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70166','0','0','0','0','0','2231','0','0','0','Syurna','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70167','0','0','0','0','0','2252','0','0','0','Erion','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70168','0','0','0','0','0','2243','0','0','0','Anishar','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70169','0','0','0','0','0','2659','0','0','0','Carolyn','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70170','0','0','0','0','0','2639','0','0','0','Miles','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70171','0','0','0','0','0','2631','0','0','0','Gregory','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70172','0','0','0','0','0','3101','0','0','0','Hulfdan','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70173','0','0','0','0','0','3100','0','0','0','Ormyr','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70174','0','0','0','0','0','3113','0','0','0','Fenthwick','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70175','0','0','0','0','0','5528','0','0','0','Fahrad','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70176','0','0','0','0','0','13171','0','0','0','Tony','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70177','0','0','0','0','0','15519','0','0','0','Kariel','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70178','0','0','0','0','0','16689','0','0','0','Tannaria','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70179','0','0','0','0','0','16767','0','0','0','Zelanis','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70180','0','0','0','0','0','16798','0','0','0','Elara','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+('70181','0','0','0','0','0','16818','0','0','0','Nerisen','Rogue Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','1600','2000','4','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','rogue_bot','-1'),
+-- 70182 - 70200 reserved for rogues
+('70201','0','0','0','0','0','3344','0','0','0','Anetta','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70202','0','0','0','0','0','1495','0','0','0','Laurena','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70203','0','0','0','0','0','1295','0','0','0','Josetta','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70204','0','0','0','0','0','3401','0','0','0','Branstock','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70205','0','0','0','0','0','3429','0','0','0','Maxan','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70206','0','0','0','0','0','1579','0','0','0','Duesten','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70207','0','0','0','0','0','1602','0','0','0','Beryl','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70208','0','0','0','0','0','2139','0','0','0','Miles','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70209','0','0','0','0','0','2138','0','0','0','Malakai','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70210','0','0','0','0','0','2137','0','0','0','Cobb','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70211','0','0','0','0','0','1733','0','0','0','Shanda','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70212','0','0','0','0','0','1708','0','0','0','Laurna','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70213','0','0','0','0','0','1897','0','0','0','Tai\'jin','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70214','0','0','0','0','0','4068','0','0','0','Ken\'jai','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70215','0','0','0','0','0','2200','0','0','0','Astarii','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70216','0','0','0','0','0','2201','0','0','0','Jandria','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70217','0','0','0','0','0','2202','0','0','0','Lariia','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70218','0','0','0','0','0','2626','0','0','0','Lankester','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70219','0','0','0','0','0','2618','0','0','0','Lazarus','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70220','0','0','0','0','0','3086','0','0','0','Theodrus','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70221','0','0','0','0','0','3066','0','0','0','Braenna','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70222','0','0','0','0','0','3085','0','0','0','Toldren','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70223','0','0','0','0','0','3282','0','0','0','Benjamin','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70224','0','0','0','0','0','3283','0','0','0','Joshua','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70225','0','0','0','0','0','4690','0','0','0','Zayus','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70226','0','0','0','0','0','10473','0','0','0','X\'yera','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70227','0','0','0','0','0','4711','0','0','0','Ur\'kyo','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70228','0','0','0','0','0','11044','0','0','0','Nara','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70229','0','0','0','0','0','11048','0','0','0','Alathea','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70230','0','0','0','0','0','11053','0','0','0','Rohan','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70231','0','0','0','0','0','15518','0','0','0','Arena','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70232','0','0','0','0','0','16707','0','0','0','Ponaris','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70233','0','0','0','0','0','16225','0','0','0','Zalduun','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70234','0','0','0','0','0','16788','0','0','0','Aldrae','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70235','0','0','0','0','0','16817','0','0','0','Lotheolan','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70236','0','0','0','0','0','16795','0','0','0','Belestra','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70237','0','0','0','0','0','17247','0','0','0','Caedmos','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70238','0','0','0','0','0','17232','0','0','0','Guvan','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70239','0','0','0','0','0','17249','0','0','0','Izmir','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+('70240','0','0','0','0','0','17248','0','0','0','Fallat','Priest Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3600','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','priest_bot','-1'),
+-- 70241 - 70250 reserved for priests
+('70251','0','0','0','0','0','4552','0','0','0','Haromm','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70252','0','0','0','0','0','2123','0','0','0','Siln','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70253','0','0','0','0','0','2102','0','0','0','Tigor','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70254','0','0','0','0','0','2082','0','0','0','Beram','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70255','0','0','0','0','0','10180','0','0','0','Meela','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70256','0','0','0','0','0','3816','0','0','0','Narm','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70257','0','0','0','0','0','1878','0','0','0','Shikrik','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70258','0','0','0','0','0','3746','0','0','0','Swart','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70259','0','0','0','0','0','1360','0','0','0','Kardris','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70260','0','0','0','0','0','4231','0','0','0','Sian\'tsu','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70261','0','0','0','0','0','13341','0','0','0','Sagorne','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+-- ('70262','0','0','0','0','0','17598','0','0','0','Firmanvaar','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+-- ('70263','0','0','0','0','0','17600','0','0','0','Nobundo','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+-- ('70264','0','0','0','0','0','17599','0','0','0','Tuluun','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70265','0','0','0','0','0','16914','0','0','0','Sulaa','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+-- ('70266','0','0','0','0','0','17792','0','0','0','Hobahken','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70267','0','0','0','0','0','19598','0','0','0','Umbrua','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+('70268','0','0','0','0','0','21265','0','0','0','Javad','Shaman Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2600','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','shaman_bot','-1'),
+-- 70269 - 70300 reserved for shamans
+('70301','0','0','0','0','0','5001','0','0','0','Khelden','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70302','0','0','0','0','0','1294','0','0','0','Zaldimar','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70303','0','0','0','0','0','1484','0','0','0','Maginor','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70304','0','0','0','0','0','10216','0','0','0','Marryk','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70305','0','0','0','0','0','10215','0','0','0','Magis','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70306','0','0','0','0','0','1592','0','0','0','Isabella','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70307','0','0','0','0','0','1600','0','0','0','Cain','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70308','0','0','0','0','0','2134','0','0','0','Shymm','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70309','0','0','0','0','0','6058','0','0','0','Ursyn','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70310','0','0','0','0','0','2135','0','0','0','Thurston','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70311','0','0','0','0','0','2644','0','0','0','Pierce','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70312','0','0','0','0','0','2657','0','0','0','Anastasia','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70313','0','0','0','0','0','3108','0','0','0','Bink','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70314','0','0','0','0','0','10214','0','0','0','Juli','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70315','0','0','0','0','0','3109','0','0','0','Nittlebur','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70316','0','0','0','0','0','3292','0','0','0','Jennea','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70317','0','0','0','0','0','10171','0','0','0','Un\'Thuwa','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70318','0','0','0','0','0','4524','0','0','0','Pephredo','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70319','0','0','0','0','0','4522','0','0','0','Enyo','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70320','0','0','0','0','0','4526','0','0','0','Mai\'ah','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70321','0','0','0','0','0','4523','0','0','0','Deino','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70322','0','0','0','0','0','6060','0','0','0','Uthel\'nay','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70323','0','0','0','0','0','6072','0','0','0','Dink','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70324','0','0','0','0','0','15522','0','0','0','Julia','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70325','0','0','0','0','0','16680','0','0','0','Garridel','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70326','0','0','0','0','0','16223','0','0','0','Valaatu','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70327','0','0','0','0','0','16781','0','0','0','Zaedana','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70328','0','0','0','0','0','16824','0','0','0','Quithas','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70329','0','0','0','0','0','16809','0','0','0','Inethven','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70330','0','0','0','0','0','16777','0','0','0','Narinth','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70331','0','0','0','0','0','17242','0','0','0','Edirah','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70332','0','0','0','0','0','16856','0','0','0','Valustraa','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70333','0','0','0','0','0','17233','0','0','0','Semid','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70334','0','0','0','0','0','17243','0','0','0','Harnan','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70335','0','0','0','0','0','17241','0','0','0','Bati','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+('70336','0','0','0','0','0','11466','0','0','0','Derek','Mage Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3800','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','mage_bot','-1'),
+-- 70337 - 70350 reserved for mages
+('70351','0','0','0','0','0','3345','0','0','0','Drusilla','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70352','0','0','0','0','0','1930','0','0','0','Alamar','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70353','0','0','0','0','0','1469','0','0','0','Demisette','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70354','0','0','0','0','0','3271','0','0','0','Maximillian','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70355','0','0','0','0','0','4567','0','0','0','Kartosh','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70356','0','0','0','0','0','1581','0','0','0','Maximillion','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70357','0','0','0','0','0','1604','0','0','0','Rupert','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70358','0','0','0','0','0','1884','0','0','0','Nartok','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70359','0','0','0','0','0','3745','0','0','0','Dhugru','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70360','0','0','0','0','0','1324','0','0','0','Grol\'dar','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70361','0','0','0','0','0','1325','0','0','0','Mirket','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70362','0','0','0','0','0','1326','0','0','0','Zevrost','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70363','0','0','0','0','0','2675','0','0','0','Kaal','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70364','0','0','0','0','0','2637','0','0','0','Luther','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70365','0','0','0','0','0','2646','0','0','0','Richard','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70366','0','0','0','0','0','3115','0','0','0','Thistleheart','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70367','0','0','0','0','0','3116','0','0','0','Briarthorn','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70368','0','0','0','0','0','3122','0','0','0','Alexander','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70369','0','0','0','0','0','3291','0','0','0','Ursula','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70370','0','0','0','0','0','3286','0','0','0','Sandahl','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70371','0','0','0','0','0','3607','0','0','0','Gimrizz','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70372','0','0','0','0','0','15524','0','0','0','Teli\'Larien','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70373','0','0','0','0','0','16700','0','0','0','Celoenus','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70374','0','0','0','0','0','16787','0','0','0','Alamma','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70375','0','0','0','0','0','16800','0','0','0','Talionia','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70376','0','0','0','0','0','16831','0','0','0','Zanien','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+('70377','0','0','0','0','0','21604','0','0','0','Babagaya','Warlock Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3500','2000','8','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','warlock_bot','-1'),
+-- 70378 - 70400 reserved for warlocks
+('70401','0','0','0','0','0','2106','0','0','0','Turak','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70402','0','0','0','0','0','2121','0','0','0','Sheal','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70403','0','0','0','0','0','2115','0','0','0','Kym','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70404','0','0','0','0','0','3819','0','0','0','Gart','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70405','0','0','0','0','0','10734','0','0','0','Gennia','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70406','0','0','0','0','0','1732','0','0','0','Mardant','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70407','0','0','0','0','0','1706','0','0','0','Kal','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70408','0','0','0','0','0','2261','0','0','0','Mathrengyl','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70409','0','0','0','0','0','2250','0','0','0','Denatharion','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70410','0','0','0','0','0','2255','0','0','0','Fylerian','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70411','0','0','0','0','0','3300','0','0','0','Sheldras','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70412','0','0','0','0','0','3301','0','0','0','Theridran','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70413','0','0','0','0','0','3302','0','0','0','Maldryn','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70414','0','0','0','0','0','7357','0','0','0','Jannos','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70415','0','0','0','0','0','10738','0','0','0','Golhine','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70416','0','0','0','0','0','12053','0','0','0','Loganaar','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70417','0','0','0','0','0','16739','0','0','0','Harene','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+('70418','0','0','0','0','0','16858','0','0','0','Shalannius','Druid Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','2200','2000','2','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','druid_bot','-1'),
+-- 70419 - 70450 reserved for druids
+('70451','0','0','0','0','0','24935','0','0','0','Siouxsie','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70452','0','0','0','0','0','26939','0','0','0','Imhadria','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70453','0','0','0','0','0','26854','0','0','0','Vaelen','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70454','0','0','0','0','0','28039','0','0','0','Mynx','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70455','0','0','0','0','0','26688','0','0','0','Lankral','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70456','0','0','0','0','0','26195','0','0','0','Sliver','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70457','0','0','0','0','0','27402','0','0','0','Vereth','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70458','0','0','0','0','0','27189','0','0','0','Arly','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70459','0','0','0','0','0','26217','0','0','0','Setaal','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70460','0','0','0','0','0','26222','0','0','0','Uzo','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70461','0','0','0','0','0','28842','0','0','0','Illyrie','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70462','0','0','0','0','0','28837','0','0','0','Crok','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70463','0','0','0','0','0','28840','0','0','0','Zor\'be','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70464','0','0','0','0','0','25512','0','0','0','Datura','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+('70465','0','0','0','0','0','25500','0','0','0','Stefan','Death Knight Bot','','0','80','80','2','35','1','1.1','1.1','1','0','0','3300','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','death_knight_bot','-1'),
+-- 70466 - 70500 reserved for deathknights
+('70501','0','0','0','0','0','4449','0','0','0','Imp',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','1','135266416','warlock_pet_bot','-1'),
+('70502','0','0','0','0','0','1132','0','0','0','Voidwalker',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','1','135266416','warlock_pet_bot','-1'),
+('70503','0','0','0','0','0','4162','0','0','0','Succubus',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','1','135266416','warlock_pet_bot','-1'),
+('70504','0','0','0','0','0','850','0','0','0','Felhunter',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','1','135266416','warlock_pet_bot','-1'),
+('70505','0','0','0','0','0','14255','0','0','0','Felguard',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','1','135266416','warlock_pet_bot','-1'),
+('70506','0','0','0','0','0','368','0','0','0','Spider',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70507','0','0','0','0','0','4312','0','0','0','Serpent',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70508','0','0','0','0','0','16724','0','0','0','Bird of Prey',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70509','0','0','0','0','0','8808','0','0','0','Bat',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70510','0','0','0','0','0','17562','0','0','0','Wind Serpent',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70511','0','0','0','0','0','20308','0','0','0','Ravager',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70512','0','0','0','0','0','17545','0','0','0','Dragonhawk',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70513','0','0','0','0','0','19405','0','0','0','Nether Ray',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70514','0','0','0','0','0','17753','0','0','0','Sporebat',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70515','0','0','0','0','0','15590','0','0','0','Carrion Bird',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70516','0','0','0','0','0','11319','0','0','0','Raptor',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70517','0','0','0','0','0','741','0','0','0','Wolf',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70518','0','0','0','0','0','1220','0','0','0','Tallstrider',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70519','0','0','0','0','0','321','0','0','0','Cat',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70520','0','0','0','0','0','2714','0','0','0','Hyena',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70521','0','0','0','0','0','29113','0','0','0','Wasp',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70522','0','0','0','0','0','17798','0','0','0','Teromoth',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70523','0','0','0','0','0','20790','0','0','0','Scorpid',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70524','0','0','0','0','0','1244','0','0','0','Turtle',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70525','0','0','0','0','0','809','0','0','0','Gorilla',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70526','0','0','0','0','0','706','0','0','0','Bear',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70527','0','0','0','0','0','381','0','0','0','Boar',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70528','0','0','0','0','0','1938','0','0','0','Crab',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70529','0','0','0','0','0','1250','0','0','0','Crocolisk',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70530','0','0','0','0','0','19998','0','0','0','Warp Stalker',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70531','0','0','0','0','0','11087','0','0','0','Silithid',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70532','0','0','0','0','0','10810','0','0','0','Chimaera',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70533','0','0','0','0','0','29673','0','0','0','Spirit Beast',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70534','0','0','0','0','0','12168','0','0','0','Core Hound',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70535','0','0','0','0','0','5239','0','0','0','Devilsaur',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70536','0','0','0','0','0','26279','0','0','0','Rhino',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70537','0','0','0','0','0','13212','0','0','0','Worm',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','hunter_pet_bot','-1'),
+('70538','0','0','0','0','0','24994','24993','24992','24995','Risen Ghoul',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','deathknight_pet_bot','-1'),
+-- 70539 - 70541 reserved for dk pets
+('70542','0','0','0','0','0','19110','0','0','0','Shadowfiend',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','5','1500','1500','2','0','0','0','0','10','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','priest_pet_bot','-1'),
+('70543','0','0','0','0','0','21114','0','0','0','Spirit Wolf',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','1500','1500','1','0','0','0','0','1','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','shaman_pet_bot','-1'),
+('70544','0','0','0','0','0','525','0','0','0','Water Elemental',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','8','0','0','0','0','4','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','mage_pet_bot','-1'),
+('70545','0','0','0','0','0','18922','0','0','0','Treant',NULL,'','0','80','80','2','35','0','1.2','1.3','1','0','0','2000','2000','1','0','0','0','0','4','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','druid_pet_bot','-1'),
+-- 70546 - 70550 reserved for pets
+('70551','0','0','0','0','0','17659','0','0','0','Gorkramato','Blademaster Bot','','0','81','81','2','35','1','1.1','1.1','1','4','0','2200','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157560','blademaster_bot','-1'),
+('70552','0','0','0','0','0','17659','0','0','0','Mirror Image (Blademaster)','Blademaster bot','','0','81','81','2','35','1','1.1','1.1','1','4','0','2200','2000','1','0','16432','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157560','blademaster_bot','-1'),
+('70553','0','0','0','0','0','15343','0','0','0','Osis','Obsidian Destroyer Bot','','0','83','83','2','35','1','1.1','1.1','0.7','2','0','1200','1200','8','0','0','0','0','10','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','sphynx_bot','-1'),
+('70554','0','0','0','0','0','15343','0','0','0','Amot','Obsidian Destroyer Bot','','0','83','83','2','35','1','1.1','1.1','0.7','2','0','1200','1200','8','0','0','0','0','10','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','sphynx_bot','-1'),
+('70555','0','0','0','0','0','6769','0','0','0','Detrae','Archmage Bot','','0','81','81','2','35','1','1.1','1.1','1','4','0','1420','1420','8','0','16432','0','0','7','2048','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','archmage_bot','-1'),
+('70556','0','0','0','0','0','5561','0','0','0','Water Elemental',NULL,'','0','81','81','2','35','0','1.2','1.3','1','0','0','1500','1500','1','0','0','0','0','4','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','archmage_pet_bot','-1'),
+('70557','0','0','0','0','0','348','0','0','0','Neroth','Dreadlord Bot','','0','83','83','2','35','1','1.1','1.1','1.5','2','0','1300','1300','2','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dreadlord_bot','-1'),
+('70558','0','0','0','0','0','348','0','0','0','Fearoth','Dreadlord Bot','','0','83','83','2','35','1','1.1','1.1','1.5','2','0','1300','1300','2','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dreadlord_bot','-1'),
+('70559','0','0','0','0','0','348','0','0','0','Zalamon','Dreadlord Bot','','0','83','83','2','35','1','1.1','1.1','1.5','2','0','1300','1300','2','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dreadlord_bot','-1'),
+('70560','0','0','0','0','0','348','0','0','0','Lotthicus','Dreadlord Bot','','0','83','83','2','35','1','1.1','1.1','1.5','2','0','1300','1300','2','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dreadlord_bot','-1'),
+('70561','0','0','0','0','0','348','0','0','0','Ramarot','Dreadlord Bot','','0','83','83','2','35','1','1.1','1.1','1.5','2','0','1300','1300','2','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dreadlord_bot','-1'),
+('70562','0','0','0','0','0','169','0','0','0','Infernal',NULL,'','0','83','83','2','35','0','1.2','1.3','1.5','0','2','1350','1350','1','0','0','0','0','3','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266416','dreadlord_pet_bot','-1'),
+('70563','0','0','0','0','0','15511','0','0','0','Eanor','Spell Breaker Bot','','0','81','81','2','35','1','1.1','1.1','1.5','4','0','1900','1900','2','0','0','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','spellbreaker_bot','-1'),
+('70564','0','0','0','0','0','15511','0','0','0','Narsen','Spell Breaker Bot','','0','81','81','2','35','1','1.1','1.1','1.5','4','0','1900','1900','2','0','0','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','spellbreaker_bot','-1'),
+('70565','0','0','0','0','0','15511','0','0','0','Caelnor','Spell Breaker Bot','','0','81','81','2','35','1','1.1','1.1','1.5','4','0','1900','1900','2','0','0','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','spellbreaker_bot','-1'),
+('70566','0','0','0','0','0','15511','0','0','0','Daenste','Spell Breaker Bot','','0','81','81','2','35','1','1.1','1.1','1.5','4','0','1900','1900','2','0','0','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','spellbreaker_bot','-1'),
+('70567','0','0','0','0','0','15511','0','0','0','Neshdar','Spell Breaker Bot','','0','81','81','2','35','1','1.1','1.1','1.5','4','0','1900','1900','2','0','0','0','0','7','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','spellbreaker_bot','-1'),
+('70568','0','0','0','0','0','30072','0','0','0','Mara','Dark Ranger Bot','','0','83','83','2','35','1','1.1','1.1','1','2','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_bot','-1'),
+('70569','0','0','0','0','0','30072','0','0','0','Tani','Dark Ranger Bot','','0','83','83','2','35','1','1.1','1.1','1','2','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_bot','-1'),
+('70570','0','0','0','0','0','30072','0','0','0','Eva','Dark Ranger Bot','','0','83','83','2','35','1','1.1','1.1','1','2','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_bot','-1'),
+('70571','0','0','0','0','0','30072','0','0','0','Darise','Dark Ranger Bot','','0','83','83','2','35','1','1.1','1.1','1','2','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_bot','-1'),
+('70572','0','0','0','0','0','30072','0','0','0','Lyra','Dark Ranger Bot','','0','83','83','2','35','1','1.1','1.1','1','2','0','2000','2000','8','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_bot','-1'),
+('70573','0','0','0','0','0','30363','0','0','0','Dark Minion',NULL,'','0','83','83','2','35','0','1.1','1.1','1','0','0','2000','2000','1','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_pet_bot','-1'),
+('70574','0','0','0','0','0','30363','0','0','0','Dark Minion',NULL,'','0','83','83','2','35','0','1.1','1.1','1','1','0','2000','2000','1','0','0','0','0','6','0','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','0','dark_ranger_pet_bot','-1');
+-- 70575 - 71000 reserved for custom stuff
+
+-- GOSSIPS --
+delete from `npc_text` where ID between @BOT_START and @BOT_END;
+insert into `npc_text` (`ID`,`text0_0`,`VerifiedBuild`)
+values
+('70001','I live only to serve the master.','-1'),
+('70002','You need something?','-1'),
+('70003','Mortals... usually I kill wretches like you at sight.','-1'),
+('70004','','-1'),
+('70005','','-1'),
+('70006','Are you surprised, mortal? As a lesser nathrezim I have to resort to seeking out allies. You look like you could amuse me at least.','-1'),
+('70007','What is it now, mortal?','-1'),
+('70008','Can you just leave me be? ','-1'),
+('70009','Now what?','-1'),
+-- 70010 - 70100 reserved for standard/greet gossips
+('70101','|cffff3300Blademaster|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"An elite swordsman, former member of Burning Blade clan, now an elite fighter within the Horde\".$B$BMain attribute: Agility.$B$BNetherwalk (Windwalk). Allows Blademaster to become invisible, and move faster for a set amount of time. When the Blademaster attacks a unit to break invisibility, he will deal bonus damage.$B$BMirror Image. Confuses the enemy by creating illusions of the Blademaster and dispelling all magic from the Blademaster.$B$BCritical Strike (passive). Gives a 15% chance to deal critical x2(x3,x4) times normal damage on his attacks.$B$BBladestorm (NIY). Grants immunity to magic and deals damage to all surrounding enemies.$B$B','-1'),
+('70102','|cff9900ccObsidian Destroyer|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"An obsidian winged monstrocity with insatiable hunger for magic\".$B$BHigh armor, very high resistances, partially immune to magic, loses mana over time and doesn\'t benefit from passive mana regeneration effects, mail/plate armor, dual-wielding wands, deals spellshadow damage, no physical attack, cannot attack enemies not in front while moving, spell power bonus: 50% attack power + 200% intellect + wands damage.$B$BDevour Magic. Dispels up to 2 magic effects from enemies, up to 2 magic effects and up to 2 curses from allies and damaging summoned units in 20 yards area. Every dispelled effect restores 20% mana and 5% health, 7 seconds cooldown.$B$BShadow Blast. Empowered attack that deals increased splash damage.$B$BDrain Mana. Drains all mana (limited by caster\'s mana pool) from a random friendly unit.$B$BReplenish Mana. Energizes surrounding party and raid members within 25 yards for 2% of their maximum mana nullifying caster\'s mana, affects up to 10 targets, 3 seconds cooldown.$B$BRegenerating Aura. Heals surrounding party and raid members within 25 yards for 3% of their maximum health nullifying caster\'s mana, affects up to 10 targets, 3 seconds cooldown.$B$BShadow Armor (passive). Restores mana equal to a percentage of damage taken.$B$B','-1'),
+('70103','|cff0000ddArchmage|r$b|cffdd6600-=Warcraft III tribute=-|r$B$BSpell damage taken reduced by 35%, partially immune to control effects, cloth armor, deals spellsfire/spellfrost damage, no physical attack, spell power bonus: 100% intellect. Main attribute: Intellect.$B$BBlizzard. Your typical blizzard, just a little more powerful, 6 seconds cooldown.$B$BSummon Water Elemental. Summons a water elemental to attack archmage\'s enemies for 1 min, 20 seconds cooldown.$B$BBrilliance Aura. Increases maximum mana by 10% and greatly increases mana regeneration of party and raid members within 40 yards.$B$BMass Teleport. NIY.','-1'),
+('70104','|cff9900ccDreadlord|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"Incredibly powerful demon who wields power of darkness and mental domination\".$B$BHigh armor, high resistances, partially immune to control effects, damage taken speeds up spells recharge, plate armor, deals melee/spellshadow damage, bonus damage against incapacitated targets, spell power bonus: 200% strength. Main attribute: Strength.$B$BCarrion Swarm. Sends a horde of bats combined with chaotic magic to damage enemies in a very large frontal cone, cannot crit, 10 seconds cooldown.$B$BSleep. Puts the enemy target to sleep for 60 seconds and allows next physical attack on that target to bypass armor, direct damage caused will awaken the target, 6 seconds cooldown.$B$BVampiric Aura. Increases physical critical damage by 5% and heals party and raid members within 40 yards for a percentage (100% for Dreadlord and 25% for everyone else) of damage done by melee physical attacks and Carrion Swarm, no threat.$B$BSummon Infernal Servant. Calls an infernal down from the sky dealing damage and stunning enemy units, infernal is very resistant to magic and lasts 180 seconds, 180 seconds cooldown.','-1'),
+('70105','|cff0000ddSpell Breaker|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"An elven warrior trained to disrupt and contort magical energies\".$B$BSpell damage taken reduced by 75%, partially immune to control effects, armor penalty -30%, mail/plate armor, deals melee/arcane damage, spell power bonus: 200% strength. Main attribute: Strength.$B$BSteal Magic (Spellsteal). Steals a benefical spell from an enemy and applies it to a nearby ally or removes a negative spell from an ally and applies it to a nearby enemy, affects magic and curse effects, 3 seconds cooldown.$B$BFeedback (passive). Successful melee attacks burn target\'s mana equal to damage caused (increased by spellpower) dealing arcane damage. If target is drained, Spell Breaker\'s melee attacks will do triple damage with increased critical strike chance','-1'),
+('70106','|cff9900ccDark Ranger|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"A former ranger of Quel\'thalas forcibly raised from the dead\".$B$BSpell damage taken reduced by 35%, undead, partially immune to control effects, leather/cloth armor, deals physical/spellshadow damage, stick to shadows and generates no threat, spell power bonus: 50% intellect. Main attribute: Agility.$B$BSilence. Silences an enemy and up to 4 nearby targets for 8 seconds, 15 seconds cooldown.$B$BBlack Arrow. Fires a cursed arrow dealing 150% weapon damage and additional spellshadow damage over time. If affected target dies from Dark Ranger\'s damage, Dark Minion will spawn from the corpse (maximum 5 Minions, 80 seconds duration, only works on humanoids, beasts and dragonkin). Deals five times more damage if target is under 20% health.$B$BDrain Life. Drains health from an enemy every second for 5 seconds, healing Dark Ranger for 200% of the drained amount.','-1');
+-- 70107 - 70200 reserved for custom class descriptions
+
+-- OUTFITS --
+-- Npc Dress mod by Rochet2
+CREATE TABLE IF NOT EXISTS `creature_template_outfits` (
+ `entry` INT(10) UNSIGNED NOT NULL,
+ `race` tinyint(3) UNSIGNED NOT NULL DEFAULT '1',
+ `gender` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0 for male, 1 for female',
+ `skin` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
+ `face` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
+ `hair` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
+ `haircolor` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
+ `facialhair` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
+ `head` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `shoulders` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `body` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `chest` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `waist` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `legs` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `feet` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `wrists` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `hands` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `back` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `tabard` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+-- End Npc Dress mod
+
+replace into `creature_template_outfits` (`entry`, `race`, `gender`, `skin`, `face`, `hair`, `haircolor`, `facialhair`, `head`, `shoulders`, `body`, `chest`, `waist`, `legs`, `feet`, `wrists`, `hands`, `back`, `tabard`)
+values
+('70551','2','0','0','14','9','7','5','0','0','0','0','59194','64674','0','36248','0','0','0'), -- Blademaster
+('70552','2','0','0','14','9','7','5','0','0','0','0','59194','64674','0','36248','0','0','0'); -- Mirror Image (Blademaster)
+
+-- Customize section
+
+SET @CLASS_WARRIOR = 1;
+SET @CLASS_PALADIN = 2;
+SET @CLASS_HUNTER = 3;
+SET @CLASS_ROGUE = 4;
+SET @CLASS_PRIEST = 5;
+SET @CLASS_DK = 6;
+SET @CLASS_SHAMAN = 7;
+SET @CLASS_MAGE = 8;
+SET @CLASS_WARLOCK = 9;
+SET @CLASS_DRUID = 11;
+SET @CLASS_BM = 12;
+SET @CLASS_SPHYNX = 13;
+SET @CLASS_ARCHMAGE = 14;
+SET @CLASS_DREADLORD = 15;
+SET @CLASS_SPELLBREAKER = 16;
+SET @CLASS_DARK_RANGER = 17;
+
+-- Add flags_extra
+
+SET @EX_NO_PARRY_HASTEN = 8; -- 0x00000008 - CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN
+SET @EX_NO_BLOCK = 16; -- 0x00000010 - CREATURE_FLAG_EXTRA_NO_BLOCK
+SET @EX_NO_CRUSH = 32; -- 0x00000020 - CREATURE_FLAG_EXTRA_NO_CRUSH
+SET @EX_NO_XP = 64; -- 0x00000040 - CREATURE_FLAG_EXTRA_NO_XP_AT_KILL
+SET @EX_DIMINISH = 1048576; -- 0x00100000 - CREATURE_FLAG_EXTRA_ALL_DIMINISH
+SET @EX_NPCBOT = 67108864; -- 0x04000000 - CREATURE_FLAG_EXTRA_NPCBOT - custom flag
+SET @EX_NPCBOT_PET = 134217728; -- 0x08000000 - CREATURE_FLAG_EXTRA_NPCBOT_PET - custom flag
+SET @FLAGS_EX = @EX_NO_BLOCK | @EX_NO_CRUSH | @EX_NO_XP | @EX_DIMINISH | @EX_NPCBOT;
+SET @FLAGS_EXN = @EX_NO_BLOCK | @EX_NO_CRUSH | @EX_NO_XP | @EX_DIMINISH | @EX_NPCBOT | @EX_NO_PARRY_HASTEN;
+SET @FLAGS_EX_PET = @EX_NO_BLOCK | @EX_NO_CRUSH | @EX_NO_XP | @EX_DIMINISH | @EX_NPCBOT_PET;
+SET @FLAGS_EX_PET_BLOCK = @EX_NO_CRUSH | @EX_NO_XP | @EX_DIMINISH | @EX_NPCBOT_PET;
+
+-- Add unit_flags
+-- SET @U_PVP_ATTACKABLE = 8; -- 0x00000008 - UNIT_FLAG_PVP_ATTACKABLE
+SET @FLAGS_U = 0;
+SET @FLAGS_U_PET = 0;
+
+-- Add unit_flags2
+SET @U2_MIRROR_IMAGE = 16; -- 0x00000010 - UNIT_FLAG2_MIRROR_IMAGE - 22.06.19
+SET @U2_INSTANT_APPEAR_MODEL= 32; -- 0x00000020 - UNIT_FLAG2_INSTANTLY_APPEAR_MODEL - 29.05.19
+SET @U2_ENEMY_INTERRACT = 16384; -- 0x00004000 - UNIT_FLAG2_ALLOW_ENEMY_INTERACT
+-- SET @U2_DISABLE_TURN = 32768; -- 0x00008000 - UNIT_FLAG2_DISABLE_TURN
+SET @FLAGS_U2 = @U2_MIRROR_IMAGE | @U2_INSTANT_APPEAR_MODEL | @U2_ENEMY_INTERRACT;
+SET @FLAGS_U2_NM = @U2_INSTANT_APPEAR_MODEL | @U2_ENEMY_INTERRACT;
+SET @FLAGS_U2_PET = 0;
+
+-- Add type_flags
+SET @CT_CAN_ASSIST = 4096; -- 0x00001000 - CREATURE_TYPE_FLAG_CAN_ASSIST - 26.10.19
+SET @FLAGS_CT = @CT_CAN_ASSIST;
+
+-- general
+UPDATE `creature_template` SET type_flags:=`type_flags`|@FLAGS_CT WHERE `entry` BETWEEN @BOT_START AND @BOT_END;
+
+-- minions
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=3300, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DK);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=2200, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DRUID);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=2800, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_HUNTER);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=3800, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_MAGE);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=2300, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_PALADIN);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=3600, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_PRIEST);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=1600, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_ROGUE);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=2600, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SHAMAN);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=3500, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_WARLOCK);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, BaseAttackTime:=3400, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_WARRIOR);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=81, maxlevel:=81, BaseAttackTime:=1940, RangeAttackTime:=1940, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=1, flags_extra:=@FLAGS_EXN,unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_BM);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=83, maxlevel:=83, BaseAttackTime:=1350, RangeAttackTime:=1350, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1,scale:=0.7,HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2_NM, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SPHYNX);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=81, maxlevel:=81, BaseAttackTime:=1420, RangeAttackTime:=1420, dynamicflags:=0, speed_walk:=1.1, speed_run:=2.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_ARCHMAGE);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=83, maxlevel:=83, BaseAttackTime:=2600, RangeAttackTime:=2600, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1,scale:=1.2,HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2_NM, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DREADLORD);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=81, maxlevel:=81, BaseAttackTime:=1900, RangeAttackTime:=1900, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1,scale:=1.1,HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2_NM, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SPELLBREAKER);
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=82, maxlevel:=82, BaseAttackTime:=2000, RangeAttackTime:=2000, dynamicflags:=0, speed_walk:=1.1, speed_run:=1.1, scale:=1, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, mechanic_immune_mask:=0, flags_extra:=@FLAGS_EX, unit_flags:=`unit_flags`|@FLAGS_U, unit_flags2:=`unit_flags2`|@FLAGS_U2_NM, AIName:=''
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DARK_RANGER);
+
+-- pets
+SET @PET_START = 70501;
+SET @PET_END = 70550;
+SET @PET_WATER_ELEMENTAL = 70556;
+SET @PET_INFERNAL = 70562;
+SET @PET_DARK_MINION = 70573;
+SET @PET_DARK_MINION_ELITE = 70574;
+
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=80, maxlevel:=80, dynamicflags:=0, speed_walk:=1.2, speed_run:=1.3, scale:=1.0, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, flags_extra:=@FLAGS_EX_PET, unit_flags:=`unit_flags`|@FLAGS_U_PET, unit_flags2:=`unit_flags2`|@FLAGS_U2_PET, AIName:=''
+WHERE `entry` BETWEEN @PET_START and @PET_END;
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=81, maxlevel:=81, dynamicflags:=0, speed_walk:=1.2, speed_run:=1.3, scale:=1.3, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, flags_extra:=@FLAGS_EX_PET, unit_flags:=`unit_flags`|@FLAGS_U_PET, unit_flags2:=`unit_flags2`|@FLAGS_U2_PET, AIName:=''
+WHERE `entry`=@PET_WATER_ELEMENTAL;
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=83, maxlevel:=83, dynamicflags:=0, speed_walk:=1.2, speed_run:=1.3, scale:=1.5, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, flags_extra:=@FLAGS_EX_PET, unit_flags:=`unit_flags`|@FLAGS_U_PET, unit_flags2:=`unit_flags2`|@FLAGS_U2_PET, AIName:=''
+WHERE `entry`=@PET_INFERNAL;
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=83, maxlevel:=83, dynamicflags:=0, speed_walk:=1.2, speed_run:=1.3, scale:=0.8, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, flags_extra:=@FLAGS_EX_PET_BLOCK, unit_flags:=`unit_flags`|@FLAGS_U_PET, unit_flags2:=`unit_flags2`|@FLAGS_U2_PET, AIName:=''
+WHERE `entry`=@PET_DARK_MINION;
+UPDATE `creature_template` SET exp:=2, faction:=35, minlevel:=83, maxlevel:=83, dynamicflags:=0, speed_walk:=1.2, speed_run:=1.3, scale:=0.9, HealthModifier:=1, ManaModifier:=1, ArmorModifier:=1, RegenHealth:=0, flags_extra:=@FLAGS_EX_PET_BLOCK, unit_flags:=`unit_flags`|@FLAGS_U_PET, unit_flags2:=`unit_flags2`|@FLAGS_U2_PET, AIName:=''
+WHERE `entry`=@PET_DARK_MINION_ELITE;
+/*!50003 DROP PROCEDURE IF EXISTS `sp__generate_npcbot_equips`*/;
+
+DELIMITER ;;
+
+/*!50003 CREATE*/
+/*!50003 PROCEDURE `sp__generate_npcbot_equips`()
+BEGIN
+
+DECLARE CLASS_WARRIOR INT DEFAULT 1;
+DECLARE CLASS_PALADIN INT DEFAULT 2;
+DECLARE CLASS_HUNTER INT DEFAULT 3;
+DECLARE CLASS_ROGUE INT DEFAULT 4;
+DECLARE CLASS_PRIEST INT DEFAULT 5;
+DECLARE CLASS_DEATH_KNIGHT INT DEFAULT 6;
+DECLARE CLASS_SHAMAN INT DEFAULT 7;
+DECLARE CLASS_MAGE INT DEFAULT 8;
+DECLARE CLASS_WARLOCK INT DEFAULT 9;
+DECLARE CLASS_DRUID INT DEFAULT 11;
+DECLARE CLASS_BLADEMASTER INT DEFAULT 12;
+DECLARE CLASS_SPHYNX INT DEFAULT 13;
+DECLARE CLASS_ARCHMAGE INT DEFAULT 14;
+DECLARE CLASS_DREADLORD INT DEFAULT 15;
+DECLARE CLASS_SPELL_BREAKER INT DEFAULT 16;
+DECLARE CLASS_DARK_RANGER INT DEFAULT 17;
+
+DECLARE RACE_HUMAN INT DEFAULT 1;
+DECLARE RACE_ORC INT DEFAULT 2;
+DECLARE RACE_DWARF INT DEFAULT 3;
+DECLARE RACE_NELF INT DEFAULT 4;
+DECLARE RACE_UNDEAD INT DEFAULT 5;
+DECLARE RACE_TAUREN INT DEFAULT 6;
+DECLARE RACE_GNOME INT DEFAULT 7;
+DECLARE RACE_TROLL INT DEFAULT 8;
+DECLARE RACE_BELF INT DEFAULT 10;
+DECLARE RACE_DRAENEI INT DEFAULT 11;
+
+DECLARE NPCBOT_ENTRY_BEGIN INT DEFAULT 70001;
+DECLARE NPCBOT_ENTRY_END INT DEFAULT 71000;
+
+DECLARE NPCBOT_ENTRY_PET_DARK_MINION INT DEFAULT 70573;
+DECLARE NPCBOT_ENTRY_PET_DARK_MINION_ELITE INT DEFAULT 70574;
+
+DECLARE cur_pos INT DEFAULT 0;
+DECLARE myclass INT;
+DECLARE myrace INT;
+DECLARE item1 INT DEFAULT 0;
+DECLARE item2 INT DEFAULT 0;
+DECLARE item3 INT DEFAULT 0;
+
+DELETE FROM `creature_equip_template` WHERE `CreatureID` BETWEEN NPCBOT_ENTRY_BEGIN AND NPCBOT_ENTRY_END;
+
+SET cur_pos = NPCBOT_ENTRY_BEGIN;
+WHILE cur_pos < NPCBOT_ENTRY_END DO
+ SET myclass = (SELECT `class` FROM `creature_template_npcbot_extras` WHERE `entry` = cur_pos);
+ SET myrace = (SELECT `race` FROM `creature_template_npcbot_extras` WHERE `entry` = cur_pos);
+
+ IF myclass != 0 AND myrace != 0 THEN
+
+ IF myclass = CLASS_WARRIOR THEN
+ IF myrace = RACE_TAUREN THEN
+ SET item1 = 2361; -- hammer
+ ELSEIF myrace IN(RACE_DWARF,RACE_ORC) THEN
+ SET item1 = 2483; -- axe
+ ELSEIF TRUE THEN
+ SET item1 = 2497; -- sword
+ END IF;
+ ELSEIF myclass = CLASS_PALADIN THEN
+ SET item1 = 2488; -- gladius
+ SET item3 = 0;
+ IF myrace = RACE_BELF THEN
+ SET item2 = 20841; -- sunstrider shield
+ ELSE
+ SET item2 = 7188; -- stormwind guard shield
+ END IF;
+ ELSEIF myclass = CLASS_HUNTER THEN
+ SET item1 = 12282;
+ SET item2 = 0;
+ SET item3 = 2506;
+ ELSEIF myclass = CLASS_ROGUE THEN
+ SET item3 = 25873;
+ IF (cur_pos % 2) = 1 THEN
+ SET item1 = 2092;
+ SET item2 = 3296; -- daggers
+ ELSE
+ SET item1 = 2131;
+ SET item2 = 2484; -- swords
+ END IF;
+ ELSEIF myclass = CLASS_PRIEST THEN
+ SET item1 = 1388; -- short staff
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_DEATH_KNIGHT THEN
+ SET item1 = 38633; -- dk axe
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_SHAMAN THEN
+ SET item1 = 15903; -- claw
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_MAGE THEN
+ SET item1 = 2132; -- staff
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_WARLOCK THEN
+ SET item1 = 3661; -- staff
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_DRUID THEN
+ SET item1 = 3327; -- staff
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_BLADEMASTER THEN
+ SET item1 = 24044; -- blademaster polearm
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_SPHYNX THEN
+ SET item1 = 5208; -- smoldering wand
+ SET item2 = 5208;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_ARCHMAGE THEN
+ SET item1 = 25917; -- white staff
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_DREADLORD THEN
+ SET item1 = 0;
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_SPELL_BREAKER THEN
+ SET item1 = 0;
+ SET item2 = 0;
+ SET item3 = 0;
+ ELSEIF myclass = CLASS_DARK_RANGER THEN
+ SET item1 = 20849; -- arcane forged shortsword (1.7 dps)
+ SET item2 = 0;
+ SET item3 = 34529; -- vengeful gladiator's longbow
+ END IF;
+
+ INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`itemID1`,`itemID2`,`itemID3`,`VerifiedBuild`) VALUES (cur_pos,1,item1,item2,item3,-1);
+
+ ELSEIF cur_pos = NPCBOT_ENTRY_PET_DARK_MINION OR cur_pos = NPCBOT_ENTRY_PET_DARK_MINION_ELITE THEN
+ SET item1 = 3935;
+ SET item2 = 15648;
+ SET item3 = 0;
+
+ INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`itemID1`,`itemID2`,`itemID3`,`VerifiedBuild`) VALUES (cur_pos,1,item1,item2,item3,-1);
+
+ END IF;
+
+ SET cur_pos = cur_pos + 1;
+
+END WHILE;
+
+END */;;
+
+DELIMITER ;
+
+CALL `sp__generate_npcbot_equips`();
+
+DROP PROCEDURE IF EXISTS `sp__generate_npcbot_equips`;
+DELETE FROM `creature_template` WHERE `entry` = 70000;
+INSERT INTO `creature_template`
+(`entry`,`difficulty_entry_1`,`difficulty_entry_2`,`difficulty_entry_3`,`KillCredit1`,`KillCredit2`,
+`modelid1`,`modelid2`,`modelid3`,`modelid4`,`name`,`subname`,`IconName`,`gossip_menu_id`,`minlevel`,`maxlevel`,`exp`,
+`faction`,`npcflag`,`speed_walk`,`speed_run`,`scale`,`rank`,`dmgschool`,`BaseAttackTime`,`RangeAttackTime`,
+`BaseVariance`,`RangeVariance`,`unit_class`,`unit_flags`,`unit_flags2`,`dynamicflags`,`family`,`type`,`type_flags`,`lootid`,
+`pickpocketloot`,`skinloot`,`PetSpellDataId`,`VehicleId`,`mingold`,`maxgold`,`AIName`,`MovementType`,
+`HoverHeight`,`HealthModifier`,`ManaModifier`,`ArmorModifier`,`DamageModifier`,`ExperienceModifier`,`RacialLeader`,`movementId`,`RegenHealth`,
+`mechanic_immune_mask`,`spell_school_immune_mask`,`flags_extra`,`ScriptName`,`VerifiedBuild`)
+VALUES
+('70000','0','0','0','0','0','27541','0','0','0','Lagretta','Bots for hire','','0','83','83','2','35','1','1.4','1.14286','0.7','4','0','0','0','1','1','1','33088','2048','0','0','0','0','0','0','0','0','0','0','0','','0','1','4.8','1','1','1','1','0','0','1','0','0','0','script_bot_giver','-1');
+
+DELETE FROM `npc_text` WHERE `ID` BETWEEN 70201 AND 70204;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70201','There are always dudes ready to kill for money.','-1'),
+('70202','Mercenaries are always in demand. Here is what available right now.','-1'),
+('70203','Mercenaries are always in demand. Here is what available right now.','-1'),
+('70204','Seems like there is nobody available right now, check again later.','-1');
+-- Zandine race fix
+UPDATE `creature_template_npcbot_extras` SET `race`='10' WHERE (`entry`='70135');
+-- Marion modelId fix
+UPDATE `creature_template` SET `modelid1`='1603' WHERE (`entry`='70158');
+--
+SET @CLASS_HUNTER = 3;
+SET @CLASS_PRIEST = 5;
+SET @CLASS_DK = 6;
+SET @CLASS_SHAMAN = 7;
+SET @CLASS_WARLOCK = 9;
+SET @CLASS_DRUID = 11;
+
+-- actual values are irrelevant, but hp and mana must be > 1
+DELETE FROM `creature_classlevelstats` WHERE `class` IN (@CLASS_HUNTER,@CLASS_PRIEST,@CLASS_DK,@CLASS_SHAMAN,@CLASS_WARLOCK,@CLASS_DRUID) AND `level` BETWEEN '1' AND '100';
+INSERT INTO `creature_classlevelstats` (`level`,`class`,`basehp0`,`basehp1`,`basehp2`,`basemana`,`basearmor`,`attackpower`,`rangedattackpower`,`damage_base`,`damage_exp1`,`damage_exp2`,`comment`) VALUES
+('1', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('1', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('1', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('1', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('1', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('1', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL);
+--
+SET @CLASS_WARRIOR = 1;
+SET @CLASS_PALADIN = 2;
+SET @CLASS_HUNTER = 3;
+SET @CLASS_ROGUE = 4;
+SET @CLASS_PRIEST = 5;
+SET @CLASS_DK = 6;
+SET @CLASS_SHAMAN = 7;
+SET @CLASS_MAGE = 8;
+SET @CLASS_WARLOCK = 9;
+SET @CLASS_DRUID = 11;
+SET @CLASS_BM = 12;
+SET @CLASS_SPHYNX = 13;
+SET @CLASS_ARCHMAGE = 14;
+SET @CLASS_DREADLORD = 15;
+SET @CLASS_SPELLBREAKER = 16;
+SET @CLASS_DARK_RANGER = 17;
+
+UPDATE `creature_template` SET `unit_class`:=@CLASS_DK
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DK);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_DRUID
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DRUID);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_HUNTER
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_HUNTER);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_MAGE
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_MAGE);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_PALADIN
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_PALADIN);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_PRIEST
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_PRIEST);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_ROGUE
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_ROGUE);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_SHAMAN
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SHAMAN);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_WARLOCK
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_WARLOCK);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_WARRIOR
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_WARRIOR);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_WARRIOR
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_BM);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_WARLOCK
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SPHYNX);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_MAGE
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_ARCHMAGE);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_WARLOCK
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DREADLORD);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_PALADIN
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SPELLBREAKER);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_DK
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DARK_RANGER);
+--
+UPDATE `creature_template` SET `unit_flags2`='16416' WHERE `entry` IN ('70551','70552');
+--
+SET @LOCALIZED_STRINGS_START = 70300;
+SET @LOCALIZED_STRINGS_END = 70799;
+
+-- LOCALIZATION STRING --
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70300','Die!','-1'),
+('70301','Rezzing You','-1'),
+('70302','Rezzing ','-1'),
+('70303','your bot','-1'),
+('70304','\'s bot','-1'),
+('70305','I can\'t conjure water yet','-1'),
+('70306','I can\'t conjure food yet','-1'),
+('70307','I can\'t do it right now','-1'),
+('70308','Here you go...','-1'),
+('70309','Disabled','-1'),
+('70310','Not ready yet','-1'),
+('70311','Invalid object type','-1'),
+('70312','Failed','-1'),
+('70313','Done','-1'),
+('70314','I am not shapeshifted','-1'),
+('70315','I don\'t have a healthstone','-1'),
+('70316','I can\'t create healthstones yet!','-1'),
+('70317','WTF I don\'t have lockpicking!','-1'),
+('70318','My skill level in not high enough','-1'),
+('70319','Changing my spec to ','-1'),
+('70320','Arms','-1'),
+('70321','Fury','-1'),
+('70322','Protection','-1'),
+('70323','Retribution','-1'),
+('70324','Beast Mastery','-1'),
+('70325','Marksmanship','-1'),
+('70326','Survival','-1'),
+('70327','Assassination','-1'),
+('70328','Combat','-1'),
+('70329','Subtlety','-1'),
+('70330','Discipline','-1'),
+('70331','Holy','-1'),
+('70332','Shadow','-1'),
+('70333','Blood','-1'),
+('70334','Frost','-1'),
+('70335','Unholy','-1'),
+('70336','Elemental','-1'),
+('70337','Enhancement','-1'),
+('70338','Restoration','-1'),
+('70339','Arcane','-1'),
+('70340','Fire','-1'),
+('70341','Affliction','-1'),
+('70342','Demonology','-1'),
+('70343','Destruction','-1'),
+('70344','Balance','-1'),
+('70345','Feral Combat','-1'),
+('70346','Unknown','-1'),
+('70347','Go away, weakling','-1'),
+('70348',' is not convinced','-1'),
+('70349','I am not going to waste my time on just anything','-1'),
+('70350','NIY','-1'),
+('70351','NIY','-1'),
+('70352','NIY','-1'),
+('70353','I am ready','-1'),
+('70354','Go away. I serve my master ','-1'),
+('70355','unknown','-1'),
+('70356',' on You!','-1'),
+('70357',' on myself!','-1'),
+('70358',' on ','-1'),
+('70359',' used!','-1'),
+('70360','bot tank','-1'),
+('70361','class','-1'),
+('70362','player','-1'),
+('70363','master','-1'),
+('70364','none','-1'),
+('70365','Rank','-1'),
+('70366','talent','-1'),
+('70367','passive','-1'),
+('70368','hidden','-1'),
+('70369','known','-1'),
+('70370','ability','-1'),
+('70371','str','-1'),
+('70372','agi','-1'),
+('70373','sta','-1'),
+('70374','int','-1'),
+('70375','spi','-1'),
+('70376','unk stat','-1'),
+('70377','total','-1'),
+('70378','Melee AP','-1'),
+('70379','Ranged AP','-1'),
+('70380','armor','-1'),
+('70381','crit','-1'),
+('70382','defense','-1'),
+('70383','miss','-1'),
+('70384','dodge','-1'),
+('70385','parry','-1'),
+('70386','block','-1'),
+('70387','block value','-1'),
+('70388','Damage taken melee','-1'),
+('70389','Damage taken spell','-1'),
+('70390','Damage range mainhand','-1'),
+('70391','Damage mult mainhand','-1'),
+('70392','Attack time mainhand','-1'),
+('70393','Damage range offhand','-1'),
+('70394','Damage mult offhand','-1'),
+('70395','Attack time offhand','-1'),
+('70396','Damage range ranged','-1'),
+('70397','Damage mult ranged','-1'),
+('70398','Attack time ranged','-1'),
+('70399','min','-1'),
+('70400','max','-1'),
+('70401','DPS','-1'),
+('70402','base hp','-1'),
+('70403','total hp','-1'),
+('70404','base mana','-1'),
+('70405','total mana','-1'),
+('70406','current mana','-1'),
+('70407','spell power','-1'),
+('70408','health regen_5 bonus','-1'),
+('70409','mana regen_5 no cast','-1'),
+('70410','mana regen_5 casting','-1'),
+('70411','haste','-1'),
+('70412','hit','-1'),
+('70413','expertise','-1'),
+('70414','armor penetration','-1'),
+('70415','spell penetration','-1'),
+('70416','pct','-1'),
+('70417','holy','-1'),
+('70418','fire','-1'),
+('70419','nature','-1'),
+('70420','frost','-1'),
+('70421','shadow','-1'),
+('70422','arcane','-1'),
+('70423','Resistance','-1'),
+('70424','Command states','-1'),
+('70425','Follow','-1'),
+('70426','Attack','-1'),
+('70427','Stay','-1'),
+('70428','Reset','-1'),
+('70429','FullStop','-1'),
+('70430','Follow distance','-1'),
+('70431','Spec','-1'),
+('70432','Bot roles mask main','-1'),
+('70433','Bot roles mask gathering','-1'),
+('70434','PvP kills','-1'),
+('70435','players','-1'),
+('70436','Died ','-1'),
+('70437',' times','-1'),
+('70438','%s (bot) calms down','-1'),
+('70439','','-1'),
+('70440','Are you sure you want to risk drawing ','-1'),
+('70441','\'s attention?','-1'),
+('70442','','-1'),
+('70443','Do you want to entice ','-1'),
+('70444','','-1'),
+('70445','Do you wish to hire ','-1'),
+('70446','','-1'),
+('70447','Manage equipment...','-1'),
+('70448','Manage roles...','-1'),
+('70449','Manage formation...','-1'),
+('70450','Manage abilities...','-1'),
+('70451','Manage talents...','-1'),
+('70452','Give consumable...','-1'),
+('70453','','-1'),
+('70454','','-1'),
+('70455','','-1'),
+('70456','','-1'),
+('70457','','-1'),
+('70458','Follow me','-1'),
+('70459','Hold your position','-1'),
+('70460','Stay here and don\'t do anything','-1'),
+('70461','I need food','-1'),
+('70462','I need water','-1'),
+('70463','I need a refreshment table','-1'),
+('70464','Help me pick a lock','-1'),
+('70465','I need your healthstone','-1'),
+('70466','I need a soulwell','-1'),
+('70467','I need you to refresh poisons','-1'),
+('70468','','-1'),
+('70469','','-1'),
+('70470','I need you to refresh enchants','-1'),
+('70471','','-1'),
+('70472','','-1'),
+('70473','I need you to remove shapeshift','-1'),
+('70474','','-1'),
+('70475','You are dismissed','-1'),
+('70476','Are you going to abandon ','-1'),
+('70477','You may regret it...','-1'),
+('70478','Pull yourself together, damnit','-1'),
+('70479','','-1'),
+('70480','Nevermind','-1'),
+('70481','dist','-1'),
+('70482','BACK','-1'),
+('70483','','-1'),
+('70484','','-1'),
+('70485','Random (Cunning)','-1'),
+('70486','Random (Ferocity)','-1'),
+('70487','Random (Tenacity)','-1'),
+('70488','Show me your inventory','-1'),
+('70489','Auto-equip...','-1'),
+('70490','Main hand','-1'),
+('70491','Off-hand','-1'),
+('70492','Ranged','-1'),
+('70493','Relic','-1'),
+('70494','Head','-1'),
+('70495','Shoulders','-1'),
+('70496','Chest','-1'),
+('70497','Waist','-1'),
+('70498','Legs','-1'),
+('70499','Feet','-1'),
+('70500','Wrist','-1'),
+('70501','Hands','-1'),
+('70502','Back','-1'),
+('70503','Shirt','-1'),
+('70504','Finger1','-1'),
+('70505','Finger2','-1'),
+('70506','Trinket1','-1'),
+('70507','Trinket2','-1'),
+('70508','Neck','-1'),
+('70509','Unequip all','-1'),
+('70510','Update visual','-1'),
+('70511','visual only','-1'),
+('70512','Equipped','-1'),
+('70513','nothing','-1'),
+('70514','Use your old equipment','-1'),
+('70515','Unequip it','-1'),
+('70516','Hm... I have nothing to give you','-1'),
+('70517','Gathering','-1'),
+('70518','Abilities status','-1'),
+('70519','Manage allowed abilities','-1'),
+('70520','Use ','-1'),
+('70521','Update','-1'),
+('70522','Damage','-1'),
+('70523','Control','-1'),
+('70524','Heal','-1'),
+('70525','Other','-1'),
+('70526',' makes a grinding sound and begins to follow ','-1'),
+('70527','%s will not join you until dismissed by the owner','-1'),
+('70528','%s will not join you until you are level 60','-1'),
+('70529','%s will not join you until you are level 55','-1'),
+('70530','%s will not join you until you are level 40','-1'),
+('70531','%s will not join you until you are level 20','-1'),
+('70532','You exceed max npcbots (%u)','-1'),
+('70533','You don\'t have enough money','-1'),
+('70534','You cannot have more bots of that class! %u of %u','-1'),
+('70535','Cannot reset equipment in slot %u (%s)! Cannot dismiss bot!','-1'),
+('70536','current','-1'),
+('70537','Attack distance','-1'),
+('70538','Short range attacks','-1'),
+('70539','Long range attacks','-1'),
+('70540','Exact','-1'),
+('70541','Remove buff','-1'),
+('70542','Fix your power type','-1'),
+('70543','Cannot unequip %s for some stupid reason! Sending through mail','-1'),
+('70544','Tank','-1'),
+('70545','Ranged','-1'),
+('70546','Miner','-1'),
+('70547','Herbalist','-1'),
+('70548','Skinner','-1'),
+('70549','Engineer','-1'),
+('70550','Bot ownership expired due to inactivity','-1'),
+('70551','NpcBot system is currently disabled. Please contact administration.','-1'),
+('70552','%s will not join you, already has master: %s','-1'),
+('70553','%s cannot join you while about to teleport','-1'),
+('70554','Aspect','-1'),
+('70555','Monkey','-1'),
+('70556','Hawk','-1'),
+('70557','Cheetah','-1'),
+('70558','Viper','-1'),
+('70559','Beast','-1'),
+('70560','Pack','-1'),
+('70561','Wild','-1'),
+('70562','Dragonhawk','-1'),
+('70563','No Aspect','-1'),
+('70564','Aura','-1'),
+('70565','Devotion','-1'),
+('70566','Concentration','-1'),
+('70567','Fire Resistance','-1'),
+('70568','Frost Resistance','-1'),
+('70569','Shadow Resistance','-1'),
+('70570','Retribution','-1'),
+('70571','Crusader','-1'),
+('70572','No Aura','-1'),
+('70573','Crippling','-1'),
+('70574','Instant','-1'),
+('70575','Deadly','-1'),
+('70576','Wound','-1'),
+('70577','Mind-Numbing','-1'),
+('70578','Anesthetic','-1'),
+('70579','Nothing','-1'),
+('70580','Flametongue','-1'),
+('70581','Frostbrand','-1'),
+('70582','Windfury','-1'),
+('70583','Earthliving','-1'),
+('70584','I need your services','-1'),
+('70585','You have too many bots','-1'),
+('70586','Do you wish to hire ','-1'),
+('70587',' is a bit busy at the moment, try again later.','-1'),
+('70588','Pleasure doing business with you','-1'),
+('70589','Warriors','-1'),
+('70590','Paladins','-1'),
+('70591','Mages','-1'),
+('70592','Priests','-1'),
+('70593','Warlocks','-1'),
+('70594','Druids','-1'),
+('70595','Death Knights','-1'),
+('70596','Rogues','-1'),
+('70597','Shamans','-1'),
+('70598','Hunters','-1'),
+('70599','Blademasters','-1'),
+('70600','Destroyers','-1'),
+('70601','Archmagi','-1'),
+('70602','Dreadlords','-1'),
+('70603','Spell Breakers','-1'),
+('70604','Dark Rangers','-1'),
+('70605','Warrior','-1'),
+('70606','Paladin','-1'),
+('70607','Mage','-1'),
+('70608','Priest','-1'),
+('70609','Warlock','-1'),
+('70610','Druid','-1'),
+('70611','Death Knight','-1'),
+('70612','Rogue','-1'),
+('70613','Shaman','-1'),
+('70614','Hunter','-1'),
+('70615','Blademaster','-1'),
+('70616','Destroyer','-1'),
+('70617','Archmage','-1'),
+('70618','Dreadlord','-1'),
+('70619','Spell Breaker','-1'),
+('70620','Dark Ranger','-1');
+--
+DELETE FROM `npc_text` WHERE ID = 70550;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70550','Bot ownership expired','-1');
+--
+SET @LOCALIZED_STRINGS_START = 70621;
+SET @LOCALIZED_STRINGS_END = 70633;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70621','Male','-1'),
+('70622','Female','-1'),
+('70623','Human','-1'),
+('70624','Orc','-1'),
+('70625','Dwarf','-1'),
+('70626','Night Elf','-1'),
+('70627','Undead','-1'),
+('70628','Tauren','-1'),
+('70629','Gnome','-1'),
+('70630','Troll','-1'),
+('70631','Blood Elf','-1'),
+('70632','Draenei','-1'),
+('70633','Unknown','-1');
+--
+SET @LOCALIZED_STRINGS_START = 70634;
+SET @LOCALIZED_STRINGS_END = 70640;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70634','Looting','-1'),
+('70635','|cff9d9d9dPoor|r','-1'),
+('70636','|cffffffffCommon|r','-1'),
+('70637','|cff1eff00Uncommon|r','-1'),
+('70638','|cff0070ddRare|r','-1'),
+('70639','|cffa335eeEpic|r','-1'),
+('70640','|cffff8000Legendary|r','-1');
+--
+SET @LOCALIZED_STRINGS_START = 70641;
+SET @LOCALIZED_STRINGS_END = 70643;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70641','Grab on ','-1'),
+('70642','my ','-1'),
+('70643','','-1');
+--
+UPDATE `npc_text` SET `text0_0`='Auto-equip' WHERE (`ID`='70489');
+--
+SET @LOCALIZED_STRINGS_START = 70641;
+SET @LOCALIZED_STRINGS_END = 70644;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70641','Engage behavior','-1'),
+('70642','Delay attack by','-1'),
+('70643','Delay healing by','-1'),
+('70644','s','-1');
+-- Kerra race fix
+UPDATE `creature_template_npcbot_extras` SET `race`='10' WHERE (`entry`='70038');
+--
+DELETE FROM `npc_text` WHERE ID = 70645;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70645','Off-Tank','-1');
+--
+SET @BOT_START = 70001;
+SET @BOT_END = 71000;
+
+SET @U2_MIRROR_IMAGE = 16; -- 0x00000010 - UNIT_FLAG2_MIRROR_IMAGE
+SET @U2_ENABLE_ENEMY_INTERACT = 16384; -- 0x00004000 - UNIT_FLAG2_ALLOW_ENEMY_INTERACT
+
+UPDATE `creature_template` SET `unit_flags2` = `unit_flags2`&~(@U2_MIRROR_IMAGE|@U2_ENABLE_ENEMY_INTERACT) WHERE `entry` BETWEEN @BOT_START AND @BOT_END;
+--
+SET @BOT_START = 70575;
+SET @BOT_END = 70580;
+
+DELETE FROM `creature_template_npcbot_extras` WHERE `entry` BETWEEN @BOT_START AND @BOT_END;
+INSERT INTO `creature_template_npcbot_extras` (`entry`,`class`,`race`) VALUES
+('70575', '18', '1'),
+('70576', '18', '1'),
+('70577', '18', '1'),
+('70578', '18', '1'),
+('70579', '18', '1'),
+('70580', '0', '15');
+/*!50003 DROP PROCEDURE IF EXISTS `sp__generate_necromancer_equips`*/;
+
+DELIMITER ;;
+
+/*!50003 CREATE*/
+/*!50003 PROCEDURE `sp__generate_necromancer_equips`()
+BEGIN
+
+DECLARE CLASS_NECROMANCER INT DEFAULT 18;
+
+DECLARE NPCBOT_ENTRY_BEGIN INT DEFAULT 70575;
+DECLARE NPCBOT_ENTRY_END INT DEFAULT 71000;
+
+DECLARE NPCBOT_ENTRY_PET_NECROSKELETON INT DEFAULT 70580;
+
+DECLARE cur_pos INT DEFAULT 0;
+DECLARE myclass INT;
+DECLARE myrace INT;
+DECLARE item1 INT DEFAULT 0;
+DECLARE item2 INT DEFAULT 0;
+DECLARE item3 INT DEFAULT 0;
+
+DELETE FROM `creature_equip_template` WHERE `CreatureID` BETWEEN NPCBOT_ENTRY_BEGIN AND NPCBOT_ENTRY_END;
+
+SET cur_pos = NPCBOT_ENTRY_BEGIN;
+WHILE cur_pos < NPCBOT_ENTRY_END DO
+ SET myclass = (SELECT `class` FROM `creature_template_npcbot_extras` WHERE `entry` = cur_pos);
+ SET myrace = (SELECT `race` FROM `creature_template_npcbot_extras` WHERE `entry` = cur_pos);
+
+ IF myclass != 0 AND myrace != 0 THEN
+
+ IF myclass = CLASS_NECROMANCER THEN
+ SET item1 = 13937; -- staff
+ END IF;
+
+ INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`itemID1`,`itemID2`,`itemID3`,`VerifiedBuild`) VALUES (cur_pos,1,item1,item2,item3,-1);
+
+ ELSEIF cur_pos = NPCBOT_ENTRY_PET_NECROSKELETON THEN
+ SET item1 = 3935;
+ SET item2 = 15648;
+ SET item3 = 0;
+
+ INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`itemID1`,`itemID2`,`itemID3`,`VerifiedBuild`) VALUES (cur_pos,1,item1,item2,item3,-1);
+
+ END IF;
+
+ SET cur_pos = cur_pos + 1;
+
+END WHILE;
+
+END */;;
+
+DELIMITER ;
+
+CALL `sp__generate_necromancer_equips`();
+
+DROP PROCEDURE IF EXISTS `sp__generate_necromancer_equips`;
+--
+SET @BOT_START = 70575;
+SET @BOT_END = 70580;
+
+DELETE FROM `creature_template` WHERE `entry` BETWEEN @BOT_START AND @BOT_END;
+
+INSERT INTO `creature_template`
+(`entry`,`difficulty_entry_1`,`difficulty_entry_2`,`difficulty_entry_3`,`KillCredit1`,`KillCredit2`,
+`modelid1`,`modelid2`,`modelid3`,`modelid4`,`name`,`subname`,`IconName`,`gossip_menu_id`,`minlevel`,`maxlevel`,`exp`,
+`faction`,`npcflag`,`speed_walk`,`speed_run`,`scale`,`rank`,`dmgschool`,`BaseAttackTime`,`RangeAttackTime`,
+`unit_class`,`unit_flags`,`unit_flags2`,`dynamicflags`,`family`,`type`,`type_flags`,`lootid`,
+`pickpocketloot`,`skinloot`,`PetSpellDataId`,`VehicleId`,`mingold`,`maxgold`,`AIName`,`MovementType`,
+`HoverHeight`,`HealthModifier`,`ManaModifier`,`ArmorModifier`,`RacialLeader`,`movementId`,`RegenHealth`,
+`mechanic_immune_mask`,`flags_extra`,`ScriptName`,`VerifiedBuild`)
+VALUES
+('70575','0','0','0','0','0','23277','0','0','0','Prakar','Necromancer Bot','','0','82','82','2','35','1','1.1','1.1','1','1','0','1800','1800','9','0','32','0','0','7','4096','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','necromancer_bot','-1'),
+('70576','0','0','0','0','0','23277','0','0','0','Rothik','Necromancer Bot','','0','82','82','2','35','1','1.1','1.1','1','1','0','1800','1800','9','0','32','0','0','7','4096','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','necromancer_bot','-1'),
+('70577','0','0','0','0','0','23277','0','0','0','Hexir','Necromancer Bot','','0','82','82','2','35','1','1.1','1.1','1','1','0','1800','1800','9','0','32','0','0','7','4096','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','necromancer_bot','-1'),
+('70578','0','0','0','0','0','23277','0','0','0','Fikhar','Necromancer Bot','','0','82','82','2','35','1','1.1','1.1','1','1','0','1800','1800','9','0','32','0','0','7','4096','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','necromancer_bot','-1'),
+('70579','0','0','0','0','0','23277','0','0','0','Drothum','Necromancer Bot','','0','82','82','2','35','1','1.1','1.1','1','1','0','1800','1800','9','0','32','0','0','7','4096','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','68157552','necromancer_bot','-1'),
+('70580','0','0','0','0','0','200','0','0','0','Skeleton',NULL,'','0','82','82','2','35','0','1.2','1.3','1.1','0','0','2000','2000','1','0','0','0','0','6','4096','0','0','0','0','0','0','0','','0','1','1','1','1','0','0','0','0','135266400','necromancer_pet_bot','-1');
+--
+SET @LOCALIZED_STRINGS_START = 70107;
+SET @LOCALIZED_STRINGS_END = 70107;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70107','|cff9900ccNecromancer|r$b|cffdd6600-=Warcraft III / Diablo II tribute=-|r$B$BSpell damage taken reduced by 20%, partially immune to control effects, cloth armor, deals spellshadow damage, no physical attack, spell power bonus: 100% intellect. Main attribute: Intellect.$B$BRaise Dead. Raises 2 Skeletons from a corpse (maximum 6 Skeletons, 65 seconds duration, only works on humanoids, beasts and dragonkin).$B$BUnholy Frenzy. Increases target\'s melee attack speed by 75%, but constantly drains health. Lasts 45 seconds. Cannot be cancelled. Unlocked at level 30.$B$BCorpse Explosion. Causes a corpse to explode, dealing damage equal to 35% to 75% of dead unit\'s maximum health (depends on Necromancer\'s level) to all surrounding enemies. This damage generates no threat. Unlocked at level 40.$B$BCripple. Reduces target\'s movement speed, melee attack speed and total strength by 50% for 60 seconds. Unlocked at level 50.','-1');
+
+SET @LOCALIZED_STRINGS_START = 70646;
+SET @LOCALIZED_STRINGS_END = 70647;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70646','Necromancers','-1'),
+('70647','Necromancer','-1');
+--
+
+SET @LOCALIZED_STRINGS_START = 70648;
+SET @LOCALIZED_STRINGS_END = 70650;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70648','Attack angle','-1'),
+('70649','Normal','-1'),
+('70650','Avoid frontal AOE','-1');
+-- Maldryn race fix
+UPDATE `creature_template_npcbot_extras` SET `race`='4' WHERE (`entry`='70413');
+--
+
+UPDATE `npc_text` SET `text0_0`='|cff9900ccObsidian Destroyer|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"An obsidian winged monstrocity with insatiable hunger for magic\".$B$BHigh armor, very high resistances, partially immune to magic, loses mana over time and doesn\'t benefit from passive mana regeneration effects, mail/plate armor, dual-wielding wands, deals spellshadow damage, no physical attack, cannot attack enemies not in front while moving, spell power bonus: 50% attack power + 200% intellect + wands damage.$B$BDevour Magic. Dispels up to 2 magic effects from enemies, up to 2 magic effects and up to 2 curses from allies and damaging summoned units in 20 yards area. Every dispelled effect restores 20% mana and 5% health, 7 seconds cooldown.$B$BShadow Blast. Empowered attack that deals increased splash damage.$B$BDrain Mana. Drains all mana (limited by caster\'s mana pool) from a random friendly unit.$B$BReplenish Mana. Energizes surrounding party and raid members within 25 yards for 3% of their maximum mana nullifying caster\'s mana, 3 seconds cooldown.$B$BRegenerating Aura. Heals surrounding party and raid members within 25 yards for 3% of their maximum health nullifying caster\'s mana, 3 seconds cooldown.$B$BShadow Armor (passive). Restores mana equal to a percentage of damage taken.$B$B' WHERE (`ID`='70102');
+--
+SET @BOT_START = 70581;
+SET @BOT_END = 70585;
+
+DELETE FROM `creature_template_npcbot_extras` WHERE `entry` BETWEEN @BOT_START AND @BOT_END;
+INSERT INTO `creature_template_npcbot_extras` (`entry`,`class`,`race`) VALUES
+('70581', '19', '13'),
+('70582', '19', '13'),
+('70583', '19', '13'),
+('70584', '19', '13'),
+('70585', '19', '13');
+/*!50003 DROP PROCEDURE IF EXISTS `sp__generate_seawitch_equips`*/;
+
+DELIMITER ;;
+
+/*!50003 CREATE*/
+/*!50003 PROCEDURE `sp__generate_seawitch_equips`()
+BEGIN
+
+DECLARE CLASS_SEA_WITCH INT DEFAULT 19;
+
+DECLARE NPCBOT_ENTRY_BEGIN INT DEFAULT 70581;
+DECLARE NPCBOT_ENTRY_END INT DEFAULT 70585;
+
+DECLARE cur_pos INT DEFAULT 0;
+DECLARE myclass INT;
+DECLARE myrace INT;
+DECLARE item1 INT DEFAULT 0;
+DECLARE item2 INT DEFAULT 0;
+DECLARE item3 INT DEFAULT 0;
+
+DELETE FROM `creature_equip_template` WHERE `CreatureID` BETWEEN NPCBOT_ENTRY_BEGIN AND NPCBOT_ENTRY_END;
+
+SET cur_pos = NPCBOT_ENTRY_BEGIN;
+WHILE cur_pos <= NPCBOT_ENTRY_END DO
+ SET myclass = (SELECT `class` FROM `creature_template_npcbot_extras` WHERE `entry` = cur_pos);
+ SET myrace = (SELECT `race` FROM `creature_template_npcbot_extras` WHERE `entry` = cur_pos);
+
+ IF myclass != 0 AND myrace != 0 THEN
+
+ IF myclass = CLASS_SEA_WITCH THEN
+ SET item1 = 20852; -- dagger
+ SET item2 = 20852; -- dagger
+ SET item3 = 17069; -- bow
+ END IF;
+
+ INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`itemID1`,`itemID2`,`itemID3`,`VerifiedBuild`) VALUES (cur_pos,1,item1,item2,item3,-1);
+
+ END IF;
+
+ SET cur_pos = cur_pos + 1;
+
+END WHILE;
+
+END */;;
+
+DELIMITER ;
+
+CALL `sp__generate_seawitch_equips`();
+
+DROP PROCEDURE IF EXISTS `sp__generate_seawitch_equips`;
+--
+SET @BOT_START = 70581;
+SET @BOT_END = 70586;
+
+DELETE FROM `creature_template` WHERE `entry` BETWEEN @BOT_START AND @BOT_END;
+
+INSERT INTO `creature_template`
+(`entry`,`difficulty_entry_1`,`difficulty_entry_2`,`difficulty_entry_3`,`KillCredit1`,`KillCredit2`,
+`modelid1`,`modelid2`,`modelid3`,`modelid4`,`name`,`subname`,`IconName`,`gossip_menu_id`,`minlevel`,`maxlevel`,`exp`,
+`faction`,`npcflag`,`speed_walk`,`speed_run`,`scale`,`rank`,`dmgschool`,`BaseAttackTime`,`RangeAttackTime`,
+`BaseVariance`,`RangeVariance`,`unit_class`,`unit_flags`,`unit_flags2`,`dynamicflags`,`family`,`type`,`type_flags`,`lootid`,
+`pickpocketloot`,`skinloot`,`PetSpellDataId`,`VehicleId`,`mingold`,`maxgold`,`AIName`,`MovementType`,
+`HoverHeight`,`HealthModifier`,`ManaModifier`,`ArmorModifier`,`DamageModifier`,`ExperienceModifier`,`RacialLeader`,`movementId`,`RegenHealth`,
+`mechanic_immune_mask`,`spell_school_immune_mask`,`flags_extra`,`ScriptName`,`VerifiedBuild`)
+VALUES
+('70581','0','0','0','0','0','20748','0','0','0','Kondra','Sea Witch Bot','','0','83','83','2','35','1','1.05','1.05','0.5','2','0','1900','1900','1','1','8','0','32','0','0','7','4096','0','0','0','0','0','0','0','','0','1','1','1','1','1','1','0','0','0','0','0','68157552','sea_witch_bot','-1'),
+('70582','0','0','0','0','0','20748','0','0','0','Serpentra','Sea Witch Bot','','0','83','83','2','35','1','1.05','1.05','0.5','2','0','1900','1900','1','1','8','0','32','0','0','7','4096','0','0','0','0','0','0','0','','0','1','1','1','1','1','1','0','0','0','0','0','68157552','sea_witch_bot','-1'),
+('70583','0','0','0','0','0','20748','0','0','0','Serena','Sea Witch Bot','','0','83','83','2','35','1','1.05','1.05','0.5','2','0','1900','1900','1','1','8','0','32','0','0','7','4096','0','0','0','0','0','0','0','','0','1','1','1','1','1','1','0','0','0','0','0','68157552','sea_witch_bot','-1'),
+('70584','0','0','0','0','0','20748','0','0','0','Asprah','Sea Witch Bot','','0','83','83','2','35','1','1.05','1.05','0.5','2','0','1900','1900','1','1','8','0','32','0','0','7','4096','0','0','0','0','0','0','0','','0','1','1','1','1','1','1','0','0','0','0','0','68157552','sea_witch_bot','-1'),
+('70585','0','0','0','0','0','20748','0','0','0','Charib\'dishal','Sea Witch Bot','','0','83','83','2','35','1','1.05','1.05','0.5','2','0','1900','1900','1','1','8','0','32','0','0','7','4096','0','0','0','0','0','0','0','','0','1','1','1','1','1','1','0','0','0','0','0','68157552','sea_witch_bot','-1'),
+('70586','0','0','0','0','0','20211','0','0','0','Tornado','','','0','83','83','2','35','0','0.9','0.9','3','1','0','2000','2000','1','1','1','33554432','32768','0','0','4','33554432','0','0','0','0','0','0','0','','0','1','1','1','1','1','1','0','0','0','0','0','671096832','sea_witch_pet_bot','-1');
+--
+SET @LOCALIZED_STRINGS_START = 70010;
+SET @LOCALIZED_STRINGS_END = 70011;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70010','$B$BS-s-s-spare the words, mortal...','-1'),
+('70011','Did I mess-s-s-s up my hair again? $B...No, I didn\'t. Then what is it?','-1');
+
+SET @LOCALIZED_STRINGS_START = 70108;
+SET @LOCALIZED_STRINGS_END = 70108;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70108','|cff0000ddSea Witch|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"A vicious scaly denizen of ocean often associated with the coming of prodigious storms".$B$BSpell damage taken reduced by 30%, partially immune to control effects, cloth armor, deals physical/spellfrost/spellstorm damage, attack power bonus: agility x2, spell power bonus: 200% intellect. Main attribute: Intellect.$B$BForked Lightning. Calls forth a cone of lightning to damage enemies. Hits from 2 to all targets (depending on Sea Witch\'s level), stunning them for 2 seconds. This damage generates no threat.$B$BFrost Arrows. Imbues arrow with spellfrost for extra damage, slowing target\'s movement, attack and casting speed by 30% to 70% (depending on Sea Witch\'s level).$B$BMana Shield. Creates a shield that absorbs 100% incoming (non-mitigated) damage by using Sea Witch\'s mana. Absorbs 2 to 10 damage per point of mana (depending on Sea Witch\'s level).$B$BTornado. Summons a fierce tornado that damages and slows nearby enemy units, sometimes incapacitating them completely. Tornado grows over time oudoors, increasing damage dealt and area of effect, but shrinks indoors, dissipating quickly. Unlocked at level 60.$B$BNaga (Passive). Swim speed increased by 200%, damage and dodge chance are greatly increased while in water.','-1');
+
+SET @LOCALIZED_STRINGS_START = 70651;
+SET @LOCALIZED_STRINGS_END = 70655;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70651','NIY','-1'),
+('70652','Are you sure this is gonna work? It\'s better be the best water in the world...','-1'),
+('70653','Seems like you could really use a drink of fresh water.','-1'),
+('70654','Sea Witches','-1'),
+('70655','Sea Witch','-1');
+--
+DELETE FROM `command` WHERE `name` LIKE 'npcbot %';
+INSERT INTO `command` (`name`) VALUES
+('npcbot add'),
+('npcbot command'),
+('npcbot command follow'),
+('npcbot command standstill'),
+('npcbot command stopfully'),
+('npcbot delete'),
+('npcbot distance'),
+('npcbot distance attack'),
+('npcbot distance attack long'),
+('npcbot distance attack short'),
+('npcbot dump'),
+('npcbot dump load'),
+('npcbot dump write'),
+('npcbot hide'),
+('npcbot info'),
+('npcbot kill'),
+('npcbot lookup'),
+('npcbot move'),
+('npcbot order'),
+('npcbot order cast'),
+('npcbot recall'),
+('npcbot recall teleport'),
+('npcbot reloadconfig'),
+('npcbot remove'),
+('npcbot revive'),
+('npcbot set'),
+('npcbot set faction'),
+('npcbot set owner'),
+('npcbot set spec'),
+('npcbot show'),
+('npcbot spawn'),
+('npcbot spawned'),
+('npcbot suicide'),
+('npcbot unhide'),
+('npcbot vehicle'),
+('npcbot vehicle eject');
+--
+SET @LOCALIZED_STRINGS_START = 70108;
+SET @LOCALIZED_STRINGS_END = 70108;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70108','|cff0000ddSea Witch|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"A vicious scaly denizen of ocean often associated with the coming of prodigious storms".$B$BSpell damage taken reduced by 30%, partially immune to control effects, cloth armor, deals physical/spellfrost/spellstorm damage, attack power bonus: agility x2, spell power bonus: 200% intellect. Main attribute: Intellect.$B$BForked Lightning. Calls forth a cone of lightning to damage enemies. Hits from 2 to all targets (depending on Sea Witch\'s level), stunning them for 2 seconds. This damage generates no threat.$B$BFrost Arrows. Imbues arrow with spellfrost for extra damage, slowing target\'s movement, attack and casting speed by 30% to 70% (depending on Sea Witch\'s level).$B$BMana Shield. Creates a shield that absorbs 100% incoming (non-mitigated) damage by using Sea Witch\'s mana. Effect ranges from 1 damage per 10 mana to 10 damage per 1 mana (depending on Sea Witch\'s level).$B$BTornado. Summons a fierce tornado that damages and slows nearby enemy units, sometimes incapacitating them completely. Tornado grows over time oudoors, increasing damage dealt and area of effect, but shrinks indoors, dissipating quickly. Unlocked at level 60.$B$BNaga (Passive). Swim speed increased by 200%, damage and dodge chance are greatly increased while in water.','-1');
+--
+SET @LOCALIZED_STRINGS_START = 70656;
+SET @LOCALIZED_STRINGS_END = 70657;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70656','Mana per damage','-1'),
+('70657','Damage per mana','-1');
+--
+DELETE FROM `command` WHERE `name`='npcbot command walk';
+INSERT INTO `command` (`name`) VALUES
+('npcbot command walk');
+--
+DELETE FROM `command` WHERE `name`='npcbot createnew';
+INSERT INTO `command` (`name`) VALUES
+('npcbot createnew');
+--
+UPDATE `npc_text` SET `text0_0`='|cff0000ddArchmage|r$b|cffdd6600-=Warcraft III tribute=-|r$B$BSpell damage taken reduced by 35%, partially immune to control effects, cloth armor, deals spellsfire/spellfrost damage, no physical attack, spell power bonus: 100% intellect. Main attribute: Intellect.$B$BBlizzard. Your typical blizzard, just a little more powerful, 6 seconds cooldown.$B$BSummon Water Elemental. Summons a water elemental to attack archmage\'s enemies for 1 min, 20 seconds cooldown.$B$BBrilliance Aura. Increases maximum mana by 10% and greatly increases mana regeneration of party and raid members within 40 yards.$B$BMass Teleport. NIY.$B$B' WHERE (`ID`='70103');
+UPDATE `npc_text` SET `text0_0`='|cff9900ccDreadlord|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"Incredibly powerful demon who wields power of darkness and mental domination\".$B$BHigh armor, high resistances, partially immune to control effects, damage taken speeds up spells recharge, plate armor, deals melee/spellshadow damage, bonus damage against incapacitated targets, spell power bonus: 200% strength. Main attribute: Strength.$B$BCarrion Swarm. Sends a horde of bats combined with chaotic magic to damage enemies in a very large frontal cone, cannot crit, 10 seconds cooldown.$B$BSleep. Puts the enemy target to sleep for 60 seconds and allows next physical attack on that target to bypass armor, direct damage caused will awaken the target, 6 seconds cooldown.$B$BVampiric Aura. Increases physical critical damage by 5% and heals party and raid members within 40 yards for a percentage (100% for Dreadlord and 25% for everyone else) of damage done by melee physical attacks and Carrion Swarm, no threat.$B$BSummon Infernal Servant. Calls an infernal down from the sky dealing damage and stunning enemy units, infernal is very resistant to magic and lasts 180 seconds, 180 seconds cooldown.$B$B' WHERE (`ID`='70104');
+UPDATE `npc_text` SET `text0_0`='|cff0000ddSpell Breaker|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"An elven warrior trained to disrupt and contort magical energies\".$B$BSpell damage taken reduced by 75%, partially immune to control effects, armor penalty -30%, mail/plate armor, deals melee/arcane damage, spell power bonus: 200% strength. Main attribute: Strength.$B$BSteal Magic (Spellsteal). Steals a benefical spell from an enemy and applies it to a nearby ally or removes a negative spell from an ally and applies it to a nearby enemy, affects magic and curse effects, 2 seconds cooldown.$B$BFeedback (passive). Successful melee attacks burn target\'s mana equal to damage caused (increased by spellpower) dealing arcane damage. If target\'s mana is depleted, Spell Breaker\'s melee attacks will do triple damage with increased critical strike chance. If target does not have mana, Spell Breaker will gain mana equal to 25% of damage dealt.$B$B' WHERE (`ID`='70105');
+UPDATE `npc_text` SET `text0_0`='|cff9900ccDark Ranger|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"A former ranger of Quel\'thalas forcibly raised from the dead\".$B$BSpell damage taken reduced by 35%, undead, partially immune to control effects, leather/cloth armor, deals physical/spellshadow damage, stick to shadows and generates no threat, spell power bonus: 50% intellect. Main attribute: Agility.$B$BSilence. Silences an enemy and up to 4 nearby targets for 8 seconds, 15 seconds cooldown.$B$BBlack Arrow. Fires a cursed arrow dealing 150% weapon damage and additional spellshadow damage over time. If affected target dies from Dark Ranger\'s damage, Dark Minion will spawn from the corpse (maximum 5 Minions, 80 seconds duration, only works on humanoids, beasts and dragonkin). Deals five times more damage if target is under 20% health.$B$BDrain Life. Drains health from an enemy every second for 5 seconds, healing Dark Ranger for 200% of the drained amount.$B$B' WHERE (`ID`='70106');
+UPDATE `npc_text` SET `text0_0`='|cff9900ccNecromancer|r$b|cffdd6600-=Warcraft III / Diablo II tribute=-|r$B$BSpell damage taken reduced by 20%, partially immune to control effects, cloth armor, deals spellshadow damage, no physical attack, spell power bonus: 100% intellect. Main attribute: Intellect.$B$BRaise Dead. Raises 2 Skeletons from a corpse (maximum 6 Skeletons, 65 seconds duration, only works on humanoids, beasts and dragonkin).$B$BUnholy Frenzy. Increases target\'s melee attack speed by 75%, but constantly drains health. Lasts 45 seconds. Cannot be cancelled. Unlocked at level 30.$B$BCorpse Explosion. Causes a corpse to explode, dealing damage equal to 35% to 75% of dead unit\'s maximum health (depends on Necromancer\'s level) to all surrounding enemies. This damage generates no threat. Unlocked at level 40.$B$BCripple. Reduces target\'s movement speed, melee attack speed and total strength by 50% for 60 seconds. Unlocked at level 50.$B$B' WHERE (`ID`='70107');
+UPDATE `npc_text` SET `text0_0`='|cff0000ddSea Witch|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B\"A vicious scaly denizen of ocean often associated with the coming of prodigious storms\".$B$BSpell damage taken reduced by 30%, partially immune to control effects, cloth armor, deals physical/spellfrost/spellstorm damage, attack power bonus: agility x2, spell power bonus: 200% intellect. Main attribute: Intellect.$B$BForked Lightning. Calls forth a cone of lightning to damage enemies. Hits from 2 to all targets (depending on Sea Witch\'s level), stunning them for 2 seconds. This damage generates no threat.$B$BFrost Arrows. Imbues arrow with spellfrost for extra damage, slowing target\'s movement, attack and casting speed by 30% to 70% (depending on Sea Witch\'s level).$B$BMana Shield. Creates a shield that absorbs 100% incoming (non-mitigated) damage by using Sea Witch\'s mana. Effect ranges from 1 damage per 10 mana to 10 damage per 1 mana (depending on Sea Witch\'s level).$B$BTornado. Summons a fierce tornado that damages and slows nearby enemy units, sometimes incapacitating them completely. Tornado grows over time outdoors, increasing damage dealt and area of effect, but shrinks indoors, dissipating quickly. Unlocked at level 60.$B$BNaga (Passive). Swim speed, damage and dodge chance are greatly increased while in water.$B$B' WHERE (`ID`='70108');
+--
+SET @LOCALIZED_STRINGS_START = 70658;
+SET @LOCALIZED_STRINGS_END = 70658;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`) VALUES
+('70658','Transmogrification...');
+--
+DELETE FROM `command` WHERE `name`='npcbot sendto';
+INSERT INTO `command` (`name`) VALUES
+('npcbot sendto');
+--
+SET @BOT_START = 70659;
+SET @BOT_END = 70659;
+
+DELETE FROM `npc_text` WHERE `ID` BETWEEN @BOT_START AND @BOT_END AND `ID` != 70100;
+
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+(@BOT_START+0, "DISABLE combat positioning", -1);
+--
+DELETE FROM `command` WHERE `name` IN ('npcbot list spawned','npcbot list spawned free','npcbot delete free','npcbot delete id');
+INSERT INTO `command` (`name`) VALUES
+('npcbot list spawned'),
+('npcbot list spawned free'),
+('npcbot delete free'),
+('npcbot delete id');
+--
+DELETE FROM `command` WHERE `name` = 'npcbot spawned';
+--
+DELETE FROM `command` WHERE `name` IN ('npcbot command nogossip','npcbot command rebind','npcbot command unbind');
+INSERT INTO `command` (`name`) VALUES
+('npcbot command nogossip'),
+('npcbot command rebind'),
+('npcbot command unbind');
+--
+SET @BOT_START = 70660;
+SET @BOT_END = 70660;
+
+DELETE FROM `npc_text` WHERE `ID` BETWEEN @BOT_START AND @BOT_END;
+
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+(@BOT_START+0, "Priority target", -1);
+--
+DELETE FROM `command` WHERE `name` = 'npcbot sendto last';
+INSERT INTO `command` (`name`) VALUES
+('npcbot sendto last');
+--
+DELETE FROM `command` WHERE `name` IN ('npcbot sendto point','npcbot sendto point set');
+INSERT INTO `command` (`name`) VALUES
+('npcbot sendto point'),
+('npcbot sendto point set');
+--
+DELETE FROM `command` WHERE `name` = 'npcbot go';
+INSERT INTO `command` (`name`) VALUES
+('npcbot go');
+--
+DELETE FROM `command` WHERE `name` = 'npcbot recall spawns';
+INSERT INTO `command` (`name`) VALUES
+('npcbot recall spawns');
+--
+DROP TABLE IF EXISTS `creature_template_npcbot_wander_nodes`;
+CREATE TABLE `creature_template_npcbot_wander_nodes` (
+ `id` int(10) unsigned NOT NULL,
+ `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'RENAME_ME',
+ `mapid` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `zoneid` int(10) unsigned NOT NULL DEFAULT '0',
+ `areaid` int(10) unsigned NOT NULL DEFAULT '0',
+ `minlevel` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `maxlevel` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `flags` int(10) unsigned NOT NULL DEFAULT '0',
+ `x` float NOT NULL DEFAULT '0',
+ `y` float NOT NULL DEFAULT '0',
+ `z` float NOT NULL DEFAULT '0',
+ `o` float NOT NULL DEFAULT '0',
+ `links` mediumtext COLLATE utf8mb4_unicode_ci,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bot Wander Map';
+--
+DROP TABLE IF EXISTS `creature_wander_nodes`;
+--
+DROP TABLE IF EXISTS `creature_template_npcbot_wander_nodes`;
+
+CREATE TABLE `creature_template_npcbot_wander_nodes` (
+ `id` int(10) unsigned NOT NULL,
+ `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'RENAME_ME',
+ `mapid` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `zoneid` int(10) unsigned NOT NULL DEFAULT '0',
+ `areaid` int(10) unsigned NOT NULL DEFAULT '0',
+ `minlevel` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `maxlevel` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `flags` int(10) unsigned NOT NULL DEFAULT '0',
+ `x` float NOT NULL DEFAULT '0',
+ `y` float NOT NULL DEFAULT '0',
+ `z` float NOT NULL DEFAULT '0',
+ `o` float NOT NULL DEFAULT '0',
+ `links` mediumtext COLLATE utf8mb4_unicode_ci,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bot Wander Map';
+
+INSERT INTO `creature_template_npcbot_wander_nodes`(`id`,`name`,`mapid`,`zoneid`,`areaid`,`minlevel`,`maxlevel`,`flags`,`x`,`y`,`z`,`o`,`links`) VALUES
+(1,'Anvilmar',0,1,132,1,5,2,-6077.84,384.826,393.598,4.63263,'542:0 '),
+(2,'Brill',0,85,159,1,10,5,2249.85,278.414,34.1142,5.11546,'18:0 277:0 278:0 279:0 281:0 '),
+(3,'Darkshire',0,10,42,18,30,3,-10560.6,-1182.34,27.9637,3.1803,'783:0 784:0 787:0 788:0 789:0 '),
+(4,'Deathknell',0,85,154,1,10,5,1879.83,1588.2,90.1725,5.25172,'295:0 296:0 '),
+(5,'Dun Algaz',0,11,836,18,30,0,-4245.13,-2356.42,204.034,3.9477,'483:0 '),
+(6,'Dun Modr',0,11,205,18,30,0,-2610.26,-2350.56,81.5918,1.1263,'444:0 '),
+(7,'Goldshire',0,12,87,1,10,3,-9480.09,63.5218,56.1755,3.4173,'88:0 71:0 16:0 42:0 72:0 710:0 709:0 714:0 717:0 '),
+(8,'Ironforge',0,1,809,1,10,2,-5023.64,-831.425,495.319,5.37056,'559:0 560:0 '),
+(9,'Kharanos',0,1,131,1,10,3,-5501.22,-472.604,408.453,2.4002,'537:0 545:0 557:0 '),
+(10,'Lakeshire',0,44,69,13,25,3,-9235.12,-2145.54,71.2121,5.71383,'665:0 666:0 '),
+(11,'Menethil Harbor',0,11,150,18,30,3,-3672.7,-828.455,9.89925,3.18444,'476:0 477:0 478:0 '),
+(12,'Moonbrook',0,40,20,8,20,2,-11017.1,1510.17,43.1667,2.58627,'737:0 738:0 736:0 747:0 '),
+(13,'Northshire Abbey',0,12,9,1,10,3,-8900.51,-116.199,81.8499,0.369434,'710:0 70:0 73:0 '),
+(14,'Raven Hill',0,10,94,18,30,0,-10805.5,291.025,30.9282,3.92422,'751:0 753:0 754:0 755:0 766:0 '),
+(15,'Sentinel Hill',0,40,108,8,20,3,-10509.5,1047.74,60.519,5.20046,'741:0 742:0 745:0 746:0 736:0 750:0 '),
+(16,'Stormwind City',0,12,12,1,10,2,-9153.77,364.057,90.151,5.16709,'42:0 710:0 712:0 7:0 '),
+(17,'The Sepulcher',0,130,228,8,20,5,470.768,1589.82,126.632,5.16292,'305:0 '),
+(18,'Undercity',0,85,153,1,10,5,1885.94,236.924,58.0313,3.1016,'2:0 285:0 '),
+(19,'Thelsamar',0,38,144,8,20,3,-5334.7,-3015.26,324.2,1.73643,'503:0 504:0 '),
+(20,'Southshore',0,267,271,18,30,3,-803.031,-531.727,15.9656,1.39359,'362:0 363:0 376:0 384:0 385:0 356:0 '),
+(21,'Tarren Mill',0,267,272,18,30,5,-27.0354,-900.562,55.9602,4.57301,'378:0 380:0 379:0 384:0 '),
+(22,'Refuge Pointe',0,45,320,28,40,3,-1280.81,-2466.89,34.7175,5.16384,'78:0 416:0 419:0 '),
+(23,'Hammerfall',0,45,321,28,40,5,-955.494,-3540.82,56.7101,3.23882,'438:0 '),
+(24,'Kargath',0,3,340,33,45,5,-6625,-2152.82,249.141,4.5492,'594:0 598:0 '),
+(25,'Angor Fortress',0,3,338,33,45,0,-6392.65,-3158,299.765,4.68826,'608:0 620:0 '),
+(26,'Bloodhoof Village',1,215,222,1,10,0,-2323.92,-394.981,-9.12757,0.10888,''),
+(27,'Camp Narache',1,215,221,1,10,0,-2906.49,-253.607,52.941,5.73627,''),
+(28,'Razor Hill',1,14,362,1,10,0,312.659,-4745.52,9.54734,1.10362,'66:0 '),
+(29,'The Den',1,14,363,1,10,0,-604.098,-4202.92,38.7281,1.10189,''),
+(30,'Orgrimmar',1,14,14,1,10,0,1381.77,-4371.16,26.023,2.19128,''),
+(31,'Senjin Village',1,14,367,1,10,0,-819.492,-4918.24,18.3507,2.67153,''),
+(32,'The Crossroads',1,17,380,8,20,0,-455.9,-2652.15,95.5864,4.41391,''),
+(33,'Aldrassil',1,141,256,1,10,0,10462.7,805.993,1312.66,0.945149,'61:0 62:0 63:0 65:0 '),
+(34,'Dolanaar',1,141,186,1,10,0,9787.99,949.897,1306.73,0.734179,'63:0 '),
+(35,'Ratchet',1,17,392,8,20,0,-951.364,-3680.07,8.04046,0.798474,''),
+(36,'Booty Bay',0,33,35,33,45,0,-14308.8,440.139,25.5878,0.828079,'959:0 960:0 961:0 '),
+(37,'Gromgol Base Camp',0,33,117,33,45,5,-12416.5,185.125,1.83125,6.17782,'904:0 900:0 908:0 '),
+(38,'Astranaar',1,331,415,18,30,0,2720.43,-382.391,107.089,1.24727,''),
+(39,'Stonetalon Peak',1,406,467,13,25,0,2658.78,1449.71,226.135,5.85107,'155:0 '),
+(40,'Thalanaar',1,357,489,38,50,0,-4510.03,-779.474,-41.5367,0.513916,''),
+(41,'Freewind Post',1,400,484,23,35,0,-5454.07,-2445.5,90.1122,6.10667,'119:0 120:0 '),
+(42,'Mirror Lake',0,12,92,1,10,2,-9389.26,458.427,38.2852,2.4529,'72:0 16:0 88:0 7:0 '),
+(44,'Drywhisker Gorge',0,45,318,28,40,0,-1014.22,-3827.39,145.41,2.59534,'440:0 '),
+(45,'Sun Rock Retreat',1,406,460,13,25,0,936.308,910.974,104.44,0.864181,'151:0 '),
+(46,'Temple of Zin-Malor',1,16,1223,43,54,0,3549.15,-5359.12,188.348,1.22969,''),
+(47,'Hetaeras Clutch',1,16,1222,43,54,0,3556.64,-6232.79,44.0085,4.90175,'141:0 195:0 '),
+(48,'Uthers Tomb',0,28,196,48,56,0,1021.5,-1809.43,77.1448,3.5376,'271:0 '),
+(49,'Scholomance',0,139,2057,53,60,0,1262.19,-2579.41,123.746,4.56181,''),
+(50,'Whitereach Post',1,400,2237,23,35,0,-4917.35,-1375.5,-52.612,3.05417,''),
+(51,'Stonard',0,8,75,33,45,5,-10445,-3261.11,20.179,5.57373,'828:0 829:0 830:0 '),
+(52,'Gadgetzan',1,440,976,38,50,0,-7139.15,-3752.11,8.53951,2.41012,''),
+(53,'Camp Mojache',1,357,1099,38,50,0,-4394.98,215.611,25.4138,0.668987,'136:0 137:0 '),
+(54,'Theramore Isle',1,15,513,33,45,0,-3680.17,-4388.51,10.5544,2.126,'109:0 '),
+(55,'Aerie Peak',0,47,348,38,50,0,170.251,-2085.14,112.706,5.73674,'82:0 386:0 387:0 388:0 '),
+(56,'Everlook',1,618,2255,53,60,0,6723.46,-4662.5,720.986,4.0489,'143:0 147:0 '),
+(57,'Shadowprey Village',1,405,2408,28,40,0,-1657.85,3097.92,30.5002,4.53043,'127:0 '),
+(58,'Feathermoon Stronghold',1,357,1116,38,50,0,-4434.99,3276.74,11.7782,1.86721,''),
+(59,'Auberdine',1,148,442,8,20,0,6439.33,411.951,10.8632,4.98592,''),
+(60,'Nijels Point',1,405,608,28,40,0,202.521,1308.24,190.237,3.56577,''),
+(61,'Aldrassil',1,141,256,1,10,0,10479.6,812.281,1322.74,1.7975,'33:0 62:0 63:0 65:0 '),
+(62,'Shadowthread Cave',1,141,257,1,10,0,10756.2,921.301,1338.56,2.9431,'33:0 61:0 65:0 '),
+(63,'Fel Rock',1,141,258,1,10,0,10050.6,1031.2,1329.95,1.85839,'33:0 34:0 61:0 65:0 '),
+(64,'Banethil Barrow Den',1,141,736,1,10,0,9864.17,1557.41,1328.3,4.60699,''),
+(65,'The Cleft',1,141,263,1,10,0,10316.4,1200.62,1458.08,3.62911,'33:0 61:0 62:0 63:0 '),
+(66,'Razorwind Canyon',1,14,410,1,10,0,636.963,-4534.04,8.82068,1.74237,'28:0 67:0 '),
+(67,'Torkren Farm',1,14,2979,1,10,0,726.297,-4242.41,17.2915,1.86203,'66:0 '),
+(69,'Ironbands Compound',0,1,716,1,10,2,-5858.7,-2004.1,401.648,0.478922,'523:0 528:0 '),
+(70,'Echo Ridge Mine',0,12,34,1,10,2,-8691.38,-113.152,89.09,5.86134,'73:0 13:0 711:0 '),
+(71,'Maclure Vineyards',0,12,64,1,10,2,-9948.39,69.1568,33.3005,5.49869,'72:0 7:0 714:0 716:0 '),
+(72,'Stonefield Farm',0,12,63,1,10,2,-9901.14,378.19,35.2801,5.75613,'71:0 7:0 42:0 88:0 713:0 714:0 717:0 '),
+(73,'Northshire Vineyards',0,12,59,1,10,2,-9067.35,-333.965,73.4519,1.09469,'70:0 13:0 '),
+(74,'Tower of Ilgalar',0,44,96,18,25,0,-9282.21,-3330.43,115.604,1.41034,'683:0 685:0 686:0 '),
+(75,'Renders Rock',0,44,998,13,25,0,-8677.89,-2302.91,155.917,1.18325,'661:0 662:0 '),
+(76,'Spirit Den',0,33,1742,33,45,0,-13751.4,-18.3165,44.0002,0.851192,'964:0 '),
+(77,'Rethban Caverns',0,44,98,13,25,2,-8976.38,-2016.83,136.063,1.26142,'670:0 671:0 '),
+(78,'Boulderfist Outpost',0,45,1858,28,40,0,-1183.46,-2180.67,55.5524,1.6849,'22:0 415:0 416:0 419:0 '),
+(79,'Groshgok Compound',0,41,2937,50,60,0,-11094.7,-2311.06,117.13,4.77931,'800:0 803:0 804:0 '),
+(80,'Stagalbog Cave',0,8,1817,33,45,0,-10775.6,-3747.85,22.347,3.74768,'186:0 825:0 824:0 826:0 828:0 832:0 '),
+(81,'The Tower of Arathor',0,45,324,28,40,0,-1760.68,-1537.05,64.8696,2.02383,'425:0 '),
+(82,'Wildhammer Keep',0,47,349,38,50,0,257.234,-2208.21,142.103,6.19816,'55:0 387:0 388:0 '),
+(83,'Night Webs Hollow',0,85,155,1,10,4,2053.22,1802.16,99.8006,1.83635,'295:0 '),
+(84,'Terrorweb Tunnel',0,139,2626,53,60,0,3035.33,-2773.9,100.473,5.05065,'215:0 243:0 '),
+(85,'Browman Mill',0,139,2269,53,60,0,2483.98,-5183.79,76.1135,3.20045,'234:0 211:0 '),
+(86,'Uldaman',0,3,1337,33,45,0,-6092.01,-3179.35,255.852,5.9237,'621:0 '),
+(87,'Dustbelch Grotto',0,3,347,33,45,0,-7299.86,-2270.26,244.599,3.07308,'595:0 '),
+(88,'Westbrook Garrison',0,12,120,1,10,2,-9671.96,690.134,36.5414,5.31336,'72:0 42:0 713:0 7:0 717:0 '),
+(89,'Jasperlode Mine',0,12,54,1,10,0,-9194.18,-610.205,60.7892,0.426731,'701:0 702:0 707:0 708:0 '),
+(91,'Algaz Station',0,38,925,8,20,0,-4880.26,-2723,328.908,0.873682,'485:0 486:0 487:0 500:0 502:0 '),
+(92,'Grim Batol',0,11,1037,61,70,0,-4130,-3468.16,259.76,0.014411,'454:0 '),
+(93,'Venture Co. Mine',1,215,215,1,10,0,-1501.49,-1036.19,151.717,1.01756,''),
+(94,'Blackwood Den',1,148,455,8,20,0,4619.42,25.6126,69.7834,4.80597,'95:0 '),
+(95,'Wildbend River',1,148,454,8,20,0,5056.04,220.755,22.9081,5.20884,'94:0 '),
+(96,'Cliffspring Falls',1,148,445,8,20,0,6870.57,-662.396,82.9506,0.302464,''),
+(97,'Fray Island',1,17,720,8,20,0,-1668.51,-4329.2,3.26569,0.222455,''),
+(98,'Wailing Caverns',1,17,718,8,20,0,-837.968,-2037,80.467,1.58062,''),
+(99,'Shady Rest Inn',1,15,403,33,45,0,-3723.63,-2535.18,69.5651,1.00004,'103:0 '),
+(100,'Darkmist Cavern',1,15,499,33,45,0,-2829.79,-2722.81,36.7883,2.20851,'102:0 187:0 '),
+(101,'North Point Tower',1,15,504,33,45,0,-2884.79,-3429.99,39.357,3.86048,'102:0 110:0 '),
+(102,'Bluefen',1,15,507,33,45,0,-2685.32,-3087.58,41.4492,4.02905,'100:0 101:0 187:0 '),
+(103,'Lost Point',1,15,506,33,45,0,-3925.5,-2862.15,46.4791,4.55427,'99:0 108:0 '),
+(104,'Tidefury Cove',1,15,517,33,45,0,-4300.98,-4062.71,-10.5964,2.84709,'106:0 '),
+(105,'Stonemaul Ruins',1,15,508,33,45,0,-4346.02,-3321.15,34.2542,6.16796,'106:0 233:0 '),
+(106,'Onyxias Lair',1,15,511,33,45,0,-4698.06,-3720.58,47.1529,0.469848,'104:0 105:0 107:0 '),
+(107,'Emberstrifes Den',1,15,2158,33,45,0,-4987.73,-3832.99,44.1305,3.70876,'106:0 '),
+(108,'Bloodfen Burrow',1,15,498,33,45,0,-4335.04,-2639.53,38.0638,1.30845,'103:0 '),
+(109,'Sentry Point',1,15,503,33,45,0,-3476.59,-4109.08,17.1041,4.05466,'54:0 '),
+(110,'Swamplight Manor',1,15,497,33,45,0,-2949.47,-3893.5,35.0303,1.23141,'101:0 '),
+(111,'Marshals Refuge',1,490,541,46,56,0,-6143.21,-1078.89,-198.367,5.66637,''),
+(112,'Fungal Rock',1,490,542,46,56,0,-6370.15,-1836.52,-260.084,0.958035,''),
+(113,'Wavestrider Beach',1,440,988,38,50,0,-7693.45,-4878.96,0.661957,4.5132,''),
+(114,'Uldum',1,440,989,38,50,0,-9635.41,-2787.2,7.85617,5.44167,''),
+(115,'Darkcloud Pinnacle',1,400,2097,23,35,0,-5086.21,-1919.44,88.1806,6.15461,'116:0 119:0 '),
+(116,'Roguefeather Den',1,400,487,23,35,0,-5466.71,-1636.27,29.0246,3.60035,'115:0 '),
+(117,'Mirage Raceway',1,400,2240,23,35,0,-6239.42,-3973.12,-58.7501,5.06259,'122:0 123:0 '),
+(118,'The Rustmaul Digsite',1,400,479,23,35,0,-6490.61,-3449.15,-58.7821,3.58106,'123:0 '),
+(119,'Splithoof Hold',1,400,1557,23,35,0,-5065.61,-2367.61,-53.6725,4.0206,'41:0 115:0 120:0 '),
+(120,'The Weathered Nook',1,400,2303,23,35,0,-5213.85,-2794.53,-7.83752,2.24538,'41:0 119:0 '),
+(121,'Ironstone Camp',1,400,3037,23,35,0,-5848.05,-3412.38,-51.0548,0.373431,'122:0 '),
+(122,'Weazels Crater',1,400,3038,23,35,0,-5799.94,-3899.53,-96.7429,1.92693,'117:0 121:0 '),
+(123,'Tahonda Ruins',1,400,3039,23,35,0,-6569.91,-3894.97,-58.7495,0.100017,'117:0 118:0 '),
+(124,'Rolands Doom',0,10,2161,24,30,0,-11045.3,-1130.98,38.585,3.65547,'780:0 781:0 '),
+(126,'Bolgans Hole',1,405,600,28,40,0,-2281.95,2499.6,73.7525,5.34105,''),
+(127,'Maraudon',1,405,2100,28,40,0,-1422.62,2918.45,136.147,4.46498,'57:0 '),
+(128,'Ghost Walker Post',1,405,597,28,40,0,-1224.06,1736.67,90.0219,0.112112,'129:0 '),
+(129,'Scrabblescrews Camp',1,405,2617,28,40,0,-1407.87,1493.13,60.8875,4.75641,'128:0 '),
+(130,'Valley of Bones',1,405,2657,28,40,0,-2251.19,1513.55,63.5889,6.25387,''),
+(131,'Rage Scar Hold',1,357,1115,38,50,0,-3842.71,1738.94,142.708,2.30123,''),
+(132,'Ruins of Solarsal',1,357,1117,38,50,0,-4852.91,3616.63,16.4186,4.11504,''),
+(133,'Ravaged Twilight Camp',1,1377,3100,53,60,0,-6206.25,1766.95,17.464,4.2566,''),
+(134,'Twilight Post',1,1377,3098,53,60,0,-6740.04,1636.32,15.2836,4.04162,'189:0 202:0 '),
+(135,'Twilight Outpost',1,1377,3099,53,60,0,-7929.11,1833.28,4.86506,0.733634,''),
+(136,'Woodpaw Hills',1,357,2519,38,50,0,-4915.81,199.275,52.2959,6.13256,'53:0 '),
+(137,'Lariss Pavillion',1,357,2518,38,50,0,-4052.72,81.5525,77.1755,5.22503,'53:0 '),
+(138,'Slither Rock',0,46,2419,48,56,0,-7653.86,-2991.1,135.917,1.62615,'648:0 650:0 652:0 '),
+(139,'Flame Crest',0,46,251,48,56,0,-7486.64,-2184.45,166.505,5.87909,'646:0 '),
+(140,'Shalzarus Lair',1,357,3117,38,50,0,-5492.37,3622.79,1.62975,3.27216,''),
+(141,'Scalebeards Cave',1,16,3140,43,54,0,3705.1,-6043.45,2.50768,0.191079,'47:0 195:0 '),
+(142,'Timbermaw Hold',1,618,618,53,60,0,6900.63,-2298.18,588.52,1.94812,'148:0 '),
+(143,'The Ruins of KelTheril',1,618,2252,53,60,0,6426.76,-4304.99,664.687,3.04093,'56:0 194:0 '),
+(144,'Dun Mandarr',1,618,2248,53,60,0,5718.83,-4507.31,761.083,4.26757,''),
+(145,'Talrendis Point',1,16,3137,43,54,0,2707.72,-3869.25,104.208,5.79411,''),
+(146,'Rethress Sanctum',1,16,3138,43,54,0,2195.67,-6438.33,2.1301,4.39206,''),
+(147,'Moon Horror Den',1,618,3139,53,60,0,7123.02,-4631.57,639.68,2.0052,'56:0 '),
+(148,'Timbermaw Hold',1,361,1769,46,56,0,6817.78,-2097.68,624.839,2.56313,'142:0 '),
+(149,'Irontree Cavern',1,361,1768,46,56,0,6481.87,-1571,438.965,0.859127,''),
+(150,'Bloodvenom Post',1,361,1997,46,56,0,5111.98,-353.403,357.231,5.23802,''),
+(151,'Sishir Canyon',1,406,2541,13,25,0,515.845,624.05,68.1596,5.69462,'45:0 '),
+(152,'Cragpool Lake',1,406,463,13,25,0,1543.57,70.1338,-10.3835,0.632571,''),
+(153,'Windshear Mine',1,406,461,13,25,0,981.949,-358.9,14.3123,3.71479,''),
+(154,'The Talondeep Path',1,406,1277,13,25,0,1531.94,-576.57,67.9212,5.18318,'168:0 '),
+(155,'The Talon Den',1,406,468,13,25,0,2416.89,1792.39,393.641,3.36062,'39:0 '),
+(156,'The Ruins of OrdilAran',1,331,412,18,30,0,3493.89,-119.601,0.714987,2.44963,'157:0 '),
+(157,'Bathrans Haunt',1,331,411,18,30,0,3827.37,-161.305,-0.60768,3.24941,'156:0 '),
+(158,'Zoramgar Outpost',1,331,2897,18,30,0,3362.22,1010.16,3.59814,2.49558,''),
+(159,'Falfarren River',1,331,433,18,30,0,2231.21,-2222.91,94.4116,6.0491,'163:0 175:0 '),
+(160,'Xavian',1,331,429,18,30,0,2936.56,-2822.67,212.731,0.0776333,'161:0 '),
+(161,'Forest Song',1,331,2358,18,30,0,2880.33,-3287.54,156.204,1.1163,'160:0 '),
+(162,'Demon Fall Canyon',1,331,435,18,30,0,1702.45,-3150.99,93.5217,3.37253,'164:0 '),
+(163,'Silverwing Outpost',1,331,2360,18,30,0,1776.64,-2065.15,102.283,2.23373,'159:0 169:0 182:0 '),
+(164,'The DorDanil Barrow Den',1,331,432,18,30,0,1776.23,-2678.36,111.666,5.44343,'162:0 169:0 175:0 '),
+(165,'Silverwind Refuge',1,331,420,18,30,0,2130.27,-1190.25,99.3456,1.77657,'166:0 168:0 '),
+(166,'Greenpaw Village',1,331,2359,18,30,0,2291.29,-1444.96,87.8806,1.08665,'165:0 '),
+(167,'Bloodtooth Camp',1,331,2357,18,30,0,1612.52,-1465.1,157.023,5.78447,'182:0 '),
+(168,'The Talondeep Path',1,406,1277,13,25,0,1930.26,-732.677,114.534,3.7975,'154:0 165:0 '),
+(169,'Warsong Labor Camp',1,331,3177,18,30,0,1575.91,-2463.94,98.549,2.24558,'163:0 164:0 '),
+(170,'Aridens Camp',0,41,2560,50,60,0,-10443.3,-2141.1,90.7796,5.92189,'801:0 '),
+(171,'Deadwind Ravine',0,41,2558,50,60,0,-10607.9,-1904.89,117.201,2.66188,'798:0 799:0 '),
+(172,'Sleeping Gorge',0,41,2938,50,60,0,-10740.7,-1951.45,121.127,3.69664,'800:0 801:0 '),
+(173,'Chillwind Camp',0,28,3197,48,56,1,940.955,-1419.2,66.7723,0.796556,'271:0 272:0 334:0 '),
+(174,'Camp Taurajo',1,17,378,8,20,0,-2352.66,-1921.67,95.7825,1.62324,''),
+(175,'Splintertree Post',1,331,431,18,30,0,2286.41,-2564.67,105.481,4.11999,'159:0 164:0 '),
+(176,'The Swarming Pillar',1,1377,3097,53,60,0,-7066.79,731.852,67.2655,1.04864,'177:0 188:0 189:0 205:0 '),
+(177,'Bones of Grakkarond',1,1377,3257,53,60,0,-7234.61,874.224,0.285286,1.72442,'176:0 188:0 189:0 205:0 '),
+(178,'Woodpaw Den',1,357,2520,38,50,0,-4835.2,863.048,137.048,3.8637,''),
+(179,'Revantusk Village',0,47,3317,38,50,5,-573.459,-4590.51,10.4122,3.48476,'407:0 '),
+(180,'Thorium Point',0,51,1446,43,54,0,-6521.12,-1190.02,309.255,4.39589,'590:0 '),
+(181,'Morshan Base Camp',1,17,1599,8,20,0,1035.13,-2113.34,122.947,5.1989,'182:0 '),
+(182,'Silverwing Grove',1,331,3319,18,30,0,1462.48,-1858.93,123.55,1.74032,'163:0 167:0 181:0 '),
+(183,'The Weeping Cave',0,28,198,48,56,0,2249.61,-2389.63,59.8017,5.27414,'244:0 255:0 256:0 '),
+(184,'Valors Rest',1,1377,3077,53,60,0,-6404.33,-292.647,1.04401,3.06251,'190:0 191:0 '),
+(185,'Yojamba Isle',0,33,3357,33,45,0,-11838,1268.18,1.74176,4.79629,'894:0 887:0 895:0 896:0 '),
+(186,'Misty Reed Post',0,8,1978,33,45,4,-10854.8,-4093.43,21.7429,5.03063,'825:0 80:0 826:0 '),
+(187,'Brackenwall Village',1,15,496,33,45,0,-3132.98,-2880.71,34.718,4.58324,'100:0 102:0 '),
+(188,'Cenarion Hold',1,1377,3425,53,60,0,-6886.15,718.398,42.798,6.10305,'176:0 177:0 189:0 '),
+(189,'Twilight Base Camp',1,1377,2739,53,60,0,-6996.15,1195.01,11.4959,1.16226,'134:0 176:0 177:0 188:0 202:0 204:0 '),
+(190,'Staghelm Point',1,1377,3426,53,60,0,-6517.49,97.5554,126.126,1.85794,'184:0 191:0 '),
+(191,'Twilights Run',1,1377,3446,53,60,0,-6310.14,136.591,15.4595,2.53339,'184:0 190:0 '),
+(192,'Ortells Hideout',1,1377,2744,53,60,0,-7586.17,226.396,10.8663,1.24673,'205:0 '),
+(193,'Bronzebeard Encampment',1,1377,3427,53,60,0,-8021.76,1105.84,3.54927,1.43333,'203:0 '),
+(194,'Under Attack - Winterspring',1,618,2251,53,60,0,6519.57,-4117.1,661.535,4.32283,'143:0 '),
+(195,'Under Attack - Azshara',1,16,1222,43,54,0,3366.79,-6226.81,-15.3194,1.50275,'47:0 141:0 '),
+(196,'BLC1',0,4,4,43,54,0,-11202.2,-3034.46,6.232,1.13173,'839:0 841:0 845:0 852:0 854:0 '),
+(198,'Under Attack - Tanaris Desert',1,440,440,38,50,0,-8277.12,-3484.09,17.7284,1.51601,''),
+(199,'Under Attack - Eastern Plaguelands',0,139,2258,53,60,0,2492.32,-3803.41,177.692,4.09879,'248:0 '),
+(200,'Ivars Patch',0,130,239,8,20,4,1233.05,1214.28,52.5845,3.07876,'201:0 298:0 299:0 303:0 '),
+(201,'Valgans Field',0,130,227,8,20,4,908.754,1255.63,45.9684,0.575633,'299:0 302:0 303:0 200:0 '),
+(202,'Sandworm! - A Silithyst beast has surfaced',1,1377,2742,53,60,0,-6548.72,1150.51,-1.23794,4.6252,'134:0 189:0 '),
+(203,'Sandworm! - A Silithyst beast has surfaced',1,1377,1377,53,60,0,-7786.01,978.815,-2.90318,5.53981,'193:0 '),
+(204,'Sandworm! - A Silithyst beast has surfaced',1,1377,2743,53,60,0,-7463.3,1411.7,3.70656,4.14577,'189:0 '),
+(205,'Sandworm! - A Silithyst beast has surfaced',1,1377,2738,53,60,0,-7377.08,447.046,4.53578,2.59898,'176:0 177:0 192:0 '),
+(211,'Eastwall Tower - Horde',0,139,2271,53,60,0,2550.77,-4783.57,109.501,5.47479,'85:0 235:0 237:0 250:0 '),
+(215,'Plaguewood Tower - Horde, Progressing',0,139,4067,53,60,0,2991.34,-3045.27,119.143,2.65173,'84:0 241:0 242:0 '),
+(220,'Northpass Tower - Horde, Contested',0,139,2275,53,60,0,3168.41,-4356.58,138.976,4.89792,'236:0 237:0 238:0 '),
+(230,'Crown Guard Tower - Alliance',0,139,2263,53,60,0,1861.6,-3701.08,160.834,4.34226,'248:0 247:0 249:0 '),
+(233,'Mudsprocket',1,15,4010,33,45,0,-4590.83,-3182.5,34.9064,2.13752,'105:0 '),
+(234,'LightsHopeChapel',0,139,2268,53,60,1,2273.52,-5332.92,88.0978,1.44413,'85:0 252:0 '),
+(235,'BlackwoodLake',0,139,2624,53,60,0,2464.31,-4192.32,86.7625,5.25334,'211:0 236:0 250:0 '),
+(236,'EPL_hubN1',0,139,139,53,60,0,2895.84,-4274.37,91.0774,2.94428,'220:0 235:0 237:0 240:0 '),
+(237,'Northdale',0,139,2272,53,60,0,2939.45,-4922.8,110.201,2.76758,'236:0 211:0 220:0 238:0 '),
+(238,'ZulMasharEntrance',0,139,2273,53,60,0,3243.57,-4728.42,157.177,1.67982,'237:0 220:0 239:0 '),
+(239,'MazraAlor',0,139,2274,53,60,0,3446.77,-4987,196.046,5.53613,'238:0 '),
+(240,'PlaguewoodEast',0,139,2277,53,60,0,3031.09,-3786.79,119.967,4.37961,'236:0 241:0 242:0 '),
+(241,'PlaguewoodSouth',0,139,2277,53,60,0,2764.18,-3442.19,97.1331,4.24216,'215:0 240:0 242:0 '),
+(242,'PlaguewoodCenter',0,139,2277,53,60,0,3137.26,-3403.95,139.517,0.937594,'215:0 240:0 241:0 '),
+(243,'TerrorweTunnelWest',0,139,2619,53,60,0,2724.41,-2453.2,66.836,5.42496,'244:0 84:0 '),
+(244,'ThondorilRiverSouth',0,139,2619,53,60,0,2417.75,-2469.65,72.4504,0.00296164,'183:0 243:0 245:0 '),
+(245,'EPL_hubSW',0,139,139,53,60,0,2076.2,-2853.69,86.3391,0.879086,'244:0 246:0 248:0 255:0 '),
+(246,'EPL_hubSWRoad',0,139,139,53,60,0,1811.3,-3046.98,75.4985,1.09939,'245:0 247:0 255:0 '),
+(247,'Undercroft',0,139,2261,53,60,0,1600.37,-3283.08,91.4858,0.567285,'246:0 230:0 '),
+(248,'EPL_hubSW2',0,139,139,53,60,0,2175.83,-3487.76,123.024,5.90406,'199:0 230:0 245:0 '),
+(249,'EPL_SRoad',0,139,139,53,60,0,1841.76,-4088.5,101.961,5.05584,'230:0 250:0 '),
+(250,'CorinsCrossing',0,139,2264,53,60,0,2074.45,-4556.23,73.5772,0.745981,'211:0 235:0 249:0 251:0 252:0 '),
+(251,'ScarletBaseCamp',0,139,2265,53,60,0,1656.05,-4826.35,87.7738,0.384695,'250:0 252:0 253:0 '),
+(252,'PestilentScar',0,139,2622,53,60,0,2013.6,-4964.85,73.6116,5.58402,'234:0 250:0 251:0 253:0 '),
+(253,'TyrshandEntrance',0,139,2266,53,60,0,1690.77,-5201.46,74.6226,4.83788,'251:0 252:0 254:0 '),
+(254,'Tyrshand',0,139,2266,53,60,0,1609.91,-5528.27,111.168,4.2076,'253:0 '),
+(255,'ThondorilRiverBridge',0,139,2619,53,60,0,1924.72,-2608.2,62.8109,4.6761,'183:0 245:0 246:0 256:0 '),
+(256,'GahrronWithering',0,28,201,48,56,0,1768.07,-2280.14,59.7087,0.010807,'183:0 255:0 257:0 258:0 '),
+(257,'WritingHaunt',0,28,202,48,56,0,1506.64,-1862.76,59.0986,5.271,'256:0 258:0 259:0 266:0 269:0 '),
+(258,'WPL_hubC2',0,28,28,48,56,0,1760.12,-1779.45,64.8245,4.87437,'256:0 257:0 259:0 260:0 266:0 269:0 '),
+(259,'DalsonTears',0,28,200,48,56,0,1864.12,-1558.81,59.2668,3.44495,'257:0 258:0 260:0 266:0 267:0 269:0 '),
+(260,'WPL_hubN1',0,28,28,48,56,0,2122.47,-1665.81,64.0458,5.36013,'258:0 259:0 261:0 262:0 '),
+(261,'NorthridgeLumberCamp',0,28,192,48,56,0,2421.88,-1647.26,103.541,5.77835,'260:0 '),
+(262,'WPL_hubN2',0,28,28,48,56,0,2425.99,-1947.45,109.098,4.71217,'260:0 263:0 '),
+(263,'HearthglenTower',0,28,28,48,56,0,2701.43,-1944.23,107.238,0.832291,'262:0 265:0 '),
+(264,'Hearthglen',0,28,203,48,56,0,2924.12,-1426.31,150.782,1.09736,'265:0 '),
+(265,'HearthglenEntrance',0,28,190,48,56,0,2782.62,-1612.54,129.551,0.826396,'264:0 263:0 '),
+(266,'WPL_hubC1',0,28,28,48,56,0,1680.03,-1358.64,69.8578,5.02985,'268:0 257:0 258:0 259:0 267:0 269:0 270:0 274:0 '),
+(267,'FelstoneField',0,28,199,48,56,0,1795.08,-1188.53,59.8914,5.54821,'268:0 259:0 266:0 269:0 273:0 274:0 '),
+(268,'AndorhalW',0,28,193,48,56,0,1336.99,-1272.01,57.8614,2.26525,'266:0 267:0 269:0 270:0 272:0 '),
+(269,'AndorhalNE',0,28,193,48,56,0,1540.11,-1606.19,65.1216,5.937,'257:0 258:0 259:0 266:0 267:0 268:0 270:0 '),
+(270,'AndorhalEntranceSE',0,28,197,48,56,0,1294.98,-1678.78,62.5727,3.83801,'268:0 266:0 269:0 271:0 '),
+(271,'SorrowHillCR',0,28,197,48,56,0,1162.78,-1758.3,60.6308,3.04279,'48:0 173:0 270:0 '),
+(272,'AndorhalEntranceSW',0,28,28,48,56,0,1214.59,-1145.63,60.8962,5.48342,'268:0 173:0 '),
+(273,'Bulwark',0,28,813,10,56,4,1718.17,-802.509,57.5466,1.68044,'267:0 274:0 275:0 276:0 '),
+(274,'WPL_hubE',0,28,813,48,56,0,1663.85,-956.731,69.3084,0.651574,'266:0 267:0 273:0 '),
+(275,'TG_hubSE',0,85,85,1,10,4,1806.63,-369.504,32.3876,6.02566,'273:0 276:0 277:0 '),
+(276,'BalnirFarmstead',0,85,165,6,10,4,2029.54,-432.459,35.4011,5.30269,'273:0 275:0 277:0 '),
+(277,'TG_hubC2',0,85,85,1,10,4,2029.86,-87.8105,35.5077,4.49765,'2:0 275:0 276:0 '),
+(278,'BrillEntrance',0,85,159,1,10,4,2296.05,429.197,35.7333,5.74799,'2:0 279:0 285:0 297:0 '),
+(279,'GarrensHauntGraves',0,85,85,4,10,4,2599.87,521.024,17.2769,5.97968,'2:0 278:0 280:0 281:0 '),
+(280,'GarrensHaunt',0,85,164,6,10,4,2883.52,376.589,25.8553,5.87914,'279:0 281:0 284:0 '),
+(281,'BrightwaterLake',0,85,85,1,10,4,2634.44,79.5244,31.089,6.13244,'2:0 279:0 280:0 282:0 284:0 '),
+(282,'NorthCoastE',0,85,168,7,10,4,3032.54,-341.266,5.44748,2.52746,'281:0 283:0 '),
+(283,'NorthCoastC',0,85,168,1,10,4,2935.15,41.7046,6.92148,4.82869,'282:0 284:0 '),
+(284,'NorthCoastW',0,85,168,1,10,4,2984.21,388.32,7.96326,4.49688,'280:0 281:0 283:0 '),
+(285,'ColdHearthManor',0,85,166,1,10,4,2107.98,617.879,35.0405,0.497239,'278:0 18:0 286:0 287:0 297:0 '),
+(286,'TG_hubC1',0,85,85,1,10,0,2204.7,1063.28,28.6853,4.1572,'285:0 287:0 288:0 292:0 294:0 '),
+(287,'CrusadersOutpost',0,85,85,1,10,0,1797.65,703.831,48.147,1.54771,'286:0 285:0 297:0 '),
+(288,'TH_hubNE',0,85,85,1,10,4,2446.9,1082.07,58.5203,0.911539,'286:0 289:0 292:0 293:0 294:0 '),
+(289,'AgamandMillsEntrance',0,85,157,4,10,4,2701.33,937.571,110.912,0.173269,'288:0 290:0 291:0 '),
+(290,'AgamandMillsW',0,85,157,6,10,4,2889.98,1065.92,105.434,5.38438,'289:0 291:0 '),
+(291,'AgamandMillsE',0,85,157,6,10,4,2973.71,619.932,93.8373,1.31013,'289:0 290:0 '),
+(292,'SollidenFarmstead',0,85,156,1,10,4,2329.03,1407.79,33.3337,0.622907,'286:0 288:0 293:0 294:0 '),
+(293,'CrusadersOutpost',0,85,85,1,10,4,2430.28,1585.02,37.0619,0.587566,'288:0 292:0 '),
+(294,'UndeadStartExit',0,85,85,5,10,4,2197.51,1192.39,31.5497,5.11342,'288:0 286:0 292:0 295:0 '),
+(295,'UndeadStartEnd',0,85,154,1,10,4,2061.91,1418.99,63.8379,5.30978,'294:0 83:0 4:0 296:0 '),
+(296,'UndeadStartE',0,85,154,1,10,4,1805.3,1351.42,87.1354,0.232168,'295:0 4:0 '),
+(297,'TH_exitS',0,85,85,7,12,4,1642.09,555.658,33.4922,2.88878,'278:0 285:0 287:0 298:0 '),
+(298,'ShiningStrandN',0,130,927,8,14,4,1331.69,679.903,40.5373,1.02387,'297:0 200:0 '),
+(299,'DeadField',0,130,240,8,20,4,1076.06,1545.35,28.6412,4.79771,'201:0 300:0 301:0 302:0 303:0 200:0 '),
+(300,'SkitteringDark',0,130,226,8,20,4,1271.34,1974.49,17.8502,4.31862,'299:0 301:0 '),
+(301,'NorthTidesHollow',0,130,305,8,20,4,833.25,1880.5,21.9868,5.06279,'299:0 300:0 '),
+(302,'SPF_hubC1',0,130,130,8,20,4,867.729,1518.72,35.2045,0.160734,'201:0 299:0 303:0 304:0 '),
+(303,'SPF_hubC2',0,130,130,8,20,4,934.532,1356.51,43.5579,3.0887,'201:0 299:0 302:0 200:0 305:0 '),
+(304,'SPF_hubC3',0,130,130,8,20,4,736.764,1449.26,64.4284,0.457609,'302:0 305:0 306:0 '),
+(305,'SPF_hubC4',0,130,130,8,20,4,587.903,1352.93,90.6192,0.359403,'303:0 304:0 306:0 17:0 313:0 '),
+(306,'DecrepitFerry',0,130,237,13,20,4,664.305,1021.48,45.3265,5.10911,'304:0 305:0 307:0 '),
+(307,'FenrisIsle',0,130,172,15,20,4,704.961,674.359,43.3624,1.57874,'306:0 308:0 311:0 '),
+(308,'FenrisIsleSE',0,130,172,15,20,4,653.059,335.097,35.0481,1.33722,'307:0 309:0 '),
+(309,'FenrisIsleE',0,130,232,16,20,4,866.03,78.8803,34.2361,2.23258,'308:0 310:0 '),
+(310,'DawningIsles',0,130,232,17,22,4,1199.57,370.42,34.3257,3.13185,'309:0 '),
+(311,'FenrisKeep',0,130,172,8,20,4,1013.6,734.689,59.2651,3.23986,'307:0 '),
+(312,'DeepElemMineFork',0,130,213,8,20,4,271.231,1110.33,80.2136,5.99661,'313:0 314:0 317:0 318:0 '),
+(313,'SPF_hubC5',0,130,130,8,20,4,385.877,1253.37,80.2878,0.320144,'305:0 312:0 315:0 '),
+(314,'DeepElemMine',0,130,213,8,20,4,376.82,1082.54,106.396,3.03959,'312:0 '),
+(315,'SPF_hubC6',0,130,130,8,20,4,194.263,1268.01,72.8331,6.23812,'313:0 316:0 317:0 318:0 '),
+(316,'OlsensFarthing',0,130,229,8,20,4,171.155,1487.65,114.395,4.84404,'315:0 '),
+(317,'SPF_DalaranCamp1',0,130,130,8,20,4,-50.4703,1331.43,60.9321,5.92005,'315:0 312:0 318:0 319:0 323:0 '),
+(318,'SPF_hubS1',0,130,130,8,20,4,-132.172,1170.25,63.4384,0.508657,'315:0 317:0 312:0 319:0 323:0 326:0 '),
+(319,'AmberhillEntrance',0,130,233,11,20,4,-131.822,896.74,65.831,1.54539,'317:0 318:0 320:0 321:0 323:0 325:0 '),
+(320,'AmberhillHall',0,130,233,13,20,4,-141.972,812.61,63.737,1.09457,'319:0 '),
+(321,'AmberhillFarms',0,130,233,15,20,4,88.1028,694.265,60.6053,2.4376,'322:0 319:0 '),
+(322,'AmberhillMurlocCamp',0,130,130,15,20,4,434.265,696.251,33.7837,3.19747,'321:0 '),
+(323,'SPF_hubS2',0,130,130,8,20,4,-330.828,1311.68,37.1012,1.70757,'317:0 318:0 319:0 324:0 326:0 327:0 '),
+(324,'PyrewoodVillage',0,130,204,8,20,4,-383.772,1597.45,16.8392,4.90611,'323:0 '),
+(325,'SPF_exitSE',0,130,130,15,20,4,-543.136,724.877,91.2236,0.975962,'319:0 326:0 357:0 '),
+(326,'SPF_hubS3',0,130,130,8,20,4,-503.287,1113.31,76.93,0.514545,'318:0 323:0 325:0 '),
+(327,'GreymaneWall',0,130,230,8,20,4,-744.895,1522.56,15.5245,5.84742,'323:0 '),
+(328,'DandredsFold',0,36,1682,35,40,0,1235.47,-274.821,40.3856,4.48552,'329:0 '),
+(329,'UplandsN',0,36,284,28,40,0,1085.27,-663.59,87.8456,1.24773,'328:0 330:0 '),
+(330,'UplandsS',0,36,284,28,40,0,958.693,-748.597,114.797,4.04964,'329:0 331:0 335:0 '),
+(331,'Strahnbard',0,36,280,28,40,0,683.909,-963.157,164.301,0.671641,'330:0 332:0 343:0 '),
+(332,'AM_hubE1',0,36,36,28,40,0,615.654,-1043.7,168.11,0.331968,'331:0 333:0 381:0 '),
+(333,'AM_hubE2',0,36,1684,36,42,0,640.065,-1460.93,76.3018,6.17925,'332:0 334:0 '),
+(334,'ChillwindCampRoad',0,28,3197,48,56,0,933.473,-1479.87,62.8272,3.06319,'333:0 173:0 '),
+(335,'SlaughterHollowNE',0,36,283,28,40,0,802.9,-628.854,149.733,3.01018,'330:0 336:0 337:0 '),
+(336,'SlaughterHollowN',0,36,283,28,40,0,835.191,-445.445,134.228,4.48673,'335:0 '),
+(337,'SlaughterHollowC',0,36,281,28,40,0,620.637,-522.586,179.928,5.73159,'335:0 338:0 343:0 '),
+(338,'RuinsOfAlterac',0,36,281,28,40,0,631.058,-371.491,154.481,2.42898,'340:0 337:0 339:0 '),
+(339,'RuinsOfAlteracSW',0,36,281,28,40,0,500.776,-173.116,151.449,5.19357,'340:0 338:0 341:0 '),
+(340,'RuinsOfAlteracSE',0,36,281,28,40,0,397.344,-248.661,161.727,5.94755,'338:0 339:0 '),
+(341,'RuinsOfAlteracE',0,36,281,28,40,0,573.088,-14.3215,142.366,3.66008,'339:0 342:0 '),
+(342,'RuinsOfAlteracSSW',0,36,1683,28,40,0,252.323,-82.4394,141.544,0.263228,'341:0 344:0 '),
+(343,'RuinsOfAlteracE',0,36,1357,28,40,0,493.629,-621.553,172.877,0.602885,'331:0 337:0 344:0 345:0 380:0 '),
+(344,'RuinsOfAlteracS',0,36,1683,28,40,0,141.788,-316.452,150.648,1.12125,'342:0 343:0 346:0 '),
+(345,'CorrahnsDagger',0,36,1679,28,40,0,-45.3608,-581.074,153.724,5.82187,'343:0 346:0 380:0 '),
+(346,'CorrahnsDaggerFork',0,36,1679,28,40,0,57.1052,-405.389,132.108,2.70582,'344:0 345:0 347:0 385:0 '),
+(347,'Headland',0,36,1680,28,40,0,-163.833,-293.019,151.411,0.123425,'346:0 348:0 '),
+(348,'GavinsNaze',0,36,1677,28,40,0,-63.0062,-197.056,131.24,2.72704,'347:0 349:0 350:0 355:0 '),
+(349,'GavinsNazeTop',0,36,1677,28,40,0,-125.184,-59.9939,147.694,5.63693,'348:0 350:0 '),
+(350,'GavinsNazeW',0,36,279,28,40,0,68.1015,-53.44,99.6287,3.99152,'348:0 349:0 351:0 352:0 353:0 '),
+(351,'DalaranCraterN',0,36,279,28,40,4,466.751,167.322,41.9053,3.38088,'350:0 352:0 '),
+(352,'DalaranCraterS',0,36,279,28,40,4,90.2654,237.935,43.2902,5.2894,'351:0 350:0 353:0 354:0 '),
+(353,'LordamereInternmentCamp',0,36,278,28,40,4,-90.5356,218.366,53.2755,6.11997,'352:0 350:0 354:0 '),
+(354,'HillsbradFieldsC',0,267,286,18,30,4,-499.681,78.0454,56.6165,0.278575,'352:0 353:0 356:0 355:0 '),
+(355,'HillsbradFieldsE',0,267,286,18,30,0,-437.039,-135.243,56.2029,2.13409,'354:0 356:0 348:0 385:0 '),
+(356,'HillsbradFieldsSRoad',0,267,267,18,30,0,-639.845,-98.2014,47.262,0.172558,'358:0 360:0 354:0 357:0 361:0 355:0 385:0 20:0 '),
+(357,'SouthPointTower',0,267,285,18,30,0,-637.717,273.387,63.926,4.49972,'356:0 325:0 358:0 359:0 '),
+(358,'WesternStrandW',0,267,295,18,30,0,-979.029,273.179,7.90667,5.62479,'357:0 356:0 359:0 '),
+(359,'WesternStrandSW',0,267,295,18,30,0,-1128.84,276.704,0.0000662804,5.89576,'357:0 358:0 360:0 '),
+(360,'WesternStrandS',0,267,295,18,30,0,-1156.55,7.61478,0.00000548363,6.16081,'359:0 356:0 361:0 '),
+(361,'WesternStrandS',0,267,295,18,30,0,-1102.38,-114.03,0.0000309944,0.148599,'362:0 360:0 356:0 '),
+(362,'WesternStrandE',0,267,271,18,30,0,-962.262,-506.545,2.13023,1.90396,'361:0 363:0 20:0 '),
+(363,'SouthshoreS',0,267,271,18,30,0,-974.276,-592.998,0.229758,0.372044,'362:0 364:0 20:0 '),
+(364,'EasternStrandW',0,267,294,18,30,0,-1012.85,-790.213,9.01406,5.30042,'363:0 365:0 368:0 376:0 '),
+(365,'EasternStrandC',0,267,294,18,30,0,-1183.14,-847.579,1.43171,6.18988,'364:0 366:0 '),
+(366,'EasternStrandS',0,267,294,18,30,0,-1311.64,-1052.47,18.2271,0.929683,'365:0 367:0 368:0 '),
+(367,'DunGarok',0,267,290,18,30,4,-1256.01,-1190.37,38.9786,2.03514,'366:0 368:0 376:0 '),
+(368,'DunGarokRoad',0,267,267,18,30,0,-1049.49,-1239.84,53.3175,1.75045,'364:0 366:0 367:0 369:0 373:0 '),
+(369,'HillsbradFoothillsExitSE',0,267,267,18,30,0,-784.955,-1512.45,56.6724,1.97822,'370:0 368:0 373:0 410:0 '),
+(370,'HillsbradFoothillsExitE',0,267,275,18,30,0,-594.279,-1721.03,62.3187,2.25507,'369:0 371:0 411:0 '),
+(371,'DurnholdeNE',0,267,275,18,30,0,-383.173,-1720.01,90.0634,3.41784,'372:0 370:0 '),
+(372,'DurnholdeNNE',0,267,275,18,30,0,-316.76,-1609.34,86.0559,5.49914,'371:0 377:0 386:0 '),
+(373,'DurnholdeS',0,267,267,18,30,0,-669.891,-1326.66,66.6887,5.65621,'376:0 374:0 368:0 369:0 383:0 '),
+(374,'DurnholdeInside',0,267,275,18,30,0,-518.661,-1435.16,64.889,2.5637,'373:0 375:0 '),
+(375,'DurnholdeInsideDeep',0,267,275,18,30,0,-512.473,-1541.62,67.1947,1.69387,'374:0 '),
+(376,'NethanderStead',0,267,289,18,30,0,-915.831,-926.49,31.1754,1.19711,'364:0 367:0 373:0 383:0 20:0 '),
+(377,'DurnholdeN',0,267,275,18,30,0,-298.033,-1310.71,76.9034,4.69017,'372:0 378:0 383:0 '),
+(378,'DurnholdeNN',0,267,267,18,30,0,-37.1467,-1296.59,83.7166,3.13705,'377:0 21:0 '),
+(379,'TarrenMillN',0,267,267,18,30,4,188.047,-974.547,75.5356,0.0209713,'21:0 381:0 '),
+(380,'GallowsCorner',0,36,1357,28,40,0,324.254,-615.115,145.246,3.03887,'343:0 345:0 21:0 382:0 '),
+(381,'SoferasCorner',0,36,36,28,40,0,461.934,-926.633,129.374,2.72668,'379:0 332:0 382:0 '),
+(382,'SoferasNaze',0,36,1678,28,40,0,248.314,-839.928,146.333,0.818164,'381:0 380:0 '),
+(383,'HFH_bridge',0,267,267,18,30,0,-487.607,-967.55,34.4918,4.54488,'377:0 376:0 373:0 384:0 '),
+(384,'DarrowHillE',0,267,267,18,30,0,-323.998,-672.57,54.6417,3.9048,'21:0 383:0 385:0 20:0 '),
+(385,'DarrowHillW',0,267,1056,18,30,0,-332.483,-447.42,58.4647,0.297842,'346:0 355:0 356:0 384:0 20:0 '),
+(386,'HinterlandsEntrance',0,47,47,38,50,0,-77.4076,-1845.63,143.116,2.46164,'372:0 55:0 '),
+(387,'ZunWatha',0,47,352,38,50,0,-11.9998,-2493.37,119.659,1.99629,'55:0 82:0 388:0 391:0 '),
+(388,'QuelDanilS',0,47,47,38,50,0,65.3995,-2664.2,111.823,5.20269,'55:0 82:0 387:0 389:0 390:0 391:0 392:0 '),
+(389,'QuelDanil',0,47,350,38,50,4,210.196,-2789.46,122.156,1.50935,'388:0 390:0 392:0 '),
+(390,'HL_hubW',0,47,47,38,50,0,132.208,-2876.17,116.583,1.69588,'388:0 389:0 392:0 393:0 397:0 398:0 '),
+(391,'BogensLedge',0,47,1887,38,50,0,-198.398,-2585.67,120.378,6.18051,'387:0 388:0 393:0 '),
+(392,'HiriWatha',0,47,1885,38,50,0,-35.4616,-2815.33,122.143,0.435323,'389:0 390:0 388:0 393:0 '),
+(393,'ShadraAlorEntrance',0,47,47,38,50,0,-160.179,-2955.33,115.773,1.96371,'391:0 392:0 390:0 395:0 394:0 396:0 398:0 400:0 '),
+(394,'ShadraAlorE',0,47,353,38,50,0,-366.126,-2955.41,89.39,6.27554,'393:0 395:0 396:0 '),
+(395,'ShadraAlorS',0,47,353,38,50,0,-455.461,-2839.4,105.834,6.08704,'393:0 394:0 396:0 '),
+(396,'ShadraAlorW',0,47,353,38,50,0,-296.621,-2833,96.7074,5.15045,'393:0 395:0 394:0 '),
+(397,'AgolWatha',0,47,1884,38,50,0,397.177,-3352.2,123.451,2.24644,'390:0 398:0 399:0 '),
+(398,'CreepingRun',0,47,1886,38,50,0,116.576,-3466.05,107.658,1.12922,'393:0 397:0 390:0 399:0 400:0 401:0 '),
+(399,'SkulkRock',0,47,351,38,50,0,363.014,-3796.73,171.76,1.54745,'397:0 398:0 401:0 404:0 '),
+(400,'AltarOfZul',0,47,355,38,50,0,-147.861,-3319.03,121.957,3.93113,'393:0 398:0 '),
+(401,'HL_hubC',0,47,47,38,50,0,109.926,-3922.75,136.697,0.948588,'398:0 399:0 402:0 403:0 404:0 '),
+(402,'JinthaAlor',0,47,354,38,50,0,-217.196,-4159.98,118.665,0.453769,'401:0 403:0 '),
+(403,'OverlookCliffsS',0,47,307,38,50,0,-150.233,-4250.21,120.905,4.17653,'401:0 402:0 405:0 '),
+(404,'SeradaneBridge',0,47,351,38,50,0,472.513,-3907.18,113.731,5.88677,'399:0 401:0 409:0 '),
+(405,'OverlookCliffsRampTop',0,47,307,38,50,0,-243.665,-4377.48,105.997,0.98978,'403:0 406:0 '),
+(406,'OverlookCliffsRampBottom',0,47,307,38,50,0,-3.15739,-4629.26,13.899,2.27391,'405:0 407:0 408:0 '),
+(407,'RevantuskOutside',0,47,307,38,50,0,-355.789,-4475.87,11.3783,0.924997,'406:0 179:0 '),
+(408,'OverlookCliffsEnd',0,47,307,38,50,0,133.371,-4745.73,2.05405,2.27392,'406:0 '),
+(409,'Seradane',0,47,356,60,80,0,755.958,-4011.61,92.8808,5.95432,'404:0 '),
+(410,'ArathiExitNW',0,45,334,28,40,0,-889.426,-1677.32,57.6111,1.06053,'369:0 411:0 412:0 414:0 '),
+(411,'ArathiExitN',0,45,45,28,40,0,-684.458,-1831.3,53.3946,0.936824,'370:0 410:0 412:0 413:0 '),
+(412,'ArathiCW',0,45,45,28,40,0,-863.176,-1785.9,39.6302,5.66886,'410:0 411:0 413:0 414:0 '),
+(413,'NorthfoldManor',0,45,313,28,40,0,-822.895,-2039.83,34.4558,1.25884,'411:0 412:0 415:0 '),
+(414,'Arathi_hubW',0,45,45,28,40,0,-1190.48,-1731.63,56.3674,6.26181,'410:0 412:0 415:0 420:0 '),
+(415,'NorthfoldManor',0,45,313,28,40,0,-933.512,-2120.29,56.5869,2.05011,'78:0 413:0 414:0 416:0 '),
+(416,'RefugePointeExitN',0,45,315,28,40,0,-1158.07,-2706.9,52.0215,2.18796,'78:0 22:0 415:0 417:0 418:0 419:0 435:0 '),
+(417,'DabyrieFarmstead',0,45,45,28,40,0,-1091.19,-2856.55,42.4006,1.78073,'416:0 418:0 435:0 436:0 '),
+(418,'ArathiCO',0,45,336,28,40,0,-1352.09,-2738.95,59.0948,6.08275,'416:0 417:0 419:0 431:0 432:0 435:0 '),
+(419,'RefugePointeExitS',0,45,45,28,40,0,-1466.43,-2424.6,57.8277,5.98262,'22:0 78:0 416:0 418:0 420:0 427:0 429:0 431:0 '),
+(420,'StromgardeRoad',0,45,45,28,40,0,-1323.01,-1833.39,63.6564,0.712589,'421:0 414:0 419:0 427:0 '),
+(421,'StromgardeInside',0,45,324,28,40,0,-1576.29,-1800.48,67.6512,3.46934,'422:0 423:0 424:0 420:0 '),
+(422,'StromgardeKeep',0,45,324,28,40,0,-1660.06,-1803.63,83.0724,6.27321,'421:0 426:0 '),
+(423,'StromgardeE',0,45,324,28,40,0,-1602.44,-1922.26,67.2707,1.50115,'421:0 '),
+(424,'StromgardeW1',0,45,324,28,40,0,-1596.2,-1745.56,67.3627,5.09826,'421:0 425:0 '),
+(425,'StromgardeW2',0,45,324,28,40,0,-1720.34,-1736.69,52.4064,6.26851,'424:0 81:0 '),
+(426,'StromgardeKeepSide',0,45,324,28,40,0,-1681.32,-1933.25,80.6272,1.35821,'422:0 '),
+(427,'ArathiCI',0,45,335,28,40,0,-1517.62,-2100.44,22.3405,4.92548,'419:0 420:0 428:0 '),
+(428,'ThandolRoadN',0,45,45,28,40,0,-1995.23,-2466.74,78.7992,0.837489,'427:0 429:0 441:0 '),
+(429,'ArathiRoadSmid',0,45,45,28,40,0,-1763.42,-2422.8,59.5627,0.9015,'419:0 428:0 431:0 430:0 '),
+(430,'BoulderfistHall',0,45,316,28,40,0,-1941.13,-2794.22,85.7724,0.38314,'429:0 431:0 432:0 '),
+(431,'Arathi_hubE1',0,45,45,28,40,0,-1570.23,-2675.51,35.6533,6.03014,'419:0 418:0 429:0 432:0 435:0 430:0 '),
+(432,'Arathi_hubE2',0,45,317,28,40,0,-1705.19,-3021.39,31.689,0.310091,'433:0 418:0 431:0 434:0 430:0 '),
+(433,'WitherbarkVillage',0,45,317,28,40,0,-1867.12,-3365.42,56.1179,1.07782,'432:0 '),
+(434,'GoshekFarm',0,45,314,28,40,0,-1526.14,-3075.57,14.1487,2.82925,'432:0 435:0 '),
+(435,'Arathi_hubNE1',0,45,45,28,40,0,-1297.32,-3141.76,34.9289,1.25489,'416:0 417:0 418:0 431:0 434:0 436:0 438:0 '),
+(436,'Arathi_hubNE2',0,45,45,28,40,0,-1005.91,-3313.55,55.2766,2.32737,'435:0 417:0 437:0 438:0 '),
+(437,'ArathiCE',0,45,333,28,40,0,-839.717,-3280.93,78.5616,3.98495,'436:0 438:0 '),
+(438,'HammerfallEntrance',0,45,321,28,40,0,-1164.53,-3558.81,50.1497,1.47167,'435:0 436:0 437:0 23:0 439:0 '),
+(439,'DrywhiskerGorgeOutside',0,45,318,28,40,0,-1086,-3696.31,81.3913,2.10981,'438:0 440:0 '),
+(440,'DrywhiskerGorgeEntrance',0,45,318,28,40,0,-1083.95,-3820.83,128.504,1.71515,'439:0 44:0 '),
+(441,'ArathiRoadSbottom',0,45,880,28,40,0,-2248.64,-2487.38,80.1236,4.70713,'428:0 442:0 443:0 '),
+(442,'ThandolSpanCamp',0,45,45,28,40,0,-2249.4,-2633.38,78.816,1.44851,'441:0 '),
+(443,'ThandolSpanS',0,11,881,18,30,0,-2478.16,-2506.16,78.5672,0.110205,'441:0 444:0 '),
+(444,'DunModrCamp',0,11,881,18,30,0,-2609.79,-2494.69,80.9667,1.57693,'443:0 6:0 445:0 '),
+(445,'Wetlands_hubN1',0,11,11,18,30,0,-2937.95,-2470.57,26.6988,6.13028,'444:0 446:0 447:0 461:0 462:0 '),
+(446,'DaggerforgeHill',0,11,1016,18,30,0,-2859.63,-2907.96,33.1564,1.54551,'445:0 448:0 449:0 '),
+(447,'WL_hubC1',0,11,11,18,30,0,-3206.06,-2452.65,10.0327,5.76822,'445:0 448:0 455:0 461:0 462:0 '),
+(448,'Greenwarden',0,11,1025,18,30,0,-3254.89,-2726.4,9.41813,1.21683,'446:0 447:0 449:0 455:0 458:0 '),
+(449,'WL_hubE1',0,11,11,18,30,0,-3421.46,-3088.4,22.5006,4.5862,'446:0 448:0 450:0 451:0 455:0 456:0 '),
+(450,'RaptorRidge',0,11,1017,23,30,0,-3132.51,-3240.98,63.5747,2.76015,'449:0 451:0 '),
+(451,'DragonmawGates',0,11,1038,61,70,0,-3452,-3659.86,58.5533,1.08333,'449:0 450:0 452:0 '),
+(452,'DragonmawGatesI1',0,11,1038,61,70,0,-3594.66,-4056.85,113.625,1.23963,'451:0 453:0 '),
+(453,'DragonmawGatesI2',0,11,1038,61,70,0,-3956.61,-4019.52,170.857,6.00896,'452:0 454:0 '),
+(454,'DragonmawGatesI3',0,11,1037,61,70,0,-4145.01,-3662.88,204.651,5.17056,'92:0 453:0 '),
+(455,'WL_hubS1',0,11,1020,18,30,0,-3777.35,-2817.99,12.647,0.508038,'447:0 448:0 449:0 456:0 457:0 '),
+(456,'MosshideFen',0,11,1020,18,30,0,-3913.48,-3043.47,11.7092,0.398469,'449:0 455:0 457:0 '),
+(457,'ThelgenRock',0,11,1021,18,30,0,-3921.58,-2647.27,36.3203,4.94005,'455:0 456:0 479:0 '),
+(458,'AngerfangEnampmentE',0,11,1036,18,30,0,-3503.17,-2440.43,48.2306,5.48001,'448:0 459:0 '),
+(459,'AngerfangEnampmentW',0,11,1036,18,30,0,-3354.34,-2190.82,45.3521,1.88565,'458:0 460:0 461:0 '),
+(460,'AngerfangEnampmentTop',0,11,1036,18,30,0,-3458.4,-2008.76,119.804,5.31784,'459:0 '),
+(461,'WL_hubW1',0,11,11,18,30,0,-3186.98,-2117.49,15.8054,4.81126,'445:0 447:0 459:0 462:0 463:0 467:0 '),
+(462,'IronbeardsTomb',0,11,309,18,30,0,-2861.94,-2217.72,29.2628,4.06121,'445:0 447:0 461:0 463:0 464:0 '),
+(463,'MosshideWest',0,11,11,18,30,0,-2916.55,-1848.65,10.201,4.36986,'461:0 462:0 464:0 465:0 466:0 467:0 '),
+(464,'BaradinBayN',0,11,1023,18,30,0,-2598.33,-1745.42,10.159,4.05766,'462:0 463:0 465:0 466:0 '),
+(465,'BaradinBayNW',0,11,298,18,30,0,-2723.52,-1348.51,9.75282,4.1578,'464:0 463:0 466:0 474:0 '),
+(466,'BaradinBayW',0,11,1022,18,30,0,-2951.24,-1112.1,9.14625,2.36904,'464:0 463:0 465:0 474:0 475:0 476:0 '),
+(467,'WhelgarsOutside',0,11,1024,18,30,0,-3208.01,-1693.31,8.6748,4.04314,'461:0 463:0 468:0 473:0 474:0 '),
+(468,'WhelgarsEntrance',0,11,118,18,30,0,-3328.04,-1856.79,25.9266,3.14189,'467:0 469:0 470:0 '),
+(469,'WhelgarsBottom',0,11,118,18,30,0,-3540.59,-1803.75,24.3572,5.93869,'468:0 '),
+(470,'WhelgarsRamp',0,11,118,18,30,0,-3370.49,-1931.82,63.5201,0.805329,'468:0 471:0 '),
+(471,'WhelgarsRampTop',0,11,118,18,30,0,-3471.16,-1925.52,113.829,3.80162,'470:0 472:0 '),
+(472,'WhelgarsCave',0,11,118,18,30,0,-3569.75,-1976.96,117.678,0.449137,'471:0 '),
+(473,'BlueChannelMarsh',0,11,1018,18,30,0,-3582.96,-1324.33,9.39017,5.56012,'467:0 474:0 476:0 '),
+(474,'BluegillMarsh',0,11,1022,18,30,0,-3135.95,-1301.23,7.27194,1.32132,'465:0 466:0 467:0 473:0 475:0 476:0 '),
+(475,'BaradinBayS',0,11,298,18,30,0,-3202.27,-925.946,8.88303,5.67636,'466:0 474:0 476:0 '),
+(476,'MenethilHarborRoad',0,11,1022,18,30,2,-3333.27,-1053.79,8.28482,2.51317,'11:0 466:0 473:0 474:0 475:0 '),
+(477,'MenethilBayS',0,11,298,18,30,2,-3909.27,-638.054,4.91793,5.35238,'11:0 '),
+(478,'MenethilBayN',0,11,298,18,30,2,-3732.25,-581.622,4.65228,4.77512,'11:0 '),
+(479,'DunAlgazBottom',0,11,836,18,30,0,-4086.88,-2624.69,43.3702,1.60133,'457:0 480:0 '),
+(480,'DunAlgazMid1',0,11,836,18,30,0,-4092.37,-2403.53,100.01,4.74881,'479:0 481:0 '),
+(481,'DunAlgazMid2',0,11,836,18,30,0,-3994.82,-2377.44,120.415,3.60017,'480:0 482:0 '),
+(482,'DunAlgazMid3',0,11,836,18,30,0,-4070,-2464.84,155.161,3.20551,'481:0 483:0 '),
+(483,'DunAlgazMid4',0,11,836,18,30,0,-4418.61,-2470.44,212.203,0.00303268,'482:0 5:0 484:0 '),
+(484,'DunAlgazMid5',0,11,836,18,30,0,-4453.35,-2691.02,268.159,1.48548,'483:0 485:0 '),
+(485,'DunAlgazTop',0,38,837,8,20,0,-4741.84,-2699.03,325.269,6.26389,'484:0 91:0 487:0 488:0 '),
+(486,'NorthGatePassBottom',0,38,838,8,20,2,-4797.55,-2537.41,354.11,2.07534,'91:0 524:0 '),
+(487,'SilverStreamMine',0,38,149,8,20,2,-4801.44,-2968.22,321.735,1.63004,'91:0 485:0 488:0 '),
+(488,'StonewroughDamW',0,38,146,8,20,2,-4676.63,-3184.73,310.249,2.0836,'487:0 485:0 489:0 '),
+(489,'StonewroughDamC',0,38,146,8,20,2,-4761.78,-3306.52,310.258,4.81285,'488:0 490:0 '),
+(490,'StonewroughDamE',0,38,146,8,20,2,-4680.9,-3464.1,310.208,3.57506,'489:0 491:0 '),
+(491,'TheLochNE',0,38,38,8,20,2,-4859.79,-3631.09,306.481,2.35809,'490:0 492:0 495:0 496:0 497:0 '),
+(492,'MogroshStronghold',0,38,143,8,20,2,-4884.91,-3956.61,298.791,3.26837,'491:0 493:0 494:0 495:0 '),
+(493,'MogroshStrongholdTop',0,38,143,8,20,2,-4853.52,-4046.55,315.354,1.54756,'492:0 '),
+(494,'LochModanE',0,38,38,8,20,2,-5200.93,-4080.99,324.555,1.53421,'492:0 495:0 512:0 '),
+(495,'LochModanC2',0,38,38,8,20,2,-5358.15,-3755.11,304.073,5.92655,'491:0 492:0 494:0 496:0 506:0 512:0 '),
+(496,'LochIsleE',0,38,38,8,20,2,-4983.21,-3478.31,305.5,4.76612,'491:0 495:0 497:0 498:0 '),
+(497,'LochIsleW',0,38,38,8,20,2,-4869.1,-3302.75,307.516,3.90807,'491:0 496:0 498:0 '),
+(498,'LochIsleS',0,38,38,8,20,2,-5031.68,-3316.94,298.701,5.51616,'497:0 496:0 499:0 '),
+(499,'LochC1',0,38,556,8,20,2,-5138.3,-3125.08,302.046,2.10361,'498:0 502:0 '),
+(500,'LochW1',0,38,38,8,20,2,-5067.56,-2665.82,323.188,6.27801,'91:0 501:0 502:0 '),
+(501,'LochW2',0,38,38,8,20,2,-5383.73,-2741.02,362.182,0.255963,'500:0 502:0 503:0 '),
+(502,'LochW3',0,38,38,8,20,0,-5215.01,-2861.61,336.947,0.715418,'91:0 499:0 500:0 501:0 503:0 '),
+(503,'ThelsamarEntrance',0,38,38,8,20,0,-5405.86,-2884.97,342.8,0.491581,'501:0 502:0 19:0 504:0 515:0 '),
+(504,'LochC3',0,38,144,8,20,0,-5441.5,-3109.22,349.359,0.721317,'503:0 19:0 505:0 '),
+(505,'LochS',0,38,38,8,20,0,-5860.82,-3292.84,292.88,5.93047,'504:0 506:0 621:0 '),
+(506,'IronbandsExcavationOutside',0,38,142,8,20,2,-5617.55,-3680.57,313.913,2.11697,'495:0 505:0 507:0 509:0 '),
+(507,'IronbandsExcavationSW',0,38,142,8,20,2,-5787.94,-3777.91,328.169,4.57725,'506:0 508:0 510:0 '),
+(508,'IronbandsExcavationInside1',0,38,142,8,20,2,-5722.82,-3946.06,324.917,2.02667,'507:0 509:0 '),
+(509,'IronbandsExcavationInside2',0,38,142,8,20,2,-5578.49,-3926.28,327.498,1.64379,'506:0 508:0 '),
+(510,'LochCornerSE',0,38,147,8,20,2,-5843.55,-4145.23,387.605,1.3532,'507:0 511:0 512:0 '),
+(511,'FastriderLodgeEntrance',0,38,147,8,20,2,-5555.41,-4251.75,380.644,2.87687,'510:0 512:0 513:0 '),
+(512,'LochModanSE',0,38,147,8,20,2,-5553.71,-4104.44,372.683,1.01823,'494:0 495:0 510:0 511:0 '),
+(513,'FarstriderLodge',0,38,147,8,20,2,-5621.61,-4334.97,403.763,0.951478,'511:0 514:0 '),
+(514,'FarstriderLodgeInside',0,38,147,8,20,3,-5674.26,-4247.48,407.006,5.29276,'513:0 '),
+(515,'LochModanSW1',0,38,38,8,20,2,-5673.4,-2775.82,363.022,5.89359,'503:0 516:0 519:0 '),
+(516,'StonesplinterValley1',0,38,923,8,20,2,-5878.01,-2909.13,366.788,0.558766,'515:0 517:0 518:0 '),
+(517,'StonesplinterValley2',0,38,923,8,20,2,-6057.08,-3024.86,403.365,0.541086,'516:0 '),
+(518,'StonesplinterValley3',0,38,923,8,20,2,-6077.12,-2770.04,413.566,5.71294,'516:0 '),
+(519,'LochModanSW2',0,38,924,8,20,2,-5804.6,-2605.8,316.201,6.15474,'515:0 520:0 521:0 '),
+(520,'LochModanSW3',0,38,924,8,20,2,-6029.33,-2496.11,310.016,2.1924,'519:0 561:0 '),
+(521,'SouthGatePassBottom',0,38,839,8,20,2,-5690.63,-2589.07,346.087,0.415367,'519:0 522:0 '),
+(522,'SouthGateOutpost',0,1,806,1,10,0,-5520.09,-2399.78,400.417,2.27487,'521:0 523:0 '),
+(523,'SouthGatePassTop',0,1,805,1,10,2,-5636.7,-2242.95,424.761,5.34381,'522:0 527:0 69:0 '),
+(524,'NorthGatePassTop1',0,1,808,1,10,2,-4911.88,-2330.69,408.794,5.22601,'486:0 525:0 '),
+(525,'NorthGatePassBottom2',0,1,808,1,10,2,-5204.26,-2288.4,400.984,2.97781,'524:0 526:0 '),
+(526,'NorthGatePassTop2',0,1,807,1,10,2,-5294.53,-2180,423.003,2.8011,'525:0 527:0 '),
+(527,'DunMoroghPassFork',0,1,1,1,10,2,-5515.28,-2008.17,399.376,4.60752,'526:0 523:0 528:0 '),
+(528,'DunMoroghE1',0,1,1,1,10,2,-5509.11,-1798.18,397.338,5.99176,'527:0 69:0 529:0 '),
+(529,'GolBolarFork',0,1,1,1,10,2,-5611.84,-1487.57,399.057,5.05517,'528:0 530:0 533:0 '),
+(530,'GolBolarCamp',0,1,134,1,10,2,-5711.36,-1562.28,383.568,2.84075,'529:0 531:0 '),
+(531,'GolBolarQuarry1',0,1,134,1,10,2,-5849.25,-1514.03,358.812,5.96152,'530:0 532:0 '),
+(532,'GolBolarQuarry2',0,1,134,1,10,2,-5737.17,-1683.52,362.196,6.04595,'531:0 '),
+(533,'TundridHills',0,1,804,1,10,2,-5651.13,-1033.73,410.816,4.75985,'529:0 534:0 536:0 556:0 '),
+(534,'Vagash1',0,1,1,1,10,2,-5422.73,-1195.14,450.063,2.06791,'533:0 535:0 '),
+(535,'Vagash2',0,1,803,1,10,2,-5417.7,-1264.17,446.78,2.22146,'534:0 '),
+(536,'DunMoroghS1',0,1,1,1,10,2,-5892.71,-628.276,400.121,5.26175,'533:0 537:0 '),
+(537,'DwarfGnomeStartExit1',0,1,1,1,10,2,-5975.18,-476.82,406.774,5.36188,'536:0 9:0 538:0 '),
+(538,'DwarfGnomeStartExit2',0,1,1,1,10,2,-6013.25,-224.693,412.196,4.79638,'537:0 539:0 '),
+(539,'DwarfGnomeStartExit3',0,1,800,1,10,2,-5890.34,69.4737,372.157,4.07706,'538:0 540:0 545:0 546:0 '),
+(540,'ColdridgePass1',0,1,800,1,10,2,-6066.08,42.2314,408.342,0.120498,'539:0 541:0 '),
+(541,'ColdridgePass2',0,1,800,4,10,2,-6231.65,125.6,430.753,5.63871,'540:0 542:0 '),
+(542,'DwarfGnomeStart1',0,1,132,1,10,3,-6261.08,369.552,383.537,4.94484,'541:0 1:0 543:0 544:0 '),
+(543,'DwarfGnomeStart2',0,1,132,1,10,2,-6482.65,496.244,386.328,5.80485,'542:0 544:0 '),
+(544,'DwarfGnomeStart3',0,1,132,1,10,2,-6269.69,741.137,386.893,4.77403,'542:0 543:0 '),
+(545,'GrizzledDen',0,1,136,1,10,2,-5690.95,-281.229,364.314,5.54297,'539:0 9:0 '),
+(546,'DunMoroghSW1',0,1,1,1,10,2,-5756.39,127.948,368.817,4.07511,'539:0 547:0 548:0 '),
+(547,'OldIcebeard',0,1,801,1,10,2,-5602.44,-28.5472,416.22,2.31387,'546:0 '),
+(548,'DunMoroghW1',0,1,135,1,10,2,-5661.62,365.277,393.274,4.27146,'546:0 549:0 550:0 551:0 '),
+(549,'FrostmaneHold',0,1,135,1,10,2,-5549.4,568.067,394.761,1.30462,'548:0 551:0 '),
+(550,'GnomereganS',0,1,133,1,10,2,-5183.81,585.068,404.291,4.35,'548:0 551:0 '),
+(551,'IceflowLake',0,1,211,1,10,2,-5250.86,115.774,394.041,2.85773,'548:0 549:0 550:0 552:0 555:0 '),
+(552,'ShimmerRidge1',0,1,802,1,10,2,-5266.4,-149.752,437.903,6.01894,'551:0 553:0 '),
+(553,'ShimmerRidge2',0,1,802,1,10,2,-5088.11,-166.104,442.035,0.727311,'552:0 554:0 555:0 '),
+(554,'ShimmerRidge3',0,1,802,1,10,2,-5043,-267.85,441.4,2.19994,'553:0 '),
+(555,'ShimmerRidge4',0,1,802,1,10,2,-5021.64,-132.237,411.899,3.77858,'553:0 551:0 '),
+(556,'DunmoroghC1',0,1,1,1,10,2,-5391.34,-928.482,393.467,4.06525,'533:0 557:0 '),
+(557,'IronforgeRamp',0,1,1,1,10,2,-5259.37,-493.579,386.436,3.14828,'556:0 9:0 558:0 '),
+(558,'IronforgeRampMid',0,1,809,1,10,2,-5197.66,-730.697,445.722,5.89324,'557:0 559:0 '),
+(559,'IronforgeRampTop',0,1,809,1,10,2,-5060.46,-745.984,480.27,3.47972,'558:0 8:0 '),
+(560,'IronforgeBank',0,1537,1537,1,60,3,-4909.88,-969.761,501.463,5.46481,'8:0 '),
+(561,'SGgate',0,51,1959,43,54,0,-6413.58,-2007.56,244.634,2.74852,'520:0 562:0 563:0 '),
+(562,'DustfireValleyMid',0,51,1959,43,54,0,-6590.48,-1884.27,245.713,1.74321,'561:0 580:0 585:0 '),
+(563,'SGexitE',0,51,51,43,54,0,-6906.38,-1818.59,241.661,5.89992,'561:0 564:0 566:0 593:0 '),
+(564,'GrimesiltDigSite',0,51,247,43,54,0,-7019.65,-1698.57,241.667,5.46992,'563:0 565:0 566:0 567:0 568:0 '),
+(565,'TannerCamp',0,51,1958,43,54,0,-7225.75,-1752.49,244.286,0.924438,'564:0 566:0 567:0 568:0 '),
+(566,'SGtower4',0,51,1444,43,54,0,-6980,-1505.92,242.742,3.93841,'563:0 564:0 565:0 567:0 568:0 '),
+(567,'SGtower3',0,51,1444,43,54,0,-7036.7,-1320.2,244.272,4.7631,'565:0 564:0 566:0 568:0 '),
+(568,'SGsouth1',0,51,1444,43,54,0,-7155.86,-1317.76,242.155,5.03211,'565:0 569:0 567:0 564:0 566:0 '),
+(569,'BRM_SG1',0,51,1445,43,54,0,-7215.95,-1057.94,242.73,1.72755,'571:0 568:0 570:0 572:0 573:0 '),
+(570,'BRM_SG2',0,25,25,46,60,0,-7399.25,-1106.95,278.077,0.229401,'569:0 622:0 '),
+(571,'SGwest1',0,51,51,43,54,0,-7085,-941.753,268.272,4.123,'569:0 572:0 573:0 '),
+(572,'SGtower2',0,51,51,43,54,0,-7001.07,-1109.84,243.97,2.78587,'571:0 569:0 573:0 '),
+(573,'SGwest2',0,51,51,43,54,0,-6974.99,-1007.32,241.667,3.29324,'571:0 569:0 572:0 574:0 588:0 '),
+(574,'CauldronRampTop',0,51,246,43,54,0,-6974.25,-1172.02,228.781,3.87051,'573:0 575:0 '),
+(575,'CauldronRampMid1',0,51,246,43,54,0,-7024.61,-1220.88,207.974,5.71816,'574:0 576:0 '),
+(576,'CauldronRampMid2',0,51,246,43,54,0,-6955.19,-1270.62,180.686,0.528642,'575:0 577:0 581:0 '),
+(577,'CauldronRampBottom',0,51,246,43,54,0,-6866.28,-1410.17,172.855,2.20156,'576:0 578:0 '),
+(578,'CauldronRamp2Bottom',0,51,246,43,54,0,-6712.76,-1610.77,196.339,2.17329,'577:0 579:0 '),
+(579,'CauldronRamp2Mid',0,51,246,43,54,0,-6668.28,-1664.76,229.053,1.92432,'578:0 580:0 '),
+(580,'CauldronRamp2Top',0,51,246,43,54,0,-6680,-1730.07,255.913,4.54363,'562:0 579:0 '),
+(581,'SlagPit1',0,51,1443,43,54,0,-6850.01,-1218.8,177.395,3.61294,'576:0 582:0 '),
+(582,'SlagPit2',0,51,1443,43,54,0,-6764.59,-1174.15,187.213,1.12951,'581:0 583:0 '),
+(583,'SlagPit3',0,51,1443,43,54,0,-6439.47,-1311.02,180.938,2.63197,'582:0 584:0 '),
+(584,'SlagPit4',0,51,1443,43,54,0,-6631.29,-1289.33,208.714,0.00481129,'583:0 '),
+(585,'SG_hubN1',0,51,51,43,54,0,-6686.77,-1347.22,247.961,4.79378,'562:0 586:0 588:0 589:0 '),
+(586,'CauldronTopN',0,51,246,43,54,0,-6862.1,-1188.37,240.366,5.51045,'585:0 '),
+(587,'FirewatchRidgeBottom',0,51,1442,43,54,0,-6612.66,-860.886,244.297,0.237204,'588:0 589:0 591:0 '),
+(588,'FirewatchRidgeS',0,51,1442,43,54,0,-6817.17,-866.771,248.462,4.87941,'573:0 585:0 587:0 '),
+(589,'ThoriumPointRampBottom',0,51,1442,43,54,0,-6608.41,-1025.59,244.328,1.21161,'587:0 585:0 590:0 '),
+(590,'ThoriumPointRampTop',0,51,1446,43,54,1,-6473.64,-1104.63,303.285,2.64303,'589:0 180:0 '),
+(591,'FirewatchRidgeTop1',0,51,1442,43,54,0,-6473.38,-887.709,324.088,3.80543,'587:0 592:0 '),
+(592,'FirewatchRidgeTop2',0,51,1442,43,54,0,-6502.46,-1018.74,344.372,1.2407,'591:0 '),
+(593,'SGexitEmid',0,51,51,43,54,0,-6952.2,-2064.74,282.478,5.11429,'563:0 594:0 '),
+(594,'BLexitW',0,3,3,33,45,0,-6885.86,-2233.35,242.64,0.361067,'593:0 595:0 24:0 '),
+(595,'ApocryphansRest',0,3,337,33,45,0,-6892.26,-2477.47,247.238,1.71982,'594:0 87:0 596:0 597:0 600:0 601:0 602:0 '),
+(596,'CampCaggS',0,3,344,33,45,0,-7270.91,-2407.34,268.195,5.1163,'595:0 597:0 '),
+(597,'CampCaggE',0,3,3,33,45,0,-7140.34,-2650.51,243.568,0.467924,'595:0 596:0 602:0 603:0 '),
+(598,'KargathE',0,3,3,33,45,0,-6600.53,-2373.56,254.037,0.026153,'600:0 599:0 24:0 '),
+(599,'KargathNE',0,3,3,33,45,0,-6431.02,-2454.24,321.326,3.51922,'598:0 600:0 '),
+(600,'DustbowlW',0,3,1878,33,45,0,-6718.55,-2572.24,241.801,0.471881,'595:0 598:0 599:0 601:0 602:0 '),
+(601,'DustbowlNE',0,3,1878,33,45,0,-6653.03,-2889.09,241.667,2.73974,'595:0 600:0 602:0 620:0 '),
+(602,'BL_hubC',0,3,1879,33,45,0,-6902.56,-2958.24,244.772,1.67356,'600:0 597:0 601:0 595:0 608:0 603:0 '),
+(603,'AgmondsendS',0,3,345,33,45,0,-7141.97,-3251.77,246.326,0.774282,'597:0 602:0 604:0 605:0 607:0 '),
+(604,'BL_elemsS',0,3,3,33,45,0,-7319.09,-3144.54,317.901,5.93436,'603:0 '),
+(605,'AgmondsEnd',0,3,345,33,45,0,-7033.01,-3313.39,238.277,2.5061,'603:0 606:0 607:0 609:0 '),
+(606,'BL_elemsSE',0,3,3,33,45,0,-7339.37,-3450.9,320.961,0.385524,'605:0 '),
+(607,'CampBoff',0,3,342,33,45,0,-7039.11,-3655.92,244.152,1.66966,'603:0 605:0 608:0 609:0 '),
+(608,'BL_hubN1',0,3,1877,33,45,0,-6667.51,-3285.91,241.069,2.14484,'25:0 602:0 607:0 609:0 620:0 '),
+(609,'BL_hubNE1',0,3,1898,33,45,0,-6775.23,-3555.53,245.004,5.79028,'605:0 607:0 608:0 610:0 617:0 620:0 '),
+(610,'LethlorRavineEntranceS',0,3,339,38,45,0,-6742.54,-3895.6,264.574,1.61394,'609:0 611:0 '),
+(611,'LethlorRavineS',0,3,339,38,45,0,-7002.17,-3938.58,263.889,5.47219,'610:0 612:0 '),
+(612,'LethlorRavineC',0,3,339,38,45,0,-6820.98,-4135.08,263.933,2.32276,'611:0 613:0 '),
+(613,'LethlorRavineN',0,3,339,38,45,0,-6424.74,-4106.41,263.889,3.0143,'612:0 614:0 '),
+(614,'LethlorRavineNW',0,3,339,38,45,0,-6513.4,-4004.6,264.394,5.30492,'613:0 615:0 '),
+(615,'LethlorRavineEntranceN',0,3,339,38,45,0,-6396.09,-3976.18,268.618,3.37284,'614:0 616:0 '),
+(616,'LethlorRavineExitN',0,3,1898,38,45,0,-6467.07,-3837.32,315.608,5.41801,'615:0 617:0 '),
+(617,'CampKoshS',0,3,1898,33,45,0,-6360.66,-3685.6,245.154,4.17511,'616:0 609:0 618:0 619:0 '),
+(618,'CampKosh',0,3,341,33,45,0,-6249.45,-3750.01,243.041,2.72409,'617:0 619:0 '),
+(619,'HammertoesDigsite',0,3,346,33,45,0,-6349.91,-3447.28,241.681,0.369852,'617:0 618:0 620:0 621:0 '),
+(620,'BL_hubN2',0,3,338,33,45,0,-6494.59,-3248.21,242.617,1.06886,'25:0 601:0 608:0 609:0 619:0 '),
+(621,'MakersTerrace',0,3,1897,33,45,0,-6056.99,-3302.11,258.645,3.45646,'86:0 505:0 619:0 '),
+(622,'BRM_SG3',0,25,25,46,60,0,-7496.19,-1063.83,264.543,4.72301,'570:0 623:0 628:0 '),
+(623,'BRM_chain1',0,25,25,46,60,0,-7501.48,-1151.43,269.644,1.34305,'622:0 624:0 627:0 '),
+(624,'BRM_chain2',0,25,25,46,60,0,-7599.78,-1110.62,249.93,1.94977,'623:0 625:0 '),
+(625,'BRM_chain3',0,25,25,46,60,0,-7523.43,-1048.09,180.912,0.471264,'624:0 626:0 '),
+(626,'BRM_chain4',0,25,25,46,60,0,-7383.99,-1012.09,173.658,3.00809,'625:0 '),
+(627,'BRM_BRS1',0,25,25,46,60,0,-7609.9,-1226.43,233.401,0.518375,'623:0 628:0 '),
+(628,'BRM_BS1',0,25,25,46,60,0,-7697.61,-1089.8,217.609,3.00611,'627:0 622:0 629:0 '),
+(629,'BRM_BS2',0,25,25,46,60,0,-7769.06,-1129.81,215.084,0.38328,'628:0 630:0 '),
+(630,'BRM_BS3',0,25,25,46,60,0,-7993.75,-1138.96,163.061,0.128021,'629:0 631:0 637:0 639:0 641:0 '),
+(631,'DracodarNW',0,46,2421,48,56,0,-7968.74,-817.038,131.202,4.58672,'630:0 632:0 636:0 '),
+(632,'AltarOfStormsRoad',0,46,46,48,56,0,-7803.25,-717,176.761,6.28318,'631:0 633:0 '),
+(633,'AltarOfStormsFork',0,46,255,48,56,0,-7679.67,-712.976,183.628,3.3461,'632:0 634:0 635:0 '),
+(634,'AltarOfStormsVendor',0,46,255,48,56,0,-7644.75,-636.535,200.452,4.00749,'633:0 '),
+(635,'AltarOfStorms',0,46,255,48,56,0,-7586.74,-773.071,190.859,2.70569,'633:0 '),
+(636,'DracodarW',0,46,2421,48,56,0,-8170.67,-727.141,135.21,5.81979,'631:0 637:0 '),
+(637,'DracodarS',0,46,2421,48,56,0,-8255.07,-1040.7,147.3,0.143321,'630:0 636:0 638:0 639:0 '),
+(638,'DracodarS_hill1',0,46,2421,48,56,0,-8419.15,-933.413,214.705,5.70788,'637:0 '),
+(639,'DracodarSE',0,46,46,48,56,0,-8254.03,-1168.68,144.64,0.0510463,'630:0 637:0 640:0 641:0 '),
+(640,'DracodarS_hill2',0,46,46,48,56,0,-8431.62,-1227.92,207.816,0.498725,'639:0 '),
+(641,'DracodarHub',0,46,46,48,56,0,-8073.86,-1401.78,132.05,4.03301,'630:0 639:0 642:0 644:0 645:0 '),
+(642,'BlackrockStrongholdOutside',0,46,46,48,56,0,-7757.29,-1591.7,133.263,1.43923,'641:0 643:0 644:0 646:0 '),
+(643,'BlackrockStrongholdInside',0,46,252,48,56,0,-7698.11,-1443.02,139.787,4.00159,'642:0 '),
+(644,'PillarOfAshS',0,46,46,48,56,0,-8232.79,-1737.58,147.888,6.17911,'641:0 642:0 645:0 658:0 '),
+(645,'PillarOfAshE',0,46,253,48,56,0,-8102.12,-1922.65,134.695,1.31201,'641:0 644:0 646:0 647:0 658:0 '),
+(646,'ThaurissanNW',0,46,250,48,56,0,-7704.8,-2045.32,133.437,1.61634,'642:0 645:0 139:0 647:0 648:0 '),
+(647,'DreadmaulRockW',0,46,249,48,56,0,-7971.45,-2449.46,130.882,1.47692,'646:0 645:0 648:0 652:0 654:0 658:0 659:0 660:0 '),
+(648,'DreadmaulRockNW',0,46,249,48,56,0,-7665.96,-2453.95,147.044,2.94798,'647:0 646:0 138:0 649:0 654:0 '),
+(649,'DreadmaulRockNE',0,46,249,48,56,0,-7765.85,-2707.5,172.836,1.14313,'648:0 650:0 655:0 '),
+(650,'DreadmaulRockSE',0,46,2420,48,56,0,-8161.75,-2869.02,134.8,0.000368118,'649:0 138:0 651:0 652:0 659:0 '),
+(651,'MorgansVigil',0,46,2418,48,56,0,-8379.57,-2741.96,186.492,6.13436,'650:0 652:0 659:0 '),
+(652,'DreadmaulRockTop1',0,46,249,48,56,0,-7971.64,-2664.1,198.213,2.32517,'647:0 650:0 651:0 138:0 653:0 '),
+(653,'DreadmaulRockTop2',0,46,249,48,56,0,-7873.63,-2613.13,221.072,2.92403,'652:0 '),
+(654,'DreadmaulRockNWW',0,46,249,48,56,0,-7776.13,-2493.23,160.084,5.03518,'648:0 647:0 '),
+(655,'DreadmaulRockInside1',0,46,249,48,56,0,-7848.98,-2661.75,172.955,1.73534,'649:0 656:0 657:0 '),
+(656,'DreadmaulRockInside2',0,46,249,48,56,0,-7961.48,-2603.36,173.834,6.08133,'655:0 '),
+(657,'DreadmaulRockInside3',0,46,249,48,56,0,-7975.04,-2695.45,157.958,5.80842,'655:0 '),
+(658,'DreadmaulPassW',0,46,46,48,56,0,-8216.14,-2308.1,151.442,1.03911,'644:0 645:0 647:0 659:0 '),
+(659,'DreadmaulPassN',0,46,46,48,56,0,-8150.16,-2629.44,133.659,1.18246,'647:0 650:0 651:0 658:0 660:0 '),
+(660,'DreadmaulPass',0,46,2417,48,56,0,-8431.68,-2546.4,133.207,6.07628,'647:0 659:0 661:0 '),
+(661,'RedridgeExitN',0,44,44,13,25,0,-8900,-2574.56,131.851,0.152413,'660:0 75:0 663:0 '),
+(662,'RendersRockInside',0,44,998,13,25,0,-8738.68,-2205.37,149.754,2.59501,'75:0 '),
+(663,'AlthersMillEntrance',0,44,97,13,25,0,-9153.73,-2628.6,109.561,0.156359,'661:0 664:0 690:0 '),
+(664,'RedridgeHub1',0,44,44,13,25,0,-9099.79,-2451.23,120.464,0.197585,'663:0 665:0 667:0 669:0 '),
+(665,'RedridgeBridgeN',0,44,69,13,25,2,-9287.68,-2284.47,67.5443,5.81789,'664:0 10:0 672:0 673:0 '),
+(666,'RedridgeW',0,44,44,13,25,2,-9312.11,-1873.26,82.1473,5.08747,'10:0 672:0 '),
+(667,'RedridgeCanyons1',0,44,95,13,25,2,-8916.14,-2305.07,134.682,3.96044,'664:0 668:0 670:0 '),
+(668,'RedridgeCanyons2',0,44,95,13,25,2,-8864.57,-2150.9,133.327,3.71892,'667:0 669:0 670:0 '),
+(669,'RedridgeCanyons3',0,44,69,13,25,2,-9145.97,-2198.54,119.516,4.7478,'668:0 664:0 670:0 '),
+(670,'RedridgeCanyons4',0,44,95,13,25,2,-9135.91,-2029.37,127.775,5.01877,'667:0 668:0 669:0 77:0 '),
+(671,'RethbanCavernsInside',0,44,98,13,25,0,-8826.83,-1947.01,133.091,2.11555,'77:0 '),
+(672,'RedridgeBridgeS',0,44,44,13,25,2,-9503.49,-2289.12,74.7234,1.13183,'665:0 666:0 674:0 675:0 '),
+(673,'EverstillN',0,44,68,13,25,2,-9263.45,-2458.04,56.1636,1.20646,'665:0 '),
+(674,'ThreeCorners',0,44,1002,13,25,0,-9607.09,-2055.97,65.077,4.99696,'672:0 675:0 692:0 693:0 694:0 '),
+(675,'RedridgeS1',0,44,1001,13,25,0,-9713.82,-2284.16,63.9369,5.46531,'672:0 674:0 676:0 677:0 '),
+(676,'RedridgeS2',0,44,68,13,25,0,-9620.32,-2514.61,59.4453,0.974015,'675:0 677:0 '),
+(677,'RedridgeS3',0,44,1001,13,25,0,-9624.96,-2717.09,56.3955,1.53951,'676:0 675:0 678:0 679:0 691:0 '),
+(678,'StonewatchS',0,44,70,18,25,0,-9468.55,-3007.78,135.551,1.52185,'677:0 689:0 '),
+(679,'RedridgeS4',0,44,997,13,25,0,-9751.37,-3185.18,58.6091,5.63735,'677:0 680:0 681:0 '),
+(680,'RedridgeE1',0,44,997,13,25,0,-9611,-3315.1,49.8404,2.09716,'679:0 681:0 682:0 683:0 684:0 '),
+(681,'RedridgeE2',0,44,71,13,25,0,-9499.43,-3249.9,50.6,3.02197,'679:0 680:0 '),
+(682,'RedridgeE3',0,44,44,18,25,0,-9598.71,-3503.57,121.964,2.30923,'680:0 683:0 '),
+(683,'RedridgeE4',0,44,71,18,25,0,-9465.03,-3460.8,116.076,2.91242,'680:0 682:0 74:0 684:0 '),
+(684,'RedridgeE5',0,44,71,18,25,0,-9469.61,-3328.04,5.51622,4.94268,'680:0 683:0 '),
+(685,'RedridgeNE',0,44,1000,18,25,0,-9116.4,-3271.35,104.33,2.00332,'74:0 686:0 687:0 '),
+(686,'RedridgeE6',0,44,1000,18,25,0,-9317.33,-3210.41,107.191,5.54352,'685:0 74:0 687:0 '),
+(687,'StonewatchFork',0,44,70,18,25,0,-9195.1,-3020.88,94.6252,4.57746,'686:0 685:0 688:0 689:0 690:0 '),
+(688,'StonewatchTower',0,44,999,18,25,0,-9297.56,-2958.62,128.754,5.64364,'687:0 689:0 '),
+(689,'StonewatchTop',0,44,2099,18,25,0,-9364.92,-3072.52,164.756,3.2698,'687:0 688:0 678:0 '),
+(690,'AlthersMillCenter',0,44,97,13,25,0,-9215.61,-2770.74,89.3399,4.66193,'687:0 663:0 '),
+(691,'EverstillE',0,44,44,13,25,0,-9457.68,-2870.36,85.486,2.24488,'677:0 '),
+(692,'ThreeCornersCamp1',0,44,1002,13,25,0,-9472.89,-1956.22,83.561,4.19346,'674:0 693:0 694:0 '),
+(693,'RedridgeExitW1',0,44,1002,13,25,2,-9620.34,-1809.71,51.8565,1.49408,'692:0 674:0 694:0 696:0 '),
+(694,'RedridgeExitW2',0,44,1002,13,25,0,-9831.1,-1766.69,23.8242,2.51983,'692:0 674:0 693:0 695:0 792:0 '),
+(695,'ElwynnHubS1',0,12,798,1,10,2,-9928.36,-1115.12,24.1788,6.21189,'705:0 704:0 694:0 696:0 706:0 '),
+(696,'ElwynnHubE1',0,12,12,1,10,2,-9659.48,-1341.54,48.8561,4.72993,'693:0 697:0 698:0 704:0 695:0 '),
+(697,'EastvaleLC1',0,12,88,1,10,2,-9405,-1343.43,50.0284,2.89799,'696:0 698:0 699:0 '),
+(698,'StoneCairnLakeSE',0,12,86,1,10,2,-9299.52,-1180.36,69.4951,3.31622,'696:0 697:0 699:0 701:0 797:0 '),
+(699,'StoneCairnLakeNE',0,12,86,1,10,2,-8956.22,-1264.96,77.7779,2.94511,'700:0 697:0 698:0 797:0 '),
+(700,'StoneCairnLakeNW',0,12,86,1,10,2,-8860.62,-826.796,71.9141,4.57088,'699:0 701:0 797:0 '),
+(701,'StoneCairnLakeSW',0,12,12,1,10,2,-9355.59,-802.598,64.4981,0.692979,'89:0 700:0 708:0 698:0 705:0 706:0 707:0 797:0 '),
+(702,'JasperlodeMineInside1',0,12,54,1,10,2,-9125.33,-585.357,58.3507,3.90606,'89:0 703:0 '),
+(703,'JasperlodeMineInside2',0,12,54,1,10,2,-9049.44,-618.138,53.1456,4.05725,'702:0 '),
+(704,'ElwynnHubE2',0,12,12,1,10,2,-9613.79,-1100.85,40.5009,4.62273,'696:0 705:0 695:0 '),
+(705,'ElwynnHubE3',0,12,12,1,10,2,-9618.95,-1024.81,40.4731,4.99973,'704:0 695:0 701:0 706:0 707:0 '),
+(706,'BrackwellPumpkinPatch',0,12,62,1,10,2,-9777.88,-877.924,39.5328,5.4101,'705:0 701:0 695:0 707:0 '),
+(707,'ElwynnHubC1',0,12,12,1,10,2,-9609.57,-527.364,55.1285,4.48725,'89:0 708:0 701:0 705:0 706:0 716:0 '),
+(708,'CrystalLakeE',0,12,18,1,10,2,-9464.16,-422.645,58.9952,3.63313,'89:0 701:0 707:0 709:0 '),
+(709,'CrystalLakeW',0,12,18,1,10,2,-9470.07,-173.045,59.9322,4.58858,'708:0 710:0 7:0 '),
+(710,'NorthshireExit',0,12,12,1,10,2,-9133.8,-66.2742,82.4151,1.35237,'709:0 16:0 13:0 7:0 '),
+(711,'EchoRidgeMineInside',0,12,34,1,10,2,-8560.22,-214.447,85.0045,2.95145,'70:0 '),
+(712,'TradeDistrict',0,1519,1519,1,60,3,-8794.44,645.505,94.4595,3.54245,'16:0 '),
+(713,'ForestsEdgeS',0,12,60,1,10,2,-10070.2,658.114,37.3319,5.88491,'72:0 88:0 717:0 '),
+(714,'FargodeepMineOutside',0,12,57,1,10,2,-9868.23,221.066,14.0194,6.19474,'7:0 71:0 72:0 715:0 '),
+(715,'FargodeepMineInside',0,12,57,1,10,2,-9779.25,104.966,4.57989,3.01191,'714:0 '),
+(716,'ElwynnHubS2',0,12,12,1,10,2,-9808.32,-269.092,40.0067,5.15408,'71:0 707:0 '),
+(717,'ElwynnExitW',0,12,60,1,10,2,-9747.07,741.601,25.5892,4.55914,'7:0 88:0 72:0 713:0 718:0 '),
+(718,'WestfallExitNE',0,40,916,8,20,2,-9853.3,918.261,30.2216,5.34454,'717:0 719:0 745:0 746:0 '),
+(719,'Longshore1',0,40,2,8,20,2,-9616.19,1059.16,5.79699,0.013632,'720:0 718:0 745:0 '),
+(720,'Longshore2',0,40,2,8,20,2,-9634.2,1389.29,9.09694,4.71817,'719:0 721:0 '),
+(721,'Longshore3',0,40,2,8,20,2,-9648.12,1575.23,3.54258,4.75547,'720:0 722:0 '),
+(722,'Longshore4',0,40,2,8,20,2,-9776.1,1654.24,11.5179,2.15188,'721:0 723:0 742:0 743:0 '),
+(723,'Longshore5',0,40,2,8,20,2,-9985.75,1913.6,4.86301,5.35756,'722:0 724:0 742:0 '),
+(724,'Longshore6',0,40,2,8,20,2,-10334,2061.94,3.69692,5.05125,'723:0 725:0 739:0 '),
+(725,'Longshore7',0,40,2,8,20,2,-10695.4,2102.07,8.28685,6.14098,'724:0 726:0 738:0 '),
+(726,'Longshore8',0,40,2,8,20,2,-10975.2,2108.77,-0.213533,6.27058,'725:0 727:0 737:0 '),
+(727,'Longshore9',0,40,2,8,20,2,-11307.8,1926.18,9.26031,4.25015,'726:0 728:0 '),
+(728,'Longshore10',0,40,2,8,20,2,-11466.2,1725.82,8.61195,0.641238,'727:0 729:0 '),
+(729,'DaggerHillsW',0,40,920,8,20,2,-11264.1,1714.56,39.9062,4.76851,'728:0 730:0 737:0 '),
+(730,'DaggerHillsC1',0,40,920,8,20,2,-11258.8,1470.77,88.9353,4.93148,'729:0 731:0 '),
+(731,'DaggerHillsC2',0,40,920,8,20,2,-11211.1,1297.89,91.1699,1.90966,'730:0 732:0 733:0 '),
+(732,'DaggerHillsNook',0,40,920,8,20,2,-11235.2,1182.36,91.6522,1.1871,'731:0 733:0 '),
+(733,'DaggerHillsE',0,40,920,8,20,2,-11062.7,1163.02,43.0261,2.75789,'736:0 732:0 731:0 734:0 735:0 750:0 '),
+(734,'DustPlains',0,40,922,8,20,2,-11152,739.176,32.5228,1.40505,'733:0 735:0 750:0 '),
+(735,'DeadAcre',0,40,917,8,20,2,-10770.8,864.294,33.1505,2.913,'736:0 733:0 734:0 746:0 750:0 '),
+(736,'WestfallHubC1',0,40,40,8,20,2,-10842.5,1196.94,34.875,1.14192,'12:0 15:0 735:0 733:0 738:0 741:0 750:0 '),
+(737,'DemontsPlace',0,40,921,8,20,2,-11087.9,1894.97,35.4372,5.06105,'726:0 729:0 12:0 738:0 '),
+(738,'AlexstonFarmstead',0,40,219,8,20,2,-10615,1671.77,41.41,4.1441,'737:0 725:0 12:0 741:0 742:0 736:0 '),
+(739,'GoldCoastQuarry',0,40,113,8,20,2,-10403.7,1909.99,9.96272,4.64675,'724:0 740:0 741:0 '),
+(740,'GoldCoastQuarryInside',0,40,113,8,20,2,-10575.3,1990.25,-8.03668,3.01509,'739:0 '),
+(741,'WestfallHubC2',0,40,40,8,20,2,-10495.4,1349.24,42.6842,1.76042,'738:0 739:0 15:0 742:0 745:0 736:0 '),
+(742,'WestfallHubC3',0,40,918,8,20,2,-10274.9,1408.84,38.9079,3.90454,'741:0 738:0 723:0 722:0 15:0 743:0 745:0 '),
+(743,'JangolodeMine',0,40,111,8,20,2,-10017,1466.37,41.0745,6.08639,'742:0 722:0 744:0 745:0 '),
+(744,'JangolodeMineInside',0,40,111,8,20,2,-9887.11,1427.15,40.0346,0.896887,'743:0 '),
+(745,'SaldeansFarm',0,40,107,8,20,2,-10154.1,1116.55,36.8816,1.65283,'15:0 718:0 719:0 741:0 742:0 743:0 746:0 '),
+(746,'WestfallHubE1',0,40,40,8,20,2,-10333.7,859.579,39.774,0.563072,'15:0 718:0 735:0 745:0 752:0 '),
+(747,'DefiasHideout',0,1581,1581,15,22,2,-11112,1483.69,32.39,3.56723,'12:0 748:0 '),
+(748,'Deadmines1',0,1581,1581,15,22,2,-11252.8,1533.82,28.6803,0.814416,'747:0 749:0 '),
+(749,'Deadmines2',0,1581,1581,15,22,2,-11214.4,1638.37,27.2613,1.55073,'748:0 '),
+(750,'WestfallExitSE',0,40,40,8,20,2,-10870.3,667.353,30.8385,4.48578,'733:0 734:0 735:0 736:0 15:0 751:0 '),
+(751,'DuskwoodExitW',0,10,10,18,30,0,-10857.5,557.367,30.4883,6.27453,'750:0 752:0 14:0 753:0 755:0 '),
+(752,'HushedBankN',0,10,1097,18,30,0,-10326.3,623.959,26.42,3.17024,'746:0 751:0 757:0 758:0 763:0 '),
+(753,'AddlesSteadW',0,10,536,18,30,0,-11054.9,270.776,25.2035,6.01338,'751:0 14:0 754:0 '),
+(754,'AddlesSteadE',0,10,536,18,30,0,-10997.4,179.443,30.4059,1.04377,'753:0 14:0 766:0 '),
+(755,'RHCemetaryS',0,10,492,18,30,0,-10587.6,294.965,31.0441,0.0129175,'751:0 14:0 756:0 757:0 765:0 766:0 '),
+(756,'RHCemetaryNE',0,10,492,24,30,0,-10398,201.223,34.2462,5.21064,'755:0 757:0 758:0 762:0 764:0 765:0 '),
+(757,'RHCemetaryW',0,10,492,22,30,0,-10427.4,409.679,46.6267,4.40525,'752:0 755:0 756:0 758:0 759:0 '),
+(758,'RHCemetaryN',0,10,243,24,30,0,-10308.2,348.036,59.693,3.07006,'752:0 757:0 756:0 '),
+(759,'DawningWoodCatacombs1',0,10,2098,18,30,0,-10261.5,383.964,10.414,2.92673,'757:0 760:0 '),
+(760,'DawningWoodCatacombs2',0,10,2098,18,30,0,-10234.6,284.99,2.79944,4.82935,'759:0 761:0 '),
+(761,'DawningWoodCatacombs3',0,10,2098,18,30,0,-10220.1,166.144,0.047382,3.23144,'760:0 762:0 '),
+(762,'DawningWoodCatacombs4',0,10,2098,18,30,0,-10338.4,136.513,4.82896,0.380849,'756:0 761:0 '),
+(763,'DuskwoodNW1',0,10,799,18,30,0,-10173.2,350.099,32.3759,4.62356,'752:0 764:0 '),
+(764,'DuskwoodNW2',0,10,799,18,30,0,-10183.8,-55.3832,27.6626,5.67208,'763:0 756:0 765:0 793:0 '),
+(765,'DuskwoodC1',0,10,10,18,30,0,-10482,-16.5716,51.5694,0.81242,'764:0 755:0 756:0 766:0 '),
+(766,'DuskwoodC2',0,10,10,18,30,0,-10750.8,67.4617,28.3337,1.80202,'765:0 755:0 14:0 754:0 767:0 '),
+(767,'DuskwoodC3',0,10,10,18,30,0,-10910.1,-371.894,39.8351,3.06651,'766:0 768:0 769:0 773:0 774:0 775:0 779:0 795:0 '),
+(768,'DuskwoodExitS',0,10,10,18,30,0,-11268.2,-368.936,61.3823,6.14723,'767:0 858:0 '),
+(769,'VulGolOgreMound1',0,10,93,24,30,0,-11005.9,-176.407,14.5532,5.12818,'767:0 770:0 771:0 '),
+(770,'VulGolOgreMound2',0,10,93,24,30,0,-10959.3,-38.5543,13.6432,4.44096,'769:0 771:0 '),
+(771,'VulGolOgreMound3',0,10,93,24,30,0,-11083.6,-80.7448,16.7954,5.39522,'769:0 770:0 772:0 '),
+(772,'VulGolOgreMoundInside',0,10,93,24,30,0,-11234.1,-172.07,4.22438,4.5174,'771:0 '),
+(773,'YorgenFarmsteadW',0,10,245,24,30,0,-11096.9,-452.028,32.1764,4.54422,'767:0 774:0 '),
+(774,'YorgenFarmsteadE',0,10,245,24,30,0,-11052.8,-598.054,29.3447,1.47723,'767:0 773:0 776:0 '),
+(775,'DuskwoodC4',0,10,10,18,30,0,-10908,-739.892,54.8364,0.583838,'767:0 776:0 778:0 779:0 '),
+(776,'RottingOrchardW',0,10,241,18,30,0,-10986.3,-770.892,55.1122,1.55183,'774:0 775:0 777:0 778:0 '),
+(777,'RottingOrchardS',0,10,241,18,30,0,-11103.5,-891.729,62.1149,0.69773,'776:0 778:0 '),
+(778,'DuskwoodC5',0,10,10,18,30,0,-10823,-837.935,55.75,1.63037,'775:0 776:0 777:0 779:0 780:0 '),
+(779,'DuskwoodC6',0,10,10,18,30,0,-10768,-644.008,42.2621,2.90859,'767:0 775:0 778:0 786:0 '),
+(780,'DuskwoodE1',0,10,42,18,30,0,-10757.1,-1156.72,24.9918,1.69202,'778:0 124:0 782:0 783:0 '),
+(781,'RolandsDoomInside',0,10,2161,24,30,0,-11157.5,-1167.04,42.5151,0.315576,'124:0 '),
+(782,'TranquilGardensCemetery',0,10,121,18,30,0,-11023.4,-1315.7,53.1833,6.14911,'780:0 783:0 '),
+(783,'DuskwoodE2',0,10,10,18,30,0,-10813.8,-1366.37,42.2527,0.00140238,'780:0 782:0 3:0 784:0 794:0 '),
+(784,'DarkshireExitE',0,10,10,18,30,0,-10539.7,-1338.09,48.0906,1.65268,'785:0 783:0 3:0 '),
+(785,'DuskwoodExitE',0,10,10,18,30,0,-10442.9,-1486.98,73.8977,5.13748,'784:0 798:0 '),
+(786,'DuskwoodC7',0,10,242,24,30,0,-10451.9,-825.607,50.4132,2.61635,'779:0 787:0 788:0 793:0 '),
+(787,'DuskwoodC8',0,10,242,24,30,0,-10647.9,-908.344,50.934,5.93661,'786:0 3:0 788:0 '),
+(788,'DuskwoodNE1',0,10,242,18,30,0,-10219.2,-1021.98,31.9202,2.92658,'786:0 787:0 3:0 789:0 790:0 793:0 '),
+(789,'ManorMismantle',0,10,1098,24,30,0,-10332.7,-1264.03,35.3024,1.53643,'788:0 3:0 790:0 '),
+(790,'DuskwoodNE2',0,10,10,18,30,0,-10181.4,-1145.35,24.304,3.28393,'788:0 789:0 791:0 793:0 '),
+(791,'DuskwoodNE3',0,10,10,18,30,0,-10067.1,-1379.68,29.9246,1.99195,'790:0 792:0 '),
+(792,'DuskwoodExitNE',0,10,10,18,30,0,-9963.01,-1637.21,27.2574,2.08816,'694:0 791:0 '),
+(793,'DuskwoodN',0,10,799,18,30,0,-10020.5,-660.012,39.1578,1.66406,'790:0 788:0 764:0 786:0 '),
+(794,'Naraxis',0,10,10,18,30,0,-10619.4,-1502.44,90.534,3.1465,'783:0 '),
+(795,'TwilightGroveEntrance',0,10,10,50,60,0,-10718.7,-425.681,126.691,0.442773,'767:0 796:0 '),
+(796,'TwilightGrove',0,10,856,50,60,0,-10419.3,-421.597,45.6561,3.03852,'795:0 '),
+(797,'HeroesVigil',0,12,56,1,10,0,-9101.04,-1034.1,72.9837,5.20227,'698:0 699:0 700:0 701:0 '),
+(798,'DWPExitW',0,41,2697,50,60,0,-10464.2,-1734.78,86.7801,1.49361,'785:0 171:0 802:0 '),
+(799,'DeadwindRavineSW',0,41,2558,50,60,0,-10919.4,-1957.74,114.777,4.67839,'171:0 800:0 '),
+(800,'TheViceW',0,41,2561,50,60,0,-10843.3,-2118.87,121.161,1.51324,'799:0 172:0 79:0 '),
+(801,'DWPExitE',0,41,2938,50,60,0,-10593.5,-2125.78,90.9212,3.83802,'172:0 170:0 802:0 811:0 '),
+(802,'DeadsmansCrossingE',0,41,41,50,60,0,-10437,-2037.61,94.6245,1.59492,'798:0 801:0 810:0 '),
+(803,'GroshgokCompoundInside',0,41,2937,50,60,0,-11169.4,-2483.11,105.139,0.944598,'79:0 '),
+(804,'KarazhanOutskirts',0,41,2562,50,60,0,-11148.9,-2130,55.9803,1.2403,'79:0 805:0 806:0 '),
+(805,'Karazhan',0,41,2562,50,60,0,-11115.2,-2008.72,48.4017,4.31317,'804:0 806:0 '),
+(806,'KarazhanCellarEntrance',0,41,2837,50,60,0,-11173.4,-2033.69,47.0759,0.798522,'804:0 805:0 807:0 '),
+(807,'KarazhanCellar1',0,41,2837,50,60,0,-11100.4,-1963.77,1.93936,4.49657,'806:0 808:0 '),
+(808,'KarazhanCellar2',0,41,2837,50,60,0,-11159.5,-1898.41,-17.7918,6.21463,'807:0 809:0 '),
+(809,'KarazhanCellar3',0,41,2837,50,60,0,-11033.9,-1910.04,-32.9889,4.98353,'808:0 '),
+(810,'DeadmansCrossingBottom',0,41,41,50,60,0,-10282.6,-2019.49,51.0186,2.21028,'802:0 '),
+(811,'SSExitW',0,8,8,33,45,0,-10546.2,-2376.39,84.2413,1.87648,'801:0 812:0 '),
+(812,'SSW1',0,8,8,33,45,0,-10381.8,-2424.26,52.7345,2.75809,'811:0 813:0 '),
+(813,'SSW2',0,8,8,33,45,0,-10427.8,-2549.06,24.1947,5.68762,'812:0 814:0 830:0 '),
+(814,'IthariusCaveOutside',0,8,1777,33,45,0,-10561.3,-2508.68,22.0709,5.83489,'813:0 815:0 816:0 '),
+(815,'IthariusCave',0,8,1777,33,45,0,-10677.4,-2531.21,28.912,6.2649,'814:0 '),
+(816,'SSCRW1',0,8,1780,33,45,0,-10387.5,-2710.03,21.6778,1.56036,'814:0 817:0 818:0 819:0 830:0 '),
+(817,'MistyValley',0,8,116,33,45,0,-10110,-2413.91,29.9136,4.35049,'816:0 818:0 '),
+(818,'SSW3',0,8,8,33,45,0,-10320.4,-2794.27,21.9908,1.07734,'817:0 816:0 819:0 820:0 829:0 830:0 '),
+(819,'Harborage',0,8,657,33,45,3,-10113,-2807.71,22.1444,3.06047,'818:0 816:0 820:0 829:0 '),
+(820,'SSN1',0,8,1798,33,45,0,-10099.4,-3266.23,20.4381,1.58785,'818:0 819:0 821:0 827:0 828:0 829:0 '),
+(821,'SSN2',0,8,76,33,45,0,-9974.74,-3687.45,21.6788,2.09247,'820:0 822:0 823:0 827:0 828:0 829:0 '),
+(822,'SSNE1',0,8,2403,33,45,0,-9634.53,-3969.85,0.0000146627,2.75613,'821:0 823:0 '),
+(823,'SSNE2',0,8,300,33,45,0,-10034.8,-4306.49,1.78832,0.101491,'822:0 821:0 824:0 826:0 827:0 '),
+(824,'SSE',0,8,300,33,45,0,-10512,-4371.71,6.04597,6.27469,'823:0 825:0 80:0 826:0 827:0 '),
+(825,'SSSE',0,8,300,33,45,0,-11038.3,-4116.28,1.98503,5.82703,'186:0 824:0 80:0 '),
+(826,'PoolOfTearsE',0,8,1778,33,45,0,-10444.5,-4087.57,23.9872,1.47592,'80:0 186:0 823:0 824:0 827:0 '),
+(827,'PoolOfTearsN',0,8,8,33,45,0,-10147.3,-3802.05,22.1649,2.27113,'820:0 821:0 823:0 824:0 826:0 828:0 829:0 '),
+(828,'PoolOfTearsW',0,8,8,33,45,0,-10377.4,-3577.61,22.0023,3.94206,'820:0 821:0 827:0 80:0 51:0 829:0 '),
+(829,'SSC',0,8,1798,33,45,0,-10292.9,-3192.2,22.1489,5.69742,'818:0 819:0 820:0 821:0 827:0 828:0 51:0 830:0 '),
+(830,'SSExitS',0,8,8,33,45,0,-10553.9,-3043.33,24.794,0.0857489,'813:0 816:0 818:0 829:0 51:0 831:0 '),
+(831,'SSExitSS',0,4,4,43,54,0,-10690.8,-2978.8,37.8508,5.87412,'830:0 834:0 '),
+(832,'StagalbogInside1',0,8,1817,33,45,0,-10966.8,-3697.03,11.0105,4.21105,'80:0 833:0 '),
+(833,'StagalbogInside2',0,8,1817,33,45,0,-10894.6,-3613.42,16.0499,6.1176,'832:0 '),
+(834,'BLExitN',0,4,4,43,54,0,-10811.4,-2992.21,41.134,0.16765,'831:0 835:0 839:0 846:0 '),
+(835,'BLNW1',0,4,1437,43,54,0,-11009.6,-2785.5,4.70615,5.63206,'834:0 836:0 839:0 840:0 '),
+(836,'DreadmaulHoldEntrance',0,4,1437,43,54,0,-10916.9,-2714.76,7.63624,3.85903,'835:0 837:0 838:0 '),
+(837,'DreadmaulHoldRight',0,4,1437,43,54,0,-10814.2,-2705.35,8.14439,3.20125,'836:0 838:0 '),
+(838,'DreadmaulHoldLeft',0,4,1437,43,54,0,-10859.8,-2615.61,8.07541,4.52661,'836:0 837:0 '),
+(839,'BLNW2',0,4,4,43,54,0,-11080.5,-2903.3,9.18506,0.371865,'835:0 834:0 196:0 '),
+(840,'BLW1',0,4,4,43,54,0,-11249.1,-2724.95,13.3527,2.49675,'835:0 841:0 842:0 '),
+(841,'DreadmaulPost',0,4,1439,43,54,0,-11528.8,-2858.71,8.50437,6.19557,'840:0 196:0 842:0 856:0 '),
+(842,'BLAltarOfStormsBottom',0,4,4,43,54,0,-11501.6,-2718.85,5.65372,0.900431,'840:0 841:0 843:0 856:0 '),
+(843,'BLAltarOfStormsMid',0,4,4,47,54,0,-11381.5,-2566.03,75.8033,3.74358,'842:0 844:0 '),
+(844,'BLAltarOfStormsTop',0,4,1441,47,54,0,-11255.9,-2556.41,97.0494,2.9896,'843:0 '),
+(845,'BLE1',0,4,4,43,54,0,-11149.6,-3232.6,8.07553,2.30354,'196:0 846:0 850:0 '),
+(846,'NethergardeOutside',0,4,1438,43,54,0,-10961.7,-3200.5,45.5708,0.954623,'834:0 845:0 847:0 '),
+(847,'NethergardeInside1',0,4,1438,43,54,2,-11008.9,-3340.48,64.7225,4.78147,'846:0 848:0 '),
+(848,'NethergardeInside2',0,4,1438,43,54,3,-10993.2,-3453.24,64.8707,3.21459,'847:0 849:0 '),
+(849,'NethergardeInside3',0,4,1438,43,54,2,-11112.2,-3438.11,79.0946,6.1402,'848:0 '),
+(850,'BLE2',0,4,1440,43,54,0,-11310.9,-3410.18,7.46828,4.16649,'845:0 851:0 852:0 '),
+(851,'BLE2Inside',0,4,1440,43,54,0,-11225.8,-3486.48,8.69295,2.17551,'850:0 '),
+(852,'BLE3',0,4,4,43,54,0,-11438.8,-3304.34,7.30604,5.76674,'196:0 850:0 853:0 854:0 '),
+(853,'BLSE',0,4,72,43,54,0,-11632.5,-3381.23,14.577,0.215935,'852:0 854:0 855:0 '),
+(854,'BLS1',0,4,4,43,54,0,-11607.8,-3099.85,7.81021,5.30924,'196:0 852:0 853:0 855:0 '),
+(855,'BLS2',0,4,72,43,54,0,-11765.8,-2959.84,7.91609,5.25623,'853:0 854:0 856:0 '),
+(856,'BLS3',0,4,4,43,54,0,-11716.6,-2785.99,8.27783,3.20635,'855:0 841:0 842:0 857:0 '),
+(857,'TaintedScar1',0,4,73,55,60,0,-11907.8,-2658.64,-2.15637,5.48008,'856:0 '),
+(858,'SVExitN',0,33,33,33,45,0,-11362.1,-380.82,64.9035,0.170793,'768:0 859:0 '),
+(859,'SVExitNFork',0,33,33,33,45,0,-11397.1,-284.376,58.1739,3.29667,'858:0 860:0 861:0 '),
+(860,'RebelCamp',0,33,99,33,45,3,-11314.2,-182.813,75.1397,3.66777,'859:0 '),
+(861,'SVEntranceN',0,33,33,33,45,0,-11511.9,-302.586,38.7986,0.353382,'859:0 863:0 864:0 862:0 '),
+(862,'NesingwarysExpeditionCamp',0,33,100,33,45,0,-11616,-50.0157,10.9823,4.49439,'861:0 879:0 880:0 881:0 901:0 902:0 907:0 '),
+(863,'SVNBridge1N',0,33,33,33,45,0,-11604.1,-282.333,37.221,5.64107,'861:0 879:0 '),
+(864,'SVNHubN1',0,33,33,33,45,0,-11643.7,-473.703,17.1608,0.3141,'861:0 865:0 873:0 '),
+(865,'KurzensCompound',0,33,101,33,45,0,-11604,-644.056,29.157,3.77181,'864:0 866:0 872:0 '),
+(866,'TheStockpile1',0,33,106,33,45,0,-11461.5,-750.28,30.6105,4.24893,'865:0 867:0 '),
+(867,'TheStockpile2',0,33,106,33,45,0,-11514.8,-845.839,22.0076,3.08261,'866:0 868:0 869:0 '),
+(868,'TheStockpile3',0,33,106,33,45,0,-11418.4,-794.929,14.9653,3.89354,'867:0 '),
+(869,'TheStockpile4',0,33,106,33,45,0,-11506.4,-946.763,29.2275,0.414209,'867:0 870:0 '),
+(870,'TheStockpile5',0,33,106,33,45,0,-11406.8,-896.737,18.0813,0.89682,'869:0 871:0 '),
+(871,'TheStockpile6',0,33,106,33,45,0,-11337.1,-985.396,27.3203,1.9202,'870:0 '),
+(872,'SVNHubN2',0,33,33,33,45,0,-11729.7,-799.127,29.6214,0.89486,'865:0 873:0 875:0 913:0 '),
+(873,'VentureCoBaseCamp',0,33,1760,33,45,0,-11959.6,-531.751,11.3978,5.11834,'872:0 864:0 874:0 875:0 913:0 '),
+(874,'SVNHub1',0,33,33,33,45,0,-12225,-546.002,28.8839,0.0407319,'873:0 875:0 911:0 913:0 915:0 '),
+(875,'SVE1',0,33,33,33,45,0,-12149.1,-965.968,32.4681,1.43677,'872:0 873:0 874:0 876:0 878:0 913:0 '),
+(876,'MoshoggOgreMound',0,33,105,33,45,0,-12352.7,-972.262,13.1171,5.38338,'875:0 877:0 878:0 913:0 '),
+(877,'MoshoggOgreMoundInside',0,33,105,33,45,0,-12364,-1147.48,0.104103,2.92311,'876:0 '),
+(878,'MoshoggOgreMoundUpper',0,33,105,33,45,0,-12466.5,-881.644,39.1084,5.72306,'875:0 876:0 914:0 918:0 '),
+(879,'SVNBridge1C',0,33,33,33,45,0,-11710.1,-210.005,39.5643,5.90174,'863:0 880:0 862:0 '),
+(880,'SVNBridge1S',0,33,33,33,45,0,-11818.3,-43.4252,39.7487,5.27146,'879:0 862:0 903:0 905:0 907:0 '),
+(881,'SVNHubW1',0,33,33,33,45,0,-11518.9,255.102,25.1192,4.23669,'862:0 882:0 883:0 901:0 '),
+(882,'SVNHubW2',0,33,33,33,45,0,-11502.5,373.117,53.2392,3.3217,'881:0 883:0 '),
+(883,'ZulKundaNE',0,33,33,33,45,0,-11650.7,401.397,42.8581,5.68183,'881:0 882:0 884:0 889:0 890:0 '),
+(884,'ZulKundaE',0,33,33,33,45,0,-11785.5,436.17,47.4037,6.2807,'883:0 885:0 889:0 899:0 '),
+(885,'ZulKundaSE',0,33,33,33,45,0,-11863.3,560.263,47.0214,5.06137,'884:0 886:0 887:0 889:0 '),
+(886,'ZulKundaS',0,33,33,33,45,0,-11831.5,711.922,45.1329,4.4252,'885:0 888:0 '),
+(887,'SavageCoastNW1',0,33,301,33,45,0,-11924.1,793.032,3.06387,4.97496,'885:0 894:0 185:0 897:0 898:0 '),
+(888,'ZulKunda1',0,33,102,33,45,0,-11690.4,742.837,49.7495,3.41987,'886:0 889:0 891:0 '),
+(889,'ZulKunda2',0,33,102,33,45,0,-11694.8,565.959,49.7011,1.34053,'883:0 884:0 885:0 888:0 890:0 891:0 '),
+(890,'ZulKunda3',0,33,102,33,45,0,-11550.4,601.183,50.5784,3.11945,'883:0 889:0 891:0 '),
+(891,'ZulKunda4',0,33,102,33,45,0,-11622.9,760.15,39.7329,0.007312,'888:0 889:0 890:0 892:0 893:0 '),
+(892,'ZulKunda5',0,33,102,33,45,0,-11528.7,724.898,59.4101,3.50037,'891:0 '),
+(893,'ZulKundaW',0,33,122,33,45,0,-11572.6,840.524,8.14386,2.72086,'891:0 894:0 '),
+(894,'SavageCoastNW2',0,33,122,33,45,0,-11692.5,954.651,3.70656,5.00441,'893:0 887:0 185:0 897:0 '),
+(895,'YojambaIsleW',0,33,3357,33,45,0,-11810.6,1364.62,0.0261903,4.46053,'185:0 '),
+(896,'YojambaIsleN',0,33,3357,33,45,0,-11748.3,1318.44,5.22585,2.37531,'185:0 '),
+(897,'VileReefIsle',0,33,301,33,45,0,-12154.2,871.091,18.6659,5.996,'894:0 887:0 '),
+(898,'SavageCoastW1',0,33,301,33,45,0,-12016.1,440.588,3.35169,0.661185,'887:0 899:0 900:0 '),
+(899,'SVNWHub1',0,33,33,33,45,0,-11888.7,290.463,12.6077,0.998902,'898:0 884:0 900:0 901:0 902:0 903:0 '),
+(900,'SavageCoastW2',0,33,33,33,45,0,-12196.8,238.239,2.19021,4.81004,'898:0 899:0 904:0 37:0 '),
+(901,'SVNHunW3',0,33,100,33,45,0,-11656.6,59.5536,17.3151,1.50941,'899:0 881:0 862:0 902:0 '),
+(902,'TkashiRuins',0,33,126,33,45,0,-11843.2,59.0602,14.1655,3.34528,'899:0 901:0 862:0 903:0 905:0 '),
+(903,'KalaiRuins',0,33,125,33,45,0,-12069.3,66.3927,-5.18214,3.5436,'902:0 899:0 880:0 904:0 906:0 '),
+(904,'SVNHub2',0,33,33,33,45,0,-12283.3,28.601,18.2879,0.246879,'903:0 900:0 37:0 912:0 '),
+(905,'SVNBridge2N',0,33,33,33,45,0,-11907.9,-50.0313,39.7259,0.870484,'902:0 880:0 906:0 907:0 '),
+(906,'SVNBridge2S',0,33,33,33,45,0,-12090.1,-139.679,35.2928,0.399245,'903:0 905:0 910:0 '),
+(907,'SVCHub1',0,33,33,33,45,0,-11853.5,-167.599,15.3333,0.51312,'862:0 880:0 905:0 '),
+(908,'SavageCoastW3',0,33,301,33,45,0,-12543.1,74.9728,0.873061,0.513523,'37:0 912:0 '),
+(909,'SavageCoastW4',0,33,1578,33,45,0,-12691.2,142.464,3.092,5.80512,'921:0 924:0 925:0 936:0 '),
+(910,'SVNBridge3W',0,33,33,33,45,0,-12171.4,-240.719,29.8621,0.766786,'906:0 911:0 912:0 '),
+(911,'SVNBridge3E',0,33,33,33,45,0,-12157.4,-431.52,30.3485,1.45204,'874:0 910:0 913:0 '),
+(912,'MizjahRuins',0,33,129,33,45,0,-12468.7,-147.093,13.8431,5.95827,'904:0 908:0 910:0 916:0 '),
+(913,'SVNHub3',0,33,1740,33,45,0,-12127.6,-649.027,14.8876,2.30225,'874:0 876:0 911:0 873:0 875:0 872:0 '),
+(914,'BaliamahRuins',0,33,127,33,45,0,-12540.7,-734.478,39.4424,6.20568,'878:0 915:0 917:0 918:0 '),
+(915,'SVNHub4',0,33,33,33,45,0,-12417,-580.502,11.0755,6.10556,'914:0 874:0 916:0 '),
+(916,'SVNHub5',0,33,33,33,45,0,-12522,-370.721,12.7107,0.882666,'912:0 915:0 917:0 921:0 '),
+(917,'ZiatajaiRuins',0,33,128,33,45,0,-12701.1,-464.07,30.0552,6.19787,'914:0 916:0 918:0 920:0 '),
+(918,'ZulMamweN',0,33,33,33,45,0,-12776.9,-784.489,63.0348,0.421265,'878:0 914:0 917:0 919:0 '),
+(919,'ZulMamweC',0,33,103,33,45,0,-12985.7,-833.459,69.9343,0.193503,'918:0 920:0 '),
+(920,'ZulMamweW',0,33,103,33,45,0,-12943.6,-608.837,53.0521,6.05178,'917:0 919:0 '),
+(921,'SVSHub1',0,33,33,33,45,0,-12826,-301.024,9.96047,5.46666,'916:0 922:0 909:0 925:0 '),
+(922,'SVSVentureCoMine1',0,33,33,33,45,0,-12978,-452.477,53.6008,5.60214,'921:0 923:0 '),
+(923,'SVSVentureCoMine2',0,33,33,33,45,0,-13088.9,-466.483,47.2022,3.61705,'922:0 '),
+(924,'GurubashiArenaOuterN',0,33,1577,33,45,0,-12949,251.702,18.4183,2.2214,'909:0 937:0 '),
+(925,'STCHub1',0,33,1577,33,45,0,-13136.8,-184.248,-3.10173,5.92455,'909:0 921:0 926:0 929:0 '),
+(926,'CrystalveinMine1',0,33,310,33,45,0,-13322.7,-420.202,15.4509,2.04861,'925:0 927:0 928:0 929:0 '),
+(927,'CrystalveinMine2',0,33,310,33,45,0,-13158.5,-564.518,4.64271,0.568135,'926:0 928:0 '),
+(928,'CrystalveinMine3',0,33,310,33,45,0,-13170,-467.696,3.57551,3.1305,'926:0 927:0 '),
+(929,'STCHub2',0,33,1577,33,45,0,-13246.3,-110.492,19.5979,5.04296,'926:0 925:0 930:0 '),
+(930,'GurubashiOuterSE',0,33,1741,33,45,0,-13280.6,57.3154,17.1498,4.95263,'929:0 931:0 932:0 933:0 934:0 '),
+(931,'GurubashiOuterSSE',0,33,1741,33,45,0,-13402.5,96.0163,23.7905,6.03724,'930:0 932:0 933:0 934:0 935:0 943:0 944:0 '),
+(932,'RuinsOfJubuwal',0,33,477,33,45,0,-13382.8,-24.5642,22.0332,0.894086,'930:0 931:0 '),
+(933,'GurubashiArenaInside1',0,33,2177,33,45,0,-13216,312.587,21.8574,3.50161,'930:0 931:0 934:0 '),
+(934,'GurubashiArenaInside2',0,33,2177,33,45,0,-13163.8,257.166,21.8574,3.62531,'930:0 931:0 933:0 '),
+(935,'STCHub3',0,33,1577,33,45,0,-13475.6,312.292,31.942,5.22555,'931:0 938:0 942:0 '),
+(936,'SSavageCoast1',0,33,1578,33,45,0,-12862.3,459.666,6.403,4.74253,'909:0 937:0 '),
+(937,'GurubashiArenaOuterW',0,33,1741,33,45,0,-13076.6,428.328,24.6507,6.12678,'924:0 936:0 938:0 '),
+(938,'GurubashiArenaOuterSW',0,33,1577,33,45,0,-13273.2,479.65,3.7542,5.77924,'935:0 937:0 939:0 940:0 '),
+(939,'BloodsailCompoundW',0,33,1739,33,45,0,-13331.9,777.87,2.16424,3.85895,'938:0 940:0 941:0 '),
+(940,'BloodsailCompoundC',0,33,1739,33,45,0,-13470.3,687.069,8.46535,3.18977,'938:0 939:0 941:0 '),
+(941,'SSavageCoast2',0,33,1578,33,45,0,-13705.9,620.54,10.152,3.17013,'939:0 940:0 966:0 968:0 '),
+(942,'STCHub4',0,33,1577,33,45,0,-13618.7,330.576,43.7429,5.59271,'935:0 943:0 968:0 '),
+(943,'STCHub5',0,33,1577,33,45,0,-13719.1,129.331,23.7103,3.72188,'931:0 942:0 944:0 964:0 965:0 '),
+(944,'STCHub6',0,33,1577,33,45,0,-13572.2,-93.8439,42.7481,1.44857,'931:0 943:0 945:0 '),
+(945,'RuinsOfAboraz',0,33,311,33,45,0,-13627.7,-351.772,12.434,1.10692,'944:0 946:0 '),
+(946,'CrystalShore1',0,33,302,33,45,0,-13867.2,-89.5993,18.4363,2.92315,'945:0 947:0 964:0 '),
+(947,'CrystalShore2',0,33,302,33,45,0,-14086.6,-142.781,3.55938,1.30916,'946:0 948:0 '),
+(948,'WildShore1',0,33,43,33,45,0,-14260.2,-15.7846,3.81308,5.84287,'947:0 949:0 '),
+(949,'WildShore2',0,33,43,33,45,0,-14293.2,109.305,7.5176,0.82025,'948:0 950:0 962:0 '),
+(950,'WildShore3',0,33,43,33,45,0,-14585.8,177.319,2.91916,6.15507,'949:0 951:0 952:0 955:0 958:0 '),
+(951,'WildShore4',0,33,43,33,45,0,-14708.6,511.328,2.52661,5.16547,'950:0 952:0 '),
+(952,'WildShoreShips1',0,33,43,33,45,0,-14894,302.458,3.67936,4.08476,'950:0 951:0 953:0 954:0 955:0 '),
+(953,'WildShoreShips1Left',0,33,43,33,45,0,-14940,357.129,0.221882,0.0694,'952:0 '),
+(954,'WildShoreShips1Right',0,33,43,33,45,0,-15009.9,266.91,0.198072,0.0485881,'952:0 '),
+(955,'WildShoreShips2',0,33,43,33,45,0,-14843.8,75.9812,2.07268,0.570875,'950:0 952:0 956:0 957:0 '),
+(956,'WildShoreShips2Center',0,33,43,33,45,0,-14926.8,110.764,0.2001,4.9102,'955:0 '),
+(957,'JagueroIsle1',0,33,297,33,45,0,-14817.1,-427.547,1.62653,0.804531,'955:0 958:0 '),
+(958,'JagueroIsle2',0,33,297,33,45,0,-14556.9,-277.709,10.043,3.68499,'950:0 957:0 '),
+(959,'BootyBayW',0,33,35,33,45,0,-14300.4,523.178,8.69884,4.45859,'36:0 960:0 '),
+(960,'BootyBayS',0,33,35,33,45,1,-14462.8,467.081,15.1246,5.4423,'36:0 959:0 '),
+(961,'BootyBayEntrance',0,33,1577,33,45,0,-14249.5,333.168,24.6767,2.49077,'36:0 962:0 967:0 '),
+(962,'STCHub7',0,33,1577,33,45,0,-14217.2,239.309,20.2817,3.77098,'949:0 961:0 963:0 '),
+(963,'STCHub8',0,33,1577,33,45,0,-14073.6,266.586,17.42,5.16308,'962:0 964:0 965:0 '),
+(964,'MistvaleValley',0,33,1737,33,45,0,-13952.8,86.1666,15.8298,5.2161,'76:0 943:0 946:0 963:0 '),
+(965,'STCHub9',0,33,1577,33,45,0,-13879.6,258.837,17.7662,5.83459,'943:0 963:0 '),
+(966,'SSavageCoast3',0,33,1578,33,45,0,-13908.6,676.67,10.0579,5.32409,'967:0 941:0 969:0 '),
+(967,'SSavageCoast4',0,33,1578,33,45,0,-14050.8,500.109,2.8225,0.635261,'961:0 966:0 '),
+(968,'SSavageCoast5',0,33,1578,33,45,0,-13683.6,505.174,34.349,3.2526,'941:0 942:0 969:0 970:0 '),
+(969,'SSavageCoast6',0,33,1577,33,45,0,-13859.9,575.635,44.9464,6.06235,'966:0 968:0 '),
+(970,'SSavageCoast7',0,33,1577,33,45,0,-13849.3,494.156,89.7643,5.84244,'968:0 971:0 '),
+(971,'SSavageCoast8',0,33,1738,33,45,0,-13806.7,377.83,94.1372,2.10198,'970:0 ');
+--
+DROP TABLE IF EXISTS `creature_template_npcbot_wander_nodes`;
+CREATE TABLE `creature_template_npcbot_wander_nodes` (
+ `id` int(10) unsigned NOT NULL,
+ `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'RENAME_ME',
+ `mapid` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `zoneid` int(10) unsigned NOT NULL DEFAULT '0',
+ `areaid` int(10) unsigned NOT NULL DEFAULT '0',
+ `minlevel` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `maxlevel` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `flags` int(10) unsigned NOT NULL DEFAULT '0',
+ `x` float NOT NULL DEFAULT '0',
+ `y` float NOT NULL DEFAULT '0',
+ `z` float NOT NULL DEFAULT '0',
+ `o` float NOT NULL DEFAULT '0',
+ `links` mediumtext COLLATE utf8mb4_unicode_ci,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bot Wander Map';
+
+INSERT INTO `creature_template_npcbot_wander_nodes` (`id`,`name`,`mapid`,`zoneid`,`areaid`,`minlevel`,`maxlevel`,`flags`,`x`,`y`,`z`,`o`,`links`) VALUES
+(1,'Anvilmar',0,1,132,1,5,2,-6077.84,384.826,393.598,4.63263,'542:0 '),
+(2,'Brill',0,85,159,1,10,5,2249.85,278.414,34.1142,5.11546,'18:0 277:0 278:0 279:0 281:0 '),
+(3,'Darkshire',0,10,42,18,30,3,-10560.6,-1182.34,27.9637,3.1803,'783:0 784:0 787:0 788:0 789:0 '),
+(4,'Deathknell',0,85,154,1,10,5,1879.83,1588.2,90.1725,5.25172,'295:0 296:0 '),
+(5,'Dun Algaz',0,11,836,18,30,0,-4245.13,-2356.42,204.034,3.9477,'483:0 '),
+(6,'Dun Modr',0,11,205,18,30,0,-2610.26,-2350.56,81.5918,1.1263,'444:0 '),
+(7,'Goldshire',0,12,87,1,10,3,-9480.09,63.5218,56.1755,3.4173,'88:0 71:0 16:0 42:0 72:0 710:0 709:0 714:0 717:0 '),
+(8,'Ironforge',0,1,809,1,10,2,-5023.64,-831.425,495.319,5.37056,'559:0 560:0 '),
+(9,'Kharanos',0,1,131,1,10,3,-5501.22,-472.604,408.453,2.4002,'537:0 545:0 557:0 '),
+(10,'Lakeshire',0,44,69,13,25,3,-9235.12,-2145.54,71.2121,5.71383,'665:0 666:0 '),
+(11,'Menethil Harbor',0,11,150,18,30,3,-3672.7,-828.455,9.89925,3.18444,'476:0 477:0 478:0 '),
+(12,'Moonbrook',0,40,20,8,20,2,-11017.1,1510.17,43.1667,2.58627,'737:0 738:0 736:0 747:0 '),
+(13,'Northshire Abbey',0,12,9,1,10,3,-8900.51,-116.199,81.8499,0.369434,'710:0 70:0 73:0 '),
+(14,'Raven Hill',0,10,94,18,30,0,-10805.5,291.025,30.9282,3.92422,'751:0 753:0 754:0 755:0 766:0 '),
+(15,'Sentinel Hill',0,40,108,8,20,3,-10509.5,1047.74,60.519,5.20046,'741:0 742:0 745:0 746:0 736:0 750:0 '),
+(16,'Stormwind City',0,12,12,1,10,2,-9153.77,364.057,90.151,5.16709,'42:0 710:0 712:0 7:0 '),
+(17,'The Sepulcher',0,130,228,8,20,5,470.768,1589.82,126.632,5.16292,'305:0 '),
+(18,'Undercity',0,85,153,1,10,5,1885.94,236.924,58.0313,3.1016,'2:0 285:0 '),
+(19,'Thelsamar',0,38,144,8,20,3,-5334.7,-3015.26,324.2,1.73643,'503:0 504:0 '),
+(20,'Southshore',0,267,271,18,30,3,-803.031,-531.727,15.9656,1.39359,'362:0 363:0 376:0 384:0 385:0 356:0 '),
+(21,'Tarren Mill',0,267,272,18,30,5,-27.0354,-900.562,55.9602,4.57301,'378:0 380:0 379:0 384:0 '),
+(22,'Refuge Pointe',0,45,320,28,40,3,-1280.81,-2466.89,34.7175,5.16384,'78:0 416:0 419:0 '),
+(23,'Hammerfall',0,45,321,28,40,5,-955.494,-3540.82,56.7101,3.23882,'438:0 '),
+(24,'Kargath',0,3,340,33,45,5,-6625,-2152.82,249.141,4.5492,'594:0 598:0 '),
+(25,'Angor Fortress',0,3,338,33,45,0,-6392.65,-3158,299.765,4.68826,'608:0 620:0 '),
+(26,'Bloodhoof Village',1,215,222,1,10,5,-2383.39,-343.878,-0.729101,4.63375,'1817:0 1818:0 1819:0 '),
+(27,'Camp Narache',1,215,221,1,10,5,-2886.88,-207.003,54.8208,5.16976,'1825:0 1826:0 '),
+(28,'Razor Hill',1,14,362,1,10,0,311.158,-4740.49,9.58476,2.69842,'1401:0 1402:0 1409:0 '),
+(29,'The Den',1,14,363,1,10,0,-604.098,-4202.92,38.7281,1.10189,'1431:0 '),
+(30,'Orgrimmar',1,14,14,1,10,5,1429.15,-4364.86,25.4626,0.273189,'1361:0 '),
+(31,'Senjin Village',1,14,367,1,10,0,-827.631,-4901.78,19.7839,0.842982,'1413:0 1419:0 1420:0 1421:0 1422:0 '),
+(32,'The Crossroads',1,17,380,8,25,5,-456.721,-2653.33,95.6449,4.9548,'1487:0 1490:0 1526:0 1535:0 '),
+(33,'Aldrassil',1,141,256,1,4,2,10318.8,828.943,1326.38,0.947904,'972:0 62:0 974:0 '),
+(34,'Dolanaar',1,141,186,1,10,3,9809.39,956.34,1308.79,0.244923,'981:0 983:0 985:0 '),
+(35,'Ratchet',1,17,392,8,25,0,-949.408,-3670.31,9.21524,5.18454,'1475:0 1562:0 1484:0 1618:0 '),
+(36,'Booty Bay',0,33,35,33,45,0,-14308.8,440.139,25.5878,0.828079,'959:0 960:0 961:0 '),
+(37,'Gromgol Base Camp',0,33,117,33,45,5,-12416.5,185.125,1.83125,6.17782,'904:0 900:0 908:0 '),
+(38,'Astranaar',1,331,415,18,30,3,2687.8,-420.338,107.402,0.195851,'1056:0 1055:0 '),
+(39,'Stonetalon Peak',1,406,467,18,25,3,2693.45,1481.51,235.304,5.88192,'1692:0 1694:0 1690:0 '),
+(40,'Thalanaar',1,357,489,23,35,3,-4496.36,-778.473,-40.558,2.54579,'2014:0 2019:0 2020:0 2021:0 '),
+(41,'Freewind Post',1,400,484,23,35,4,-5429.82,-2388.59,89.4787,2.85815,'2104:0 2105:0 '),
+(42,'Mirror Lake',0,12,92,1,10,2,-9389.26,458.427,38.2852,2.4529,'72:0 16:0 88:0 7:0 '),
+(44,'Drywhisker Gorge',0,45,318,28,40,0,-1014.22,-3827.39,145.41,2.59534,'440:0 '),
+(45,'Sun Rock Retreat',1,406,460,13,25,4,946.771,895.865,106.952,1.46258,'1662:0 1663:0 '),
+(46,'Temple of Zin-Malor',1,16,1223,43,54,0,3549.15,-5359.12,188.348,1.22969,'1325:0 '),
+(48,'Uthers Tomb',0,28,196,48,56,0,1021.5,-1809.43,77.1448,3.5376,'271:0 '),
+(50,'Whitereach Post',1,400,2237,23,35,0,-4917.35,-1375.5,-52.612,3.05417,'2034:0 2036:0 2038:0 2040:0 '),
+(51,'Stonard',0,8,75,33,45,5,-10445,-3261.11,20.179,5.57373,'828:0 829:0 830:0 '),
+(52,'Gadgetzan',1,440,976,38,50,0,-7145.2,-3724,8.49316,4.91643,'2144:0 2146:0 2147:0 '),
+(53,'Camp Mojache',1,357,1099,38,50,4,-4402.29,263.941,25.2783,4.51526,'1995:0 1996:0 1997:0 '),
+(54,'Theramore Isle',1,15,513,33,45,2,-3702.55,-4393.17,15.8191,0.332538,'1882:0 1883:0 '),
+(55,'Aerie Peak',0,47,348,38,50,0,151.003,-2052.21,117.992,6.03287,'82:0 386:0 387:0 388:0 '),
+(56,'Everlook',1,618,2255,53,60,0,6726.4,-4671.8,720.854,3.62348,'1218:0 1240:0 '),
+(57,'Shadowprey Village',1,405,2408,31,40,5,-1591.76,3150,62.5296,3.57741,'1792:0 '),
+(58,'Feathermoon Stronghold',1,357,1116,38,50,3,-4377.97,3297.09,28.7853,5.12409,'1940:0 1941:0 1939:0 '),
+(59,'Auberdine',1,148,442,8,20,0,6300.77,315.841,22.9342,5.97913,'993:0 994:0 1008:0 1010:0 1011:0 1012:0 '),
+(60,'Nijels Point',1,405,608,28,40,3,164.433,1335.57,197.473,2.41439,'1716:0 '),
+(62,'Shadowthread Cave',1,141,257,1,4,2,10749.1,923.327,1336.99,6.25796,'33:0 972:0 973:0 '),
+(63,'Fel Rock',1,141,258,1,10,2,10038.9,1030.06,1329.12,0.362337,'983:0 984:0 '),
+(64,'Banethil Barrow Den',1,141,736,4,10,2,9972.27,1541.52,1308.75,3.05312,'985:0 986:0 987:0 '),
+(66,'DurotarCanyon1_1',1,14,410,1,10,0,622.608,-4563.33,7.7631,0.614446,'1372:0 1373:0 1374:0 '),
+(67,'Torkren Farm',1,14,2979,1,10,0,723.247,-4242.04,17.2031,4.54537,'1372:0 1373:0 1385:0 1392:0 1400:0 '),
+(69,'Ironbands Compound',0,1,716,1,10,2,-5858.7,-2004.1,401.648,0.478922,'523:0 528:0 '),
+(70,'Echo Ridge Mine',0,12,34,1,10,2,-8691.38,-113.152,89.09,5.86134,'73:0 13:0 711:0 '),
+(71,'Maclure Vineyards',0,12,64,1,10,2,-9948.39,69.1568,33.3005,5.49869,'72:0 7:0 714:0 716:0 '),
+(72,'Stonefield Farm',0,12,63,1,10,2,-9901.14,378.19,35.2801,5.75613,'71:0 7:0 42:0 88:0 713:0 714:0 717:0 '),
+(73,'Northshire Vineyards',0,12,59,1,10,2,-9067.35,-333.965,73.4519,1.09469,'70:0 13:0 '),
+(74,'Tower of Ilgalar',0,44,96,18,25,0,-9282.21,-3330.43,115.604,1.41034,'683:0 685:0 686:0 '),
+(75,'Renders Rock',0,44,998,13,25,0,-8677.89,-2302.91,155.917,1.18325,'661:0 662:0 '),
+(76,'Spirit Den',0,33,1742,33,45,0,-13751.4,-18.3165,44.0002,0.851192,'964:0 '),
+(77,'Rethban Caverns',0,44,98,13,25,2,-8976.38,-2016.83,136.063,1.26142,'670:0 671:0 '),
+(78,'Boulderfist Outpost',0,45,1858,28,40,0,-1183.46,-2180.67,55.5524,1.6849,'22:0 415:0 416:0 419:0 '),
+(79,'Groshgok Compound',0,41,2937,50,60,0,-11094.7,-2311.06,117.13,4.77931,'800:0 803:0 804:0 '),
+(80,'Stagalbog Cave',0,8,1817,33,45,0,-10775.6,-3747.85,22.347,3.74768,'186:0 825:0 824:0 826:0 828:0 832:0 '),
+(81,'The Tower of Arathor',0,45,324,28,40,0,-1760.68,-1537.05,64.8696,2.02383,'425:0 '),
+(82,'Wildhammer Keep',0,47,349,38,50,3,250.073,-2203.83,125.172,0.474207,'55:0 387:0 388:0 '),
+(83,'Night Webs Hollow',0,85,155,1,10,4,2053.22,1802.16,99.8006,1.83635,'295:0 '),
+(84,'Terrorweb Tunnel',0,139,2626,53,60,0,3035.33,-2773.9,100.473,5.05065,'215:0 243:0 '),
+(85,'Browman Mill',0,139,2269,53,60,0,2475.41,-5143.98,77.5041,5.20031,'234:0 211:0 '),
+(86,'Uldaman',0,3,1337,33,45,0,-6092.01,-3179.35,255.852,5.9237,'621:0 '),
+(87,'Dustbelch Grotto',0,3,347,33,45,0,-7299.86,-2270.26,244.599,3.07308,'595:0 '),
+(88,'Westbrook Garrison',0,12,120,1,10,2,-9671.96,690.134,36.5414,5.31336,'72:0 42:0 713:0 7:0 717:0 '),
+(89,'Jasperlode Mine',0,12,54,1,10,0,-9194.18,-610.205,60.7892,0.426731,'701:0 702:0 707:0 708:0 '),
+(91,'Algaz Station',0,38,925,8,20,0,-4880.26,-2723,328.908,0.873682,'485:0 486:0 487:0 500:0 502:0 '),
+(92,'Grim Batol',0,11,1037,61,70,0,-4130,-3468.16,259.76,0.014411,'454:0 '),
+(93,'Venture Co. Mine',1,215,215,1,10,4,-1466.09,-994.107,148.38,4.09562,'1868:0 '),
+(94,'Blackwood Den',1,148,455,8,20,0,4626.07,40.557,68.8626,1.32329,'95:0 999:0 1003:0 1006:0 '),
+(95,'WindbendRiverS',1,148,454,8,20,0,5014.05,224.988,33.2141,0.194282,'996:0 999:0 1005:0 94:0 1006:0 '),
+(96,'Cliffspring Falls',1,148,445,8,20,0,6878.37,-656.215,84.4074,3.85022,'1019:0 1020:0 1021:0 '),
+(98,'Wailing Caverns',1,17,718,8,25,0,-868.365,-2044.69,81.6627,1.16842,'1539:0 1540:0 1557:0 1614:0 '),
+(99,'Shady Rest Inn',1,15,403,33,45,0,-3695.7,-2558.8,61.0548,1.48476,'1872:0 1873:0 1904:0 '),
+(100,'Darkmist Cavern',1,15,499,33,45,0,-2829.79,-2722.81,36.7883,2.20851,'187:0 102:0 1902:0 '),
+(101,'North Point Tower',1,15,504,33,45,2,-2869.79,-3419.99,39.3517,3.30334,'102:0 1875:0 1877:0 1878:0 1902:0 '),
+(102,'Bluefen',1,15,507,33,45,0,-2695.87,-3011.4,41.88,2.01726,'100:0 187:0 1874:0 101:0 1875:0 1902:0 '),
+(103,'Lost Point',1,15,506,33,45,0,-3917.65,-2833.95,42.7963,4.55319,'1873:0 1904:0 1907:0 1908:0 1909:0 '),
+(104,'Tidefury Cove',1,15,517,33,45,0,-4414.52,-4100.84,6.37542,0.28057,'106:0 1912:0 '),
+(105,'Stonemaul Ruins',1,15,508,33,45,0,-4346.02,-3321.15,34.2542,6.16796,'106:0 233:0 1906:0 1907:0 1909:0 '),
+(106,'Onyxias Lair',1,15,511,33,45,0,-4638.56,-3708.98,38.6239,2.33441,'233:0 105:0 1910:0 1911:0 104:0 '),
+(107,'Emberstrifes Den',1,15,2158,33,45,0,-4956.66,-3850.19,43.6067,2.10466,'1910:0 1911:0 '),
+(108,'Bloodfen Burrow',1,15,498,33,45,0,-4335.04,-2639.53,38.0638,1.30845,'1908:0 1909:0 '),
+(109,'Sentry Point',1,15,503,33,45,0,-3410.26,-4186.35,10.7187,3.27073,'1881:0 1882:0 '),
+(110,'Swamplight Manor',1,15,497,33,45,0,-2949.47,-3893.5,35.0303,1.23141,'1877:0 1878:0 1879:0 1880:0 '),
+(111,'Marshals Refuge',1,490,541,46,56,1,-6112.07,-1130.95,-187.426,1.5835,'2245:0 2246:0 '),
+(112,'Fungal Rock',1,490,542,46,56,0,-6383.04,-1806.79,-266.123,6.01903,'2249:0 2250:0 2251:0 '),
+(113,'Wavestrider Beach',1,440,988,38,50,0,-7619.63,-4828.43,0.668867,3.36332,'2157:0 2158:0 2159:0 2160:0 '),
+(114,'Uldum',1,440,989,44,55,0,-9473.22,-2749.02,15.4728,5.89777,'2193:0 2194:0 2195:0 '),
+(115,'Darkcloud Pinnacle',1,400,2097,23,35,0,-5086.21,-1919.44,88.1806,6.15461,'2071:0 2077:0 2078:0 '),
+(116,'Roguefeather Den',1,400,487,23,35,0,-5462.36,-1633.26,30.0036,4.16001,'2056:0 2057:0 '),
+(117,'Mirage Raceway',1,400,2240,23,35,0,-6239.42,-3973.12,-58.7501,5.06259,'122:0 123:0 2136:0 2137:0 118:0 2138:0 '),
+(118,'The Rustmaul Digsite',1,400,479,23,35,0,-6490.61,-3449.15,-58.7821,3.58106,'117:0 123:0 2138:0 2139:0 '),
+(119,'Splithoof Hold',1,400,1557,23,35,0,-5071.33,-2349.27,-53.6634,5.48527,'2084:0 2094:0 2112:0 '),
+(121,'Ironstone Camp',1,400,3037,23,35,0,-5813.18,-3421.49,-50.9325,2.44381,'2131:0 2133:0 122:0 2134:0 2138:0 '),
+(122,'Weazels Crater',1,400,3038,23,35,0,-5880.19,-3796.15,-59.9445,0.25844,'121:0 2133:0 2134:0 2136:0 117:0 2138:0 '),
+(123,'Tahonda Ruins',1,400,3039,23,35,0,-6569.91,-3894.97,-58.7495,0.100017,'117:0 2137:0 118:0 2138:0 2140:0 '),
+(124,'Rolands Doom',0,10,2161,24,30,0,-11045.3,-1130.98,38.585,3.65547,'780:0 781:0 '),
+(127,'Maraudon',1,405,2100,33,40,0,-1421.88,2905.15,136.781,1.31624,'1786:0 1787:0 '),
+(128,'Ghost Walker Post',1,405,597,28,40,4,-1258.05,1699.26,89.9098,0.914953,'1765:0 1766:0 1769:0 1776:0 '),
+(129,'Scrabblescrews Camp',1,405,2617,31,40,0,-1407.87,1493.13,60.8875,4.75641,'1749:0 1750:0 1764:0 1769:0 1770:0 1777:0 1778:0 '),
+(130,'Valley of Bones',1,405,2657,33,40,0,-2323.83,1355.6,63.5887,1.00444,'1812:0 1813:0 '),
+(131,'Rage Scar Hold',1,357,1115,38,50,0,-3839.01,1752.22,143.122,4.59397,'1927:0 1928:0 '),
+(132,'Ruins of Solarsal',1,357,1117,38,50,2,-4932.61,3653.2,12.2193,0.301741,'1940:0 1941:0 140:0 '),
+(133,'Ravaged Twilight Camp',1,1377,3100,53,60,0,-6206.25,1766.95,17.464,4.2566,'2318:0 2319:0 '),
+(134,'Twilight Post',1,1377,3098,55,60,0,-6753.94,1661.67,6.34336,0.541008,'2319:0 2320:0 2321:0 2322:0 '),
+(135,'Twilight Outpost',1,1377,3099,55,60,0,-7929.11,1833.28,4.86506,0.733634,'2336:0 2337:0 2338:0 '),
+(136,'Woodpaw Hills',1,357,2519,38,50,0,-4867.47,196.488,57.1639,3.31322,'1991:0 1992:0 '),
+(137,'Lariss Pavillion',1,357,2518,38,50,0,-4097.42,96.644,76.2811,5.8877,'2004:0 2006:0 2007:0 '),
+(138,'Slither Rock',0,46,2419,48,56,0,-7653.86,-2991.1,135.917,1.62615,'648:0 650:0 652:0 '),
+(139,'Flame Crest',0,46,251,48,56,5,-7486.64,-2184.45,166.505,5.87909,'646:0 '),
+(140,'Shalzarus Lair',1,357,3117,38,50,0,-5418.89,3677.45,4.7662,3.81836,'132:0 1942:0 '),
+(142,'Timbermaw Hold',1,618,618,53,60,0,6889.31,-2300.49,584.754,3.03017,'1196:0 1202:0 '),
+(143,'The Ruins of KelTheril',1,618,2252,53,60,0,6430.1,-4328.62,666.714,0.935105,'1216:0 '),
+(144,'Dun Mandarr',1,618,2248,53,60,0,5667.17,-4495.06,769.144,0.689558,'1255:0 1258:0 1259:0 1260:0 '),
+(145,'Talrendis Point',1,16,3137,43,54,3,2689.78,-3854.8,103.228,5.51976,'1270:0 '),
+(147,'Moon Horror Den',1,618,3139,53,60,0,7122.72,-4596.74,637.499,3.77862,'1225:0 '),
+(148,'Timbermaw Hold',1,361,1769,46,56,0,6811.82,-2090.36,625.019,5.71392,'1148:0 1196:0 '),
+(149,'Irontree Cavern',1,361,1768,46,56,0,6464.49,-1502.77,438.462,4.97283,'1142:0 1143:0 1183:0 1184:0 '),
+(150,'Bloodvenom Post',1,361,1997,46,56,5,5070.53,-333.931,367.077,5.98328,'1164:0 '),
+(151,'Sishir Canyon',1,406,2541,13,25,0,599.482,622.34,74.9622,3.1924,'1645:0 '),
+(152,'Cragpool Lake',1,406,463,13,25,0,1491.34,85.8624,11.9254,3.12763,'1649:0 1650:0 1651:0 1652:0 '),
+(153,'Windshear Mine',1,406,461,13,25,0,981.949,-358.9,14.3123,3.71479,'1648:0 1654:0 1655:0 '),
+(154,'The Talondeep Path',1,406,1277,13,25,0,1531.94,-576.57,67.9212,5.18318,'1653:0 1655:0 168:0 '),
+(155,'The Talon Den',1,406,468,18,25,4,2416.89,1792.39,393.641,3.36062,'1692:0 1693:0 '),
+(156,'The Ruins of OrdilAran',1,331,412,18,30,0,3476.85,-104.536,2.98631,5.31466,'157:0 1029:0 1031:0 1033:0 '),
+(157,'Bathrans Haunt',1,331,411,18,30,0,3827.37,-161.305,-0.60768,3.24941,'1028:0 156:0 '),
+(158,'Zoramgar Outpost',1,331,2897,18,30,5,3362.22,1010.16,3.59814,2.49558,'1035:0 1036:0 1037:0 '),
+(159,'Falfarren River',1,331,433,18,30,0,2247.11,-2187.63,105.176,0.680699,'1078:0 1079:0 '),
+(160,'Xavian',1,331,429,18,30,0,2931.82,-2808,212.839,0.056247,'1080:0 1081:0 1085:0 '),
+(161,'Forest Song',1,331,2358,18,30,3,2936.03,-3270.73,159.15,3.69459,'1085:0 1091:0 1093:0 '),
+(162,'Demon Fall Canyon',1,331,435,18,30,0,1708.23,-3157.86,94.4801,5.70126,'1099:0 1100:0 1104:0 '),
+(163,'Silverwing Outpost',1,331,2360,18,30,0,1776.04,-2061.14,106.556,1.50326,'1109:0 '),
+(164,'The DorDanil Barrow Den',1,331,432,18,30,0,1776.92,-2583.5,85.9882,3.82761,'169:0 1113:0 1115:0 1117:0 '),
+(165,'Silverwind Refuge',1,331,420,18,30,0,2141.6,-1189.65,96.7733,3.54353,'1063:0 1064:0 1066:0 '),
+(166,'Greenpaw Village',1,331,2359,18,30,0,2274.68,-1460.01,90.2583,4.48209,'1066:0 1068:0 1069:0 '),
+(167,'Bloodtooth Camp',1,331,2357,18,30,0,1668.68,-1469.31,140.228,5.79562,'1067:0 '),
+(168,'The Talondeep Path',1,406,1277,13,25,0,1941.31,-740.96,113.545,2.12791,'154:0 1063:0 '),
+(169,'Warsong Labor Camp',1,331,3177,18,30,0,1575.91,-2463.94,98.549,2.24558,'164:0 1110:0 '),
+(170,'Aridens Camp',0,41,2560,50,60,0,-10443.3,-2141.1,90.7796,5.92189,'801:0 '),
+(171,'Deadwind Ravine',0,41,2558,50,60,0,-10607.9,-1904.89,117.201,2.66188,'798:0 799:0 '),
+(172,'Sleeping Gorge',0,41,2938,50,60,0,-10740.7,-1951.45,121.127,3.69664,'800:0 801:0 '),
+(173,'Chillwind Camp',0,28,3197,48,56,3,940.955,-1419.2,66.7723,0.796556,'271:0 272:0 334:0 '),
+(174,'Camp Taurajo',1,17,378,8,25,5,-2353.97,-1913.23,95.7826,0.204344,'1550:0 1551:0 1553:0 1554:0 1584:0 1585:0 1814:0 '),
+(175,'Splintertree Post',1,331,431,18,30,5,2251.83,-2538.3,90.4185,6.01297,'1113:0 1114:0 '),
+(177,'Bones of Grakkarond',1,1377,3257,53,60,0,-7228.09,854.674,-1.38994,1.38965,'2323:0 2324:0 2335:0 2343:0 2348:0 2349:0 2350:0 '),
+(178,'Woodpaw Den',1,357,2520,38,50,0,-4775.84,905.452,142.986,4.17326,'1980:0 '),
+(179,'Revantusk Village',0,47,3317,38,50,5,-573.459,-4590.51,10.4122,3.48476,'407:0 '),
+(180,'Thorium Point',0,51,1446,43,54,0,-6521.12,-1190.02,309.255,4.39589,'590:0 '),
+(183,'The Weeping Cave',0,28,198,48,56,0,2249.61,-2389.63,59.8017,5.27414,'244:0 255:0 256:0 '),
+(184,'Valors Rest',1,1377,3077,50,60,0,-6382.38,-308.522,-1.89701,4.0769,'2292:0 2293:0 '),
+(185,'Yojamba Isle',0,33,3357,33,45,0,-11838,1268.18,1.74176,4.79629,'894:0 887:0 895:0 896:0 '),
+(186,'Misty Reed Post',0,8,1978,33,45,4,-10854.8,-4093.43,21.7429,5.03063,'825:0 80:0 826:0 '),
+(187,'Brackenwall Village',1,15,496,33,45,5,-3113.73,-2860.5,34.4097,2.94207,'1873:0 100:0 102:0 '),
+(188,'Cenarion Hold',1,1377,3425,53,60,3,-6886.15,718.398,42.798,6.10305,'2305:0 2306:0 '),
+(189,'Twilight Base Camp',1,1377,2739,53,60,0,-6969.25,1167.66,12.8483,1.06764,'2322:0 2323:0 2324:0 2325:0 2335:0 '),
+(191,'Twilights Run',1,1377,3446,55,60,0,-6332.81,164.268,6.01109,2.33216,'2295:0 2296:0 2297:0 2299:0 '),
+(192,'Ortells Hideout',1,1377,2744,53,60,0,-7601.34,285.736,2.83228,0.367888,'2349:0 2357:0 2358:0 '),
+(193,'Bronzebeard Encampment',1,1377,3427,53,60,0,-7993.44,1118.16,-1.76652,1.00873,'2339:0 2340:0 2341:0 2344:0 2347:0 2346:0 '),
+(196,'BLC1',0,4,4,43,54,0,-11202.2,-3034.46,6.232,1.13173,'839:0 841:0 845:0 852:0 854:0 '),
+(199,'Under Attack - Eastern Plaguelands',0,139,2258,53,60,0,2492.32,-3803.41,177.692,4.09879,'248:0 '),
+(200,'Ivars Patch',0,130,239,8,20,4,1233.05,1214.28,52.5845,3.07876,'201:0 298:0 299:0 303:0 '),
+(201,'Valgans Field',0,130,227,8,20,4,908.754,1255.63,45.9684,0.575633,'299:0 302:0 303:0 200:0 '),
+(211,'Eastwall Tower - Horde',0,139,2271,53,60,0,2550.77,-4783.57,109.501,5.47479,'85:0 235:0 237:0 250:0 '),
+(215,'Plaguewood Tower - Horde, Progressing',0,139,4067,53,60,0,2991.34,-3045.27,119.143,2.65173,'84:0 241:0 242:0 '),
+(220,'Northpass Tower - Horde, Contested',0,139,2275,53,60,0,3168.41,-4356.58,138.976,4.89792,'236:0 237:0 238:0 '),
+(230,'Crown Guard Tower - Alliance',0,139,2263,53,60,0,1861.6,-3701.08,160.834,4.34226,'248:0 247:0 249:0 2369:0 '),
+(233,'Mudsprocket',1,15,4010,33,45,1,-4601.09,-3173.17,38.4677,3.21013,'1909:0 106:0 105:0 1911:0 '),
+(234,'LightsHopeChapel',0,139,2268,53,60,1,2207.38,-5321.35,92.2225,0.203619,'85:0 252:0 '),
+(235,'BlackwoodLake',0,139,2624,53,60,0,2464.31,-4192.32,86.7625,5.25334,'211:0 236:0 250:0 '),
+(236,'EPL_hubN1',0,139,139,53,60,0,2895.84,-4274.37,91.0774,2.94428,'220:0 235:0 237:0 240:0 '),
+(237,'Northdale',0,139,2272,53,60,0,2939.45,-4922.8,110.201,2.76758,'236:0 211:0 220:0 238:0 '),
+(238,'ZulMasharEntrance',0,139,2273,53,60,0,3243.57,-4728.42,157.177,1.67982,'237:0 220:0 239:0 '),
+(239,'MazraAlor',0,139,2274,53,60,0,3446.77,-4987,196.046,5.53613,'238:0 '),
+(240,'PlaguewoodEast',0,139,2277,53,60,0,3031.09,-3786.79,119.967,4.37961,'236:0 241:0 242:0 '),
+(241,'PlaguewoodSouth',0,139,2277,53,60,0,2764.18,-3442.19,97.1331,4.24216,'215:0 240:0 242:0 '),
+(242,'PlaguewoodCenter',0,139,2277,53,60,0,3137.26,-3403.95,139.517,0.937594,'215:0 240:0 241:0 '),
+(243,'TerrorweTunnelWest',0,139,2619,53,60,0,2724.41,-2453.2,66.836,5.42496,'244:0 84:0 '),
+(244,'ThondorilRiverSouth',0,139,2619,53,60,0,2417.75,-2469.65,72.4504,0.00296164,'183:0 243:0 245:0 '),
+(245,'EPL_hubSW',0,139,139,53,60,0,2076.2,-2853.69,86.3391,0.879086,'244:0 246:0 248:0 255:0 '),
+(246,'EPL_hubSWRoad',0,139,139,53,60,0,1811.3,-3046.98,75.4985,1.09939,'245:0 247:0 255:0 '),
+(247,'Undercroft',0,139,2261,53,60,0,1600.37,-3283.08,91.4858,0.567285,'246:0 230:0 '),
+(248,'EPL_hubSW2',0,139,139,53,60,0,2175.83,-3487.76,123.024,5.90406,'199:0 230:0 245:0 '),
+(249,'EPL_SRoad',0,139,139,53,60,0,1841.76,-4088.5,101.961,5.05584,'230:0 250:0 '),
+(250,'CorinsCrossing',0,139,2264,53,60,0,2074.45,-4556.23,73.5772,0.745981,'211:0 235:0 249:0 251:0 252:0 '),
+(251,'ScarletBaseCamp',0,139,2265,53,60,0,1656.05,-4826.35,87.7738,0.384695,'250:0 252:0 253:0 '),
+(252,'PestilentScar',0,139,2622,53,60,0,2013.6,-4964.85,73.6116,5.58402,'234:0 250:0 251:0 253:0 '),
+(253,'TyrshandEntrance',0,139,2266,53,60,0,1690.77,-5201.46,74.6226,4.83788,'251:0 252:0 254:0 '),
+(254,'Tyrshand',0,139,2266,53,60,0,1609.91,-5528.27,111.168,4.2076,'253:0 '),
+(255,'ThondorilRiverBridge',0,139,2619,53,60,0,1924.72,-2608.2,62.8109,4.6761,'183:0 245:0 246:0 256:0 '),
+(256,'GahrronWithering',0,28,201,48,56,0,1768.07,-2280.14,59.7087,0.010807,'183:0 255:0 257:0 258:0 '),
+(257,'WritingHaunt',0,28,202,48,56,0,1506.64,-1862.76,59.0986,5.271,'256:0 258:0 259:0 266:0 269:0 '),
+(258,'WPL_hubC2',0,28,28,48,56,0,1760.12,-1779.45,64.8245,4.87437,'256:0 257:0 259:0 260:0 266:0 269:0 '),
+(259,'DalsonTears',0,28,200,48,56,0,1864.12,-1558.81,59.2668,3.44495,'257:0 258:0 260:0 266:0 267:0 269:0 '),
+(260,'WPL_hubN1',0,28,28,48,56,0,2122.47,-1665.81,64.0458,5.36013,'258:0 259:0 261:0 262:0 '),
+(261,'NorthridgeLumberCamp',0,28,192,48,56,0,2421.88,-1647.26,103.541,5.77835,'260:0 '),
+(262,'WPL_hubN2',0,28,28,48,56,0,2425.99,-1947.45,109.098,4.71217,'260:0 263:0 '),
+(263,'HearthglenTower',0,28,28,48,56,0,2701.43,-1944.23,107.238,0.832291,'262:0 265:0 '),
+(264,'Hearthglen',0,28,203,48,56,0,2924.12,-1426.31,150.782,1.09736,'265:0 '),
+(265,'HearthglenEntrance',0,28,190,48,56,0,2782.62,-1612.54,129.551,0.826396,'264:0 263:0 '),
+(266,'WPL_hubC1',0,28,28,48,56,0,1680.03,-1358.64,69.8578,5.02985,'268:0 257:0 258:0 259:0 267:0 269:0 270:0 274:0 '),
+(267,'FelstoneField',0,28,199,48,56,0,1795.08,-1188.53,59.8914,5.54821,'268:0 259:0 266:0 269:0 273:0 274:0 '),
+(268,'AndorhalW',0,28,193,48,56,0,1336.99,-1272.01,57.8614,2.26525,'266:0 267:0 269:0 270:0 272:0 '),
+(269,'AndorhalNE',0,28,193,48,56,0,1540.11,-1606.19,65.1216,5.937,'257:0 258:0 259:0 266:0 267:0 268:0 270:0 '),
+(270,'AndorhalEntranceSE',0,28,197,48,56,0,1294.98,-1678.78,62.5727,3.83801,'268:0 266:0 269:0 271:0 '),
+(271,'SorrowHillCR',0,28,197,48,56,0,1162.78,-1758.3,60.6308,3.04279,'48:0 173:0 270:0 334:0 '),
+(272,'AndorhalEntranceSW',0,28,28,48,56,0,1214.59,-1145.63,60.8962,5.48342,'268:0 173:0 334:0 '),
+(273,'Bulwark',0,28,813,48,56,5,1718.17,-802.509,57.5466,1.68044,'267:0 274:0 275:0 276:0 '),
+(274,'WPL_hubE',0,28,813,48,56,0,1663.85,-956.731,69.3084,0.651574,'266:0 267:0 273:0 '),
+(275,'TG_hubSE',0,85,85,1,10,4,1806.63,-369.504,32.3876,6.02566,'273:0 276:0 277:0 '),
+(276,'BalnirFarmstead',0,85,165,6,10,4,2029.54,-432.459,35.4011,5.30269,'273:0 275:0 277:0 '),
+(277,'TG_hubC2',0,85,85,1,10,4,2029.86,-87.8105,35.5077,4.49765,'2:0 275:0 276:0 '),
+(278,'BrillEntrance',0,85,159,1,10,4,2296.05,429.197,35.7333,5.74799,'2:0 279:0 285:0 297:0 '),
+(279,'GarrensHauntGraves',0,85,85,4,10,4,2599.87,521.024,17.2769,5.97968,'2:0 278:0 280:0 281:0 '),
+(280,'GarrensHaunt',0,85,164,6,10,4,2883.52,376.589,25.8553,5.87914,'279:0 281:0 284:0 '),
+(281,'BrightwaterLake',0,85,85,1,10,4,2634.44,79.5244,31.089,6.13244,'2:0 279:0 280:0 282:0 284:0 '),
+(282,'NorthCoastE',0,85,168,7,10,4,3032.54,-341.266,5.44748,2.52746,'281:0 283:0 '),
+(283,'NorthCoastC',0,85,168,1,10,4,2935.15,41.7046,6.92148,4.82869,'282:0 284:0 '),
+(284,'NorthCoastW',0,85,168,1,10,4,2984.21,388.32,7.96326,4.49688,'280:0 281:0 283:0 '),
+(285,'ColdHearthManor',0,85,166,1,10,4,2107.98,617.879,35.0405,0.497239,'278:0 18:0 286:0 287:0 297:0 '),
+(286,'TG_hubC1',0,85,85,1,10,0,2204.7,1063.28,28.6853,4.1572,'285:0 287:0 288:0 292:0 294:0 '),
+(287,'CrusadersOutpost',0,85,85,1,10,0,1797.65,703.831,48.147,1.54771,'286:0 285:0 297:0 '),
+(288,'TG_hubNE',0,85,85,1,10,4,2446.9,1082.07,58.5203,0.911539,'286:0 289:0 292:0 293:0 294:0 '),
+(289,'AgamandMillsEntrance',0,85,157,4,10,4,2701.33,937.571,110.912,0.173269,'288:0 290:0 291:0 '),
+(290,'AgamandMillsW',0,85,157,6,10,4,2889.98,1065.92,105.434,5.38438,'289:0 291:0 '),
+(291,'AgamandMillsE',0,85,157,6,10,4,2973.71,619.932,93.8373,1.31013,'289:0 290:0 '),
+(292,'SollidenFarmstead',0,85,156,1,10,4,2329.03,1407.79,33.3337,0.622907,'286:0 288:0 293:0 294:0 '),
+(293,'CrusadersOutpost',0,85,85,1,10,4,2430.28,1585.02,37.0619,0.587566,'288:0 292:0 '),
+(294,'UndeadStartExit',0,85,85,5,10,4,2197.51,1192.39,31.5497,5.11342,'288:0 286:0 292:0 295:0 '),
+(295,'UndeadStartEnd',0,85,154,1,10,4,2061.91,1418.99,63.8379,5.30978,'294:0 83:0 4:0 296:0 '),
+(296,'UndeadStartE',0,85,154,1,10,4,1805.3,1351.42,87.1354,0.232168,'295:0 4:0 '),
+(297,'TH_exitS',0,85,85,7,12,4,1642.09,555.658,33.4922,2.88878,'278:0 285:0 287:0 298:0 '),
+(298,'ShiningStrandN',0,130,927,8,14,4,1331.69,679.903,40.5373,1.02387,'297:0 200:0 '),
+(299,'DeadField',0,130,240,8,20,4,1076.06,1545.35,28.6412,4.79771,'201:0 300:0 301:0 302:0 303:0 200:0 '),
+(300,'SkitteringDark',0,130,226,8,20,4,1271.34,1974.49,17.8502,4.31862,'299:0 301:0 '),
+(301,'NorthTidesHollow',0,130,305,8,20,4,833.25,1880.5,21.9868,5.06279,'299:0 300:0 '),
+(302,'SPF_hubC1',0,130,130,8,20,4,867.729,1518.72,35.2045,0.160734,'201:0 299:0 303:0 304:0 '),
+(303,'SPF_hubC2',0,130,130,8,20,4,934.532,1356.51,43.5579,3.0887,'201:0 299:0 302:0 200:0 305:0 '),
+(304,'SPF_hubC3',0,130,130,8,20,4,736.764,1449.26,64.4284,0.457609,'302:0 305:0 306:0 '),
+(305,'SPF_hubC4',0,130,130,8,20,4,587.903,1352.93,90.6192,0.359403,'303:0 304:0 306:0 17:0 313:0 '),
+(306,'DecrepitFerry',0,130,237,13,20,4,664.305,1021.48,45.3265,5.10911,'304:0 305:0 307:0 '),
+(307,'FenrisIsle',0,130,172,15,20,4,704.961,674.359,43.3624,1.57874,'306:0 308:0 311:0 '),
+(308,'FenrisIsleSE',0,130,172,15,20,4,653.059,335.097,35.0481,1.33722,'307:0 309:0 '),
+(309,'FenrisIsleE',0,130,232,16,20,4,866.03,78.8803,34.2361,2.23258,'308:0 310:0 '),
+(310,'DawningIsles',0,130,232,17,22,4,1199.57,370.42,34.3257,3.13185,'309:0 '),
+(311,'FenrisKeep',0,130,172,8,20,4,1013.6,734.689,59.2651,3.23986,'307:0 '),
+(312,'DeepElemMineFork',0,130,213,8,20,4,271.231,1110.33,80.2136,5.99661,'313:0 314:0 317:0 318:0 '),
+(313,'SPF_hubC5',0,130,130,8,20,4,385.877,1253.37,80.2878,0.320144,'305:0 312:0 315:0 '),
+(314,'DeepElemMine',0,130,213,8,20,4,376.82,1082.54,106.396,3.03959,'312:0 '),
+(315,'SPF_hubC6',0,130,130,8,20,4,194.263,1268.01,72.8331,6.23812,'313:0 316:0 317:0 318:0 '),
+(316,'OlsensFarthing',0,130,229,8,20,4,171.155,1487.65,114.395,4.84404,'315:0 '),
+(317,'SPF_DalaranCamp1',0,130,130,8,20,4,-50.4703,1331.43,60.9321,5.92005,'315:0 312:0 318:0 319:0 323:0 '),
+(318,'SPF_hubS1',0,130,130,8,20,4,-132.172,1170.25,63.4384,0.508657,'315:0 317:0 312:0 319:0 323:0 326:0 '),
+(319,'AmberhillEntrance',0,130,233,11,20,4,-131.822,896.74,65.831,1.54539,'317:0 318:0 320:0 321:0 323:0 325:0 '),
+(320,'AmberhillHall',0,130,233,13,20,4,-141.972,812.61,63.737,1.09457,'319:0 '),
+(321,'AmberhillFarms',0,130,233,15,20,4,88.1028,694.265,60.6053,2.4376,'322:0 319:0 '),
+(322,'AmberhillMurlocCamp',0,130,130,15,20,4,434.265,696.251,33.7837,3.19747,'321:0 '),
+(323,'SPF_hubS2',0,130,130,8,20,4,-330.828,1311.68,37.1012,1.70757,'317:0 318:0 319:0 324:0 326:0 327:0 '),
+(324,'PyrewoodVillage',0,130,204,8,20,4,-383.772,1597.45,16.8392,4.90611,'323:0 '),
+(325,'SPF_exitSE',0,130,130,15,20,4,-543.136,724.877,91.2236,0.975962,'319:0 326:0 357:0 '),
+(326,'SPF_hubS3',0,130,130,8,20,4,-503.287,1113.31,76.93,0.514545,'318:0 323:0 325:0 '),
+(327,'GreymaneWall',0,130,230,8,20,4,-744.895,1522.56,15.5245,5.84742,'323:0 '),
+(328,'DandredsFold',0,36,1682,35,40,0,1235.47,-274.821,40.3856,4.48552,'329:0 '),
+(329,'UplandsN',0,36,284,28,40,0,1085.27,-663.59,87.8456,1.24773,'328:0 330:0 '),
+(330,'UplandsS',0,36,284,28,40,0,958.693,-748.597,114.797,4.04964,'329:0 331:0 335:0 '),
+(331,'Strahnbard',0,36,280,28,40,0,683.909,-963.157,164.301,0.671641,'330:0 332:0 343:0 '),
+(332,'AM_hubE1',0,36,36,28,40,0,615.654,-1043.7,168.11,0.331968,'331:0 333:0 381:0 '),
+(333,'AM_hubE2',0,36,1684,36,42,0,641.277,-1429.39,84.6042,5.55291,'332:0 334:0 '),
+(334,'ChillwindCampRoad',0,28,3197,48,56,0,966.365,-1511.29,75.4645,2.81971,'173:0 271:0 272:0 333:0 '),
+(335,'SlaughterHollowNE',0,36,283,28,40,0,802.9,-628.854,149.733,3.01018,'330:0 336:0 337:0 '),
+(336,'SlaughterHollowN',0,36,283,28,40,0,835.191,-445.445,134.228,4.48673,'335:0 '),
+(337,'SlaughterHollowC',0,36,281,28,40,0,620.637,-522.586,179.928,5.73159,'335:0 338:0 343:0 '),
+(338,'RuinsOfAlterac',0,36,281,28,40,0,631.058,-371.491,154.481,2.42898,'340:0 337:0 339:0 '),
+(339,'RuinsOfAlteracSW',0,36,281,28,40,0,500.776,-173.116,151.449,5.19357,'340:0 338:0 341:0 '),
+(340,'RuinsOfAlteracSE',0,36,281,28,40,0,397.344,-248.661,161.727,5.94755,'338:0 339:0 '),
+(341,'RuinsOfAlteracE',0,36,281,28,40,0,573.088,-14.3215,142.366,3.66008,'339:0 342:0 '),
+(342,'RuinsOfAlteracSSW',0,36,1683,28,40,0,252.323,-82.4394,141.544,0.263228,'341:0 344:0 '),
+(343,'RuinsOfAlteracE',0,36,1357,28,40,0,493.629,-621.553,172.877,0.602885,'331:0 337:0 344:0 345:0 380:0 '),
+(344,'RuinsOfAlteracS',0,36,1683,28,40,0,141.788,-316.452,150.648,1.12125,'342:0 343:0 346:0 '),
+(345,'CorrahnsDagger',0,36,1679,28,40,0,-45.3608,-581.074,153.724,5.82187,'343:0 346:0 380:0 '),
+(346,'CorrahnsDaggerFork',0,36,1679,28,40,0,57.1052,-405.389,132.108,2.70582,'344:0 345:0 347:0 385:0 '),
+(347,'Headland',0,36,1680,28,40,0,-163.833,-293.019,151.411,0.123425,'346:0 348:0 '),
+(348,'GavinsNaze',0,36,1677,28,40,0,-63.0062,-197.056,131.24,2.72704,'347:0 349:0 350:0 355:0 '),
+(349,'GavinsNazeTop',0,36,1677,28,40,0,-125.184,-59.9939,147.694,5.63693,'348:0 350:0 '),
+(350,'GavinsNazeW',0,36,279,28,40,0,68.1015,-53.44,99.6287,3.99152,'348:0 349:0 351:0 352:0 353:0 '),
+(351,'DalaranCraterN',0,36,279,28,40,4,466.751,167.322,41.9053,3.38088,'350:0 352:0 '),
+(352,'DalaranCraterS',0,36,279,28,40,4,90.2654,237.935,43.2902,5.2894,'351:0 350:0 353:0 354:0 '),
+(353,'LordamereInternmentCamp',0,36,278,28,40,4,-90.5356,218.366,53.2755,6.11997,'352:0 350:0 354:0 '),
+(354,'HillsbradFieldsC',0,267,286,18,30,4,-499.681,78.0454,56.6165,0.278575,'352:0 353:0 356:0 355:0 '),
+(355,'HillsbradFieldsE',0,267,286,18,30,0,-437.039,-135.243,56.2029,2.13409,'354:0 356:0 348:0 385:0 '),
+(356,'HillsbradFieldsSRoad',0,267,267,18,30,0,-639.845,-98.2014,47.262,0.172558,'20:0 358:0 360:0 354:0 355:0 361:0 385:0 357:0 '),
+(357,'SouthPointTower',0,267,285,18,30,5,-613.976,388.915,83.0604,2.91123,'325:0 356:0 358:0 '),
+(358,'WesternStrandW',0,267,295,18,30,0,-979.029,273.179,7.90667,5.62479,'356:0 359:0 357:0 '),
+(359,'WesternStrandSW',0,267,295,18,30,0,-1128.84,276.704,0.0000662804,5.89576,'358:0 360:0 '),
+(360,'WesternStrandS',0,267,295,18,30,0,-1156.55,7.61478,0.00000548363,6.16081,'359:0 356:0 361:0 '),
+(361,'WesternStrandS',0,267,295,18,30,0,-1102.38,-114.03,0.0000309944,0.148599,'362:0 360:0 356:0 '),
+(362,'WesternStrandE',0,267,271,18,30,0,-962.262,-506.545,2.13023,1.90396,'361:0 363:0 20:0 '),
+(363,'SouthshoreS',0,267,271,18,30,0,-974.276,-592.998,0.229758,0.372044,'362:0 364:0 20:0 '),
+(364,'EasternStrandW',0,267,294,18,30,0,-1012.85,-790.213,9.01406,5.30042,'363:0 365:0 368:0 376:0 '),
+(365,'EasternStrandC',0,267,294,18,30,0,-1183.14,-847.579,1.43171,6.18988,'364:0 366:0 '),
+(366,'EasternStrandS',0,267,294,18,30,0,-1311.64,-1052.47,18.2271,0.929683,'365:0 367:0 368:0 '),
+(367,'DunGarok',0,267,290,18,30,4,-1256.01,-1190.37,38.9786,2.03514,'366:0 368:0 376:0 '),
+(368,'DunGarokRoad',0,267,267,18,30,0,-1049.49,-1239.84,53.3175,1.75045,'364:0 366:0 367:0 369:0 373:0 '),
+(369,'HillsbradFoothillsExitSE',0,267,267,18,30,0,-784.955,-1512.45,56.6724,1.97822,'370:0 368:0 373:0 410:0 '),
+(370,'HillsbradFoothillsExitE',0,267,275,18,30,0,-594.279,-1721.03,62.3187,2.25507,'369:0 371:0 411:0 '),
+(371,'DurnholdeNE',0,267,275,18,30,0,-383.173,-1720.01,90.0634,3.41784,'372:0 370:0 '),
+(372,'DurnholdeNNE',0,267,275,18,30,0,-316.76,-1609.34,86.0559,5.49914,'371:0 377:0 386:0 '),
+(373,'DurnholdeS',0,267,267,18,30,0,-669.891,-1326.66,66.6887,5.65621,'376:0 374:0 368:0 369:0 383:0 '),
+(374,'DurnholdeInside',0,267,275,18,30,0,-518.661,-1435.16,64.889,2.5637,'373:0 375:0 '),
+(375,'DurnholdeInsideDeep',0,267,275,18,30,0,-512.473,-1541.62,67.1947,1.69387,'374:0 '),
+(376,'NethanderStead',0,267,289,18,30,0,-915.831,-926.49,31.1754,1.19711,'364:0 367:0 373:0 383:0 20:0 '),
+(377,'DurnholdeN',0,267,275,18,30,0,-298.033,-1310.71,76.9034,4.69017,'372:0 378:0 383:0 '),
+(378,'DurnholdeNN',0,267,267,18,30,0,-37.1467,-1296.59,83.7166,3.13705,'377:0 21:0 '),
+(379,'TarrenMillN',0,267,267,18,30,4,188.047,-974.547,75.5356,0.0209713,'21:0 381:0 '),
+(380,'GallowsCorner',0,36,1357,28,40,0,324.254,-615.115,145.246,3.03887,'343:0 345:0 21:0 382:0 '),
+(381,'SoferasCorner',0,36,36,28,40,0,461.934,-926.633,129.374,2.72668,'379:0 332:0 382:0 '),
+(382,'SoferasNaze',0,36,1678,28,40,0,248.314,-839.928,146.333,0.818164,'381:0 380:0 '),
+(383,'HFH_bridge',0,267,267,18,30,0,-487.607,-967.55,34.4918,4.54488,'377:0 376:0 373:0 384:0 '),
+(384,'DarrowHillE',0,267,267,18,30,0,-323.998,-672.57,54.6417,3.9048,'21:0 383:0 385:0 20:0 '),
+(385,'DarrowHillW',0,267,1056,18,30,0,-332.483,-447.42,58.4647,0.297842,'346:0 355:0 356:0 384:0 20:0 '),
+(386,'HinterlandsEntrance',0,47,47,38,50,0,-77.4076,-1845.63,143.116,2.46164,'372:0 55:0 '),
+(387,'ZunWatha',0,47,352,38,50,0,-11.9998,-2493.37,119.659,1.99629,'55:0 82:0 388:0 391:0 '),
+(388,'QuelDanilS',0,47,47,38,50,0,65.3995,-2664.2,111.823,5.20269,'55:0 82:0 387:0 389:0 390:0 391:0 392:0 '),
+(389,'QuelDanil',0,47,350,38,50,4,210.196,-2789.46,122.156,1.50935,'388:0 390:0 392:0 '),
+(390,'HL_hubW',0,47,47,38,50,0,132.208,-2876.17,116.583,1.69588,'388:0 389:0 392:0 393:0 397:0 398:0 '),
+(391,'BogensLedge',0,47,1887,38,50,0,-198.398,-2585.67,120.378,6.18051,'387:0 388:0 393:0 '),
+(392,'HiriWatha',0,47,1885,38,50,0,-35.4616,-2815.33,122.143,0.435323,'389:0 390:0 388:0 393:0 '),
+(393,'ShadraAlorEntrance',0,47,47,38,50,0,-160.179,-2955.33,115.773,1.96371,'391:0 392:0 390:0 395:0 394:0 396:0 398:0 400:0 '),
+(394,'ShadraAlorE',0,47,353,38,50,0,-366.126,-2955.41,89.39,6.27554,'393:0 395:0 396:0 '),
+(395,'ShadraAlorS',0,47,353,38,50,0,-455.461,-2839.4,105.834,6.08704,'393:0 394:0 396:0 '),
+(396,'ShadraAlorW',0,47,353,38,50,0,-296.621,-2833,96.7074,5.15045,'393:0 395:0 394:0 '),
+(397,'AgolWatha',0,47,1884,38,50,0,397.177,-3352.2,123.451,2.24644,'390:0 398:0 399:0 '),
+(398,'CreepingRun',0,47,1886,38,50,0,116.576,-3466.05,107.658,1.12922,'393:0 397:0 390:0 399:0 400:0 401:0 '),
+(399,'SkulkRock',0,47,351,38,50,0,363.014,-3796.73,171.76,1.54745,'397:0 398:0 401:0 404:0 '),
+(400,'AltarOfZul',0,47,355,38,50,0,-147.861,-3319.03,121.957,3.93113,'393:0 398:0 '),
+(401,'HL_hubC',0,47,47,38,50,0,109.926,-3922.75,136.697,0.948588,'398:0 399:0 402:0 403:0 404:0 '),
+(402,'JinthaAlor',0,47,354,38,50,0,-217.196,-4159.98,118.665,0.453769,'401:0 403:0 '),
+(403,'OverlookCliffsS',0,47,307,38,50,0,-150.233,-4250.21,120.905,4.17653,'401:0 402:0 405:0 '),
+(404,'SeradaneBridge',0,47,351,38,50,0,472.513,-3907.18,113.731,5.88677,'399:0 401:0 409:0 '),
+(405,'OverlookCliffsRampTop',0,47,307,38,50,0,-243.665,-4377.48,105.997,0.98978,'403:0 406:0 '),
+(406,'OverlookCliffsRampBottom',0,47,307,38,50,0,-3.15739,-4629.26,13.899,2.27391,'405:0 407:0 408:0 '),
+(407,'RevantuskOutside',0,47,307,38,50,0,-355.789,-4475.87,11.3783,0.924997,'406:0 179:0 '),
+(408,'OverlookCliffsEnd',0,47,307,38,50,0,133.371,-4745.73,2.05405,2.27392,'406:0 '),
+(409,'Seradane',0,47,356,60,80,0,755.958,-4011.61,92.8808,5.95432,'404:0 '),
+(410,'ArathiExitNW',0,45,334,28,40,0,-889.426,-1677.32,57.6111,1.06053,'369:0 411:0 412:0 414:0 '),
+(411,'ArathiExitN',0,45,45,28,40,0,-684.458,-1831.3,53.3946,0.936824,'370:0 410:0 412:0 413:0 '),
+(412,'ArathiCW',0,45,45,28,40,0,-863.176,-1785.9,39.6302,5.66886,'410:0 411:0 413:0 414:0 '),
+(413,'NorthfoldManor',0,45,313,28,40,0,-822.895,-2039.83,34.4558,1.25884,'411:0 412:0 415:0 '),
+(414,'Arathi_hubW',0,45,45,28,40,0,-1190.48,-1731.63,56.3674,6.26181,'410:0 412:0 415:0 420:0 '),
+(415,'NorthfoldManor',0,45,313,28,40,0,-933.512,-2120.29,56.5869,2.05011,'78:0 413:0 414:0 416:0 '),
+(416,'RefugePointeExitN',0,45,315,28,40,0,-1158.07,-2706.9,52.0215,2.18796,'78:0 22:0 415:0 417:0 418:0 419:0 435:0 '),
+(417,'DabyrieFarmstead',0,45,45,28,40,0,-1091.19,-2856.55,42.4006,1.78073,'416:0 418:0 435:0 436:0 '),
+(418,'ArathiCO',0,45,336,28,40,0,-1352.09,-2738.95,59.0948,6.08275,'416:0 417:0 419:0 431:0 432:0 435:0 '),
+(419,'RefugePointeExitS',0,45,45,28,40,0,-1466.43,-2424.6,57.8277,5.98262,'22:0 78:0 416:0 418:0 420:0 427:0 429:0 431:0 '),
+(420,'StromgardeRoad',0,45,45,28,40,0,-1323.01,-1833.39,63.6564,0.712589,'421:0 414:0 419:0 427:0 '),
+(421,'StromgardeInside',0,45,324,28,40,0,-1576.29,-1800.48,67.6512,3.46934,'422:0 423:0 424:0 420:0 '),
+(422,'StromgardeKeep',0,45,324,28,40,0,-1660.06,-1803.63,83.0724,6.27321,'421:0 426:0 '),
+(423,'StromgardeE',0,45,324,28,40,0,-1602.44,-1922.26,67.2707,1.50115,'421:0 '),
+(424,'StromgardeW1',0,45,324,28,40,0,-1596.2,-1745.56,67.3627,5.09826,'421:0 425:0 '),
+(425,'StromgardeW2',0,45,324,28,40,0,-1720.34,-1736.69,52.4064,6.26851,'424:0 81:0 '),
+(426,'StromgardeKeepSide',0,45,324,28,40,0,-1681.32,-1933.25,80.6272,1.35821,'422:0 '),
+(427,'ArathiCI',0,45,335,28,40,0,-1517.62,-2100.44,22.3405,4.92548,'419:0 420:0 428:0 '),
+(428,'ThandolRoadN',0,45,45,28,40,0,-1995.23,-2466.74,78.7992,0.837489,'427:0 429:0 441:0 '),
+(429,'ArathiRoadSmid',0,45,45,28,40,0,-1763.42,-2422.8,59.5627,0.9015,'419:0 428:0 431:0 430:0 '),
+(430,'BoulderfistHall',0,45,316,28,40,0,-1941.13,-2794.22,85.7724,0.38314,'429:0 431:0 432:0 '),
+(431,'Arathi_hubE1',0,45,45,28,40,0,-1570.23,-2675.51,35.6533,6.03014,'419:0 418:0 429:0 432:0 435:0 430:0 '),
+(432,'Arathi_hubE2',0,45,317,28,40,0,-1705.19,-3021.39,31.689,0.310091,'433:0 418:0 431:0 434:0 430:0 '),
+(433,'WitherbarkVillage',0,45,317,28,40,0,-1867.12,-3365.42,56.1179,1.07782,'432:0 '),
+(434,'GoshekFarm',0,45,314,28,40,0,-1526.14,-3075.57,14.1487,2.82925,'432:0 435:0 '),
+(435,'Arathi_hubNE1',0,45,45,28,40,0,-1297.32,-3141.76,34.9289,1.25489,'416:0 417:0 418:0 431:0 434:0 436:0 438:0 '),
+(436,'Arathi_hubNE2',0,45,45,28,40,0,-1005.91,-3313.55,55.2766,2.32737,'435:0 417:0 437:0 438:0 '),
+(437,'ArathiCE',0,45,333,28,40,0,-839.717,-3280.93,78.5616,3.98495,'436:0 438:0 '),
+(438,'HammerfallEntrance',0,45,321,28,40,0,-1164.53,-3558.81,50.1497,1.47167,'435:0 436:0 437:0 23:0 439:0 '),
+(439,'DrywhiskerGorgeOutside',0,45,318,28,40,0,-1086,-3696.31,81.3913,2.10981,'438:0 440:0 '),
+(440,'DrywhiskerGorgeEntrance',0,45,318,28,40,0,-1083.95,-3820.83,128.504,1.71515,'439:0 44:0 '),
+(441,'ArathiRoadSbottom',0,45,880,28,40,0,-2248.64,-2487.38,80.1236,4.70713,'428:0 442:0 443:0 '),
+(442,'ThandolSpanCamp',0,45,45,28,40,0,-2249.4,-2633.38,78.816,1.44851,'441:0 '),
+(443,'ThandolSpanS',0,11,881,18,30,0,-2478.16,-2506.16,78.5672,0.110205,'441:0 444:0 '),
+(444,'DunModrCamp',0,11,881,18,30,0,-2609.79,-2494.69,80.9667,1.57693,'443:0 6:0 445:0 '),
+(445,'Wetlands_hubN1',0,11,11,18,30,0,-2937.95,-2470.57,26.6988,6.13028,'444:0 446:0 447:0 461:0 462:0 '),
+(446,'DaggerforgeHill',0,11,1016,18,30,0,-2859.63,-2907.96,33.1564,1.54551,'445:0 448:0 449:0 '),
+(447,'WL_hubC1',0,11,11,18,30,0,-3206.06,-2452.65,10.0327,5.76822,'445:0 448:0 455:0 461:0 462:0 '),
+(448,'Greenwarden',0,11,1025,18,30,0,-3254.89,-2726.4,9.41813,1.21683,'446:0 447:0 449:0 455:0 458:0 '),
+(449,'WL_hubE1',0,11,11,18,30,0,-3421.46,-3088.4,22.5006,4.5862,'446:0 448:0 450:0 451:0 455:0 456:0 '),
+(450,'RaptorRidge',0,11,1017,23,30,0,-3132.51,-3240.98,63.5747,2.76015,'449:0 451:0 '),
+(451,'DragonmawGates',0,11,1038,61,70,0,-3452,-3659.86,58.5533,1.08333,'449:0 450:0 452:0 '),
+(452,'DragonmawGatesI1',0,11,1038,61,70,0,-3594.66,-4056.85,113.625,1.23963,'451:0 453:0 '),
+(453,'DragonmawGatesI2',0,11,1038,61,70,0,-3956.61,-4019.52,170.857,6.00896,'452:0 454:0 '),
+(454,'DragonmawGatesI3',0,11,1037,61,70,0,-4145.01,-3662.88,204.651,5.17056,'92:0 453:0 '),
+(455,'WL_hubS1',0,11,1020,18,30,0,-3777.35,-2817.99,12.647,0.508038,'447:0 448:0 449:0 456:0 457:0 '),
+(456,'MosshideFen',0,11,1020,18,30,0,-3913.48,-3043.47,11.7092,0.398469,'449:0 455:0 457:0 '),
+(457,'ThelgenRock',0,11,1021,18,30,0,-3921.58,-2647.27,36.3203,4.94005,'455:0 456:0 479:0 '),
+(458,'AngerfangEnampmentE',0,11,1036,18,30,0,-3503.17,-2440.43,48.2306,5.48001,'448:0 459:0 '),
+(459,'AngerfangEnampmentW',0,11,1036,18,30,0,-3354.34,-2190.82,45.3521,1.88565,'458:0 460:0 461:0 '),
+(460,'AngerfangEnampmentTop',0,11,1036,18,30,0,-3458.4,-2008.76,119.804,5.31784,'459:0 '),
+(461,'WL_hubW1',0,11,11,18,30,0,-3186.98,-2117.49,15.8054,4.81126,'445:0 447:0 459:0 462:0 463:0 467:0 '),
+(462,'IronbeardsTomb',0,11,309,18,30,0,-2861.94,-2217.72,29.2628,4.06121,'445:0 447:0 461:0 463:0 464:0 '),
+(463,'MosshideWest',0,11,11,18,30,0,-2916.55,-1848.65,10.201,4.36986,'461:0 462:0 464:0 465:0 466:0 467:0 '),
+(464,'BaradinBayN',0,11,1023,18,30,5,-2598.33,-1745.42,10.159,4.05766,'462:0 463:0 465:0 466:0 '),
+(465,'BaradinBayNW',0,11,298,18,30,0,-2723.52,-1348.51,9.75282,4.1578,'464:0 463:0 466:0 474:0 '),
+(466,'BaradinBayW',0,11,1022,18,30,0,-2951.24,-1112.1,9.14625,2.36904,'464:0 463:0 465:0 474:0 475:0 476:0 '),
+(467,'WhelgarsOutside',0,11,1024,18,30,0,-3208.01,-1693.31,8.6748,4.04314,'461:0 463:0 468:0 473:0 474:0 '),
+(468,'WhelgarsEntrance',0,11,118,18,30,0,-3328.04,-1856.79,25.9266,3.14189,'467:0 469:0 470:0 '),
+(469,'WhelgarsBottom',0,11,118,18,30,0,-3540.59,-1803.75,24.3572,5.93869,'468:0 '),
+(470,'WhelgarsRamp',0,11,118,18,30,0,-3370.49,-1931.82,63.5201,0.805329,'468:0 471:0 '),
+(471,'WhelgarsRampTop',0,11,118,18,30,0,-3471.16,-1925.52,113.829,3.80162,'470:0 472:0 '),
+(472,'WhelgarsCave',0,11,118,18,30,0,-3569.75,-1976.96,117.678,0.449137,'471:0 '),
+(473,'BlueChannelMarsh',0,11,1018,18,30,0,-3582.96,-1324.33,9.39017,5.56012,'467:0 474:0 476:0 '),
+(474,'BluegillMarsh',0,11,1022,18,30,0,-3135.95,-1301.23,7.27194,1.32132,'465:0 466:0 467:0 473:0 475:0 476:0 '),
+(475,'BaradinBayS',0,11,298,18,30,0,-3202.27,-925.946,8.88303,5.67636,'466:0 474:0 476:0 '),
+(476,'MenethilHarborRoad',0,11,1022,18,30,2,-3333.27,-1053.79,8.28482,2.51317,'11:0 466:0 473:0 474:0 475:0 '),
+(477,'MenethilBayS',0,11,298,18,30,2,-3909.27,-638.054,4.91793,5.35238,'11:0 '),
+(478,'MenethilBayN',0,11,298,18,30,2,-3732.25,-581.622,4.65228,4.77512,'11:0 '),
+(479,'DunAlgazBottom',0,11,836,18,30,0,-4086.88,-2624.69,43.3702,1.60133,'457:0 480:0 '),
+(480,'DunAlgazMid1',0,11,836,18,30,0,-4092.37,-2403.53,100.01,4.74881,'479:0 481:0 '),
+(481,'DunAlgazMid2',0,11,836,18,30,0,-3994.82,-2377.44,120.415,3.60017,'480:0 482:0 '),
+(482,'DunAlgazMid3',0,11,836,18,30,0,-4070,-2464.84,155.161,3.20551,'481:0 483:0 '),
+(483,'DunAlgazMid4',0,11,836,18,30,0,-4418.61,-2470.44,212.203,0.00303268,'482:0 5:0 484:0 '),
+(484,'DunAlgazMid5',0,11,836,18,30,0,-4453.35,-2691.02,268.159,1.48548,'483:0 485:0 '),
+(485,'DunAlgazTop',0,38,837,8,20,0,-4741.84,-2699.03,325.269,6.26389,'484:0 91:0 487:0 488:0 '),
+(486,'NorthGatePassBottom',0,38,838,8,20,2,-4797.55,-2537.41,354.11,2.07534,'91:0 524:0 '),
+(487,'SilverStreamMine',0,38,149,8,20,2,-4801.44,-2968.22,321.735,1.63004,'91:0 485:0 488:0 '),
+(488,'StonewroughDamW',0,38,146,8,20,2,-4676.63,-3184.73,310.249,2.0836,'487:0 485:0 489:0 '),
+(489,'StonewroughDamC',0,38,146,8,20,2,-4761.78,-3306.52,310.258,4.81285,'488:0 490:0 '),
+(490,'StonewroughDamE',0,38,146,8,20,2,-4680.9,-3464.1,310.208,3.57506,'489:0 491:0 '),
+(491,'TheLochNE',0,38,38,8,20,2,-4859.79,-3631.09,306.481,2.35809,'490:0 492:0 495:0 496:0 497:0 '),
+(492,'MogroshStronghold',0,38,143,8,20,2,-4884.91,-3956.61,298.791,3.26837,'491:0 493:0 494:0 495:0 '),
+(493,'MogroshStrongholdTop',0,38,143,8,20,2,-4853.52,-4046.55,315.354,1.54756,'492:0 '),
+(494,'LochModanE',0,38,38,8,20,2,-5200.93,-4080.99,324.555,1.53421,'492:0 495:0 512:0 '),
+(495,'LochModanC2',0,38,38,8,20,2,-5358.15,-3755.11,304.073,5.92655,'491:0 492:0 494:0 496:0 506:0 512:0 '),
+(496,'LochIsleE',0,38,38,8,20,2,-4983.21,-3478.31,305.5,4.76612,'491:0 495:0 497:0 498:0 '),
+(497,'LochIsleW',0,38,38,8,20,2,-4869.1,-3302.75,307.516,3.90807,'491:0 496:0 498:0 '),
+(498,'LochIsleS',0,38,38,8,20,2,-5031.68,-3316.94,298.701,5.51616,'497:0 496:0 499:0 '),
+(499,'LochC1',0,38,556,8,20,2,-5138.3,-3125.08,302.046,2.10361,'498:0 502:0 '),
+(500,'LochW1',0,38,38,8,20,2,-5067.56,-2665.82,323.188,6.27801,'91:0 501:0 502:0 '),
+(501,'LochW2',0,38,38,8,20,2,-5383.73,-2741.02,362.182,0.255963,'500:0 502:0 503:0 '),
+(502,'LochW3',0,38,38,8,20,0,-5215.01,-2861.61,336.947,0.715418,'91:0 499:0 500:0 501:0 503:0 '),
+(503,'ThelsamarEntrance',0,38,38,8,20,0,-5405.86,-2884.97,342.8,0.491581,'501:0 502:0 19:0 504:0 515:0 '),
+(504,'LochC3',0,38,144,8,20,0,-5441.5,-3109.22,349.359,0.721317,'503:0 19:0 505:0 '),
+(505,'LochS',0,38,38,8,20,0,-5860.82,-3292.84,292.88,5.93047,'504:0 506:0 621:0 '),
+(506,'IronbandsExcavationOutside',0,38,142,8,20,2,-5617.55,-3680.57,313.913,2.11697,'495:0 505:0 507:0 509:0 '),
+(507,'IronbandsExcavationSW',0,38,142,8,20,2,-5787.94,-3777.91,328.169,4.57725,'506:0 508:0 510:0 '),
+(508,'IronbandsExcavationInside1',0,38,142,8,20,2,-5722.82,-3946.06,324.917,2.02667,'507:0 509:0 '),
+(509,'IronbandsExcavationInside2',0,38,142,8,20,2,-5578.49,-3926.28,327.498,1.64379,'506:0 508:0 '),
+(510,'LochCornerSE',0,38,147,8,20,2,-5843.55,-4145.23,387.605,1.3532,'507:0 511:0 512:0 '),
+(511,'FastriderLodgeEntrance',0,38,147,8,20,2,-5555.41,-4251.75,380.644,2.87687,'510:0 512:0 513:0 '),
+(512,'LochModanSE',0,38,147,8,20,2,-5553.71,-4104.44,372.683,1.01823,'494:0 495:0 510:0 511:0 '),
+(513,'FarstriderLodge',0,38,147,8,20,2,-5621.61,-4334.97,403.763,0.951478,'511:0 514:0 '),
+(514,'FarstriderLodgeInside',0,38,147,8,20,3,-5674.26,-4247.48,407.006,5.29276,'513:0 '),
+(515,'LochModanSW1',0,38,38,8,20,2,-5673.4,-2775.82,363.022,5.89359,'503:0 516:0 519:0 '),
+(516,'StonesplinterValley1',0,38,923,8,20,2,-5878.01,-2909.13,366.788,0.558766,'515:0 517:0 518:0 '),
+(517,'StonesplinterValley2',0,38,923,8,20,2,-6057.08,-3024.86,403.365,0.541086,'516:0 '),
+(518,'StonesplinterValley3',0,38,923,8,20,2,-6077.12,-2770.04,413.566,5.71294,'516:0 '),
+(519,'LochModanSW2',0,38,924,8,20,2,-5804.6,-2605.8,316.201,6.15474,'515:0 520:0 521:0 '),
+(520,'LochModanSW3',0,38,924,8,20,2,-6029.33,-2496.11,310.016,2.1924,'519:0 561:0 '),
+(521,'SouthGatePassBottom',0,38,839,8,20,2,-5690.63,-2589.07,346.087,0.415367,'519:0 522:0 '),
+(522,'SouthGateOutpost',0,1,806,1,10,0,-5520.09,-2399.78,400.417,2.27487,'521:0 523:0 '),
+(523,'SouthGatePassTop',0,1,805,1,10,2,-5636.7,-2242.95,424.761,5.34381,'522:0 527:0 69:0 '),
+(524,'NorthGatePassTop1',0,1,808,1,10,2,-4911.88,-2330.69,408.794,5.22601,'486:0 525:0 '),
+(525,'NorthGatePassBottom2',0,1,808,1,10,2,-5204.26,-2288.4,400.984,2.97781,'524:0 526:0 '),
+(526,'NorthGatePassTop2',0,1,807,1,10,2,-5294.53,-2180,423.003,2.8011,'525:0 527:0 '),
+(527,'DunMoroghPassFork',0,1,1,1,10,2,-5515.28,-2008.17,399.376,4.60752,'526:0 523:0 528:0 '),
+(528,'DunMoroghE1',0,1,1,1,10,2,-5509.11,-1798.18,397.338,5.99176,'527:0 69:0 529:0 '),
+(529,'GolBolarFork',0,1,1,1,10,2,-5611.84,-1487.57,399.057,5.05517,'528:0 530:0 533:0 '),
+(530,'GolBolarCamp',0,1,134,1,10,2,-5711.36,-1562.28,383.568,2.84075,'529:0 531:0 '),
+(531,'GolBolarQuarry1',0,1,134,1,10,2,-5849.25,-1514.03,358.812,5.96152,'530:0 532:0 '),
+(532,'GolBolarQuarry2',0,1,134,1,10,2,-5737.17,-1683.52,362.196,6.04595,'531:0 '),
+(533,'TundridHills',0,1,804,1,10,2,-5651.13,-1033.73,410.816,4.75985,'529:0 534:0 536:0 556:0 '),
+(534,'Vagash1',0,1,1,1,10,2,-5422.73,-1195.14,450.063,2.06791,'533:0 535:0 '),
+(535,'Vagash2',0,1,803,1,10,2,-5417.7,-1264.17,446.78,2.22146,'534:0 '),
+(536,'DunMoroghS1',0,1,1,1,10,2,-5892.71,-628.276,400.121,5.26175,'533:0 537:0 '),
+(537,'DwarfGnomeStartExit1',0,1,1,1,10,2,-5975.18,-476.82,406.774,5.36188,'536:0 9:0 538:0 '),
+(538,'DwarfGnomeStartExit2',0,1,1,1,10,2,-6013.25,-224.693,412.196,4.79638,'537:0 539:0 '),
+(539,'DwarfGnomeStartExit3',0,1,800,1,10,2,-5890.34,69.4737,372.157,4.07706,'538:0 540:0 545:0 546:0 '),
+(540,'ColdridgePass1',0,1,800,1,10,2,-6066.08,42.2314,408.342,0.120498,'539:0 541:0 '),
+(541,'ColdridgePass2',0,1,800,4,10,2,-6231.65,125.6,430.753,5.63871,'540:0 542:0 '),
+(542,'DwarfGnomeStart1',0,1,132,1,10,3,-6261.08,369.552,383.537,4.94484,'541:0 1:0 543:0 544:0 '),
+(543,'DwarfGnomeStart2',0,1,132,1,10,2,-6482.65,496.244,386.328,5.80485,'542:0 544:0 '),
+(544,'DwarfGnomeStart3',0,1,132,1,10,2,-6269.69,741.137,386.893,4.77403,'542:0 543:0 '),
+(545,'GrizzledDen',0,1,136,1,10,2,-5690.95,-281.229,364.314,5.54297,'539:0 9:0 '),
+(546,'DunMoroghSW1',0,1,1,1,10,2,-5756.39,127.948,368.817,4.07511,'539:0 547:0 548:0 '),
+(547,'OldIcebeard',0,1,801,1,10,2,-5602.44,-28.5472,416.22,2.31387,'546:0 '),
+(548,'DunMoroghW1',0,1,135,1,10,2,-5661.62,365.277,393.274,4.27146,'546:0 549:0 550:0 551:0 '),
+(549,'FrostmaneHold',0,1,135,1,10,2,-5549.4,568.067,394.761,1.30462,'548:0 551:0 '),
+(550,'GnomereganS',0,1,133,1,10,2,-5183.81,585.068,404.291,4.35,'548:0 551:0 '),
+(551,'IceflowLake',0,1,211,1,10,2,-5250.86,115.774,394.041,2.85773,'548:0 549:0 550:0 552:0 555:0 '),
+(552,'ShimmerRidge1',0,1,802,1,10,2,-5266.4,-149.752,437.903,6.01894,'551:0 553:0 '),
+(553,'ShimmerRidge2',0,1,802,1,10,2,-5088.11,-166.104,442.035,0.727311,'552:0 554:0 555:0 '),
+(554,'ShimmerRidge3',0,1,802,1,10,2,-5043,-267.85,441.4,2.19994,'553:0 '),
+(555,'ShimmerRidge4',0,1,802,1,10,2,-5021.64,-132.237,411.899,3.77858,'553:0 551:0 '),
+(556,'DunmoroghC1',0,1,1,1,10,2,-5391.34,-928.482,393.467,4.06525,'533:0 557:0 '),
+(557,'IronforgeRamp',0,1,1,1,10,2,-5259.37,-493.579,386.436,3.14828,'556:0 9:0 558:0 '),
+(558,'IronforgeRampMid',0,1,809,1,10,2,-5197.66,-730.697,445.722,5.89324,'557:0 559:0 '),
+(559,'IronforgeRampTop',0,1,809,1,10,2,-5060.46,-745.984,480.27,3.47972,'558:0 8:0 '),
+(560,'IronforgeBank',0,1537,1537,1,10,3,-4909.88,-969.761,501.463,5.46481,'8:0 '),
+(561,'SGgate',0,51,1959,43,54,0,-6413.58,-2007.56,244.634,2.74852,'520:0 562:0 563:0 '),
+(562,'DustfireValleyMid',0,51,1959,43,54,0,-6590.48,-1884.27,245.713,1.74321,'561:0 580:0 585:0 '),
+(563,'SGexitE',0,51,51,43,54,0,-6906.38,-1818.59,241.661,5.89992,'561:0 564:0 566:0 593:0 '),
+(564,'GrimesiltDigSite',0,51,247,43,54,0,-7019.65,-1698.57,241.667,5.46992,'563:0 565:0 566:0 567:0 568:0 '),
+(565,'TannerCamp',0,51,1958,43,54,0,-7225.75,-1752.49,244.286,0.924438,'564:0 566:0 567:0 568:0 '),
+(566,'SGtower4',0,51,1444,43,54,0,-6980,-1505.92,242.742,3.93841,'563:0 564:0 565:0 567:0 568:0 '),
+(567,'SGtower3',0,51,1444,43,54,0,-7036.7,-1320.2,244.272,4.7631,'565:0 564:0 566:0 568:0 '),
+(568,'SGsouth1',0,51,1444,43,54,0,-7155.86,-1317.76,242.155,5.03211,'565:0 569:0 567:0 564:0 566:0 '),
+(569,'BRM_SG1',0,51,1445,43,54,0,-7215.95,-1057.94,242.73,1.72755,'571:0 568:0 570:0 572:0 573:0 '),
+(570,'BRM_SG2',0,25,25,46,60,0,-7399.25,-1106.95,278.077,0.229401,'569:0 622:0 '),
+(571,'SGwest1',0,51,51,43,54,0,-7085,-941.753,268.272,4.123,'569:0 572:0 573:0 '),
+(572,'SGtower2',0,51,51,43,54,0,-7001.07,-1109.84,243.97,2.78587,'571:0 569:0 573:0 '),
+(573,'SGwest2',0,51,51,43,54,0,-6974.99,-1007.32,241.667,3.29324,'571:0 569:0 572:0 574:0 588:0 '),
+(574,'CauldronRampTop',0,51,246,43,54,0,-6974.25,-1172.02,228.781,3.87051,'573:0 575:0 '),
+(575,'CauldronRampMid1',0,51,246,43,54,0,-7024.61,-1220.88,207.974,5.71816,'574:0 576:0 '),
+(576,'CauldronRampMid2',0,51,246,43,54,0,-6955.19,-1270.62,180.686,0.528642,'575:0 577:0 581:0 '),
+(577,'CauldronRampBottom',0,51,246,43,54,0,-6866.28,-1410.17,172.855,2.20156,'576:0 578:0 '),
+(578,'CauldronRamp2Bottom',0,51,246,43,54,0,-6712.76,-1610.77,196.339,2.17329,'577:0 579:0 '),
+(579,'CauldronRamp2Mid',0,51,246,43,54,0,-6668.28,-1664.76,229.053,1.92432,'578:0 580:0 '),
+(580,'CauldronRamp2Top',0,51,246,43,54,0,-6680,-1730.07,255.913,4.54363,'562:0 579:0 '),
+(581,'SlagPit1',0,51,1443,43,54,0,-6850.01,-1218.8,177.395,3.61294,'576:0 582:0 '),
+(582,'SlagPit2',0,51,1443,43,54,0,-6764.59,-1174.15,187.213,1.12951,'581:0 583:0 '),
+(583,'SlagPit3',0,51,1443,43,54,0,-6439.47,-1311.02,180.938,2.63197,'582:0 584:0 '),
+(584,'SlagPit4',0,51,1443,43,54,0,-6631.29,-1289.33,208.714,0.00481129,'583:0 '),
+(585,'SG_hubN1',0,51,51,43,54,0,-6686.77,-1347.22,247.961,4.79378,'562:0 586:0 588:0 589:0 '),
+(586,'CauldronTopN',0,51,246,43,54,0,-6862.1,-1188.37,240.366,5.51045,'585:0 '),
+(587,'FirewatchRidgeBottom',0,51,1442,43,54,0,-6612.66,-860.886,244.297,0.237204,'588:0 589:0 591:0 '),
+(588,'FirewatchRidgeS',0,51,1442,43,54,0,-6817.17,-866.771,248.462,4.87941,'573:0 585:0 587:0 '),
+(589,'ThoriumPointRampBottom',0,51,1442,43,54,0,-6608.41,-1025.59,244.328,1.21161,'587:0 585:0 590:0 '),
+(590,'ThoriumPointRampTop',0,51,1446,43,54,1,-6473.64,-1104.63,303.285,2.64303,'589:0 180:0 '),
+(591,'FirewatchRidgeTop1',0,51,1442,43,54,0,-6473.38,-887.709,324.088,3.80543,'587:0 592:0 '),
+(592,'FirewatchRidgeTop2',0,51,1442,43,54,0,-6502.46,-1018.74,344.372,1.2407,'591:0 '),
+(593,'SGexitEmid',0,51,51,43,54,0,-6952.2,-2064.74,282.478,5.11429,'563:0 594:0 '),
+(594,'BLexitW',0,3,3,33,45,0,-6885.86,-2233.35,242.64,0.361067,'593:0 595:0 24:0 '),
+(595,'ApocryphansRest',0,3,337,33,45,0,-6892.26,-2477.47,247.238,1.71982,'594:0 87:0 596:0 597:0 600:0 601:0 602:0 '),
+(596,'CampCaggS',0,3,344,33,45,0,-7270.91,-2407.34,268.195,5.1163,'595:0 597:0 '),
+(597,'CampCaggE',0,3,3,33,45,0,-7140.34,-2650.51,243.568,0.467924,'595:0 596:0 602:0 603:0 '),
+(598,'KargathE',0,3,3,33,45,0,-6600.53,-2373.56,254.037,0.026153,'600:0 599:0 24:0 '),
+(599,'KargathNE',0,3,3,33,45,0,-6431.02,-2454.24,321.326,3.51922,'598:0 600:0 '),
+(600,'DustbowlW',0,3,1878,33,45,0,-6718.55,-2572.24,241.801,0.471881,'595:0 598:0 599:0 601:0 602:0 '),
+(601,'DustbowlNE',0,3,1878,33,45,0,-6653.03,-2889.09,241.667,2.73974,'595:0 600:0 602:0 620:0 '),
+(602,'BL_hubC',0,3,1879,33,45,0,-6902.56,-2958.24,244.772,1.67356,'600:0 597:0 601:0 595:0 608:0 603:0 '),
+(603,'AgmondsendS',0,3,345,33,45,0,-7141.97,-3251.77,246.326,0.774282,'597:0 602:0 604:0 605:0 607:0 '),
+(604,'BL_elemsS',0,3,3,33,45,0,-7319.09,-3144.54,317.901,5.93436,'603:0 '),
+(605,'AgmondsEnd',0,3,345,33,45,0,-7033.01,-3313.39,238.277,2.5061,'603:0 606:0 607:0 609:0 '),
+(606,'BL_elemsSE',0,3,3,33,45,0,-7339.37,-3450.9,320.961,0.385524,'605:0 '),
+(607,'CampBoff',0,3,342,33,45,0,-7039.11,-3655.92,244.152,1.66966,'603:0 605:0 608:0 609:0 '),
+(608,'BL_hubN1',0,3,1877,33,45,0,-6667.51,-3285.91,241.069,2.14484,'25:0 602:0 607:0 609:0 620:0 '),
+(609,'BL_hubNE1',0,3,1898,33,45,0,-6775.23,-3555.53,245.004,5.79028,'605:0 607:0 608:0 610:0 617:0 620:0 '),
+(610,'LethlorRavineEntranceS',0,3,339,38,45,0,-6742.54,-3895.6,264.574,1.61394,'609:0 611:0 '),
+(611,'LethlorRavineS',0,3,339,38,45,0,-7002.17,-3938.58,263.889,5.47219,'610:0 612:0 '),
+(612,'LethlorRavineC',0,3,339,38,45,0,-6820.98,-4135.08,263.933,2.32276,'611:0 613:0 '),
+(613,'LethlorRavineN',0,3,339,38,45,0,-6424.74,-4106.41,263.889,3.0143,'612:0 614:0 '),
+(614,'LethlorRavineNW',0,3,339,38,45,0,-6513.4,-4004.6,264.394,5.30492,'613:0 615:0 '),
+(615,'LethlorRavineEntranceN',0,3,339,38,45,0,-6396.09,-3976.18,268.618,3.37284,'614:0 616:0 '),
+(616,'LethlorRavineExitN',0,3,1898,38,45,0,-6467.07,-3837.32,315.608,5.41801,'615:0 617:0 '),
+(617,'CampKoshS',0,3,1898,33,45,0,-6360.66,-3685.6,245.154,4.17511,'616:0 609:0 618:0 619:0 '),
+(618,'CampKosh',0,3,341,33,45,0,-6249.45,-3750.01,243.041,2.72409,'617:0 619:0 '),
+(619,'HammertoesDigsite',0,3,346,33,45,0,-6349.91,-3447.28,241.681,0.369852,'617:0 618:0 620:0 621:0 '),
+(620,'BL_hubN2',0,3,338,33,45,0,-6494.59,-3248.21,242.617,1.06886,'25:0 601:0 608:0 609:0 619:0 '),
+(621,'MakersTerrace',0,3,1897,33,45,0,-6056.99,-3302.11,258.645,3.45646,'86:0 505:0 619:0 '),
+(622,'BRM_SG3',0,25,25,46,60,0,-7496.19,-1063.83,264.543,4.72301,'570:0 623:0 628:0 '),
+(623,'BRM_chain1',0,25,25,46,60,0,-7501.48,-1151.43,269.644,1.34305,'622:0 624:0 627:0 '),
+(624,'BRM_chain2',0,25,25,46,60,0,-7599.78,-1110.62,249.93,1.94977,'623:0 625:0 '),
+(625,'BRM_chain3',0,25,25,46,60,0,-7523.43,-1048.09,180.912,0.471264,'624:0 626:0 '),
+(626,'BRM_chain4',0,25,25,46,60,0,-7383.99,-1012.09,173.658,3.00809,'625:0 '),
+(627,'BRM_BRS1',0,25,25,46,60,0,-7609.9,-1226.43,233.401,0.518375,'623:0 628:0 '),
+(628,'BRM_BS1',0,25,25,46,60,0,-7697.61,-1089.8,217.609,3.00611,'627:0 622:0 629:0 '),
+(629,'BRM_BS2',0,25,25,46,60,0,-7769.06,-1129.81,215.084,0.38328,'628:0 630:0 '),
+(630,'BRM_BS3',0,25,25,46,60,0,-7993.75,-1138.96,163.061,0.128021,'629:0 631:0 637:0 639:0 641:0 '),
+(631,'DracodarNW',0,46,2421,48,56,0,-7968.74,-817.038,131.202,4.58672,'630:0 632:0 636:0 '),
+(632,'AltarOfStormsRoad',0,46,46,48,56,0,-7803.25,-717,176.761,6.28318,'631:0 633:0 '),
+(633,'AltarOfStormsFork',0,46,255,48,56,0,-7679.67,-712.976,183.628,3.3461,'632:0 634:0 635:0 '),
+(634,'AltarOfStormsVendor',0,46,255,48,56,0,-7644.75,-636.535,200.452,4.00749,'633:0 '),
+(635,'AltarOfStorms1',0,46,255,48,56,0,-7626.75,-709.048,183.359,5.20123,'633:0 2368:0 '),
+(636,'DracodarW',0,46,2421,48,56,0,-8170.67,-727.141,135.21,5.81979,'631:0 637:0 '),
+(637,'DracodarS',0,46,2421,48,56,0,-8255.07,-1040.7,147.3,0.143321,'630:0 636:0 638:0 639:0 '),
+(638,'DracodarS_hill1',0,46,2421,48,56,0,-8419.15,-933.413,214.705,5.70788,'637:0 '),
+(639,'DracodarSE',0,46,46,48,56,0,-8254.03,-1168.68,144.64,0.0510463,'630:0 637:0 640:0 641:0 '),
+(640,'DracodarS_hill2',0,46,46,48,56,0,-8431.62,-1227.92,207.816,0.498725,'639:0 '),
+(641,'DracodarHub',0,46,46,48,56,0,-8073.86,-1401.78,132.05,4.03301,'630:0 639:0 642:0 644:0 645:0 '),
+(642,'BlackrockStrongholdOutside',0,46,46,48,56,0,-7757.29,-1591.7,133.263,1.43923,'641:0 643:0 644:0 646:0 '),
+(643,'BlackrockStrongholdInside',0,46,252,48,56,0,-7698.11,-1443.02,139.787,4.00159,'642:0 '),
+(644,'PillarOfAshS',0,46,46,48,56,0,-8232.79,-1737.58,147.888,6.17911,'641:0 642:0 645:0 658:0 '),
+(645,'PillarOfAshE',0,46,253,48,56,0,-8102.12,-1922.65,134.695,1.31201,'641:0 644:0 646:0 647:0 658:0 '),
+(646,'ThaurissanNW',0,46,250,48,56,0,-7704.8,-2045.32,133.437,1.61634,'642:0 645:0 139:0 647:0 648:0 '),
+(647,'DreadmaulRockW',0,46,249,48,56,0,-7971.45,-2449.46,130.882,1.47692,'646:0 645:0 648:0 652:0 654:0 658:0 659:0 660:0 '),
+(648,'DreadmaulRockNW',0,46,249,48,56,0,-7665.96,-2453.95,147.044,2.94798,'647:0 646:0 138:0 649:0 654:0 '),
+(649,'DreadmaulRockNE',0,46,249,48,56,0,-7765.85,-2707.5,172.836,1.14313,'648:0 650:0 655:0 '),
+(650,'DreadmaulRockSE',0,46,2420,48,56,0,-8161.75,-2869.02,134.8,0.000368118,'649:0 138:0 651:0 652:0 659:0 '),
+(651,'MorgansVigil',0,46,2418,48,56,3,-8379.57,-2741.96,186.492,6.13436,'650:0 652:0 659:0 '),
+(652,'DreadmaulRockTop1',0,46,249,48,56,0,-7971.64,-2664.1,198.213,2.32517,'647:0 650:0 651:0 138:0 653:0 '),
+(653,'DreadmaulRockTop2',0,46,249,48,56,0,-7873.63,-2613.13,221.072,2.92403,'652:0 '),
+(654,'DreadmaulRockNWW',0,46,249,48,56,0,-7776.13,-2493.23,160.084,5.03518,'648:0 647:0 '),
+(655,'DreadmaulRockInside1',0,46,249,48,56,0,-7848.98,-2661.75,172.955,1.73534,'649:0 656:0 657:0 '),
+(656,'DreadmaulRockInside2',0,46,249,48,56,0,-7961.48,-2603.36,173.834,6.08133,'655:0 '),
+(657,'DreadmaulRockInside3',0,46,249,48,56,0,-7975.04,-2695.45,157.958,5.80842,'655:0 '),
+(658,'DreadmaulPassW',0,46,46,48,56,0,-8216.14,-2308.1,151.442,1.03911,'644:0 645:0 647:0 659:0 '),
+(659,'DreadmaulPassN',0,46,46,48,56,0,-8150.16,-2629.44,133.659,1.18246,'647:0 650:0 651:0 658:0 660:0 '),
+(660,'DreadmaulPass',0,46,2417,48,56,0,-8431.68,-2546.4,133.207,6.07628,'647:0 659:0 661:0 '),
+(661,'RedridgeExitN',0,44,44,13,25,0,-8900,-2574.56,131.851,0.152413,'660:0 75:0 663:0 '),
+(662,'RendersRockInside',0,44,998,13,25,0,-8738.68,-2205.37,149.754,2.59501,'75:0 '),
+(663,'AlthersMillEntrance',0,44,97,13,25,0,-9153.73,-2628.6,109.561,0.156359,'661:0 664:0 690:0 '),
+(664,'RedridgeHub1',0,44,44,13,25,0,-9099.79,-2451.23,120.464,0.197585,'663:0 665:0 667:0 669:0 '),
+(665,'RedridgeBridgeN',0,44,69,13,25,2,-9287.68,-2284.47,67.5443,5.81789,'664:0 10:0 672:0 673:0 '),
+(666,'RedridgeW',0,44,44,13,25,2,-9312.11,-1873.26,82.1473,5.08747,'10:0 672:0 '),
+(667,'RedridgeCanyons1',0,44,95,13,25,2,-8916.14,-2305.07,134.682,3.96044,'664:0 668:0 670:0 '),
+(668,'RedridgeCanyons2',0,44,95,13,25,2,-8864.57,-2150.9,133.327,3.71892,'667:0 669:0 670:0 '),
+(669,'RedridgeCanyons3',0,44,69,13,25,2,-9145.97,-2198.54,119.516,4.7478,'668:0 664:0 670:0 '),
+(670,'RedridgeCanyons4',0,44,95,13,25,2,-9135.91,-2029.37,127.775,5.01877,'667:0 668:0 669:0 77:0 '),
+(671,'RethbanCavernsInside',0,44,98,13,25,0,-8826.83,-1947.01,133.091,2.11555,'77:0 '),
+(672,'RedridgeBridgeS',0,44,44,13,25,2,-9503.49,-2289.12,74.7234,1.13183,'665:0 666:0 674:0 675:0 '),
+(673,'EverstillN',0,44,68,13,25,2,-9263.45,-2458.04,56.1636,1.20646,'665:0 '),
+(674,'ThreeCorners',0,44,1002,13,25,0,-9607.09,-2055.97,65.077,4.99696,'672:0 675:0 692:0 693:0 694:0 '),
+(675,'RedridgeS1',0,44,1001,13,25,0,-9713.82,-2284.16,63.9369,5.46531,'672:0 674:0 676:0 677:0 '),
+(676,'RedridgeS2',0,44,68,13,25,0,-9620.32,-2514.61,59.4453,0.974015,'675:0 677:0 '),
+(677,'RedridgeS3',0,44,1001,13,25,0,-9624.96,-2717.09,56.3955,1.53951,'676:0 675:0 678:0 679:0 691:0 '),
+(678,'StonewatchS',0,44,70,18,25,0,-9468.55,-3007.78,135.551,1.52185,'677:0 689:0 '),
+(679,'RedridgeS4',0,44,997,13,25,0,-9751.37,-3185.18,58.6091,5.63735,'677:0 680:0 681:0 '),
+(680,'RedridgeE1',0,44,997,13,25,0,-9611,-3315.1,49.8404,2.09716,'679:0 681:0 682:0 683:0 684:0 '),
+(681,'RedridgeE2',0,44,71,13,25,0,-9499.43,-3249.9,50.6,3.02197,'679:0 680:0 '),
+(682,'RedridgeE3',0,44,44,18,25,2,-9598.71,-3503.57,121.964,2.30923,'680:0 683:0 '),
+(683,'RedridgeE4',0,44,71,18,25,1,-9465.03,-3460.8,116.076,2.91242,'680:0 682:0 74:0 684:0 '),
+(684,'RedridgeE5',0,44,71,18,25,0,-9469.61,-3328.04,5.51622,4.94268,'680:0 683:0 '),
+(685,'RedridgeNE',0,44,1000,18,25,0,-9116.4,-3271.35,104.33,2.00332,'74:0 686:0 687:0 '),
+(686,'RedridgeE6',0,44,1000,18,25,0,-9317.33,-3210.41,107.191,5.54352,'685:0 74:0 687:0 '),
+(687,'StonewatchFork',0,44,70,18,25,0,-9195.1,-3020.88,94.6252,4.57746,'686:0 685:0 688:0 689:0 690:0 '),
+(688,'StonewatchTower',0,44,999,18,25,0,-9297.56,-2958.62,128.754,5.64364,'687:0 689:0 '),
+(689,'StonewatchTop',0,44,2099,18,25,0,-9364.92,-3072.52,164.756,3.2698,'687:0 688:0 678:0 '),
+(690,'AlthersMillCenter',0,44,97,13,25,0,-9215.61,-2770.74,89.3399,4.66193,'687:0 663:0 '),
+(691,'EverstillE',0,44,44,13,25,0,-9457.68,-2870.36,85.486,2.24488,'677:0 '),
+(692,'ThreeCornersCamp1',0,44,1002,13,25,0,-9472.89,-1956.22,83.561,4.19346,'674:0 693:0 694:0 '),
+(693,'RedridgeExitW1',0,44,1002,13,25,2,-9620.34,-1809.71,51.8565,1.49408,'692:0 674:0 694:0 696:0 '),
+(694,'RedridgeExitW2',0,44,1002,13,25,0,-9831.1,-1766.69,23.8242,2.51983,'692:0 674:0 693:0 695:0 792:0 '),
+(695,'ElwynnHubS1',0,12,798,1,10,2,-9928.36,-1115.12,24.1788,6.21189,'705:0 704:0 694:0 696:0 706:0 '),
+(696,'ElwynnHubE1',0,12,12,1,10,2,-9659.48,-1341.54,48.8561,4.72993,'693:0 697:0 698:0 704:0 695:0 '),
+(697,'EastvaleLC1',0,12,88,1,10,2,-9405,-1343.43,50.0284,2.89799,'696:0 698:0 699:0 '),
+(698,'StoneCairnLakeSE',0,12,86,1,10,2,-9299.52,-1180.36,69.4951,3.31622,'696:0 697:0 699:0 701:0 797:0 '),
+(699,'StoneCairnLakeNE',0,12,86,1,10,2,-8956.22,-1264.96,77.7779,2.94511,'700:0 697:0 698:0 797:0 '),
+(700,'StoneCairnLakeNW',0,12,86,1,10,2,-8860.62,-826.796,71.9141,4.57088,'699:0 701:0 797:0 '),
+(701,'StoneCairnLakeSW',0,12,12,1,10,2,-9355.59,-802.598,64.4981,0.692979,'89:0 700:0 708:0 698:0 705:0 706:0 707:0 797:0 '),
+(702,'JasperlodeMineInside1',0,12,54,1,10,2,-9125.33,-585.357,58.3507,3.90606,'89:0 703:0 '),
+(703,'JasperlodeMineInside2',0,12,54,1,10,2,-9049.44,-618.138,53.1456,4.05725,'702:0 '),
+(704,'ElwynnHubE2',0,12,12,1,10,2,-9613.79,-1100.85,40.5009,4.62273,'696:0 705:0 695:0 '),
+(705,'ElwynnHubE3',0,12,12,1,10,2,-9618.95,-1024.81,40.4731,4.99973,'704:0 695:0 701:0 706:0 707:0 '),
+(706,'BrackwellPumpkinPatch',0,12,62,1,10,2,-9777.88,-877.924,39.5328,5.4101,'705:0 701:0 695:0 707:0 '),
+(707,'ElwynnHubC1',0,12,12,1,10,2,-9609.57,-527.364,55.1285,4.48725,'89:0 708:0 701:0 705:0 706:0 716:0 '),
+(708,'CrystalLakeE',0,12,18,1,10,2,-9464.16,-422.645,58.9952,3.63313,'89:0 701:0 707:0 709:0 '),
+(709,'CrystalLakeW',0,12,18,1,10,2,-9470.07,-173.045,59.9322,4.58858,'708:0 710:0 7:0 '),
+(710,'NorthshireExit',0,12,12,1,10,2,-9133.8,-66.2742,82.4151,1.35237,'709:0 16:0 13:0 7:0 '),
+(711,'EchoRidgeMineInside',0,12,34,1,10,2,-8560.22,-214.447,85.0045,2.95145,'70:0 '),
+(712,'TradeDistrict',0,1519,1519,1,10,3,-8794.44,645.505,94.4595,3.54245,'16:0 '),
+(713,'ForestsEdgeS',0,12,60,1,10,2,-10070.2,658.114,37.3319,5.88491,'72:0 88:0 717:0 '),
+(714,'FargodeepMineOutside',0,12,57,1,10,2,-9868.23,221.066,14.0194,6.19474,'7:0 71:0 72:0 715:0 '),
+(715,'FargodeepMineInside',0,12,57,1,10,2,-9779.25,104.966,4.57989,3.01191,'714:0 '),
+(716,'ElwynnHubS2',0,12,12,1,10,2,-9808.32,-269.092,40.0067,5.15408,'71:0 707:0 '),
+(717,'ElwynnExitW',0,12,60,1,10,2,-9747.07,741.601,25.5892,4.55914,'7:0 88:0 72:0 713:0 718:0 '),
+(718,'WestfallExitNE',0,40,916,8,20,2,-9853.3,918.261,30.2216,5.34454,'717:0 719:0 745:0 746:0 '),
+(719,'Longshore1',0,40,2,8,20,2,-9616.19,1059.16,5.79699,0.013632,'720:0 718:0 745:0 '),
+(720,'Longshore2',0,40,2,8,20,2,-9634.2,1389.29,9.09694,4.71817,'719:0 721:0 '),
+(721,'Longshore3',0,40,2,8,20,2,-9648.12,1575.23,3.54258,4.75547,'720:0 722:0 '),
+(722,'Longshore4',0,40,2,8,20,2,-9776.1,1654.24,11.5179,2.15188,'721:0 723:0 742:0 743:0 '),
+(723,'Longshore5',0,40,2,8,20,2,-9985.75,1913.6,4.86301,5.35756,'722:0 724:0 742:0 '),
+(724,'Longshore6',0,40,2,8,20,2,-10334,2061.94,3.69692,5.05125,'723:0 725:0 739:0 '),
+(725,'Longshore7',0,40,2,8,20,2,-10695.4,2102.07,8.28685,6.14098,'724:0 726:0 738:0 '),
+(726,'Longshore8',0,40,2,8,20,2,-10975.2,2108.77,-0.213533,6.27058,'725:0 727:0 737:0 '),
+(727,'Longshore9',0,40,2,8,20,2,-11307.8,1926.18,9.26031,4.25015,'726:0 728:0 '),
+(728,'Longshore10',0,40,2,8,20,2,-11466.2,1725.82,8.61195,0.641238,'727:0 729:0 '),
+(729,'DaggerHillsW',0,40,920,8,20,2,-11264.1,1714.56,39.9062,4.76851,'728:0 730:0 737:0 '),
+(730,'DaggerHillsC1',0,40,920,8,20,2,-11258.8,1470.77,88.9353,4.93148,'729:0 731:0 '),
+(731,'DaggerHillsC2',0,40,920,8,20,2,-11211.1,1297.89,91.1699,1.90966,'730:0 732:0 733:0 '),
+(732,'DaggerHillsNook',0,40,920,8,20,2,-11235.2,1182.36,91.6522,1.1871,'731:0 733:0 '),
+(733,'DaggerHillsE',0,40,920,8,20,2,-11062.7,1163.02,43.0261,2.75789,'736:0 732:0 731:0 734:0 735:0 750:0 '),
+(734,'DustPlains',0,40,922,8,20,2,-11152,739.176,32.5228,1.40505,'733:0 735:0 750:0 '),
+(735,'DeadAcre',0,40,917,8,20,2,-10770.8,864.294,33.1505,2.913,'736:0 733:0 734:0 746:0 750:0 '),
+(736,'WestfallHubC1',0,40,40,8,20,2,-10842.5,1196.94,34.875,1.14192,'12:0 15:0 735:0 733:0 738:0 741:0 750:0 '),
+(737,'DemontsPlace',0,40,921,8,20,2,-11087.9,1894.97,35.4372,5.06105,'726:0 729:0 12:0 738:0 '),
+(738,'AlexstonFarmstead',0,40,219,8,20,2,-10615,1671.77,41.41,4.1441,'737:0 725:0 12:0 741:0 742:0 736:0 '),
+(739,'GoldCoastQuarry',0,40,113,8,20,2,-10403.7,1909.99,9.96272,4.64675,'724:0 740:0 741:0 '),
+(740,'GoldCoastQuarryInside',0,40,113,8,20,2,-10575.3,1990.25,-8.03668,3.01509,'739:0 '),
+(741,'WestfallHubC2',0,40,40,8,20,2,-10495.4,1349.24,42.6842,1.76042,'738:0 739:0 15:0 742:0 745:0 736:0 '),
+(742,'WestfallHubC3',0,40,918,8,20,2,-10274.9,1408.84,38.9079,3.90454,'741:0 738:0 723:0 722:0 15:0 743:0 745:0 '),
+(743,'JangolodeMine',0,40,111,8,20,2,-10017,1466.37,41.0745,6.08639,'742:0 722:0 744:0 745:0 '),
+(744,'JangolodeMineInside',0,40,111,8,20,2,-9887.11,1427.15,40.0346,0.896887,'743:0 '),
+(745,'SaldeansFarm',0,40,107,8,20,2,-10154.1,1116.55,36.8816,1.65283,'15:0 718:0 719:0 741:0 742:0 743:0 746:0 '),
+(746,'WestfallHubE1',0,40,40,8,20,2,-10333.7,859.579,39.774,0.563072,'15:0 718:0 735:0 745:0 752:0 '),
+(747,'DefiasHideout',0,1581,1581,15,22,2,-11112,1483.69,32.39,3.56723,'12:0 748:0 '),
+(748,'Deadmines1',0,1581,1581,15,22,2,-11252.8,1533.82,28.6803,0.814416,'747:0 749:0 '),
+(749,'Deadmines2',0,1581,1581,15,22,2,-11214.4,1638.37,27.2613,1.55073,'748:0 '),
+(750,'WestfallExitSE',0,40,40,8,20,2,-10870.3,667.353,30.8385,4.48578,'733:0 734:0 735:0 736:0 15:0 751:0 '),
+(751,'DuskwoodExitW',0,10,10,18,30,0,-10857.5,557.367,30.4883,6.27453,'750:0 752:0 14:0 753:0 755:0 '),
+(752,'HushedBankN',0,10,1097,18,30,0,-10326.3,623.959,26.42,3.17024,'746:0 751:0 757:0 758:0 763:0 '),
+(753,'AddlesSteadW',0,10,536,18,30,0,-11054.9,270.776,25.2035,6.01338,'751:0 14:0 754:0 '),
+(754,'AddlesSteadE',0,10,536,18,30,0,-10997.4,179.443,30.4059,1.04377,'753:0 14:0 766:0 '),
+(755,'RHCemetaryS',0,10,492,18,30,0,-10587.6,294.965,31.0441,0.0129175,'751:0 14:0 756:0 757:0 765:0 766:0 '),
+(756,'RHCemetaryNE',0,10,492,24,30,0,-10398,201.223,34.2462,5.21064,'755:0 757:0 758:0 762:0 764:0 765:0 '),
+(757,'RHCemetaryW',0,10,492,22,30,0,-10427.4,409.679,46.6267,4.40525,'752:0 755:0 756:0 758:0 759:0 '),
+(758,'RHCemetaryN',0,10,243,24,30,0,-10308.2,348.036,59.693,3.07006,'752:0 757:0 756:0 '),
+(759,'DawningWoodCatacombs1',0,10,2098,18,30,0,-10261.5,383.964,10.414,2.92673,'757:0 760:0 '),
+(760,'DawningWoodCatacombs2',0,10,2098,18,30,0,-10234.6,284.99,2.79944,4.82935,'759:0 761:0 '),
+(761,'DawningWoodCatacombs3',0,10,2098,18,30,0,-10220.1,166.144,0.047382,3.23144,'760:0 762:0 '),
+(762,'DawningWoodCatacombs4',0,10,2098,18,30,0,-10338.4,136.513,4.82896,0.380849,'756:0 761:0 '),
+(763,'DuskwoodNW1',0,10,799,18,30,0,-10173.2,350.099,32.3759,4.62356,'752:0 764:0 '),
+(764,'DuskwoodNW2',0,10,799,18,30,0,-10183.8,-55.3832,27.6626,5.67208,'763:0 756:0 765:0 793:0 '),
+(765,'DuskwoodC1',0,10,10,18,30,0,-10482,-16.5716,51.5694,0.81242,'764:0 755:0 756:0 766:0 '),
+(766,'DuskwoodC2',0,10,10,18,30,0,-10750.8,67.4617,28.3337,1.80202,'765:0 755:0 14:0 754:0 767:0 '),
+(767,'DuskwoodC3',0,10,10,18,30,0,-10910.1,-371.894,39.8351,3.06651,'766:0 768:0 769:0 773:0 774:0 775:0 779:0 795:0 '),
+(768,'DuskwoodExitS',0,10,10,18,30,0,-11268.2,-368.936,61.3823,6.14723,'767:0 858:0 '),
+(769,'VulGolOgreMound1',0,10,93,24,30,0,-11005.9,-176.407,14.5532,5.12818,'767:0 770:0 771:0 '),
+(770,'VulGolOgreMound2',0,10,93,24,30,0,-10959.3,-38.5543,13.6432,4.44096,'769:0 771:0 '),
+(771,'VulGolOgreMound3',0,10,93,24,30,0,-11083.6,-80.7448,16.7954,5.39522,'769:0 770:0 772:0 '),
+(772,'VulGolOgreMoundInside',0,10,93,24,30,0,-11234.1,-172.07,4.22438,4.5174,'771:0 '),
+(773,'YorgenFarmsteadW',0,10,245,24,30,0,-11096.9,-452.028,32.1764,4.54422,'767:0 774:0 '),
+(774,'YorgenFarmsteadE',0,10,245,24,30,0,-11052.8,-598.054,29.3447,1.47723,'767:0 773:0 776:0 '),
+(775,'DuskwoodC4',0,10,10,18,30,0,-10908,-739.892,54.8364,0.583838,'767:0 776:0 778:0 779:0 '),
+(776,'RottingOrchardW',0,10,241,18,30,0,-10986.3,-770.892,55.1122,1.55183,'774:0 775:0 777:0 778:0 '),
+(777,'RottingOrchardS',0,10,241,18,30,0,-11103.5,-891.729,62.1149,0.69773,'776:0 778:0 '),
+(778,'DuskwoodC5',0,10,10,18,30,0,-10823,-837.935,55.75,1.63037,'775:0 776:0 777:0 779:0 780:0 '),
+(779,'DuskwoodC6',0,10,10,18,30,0,-10768,-644.008,42.2621,2.90859,'767:0 775:0 778:0 786:0 '),
+(780,'DuskwoodE1',0,10,42,18,30,0,-10757.1,-1156.72,24.9918,1.69202,'778:0 124:0 782:0 783:0 '),
+(781,'RolandsDoomInside',0,10,2161,24,30,0,-11157.5,-1167.04,42.5151,0.315576,'124:0 '),
+(782,'TranquilGardensCemetery',0,10,121,18,30,0,-11023.4,-1315.7,53.1833,6.14911,'780:0 783:0 '),
+(783,'DuskwoodE2',0,10,10,18,30,0,-10813.8,-1366.37,42.2527,0.00140238,'780:0 782:0 3:0 784:0 794:0 '),
+(784,'DarkshireExitE',0,10,10,18,30,0,-10539.7,-1338.09,48.0906,1.65268,'785:0 783:0 3:0 '),
+(785,'DuskwoodExitE',0,10,10,18,30,0,-10442.9,-1486.98,73.8977,5.13748,'784:0 798:0 '),
+(786,'DuskwoodC7',0,10,242,24,30,0,-10451.9,-825.607,50.4132,2.61635,'779:0 787:0 788:0 793:0 '),
+(787,'DuskwoodC8',0,10,242,24,30,0,-10647.9,-908.344,50.934,5.93661,'786:0 3:0 788:0 '),
+(788,'DuskwoodNE1',0,10,242,18,30,0,-10219.2,-1021.98,31.9202,2.92658,'786:0 787:0 3:0 789:0 790:0 793:0 '),
+(789,'ManorMismantle',0,10,1098,24,30,0,-10332.7,-1264.03,35.3024,1.53643,'788:0 3:0 790:0 '),
+(790,'DuskwoodNE2',0,10,10,18,30,0,-10181.4,-1145.35,24.304,3.28393,'788:0 789:0 791:0 793:0 '),
+(791,'DuskwoodNE3',0,10,10,18,30,0,-10067.1,-1379.68,29.9246,1.99195,'790:0 792:0 '),
+(792,'DuskwoodExitNE',0,10,10,18,30,0,-9963.01,-1637.21,27.2574,2.08816,'694:0 791:0 '),
+(793,'DuskwoodN',0,10,799,18,30,0,-10020.5,-660.012,39.1578,1.66406,'790:0 788:0 764:0 786:0 '),
+(794,'Naraxis',0,10,10,18,30,0,-10619.4,-1502.44,90.534,3.1465,'783:0 '),
+(795,'TwilightGroveEntrance',0,10,10,50,60,0,-10718.7,-425.681,126.691,0.442773,'767:0 796:0 '),
+(796,'TwilightGrove',0,10,856,50,60,0,-10419.3,-421.597,45.6561,3.03852,'795:0 '),
+(797,'HeroesVigil',0,12,56,1,10,0,-9101.04,-1034.1,72.9837,5.20227,'698:0 699:0 700:0 701:0 '),
+(798,'DWPExitW',0,41,2697,50,60,0,-10464.2,-1734.78,86.7801,1.49361,'785:0 171:0 802:0 '),
+(799,'DeadwindRavineSW',0,41,2558,50,60,0,-10919.4,-1957.74,114.777,4.67839,'171:0 800:0 '),
+(800,'TheViceW',0,41,2561,50,60,0,-10843.3,-2118.87,121.161,1.51324,'799:0 172:0 79:0 '),
+(801,'DWPExitE',0,41,2938,50,60,0,-10593.5,-2125.78,90.9212,3.83802,'172:0 170:0 802:0 811:0 '),
+(802,'DeadsmansCrossingE',0,41,41,50,60,0,-10437,-2037.61,94.6245,1.59492,'798:0 801:0 810:0 '),
+(803,'GroshgokCompoundInside',0,41,2937,50,60,0,-11169.4,-2483.11,105.139,0.944598,'79:0 '),
+(804,'KarazhanOutskirts',0,41,2562,50,60,0,-11148.9,-2130,55.9803,1.2403,'79:0 805:0 806:0 '),
+(805,'Karazhan',0,41,2562,50,60,0,-11115.2,-2008.72,48.4017,4.31317,'804:0 806:0 '),
+(806,'KarazhanCellarEntrance',0,41,2837,50,60,0,-11173.4,-2033.69,47.0759,0.798522,'804:0 805:0 807:0 '),
+(807,'KarazhanCellar1',0,41,2837,50,60,0,-11100.4,-1963.77,1.93936,4.49657,'806:0 808:0 '),
+(808,'KarazhanCellar2',0,41,2837,50,60,0,-11159.5,-1898.41,-17.7918,6.21463,'807:0 809:0 '),
+(809,'KarazhanCellar3',0,41,2837,50,60,0,-11033.9,-1910.04,-32.9889,4.98353,'808:0 '),
+(810,'DeadmansCrossingBottom',0,41,41,50,60,0,-10282.6,-2019.49,51.0186,2.21028,'802:0 '),
+(811,'SSExitW',0,8,8,33,45,0,-10546.2,-2376.39,84.2413,1.87648,'801:0 812:0 '),
+(812,'SSW1',0,8,8,33,45,0,-10381.8,-2424.26,52.7345,2.75809,'811:0 813:0 '),
+(813,'SSW2',0,8,8,33,45,0,-10427.8,-2549.06,24.1947,5.68762,'812:0 814:0 830:0 '),
+(814,'IthariusCaveOutside',0,8,1777,33,45,0,-10561.3,-2508.68,22.0709,5.83489,'813:0 815:0 816:0 '),
+(815,'IthariusCave',0,8,1777,33,45,0,-10677.4,-2531.21,28.912,6.2649,'814:0 '),
+(816,'SSCRW1',0,8,1780,33,45,0,-10387.5,-2710.03,21.6778,1.56036,'814:0 817:0 818:0 819:0 830:0 '),
+(817,'MistyValley',0,8,116,33,45,0,-10110,-2413.91,29.9136,4.35049,'816:0 818:0 '),
+(818,'SSW3',0,8,8,33,45,0,-10320.4,-2794.27,21.9908,1.07734,'817:0 816:0 819:0 820:0 829:0 830:0 '),
+(819,'Harborage',0,8,657,33,45,2,-10113,-2807.71,22.1444,3.06047,'818:0 816:0 820:0 829:0 '),
+(820,'SSN1',0,8,1798,33,45,0,-10099.4,-3266.23,20.4381,1.58785,'818:0 819:0 821:0 827:0 828:0 829:0 '),
+(821,'SSN2',0,8,76,33,45,0,-9974.74,-3687.45,21.6788,2.09247,'820:0 822:0 823:0 827:0 828:0 829:0 '),
+(822,'SSNE1',0,8,2403,33,45,0,-9634.53,-3969.85,0.0000146627,2.75613,'821:0 823:0 '),
+(823,'SSNE2',0,8,300,33,45,0,-10034.8,-4306.49,1.78832,0.101491,'822:0 821:0 824:0 826:0 827:0 '),
+(824,'SSE',0,8,300,33,45,0,-10512,-4371.71,6.04597,6.27469,'823:0 825:0 80:0 826:0 827:0 '),
+(825,'SSSE',0,8,300,33,45,0,-11038.3,-4116.28,1.98503,5.82703,'186:0 824:0 80:0 '),
+(826,'PoolOfTearsE',0,8,1778,33,45,0,-10444.5,-4087.57,23.9872,1.47592,'80:0 186:0 823:0 824:0 827:0 '),
+(827,'PoolOfTearsN',0,8,8,33,45,0,-10147.3,-3802.05,22.1649,2.27113,'820:0 821:0 823:0 824:0 826:0 828:0 829:0 '),
+(828,'PoolOfTearsW',0,8,8,33,45,0,-10377.4,-3577.61,22.0023,3.94206,'820:0 821:0 827:0 80:0 51:0 829:0 '),
+(829,'SSC',0,8,1798,33,45,0,-10292.9,-3192.2,22.1489,5.69742,'818:0 819:0 820:0 821:0 827:0 828:0 51:0 830:0 '),
+(830,'SSExitS',0,8,8,33,45,0,-10553.9,-3043.33,24.794,0.0857489,'813:0 816:0 818:0 829:0 51:0 831:0 '),
+(831,'SSExitSS',0,4,4,43,54,0,-10690.8,-2978.8,37.8508,5.87412,'830:0 834:0 '),
+(832,'StagalbogInside1',0,8,1817,33,45,0,-10966.8,-3697.03,11.0105,4.21105,'80:0 833:0 '),
+(833,'StagalbogInside2',0,8,1817,33,45,0,-10894.6,-3613.42,16.0499,6.1176,'832:0 '),
+(834,'BLExitN',0,4,4,43,54,0,-10811.4,-2992.21,41.134,0.16765,'831:0 835:0 839:0 846:0 '),
+(835,'BLNW1',0,4,1437,43,54,0,-11009.6,-2785.5,4.70615,5.63206,'834:0 836:0 839:0 840:0 '),
+(836,'DreadmaulHoldEntrance',0,4,1437,43,54,0,-10916.9,-2714.76,7.63624,3.85903,'835:0 837:0 838:0 '),
+(837,'DreadmaulHoldRight',0,4,1437,43,54,0,-10814.2,-2705.35,8.14439,3.20125,'836:0 838:0 '),
+(838,'DreadmaulHoldLeft',0,4,1437,43,54,0,-10859.8,-2615.61,8.07541,4.52661,'836:0 837:0 '),
+(839,'BLNW2',0,4,4,43,54,0,-11080.5,-2903.3,9.18506,0.371865,'835:0 834:0 196:0 '),
+(840,'BLW1',0,4,4,43,54,0,-11268.2,-2725.08,11.1047,5.91718,'835:0 841:0 842:0 '),
+(841,'DreadmaulPost',0,4,1439,43,54,0,-11528.8,-2858.71,8.50437,6.19557,'840:0 196:0 842:0 856:0 '),
+(842,'BLAltarOfStormsBottom',0,4,4,43,54,0,-11501.6,-2718.85,5.65372,0.900431,'840:0 841:0 843:0 856:0 '),
+(843,'BLAltarOfStormsMid',0,4,4,47,54,0,-11381.5,-2566.03,75.8033,3.74358,'842:0 844:0 '),
+(844,'BLAltarOfStormsTop',0,4,1441,47,54,1,-11255.9,-2556.41,97.0494,2.9896,'843:0 '),
+(845,'BLE1',0,4,4,43,54,0,-11149.6,-3232.6,8.07553,2.30354,'196:0 846:0 850:0 '),
+(846,'NethergardeOutside',0,4,1438,43,54,0,-10961.7,-3200.5,45.5708,0.954623,'834:0 845:0 847:0 '),
+(847,'NethergardeInside1',0,4,1438,43,54,2,-11008.9,-3340.48,64.7225,4.78147,'846:0 848:0 '),
+(848,'NethergardeInside2',0,4,1438,43,54,3,-10993.2,-3453.24,64.8707,3.21459,'847:0 849:0 '),
+(849,'NethergardeInside3',0,4,1438,43,54,2,-11112.2,-3438.11,79.0946,6.1402,'848:0 '),
+(850,'BLE2',0,4,1440,43,54,0,-11310.9,-3410.18,7.46828,4.16649,'845:0 851:0 852:0 '),
+(851,'BLE2Inside',0,4,1440,43,54,0,-11225.8,-3486.48,8.69295,2.17551,'850:0 '),
+(852,'BLE3',0,4,4,43,54,0,-11438.8,-3304.34,7.30604,5.76674,'196:0 850:0 853:0 854:0 '),
+(853,'BLSE',0,4,72,43,54,0,-11632.5,-3381.23,14.577,0.215935,'852:0 854:0 855:0 '),
+(854,'BLS1',0,4,4,43,54,0,-11607.8,-3099.85,7.81021,5.30924,'196:0 852:0 853:0 855:0 '),
+(855,'BLS2',0,4,72,43,54,0,-11765.8,-2959.84,7.91609,5.25623,'853:0 854:0 856:0 2370:0 '),
+(856,'BLS3',0,4,4,43,54,0,-11716.6,-2785.99,8.27783,3.20635,'855:0 841:0 842:0 857:0 '),
+(857,'TaintedScar1',0,4,73,55,60,0,-11907.8,-2658.64,-2.15637,5.48008,'856:0 '),
+(858,'SVExitN',0,33,33,33,45,0,-11362.1,-380.82,64.9035,0.170793,'768:0 859:0 '),
+(859,'SVExitNFork',0,33,33,33,45,0,-11397.1,-284.376,58.1739,3.29667,'858:0 860:0 861:0 '),
+(860,'RebelCamp',0,33,99,33,45,3,-11314.2,-182.813,75.1397,3.66777,'859:0 '),
+(861,'SVEntranceN',0,33,33,33,45,0,-11511.9,-302.586,38.7986,0.353382,'859:0 863:0 864:0 862:0 '),
+(862,'NesingwarysExpeditionCamp',0,33,100,33,45,1,-11616,-50.0157,10.9823,4.49439,'861:0 879:0 880:0 881:0 901:0 902:0 907:0 '),
+(863,'SVNBridge1N',0,33,33,33,45,0,-11604.1,-282.333,37.221,5.64107,'861:0 879:0 '),
+(864,'SVNHubN1',0,33,33,33,45,0,-11643.7,-473.703,17.1608,0.3141,'861:0 865:0 873:0 '),
+(865,'KurzensCompound',0,33,101,33,45,0,-11604,-644.056,29.157,3.77181,'864:0 866:0 872:0 '),
+(866,'TheStockpile1',0,33,106,33,45,0,-11461.5,-750.28,30.6105,4.24893,'865:0 867:0 '),
+(867,'TheStockpile2',0,33,106,33,45,0,-11514.8,-845.839,22.0076,3.08261,'866:0 868:0 869:0 '),
+(868,'TheStockpile3',0,33,106,33,45,0,-11418.4,-794.929,14.9653,3.89354,'867:0 '),
+(869,'TheStockpile4',0,33,106,33,45,0,-11506.4,-946.763,29.2275,0.414209,'867:0 870:0 '),
+(870,'TheStockpile5',0,33,106,33,45,0,-11406.8,-896.737,18.0813,0.89682,'869:0 871:0 '),
+(871,'TheStockpile6',0,33,106,33,45,0,-11337.1,-985.396,27.3203,1.9202,'870:0 '),
+(872,'SVNHubN2',0,33,33,33,45,0,-11729.7,-799.127,29.6214,0.89486,'865:0 873:0 875:0 913:0 '),
+(873,'VentureCoBaseCamp',0,33,1760,33,45,0,-11959.6,-531.751,11.3978,5.11834,'872:0 864:0 874:0 875:0 913:0 '),
+(874,'SVNHub1',0,33,33,33,45,0,-12225,-546.002,28.8839,0.0407319,'873:0 875:0 911:0 913:0 915:0 '),
+(875,'SVE1',0,33,33,33,45,0,-12149.1,-965.968,32.4681,1.43677,'872:0 873:0 874:0 876:0 878:0 913:0 '),
+(876,'MoshoggOgreMound',0,33,105,33,45,0,-12352.7,-972.262,13.1171,5.38338,'875:0 877:0 878:0 913:0 '),
+(877,'MoshoggOgreMoundInside',0,33,105,33,45,0,-12364,-1147.48,0.104103,2.92311,'876:0 '),
+(878,'MoshoggOgreMoundUpper',0,33,105,33,45,0,-12466.5,-881.644,39.1084,5.72306,'875:0 876:0 914:0 918:0 '),
+(879,'SVNBridge1C',0,33,33,33,45,0,-11710.1,-210.005,39.5643,5.90174,'863:0 880:0 862:0 '),
+(880,'SVNBridge1S',0,33,33,33,45,0,-11818.3,-43.4252,39.7487,5.27146,'879:0 862:0 903:0 905:0 907:0 '),
+(881,'SVNHubW1',0,33,33,33,45,0,-11518.9,255.102,25.1192,4.23669,'862:0 882:0 883:0 901:0 '),
+(882,'SVNHubW2',0,33,33,33,45,0,-11502.5,373.117,53.2392,3.3217,'881:0 883:0 '),
+(883,'ZulKundaNE',0,33,33,33,45,0,-11650.7,401.397,42.8581,5.68183,'881:0 882:0 884:0 889:0 890:0 '),
+(884,'ZulKundaE',0,33,33,33,45,0,-11785.5,436.17,47.4037,6.2807,'883:0 885:0 889:0 899:0 '),
+(885,'ZulKundaSE',0,33,33,33,45,0,-11863.3,560.263,47.0214,5.06137,'884:0 886:0 887:0 889:0 '),
+(886,'ZulKundaS',0,33,33,33,45,0,-11831.5,711.922,45.1329,4.4252,'885:0 888:0 '),
+(887,'SavageCoastNW1',0,33,301,33,45,0,-11924.1,793.032,3.06387,4.97496,'885:0 894:0 185:0 897:0 898:0 '),
+(888,'ZulKunda1',0,33,102,33,45,0,-11690.4,742.837,49.7495,3.41987,'886:0 889:0 891:0 '),
+(889,'ZulKunda2',0,33,102,33,45,0,-11694.8,565.959,49.7011,1.34053,'883:0 884:0 885:0 888:0 890:0 891:0 '),
+(890,'ZulKunda3',0,33,102,33,45,0,-11550.4,601.183,50.5784,3.11945,'883:0 889:0 891:0 '),
+(891,'ZulKunda4',0,33,102,33,45,0,-11622.9,760.15,39.7329,0.007312,'888:0 889:0 890:0 892:0 893:0 '),
+(892,'ZulKunda5',0,33,102,33,45,0,-11528.7,724.898,59.4101,3.50037,'891:0 '),
+(893,'ZulKundaW',0,33,122,33,45,0,-11572.6,840.524,8.14386,2.72086,'891:0 894:0 '),
+(894,'SavageCoastNW2',0,33,122,33,45,0,-11692.5,954.651,3.70656,5.00441,'893:0 887:0 185:0 897:0 '),
+(895,'YojambaIsleW',0,33,3357,33,45,0,-11810.6,1364.62,0.0261903,4.46053,'185:0 '),
+(896,'YojambaIsleN',0,33,3357,33,45,0,-11748.3,1318.44,5.22585,2.37531,'185:0 '),
+(897,'VileReefIsle',0,33,301,33,45,0,-12154.2,871.091,18.6659,5.996,'894:0 887:0 '),
+(898,'SavageCoastW1',0,33,301,33,45,0,-12016.1,440.588,3.35169,0.661185,'887:0 899:0 900:0 '),
+(899,'SVNWHub1',0,33,33,33,45,0,-11888.7,290.463,12.6077,0.998902,'898:0 884:0 900:0 901:0 902:0 903:0 '),
+(900,'SavageCoastW2',0,33,33,33,45,0,-12196.8,238.239,2.19021,4.81004,'898:0 899:0 904:0 37:0 '),
+(901,'SVNHunW3',0,33,100,33,45,0,-11656.6,59.5536,17.3151,1.50941,'899:0 881:0 862:0 902:0 '),
+(902,'TkashiRuins',0,33,126,33,45,0,-11843.2,59.0602,14.1655,3.34528,'899:0 901:0 862:0 903:0 905:0 '),
+(903,'KalaiRuins',0,33,125,33,45,0,-12069.3,66.3927,-5.18214,3.5436,'902:0 899:0 880:0 904:0 906:0 '),
+(904,'SVNHub2',0,33,33,33,45,0,-12283.3,28.601,18.2879,0.246879,'903:0 900:0 37:0 912:0 '),
+(905,'SVNBridge2N',0,33,33,33,45,0,-11907.9,-50.0313,39.7259,0.870484,'902:0 880:0 906:0 907:0 '),
+(906,'SVNBridge2S',0,33,33,33,45,0,-12090.1,-139.679,35.2928,0.399245,'903:0 905:0 910:0 '),
+(907,'SVCHub1',0,33,33,33,45,0,-11853.5,-167.599,15.3333,0.51312,'862:0 880:0 905:0 '),
+(908,'SavageCoastW3',0,33,301,33,45,0,-12543.1,74.9728,0.873061,0.513523,'37:0 912:0 '),
+(909,'SavageCoastW4',0,33,1578,33,45,0,-12691.2,142.464,3.092,5.80512,'921:0 924:0 925:0 936:0 '),
+(910,'SVNBridge3W',0,33,33,33,45,0,-12171.4,-240.719,29.8621,0.766786,'906:0 911:0 912:0 '),
+(911,'SVNBridge3E',0,33,33,33,45,0,-12157.4,-431.52,30.3485,1.45204,'874:0 910:0 913:0 '),
+(912,'MizjahRuins',0,33,129,33,45,0,-12468.7,-147.093,13.8431,5.95827,'904:0 908:0 910:0 916:0 '),
+(913,'SVNHub3',0,33,1740,33,45,0,-12127.6,-649.027,14.8876,2.30225,'874:0 876:0 911:0 873:0 875:0 872:0 '),
+(914,'BaliamahRuins',0,33,127,33,45,0,-12540.7,-734.478,39.4424,6.20568,'878:0 915:0 917:0 918:0 '),
+(915,'SVNHub4',0,33,33,33,45,0,-12417,-580.502,11.0755,6.10556,'914:0 874:0 916:0 '),
+(916,'SVNHub5',0,33,33,33,45,0,-12522,-370.721,12.7107,0.882666,'912:0 915:0 917:0 921:0 '),
+(917,'ZiatajaiRuins',0,33,128,33,45,0,-12701.1,-464.07,30.0552,6.19787,'914:0 916:0 918:0 920:0 '),
+(918,'ZulMamweN',0,33,33,33,45,0,-12776.9,-784.489,63.0348,0.421265,'878:0 914:0 917:0 919:0 '),
+(919,'ZulMamweC',0,33,103,33,45,0,-12985.7,-833.459,69.9343,0.193503,'918:0 920:0 '),
+(920,'ZulMamweW',0,33,103,33,45,0,-12943.6,-608.837,53.0521,6.05178,'917:0 919:0 '),
+(921,'SVSHub1',0,33,33,33,45,0,-12826,-301.024,9.96047,5.46666,'916:0 922:0 909:0 925:0 '),
+(922,'SVSVentureCoMine1',0,33,33,33,45,0,-12978,-452.477,53.6008,5.60214,'921:0 923:0 '),
+(923,'SVSVentureCoMine2',0,33,33,33,45,0,-13088.9,-466.483,47.2022,3.61705,'922:0 '),
+(924,'GurubashiArenaOuterN',0,33,1577,33,45,0,-12949,251.702,18.4183,2.2214,'909:0 937:0 '),
+(925,'STCHub1',0,33,1577,33,45,0,-13136.8,-184.248,-3.10173,5.92455,'909:0 921:0 926:0 929:0 '),
+(926,'CrystalveinMine1',0,33,310,33,45,0,-13322.7,-420.202,15.4509,2.04861,'925:0 927:0 928:0 929:0 '),
+(927,'CrystalveinMine2',0,33,310,33,45,0,-13158.5,-564.518,4.64271,0.568135,'926:0 928:0 '),
+(928,'CrystalveinMine3',0,33,310,33,45,0,-13170,-467.696,3.57551,3.1305,'926:0 927:0 '),
+(929,'STCHub2',0,33,1577,33,45,0,-13246.3,-110.492,19.5979,5.04296,'926:0 925:0 930:0 '),
+(930,'GurubashiOuterSE',0,33,1741,33,45,0,-13280.6,57.3154,17.1498,4.95263,'929:0 931:0 932:0 933:0 934:0 '),
+(931,'GurubashiOuterSSE',0,33,1741,33,45,0,-13402.5,96.0163,23.7905,6.03724,'930:0 932:0 933:0 934:0 935:0 943:0 944:0 '),
+(932,'RuinsOfJubuwal',0,33,477,33,45,0,-13382.8,-24.5642,22.0332,0.894086,'930:0 931:0 '),
+(933,'GurubashiArenaInside1',0,33,2177,33,45,0,-13216,312.587,21.8574,3.50161,'930:0 931:0 934:0 '),
+(934,'GurubashiArenaInside2',0,33,2177,33,45,0,-13163.8,257.166,21.8574,3.62531,'930:0 931:0 933:0 '),
+(935,'STCHub3',0,33,1577,33,45,0,-13475.6,312.292,31.942,5.22555,'931:0 938:0 942:0 '),
+(936,'SSavageCoast1',0,33,1578,33,45,0,-12862.3,459.666,6.403,4.74253,'909:0 937:0 '),
+(937,'GurubashiArenaOuterW',0,33,1741,33,45,0,-13076.6,428.328,24.6507,6.12678,'924:0 936:0 938:0 '),
+(938,'GurubashiArenaOuterSW',0,33,1577,33,45,0,-13273.2,479.65,3.7542,5.77924,'935:0 937:0 939:0 940:0 '),
+(939,'BloodsailCompoundW',0,33,1739,33,45,0,-13331.9,777.87,2.16424,3.85895,'938:0 940:0 941:0 '),
+(940,'BloodsailCompoundC',0,33,1739,33,45,0,-13470.3,687.069,8.46535,3.18977,'938:0 939:0 941:0 '),
+(941,'SSavageCoast2',0,33,1578,33,45,0,-13705.9,620.54,10.152,3.17013,'939:0 940:0 966:0 968:0 '),
+(942,'STCHub4',0,33,1577,33,45,0,-13618.7,330.576,43.7429,5.59271,'935:0 943:0 968:0 '),
+(943,'STCHub5',0,33,1577,33,45,0,-13719.1,129.331,23.7103,3.72188,'931:0 942:0 944:0 964:0 965:0 '),
+(944,'STCHub6',0,33,1577,33,45,0,-13572.2,-93.8439,42.7481,1.44857,'931:0 943:0 945:0 '),
+(945,'RuinsOfAboraz',0,33,311,33,45,0,-13627.7,-351.772,12.434,1.10692,'944:0 946:0 '),
+(946,'CrystalShore1',0,33,302,33,45,0,-13867.2,-89.5993,18.4363,2.92315,'945:0 947:0 964:0 '),
+(947,'CrystalShore2',0,33,302,33,45,0,-14086.6,-142.781,3.55938,1.30916,'946:0 948:0 '),
+(948,'WildShore1',0,33,43,33,45,0,-14260.2,-15.7846,3.81308,5.84287,'947:0 949:0 '),
+(949,'WildShore2',0,33,43,33,45,0,-14293.2,109.305,7.5176,0.82025,'948:0 950:0 962:0 '),
+(950,'WildShore3',0,33,43,33,45,0,-14585.8,177.319,2.91916,6.15507,'949:0 951:0 952:0 955:0 958:0 '),
+(951,'WildShore4',0,33,43,33,45,0,-14708.6,511.328,2.52661,5.16547,'950:0 952:0 '),
+(952,'WildShoreShips1',0,33,43,33,45,0,-14894,302.458,3.67936,4.08476,'950:0 951:0 953:0 954:0 955:0 '),
+(953,'WildShoreShips1Left',0,33,43,33,45,0,-14940,357.129,0.221882,0.0694,'952:0 '),
+(954,'WildShoreShips1Right',0,33,43,33,45,0,-15009.9,266.91,0.198072,0.0485881,'952:0 '),
+(955,'WildShoreShips2',0,33,43,33,45,0,-14843.8,75.9812,2.07268,0.570875,'950:0 952:0 956:0 957:0 '),
+(956,'WildShoreShips2Center',0,33,43,33,45,0,-14926.8,110.764,0.2001,4.9102,'955:0 '),
+(957,'JagueroIsle1',0,33,297,33,45,0,-14817.1,-427.547,1.62653,0.804531,'955:0 958:0 '),
+(958,'JagueroIsle2',0,33,297,33,45,0,-14556.9,-277.709,10.043,3.68499,'950:0 957:0 '),
+(959,'BootyBayW',0,33,35,33,45,0,-14300.4,523.178,8.69884,4.45859,'36:0 960:0 '),
+(960,'BootyBayS',0,33,35,33,45,1,-14462.8,467.081,15.1246,5.4423,'36:0 959:0 '),
+(961,'BootyBayEntrance',0,33,1577,33,45,0,-14249.5,333.168,24.6767,2.49077,'36:0 962:0 967:0 '),
+(962,'STCHub7',0,33,1577,33,45,0,-14217.2,239.309,20.2817,3.77098,'949:0 961:0 963:0 '),
+(963,'STCHub8',0,33,1577,33,45,0,-14073.6,266.586,17.42,5.16308,'962:0 964:0 965:0 '),
+(964,'MistvaleValley',0,33,1737,33,45,0,-13952.8,86.1666,15.8298,5.2161,'76:0 943:0 946:0 963:0 '),
+(965,'STCHub9',0,33,1577,33,45,0,-13879.6,258.837,17.7662,5.83459,'943:0 963:0 '),
+(966,'SSavageCoast3',0,33,1578,33,45,0,-13908.6,676.67,10.0579,5.32409,'967:0 941:0 969:0 '),
+(967,'SSavageCoast4',0,33,1578,33,45,0,-14050.8,500.109,2.8225,0.635261,'961:0 966:0 '),
+(968,'SSavageCoast5',0,33,1578,33,45,0,-13683.6,505.174,34.349,3.2526,'941:0 942:0 969:0 970:0 '),
+(969,'SSavageCoast6',0,33,1577,33,45,0,-13859.9,575.635,44.9464,6.06235,'966:0 968:0 '),
+(970,'SSavageCoast7',0,33,1577,33,45,0,-13849.3,494.156,89.7643,5.84244,'968:0 971:0 '),
+(971,'SSavageCoast8',0,33,1738,33,45,0,-13806.7,377.83,94.1372,2.10198,'970:0 '),
+(972,'Shadowglen',1,141,188,1,4,2,10281,1001.05,1342.98,5.96933,'33:0 62:0 '),
+(973,'ShadowthreadCaveInside',1,141,257,1,10,2,10936.3,951.018,1322.87,0.852457,'62:0 '),
+(974,'ShadowglenExit1',1,141,188,1,10,2,10236.2,699.749,1353.3,3.24203,'33:0 975:0 '),
+(975,'ShadowglenExit2',1,141,141,1,10,2,9988.41,591.889,1315.9,0.829698,'974:0 976:0 983:0 '),
+(976,'StarbreezeVillage',1,141,260,1,10,2,9825.13,399.226,1308.15,0.857567,'975:0 977:0 978:0 '),
+(977,'StarbreezeBackyard',1,141,141,1,10,2,10038.9,286.037,1323.77,1.89429,'976:0 '),
+(978,'TeldrassilS1',1,141,141,1,10,2,9396.17,568.108,1320.55,0.244948,'976:0 979:0 '),
+(979,'TeldrassilS2',1,141,141,1,10,2,9232.75,931.478,1321.37,5.94693,'978:0 980:0 '),
+(980,'TeldrassilS3',1,141,141,1,10,2,9171.08,1419.38,1320.31,5.13404,'979:0 981:0 '),
+(981,'TeldrassilHubS1',1,141,141,1,10,2,9352.14,1496.95,1274.46,0.140488,'980:0 982:0 34:0 988:0 '),
+(982,'GnarlpineHold',1,141,261,5,10,2,9106.12,1796.37,1324.94,4.59408,'981:0 '),
+(983,'DolanaarRoadE',1,141,141,1,10,2,9883.36,802.735,1309.84,1.38768,'975:0 63:0 34:0 '),
+(984,'FelRockInside',1,141,258,1,10,2,10112.3,1195.5,1312.02,5.06294,'63:0 '),
+(985,'DolanaarRoadW',1,141,141,1,10,2,9956.16,1248.6,1307.74,2.3227,'34:0 64:0 989:0 '),
+(986,'BanethilBarrowDenInside',1,141,262,4,10,2,9759.16,1553.23,1264.26,3.07786,'64:0 '),
+(987,'TeldrassilHubW1',1,141,141,1,10,2,10032.9,1820.23,1320.1,4.58073,'64:0 988:0 989:0 990:0 992:0 '),
+(988,'PoolsOfArlithrien',1,141,478,1,10,2,9596.69,1802.05,1293.91,5.64964,'981:0 987:0 '),
+(989,'TeldrassilHubW2',1,141,141,1,10,2,10162.3,1440.21,1325.14,3.89821,'985:0 987:0 '),
+(990,'OracleGladeRoad',1,141,141,4,10,2,10352,1874.33,1324.48,6.02465,'987:0 991:0 '),
+(991,'OracleGlade',1,141,264,1,10,2,10884.7,2071.72,1327.43,2.94589,'990:0 '),
+(992,'DarnassusEntrance',1,1657,1657,1,60,3,9945.1,2019.66,1351.87,4.64235,'987:0 '),
+(993,'AuberdineSpawn',1,148,442,8,20,3,6553.45,522.918,11.8561,3.67005,'59:0 994:0 '),
+(994,'LongWash1',1,148,453,8,20,2,6232.15,537.866,7.35703,5.18,'59:0 993:0 995:0 1008:0 '),
+(995,'LongWash2',1,148,2077,8,20,2,5552.17,453.898,19.6886,6.27955,'994:0 996:0 1005:0 1008:0 '),
+(996,'TwilightShore1',1,148,2078,14,20,2,5012.98,536.041,5.96794,4.54499,'995:0 997:0 1005:0 95:0 '),
+(997,'TwilightShore2',1,148,2078,14,20,2,4688.48,865.878,2.79823,2.76606,'996:0 998:0 999:0 '),
+(998,'TwilightShore3',1,148,2078,14,20,2,4503.92,906.145,4.30626,5.45958,'997:0 1002:0 1038:0 '),
+(999,'RemtravelsExcavation',1,148,450,8,20,2,4714.44,550.759,26.823,1.95474,'997:0 1000:0 95:0 94:0 '),
+(1000,'RemtravelsExcavationInside1',1,148,450,14,20,2,4620.8,642.65,6.43919,5.10026,'999:0 1001:0 '),
+(1001,'RemtravelsExcavationInside2',1,148,450,14,20,2,4567.99,561.83,1.27184,0.69615,'1000:0 '),
+(1002,'DarkshoreExitSW',1,148,2077,8,20,2,4243.34,412.704,58.3351,0.245327,'998:0 1003:0 1027:0 '),
+(1003,'DarkshoreExitFork',1,148,2077,8,20,2,4395.16,213.188,52.2559,2.29326,'1002:0 1004:0 94:0 1006:0 '),
+(1004,'DarkshoreExitSE',1,148,2077,8,20,2,4141.67,41.4988,23.6074,3.67163,'1003:0 1028:0 '),
+(1005,'WindbendRiverN',1,148,2077,8,20,2,5261.19,254.236,30.0406,3.18665,'995:0 996:0 95:0 1008:0 1009:0 '),
+(1006,'MastersGlaiveRoad',1,148,2077,8,20,2,4568.13,285.307,57.6068,1.63547,'94:0 95:0 1003:0 1007:0 '),
+(1007,'MastersGlaive',1,148,449,8,20,2,4541.58,449.011,32.0175,5.01071,'1006:0 '),
+(1008,'AmetharanRoad',1,148,2077,8,20,2,5720.14,311.438,20.1904,4.41184,'59:0 994:0 995:0 1005:0 1009:0 1010:0 '),
+(1009,'Ametharan',1,148,447,8,20,2,5586.01,84.3345,27.1266,1.57459,'1005:0 1008:0 1010:0 '),
+(1010,'AmetharanN',1,148,447,8,20,2,5801.69,83.785,34.5622,2.98046,'59:0 1008:0 1009:0 1011:0 '),
+(1011,'DarkshoreMoonkins',1,148,148,8,20,2,6267.1,23.9018,32.4976,3.19251,'59:0 1010:0 1012:0 1013:0 '),
+(1012,'DarkshoreNRoad1',1,148,148,8,20,2,6568,183.3,33.0481,3.37511,'59:0 1011:0 1013:0 1014:0 '),
+(1013,'BashalAran',1,148,446,8,20,2,6724.32,-182.155,32.4813,2.68198,'1011:0 1012:0 1014:0 '),
+(1014,'DarkshoreNRoad2',1,148,148,8,20,2,6818.81,102.669,19.5599,2.84101,'1012:0 1013:0 1015:0 '),
+(1015,'DarkshoreNRoad3',1,148,148,8,20,2,6851.5,-74.339,19.6655,5.58399,'1014:0 1016:0 1022:0 '),
+(1016,'DarkshoreNRoad4',1,148,148,8,20,2,7119.42,-81.8027,14.4199,3.09232,'1015:0 1017:0 1022:0 '),
+(1017,'DarkshoreNRoad5',1,148,148,8,20,2,7256.24,-291.22,21.0422,4.79468,'1016:0 1018:0 1022:0 '),
+(1018,'DarkshoreNRoad6',1,148,148,8,20,2,7251.65,-503.552,27.2626,1.57453,'1017:0 1019:0 1023:0 1026:0 1024:0 '),
+(1019,'CliffspringFalls1',1,148,445,8,20,2,6945.23,-647.544,58.2647,0.698808,'1018:0 96:0 1022:0 '),
+(1020,'CliffspringFallsInside1',1,148,445,8,20,2,6751.15,-678.916,69.6518,0.322209,'96:0 '),
+(1021,'CliffspringFallsInside2',1,148,445,8,20,2,6801.08,-758.228,69.6369,1.04478,'96:0 '),
+(1022,'CliffspringRiverCamp',1,148,456,8,20,2,6874.54,-444.951,41.5568,5.10331,'1015:0 1016:0 1017:0 1019:0 '),
+(1023,'TowerOfAlthalaxx',1,148,444,14,20,2,7134.02,-794.131,67.6245,1.1665,'1018:0 1024:0 '),
+(1024,'RuinsOfMathystra1',1,148,443,14,20,2,7266.69,-945.767,35.1327,5.29378,'1018:0 1023:0 1025:0 1026:0 '),
+(1025,'RuinsOfMathystra2',1,148,443,14,20,2,7600.47,-1097.96,49.7759,2.73731,'1026:0 1024:0 '),
+(1026,'RuinsOfMathystra3',1,148,443,14,20,2,7493.36,-767.521,12.9545,3.62677,'1018:0 1025:0 1024:0 '),
+(1027,'ZoramStrandFork',1,331,331,18,30,2,3817.2,679.137,5.10897,5.73165,'1002:0 1035:0 1036:0 1039:0 '),
+(1028,'AshenvaleNW_hub1',1,331,331,18,30,0,3974.7,-4.75098,16.9651,0.475045,'157:0 1004:0 1029:0 '),
+(1029,'AshenvaleNW_hub2',1,331,331,18,30,0,3657.91,209.708,2.09702,5.65554,'156:0 1028:0 1030:0 1031:0 '),
+(1030,'AshenvaleNW_hub3',1,331,331,18,30,0,3467.65,456.674,-1.34147,5.28246,'1029:0 1031:0 1032:0 1033:0 1035:0 '),
+(1031,'AshenvaleNW_hub4',1,331,413,18,30,0,3455.92,219.392,12.6662,4.49903,'156:0 1029:0 1030:0 1033:0 '),
+(1032,'AshenvaleNW_hub5',1,331,441,18,30,0,3249.97,704.667,5.38086,5.25498,'1030:0 1034:0 '),
+(1033,'MaestrasPost',1,331,413,18,30,0,3259.03,232.17,11.012,5.89391,'156:0 1030:0 1031:0 1034:0 1040:0 '),
+(1034,'LakeFalathim',1,331,441,18,30,0,3042.8,537.807,4.22352,5.78789,'1032:0 1033:0 '),
+(1035,'ZoramStrandExit',1,331,331,18,30,0,3657.05,656.795,4.96231,0.51393,'158:0 1027:0 1030:0 1036:0 '),
+(1036,'ZoramStrandC',1,331,414,18,30,0,3801.56,849.009,0.513784,2.44601,'158:0 1027:0 1035:0 1037:0 1039:0 '),
+(1037,'ZoramStrandS',1,331,414,18,30,0,3530.82,1106.94,3.5186,5.37358,'158:0 1036:0 '),
+(1038,'ZoramStrandNWIsle',1,331,414,18,30,0,4170.75,1326.83,19.2012,4.42522,'998:0 1039:0 '),
+(1039,'ZoramStrandN',1,331,414,18,30,0,4069.2,824.531,3.14713,3.15877,'1027:0 1036:0 1038:0 '),
+(1040,'MaestraHighway1',1,331,413,18,30,0,3098.29,226.932,38.2729,0.113369,'1033:0 1041:0 '),
+(1041,'MaestraHighway2',1,331,413,18,30,0,3010.21,148.647,65.398,0.16052,'1040:0 1042:0 '),
+(1042,'MaestraHighway3',1,331,331,18,30,0,2859.2,196.478,94.7169,5.92141,'1041:0 1043:0 '),
+(1043,'MaestraHighway4',1,331,331,18,30,0,2812.81,41.9868,95.6736,1.28951,'1042:0 1044:0 1058:0 '),
+(1044,'ThistlefurVillageExit',1,331,331,18,30,0,2868.2,-73.4622,101.174,1.57029,'1043:0 1045:0 1046:0 1056:0 1058:0 '),
+(1045,'ThistlefurVillageRoad1',1,331,331,18,30,0,3135.26,-172.008,106.895,2.338,'1044:0 1046:0 1047:0 1051:0 '),
+(1046,'ThistlefurVillageRoad2',1,331,331,18,30,0,3105.59,-62.1211,99.9184,3.67319,'1044:0 1045:0 '),
+(1047,'ThistlefurVillage1',1,331,2301,18,30,0,3406.44,-322.711,134.117,2.65215,'1045:0 1048:0 '),
+(1048,'ThistlefurVillage2',1,331,2301,18,30,0,3405.57,-442.447,153.072,1.32875,'1047:0 1049:0 1051:0 '),
+(1049,'ThistlefurVillage3',1,331,2301,18,30,0,3502.9,-501.921,187.011,2.83083,'1048:0 1050:0 '),
+(1050,'ThistlefurVillage4',1,331,2301,18,30,0,3340.18,-745.556,165.112,0.56888,'1049:0 '),
+(1051,'ThistlefurVillage5',1,331,331,18,30,0,3151.47,-574.826,152.496,0.537465,'1045:0 1048:0 1052:0 '),
+(1052,'IrisLakeFork',1,331,424,18,30,0,2898.98,-769.452,163.783,4.51548,'1051:0 1053:0 1054:0 1055:0 '),
+(1053,'IrisLake',1,331,424,18,30,0,2942.58,-1048.01,198.163,1.57223,'1052:0 '),
+(1054,'AshenvaleC_hub1',1,331,331,18,30,0,2507.45,-866.571,135.152,0.193841,'1052:0 1055:0 1065:0 '),
+(1055,'AshenvaleC_hub2',1,331,415,18,30,0,2438.14,-533.1,114.408,0.47461,'38:0 1052:0 1054:0 1057:0 1059:0 '),
+(1056,'AshenvaleC_hub3',1,331,415,18,30,2,2850.97,-220.421,105.829,4.13457,'38:0 1044:0 '),
+(1057,'AshenvaleC_hub4h',1,331,415,18,30,0,2496.08,-368.618,107.608,4.35054,'1055:0 1058:0 '),
+(1058,'AshenvaleC_hub5h',1,331,415,18,30,0,2723.63,-97.6203,94.1401,0.260605,'1043:0 1044:0 1057:0 1060:0 '),
+(1059,'RuinsOfStardust',1,331,418,18,30,0,2078.15,-208.159,97.3023,6.04115,'1055:0 1063:0 '),
+(1060,'FireScarShrine1',1,331,417,18,30,0,2256.66,75.4186,101.15,2.42832,'1058:0 1061:0 '),
+(1061,'FireScarShrine2',1,331,417,18,30,0,2216.37,200.114,132.147,0.0014348,'1060:0 1062:0 '),
+(1062,'FireScarShrine3',1,331,417,18,30,0,2267.87,408.396,133.106,0.831985,'1061:0 '),
+(1063,'MystralLakeW',1,331,421,18,30,0,2023,-843.478,97.5457,1.65663,'1064:0 1059:0 165:0 168:0 '),
+(1064,'MystralLakeC',1,331,421,18,30,0,1984.95,-1113.44,95.5274,1.49563,'1063:0 165:0 1067:0 '),
+(1065,'AshenvaleC_hub6',1,331,331,18,30,0,2450.24,-1258.76,125.028,2.45577,'1054:0 1066:0 1068:0 1071:0 '),
+(1066,'AshenvaleC_hub7',1,331,331,18,30,0,2235.23,-1257.52,78.4907,4.80606,'166:0 1065:0 165:0 '),
+(1067,'AshenvaleC_hub8',1,331,331,18,30,0,1948.15,-1576.73,62.1809,2.79343,'167:0 1064:0 1069:0 '),
+(1068,'AshenvaleC_hub9',1,331,426,18,30,0,2312.84,-1688.24,121.859,1.16373,'166:0 1065:0 1072:0 1074:0 '),
+(1069,'AshenvaleC_hub10',1,331,331,18,30,0,2066.34,-1671.01,66.4345,2.13565,'166:0 1067:0 1070:0 '),
+(1070,'AshenvaleE_hub1',1,331,2457,18,30,0,2042.45,-1869.26,98.5045,1.0065,'1069:0 1074:0 1106:0 '),
+(1071,'AshenvaleC_hub11',1,331,331,18,30,0,2610.58,-1273.73,147.484,1.45233,'1065:0 1072:0 '),
+(1072,'AshenvaleC_hub12',1,331,426,18,30,0,2492.08,-1690.32,135.531,1.25401,'1068:0 1071:0 1073:0 '),
+(1073,'AshenvaleC_hub13',1,331,2457,18,30,0,2524.32,-1885.69,143.053,1.82734,'1072:0 1074:0 1075:0 '),
+(1074,'AshenvaleC_hub14',1,331,2457,18,30,0,2243.34,-1738.27,110.775,5.1594,'1068:0 1073:0 1070:0 '),
+(1075,'AshenvaleExitN1',1,331,2457,18,30,0,2722.91,-1983,158.23,2.65788,'1073:0 1076:0 1078:0 '),
+(1076,'AshenvaleExitN2',1,331,2457,18,30,0,3188.58,-1706.76,164.247,3.95184,'1075:0 1077:0 '),
+(1077,'AshenvaleExitN3',1,331,2457,18,30,0,3297.65,-1543.44,164.945,5.56976,'1076:0 1118:0 '),
+(1078,'AshenvaleC_hub14',1,331,2457,18,30,0,2434.66,-2007.27,137.863,5.44996,'159:0 1075:0 '),
+(1079,'FalfarenRiverN1',1,331,433,18,30,0,2635.78,-2457.48,169.635,2.50866,'159:0 1080:0 1086:0 '),
+(1080,'FalfarenRiverN2',1,331,433,18,30,0,2714.01,-2536.19,182.43,2.13757,'1079:0 1081:0 160:0 '),
+(1081,'NightRunE',1,331,428,18,30,0,2790.65,-2428.46,206.042,3.93612,'1080:0 1082:0 160:0 '),
+(1082,'NightRun',1,331,428,18,30,0,2635.93,-2273.51,202.702,5.29878,'1081:0 1083:0 1084:0 '),
+(1083,'NightRunC',1,331,428,18,30,0,2508.34,-2113.14,200.284,6.10971,'1082:0 1084:0 '),
+(1084,'NightRunW1',1,331,428,18,30,0,2796.44,-2157.58,201.403,3.2489,'1082:0 1083:0 '),
+(1085,'ForestSongEntranceW',1,331,2358,18,30,0,2816.28,-3116.79,176.969,1.10278,'160:0 161:0 1088:0 1089:0 '),
+(1086,'AshenvaleE_hub2',1,331,2457,18,30,0,2468.98,-2717.07,150.406,4.36767,'1079:0 1087:0 1114:0 '),
+(1087,'AshenvaleE_hub3',1,331,2457,18,30,0,2544.03,-2863.47,160.596,1.768,'1086:0 1088:0 '),
+(1088,'SatyrnaarEntrance',1,331,2457,18,30,0,2634.38,-3046.12,161.142,6.24673,'1085:0 1087:0 1089:0 1090:0 1096:0 '),
+(1089,'Satyrnaar',1,331,430,18,30,0,2728.6,-2942.91,140.775,5.09219,'1085:0 1088:0 '),
+(1090,'AshenvaleE_hub4',1,331,2457,18,30,0,2718.15,-3174.63,154.002,4.95083,'1088:0 1091:0 '),
+(1091,'AshenvaleE_hub5',1,331,2457,18,30,0,2747.9,-3325.14,129.722,0.481917,'161:0 1090:0 1092:0 1096:0 1097:0 '),
+(1092,'AshenvaleE_hub6',1,331,2457,18,30,0,2858.75,-3503.4,106.63,0.432834,'1091:0 1093:0 1095:0 '),
+(1093,'BoughShadowEntrance',1,331,2358,18,30,0,3097.87,-3414.65,140.149,2.35511,'161:0 1092:0 1094:0 '),
+(1094,'BoughShadow',1,331,438,50,60,0,3193.56,-3715.88,121.867,1.87405,'1093:0 '),
+(1095,'AshenvaleExitE1',1,331,2457,18,30,0,2885.88,-3697.95,96.0233,1.45779,'1092:0 1269:0 '),
+(1096,'WarsongLumberCampW1',1,331,437,18,30,0,2228.79,-3249.63,101.566,0.607582,'1088:0 1091:0 1097:0 1099:0 '),
+(1097,'WarsongLumberCampE1',1,331,437,18,30,0,2451.74,-3379.23,102.331,4.70735,'1091:0 1096:0 1098:0 1356:0 '),
+(1098,'KargathiaKeep',1,331,2637,18,30,2,2437.92,-3546.25,98.3118,2.20389,'1097:0 '),
+(1099,'FelfireHillFork',1,331,434,18,30,0,2080.86,-3145.14,101.473,3.35095,'1116:0 162:0 1096:0 1356:0 '),
+(1100,'DemonFallRidgeW1',1,331,436,18,30,0,1674.45,-3019.31,126.383,5.53436,'162:0 1101:0 '),
+(1101,'DemonFallRidgeW2',1,331,436,18,30,0,1590.49,-2969.19,181.724,5.65806,'1100:0 1102:0 '),
+(1102,'DemonFallRidgeW3',1,331,436,18,30,0,1540.54,-2824.95,181.724,2.53218,'1101:0 1103:0 '),
+(1103,'DemonFallRidgeW4',1,331,436,18,30,0,1461.22,-2803.04,146.324,2.97199,'1102:0 '),
+(1104,'DemonFallRidgeE1',1,331,435,18,30,0,1627.48,-3316.31,144.676,0.784629,'162:0 1105:0 '),
+(1105,'DemonFallRidgeE2',1,331,435,18,30,0,1721.33,-3476.04,144.293,2.30437,'1104:0 '),
+(1106,'AshenvaleE_hub7',1,331,433,18,30,0,1988.27,-1943.15,97.1296,1.1247,'1070:0 1107:0 '),
+(1107,'AshenvaleE_hub8',1,331,2457,18,30,0,1962.79,-2012.8,96.2461,1.06579,'1106:0 1108:0 '),
+(1108,'AshenvaleE_hub9',1,331,2457,18,30,0,1921.52,-2170.42,94.4681,2.67153,'1107:0 1109:0 1113:0 '),
+(1109,'AshenvaleE_hub10',1,331,2457,18,30,0,1650,-2198.36,90.4962,0.191633,'163:0 1108:0 1110:0 1111:0 1112:0 '),
+(1110,'AshenvaleExitSh',1,331,2457,18,30,0,1372.44,-2259.8,89.962,3.46083,'1111:0 1109:0 1112:0 169:0 1518:0 '),
+(1111,'AshenvaleExitSa',1,17,1703,8,25,2,1283.04,-2337.27,95.7661,5.44005,'1109:0 1110:0 1519:0 '),
+(1112,'AshenvaleE_hub11',1,331,422,18,30,0,1407.02,-2005.8,95.7095,5.15141,'1109:0 1110:0 '),
+(1113,'SplintertreePostRoadW',1,331,431,18,30,0,1994.45,-2424.98,91.2477,1.28488,'164:0 175:0 1108:0 1114:0 '),
+(1114,'SplintertreePostFork',1,331,2457,18,30,0,2176.5,-2659.1,114.31,6.03653,'175:0 1086:0 1113:0 1115:0 '),
+(1115,'SplintertreePostRoadE',1,331,2457,18,30,0,2082.36,-2724.41,108.011,0.790059,'164:0 1114:0 1116:0 '),
+(1116,'FelfireHillBridgeW',1,331,434,18,30,0,2039.97,-2914.67,108.448,1.43407,'1099:0 1115:0 1356:0 '),
+(1117,'DorDanilarrowDenInside',1,331,432,18,30,0,1800.96,-2749.28,74.2595,4.55915,'164:0 '),
+(1118,'FelwoodExitS',1,361,361,46,56,0,3743.81,-1481.83,196.177,3.29581,'1077:0 1119:0 '),
+(1119,'EmeraldSanctuaryFork',1,361,2479,46,56,0,3880.67,-1320.46,216.16,2.5595,'1118:0 1120:0 1123:0 1124:0 '),
+(1120,'DeadwoodVillage1',1,361,1761,46,56,0,3687.18,-1161.35,207.07,5.5283,'1119:0 1121:0 1122:0 '),
+(1121,'DeadwoodVillage2',1,361,1761,46,56,0,3530.84,-1083.16,232.998,0.383932,'1120:0 1122:0 '),
+(1122,'DeadwoodVillage3',1,361,361,46,56,0,3799.15,-1018.83,233.051,3.60798,'1120:0 1121:0 1124:0 1149:0 '),
+(1123,'EmeraldSanctuary',1,361,2479,46,56,1,4008.37,-1323.24,254.74,2.01756,'1119:0 1124:0 '),
+(1124,'FelwoodRoad1',1,361,361,46,56,0,3917.77,-1102.56,251.192,4.86854,'1119:0 1122:0 1123:0 1125:0 1149:0 '),
+(1125,'FelwoodRoad2',1,361,361,46,56,0,4111.01,-1000.91,273.994,3.79844,'1124:0 1126:0 1149:0 1155:0 '),
+(1126,'FelwoodRoad3',1,361,361,46,56,0,4217.57,-895.05,283.719,4.15774,'1125:0 1127:0 1149:0 1156:0 1157:0 1158:0 '),
+(1127,'FelwoodRoad4',1,361,361,46,56,0,4284.53,-848.098,284.982,3.75914,'1126:0 1128:0 '),
+(1128,'FelwoodRoad5',1,361,361,46,56,0,4421.12,-848.39,292.935,3.21525,'1127:0 1129:0 1157:0 '),
+(1129,'FelwoodRoad6',1,361,361,46,56,0,4543.91,-853.393,298.894,3.13867,'1128:0 1130:0 '),
+(1130,'FelwoodRoad7',1,361,361,46,56,0,4626.9,-811.164,299.948,3.55493,'1129:0 1131:0 1158:0 '),
+(1131,'FelwoodRoad8',1,361,361,46,56,0,4816.57,-743.65,300.125,3.49799,'1130:0 1132:0 1162:0 '),
+(1132,'FelwoodRoad9',1,361,361,46,56,0,4924.41,-736.286,307.085,3.21525,'1131:0 1133:0 1161:0 '),
+(1133,'FelwoodRoad10',1,361,361,46,56,0,5067.29,-754.16,325.077,3.06602,'1132:0 1134:0 1162:0 '),
+(1134,'FelwoodRoad11',1,361,361,46,56,0,5190.8,-721.312,342.065,3.32245,'1133:0 1135:0 1163:0 '),
+(1135,'FelwoodRoad12',1,361,1765,46,56,0,5321.67,-714.318,345.44,3.1693,'1134:0 1136:0 1175:0 '),
+(1136,'FelwoodRoad13',1,361,361,46,56,0,5528.6,-586.974,357.722,3.70533,'1135:0 1137:0 1175:0 1176:0 '),
+(1137,'FelwoodRoad14',1,361,361,46,56,0,5829.53,-657.626,373.409,2.93956,'1136:0 1138:0 1176:0 1177:0 '),
+(1138,'FelwoodRoad15',1,361,361,46,56,0,6212.38,-740.556,409.705,2.87084,'1137:0 1139:0 '),
+(1139,'FelwoodRoad16',1,361,361,46,56,0,6248.94,-853.467,415.845,1.8714,'1138:0 1140:0 1180:0 1188:0 '),
+(1140,'FelwoodRoad17',1,361,361,46,56,0,6316.22,-1000.95,421.045,1.77912,'1139:0 1141:0 1181:0 '),
+(1141,'FelwoodRoad18',1,361,361,46,56,0,6517.96,-1128.86,435.787,2.40548,'1140:0 1142:0 1187:0 '),
+(1142,'FelwoodRoad19',1,361,361,46,56,0,6589.42,-1238.14,446.438,2.19734,'1141:0 1143:0 1181:0 149:0 '),
+(1143,'FelwoodRoad20',1,361,361,46,56,0,6642.07,-1424.29,466.141,1.83997,'1142:0 1144:0 149:0 1190:0 '),
+(1144,'FelwoodRoad21',1,361,361,46,56,0,6582.2,-1624.29,494.577,1.32358,'1143:0 1145:0 1190:0 '),
+(1145,'FelwoodRoad22',1,361,361,46,56,0,6510.95,-1745.71,510.835,1.13311,'1144:0 1146:0 1183:0 '),
+(1146,'FelwoodRoad23',1,361,361,46,56,0,6528.61,-1901.05,539.009,1.63379,'1145:0 1147:0 1191:0 1193:0 '),
+(1147,'FelwoodRoad24',1,361,361,46,56,0,6558.12,-2008.36,559.656,1.52776,'1146:0 1148:0 1193:0 '),
+(1148,'FelwoodRoad25',1,361,361,46,56,0,6560.77,-2085.29,574.689,1.48063,'1147:0 1191:0 148:0 '),
+(1149,'JadefireGlenEntrance',1,361,361,46,56,0,3926.58,-911.03,268.957,1.31568,'1122:0 1124:0 1125:0 1126:0 1150:0 1157:0 '),
+(1150,'JadefireGlen1',1,361,2480,46,56,0,3811.45,-783.703,310.11,5.52543,'1149:0 1151:0 1152:0 1153:0 '),
+(1151,'JadefireGlen2',1,361,2480,46,56,0,3718.85,-847.307,312.709,0.532263,'1150:0 '),
+(1152,'JadefireGlen3',1,361,2480,46,56,0,3912.89,-762.669,314.637,3.43039,'1150:0 '),
+(1153,'JadefireGlen4',1,361,2480,46,56,0,3856.5,-672.112,328.888,4.11173,'1150:0 1154:0 '),
+(1154,'JadefireGlen5',1,361,2480,46,56,0,4036.91,-552.243,344.95,3.72492,'1153:0 '),
+(1155,'FelwoodSide1_1',1,361,361,46,56,0,4213.32,-1147.96,320.929,1.94598,'1125:0 1156:0 '),
+(1156,'FelwoodSide1_2',1,361,361,46,56,0,4310.85,-1068.85,323.86,2.16393,'1126:0 1155:0 '),
+(1157,'FelwoodSide2_1',1,361,361,46,56,0,4140.08,-676.318,285.659,4.10583,'1126:0 1128:0 1149:0 '),
+(1158,'RuinsOfConstellas1',1,361,2481,46,56,0,4508.94,-658.169,260.072,5.34478,'1126:0 1130:0 1159:0 '),
+(1159,'RuinsOfConstellas2',1,361,2481,46,56,0,4578.21,-555.417,290.438,2.46629,'1158:0 1160:0 '),
+(1160,'RuinsOfConstellas3',1,361,2481,46,56,0,4580.93,-222.976,301.195,4.57508,'1159:0 '),
+(1161,'Jaedenar1',1,361,1763,46,56,0,4922.62,-656.651,308.014,3.98916,'1132:0 1162:0 '),
+(1162,'Jaedenar2',1,361,1763,46,56,0,4883.95,-595.824,308.56,5.16136,'1131:0 1133:0 1161:0 1163:0 1165:0 1166:0 '),
+(1163,'BloodvenomPostEntrance',1,361,361,46,56,0,5228.11,-538.087,328.617,3.14997,'1134:0 1162:0 1164:0 '),
+(1164,'BloodvenomPost',1,361,1997,46,56,0,5222.93,-365.293,325.373,4.62848,'150:0 1163:0 '),
+(1165,'ShrineOfTheDeceiver',1,361,1771,46,56,0,4783.38,-551.646,274.445,4.62258,'1162:0 '),
+(1166,'Jaedenar3',1,361,1763,46,56,0,4729.93,-453.696,349.944,4.46628,'1162:0 1167:0 '),
+(1167,'Jaedenar4',1,361,1763,46,56,0,4856.52,-382.228,350.288,4.8845,'1166:0 1168:0 '),
+(1168,'ShadowHold1',1,361,1770,46,56,0,4986.27,-445.68,316.676,5.65694,'1167:0 1169:0 '),
+(1169,'ShadowHold2',1,361,1770,46,56,0,5098.64,-485.812,296.677,4.68186,'1168:0 1170:0 '),
+(1170,'ShadowHold3',1,361,1770,46,56,0,5178.54,-485.604,301.227,5.33099,'1169:0 1171:0 '),
+(1171,'ShadowHold4',1,361,1770,46,56,0,5275.41,-671.399,253.46,3.4162,'1170:0 1172:0 '),
+(1172,'ShadowHold5',1,361,1770,46,56,0,5339.64,-532.836,254.255,4.57192,'1171:0 1173:0 1174:0 '),
+(1173,'ShadowHold6',1,361,1770,46,56,0,5427.58,-486.39,248.303,2.98345,'1172:0 '),
+(1174,'ShadowHold7',1,361,1770,46,56,0,5435.52,-425.111,272.429,5.11384,'1172:0 '),
+(1175,'ShatterScarVale1',1,361,1766,46,56,0,5476.34,-722.154,342.284,2.91904,'1135:0 1136:0 1176:0 1178:0 '),
+(1176,'ShatterScarVale2',1,361,1766,46,56,0,5601.44,-768.8,344.125,2.60488,'1136:0 1137:0 1175:0 1178:0 '),
+(1177,'ShatterScarVale3',1,361,1766,46,56,0,5560.13,-1032.72,379.177,1.06354,'1137:0 1178:0 1179:0 '),
+(1178,'ShatterScarVale4',1,361,1766,46,56,0,5457.81,-881.575,366.112,0.423435,'1175:0 1176:0 1177:0 '),
+(1179,'ShatterScarVale5',1,361,1766,46,56,0,5754.61,-1189.42,406.559,5.86624,'1177:0 1180:0 '),
+(1180,'IrontreeWoods1',1,361,1767,46,56,0,6121.79,-1182.38,370.89,3.93611,'1139:0 1179:0 1181:0 1182:0 '),
+(1181,'IrontreeWoods2',1,361,1767,46,56,0,6394.76,-1179.55,386.014,6.27855,'1140:0 1142:0 1180:0 '),
+(1182,'IrontreeWoods3',1,361,1767,46,56,0,6130.52,-1612.09,477.459,1.51512,'1180:0 1183:0 '),
+(1183,'IrontreeWoods4',1,361,1767,46,56,0,6296.99,-1561.48,453.656,3.98913,'1145:0 1182:0 149:0 '),
+(1184,'IrontreeCavern1',1,361,1768,46,56,0,6352.66,-1649.89,424.433,0.128896,'149:0 1185:0 1186:0 '),
+(1185,'IrontreeCavern2',1,361,1768,46,56,0,6439.2,-1697.67,413.417,3.51397,'1184:0 '),
+(1186,'IrontreeCavern3',1,361,1768,46,56,0,6348.65,-1752.82,421.668,2.4419,'1184:0 '),
+(1187,'JadefireRun1',1,361,2618,46,56,0,6621.19,-889.352,485.149,4.30328,'1141:0 1188:0 '),
+(1188,'JadefireRun2',1,361,2618,46,56,0,6459.98,-779.685,474.056,3.5611,'1139:0 1187:0 1189:0 '),
+(1189,'JadefireRun3',1,361,2618,46,56,0,6292.94,-589.199,467.536,5.59331,'1188:0 '),
+(1190,'FelwoodSide3_1',1,361,361,46,56,0,6839.58,-1594.78,491.498,3.27443,'1143:0 1144:0 '),
+(1191,'TalonbranchGladeEntrance',1,361,1998,46,56,0,6265.97,-1990.07,570.371,0.397118,'1146:0 1148:0 1192:0 '),
+(1192,'TalonbranchGlade',1,361,1998,46,56,3,6170.94,-1933.43,569.997,5.3569,'1191:0 '),
+(1193,'FelpawVillage1',1,361,1762,46,56,0,6806.95,-1993.95,564.972,2.74938,'1146:0 1147:0 1194:0 1195:0 '),
+(1194,'FelpawVillage2',1,361,1762,46,56,0,6789.17,-1850.3,554.16,4.19844,'1193:0 1195:0 '),
+(1195,'FelpawVillage3',1,361,1762,46,56,0,6929.55,-1812.01,575.12,3.87447,'1193:0 1194:0 '),
+(1196,'TimbermawHoldInside',1,361,1769,46,56,0,7017.44,-2122.43,586.887,0.262027,'142:0 148:0 1197:0 '),
+(1197,'MoongladeExitS',1,493,493,46,60,0,7409.39,-2177.56,520.829,3.84148,'1196:0 1198:0 1199:0 '),
+(1198,'MoongladeFlightH',1,493,493,46,60,5,7479.01,-2119.01,492.215,1.99187,'1197:0 1199:0 '),
+(1199,'MoongladeMainRoad1',1,493,493,46,60,0,7621.21,-2207.23,468.939,2.73996,'1197:0 1198:0 1200:0 '),
+(1200,'MoongladeMainRoad2',1,493,493,46,60,0,7521.64,-2483.68,454.141,1.37142,'1199:0 1201:0 '),
+(1201,'MoongladeFlightA',1,493,493,46,60,3,7441.03,-2497.31,462.16,0.100638,'1200:0 '),
+(1202,'FrostfireHotSprings1',1,618,2246,53,60,0,6669.75,-2350.35,569.688,6.11089,'142:0 1203:0 1204:0 1205:0 '),
+(1203,'FrostfireHotSprings2',1,618,618,53,60,0,6516.03,-2438.96,575.469,0.575811,'1202:0 1204:0 1205:0 1206:0 '),
+(1204,'FrostfireHotSprings3',1,618,2246,53,60,0,6739.97,-2534.28,547.608,2.35473,'1202:0 1203:0 1205:0 1206:0 1207:0 '),
+(1205,'FrostfireHotSprings4',1,618,2246,53,60,0,6844.94,-2510.17,562.168,2.83383,'1202:0 1203:0 1204:0 1207:0 '),
+(1206,'WinterspringWRoad1',1,618,618,53,60,0,6552.68,-2761.31,569.286,1.6412,'1203:0 1204:0 1208:0 1209:0 '),
+(1207,'FrostfireHotSprings5',1,618,2246,53,60,0,6778.35,-2683.46,542.964,1.10124,'1204:0 1205:0 '),
+(1208,'WinterspringWRoad2',1,618,618,53,60,0,6544.07,-3009.5,594.631,1.59877,'1206:0 1209:0 1211:0 1213:0 '),
+(1209,'TimbermawPost1',1,618,2243,53,60,0,6443.26,-2975.94,574.619,1.46329,'1206:0 1208:0 1210:0 '),
+(1210,'TimbermawPost2',1,618,2243,53,60,0,6501.28,-3395.1,596.264,1.54182,'1209:0 1212:0 '),
+(1211,'WinterspringWRoad3',1,618,618,53,60,0,6612.45,-3218.46,610.975,1.85402,'1208:0 1212:0 1213:0 '),
+(1212,'WinterspringWRoad4',1,618,618,53,60,0,6645.3,-3475.9,667.925,1.61251,'1210:0 1211:0 1214:0 '),
+(1213,'FrostfireHotSprings6',1,618,2246,53,60,0,6782.88,-3070.45,577.01,3.04979,'1208:0 1211:0 '),
+(1214,'WinterspringWRoad5',1,618,618,53,60,0,6657.52,-3668.1,695.82,1.56341,'1212:0 1215:0 1216:0 1221:0 '),
+(1215,'WinterspringWRoad6',1,618,2252,53,60,0,6397.07,-3892.14,680.982,0.597365,'1214:0 1216:0 1217:0 '),
+(1216,'LakeKeltheril',1,618,2251,53,60,0,6536.55,-4131.94,665.606,1.20213,'1214:0 1215:0 143:0 1218:0 '),
+(1217,'Mazthoril1',1,618,2245,53,60,0,6183.02,-4265.44,745.257,1.04309,'1215:0 1218:0 1219:0 '),
+(1218,'EverlookFork1',1,618,2255,53,60,0,6655.73,-4560.81,717.041,1.46131,'56:0 1216:0 1217:0 1239:0 1240:0 '),
+(1219,'Mazthoril2',1,618,2245,53,60,0,5991.6,-4416.44,712.225,0.648425,'1217:0 1220:0 1255:0 1259:0 '),
+(1220,'Mazthoril3',1,618,2245,53,60,0,6111.88,-4459.18,665.247,2.8927,'1219:0 1254:0 1255:0 '),
+(1221,'WinterspringCFork',1,618,618,53,60,0,6913.24,-4134.15,695.074,1.72442,'1214:0 1222:0 1224:0 1225:0 '),
+(1222,'WinterspringNRoad1',1,618,618,53,60,0,7189.47,-4145.52,708.652,2.01894,'1221:0 1223:0 1224:0 1225:0 1226:0 '),
+(1223,'StarfallVillage1',1,618,2253,53,60,2,7163.35,-3949.34,749.855,4.52632,'1222:0 1224:0 '),
+(1224,'StarfallVillage2',1,618,2253,53,60,2,7095.04,-4017.7,744.806,3.57795,'1221:0 1222:0 1223:0 '),
+(1225,'WinterspringN_hub1',1,618,618,53,60,0,7243.63,-4428.68,637.464,1.30573,'147:0 1221:0 1222:0 1235:0 '),
+(1226,'WinterspringNRoad2',1,618,618,53,60,0,7437.77,-4106.34,703.256,3.39493,'1222:0 1227:0 1231:0 1233:0 '),
+(1227,'WinterspringNRoad3',1,618,2241,53,60,0,7658.36,-4006.12,703.193,3.60307,'1226:0 1228:0 1229:0 1230:0 '),
+(1228,'FrostsaberRock',1,618,2241,53,60,0,8080.15,-3838.54,691.237,3.49507,'1227:0 1229:0 1230:0 '),
+(1229,'FrostsaberRockSide1',1,618,2241,53,60,0,7601.67,-3828.53,689.193,5.16206,'1227:0 1228:0 '),
+(1230,'FrostsaberRockSide2',1,618,2241,53,60,0,7960.17,-4207.36,694.89,1.05442,'1227:0 1228:0 1231:0 1232:0 '),
+(1231,'FrostsaberRockSide3',1,618,2241,53,60,0,7696.88,-4240.08,674.756,0.182632,'1226:0 1230:0 1232:0 1233:0 '),
+(1232,'FrostsaberRockSide4',1,618,2241,53,60,0,7898.77,-4343.01,714.863,1.26058,'1230:0 1231:0 1234:0 '),
+(1233,'WinterspringN_hub2',1,618,618,53,60,0,7541.26,-4433.34,604.622,1.91639,'1226:0 1231:0 1234:0 1235:0 '),
+(1234,'WinterspringN_hub3',1,618,618,53,60,0,7841.47,-4633.94,711.459,1.96351,'1232:0 1233:0 '),
+(1235,'WinterspringN_hub4',1,618,618,53,60,0,7409.79,-4690.69,629.373,2.1363,'1225:0 1233:0 1236:0 1238:0 '),
+(1236,'WinterspringN_hub5',1,618,618,53,60,0,7593.76,-4979.89,701.375,2.05382,'1235:0 1237:0 1238:0 '),
+(1237,'HiddenGrove',1,618,2242,53,60,0,7765.82,-4824.05,695.683,4.13316,'1236:0 '),
+(1238,'WinterfallVillage1',1,618,2244,53,60,0,7043.19,-4998.21,715.354,0.445711,'1235:0 1236:0 1243:0 '),
+(1239,'EverlookFork2',1,618,2255,53,60,0,6611.3,-4739.92,698.015,0.695072,'1218:0 1241:0 1247:0 1254:0 '),
+(1240,'EverlookFlightH',1,618,2255,53,60,5,6816.77,-4612.99,710.669,6.21445,'56:0 1218:0 1242:0 '),
+(1241,'EverlookFlightA',1,618,2255,53,60,3,6790.08,-4744.29,701.5,3.20441,'1239:0 1242:0 '),
+(1242,'WinterspringN_hub6',1,618,618,53,60,0,6927.32,-4786.97,694.458,2.5918,'1240:0 1241:0 1243:0 '),
+(1243,'WinterfallVillageOutside',1,618,2244,53,60,0,6939.52,-5010.6,692.554,1.59042,'1238:0 1242:0 1244:0 '),
+(1244,'WinterfallVillage2',1,618,2244,53,60,0,6808.46,-5094.96,695.933,0.427246,'1243:0 1245:0 '),
+(1245,'WinterfallVillage3',1,618,2244,53,60,0,6729.74,-5155.43,735.364,6.18029,'1244:0 1246:0 '),
+(1246,'WinterfallVillage4',1,618,2244,53,60,0,6716.73,-5241.35,779.049,1.49343,'1245:0 '),
+(1247,'IceThistleHills1',1,618,2247,53,60,0,6422.5,-5063.45,747.183,0.955424,'1239:0 1248:0 1249:0 '),
+(1248,'IceThistleHills2',1,618,2247,53,60,0,6075.66,-5048.11,793.011,6.23722,'1247:0 1255:0 '),
+(1249,'IceThistleHillsCave1',1,618,2247,53,60,0,6558.26,-5114.63,770.071,4.80583,'1247:0 1250:0 '),
+(1250,'IceThistleHillsCave2',1,618,2247,53,60,0,6647.69,-5270.98,753.532,0.248568,'1249:0 1251:0 1252:0 '),
+(1251,'IceThistleHillsCave3',1,618,2247,53,60,0,6547.52,-5279.93,751.433,0.29569,'1250:0 '),
+(1252,'IceThistleHillsCave4',1,618,2247,53,60,0,6591.19,-5377.61,757.91,2.11585,'1250:0 1253:0 '),
+(1253,'IceThistleHillsCave5',1,618,2247,53,60,0,6749.19,-5302.24,746.013,3.42748,'1252:0 '),
+(1254,'WinterspringSFork',1,618,618,53,60,0,6181.52,-4918.26,736.9,1.70352,'1220:0 1239:0 1255:0 '),
+(1255,'WinterspringSRoad1',1,618,618,53,60,0,5738.96,-4759.97,772.327,5.63249,'144:0 1219:0 1220:0 1248:0 1254:0 1256:0 1258:0 '),
+(1256,'OwlWingThicket1',1,618,2250,53,60,0,5704.51,-4972.1,807.203,1.24015,'1255:0 1257:0 '),
+(1257,'OwlWingThicket2',1,618,2250,53,60,0,5516.17,-4932.2,843.306,5.86024,'1256:0 '),
+(1258,'WinterspringSRoad2',1,618,618,53,60,0,5542.21,-4699,784.197,5.83863,'144:0 1255:0 1263:0 '),
+(1259,'DunMandarrW',1,618,2248,53,60,0,5726.18,-4420.5,778.036,0.0455333,'144:0 1219:0 '),
+(1260,'FrostwhisperGorge1',1,618,2249,53,60,0,5376.4,-4513.45,720.025,0.126024,'144:0 1261:0 '),
+(1261,'FrostwhisperGorge2',1,618,2249,53,60,0,5296.85,-4663.41,691.461,1.09206,'1260:0 1262:0 '),
+(1262,'FrostwhisperGorge3',1,618,2249,53,60,0,5259.63,-4868.84,691.501,1.4769,'1261:0 '),
+(1263,'FrostwhisperGorgeBridge1',1,618,618,53,60,0,5329.29,-4753.88,815.467,6.28158,'1258:0 1264:0 '),
+(1264,'FrostwhisperGorgeBridge2',1,618,618,53,60,1,5184.44,-4704.74,823.398,6.16966,'1263:0 1265:0 '),
+(1265,'DarkwhisperGorge1',1,618,618,53,60,0,5076.75,-4593.36,846.068,5.72001,'1264:0 1266:0 1267:0 1268:0 '),
+(1266,'DarkwhisperGorge2',1,618,2249,53,60,0,5094.49,-4876.76,867.355,1.66931,'1265:0 '),
+(1267,'DarkwhisperGorge3',1,618,2249,53,60,0,5323.19,-4418.49,854.383,3.62103,'1265:0 '),
+(1268,'DarkwhisperGorge4',1,618,2256,53,60,0,4938.26,-4535.16,855.372,3.64264,'1265:0 '),
+(1269,'AzsharaExitW',1,16,878,43,54,0,2800.83,-3813.24,83.7107,0.929092,'1095:0 1270:0 '),
+(1270,'TalrendisPointRoad',1,16,3137,43,54,0,2749.62,-3926.91,89.3218,0.361656,'1269:0 145:0 1271:0 1273:0 '),
+(1271,'ShadowsongShrine1',1,16,878,43,54,0,2935.67,-3982.68,124.392,2.73551,'1270:0 1272:0 '),
+(1272,'ShadowsongShrine2',1,16,1235,43,54,0,2850.78,-4024.75,140.874,0.32041,'1271:0 '),
+(1273,'AzsharaRoad1',1,16,16,43,54,0,2815.94,-4122.46,94.8896,2.21715,'1270:0 1274:0 1279:0 '),
+(1274,'AzsharaRoad2',1,16,16,43,54,0,2941.29,-4227.56,95.186,2.45278,'1273:0 1275:0 1280:0 '),
+(1275,'AzsharaRoad3',1,16,16,43,54,0,3057.29,-4322.31,90.9214,2.58827,'1274:0 1276:0 1280:0 '),
+(1276,'AzsharaRoad4',1,16,16,43,54,0,3229.99,-4491.16,92.7121,1.9737,'1275:0 1277:0 1280:0 1284:0 '),
+(1277,'AzsharaRoad5',1,16,16,43,54,0,3333.33,-4589.69,92.2964,2.31141,'1276:0 1278:0 1283:0 1286:0 1326:0 '),
+(1278,'AzsharaRoad6',1,16,16,43,54,0,3451.9,-4750.56,108.662,2.10326,'1277:0 1286:0 1287:0 1288:0 1324:0 1327:0 '),
+(1279,'AzsharaE1',1,16,16,43,54,0,2997.33,-4106.35,99.9666,3.2087,'1273:0 1280:0 1283:0 '),
+(1280,'AzsharaE2',1,16,1236,43,54,0,3118.77,-4225.25,100.015,2.98486,'1274:0 1275:0 1276:0 1279:0 1281:0 1283:0 '),
+(1281,'AzsharaE3',1,16,1236,43,54,0,3300.36,-4275.9,126.16,2.80817,'1280:0 1282:0 '),
+(1282,'AzsharaE4',1,16,1236,43,54,0,3271.81,-4373.57,125.961,1.43765,'1281:0 '),
+(1283,'AzsharaE5',1,16,1236,43,54,0,3373.1,-4206.33,105.482,3.57,'1277:0 1279:0 1280:0 1284:0 1285:0 '),
+(1284,'AzsharaE6',1,16,16,43,54,0,3582.46,-4138.13,104.333,3.80758,'1276:0 1283:0 1285:0 '),
+(1285,'Valormok',1,16,1237,43,54,5,3613.75,-4414.24,112.731,2.85922,'1283:0 1284:0 1286:0 '),
+(1286,'AzsharaE7',1,16,16,43,54,0,3590.09,-4639.97,116.675,1.6988,'1277:0 1278:0 1285:0 1287:0 '),
+(1287,'AzsharaE8',1,16,1224,43,54,0,3744.78,-4813.74,138.923,2.88199,'1278:0 1286:0 1289:0 '),
+(1288,'AzsharaE9',1,16,1221,43,54,0,3499.39,-4902.72,144.155,1.64696,'1278:0 1289:0 '),
+(1289,'AzsharaE10',1,16,1221,43,54,0,3759.42,-4967.77,142.273,2.79364,'1287:0 1288:0 1290:0 '),
+(1290,'AzsharaN1',1,16,1216,43,54,0,4036.22,-5259.02,107.607,2.29688,'1289:0 1291:0 1292:0 1322:0 '),
+(1291,'AzsharaN2',1,16,1216,43,54,0,4056.25,-5430.36,110.698,6.13747,'1290:0 1294:0 1293:0 1322:0 '),
+(1292,'AzsharaN3',1,16,1216,43,54,0,4443.1,-5422.68,110.062,2.83485,'1290:0 1293:0 '),
+(1293,'AzsharaN4',1,16,1225,43,54,0,4501.55,-5509.11,112.466,2.9016,'1291:0 1292:0 1294:0 1295:0 '),
+(1294,'AzsharaN5',1,16,1225,43,54,0,4344.93,-5684.07,101.657,1.91789,'1291:0 1293:0 1296:0 1297:0 1322:0 '),
+(1295,'AzsharaN6',1,16,1219,43,54,0,4731.82,-5683.23,101.157,2.58744,'1293:0 1296:0 1297:0 '),
+(1296,'AzsharaN7',1,16,1220,43,54,0,4463.44,-6017.87,99.0046,1.97484,'1294:0 1295:0 1299:0 1300:0 '),
+(1297,'AzsharaN8',1,16,1219,43,54,0,4794.73,-5948.23,94.5572,2.9291,'1294:0 1295:0 1298:0 1300:0 '),
+(1298,'AzsharaN9',1,16,1219,43,54,0,4752.23,-6324.43,112.261,1.52126,'1297:0 1300:0 1301:0 '),
+(1299,'AzsharaN10',1,16,1220,43,54,0,4304.26,-6172.26,132.068,0.476687,'1296:0 1300:0 '),
+(1300,'AzsharaN11',1,16,1220,43,54,0,4483.15,-6277.92,109.808,2.02983,'1296:0 1297:0 1298:0 1299:0 1302:0 '),
+(1301,'AzsharaN12',1,16,1219,43,54,0,4815.57,-6641.1,96.3628,1.82366,'1298:0 1302:0 1304:0 '),
+(1302,'AzsharaN13',1,16,1219,43,54,0,4579.43,-6593.47,100.233,1.80599,'1300:0 1301:0 1303:0 '),
+(1303,'AzsharaN14',1,16,2497,43,54,0,4335.22,-6872.83,94.6868,0.889033,'1302:0 1304:0 1305:0 1306:0 '),
+(1304,'AzsharaN15',1,16,2497,43,54,0,4772.55,-7077.06,93.7659,1.50753,'1301:0 1303:0 1306:0 1308:0 '),
+(1305,'AzsharaN16',1,16,1228,43,54,0,4163.23,-7077.25,104.42,0.918482,'1303:0 '),
+(1306,'AzsharaN17',1,16,2497,43,54,0,4378.53,-7190.76,114.567,1.36616,'1303:0 1304:0 1307:0 '),
+(1307,'AzsharaN18',1,16,2497,43,54,0,4547.1,-7477.55,77.7456,1.89042,'1306:0 1308:0 1312:0 1313:0 '),
+(1308,'AzsharaN19',1,16,2497,43,54,0,4697.79,-7545.77,76.1055,2.41466,'1304:0 1307:0 1309:0 1311:0 '),
+(1309,'AzsharaN20',1,16,1230,43,54,0,4879.55,-7649.88,-0.264126,2.8859,'1308:0 1310:0 1311:0 '),
+(1310,'AzsharaN21',1,16,1230,43,54,0,4981.1,-7379.41,2.45741,4.29372,'1309:0 '),
+(1311,'AzsharaN22',1,16,1230,43,54,0,4636.23,-7784.83,-0.404812,0.517923,'1308:0 1309:0 1312:0 1313:0 '),
+(1312,'AzsharaN23',1,16,1229,43,54,0,4265.54,-7853.88,3.0357,0.839938,'1307:0 1311:0 1313:0 '),
+(1313,'AzsharaN24',1,16,1228,43,54,0,4328.17,-7549.27,10.4959,5.60927,'1307:0 1311:0 1312:0 1314:0 1316:0 '),
+(1314,'AzsharaN25',1,16,1228,43,54,0,4248.34,-7195.83,18.9926,3.96189,'1313:0 1315:0 '),
+(1315,'AzsharaN26',1,16,1226,43,54,0,4103.25,-7187.96,10.5715,6.16297,'1314:0 1316:0 1317:0 '),
+(1316,'AzsharaN27',1,16,1226,43,54,0,4038.51,-7321.54,1.12717,0.769242,'1313:0 1315:0 1317:0 '),
+(1317,'AzsharaN28',1,16,1226,43,54,0,3934.81,-7205.7,26.486,5.91163,'1315:0 1316:0 1318:0 1320:0 1321:0 '),
+(1318,'TempleOfArkkoran1',1,16,1226,43,54,0,3807.79,-7280.66,26.4812,1.14034,'1317:0 1319:0 '),
+(1319,'TempleOfArkkoran2',1,16,1226,43,54,0,3768.46,-7134.44,26.4806,5.96857,'1318:0 1320:0 '),
+(1320,'TempleOfArkkoran3',1,16,1226,43,54,0,3902.48,-7060.61,26.4811,4.31335,'1317:0 1319:0 '),
+(1321,'TempleOfArkkoran4',1,16,1226,43,54,0,3858.12,-7171.88,24.03,5.83506,'1317:0 '),
+(1322,'AzsharaRamp1Top',1,16,1225,43,54,0,4108.38,-5554.42,99.4778,1.77221,'1290:0 1291:0 1294:0 1323:0 '),
+(1323,'AzsharaRamp1Bottom',1,16,1228,43,54,0,3897.1,-5695.14,17.2205,0.46452,'1322:0 1341:0 1342:0 '),
+(1324,'AzsharaC1',1,16,1221,43,54,0,3389.18,-4881.96,119.527,0.94754,'1278:0 1325:0 '),
+(1325,'AzsharaC2',1,16,1221,43,54,0,3548.39,-5142.38,83.2368,2.40053,'1324:0 1326:0 1328:0 46:0 1332:0 '),
+(1326,'AzsharaC3',1,16,1221,43,54,0,3353.2,-4996.79,88.9565,1.84487,'1277:0 1325:0 '),
+(1327,'AzsharaC4',1,16,1233,43,54,0,3111.76,-5099.04,133.69,0.892567,'1278:0 1328:0 1343:0 1344:0 '),
+(1328,'AzsharaC5',1,16,1221,43,54,0,3288.43,-5313.47,92.0357,2.24738,'1325:0 1327:0 1329:0 '),
+(1329,'AzsharaC6',1,16,1221,43,54,0,3069.52,-5522.7,98.46,0.58232,'1328:0 1330:0 1343:0 '),
+(1330,'AzsharaC7',1,16,1231,43,54,0,3063.44,-5615.53,60.2217,1.67206,'1329:0 1331:0 1338:0 '),
+(1331,'AzsharaC8',1,16,1231,43,54,0,3004.41,-5699.66,35.8993,0.918073,'1330:0 1334:0 '),
+(1332,'AzsharaC9',1,16,1221,43,54,0,3744.95,-5305.2,85.9123,2.48299,'1325:0 1333:0 '),
+(1333,'AzsharaC10',1,16,1228,43,54,0,3658.05,-5517.8,24.2321,1.28329,'1332:0 1339:0 1340:0 1341:0 '),
+(1334,'AzsharaC11',1,16,1231,43,54,0,3087.73,-5859.39,-0.161575,2.13546,'1331:0 1335:0 1338:0 '),
+(1335,'AzsharaC12',1,16,1231,43,54,0,2934.41,-5884.56,25.8109,0.120912,'1334:0 1336:0 '),
+(1336,'AzsharaC13',1,16,1231,43,54,0,2980.62,-6084.05,0.213247,2.38089,'1335:0 1337:0 '),
+(1337,'AzsharaC14',1,16,1231,43,54,0,2846.38,-6166.7,3.60284,0.643192,'1336:0 '),
+(1338,'AzsharaC15',1,16,1231,43,54,0,3226.36,-5673.24,15.8216,3.93007,'1330:0 1334:0 1339:0 1340:0 '),
+(1339,'AzsharaC16',1,16,1231,43,54,0,3427.33,-5505.43,26.9806,5.26131,'1333:0 1338:0 1340:0 1341:0 '),
+(1340,'AzsharaC17',1,16,1231,43,54,0,3475.44,-5753.95,11.6531,1.76236,'1333:0 1338:0 1339:0 1341:0 '),
+(1341,'AzsharaC18',1,16,1228,43,54,0,3704.73,-5723.53,4.41024,0.254392,'1323:0 1333:0 1339:0 1340:0 1342:0 '),
+(1342,'AzsharaC19',1,16,1228,43,54,0,3948.84,-5885.08,8.49314,2.09811,'1323:0 1341:0 '),
+(1343,'AzsharaS1',1,16,1234,43,54,0,2887.1,-5407.2,110.727,1.29111,'1327:0 1329:0 1344:0 1347:0 1346:0 '),
+(1344,'AzsharaS2',1,16,1234,43,54,0,2671.51,-5134.67,110.162,6.23323,'1327:0 1343:0 1345:0 '),
+(1345,'AzsharaS3',1,16,1234,43,54,0,2476.44,-5345.72,112.668,0.747221,'1344:0 1346:0 '),
+(1346,'AzsharaS4',1,16,16,43,54,0,2551.54,-5739.78,99.3784,1.5499,'1343:0 1345:0 1347:0 1348:0 '),
+(1347,'AzsharaS5',1,16,16,43,54,0,2773.38,-5801.37,102.296,1.23417,'1343:0 1346:0 '),
+(1348,'AzsharaS6',1,16,16,43,54,0,2497.05,-6122.14,101.12,1.55774,'1346:0 1349:0 '),
+(1349,'AzsharaS7',1,16,16,43,54,0,2591.64,-6535.29,102.94,1.79136,'1348:0 1350:0 1351:0 '),
+(1350,'AzsharaS8',1,16,16,43,54,0,2738.28,-6626.16,105.229,0.130243,'1349:0 '),
+(1351,'AzsharaS9',1,16,1232,43,54,0,2530.76,-6691.49,105.655,1.22588,'1349:0 1352:0 1353:0 '),
+(1352,'AzsharaS10',1,16,1232,43,54,0,2594.6,-6859.47,124.355,1.98575,'1351:0 '),
+(1353,'AzsharaS11',1,16,1232,43,54,0,2469.22,-6950.98,112.622,1.32995,'1351:0 1354:0 '),
+(1354,'AzsharaS12',1,16,1232,43,54,0,2290.99,-6837.2,120.824,5.67516,'1353:0 1355:0 '),
+(1355,'AzsharaS13',1,16,1232,43,54,0,2245.13,-6620.49,130.493,5.82242,'1354:0 '),
+(1356,'NightsongWoodsSE',1,331,2457,18,30,0,2031.76,-3416.6,92.6375,6.12481,'1097:0 1099:0 1116:0 1357:0 '),
+(1357,'SouthfuryRiver1',1,331,879,18,30,0,2157.71,-3580.65,40.0791,2.2096,'1356:0 1358:0 '),
+(1358,'SouthfuryRiver2',1,331,879,18,30,0,1982.59,-3613.01,40.3535,1.3378,'1357:0 1359:0 '),
+(1359,'SouthfuryRiver3',1,331,879,18,30,4,1751.38,-3745.84,39.7381,3.16817,'1358:0 1360:0 '),
+(1360,'OrgrimmarExitW',1,17,815,8,25,4,1641.94,-3837.63,50.7719,5.47332,'1359:0 1454:0 '),
+(1361,'DurotarN_hub1',1,14,14,1,10,4,1290.89,-4391.75,26.2836,3.73994,'30:0 1362:0 1377:0 1385:0 1386:0 '),
+(1362,'DurotarN_hub2',1,14,14,1,10,4,1341.58,-4623.78,24.2112,1.68496,'1361:0 1363:0 1365:0 1377:0 '),
+(1363,'SkullRock1',1,14,817,1,10,4,1448.11,-4879.66,11.5034,1.9029,'1362:0 1364:0 1365:0 '),
+(1364,'SkullRock2',1,14,817,1,10,4,1445.58,-4687.97,-5.65162,4.9365,'1363:0 '),
+(1365,'DurotarN_hub3',1,14,14,1,10,4,1100.2,-4908.62,14.577,0.165201,'1362:0 1363:0 1366:0 1367:0 '),
+(1366,'DurotarN_hub4',1,14,375,1,10,4,985.89,-5115.68,1.41706,1.16658,'1365:0 1367:0 '),
+(1367,'DurotarN_hub5',1,14,14,1,10,4,809.043,-4957.4,16.2794,2.83475,'1365:0 1366:0 1368:0 1370:0 '),
+(1368,'DustwindCave1',1,14,14,1,10,4,778.919,-4756.62,37.5488,4.94158,'1367:0 1369:0 1370:0 '),
+(1369,'DustwindCave2',1,14,371,1,10,4,931.181,-4715.15,19.9519,2.6443,'1368:0 '),
+(1370,'DurotarN_hub6',1,14,14,1,10,4,512.237,-4785.91,29.1897,1.93467,'1367:0 1368:0 1371:0 1407:0 '),
+(1371,'DurotarN_hub7',1,14,14,1,10,4,438.776,-4564.65,52.1313,5.05391,'1370:0 1372:0 1400:0 1403:0 '),
+(1372,'DurotarN_hub8',1,14,14,1,10,4,599.139,-4404.63,18.4833,5.05392,'1371:0 66:0 67:0 1400:0 1403:0 '),
+(1373,'DurotarCanyon1_2',1,14,410,1,10,4,754.968,-4457.2,15.6687,1.93155,'66:0 67:0 '),
+(1374,'DurotarCanyon1_3',1,14,14,1,10,4,720.095,-4682.12,-6.58629,2.1711,'66:0 1375:0 1401:0 '),
+(1375,'DurotarCanyon1_4',1,14,14,1,10,4,762.27,-4587.67,0.395604,5.89975,'1374:0 1376:0 1384:0 '),
+(1376,'DurotarCanyon1_5',1,14,410,1,10,4,909.793,-4623.59,17.4591,2.58341,'1375:0 1377:0 1378:0 '),
+(1377,'DurotarCanyon1_6',1,14,14,1,10,4,1089.79,-4544.84,18.7912,3.37862,'1361:0 1362:0 1376:0 1385:0 '),
+(1378,'DurotarCanyon1_7',1,14,410,1,10,4,846.499,-4687.15,10.6635,4.45069,'1376:0 1379:0 '),
+(1379,'DurotarCanyon1_8',1,14,370,1,10,4,822.93,-4819.09,11.1622,1.25216,'1378:0 1380:0 '),
+(1380,'DurotarCanyon1_9',1,14,370,1,10,4,922.247,-4823.86,14.833,3.04091,'1379:0 1381:0 1382:0 '),
+(1381,'DurotarCanyon1_10',1,14,370,1,10,4,984.82,-4668.01,26.8858,4.65295,'1380:0 '),
+(1382,'DurotarCanyon1_11',1,14,370,1,10,4,1028.11,-4807.86,13.422,1.33267,'1380:0 1383:0 '),
+(1383,'DurotarCanyon1_12',1,14,370,1,10,4,1112.67,-4667.33,19.0025,5.6445,'1382:0 '),
+(1384,'DurotarCanyon1_13',1,14,14,1,10,4,863.608,-4507.22,5.89497,4.47623,'1375:0 1385:0 '),
+(1385,'DurotarCanyon1_14',1,14,14,1,10,4,1076.54,-4421.72,18.043,3.13516,'67:0 1361:0 1377:0 1384:0 1387:0 '),
+(1386,'RocktuskFarm',1,14,1296,1,10,4,1261.75,-4189.97,25.9612,5.01817,'1361:0 1387:0 1388:0 '),
+(1387,'DurotarN_hub9',1,14,14,1,10,4,1103.69,-4095.77,17.1414,5.61704,'1385:0 1386:0 1388:0 1389:0 '),
+(1388,'DurotarN_hub10',1,14,14,1,10,4,1240.84,-3994.36,19.8563,4.64119,'1386:0 1387:0 1389:0 1452:0 1453:0 '),
+(1389,'DurotarN_hub11',1,14,814,1,10,4,932.462,-3903.15,18.4923,5.69476,'1387:0 1388:0 1390:0 1391:0 1451:0 1452:0 '),
+(1390,'DurotarN_hub12',1,14,14,1,10,4,554.028,-3867,21.5181,6.15421,'1389:0 1391:0 1392:0 1405:0 1406:0 '),
+(1391,'DurotarN_hub13',1,14,14,1,10,4,484.992,-4008.81,21.634,0.40509,'1389:0 1390:0 1392:0 1400:0 1405:0 1406:0 '),
+(1392,'DurotarCanyon2_1',1,14,14,1,10,4,621.087,-4034.14,5.79289,6.22882,'67:0 1390:0 1391:0 1393:0 1400:0 '),
+(1393,'DurotarCanyon2_2',1,14,369,1,10,4,805.35,-4026.74,-8.81716,3.20306,'1392:0 1394:0 1398:0 '),
+(1394,'DurotarCanyon2_3',1,14,369,1,10,4,924.692,-4010.46,-13.3326,3.34246,'1393:0 1395:0 '),
+(1395,'DurotarCanyon2_4',1,14,369,1,10,4,969.211,-4144.86,-6.8125,2.00533,'1394:0 1396:0 1397:0 '),
+(1396,'DurotarCanyon2_5',1,14,369,1,10,4,858.51,-4186.73,-13.9605,0.410964,'1395:0 '),
+(1397,'DurotarCanyon2_6',1,14,369,1,10,4,955.695,-4276.78,-6.40429,1.49874,'1395:0 '),
+(1398,'DurotarCanyon2_7',1,14,369,1,10,4,832.014,-4096.6,-12.8537,2.28805,'1393:0 1399:0 '),
+(1399,'DurotarCanyon2_8',1,14,369,1,10,4,733.597,-4112.95,-9.91997,0.344189,'1398:0 '),
+(1400,'RazormaneGrounds',1,14,816,1,10,4,394.471,-4227.01,25.6721,6.10902,'67:0 1371:0 1372:0 1391:0 1392:0 1403:0 1404:0 '),
+(1401,'DurotarCanyon1_15',1,14,14,1,10,4,618.018,-4729.15,-9.7302,0.530719,'1374:0 28:0 '),
+(1402,'DurotarRoadW1',1,14,14,1,10,4,229.555,-4564.93,14.4257,4.87206,'28:0 1403:0 1409:0 1437:0 '),
+(1403,'DurotarRoadW2',1,14,14,1,10,4,311.231,-4367.13,23.2866,0.650496,'1371:0 1372:0 1400:0 1402:0 1404:0 1437:0 1440:0 '),
+(1404,'DurotarRoadW3',1,14,14,1,10,4,290.25,-4093.37,30.0616,4.8897,'1400:0 1403:0 1405:0 1440:0 1441:0 1443:0 '),
+(1405,'DurotarRoadW4',1,14,14,1,10,4,289.101,-3928.87,32.0584,5.95001,'1390:0 1391:0 1404:0 1406:0 1441:0 1443:0 '),
+(1406,'DurotarWBridge',1,14,814,1,10,4,317.731,-3805.25,24.3367,6.02659,'1390:0 1391:0 1405:0 1443:0 1449:0 '),
+(1407,'DurotarS_hub1',1,14,14,1,10,4,250.862,-4982.03,19.1509,0.356019,'1370:0 1408:0 1409:0 1410:0 1414:0 '),
+(1408,'DurotarS_hub2',1,14,373,1,10,4,274.781,-5126.02,4.75879,2.02892,'1407:0 1414:0 '),
+(1409,'DurotarRoadS1',1,14,14,1,10,4,119.098,-4745.19,15.4912,5.09591,'28:0 1402:0 1407:0 1410:0 1414:0 1415:0 '),
+(1410,'DurotarRoadS2',1,14,14,1,10,4,-99.4238,-4745.37,21.6208,0.102741,'1407:0 1409:0 1411:0 1414:0 '),
+(1411,'DurotarRoadS3',1,14,14,1,10,4,-278.577,-4798.87,28.7297,0.267683,'1410:0 1412:0 1414:0 1415:0 '),
+(1412,'DurotarRoadS4',1,14,14,1,10,4,-448.465,-4791.29,35.8497,6.27205,'1411:0 1413:0 '),
+(1413,'DurotarRoadS5',1,14,14,1,10,4,-640.871,-4736.39,33.6569,6.15227,'1412:0 31:0 1419:0 1421:0 1422:0 1429:0 '),
+(1414,'TirigardeKeep1',1,14,372,1,10,4,-84.5912,-5061.01,15.5227,0.185219,'1407:0 1408:0 1409:0 1410:0 1411:0 1415:0 '),
+(1415,'TirigardeKeep2',1,14,372,1,10,4,-198.068,-5050.76,20.9866,3.49606,'1409:0 1411:0 1414:0 1416:0 1417:0 '),
+(1416,'TirigardeKeep3',1,14,372,1,10,4,-225.492,-5115.3,49.3248,1.51096,'1415:0 '),
+(1417,'TirigardeKeep4',1,14,372,1,10,4,-321.717,-5084.89,21.2127,0.285748,'1415:0 1418:0 '),
+(1418,'TirigardeKeep5',1,14,373,1,10,4,-291.897,-5186.7,20.4791,1.8644,'1417:0 '),
+(1419,'DurotarS_hub3',1,14,393,1,10,4,-716.008,-5088.67,9.54796,1.34603,'31:0 1413:0 1420:0 1444:0 '),
+(1420,'DurotarS_hub4',1,14,393,1,10,4,-920.843,-4982.52,11.1974,5.87385,'31:0 1419:0 1421:0 1422:0 1445:0 '),
+(1421,'DurotarS_hub5',1,14,393,1,10,4,-1100.19,-4784.19,8.13918,5.95632,'31:0 1413:0 1420:0 1422:0 '),
+(1422,'DurotarCanyon3_1',1,14,14,1,10,4,-978.237,-4704.6,20.1681,1.62878,'31:0 1413:0 1420:0 1421:0 1423:0 '),
+(1423,'DurotarCanyon3_2',1,14,366,1,10,4,-986.47,-4574.42,25.5859,4.28734,'1422:0 1424:0 1425:0 1427:0 '),
+(1424,'DurotarCanyon3_3',1,14,366,1,10,4,-1067.61,-4604.24,25.8221,3.64331,'1423:0 '),
+(1425,'DurotarCanyon3_4',1,14,366,1,10,4,-1047.58,-4451.84,27.4603,4.97458,'1423:0 1426:0 '),
+(1426,'DurotarCanyon3_5',1,14,366,1,10,4,-965.059,-4407.81,29.5222,3.58441,'1425:0 '),
+(1427,'DurotarCanyon3_6',1,14,366,1,10,4,-981.936,-4503.15,25.7079,1.87618,'1423:0 1428:0 '),
+(1428,'DurotarCanyon3_7',1,14,366,1,10,4,-904.997,-4477.99,29.6937,3.30756,'1427:0 '),
+(1429,'ValleyOfTrials1',1,14,363,1,10,4,-603.24,-4597.62,41.2213,4.5544,'1413:0 1430:0 '),
+(1430,'ValleyOfTrials2',1,14,363,1,10,4,-580.729,-4526.65,41.4449,4.54262,'1429:0 1431:0 '),
+(1431,'ValleyOfTrials3',1,14,363,1,10,4,-589.381,-4297.57,37.9694,5.56165,'1430:0 29:0 1432:0 1433:0 1434:0 1436:0 '),
+(1432,'ValleyOfTrials4',1,14,363,1,10,4,-746.092,-4261.15,43.9991,6.03879,'1431:0 '),
+(1433,'ValleyOfTrials5',1,14,363,1,10,4,-409.694,-4455.21,51.0433,2.32778,'1431:0 1434:0 1436:0 '),
+(1434,'ValleyOfTrials6',1,14,363,1,10,4,-197.604,-4331.89,68.4747,3.01697,'1431:0 1433:0 1435:0 1436:0 '),
+(1435,'ValleyOfTrials7',1,14,365,1,10,4,-87.1332,-4210.24,49.4149,4.1067,'1434:0 '),
+(1436,'ValleyOfTrials8',1,14,363,1,10,4,-403.018,-4206.27,53.0641,5.51453,'1431:0 1433:0 1434:0 '),
+(1437,'DurotarSW_hub1',1,14,816,1,10,4,162.168,-4433.07,35.4298,5.87386,'1402:0 1403:0 1438:0 1439:0 '),
+(1438,'DurotarSW_hub2',1,14,816,1,10,4,80.4142,-4475.95,43.2596,0.578313,'1437:0 1439:0 '),
+(1439,'DurotarSW_hub3',1,14,816,1,10,4,107.992,-4332.41,52.3223,5.13559,'1437:0 1438:0 1440:0 '),
+(1440,'DurotarSW_hub4',1,14,816,1,10,4,29.2317,-4205.25,67.7773,5.8385,'1403:0 1404:0 1439:0 1441:0 '),
+(1441,'DurotarSW_hub5',1,14,14,1,10,4,-53.7095,-4041.71,67.3331,0.00298548,'1404:0 1405:0 1440:0 1442:0 1443:0 '),
+(1442,'DurotarSW_hub6',1,14,814,1,10,4,-173.855,-3864.96,35.2069,5.30244,'1441:0 1443:0 1476:0 1474:0 '),
+(1443,'DurotarSW_hub7',1,14,14,1,10,4,72.4652,-3876.98,41.5453,3.44105,'1404:0 1405:0 1406:0 1441:0 1442:0 1474:0 '),
+(1444,'EchoIsles1',1,14,368,1,10,4,-808.575,-5363.62,2.20208,1.32598,'1419:0 1445:0 1448:0 '),
+(1445,'EchoIsles2',1,14,368,1,10,4,-1142.01,-5152.05,1.44042,0.283367,'1420:0 1444:0 1446:0 '),
+(1446,'EchoIsles3',1,14,368,1,10,4,-1236.39,-5359.85,5.43454,0.742817,'1445:0 1447:0 1448:0 '),
+(1447,'EchoIsles4',1,14,368,1,10,4,-1232.75,-5606.75,4.85907,1.49091,'1446:0 1448:0 '),
+(1448,'EchoIsles5',1,14,368,1,10,4,-1035.61,-5519.3,7.91372,2.83395,'1444:0 1446:0 1447:0 '),
+(1449,'BarrensNWBridge',1,17,17,8,25,4,313.815,-3718.22,26.5065,4.61206,'1406:0 1450:0 '),
+(1450,'BarrensNW1',1,17,379,8,25,4,319.615,-3637.99,27.1854,4.5885,'1449:0 1451:0 1473:0 1474:0 '),
+(1451,'BarrensNW2',1,17,17,8,25,4,824.833,-3721.02,27.1993,3.19834,'1389:0 1450:0 1452:0 '),
+(1452,'BarrensNW3',1,17,17,8,25,0,1017.81,-3739.15,27.7416,5.18933,'1388:0 1389:0 1451:0 1453:0 1455:0 1459:0 '),
+(1453,'BarrensNW4',1,17,17,8,25,4,1260.21,-3830.17,30.3266,3.3515,'1388:0 1452:0 1454:0 '),
+(1454,'BarrensNW5',1,17,815,8,25,4,1550.39,-3863.76,40.7872,0.119578,'1360:0 1453:0 '),
+(1455,'BarrensNW6',1,17,381,12,25,0,1205.41,-3622.44,82.8357,4.34975,'1452:0 1456:0 1457:0 '),
+(1456,'BarrensNW7',1,17,381,12,25,0,1348.99,-3642.47,111.642,2.66035,'1455:0 1457:0 '),
+(1457,'BarrensNW8',1,17,381,12,25,0,1351.11,-3571.19,92.4931,1.99552,'1455:0 1456:0 1458:0 '),
+(1458,'BarrensNW9',1,17,381,8,25,0,1340.7,-3455.1,93.8483,3.69787,'1457:0 '),
+(1459,'BarrensNW10',1,17,17,12,25,0,1103.13,-3455.42,87.1314,4.31322,'1452:0 1460:0 1462:0 1465:0 '),
+(1460,'BarrensNW11',1,17,17,12,25,0,724.802,-3585.11,91.2962,0.655228,'1459:0 1461:0 '),
+(1461,'BarrensNW12',1,17,17,8,25,0,383.869,-3439.47,95.2678,5.6425,'1460:0 1470:0 1471:0 '),
+(1462,'BarrensNW13',1,17,17,12,25,0,1223.08,-3084.31,93.9201,4.30731,'1459:0 1463:0 1464:0 1466:0 '),
+(1463,'BarrensNW14',1,17,17,18,25,0,1229.76,-2928.45,141.696,4.49974,'1462:0 1464:0 '),
+(1464,'BarrensNW15',1,17,17,12,25,0,1012.81,-2999.42,92.4922,0.109361,'1462:0 1463:0 1465:0 1466:0 1467:0 1469:0 '),
+(1465,'BarrensNW16',1,17,382,12,25,0,955.029,-3084.95,93.7057,5.40099,'1459:0 1464:0 1466:0 '),
+(1466,'BarrensNW17',1,17,382,12,25,0,1020.82,-3080.5,105.204,1.82743,'1462:0 1464:0 1465:0 '),
+(1467,'BarrensNW18',1,17,17,8,25,0,898.48,-2740.8,99.757,5.46973,'1464:0 1468:0 1469:0 '),
+(1468,'BarrensNW19',1,17,17,8,25,0,803.624,-2654.79,91.6669,5.87813,'1467:0 1469:0 1496:0 1497:0 '),
+(1469,'BarrensNW20',1,17,17,8,25,0,605.003,-2881.18,91.6679,0.109375,'1464:0 1467:0 1468:0 1470:0 1471:0 1493:0 1496:0 '),
+(1470,'BarrensNW21',1,17,17,8,25,0,470.698,-3149.25,95.5705,1.16378,'1461:0 1469:0 1471:0 1472:0 '),
+(1471,'BarrensNW22',1,17,17,8,25,0,382.399,-3074.79,91.8682,5.88794,'1461:0 1469:0 1470:0 1472:0 1477:0 '),
+(1472,'BarrensNW23',1,17,17,8,25,0,146.635,-3204.39,80.1468,0.405853,'1470:0 1471:0 1473:0 1474:0 1477:0 1478:0 1479:0 '),
+(1473,'BarrensNW24',1,17,17,8,25,0,204.31,-3418.93,30.6025,4.75106,'1450:0 1472:0 1474:0 '),
+(1474,'BarrensNW25',1,17,17,8,25,0,18.7822,-3604.62,27.213,0.267903,'1442:0 1443:0 1450:0 1472:0 1473:0 1476:0 '),
+(1475,'BarrensNW26',1,17,391,8,25,0,-701.915,-3931.25,25.2456,2.31781,'35:0 1476:0 '),
+(1476,'BarrensNW27',1,17,17,8,25,0,-364.212,-3750.15,28.5958,0.262038,'1442:0 1475:0 1474:0 '),
+(1477,'BarrensNW28',1,17,17,8,25,0,111.71,-2964.41,95.9003,5.8816,'1471:0 1472:0 1478:0 1491:0 1492:0 '),
+(1478,'BarrensNW29',1,17,1699,8,25,0,-7.39568,-3036.98,91.6667,5.57137,'1472:0 1477:0 1479:0 1480:0 1489:0 1491:0 '),
+(1479,'BarrensNW30',1,17,1699,8,25,0,-80.6494,-3175.83,92.6429,0.527153,'1472:0 1478:0 1480:0 '),
+(1480,'BarrensNW31',1,17,1699,8,25,0,-43.7595,-3360.78,91.6672,1.44018,'1478:0 1479:0 1481:0 '),
+(1481,'BarrensNW32',1,17,1699,8,25,0,-298.484,-3473.6,91.6745,0.415233,'1480:0 1482:0 1483:0 '),
+(1482,'BarrensNW33',1,17,17,8,25,0,-636.173,-3699.63,92.7051,0.694045,'1481:0 1483:0 '),
+(1483,'BarrensNW34',1,17,17,8,25,0,-807.155,-3308.81,91.6657,5.92872,'1482:0 1481:0 1485:0 1486:0 1484:0 '),
+(1484,'BarrensNW35',1,17,17,8,25,0,-1029.31,-3412.99,75.3336,4.91947,'35:0 1483:0 1485:0 1563:0 '),
+(1485,'BarrensNW36',1,17,17,8,25,0,-949.557,-3245.5,94.7159,4.38735,'1483:0 1486:0 1536:0 1538:0 1484:0 1563:0 '),
+(1486,'BarrensNW37',1,17,17,8,25,0,-679.296,-2946.69,95.7877,4.08497,'1487:0 1488:0 1483:0 1485:0 1535:0 1536:0 1537:0 1539:0 '),
+(1487,'BarrensNW38',1,17,17,8,25,0,-494.28,-2779.02,91.6669,0.741136,'1486:0 32:0 1488:0 '),
+(1488,'BarrensNW39',1,17,1699,8,25,0,-242.594,-2859.38,91.9719,3.12681,'1486:0 1487:0 1489:0 1490:0 1491:0 '),
+(1489,'BarrensNW40',1,17,1699,8,25,0,-191.258,-3014.29,91.6673,2.33356,'1478:0 1488:0 1491:0 '),
+(1490,'BarrensNW41',1,17,458,8,25,0,-264.197,-2688.78,95.0971,4.53071,'32:0 1488:0 1491:0 1525:0 '),
+(1491,'BarrensNW42',1,17,17,8,25,0,72.2048,-2789.84,95.8713,3.29567,'1490:0 1488:0 1489:0 1477:0 1478:0 1492:0 1525:0 '),
+(1492,'BarrensNW43',1,17,458,8,25,0,205.138,-2695.31,91.667,3.68445,'1477:0 1491:0 1493:0 1494:0 1495:0 '),
+(1493,'BarrensNW44',1,17,458,8,25,0,400.957,-2643.1,91.667,3.49596,'1469:0 1492:0 1494:0 1496:0 '),
+(1494,'BarrensNW45',1,17,17,8,25,0,266.964,-2535.13,91.6658,3.36441,'1492:0 1493:0 1495:0 '),
+(1495,'BarrensNW46',1,17,17,8,25,0,78.9108,-2561.24,92.6826,5.54193,'1492:0 1494:0 1524:0 '),
+(1496,'BarrensNW47',1,17,458,8,25,0,575.696,-2568.22,95.8126,5.44179,'1468:0 1469:0 1493:0 1497:0 '),
+(1497,'BarrensNW48',1,17,458,8,25,0,687.068,-2366.64,91.6681,4.22717,'1468:0 1496:0 1498:0 1499:0 '),
+(1498,'BarrensNW49',1,17,458,8,25,0,804.041,-2282.18,91.6685,3.41822,'1497:0 1499:0 1500:0 1519:0 '),
+(1499,'BarrensNW50',1,17,17,12,25,0,703.606,-2031.77,91.6667,4.72591,'1497:0 1498:0 1500:0 1509:0 1510:0 '),
+(1500,'BarrensNW51',1,17,17,12,25,0,529.014,-2166.69,94.5542,0.545634,'1498:0 1499:0 1501:0 '),
+(1501,'DreadmistPeak1',1,17,384,12,25,0,459.817,-2082.78,138.447,5.5015,'1500:0 1502:0 1504:0 '),
+(1502,'DreadmistPeak2',1,17,384,12,25,0,375.749,-2068.56,138.668,6.1259,'1501:0 1503:0 '),
+(1503,'DreadmistPeak3',1,17,384,12,25,0,324.847,-1976.99,98.671,5.27963,'1502:0 1510:0 1520:0 '),
+(1504,'DreadmistPeak4',1,17,384,12,25,0,417.639,-2212.21,181.222,1.37424,'1501:0 1505:0 '),
+(1505,'DreadmistPeak5',1,17,384,12,25,0,307.073,-2144.55,210.989,5.7273,'1504:0 1506:0 1507:0 '),
+(1506,'DreadmistPeak6',1,17,2138,12,25,0,319.238,-2233.42,211.954,1.68053,'1505:0 '),
+(1507,'DreadmistPeak7',1,17,384,8,25,0,353.055,-2209.97,222.18,1.93971,'1505:0 1508:0 '),
+(1508,'DreadmistPeak8',1,17,384,17,25,0,322.312,-2277.26,243.384,1.42331,'1507:0 '),
+(1509,'BarrensNW52',1,17,17,12,25,0,583.146,-1755.46,92.9558,1.45863,'1499:0 1510:0 1511:0 '),
+(1510,'BarrensNW53',1,17,17,8,25,0,372.587,-1848.86,91.6675,6.01198,'1503:0 1499:0 1509:0 1520:0 1521:0 1522:0 '),
+(1511,'BarrensNW54',1,17,383,12,25,0,535.439,-1429.14,91.6668,4.989,'1509:0 1512:0 1514:0 1515:0 1516:0 '),
+(1512,'BarrensNW55',1,17,383,12,25,0,709.638,-1260.36,91.682,3.91105,'1511:0 1513:0 '),
+(1513,'BarrensNW56',1,17,383,12,25,0,817.064,-1365.59,91.871,2.68583,'1512:0 '),
+(1514,'BarrensNW57',1,17,383,12,25,0,532.937,-1155.43,91.6668,4.67093,'1511:0 '),
+(1515,'BarrensNW58',1,17,383,12,25,0,296.616,-1482.58,91.6668,0.139182,'1511:0 1517:0 1516:0 1520:0 '),
+(1516,'BarrensNW59',1,17,383,12,25,0,300.682,-1617.75,91.6668,0.681106,'1511:0 1515:0 1517:0 1520:0 '),
+(1517,'BarrensNW60',1,17,17,8,25,0,42.8186,-1528.23,91.6728,3.42876,'1515:0 1516:0 1520:0 1523:0 1531:0 1533:0 '),
+(1518,'BarrensExitN1h',1,17,1703,8,25,4,1261.05,-2223.39,92.0335,0.0904736,'1110:0 1519:0 '),
+(1519,'BarrensExitN2',1,17,1703,8,25,0,1157.98,-2338.54,92.3068,2.80599,'1111:0 1498:0 1518:0 '),
+(1520,'BarrensNW61',1,17,17,8,25,0,242.384,-1748.46,91.6668,5.32751,'1503:0 1510:0 1515:0 1516:0 1517:0 1521:0 '),
+(1521,'BarrensNW62',1,17,17,8,25,0,130.568,-1864.4,92.6122,0.169403,'1510:0 1520:0 1522:0 1523:0 '),
+(1522,'BarrensNW63',1,17,386,8,25,0,132.261,-1980.79,93.8709,0.723104,'1510:0 1521:0 1524:0 1528:0 '),
+(1523,'BarrensNW64',1,17,17,8,25,0,-136.632,-1764.4,93.1031,0.640629,'1517:0 1521:0 1524:0 1528:0 1529:0 1530:0 1531:0 '),
+(1524,'BarrensNW65',1,17,17,8,25,0,-73.4923,-2214.29,92.1839,1.03725,'1495:0 1522:0 1523:0 1527:0 1528:0 '),
+(1525,'BarrensNW66',1,17,17,8,25,0,-246.525,-2527.3,91.7286,5.22342,'1490:0 1491:0 1527:0 1526:0 1528:0 '),
+(1526,'BarrensNW67',1,17,380,8,25,4,-349.471,-2524,95.5815,4.46591,'32:0 1525:0 1527:0 '),
+(1527,'BarrensNW68',1,17,17,8,25,0,-344.921,-2376.03,92.3735,5.15509,'1524:0 1525:0 1526:0 1528:0 1534:0 '),
+(1528,'BarrensNW69',1,17,17,8,25,0,-281.4,-2113.94,95.7902,6.18005,'1522:0 1523:0 1524:0 1525:0 1527:0 1529:0 '),
+(1529,'BarrensNW70',1,17,17,8,25,0,-430.244,-1826.78,95.7877,0.218878,'1523:0 1528:0 1530:0 1557:0 '),
+(1530,'BarrensNW71',1,17,17,8,25,0,-515.745,-1537.11,91.6677,5.10603,'1523:0 1529:0 1531:0 1532:0 1557:0 '),
+(1531,'BarrensNW72',1,17,17,8,25,0,-343.855,-1488.98,92.6671,5.38288,'1517:0 1523:0 1530:0 1532:0 '),
+(1532,'BarrensExitW1h',1,17,1702,8,25,4,-390.512,-1368.33,91.7005,4.15177,'1530:0 1531:0 1533:0 '),
+(1533,'BarrensExitW2h',1,17,17,13,25,0,-245.782,-1071.05,33.877,5.35494,'1517:0 1532:0 1619:0 1621:0 '),
+(1534,'BarrensC1',1,17,17,8,25,0,-554.876,-2457.12,91.7172,0.415224,'1527:0 1535:0 '),
+(1535,'BarrensC2',1,17,458,8,25,0,-733.228,-2616.64,95.7878,6.07401,'32:0 1486:0 1534:0 1536:0 1537:0 1539:0 '),
+(1536,'BarrensC3',1,17,388,8,25,0,-1088.78,-2943.42,93.188,0.309157,'1485:0 1486:0 1535:0 1537:0 1538:0 1539:0 1563:0 '),
+(1537,'BarrensC4',1,17,388,8,25,0,-1234.76,-2828.43,94.4675,5.62828,'1486:0 1535:0 1536:0 1542:0 1543:0 '),
+(1538,'BarrensC5',1,17,17,8,25,0,-1482.86,-2989.48,91.6667,0.000901222,'1485:0 1536:0 1542:0 1543:0 1546:0 1545:0 1544:0 1563:0 '),
+(1539,'BarrensC6',1,17,458,8,25,0,-950.333,-2486.75,94.2879,5.17669,'98:0 1486:0 1535:0 1536:0 1540:0 1541:0 '),
+(1540,'BarrensC7',1,17,387,8,25,0,-1024.84,-2164.71,84.5132,0.52637,'98:0 1539:0 1541:0 '),
+(1541,'BarrensC8',1,17,17,8,25,0,-1117.92,-2388.71,94.9693,5.93383,'1539:0 1540:0 1542:0 1556:0 '),
+(1542,'BarrensC9',1,17,458,8,25,0,-1390.23,-2505.64,95.7878,4.84017,'1537:0 1538:0 1541:0 1543:0 1555:0 '),
+(1543,'BarrensC10',1,17,458,8,25,0,-1623.03,-2514.87,91.6709,0.0433447,'1537:0 1538:0 1542:0 1546:0 1555:0 1544:0 '),
+(1544,'BarrensC11',1,17,17,8,25,0,-1811.46,-3139.58,82.9337,0.885322,'1571:0 1545:0 1538:0 1543:0 1546:0 1568:0 1613:0 '),
+(1545,'BarrensC12',1,17,1698,14,25,0,-1907.03,-2804.32,92.2989,1.69465,'1538:0 1546:0 1547:0 1548:0 1544:0 '),
+(1546,'BarrensC13',1,17,1157,8,25,0,-1711.88,-2559.16,91.6722,0.463532,'1538:0 1543:0 1545:0 1548:0 1549:0 1544:0 '),
+(1547,'BarrensC14',1,17,1698,14,25,0,-2248.79,-2613.16,92.2697,5.81799,'1545:0 1548:0 1550:0 1551:0 '),
+(1548,'BarrensC15',1,17,1698,14,25,0,-2094.77,-2532.69,91.9084,5.93581,'1545:0 1546:0 1547:0 1549:0 1550:0 1551:0 1583:0 '),
+(1549,'BarrensC16',1,17,1157,8,25,0,-1876.87,-2436.12,95.4993,5.38799,'1546:0 1548:0 1551:0 1552:0 1555:0 '),
+(1550,'BarrensC17',1,17,1157,8,25,0,-2277.85,-2179.6,95.7945,5.15236,'174:0 1547:0 1548:0 1551:0 1552:0 1554:0 1583:0 1585:0 '),
+(1551,'BarrensC18',1,17,1157,8,25,0,-2101.34,-2220.57,95.7877,5.73158,'174:0 1547:0 1548:0 1549:0 1550:0 1552:0 '),
+(1552,'BarrensC19',1,17,1700,14,25,0,-1909.45,-2038.55,92.9508,3.72685,'1549:0 1550:0 1551:0 1553:0 1554:0 1555:0 1560:0 '),
+(1553,'BarrensC20',1,17,1700,14,25,0,-2121.99,-1733.9,91.6668,3.88196,'174:0 1552:0 1554:0 1560:0 1584:0 '),
+(1554,'BarrensC21',1,17,1700,14,25,0,-2085.34,-1938.99,95.871,2.79616,'174:0 1550:0 1552:0 1553:0 1560:0 '),
+(1555,'BarrensC22',1,17,17,14,25,0,-1638.12,-2190.4,92.6765,5.08558,'1542:0 1543:0 1549:0 1552:0 1556:0 1558:0 1561:0 '),
+(1556,'BarrensC23',1,17,17,8,25,0,-1266.05,-2043.5,92.6438,3.55996,'1541:0 1555:0 1557:0 1558:0 '),
+(1557,'BarrensC24',1,17,17,8,25,0,-926.196,-1839.83,92.0056,5.03258,'98:0 1529:0 1530:0 1556:0 1558:0 '),
+(1558,'BarrensC25',1,17,1700,14,25,0,-1425.03,-1796.65,92.0678,5.31103,'1555:0 1556:0 1557:0 1559:0 1561:0 '),
+(1559,'BarrensC26',1,17,1700,14,25,0,-1440.3,-1560.56,95.9826,0.920663,'1558:0 1561:0 '),
+(1560,'BarrensC27',1,17,1700,14,25,0,-1871.3,-1875.92,93.6595,4.45692,'1552:0 1553:0 1554:0 1561:0 '),
+(1561,'BarrensC28',1,17,1700,14,25,0,-1612.86,-1781.52,91.7801,1.78067,'1555:0 1558:0 1559:0 1560:0 '),
+(1562,'BarrensC29',1,17,391,8,25,0,-1376.36,-3840.81,18.7024,0.388567,'35:0 1565:0 1569:0 '),
+(1563,'BarrensC30',1,17,17,8,25,0,-1136.17,-3317.73,91.835,0.363033,'1484:0 1485:0 1536:0 1538:0 1564:0 '),
+(1564,'BarrensC31',1,17,17,8,25,0,-1232.04,-3640.85,93.8864,1.23286,'1563:0 1565:0 '),
+(1565,'BarrensC32',1,17,17,12,25,0,-1358.56,-3651.68,91.8621,5.3562,'1562:0 1564:0 1566:0 '),
+(1566,'BarrensC33',1,17,17,12,25,0,-1611.42,-3708.07,89.8631,0.284498,'1565:0 1567:0 1568:0 '),
+(1567,'BarrensC34',1,17,17,12,25,0,-1630.78,-3593.7,93.0714,4.90264,'1566:0 1568:0 '),
+(1568,'BarrensC35',1,17,17,12,25,0,-1755.9,-3578.38,93.1759,5.92169,'1544:0 1566:0 1567:0 '),
+(1569,'BarrensC36',1,17,391,8,25,0,-1644.33,-3851.75,13.843,0.197311,'1562:0 1570:0 '),
+(1570,'BarrensC37',1,17,385,8,25,0,-1877.52,-3684.16,8.56349,5.68766,'1569:0 1571:0 1572:0 1575:0 '),
+(1571,'BarrensC38',1,17,385,8,25,0,-1962.03,-3412.38,56.1606,4.99848,'1544:0 1570:0 '),
+(1572,'BarrensC39',1,17,385,8,25,0,-2093.49,-3786.65,1.11667,0.38229,'1570:0 1573:0 '),
+(1573,'BarrensC40',1,17,385,33,45,0,-2168.16,-3893.99,0.105911,2.3988,'1572:0 1574:0 1900:0 '),
+(1574,'BarrensC41',1,17,385,33,45,0,-2296.44,-3875.08,0.411085,0.0838384,'1573:0 1896:0 1900:0 '),
+(1575,'NorthwatchHold1',1,17,385,12,25,4,-2006.43,-3674.7,21.8223,5.27337,'1570:0 1576:0 '),
+(1576,'NorthwatchHold2',1,17,385,12,25,4,-2014.16,-3558.11,22.9401,4.40551,'1575:0 1577:0 '),
+(1577,'NorthwatchHold3',1,17,385,12,25,4,-2105.62,-3592.85,59.4242,0.125087,'1576:0 1578:0 1579:0 '),
+(1578,'NorthwatchHold4',1,17,385,8,25,4,-2106.59,-3663.32,96.1895,0.928159,'1577:0 '),
+(1579,'NorthwatchHold5',1,17,385,12,25,4,-2186.42,-3696.81,90.2787,1.00002,'1577:0 1580:0 1581:0 '),
+(1580,'NorthwatchHold6',1,17,385,12,25,4,-2222.08,-3775.47,130.862,0.551559,'1579:0 '),
+(1581,'NorthwatchHold7',1,17,385,12,25,4,-2146.93,-3560.64,91.6658,4.29007,'1579:0 1582:0 '),
+(1582,'NorthwatchHold8',1,17,385,12,25,4,-2088.88,-3507.98,130.084,4.00692,'1581:0 '),
+(1583,'BarrensS1',1,17,1156,18,25,0,-2489.54,-2427.29,91.7094,6.28066,'1548:0 1550:0 1585:0 1586:0 '),
+(1584,'BarrensS2',1,17,1156,18,25,0,-2509.21,-1790.84,91.6888,0.117235,'174:0 1553:0 1585:0 1586:0 1587:0 '),
+(1585,'BarrensS3',1,17,1157,18,25,0,-2496.45,-2147.95,95.7846,6.25905,'174:0 1550:0 1583:0 1584:0 1586:0 '),
+(1586,'BarrensS4',1,17,1157,18,25,0,-2759.08,-2184.15,95.793,0.0131506,'1583:0 1584:0 1585:0 1587:0 '),
+(1587,'BarrensS5',1,17,1157,18,25,0,-2945.71,-2047.99,95.7879,0.507956,'1584:0 1586:0 1588:0 1589:0 1591:0 '),
+(1588,'BarrensS6',1,17,1157,18,25,0,-3285.06,-2049.93,92.2466,6.10862,'1587:0 1589:0 1590:0 1591:0 1593:0 1594:0 1596:0 '),
+(1589,'BarrensS7',1,17,390,18,25,0,-3079.79,-1941.98,94.9653,3.28119,'1587:0 1588:0 1590:0 '),
+(1590,'BarrensS8',1,17,390,18,25,0,-3131.93,-1680.95,92.0185,4.74203,'1588:0 1589:0 '),
+(1591,'BarrensS9',1,17,390,18,25,0,-3131.04,-2171.34,93.5897,1.45786,'1587:0 1588:0 1592:0 1596:0 '),
+(1592,'BarrensS10',1,17,390,18,25,0,-3110.95,-2348.03,94.3578,1.81325,'1591:0 '),
+(1593,'BarrensS11',1,17,1156,18,25,0,-3458.57,-1830.89,91.667,5.2042,'1588:0 1595:0 '),
+(1594,'BarrensS12',1,17,1157,18,25,0,-3481.33,-2051.77,96.4547,0.0284251,'1588:0 1595:0 1596:0 '),
+(1595,'BarrensS13',1,17,1157,18,25,0,-3653.21,-2015.41,91.6668,0.540897,'1593:0 1594:0 1596:0 1597:0 1599:0 1600:0 '),
+(1596,'BarrensS14',1,17,1156,18,25,0,-3651.34,-2318.77,91.6674,0.625316,'1595:0 1588:0 1591:0 1594:0 1597:0 1607:0 1872:0 '),
+(1597,'BarrensS15',1,17,1157,18,25,0,-3840.72,-2048.27,91.6821,6.27935,'1595:0 1596:0 1598:0 1599:0 1600:0 1607:0 '),
+(1598,'BarrensS16',1,17,1157,18,25,0,-4067.36,-2048.82,91.6672,6.16353,'1597:0 1601:0 1602:0 1607:0 1610:0 '),
+(1599,'BarrensS17',1,17,1701,18,25,0,-3730.53,-1594.06,93.2113,4.82441,'1595:0 1597:0 1600:0 1601:0 '),
+(1600,'BarrensS18',1,17,1701,18,25,0,-3894.71,-1618.14,91.6668,0.128916,'1595:0 1597:0 1599:0 1601:0 '),
+(1601,'BarrensS19',1,17,1701,18,25,0,-4039.89,-1841.83,94.2054,0.676733,'1598:0 1599:0 1600:0 1602:0 '),
+(1602,'BarrensS20',1,17,1157,18,25,0,-4188.61,-1914.07,91.6668,5.68758,'1598:0 1601:0 1603:0 '),
+(1603,'BarrensS21',1,17,1157,18,25,0,-4356.79,-1884.72,89.6352,5.97818,'1602:0 1604:0 1606:0 '),
+(1604,'BarrensS22',1,17,1157,18,25,0,-4478.66,-1866.94,86.1087,1.26186,'1603:0 1605:0 '),
+(1605,'BarrensRFK1',1,17,1717,18,25,0,-4476,-1686.51,81.5791,4.60765,'1604:0 '),
+(1606,'BarrensRFD1',1,17,1316,30,40,0,-4487.33,-2054.23,75.9531,5.76807,'1603:0 '),
+(1607,'BaelModan1',1,17,359,18,25,4,-3989.77,-2218.81,95.0004,6.06065,'1596:0 1597:0 1598:0 1608:0 '),
+(1608,'BaelModan2',1,17,359,18,25,4,-4109.4,-2315.19,125.071,0.600164,'1607:0 1609:0 '),
+(1609,'BaelModan3',1,17,2157,8,25,4,-4073.79,-2368.19,108.909,2.02644,'1608:0 '),
+(1610,'BaelModan4',1,17,359,18,25,4,-4176.57,-2101.49,72.6592,0.294635,'1598:0 1611:0 '),
+(1611,'BaelModan5',1,17,359,18,25,4,-4071.12,-2157.56,50.3844,2.75686,'1610:0 1612:0 '),
+(1612,'BaelModan6',1,17,359,18,25,4,-4223.35,-2272.53,60.9001,0.575407,'1611:0 '),
+(1613,'RaptorGrounds',1,17,1697,12,25,0,-2042.89,-3229.73,91.8767,0.499641,'1544:0 '),
+(1614,'BarrensWC1',1,718,718,8,20,0,-692.325,-2048.77,65.8045,0.216115,'98:0 1615:0 '),
+(1615,'BarrensWC2',1,718,718,12,25,0,-580.407,-2042.49,57.4486,4.80284,'1614:0 1616:0 '),
+(1616,'BarrensWC3',1,718,718,12,25,0,-677.272,-2203.72,25.3109,0.830688,'1615:0 1617:0 '),
+(1617,'BarrensWC4',1,718,718,12,25,0,-638.458,-2387.33,25.6848,1.69853,'1616:0 '),
+(1618,'RatchetSpawn',1,17,392,8,20,1,-1057.17,-3641.62,23.878,5.32863,'35:0 '),
+(1619,'BarrensExitW2_1a',1,17,17,13,25,2,-365.7,-970.989,26.4604,0.0515498,'1533:0 1620:0 '),
+(1620,'BarrensExitW2_2',1,17,17,13,25,2,-257.953,-835.045,8.42398,4.38694,'1619:0 1621:0 1622:0 '),
+(1621,'STMExitE',1,406,469,13,25,4,-231.912,-777.297,7.15901,4.25107,'1533:0 1620:0 1622:0 '),
+(1622,'StonetalonSE1',1,406,469,13,25,0,-183.878,-696.708,0.285728,4.19806,'1620:0 1621:0 1623:0 '),
+(1623,'StonetalonSE2',1,406,2538,13,25,0,7.63915,-645.484,-33.8698,3.50887,'1622:0 1624:0 1625:0 1626:0 1630:0 '),
+(1624,'StonetalonSE3',1,406,469,13,25,0,-21.452,-771.961,1.19909,1.25477,'1623:0 1625:0 '),
+(1625,'StonetalonSE4',1,406,469,13,25,0,173.964,-863.908,2.87119,2.42107,'1623:0 1624:0 '),
+(1626,'StonetalonSE5',1,406,2537,13,25,0,127.03,-646.104,-0.157034,3.15149,'1623:0 1627:0 '),
+(1627,'StonetalonSE6',1,406,2537,13,25,0,102.577,-522.122,3.25329,4.9677,'1626:0 1628:0 1629:0 '),
+(1628,'StonetalonSE7',1,406,2537,13,25,0,219.214,-475.456,21.9453,3.60701,'1627:0 1629:0 '),
+(1629,'StonetalonSE8',1,406,469,13,25,0,104.777,-261.978,5.20105,5.15819,'1627:0 1628:0 1632:0 1633:0 '),
+(1630,'StonetalonSE9',1,406,2538,13,25,0,-62.1728,-442.081,-37.1112,5.01095,'1623:0 1631:0 '),
+(1631,'StonetalonSE10',1,406,469,13,25,0,-29.9825,-291.416,-5.66732,4.59076,'1630:0 1632:0 '),
+(1632,'StonetalonSE11',1,406,2539,13,25,0,-2.18294,-227.074,15.1619,4.29231,'1629:0 1631:0 1633:0 1640:0 '),
+(1633,'StonetalonSE12',1,406,1076,13,25,0,59.7029,-127.555,15.3056,4.18039,'1629:0 1632:0 1634:0 '),
+(1634,'StonetalonSE13',1,406,1076,13,25,0,109.545,-71.7213,22.4065,2.6092,'1633:0 1635:0 1641:0 '),
+(1635,'StonetalonSE14',1,406,2540,13,25,0,23.5805,-29.4616,31.6752,5.8097,'1634:0 1636:0 '),
+(1636,'StonetalonSE15',1,406,2540,13,25,0,-14.5426,41.0345,49.7486,5.30902,'1635:0 1637:0 '),
+(1637,'StonetalonSE16',1,406,2540,13,25,0,-152.111,135.096,48.9698,5.51519,'1636:0 1638:0 '),
+(1638,'StonetalonSE17',1,406,3157,13,25,0,-114.052,239.055,102.383,4.22518,'1637:0 1639:0 '),
+(1639,'StonetalonSE18',1,406,3157,13,25,0,2.62312,403.85,101.011,3.79714,'1638:0 '),
+(1640,'StonetalonSE19',1,406,2539,13,25,5,-235.218,-347.587,20.2574,0.490614,'1632:0 '),
+(1641,'StonetalonSE20',1,406,1076,13,25,0,197.073,203.918,52.5873,4.43331,'1634:0 1642:0 '),
+(1642,'StonetalonSE21',1,406,1076,13,25,0,274.453,322.855,41.911,4.60022,'1641:0 1643:0 '),
+(1643,'StonetalonSE22',1,406,1076,13,25,0,447.877,347.349,47.8893,3.28665,'1642:0 1644:0 1646:0 '),
+(1644,'StonetalonSE23',1,406,2541,13,25,0,426.687,491.945,98.4352,4.79266,'1643:0 1645:0 '),
+(1645,'StonetalonSE24',1,406,2541,13,25,0,465.249,636.071,69.1319,4.43923,'1644:0 151:0 '),
+(1646,'StonetalonSE25',1,406,1076,13,25,0,547.002,317.026,51.4155,2.61083,'1643:0 1647:0 1660:0 '),
+(1647,'StonetalonSE26',1,406,461,13,25,0,944.851,205.469,22.8061,2.8916,'1646:0 1648:0 1649:0 1650:0 '),
+(1648,'StonetalonE1',1,406,636,13,25,0,1111.38,-250.367,-1.11603,1.94521,'1647:0 153:0 1649:0 1651:0 1655:0 '),
+(1649,'StonetalonE2',1,406,636,13,25,0,1154.28,55.6527,1.56437,2.89789,'1647:0 1648:0 152:0 1650:0 1651:0 1655:0 '),
+(1650,'StonetalonE3',1,406,461,13,25,0,1307.08,338.017,30.2635,3.38681,'152:0 1647:0 1649:0 1651:0 '),
+(1651,'StonetalonE4',1,406,461,13,25,0,1299.88,-37.5445,6.46784,2.5696,'152:0 1648:0 1649:0 1650:0 1655:0 '),
+(1652,'StonetalonE5',1,406,463,13,25,0,1596.92,-164.112,37.8,1.7689,'152:0 1653:0 1656:0 '),
+(1653,'StonetalonE6',1,406,461,13,25,0,1503.38,-325.077,23.7601,0.679167,'154:0 1652:0 1655:0 '),
+(1654,'StonetalonE7',1,406,461,13,25,0,1239.88,-573.82,14.7456,2.30493,'153:0 1655:0 '),
+(1655,'StonetalonE8',1,406,461,13,25,0,1274.45,-389.01,15.6582,4.91048,'153:0 154:0 1648:0 1649:0 1651:0 1653:0 1654:0 '),
+(1656,'StonetalonE9',1,406,463,13,25,0,1689.34,-66.4877,90.3719,1.43312,'1652:0 1657:0 '),
+(1657,'StonetalonE10',1,406,463,13,25,0,1683.31,88.067,136.952,4.78089,'1656:0 1658:0 '),
+(1658,'StonetalonE11',1,406,463,13,25,0,1607.48,98.5127,98.5487,1.23875,'1657:0 1659:0 '),
+(1659,'StonetalonE12',1,406,463,13,25,0,1607.14,183.852,104.64,5.9099,'1658:0 '),
+(1660,'StonetalonC1',1,406,1076,13,25,0,741.152,432.351,64.3987,3.6401,'1646:0 1661:0 1662:0 '),
+(1661,'StonetalonC2',1,406,1076,13,25,3,734.898,323.955,63.5237,1.26623,'1660:0 1662:0 '),
+(1662,'StonetalonC3',1,406,1076,13,25,0,911.255,644.216,97.0932,4.02886,'1660:0 1661:0 45:0 1670:0 '),
+(1663,'StonetalonC4',1,406,460,13,25,5,967.945,1059.83,107.154,4.48637,'45:0 1664:0 '),
+(1664,'StonetalonC5',1,406,460,20,25,4,857.673,1068.45,134.552,6.12668,'1663:0 1665:0 '),
+(1665,'StonetalonC6',1,406,406,20,25,4,770.751,1128.86,184.567,5.69273,'1664:0 1666:0 '),
+(1666,'StonetalonC7',1,406,406,20,25,4,763.22,1201.45,167.109,4.77383,'1665:0 1667:0 '),
+(1667,'StonetalonC8',1,406,406,20,25,4,612.567,1230.12,105.052,5.96764,'1666:0 1668:0 '),
+(1668,'StonetalonC9',1,406,465,20,25,4,639.837,1320.23,57.7872,0.670119,'1667:0 1669:0 '),
+(1669,'StonetalonC10',1,406,465,20,25,0,717.122,1407.26,-11.3895,4.23973,'1668:0 1698:0 1699:0 1703:0 '),
+(1670,'StonetalonC11',1,406,1076,16,25,0,1254.55,723.188,177.709,3.60317,'1662:0 1671:0 1677:0 '),
+(1671,'StonetalonC12',1,406,406,18,25,2,1149.35,812.103,216.145,0.074743,'1670:0 1672:0 '),
+(1672,'StonetalonC13',1,406,406,18,25,2,1174.45,1039.29,211.338,4.51028,'1671:0 1673:0 '),
+(1673,'StonetalonC14',1,406,406,18,25,2,1150.98,1125.82,230.66,4.8323,'1672:0 1674:0 '),
+(1674,'StonetalonC15',1,406,406,18,25,2,1185.65,1218.77,221.734,4.2727,'1673:0 1675:0 '),
+(1675,'StonetalonC16',1,406,406,18,25,2,1120.4,1212.75,204.833,0.0197749,'1674:0 1676:0 '),
+(1676,'StonetalonC17',1,406,406,18,25,2,1150.62,1371.11,126.775,4.37873,'1675:0 1697:0 '),
+(1677,'StonetalonC18',1,406,464,16,25,0,1370.73,733.802,156.258,3.23598,'1670:0 1678:0 1681:0 '),
+(1678,'StonetalonC19',1,406,464,16,25,0,1446.65,663,145.249,2.57819,'1677:0 1679:0 1680:0 '),
+(1679,'StonetalonC20',1,406,464,16,25,0,1553.51,543.727,164.574,2.16586,'1678:0 1680:0 '),
+(1680,'StonetalonC21',1,406,464,16,25,0,1584.31,756.555,132.915,4.49848,'1678:0 1679:0 1681:0 1686:0 '),
+(1681,'StonetalonC22',1,406,464,16,25,0,1440.45,891.877,138.324,4.65164,'1677:0 1680:0 1682:0 1683:0 '),
+(1682,'StonetalonC23',1,406,464,16,25,0,1361.44,1063.47,166.157,5.2289,'1681:0 1683:0 '),
+(1683,'StonetalonC24',1,406,464,16,25,0,1500.8,1046.96,144.855,4.37673,'1681:0 1682:0 1684:0 1685:0 '),
+(1684,'StonetalonC25',1,406,464,16,25,0,1668.56,1003.04,136.669,2.88249,'1683:0 1685:0 1686:0 1687:0 '),
+(1685,'StonetalonC26',1,406,406,16,25,0,1533.39,1167.23,150.198,5.27402,'1683:0 1684:0 1695:0 '),
+(1686,'StonetalonC27',1,406,464,16,25,0,1837.17,772.144,145.217,3.08276,'1680:0 1684:0 1687:0 '),
+(1687,'StonetalonC28',1,406,464,16,25,0,1832.42,946.127,147.601,2.87658,'1684:0 1686:0 1688:0 '),
+(1688,'StonetalonN1',1,406,406,16,25,0,2089.45,985.763,224.629,0.496822,'1687:0 1689:0 1690:0 '),
+(1689,'StonetalonN2',1,406,467,16,25,0,2389.72,1113.13,305.081,3.60307,'1688:0 '),
+(1690,'StonetalonN3',1,406,467,16,25,0,2406.02,1262.32,293.173,4.48076,'39:0 1688:0 1691:0 1694:0 '),
+(1691,'StonetalonN4',1,406,467,16,25,0,2308.04,1474.22,278.518,5.29758,'1692:0 1694:0 1690:0 '),
+(1692,'StonetalonN5',1,406,468,16,25,0,2455.85,1706.87,321.807,3.7366,'1691:0 155:0 39:0 1694:0 '),
+(1693,'StonetalonN6',1,406,468,16,25,4,2502.8,1923.14,341.618,4.8177,'155:0 '),
+(1694,'StonetalonN7',1,406,467,18,25,0,2490.31,1474.07,262.723,0.177969,'39:0 1691:0 1692:0 1690:0 '),
+(1695,'StonetalonW1',1,406,406,18,25,0,1531.08,1382.61,154.485,3.40792,'1685:0 1696:0 '),
+(1696,'StonetalonW2',1,406,406,18,25,0,1396,1443.1,122.505,3.64354,'1695:0 1697:0 '),
+(1697,'StonetalonW3',1,406,406,18,25,0,1250.91,1480.82,78.0749,3.62587,'1676:0 1696:0 1698:0 '),
+(1698,'StonetalonW4',1,406,465,20,25,0,926.026,1574.39,-15.7829,5.87604,'1669:0 1697:0 1702:0 1703:0 '),
+(1699,'StonetalonW5',1,406,465,20,25,0,546.937,1540.31,-5.73179,5.59329,'1669:0 1700:0 1703:0 '),
+(1700,'StonetalonW6',1,406,465,20,25,0,498.082,1756.93,4.7637,5.0278,'1699:0 1701:0 1703:0 1704:0 '),
+(1701,'StonetalonW7',1,406,465,20,25,0,684.965,1869.36,-7.54489,3.9518,'1700:0 1702:0 1703:0 '),
+(1702,'StonetalonW8',1,406,465,20,25,0,905.075,1799.18,-4.36236,2.8974,'1698:0 1701:0 1703:0 '),
+(1703,'StonetalonW9',1,406,465,20,25,0,709.779,1654.47,-27.9084,0.454811,'1669:0 1698:0 1699:0 1700:0 1701:0 1702:0 '),
+(1704,'STMExitSW',1,406,465,20,25,0,386.19,1791.83,40.6481,5.89762,'1700:0 1705:0 '),
+(1705,'DesolaceExitN',1,405,405,28,40,0,254.286,1837.65,86.6541,5.89961,'1704:0 1706:0 '),
+(1706,'DesolaceN1',1,405,405,28,40,0,136.31,1790.75,86.2292,4.91001,'1705:0 1707:0 1708:0 1709:0 '),
+(1707,'DesolaceN2',1,405,405,28,40,0,174.958,1580.05,166.08,3.19588,'1706:0 1708:0 '),
+(1708,'DesolaceN3',1,405,405,28,40,0,-43.4822,1503,100.016,0.657084,'1706:0 1707:0 1709:0 1711:0 1712:0 1713:0 '),
+(1709,'DesolaceN4',1,405,599,28,40,0,-240.456,1624.18,94.7617,2.12576,'1706:0 1708:0 1710:0 1711:0 1712:0 '),
+(1710,'DesolaceN5',1,405,599,28,40,0,-478.435,1651.62,103.311,6.16664,'1709:0 1711:0 1724:0 1727:0 '),
+(1711,'DesolaceN6',1,405,405,28,40,0,-519.027,1436.95,89.0591,0.360579,'1708:0 1709:0 1710:0 1712:0 1723:0 1743:0 1744:0 1745:0 '),
+(1712,'DesolaceN7',1,405,405,28,40,0,-262.519,1170.51,90.2776,1.81553,'1708:0 1709:0 1711:0 1713:0 1717:0 1720:0 1723:0 '),
+(1713,'DesolaceN8',1,405,405,28,40,0,-68.2755,1158.91,90.8663,1.88621,'1708:0 1712:0 1714:0 1717:0 1720:0 '),
+(1714,'DesolaceN9',1,405,608,28,40,2,24.7744,1218.69,134.023,3.19194,'1713:0 1715:0 '),
+(1715,'DesolaceN10',1,405,608,28,40,2,166.996,1219.58,166.116,3.12321,'1714:0 1716:0 '),
+(1716,'DesolaceN11',1,405,608,28,40,2,222.502,1276.25,189.878,5.01405,'1715:0 60:0 '),
+(1717,'DesolaceN12',1,405,603,28,40,0,-37.1114,929.567,91.722,2.17957,'1712:0 1713:0 1718:0 1720:0 1721:0 '),
+(1718,'DesolaceN13',1,405,603,28,40,0,7.08753,779.096,91.8455,4.34648,'1717:0 1719:0 '),
+(1719,'DesolaceN14',1,405,603,28,40,0,-67.217,604.321,91.3718,1.59562,'1718:0 1720:0 1721:0 '),
+(1720,'DesolaceN15',1,405,603,28,40,0,-319.285,898.298,89.3548,5.81712,'1712:0 1713:0 1717:0 1719:0 1721:0 1722:0 1723:0 '),
+(1721,'DesolaceN16',1,405,603,28,40,0,-88.9887,771.679,132.892,1.27553,'1717:0 1719:0 1720:0 '),
+(1722,'DesolaceN17',1,405,405,28,40,0,-524.771,816.278,91.0366,0.333055,'1720:0 1723:0 1744:0 '),
+(1723,'DesolaceN18',1,405,405,28,40,0,-518.678,1099.09,93.063,6.1992,'1711:0 1712:0 1720:0 1722:0 1744:0 1745:0 '),
+(1724,'DesolaceN19',1,405,599,28,40,0,-433.656,1712.56,127.171,4.07939,'1710:0 1725:0 1726:0 '),
+(1725,'DesolaceN20',1,405,599,28,40,0,-346.92,1761.61,138.371,0.287887,'1724:0 '),
+(1726,'DesolaceN21',1,405,599,28,40,0,-409.361,1865.43,127.463,4.65667,'1724:0 '),
+(1727,'DesolaceN22',1,405,599,28,40,0,-557.524,1836.01,96.4213,5.15932,'1710:0 1728:0 1743:0 '),
+(1728,'DesolaceN23',1,405,405,28,40,0,-596.61,2002.61,88.4432,6.14696,'1727:0 1729:0 1730:0 1731:0 1742:0 1743:0 '),
+(1729,'DesolaceN24',1,405,405,28,40,0,-409.395,2019.53,98.1479,3.16245,'1728:0 1730:0 1731:0 '),
+(1730,'DesolaceN25',1,405,598,28,40,0,-362.318,2211.47,90.4702,1.2127,'1728:0 1729:0 1731:0 1732:0 1733:0 '),
+(1731,'DesolaceN26',1,405,2405,28,40,0,-574.499,2247.88,89.8498,5.11024,'1728:0 1729:0 1730:0 1732:0 1738:0 1741:0 1742:0 1772:0 '),
+(1732,'DesolaceN27',1,405,2405,28,40,0,-436.581,2351.38,60.8605,4.01462,'1730:0 1731:0 1734:0 1735:0 '),
+(1733,'DesolaceN28',1,405,598,28,40,0,-45.3846,2199.95,94.7517,3.10159,'1730:0 '),
+(1734,'DesolaceN29',1,405,598,28,40,0,-223.597,2401.87,19.3117,3.25671,'1732:0 1735:0 '),
+(1735,'DesolaceN30',1,405,598,28,40,0,-240.439,2492.2,1.43883,3.79864,'1732:0 1734:0 1736:0 1737:0 '),
+(1736,'DesolaceN31',1,405,2405,28,40,0,-370.369,2605.96,1.54797,5.56185,'1735:0 1739:0 '),
+(1737,'DesolaceN32',1,405,2406,31,40,0,263.113,2974.68,2.07535,3.87325,'1735:0 '),
+(1738,'DesolaceN33',1,405,2405,28,40,0,-601.969,2431.57,74.1931,4.86205,'1731:0 1739:0 1741:0 '),
+(1739,'DesolaceN34',1,405,2405,28,40,0,-502.176,2576.74,18.2199,4.19054,'1736:0 1738:0 1740:0 '),
+(1740,'DesolaceN35',1,405,598,28,40,0,-719.849,2595.3,58.3371,6.23453,'1739:0 1741:0 '),
+(1741,'DesolaceN36',1,405,405,31,40,0,-750.951,2392.96,91.9055,1.38273,'1731:0 1738:0 1740:0 1742:0 1770:0 1772:0 '),
+(1742,'DesolaceN37',1,405,405,28,40,0,-759.272,2036.09,91.7138,1.7715,'1728:0 1731:0 1741:0 1770:0 1771:0 '),
+(1743,'DesolaceN38',1,405,405,28,40,0,-785.037,1666.3,90.7953,3.33248,'1711:0 1727:0 1728:0 1745:0 1769:0 1770:0 '),
+(1744,'DesolaceN39',1,405,609,28,40,0,-796.298,1079.33,90.2949,6.11672,'1711:0 1722:0 1723:0 1745:0 1746:0 1747:0 '),
+(1745,'DesolaceN40',1,405,405,28,40,0,-754.549,1363.26,88.5616,5.47467,'1711:0 1723:0 1743:0 1744:0 1769:0 '),
+(1746,'DesolaceN41',1,405,609,28,40,0,-897.587,897.096,95.0181,0.982181,'1744:0 1747:0 1748:0 '),
+(1747,'DesolaceC1',1,405,405,28,40,0,-1125.97,1230.91,93.7933,5.43931,'1744:0 1746:0 1748:0 1749:0 1769:0 '),
+(1748,'DesolaceC2',1,405,405,28,40,0,-1391.67,958.264,89.5921,0.552166,'1746:0 1747:0 1750:0 1751:0 '),
+(1749,'DesolaceC3',1,405,405,28,40,0,-1427.18,1225.61,103.863,0.133931,'1747:0 129:0 1750:0 '),
+(1750,'DesolaceC4',1,405,604,28,40,0,-1577.16,1114.97,90.6547,0.632647,'129:0 1748:0 1749:0 1751:0 1760:0 1762:0 '),
+(1751,'DesolaceC5',1,405,604,28,40,0,-1631.55,978.868,90.3134,0.0954253,'1748:0 1750:0 1752:0 1759:0 1760:0 '),
+(1752,'DesolaceC6',1,405,604,34,40,0,-1672.96,839.546,93.6943,1.409,'1751:0 1753:0 '),
+(1753,'DesolaceC7',1,405,604,34,40,0,-1824.57,798.663,103.148,0.209302,'1752:0 1754:0 '),
+(1754,'DesolaceC8',1,405,2198,34,40,0,-1847.21,666.041,107.727,1.26565,'1753:0 1755:0 1756:0 '),
+(1755,'DesolaceC9',1,405,2198,34,40,0,-1837.82,584.775,136.457,1.64775,'1754:0 '),
+(1756,'DesolaceC10',1,405,2198,34,40,0,-2020.93,674.999,118.726,6.26783,'1754:0 1757:0 '),
+(1757,'DesolaceC11',1,405,2198,34,40,0,-2022.56,589.179,143.38,5.31357,'1756:0 1758:0 '),
+(1758,'DesolaceC12',1,405,2198,34,40,0,-1933.59,514.493,164.939,2.49988,'1757:0 '),
+(1759,'DesolaceC13',1,405,604,28,40,0,-1799.06,928.096,91.3039,0.218297,'1751:0 1760:0 1762:0 '),
+(1760,'DesolaceC14',1,405,604,28,40,0,-1889.74,1110.04,92.5553,5.97134,'1750:0 1751:0 1759:0 1761:0 1762:0 '),
+(1761,'DesolaceC15',1,405,405,31,40,0,-1897.9,1372.61,61.1381,4.74417,'1760:0 1762:0 1764:0 1777:0 1811:0 1813:0 '),
+(1762,'DesolaceC16',1,405,604,28,40,0,-1749.34,1214.45,91.3952,0.204553,'1750:0 1759:0 1760:0 1761:0 1763:0 '),
+(1763,'DesolaceC17',1,405,405,28,40,0,-1569.77,1277.99,87.9315,3.56017,'1762:0 1764:0 '),
+(1764,'DesolaceC18',1,405,405,31,40,0,-1699.9,1433.42,61.6894,0.112268,'129:0 1761:0 1763:0 '),
+(1765,'DesolaceC19',1,405,597,28,40,4,-1335.75,1704.43,89.9029,5.8932,'128:0 '),
+(1766,'DesolaceC20',1,405,597,28,40,4,-1199.03,1771.37,99.5835,4.08873,'128:0 1767:0 '),
+(1767,'DesolaceC21',1,405,597,28,40,4,-1157.92,1848.6,99.595,4.17119,'1766:0 1768:0 '),
+(1768,'DesolaceC22',1,405,597,28,40,4,-1151.69,1938.33,88.8694,1.73253,'1767:0 '),
+(1769,'DesolaceC23',1,405,405,31,40,0,-1193.57,1475.36,61.1112,4.30472,'128:0 129:0 1743:0 1745:0 1747:0 1770:0 1777:0 '),
+(1770,'DesolaceC24',1,405,405,31,40,0,-1051.16,1759.04,62.2132,3.91398,'129:0 1741:0 1742:0 1743:0 1769:0 1771:0 1776:0 '),
+(1771,'DesolaceC25',1,405,405,31,40,0,-1096.46,2045.41,58.5175,4.84859,'1742:0 1770:0 1772:0 1775:0 '),
+(1772,'DesolaceC26',1,405,405,31,40,0,-1095.17,2383.16,92.5366,5.96779,'1731:0 1741:0 1771:0 1773:0 '),
+(1773,'DesolaceC27',1,405,405,31,40,0,-1419.73,2331.31,91.8161,0.0556962,'1772:0 1774:0 1778:0 1779:0 1798:0 '),
+(1774,'DesolaceC28',1,405,596,31,40,0,-1340.98,2101.55,63.5443,1.99366,'1773:0 1775:0 1776:0 1778:0 '),
+(1775,'DesolaceC29',1,405,596,31,40,0,-1225.31,2021.97,59.0277,2.34708,'1771:0 1774:0 1776:0 '),
+(1776,'DesolaceC30',1,405,596,31,40,0,-1362.19,1917.79,50.1441,0.929436,'128:0 1770:0 1774:0 1775:0 1777:0 '),
+(1777,'DesolaceC31',1,405,405,31,40,0,-1575.89,1726.59,58.925,5.73608,'129:0 1761:0 1769:0 1776:0 1778:0 1809:0 1810:0 '),
+(1778,'DesolaceC32',1,405,405,31,40,0,-1561.67,1991.32,61.6415,0.949069,'129:0 1773:0 1774:0 1777:0 1809:0 '),
+(1779,'DesolaceC33',1,405,607,33,40,0,-1371.99,2554.03,108.02,4.4441,'1773:0 1780:0 1781:0 '),
+(1780,'DesolaceC34',1,405,607,33,40,0,-1392.44,2659.84,112.065,5.41015,'1779:0 1781:0 '),
+(1781,'DesolaceC35',1,405,607,33,40,0,-1251.49,2685.06,111.557,3.5193,'1779:0 1780:0 1782:0 1783:0 '),
+(1782,'DesolaceC36',1,405,607,33,40,0,-1123.21,2688.52,111.831,2.59448,'1781:0 1783:0 '),
+(1783,'DesolaceC37',1,405,607,33,40,0,-1161.95,2795.33,122.835,2.23711,'1781:0 1782:0 1784:0 1785:0 '),
+(1784,'DesolaceC38',1,405,607,33,40,0,-1067.79,2918.91,179.121,3.97481,'1783:0 '),
+(1785,'DesolaceC39',1,405,607,33,40,0,-1289.84,2920.03,113.966,5.30998,'1783:0 1786:0 '),
+(1786,'DesolaceC40',1,405,607,33,40,0,-1360.57,2783.12,113.08,5.63201,'1785:0 127:0 1787:0 '),
+(1787,'DesolaceC41',1,405,607,33,40,0,-1422.79,2793.13,111.697,0.937294,'127:0 1786:0 1788:0 '),
+(1788,'DesolaceC42',1,405,607,33,40,0,-1470.51,2717.61,112.426,0.907843,'1787:0 1789:0 '),
+(1789,'DesolaceC43',1,405,607,33,40,0,-1526.76,2740.76,111.941,5.60649,'1788:0 1790:0 '),
+(1790,'DesolaceC44',1,405,607,33,40,0,-1487.94,2839.33,111.17,4.34789,'1789:0 1791:0 '),
+(1791,'DesolaceC45',1,405,607,33,40,0,-1571.53,2902.93,112.301,5.73411,'1790:0 1794:0 '),
+(1792,'DesolaceC46',1,405,2408,31,40,4,-1727.84,3103.88,35.0044,5.61552,'57:0 1793:0 '),
+(1793,'DesolaceC47',1,405,598,31,40,4,-1841.75,3013.22,11.277,0.475075,'1792:0 1794:0 1795:0 '),
+(1794,'DesolaceC48',1,405,598,31,40,0,-1852.69,2854.14,50.9586,0.237108,'1791:0 1795:0 1793:0 1796:0 1797:0 '),
+(1795,'DesolaceC49',1,405,598,31,40,0,-1990.78,2803.76,56.2314,0.896844,'1794:0 1793:0 1796:0 1797:0 '),
+(1796,'DesolaceS1',1,405,606,28,40,0,-2002.35,2610.23,62.383,1.22083,'1794:0 1795:0 1797:0 1799:0 1800:0 '),
+(1797,'DesolaceS2',1,405,405,28,40,0,-1772.22,2471.83,73.3018,5.67404,'1794:0 1795:0 1796:0 1798:0 1800:0 '),
+(1798,'DesolaceS3',1,405,405,31,40,0,-1592.19,2396.96,91.4972,2.81715,'1773:0 1797:0 1799:0 '),
+(1799,'DesolaceS4',1,405,405,31,40,0,-1797.31,2149.68,62.4428,1.77847,'1796:0 1798:0 1800:0 1809:0 '),
+(1800,'DesolaceS5',1,405,606,28,40,0,-1967.47,2474.94,61.5806,1.35043,'1796:0 1797:0 1799:0 1801:0 1803:0 '),
+(1801,'DesolaceS6',1,405,606,28,40,0,-2098.84,2409.19,61.4027,3.19808,'1800:0 1802:0 1803:0 '),
+(1802,'DesolaceExitS',1,405,405,28,40,0,-2402.61,2363.59,108.604,0.107536,'1801:0 1913:0 '),
+(1803,'DesolaceS7',1,405,602,33,40,0,-2145.67,2180.6,67.6286,1.21495,'1800:0 1801:0 1804:0 1806:0 '),
+(1804,'DesolaceS8',1,405,602,33,40,0,-2190.56,1992.71,64.0673,1.30332,'1803:0 1805:0 '),
+(1805,'DesolaceS9',1,405,602,33,40,0,-2171.01,1903.5,66.9158,1.58018,'1804:0 1807:0 '),
+(1806,'DesolaceS10',1,405,602,33,40,0,-1981.74,2045.99,59.3955,2.2831,'1803:0 1808:0 1809:0 '),
+(1807,'DesolaceS11',1,405,602,33,40,0,-2096.65,1787.92,57.1531,1.95912,'1805:0 1808:0 1811:0 '),
+(1808,'DesolaceS12',1,405,602,33,40,0,-1982.92,1838.14,63.409,3.36694,'1806:0 1807:0 1810:0 '),
+(1809,'DesolaceS13',1,405,602,33,40,0,-1815.92,1988.94,59.0664,1.39951,'1777:0 1778:0 1799:0 1806:0 '),
+(1810,'DesolaceS14',1,405,602,33,40,0,-1765.64,1678.32,60.7555,0.438962,'1777:0 1808:0 1811:0 '),
+(1811,'DesolaceS15',1,405,405,31,40,0,-2062.67,1679.65,60.5781,5.56172,'1761:0 1807:0 1810:0 1812:0 '),
+(1812,'DesolaceS16',1,405,2657,33,40,0,-2225.06,1577.55,60.1882,0.421288,'130:0 1811:0 '),
+(1813,'DesolaceS17',1,405,2657,33,40,0,-2153.93,1293.66,63.9415,0.29169,'130:0 1761:0 '),
+(1814,'MulgoreExitE',1,215,215,1,10,4,-2345.37,-1484.97,40.0713,4.66713,'174:0 1815:0 '),
+(1815,'Mulgore1',1,215,215,1,10,4,-2440.53,-1200.03,-9.30534,1.55892,'1814:0 1816:0 1865:0 1869:0 '),
+(1816,'Mulgore2',1,215,215,1,10,4,-2371.49,-904.809,-9.42438,4.38439,'1815:0 1817:0 1865:0 1866:0 1869:0 '),
+(1817,'Mulgore3',1,215,215,1,10,4,-2311.97,-607.857,-9.42454,4.65338,'1816:0 26:0 1818:0 1819:0 1869:0 '),
+(1818,'Mulgore4',1,215,223,1,10,4,-2105.91,-429.602,-6.83183,3.82086,'26:0 1817:0 1846:0 '),
+(1819,'Mulgore5',1,215,215,1,10,4,-2475.36,-501.699,-9.42479,5.94732,'26:0 1817:0 1820:0 1869:0 '),
+(1820,'Mulgore6',1,215,215,1,10,4,-2628.95,-190.942,-9.21765,5.24046,'1819:0 1821:0 1843:0 1844:0 1869:0 '),
+(1821,'Mulgore7',1,215,215,1,10,4,-2844.69,184.459,62.1599,5.51927,'1820:0 1822:0 1843:0 1844:0 '),
+(1822,'Mulgore8',1,215,215,1,10,4,-2993.74,194.655,71.8138,0.231569,'1821:0 1823:0 '),
+(1823,'Mulgore9',1,215,220,1,10,4,-3072.38,82.3203,78.0188,1.03857,'1822:0 1824:0 '),
+(1824,'Mulgore10',1,215,220,1,10,4,-3137.17,-93.9051,45.0213,1.34488,'1823:0 1825:0 1842:0 '),
+(1825,'Mulgore11',1,215,220,1,10,4,-3063.95,-239.512,50.6424,1.85735,'1824:0 27:0 1842:0 '),
+(1826,'Mulgore12',1,215,220,1,10,4,-2891.86,-697.729,45.2768,1.58442,'27:0 1827:0 1842:0 '),
+(1827,'Mulgore13',1,215,220,1,10,4,-3261.33,-846.251,48.8421,0.235503,'1826:0 1828:0 1830:0 1841:0 1842:0 '),
+(1828,'Mulgore14',1,215,220,1,10,4,-3366.64,-1016.68,109.367,6.12009,'1827:0 1829:0 '),
+(1829,'Mulgore15',1,215,358,1,10,4,-3224,-1083.1,88.5366,2.85872,'1828:0 1830:0 '),
+(1830,'Mulgore16',1,215,358,1,10,4,-3119.41,-1033.45,49.7491,3.46937,'1827:0 1829:0 1831:0 1832:0 '),
+(1831,'Mulgore17',1,215,358,1,10,4,-3063.5,-1162.46,66.0398,0.149071,'1830:0 1832:0 1833:0 '),
+(1832,'Mulgore18',1,215,358,1,10,4,-2991.05,-1001.3,57.8123,3.50664,'1830:0 1831:0 '),
+(1833,'Mulgore19',1,215,358,1,10,4,-2989.95,-1155.46,58.1984,3.50469,'1831:0 1834:0 1837:0 '),
+(1834,'Mulgore20',1,215,358,1,10,4,-2907.83,-1077.93,55.9333,3.94844,'1833:0 1835:0 1837:0 '),
+(1835,'Mulgore21',1,215,358,1,10,4,-2844.44,-1016.64,56.9403,4.16051,'1834:0 1836:0 '),
+(1836,'Mulgore22',1,215,358,1,10,4,-2854.01,-1100.12,90.8135,0.692983,'1835:0 '),
+(1837,'Mulgore23',1,215,358,1,10,4,-2883.85,-1231.28,72.9943,1.82985,'1833:0 1834:0 1838:0 1840:0 '),
+(1838,'Mulgore24',1,215,358,1,10,4,-3026.45,-1229.87,71.6597,6.01404,'1837:0 1839:0 '),
+(1839,'Mulgore25',1,215,358,1,10,4,-2970.92,-1323.02,80.5074,1.92996,'1838:0 1840:0 '),
+(1840,'Mulgore26',1,215,358,1,10,4,-2895.78,-1325.44,95.4793,2.24804,'1837:0 1839:0 '),
+(1841,'Mulgore27',1,215,220,1,10,4,-3440.17,-866.836,69.6282,6.24768,'1827:0 1842:0 '),
+(1842,'Mulgore28',1,215,220,1,10,4,-3367.33,-495.02,69.8435,4.71616,'1824:0 1825:0 1826:0 1827:0 1841:0 '),
+(1843,'Mulgore29',1,215,818,1,10,4,-2404.86,217.609,48.1932,3.41043,'1820:0 1821:0 1844:0 1845:0 1847:0 1870:0 '),
+(1844,'Mulgore30',1,215,215,1,10,4,-2261.05,-69.3042,-1.37537,2.79193,'1820:0 1821:0 1843:0 1845:0 1846:0 1847:0 '),
+(1845,'Mulgore31',1,215,215,1,10,4,-1909.74,216.749,46.1874,3.10216,'1843:0 1844:0 1847:0 1848:0 1849:0 1871:0 '),
+(1846,'Mulgore32',1,215,223,1,10,4,-2045.76,-343.178,-6.87874,4.09177,'1818:0 1844:0 1847:0 1862:0 1863:0 '),
+(1847,'Mulgore33',1,215,215,1,10,4,-1920.69,-119.003,-11.7465,4.00341,'1843:0 1844:0 1845:0 1846:0 1848:0 1862:0 '),
+(1848,'Mulgore34',1,215,215,1,10,4,-1668.96,-1.5923,-11.6961,3.52429,'1845:0 1847:0 1849:0 1850:0 1862:0 '),
+(1849,'Mulgore35',1,215,215,1,10,5,-1427.28,82.3261,15.7467,3.85023,'1845:0 1848:0 1850:0 '),
+(1850,'Mulgore36',1,215,215,1,10,4,-1347.57,320.413,8.78348,0.441607,'1848:0 1849:0 1851:0 1852:0 '),
+(1851,'Mulgore37',1,1638,1638,1,10,4,-1148.06,245.946,40.6026,3.4811,'1850:0 1852:0 1853:0 1854:0 '),
+(1852,'Mulgore38',1,215,215,1,10,4,-996.688,514.659,49.632,4.10942,'1850:0 1851:0 '),
+(1853,'Mulgore39',1,215,215,1,10,4,-751.74,38.1612,-20.8616,2.04343,'1851:0 1854:0 1856:0 1855:0 '),
+(1854,'Mulgore40',1,215,215,1,10,4,-927.854,10.2372,12.3669,2.39686,'1851:0 1853:0 1856:0 1855:0 '),
+(1855,'Mulgore41',1,215,819,1,10,4,-561.426,-405.799,30.6454,1.96489,'1853:0 1854:0 1856:0 1857:0 '),
+(1856,'Mulgore42',1,215,215,1,10,4,-901.7,-443.722,-39.0694,1.58907,'1853:0 1854:0 1855:0 1857:0 1861:0 '),
+(1857,'Mulgore43',1,215,820,1,10,4,-924.517,-801.42,-5.66428,4.78761,'1855:0 1856:0 1858:0 1860:0 1861:0 '),
+(1858,'Mulgore44',1,215,225,1,10,4,-956.811,-1082.75,42.1933,1.43395,'1857:0 1859:0 '),
+(1859,'Mulgore45',1,215,225,1,10,4,-1099.12,-1152.59,50.0739,0.809557,'1858:0 1860:0 '),
+(1860,'Mulgore46',1,215,820,1,10,4,-1365.16,-841.737,-8.11366,5.8636,'1857:0 1859:0 1861:0 1862:0 1863:0 '),
+(1861,'Mulgore47',1,215,820,1,10,4,-1254.38,-429.801,-44.919,0.114484,'1856:0 1857:0 1860:0 1862:0 '),
+(1862,'Mulgore48',1,215,820,1,10,4,-1600.99,-429.634,-38.9597,5.5357,'1846:0 1847:0 1848:0 1860:0 1861:0 1863:0 1864:0 '),
+(1863,'Mulgore49',1,215,820,1,10,4,-1742.71,-749.243,-8.79196,6.02461,'1846:0 1860:0 1862:0 1864:0 1865:0 1866:0 '),
+(1864,'Mulgore50',1,215,224,1,10,4,-1925.81,-713.913,3.65139,0.842938,'1862:0 1863:0 1865:0 1866:0 '),
+(1865,'Mulgore51',1,215,215,1,10,4,-2111.14,-877.576,-5.68659,6.00889,'1815:0 1816:0 1863:0 1864:0 1866:0 '),
+(1866,'Mulgore52',1,215,360,1,10,4,-1975.78,-1068.43,47.7644,0.687805,'1816:0 1863:0 1864:0 1865:0 1867:0 '),
+(1867,'Mulgore53',1,215,360,1,10,4,-1884.66,-1112.51,92.8851,6.08152,'1866:0 1868:0 '),
+(1868,'Mulgore54',1,215,360,1,10,4,-1584.13,-1092.53,103.917,3.87848,'1867:0 93:0 '),
+(1869,'Mulgore55',1,215,215,1,10,4,-2751.82,-857.915,4.54324,5.9912,'1815:0 1816:0 1817:0 1819:0 1820:0 '),
+(1870,'Mulgore56',1,215,818,1,10,4,-2369.44,444.618,66.6944,2.44118,'1843:0 '),
+(1871,'Mulgore57',1,215,404,1,10,4,-1938.35,454.865,133.59,5.01926,'1845:0 '),
+(1872,'DWMExitW',1,15,15,33,45,0,-3684.38,-2471.41,78.489,4.65716,'1596:0 99:0 '),
+(1873,'DustwallowC1',1,15,15,33,45,0,-3476.61,-2710.46,33.3673,2.4724,'99:0 187:0 1903:0 1904:0 103:0 '),
+(1874,'BlackhoofVillage',1,15,512,33,45,0,-2455.85,-3159.6,35.8624,3.43489,'102:0 1875:0 '),
+(1875,'DustwallowN1',1,15,15,33,45,0,-2686.37,-3372.62,34.5997,0.845044,'101:0 102:0 1874:0 1876:0 1877:0 1902:0 '),
+(1876,'DustwallowN2',1,15,15,33,45,0,-2562.07,-3486.87,34.2695,2.37303,'1875:0 1877:0 '),
+(1877,'DustwallowN3',1,15,15,33,45,0,-2671.59,-3675.6,30.8794,2.00782,'101:0 110:0 1875:0 1876:0 1878:0 1879:0 1894:0 '),
+(1878,'DustwallowN4',1,15,502,33,45,0,-2914.27,-3675.73,33.4338,1.38735,'101:0 110:0 1877:0 1879:0 1880:0 '),
+(1879,'DustwallowN5',1,15,502,33,45,0,-2802.66,-3997.22,36.7838,2.19983,'110:0 1877:0 1878:0 1880:0 1892:0 '),
+(1880,'DustwallowN6',1,15,502,33,45,0,-3155.95,-3974.68,29.251,1.17881,'110:0 1878:0 1879:0 1881:0 1887:0 '),
+(1881,'DustwallowN7',1,15,15,33,45,0,-3305.97,-4095.97,23.4925,0.654559,'109:0 1880:0 '),
+(1882,'DustwallowN8',1,15,15,33,45,0,-3491.34,-4245.46,7.816,1.17292,'109:0 54:0 1884:0 1912:0 '),
+(1883,'TheramoreInn',1,15,513,33,45,3,-3627.66,-4472.85,17.4714,0.218669,'54:0 '),
+(1884,'DustwallowCoastN1',1,15,518,33,45,0,-3458.13,-4377.69,0.755389,2.14564,'1882:0 1885:0 '),
+(1885,'DustwallowCoastN2',1,15,518,33,45,0,-3329.33,-4289.33,1.48119,3.70268,'1884:0 1886:0 '),
+(1886,'DustwallowCoastN3',1,15,518,33,45,0,-3142.27,-4215.25,0.891156,0.280307,'1885:0 1887:0 1897:0 '),
+(1887,'DustwallowCoastN4',1,15,518,33,45,0,-2985.17,-4207.51,1.60007,3.33747,'1880:0 1886:0 1888:0 1897:0 '),
+(1888,'DustwallowCoastN5',1,15,518,33,45,0,-2802.02,-4220.5,1.16157,3.12737,'1889:0 1887:0 1897:0 1898:0 '),
+(1889,'DustwallowCoastN6',1,15,518,33,45,0,-2682.96,-4150.2,0.491195,3.24911,'1888:0 1890:0 1898:0 '),
+(1890,'DustwallowCoastN7',1,15,518,33,45,0,-2644.79,-4076.96,0.24736,4.12678,'1889:0 1891:0 1892:0 1893:0 '),
+(1891,'DustwallowCoastN8',1,15,518,33,45,0,-2634.51,-3970.05,1.40599,4.46647,'1890:0 1892:0 1893:0 1894:0 '),
+(1892,'DustwallowCoastN9',1,15,518,33,45,0,-2678.39,-4014.18,4.97984,2.78377,'1879:0 1890:0 1891:0 '),
+(1893,'DustwallowCoastN10',1,15,518,33,45,0,-2559.21,-4015.96,9.99785,3.70856,'1890:0 1891:0 1899:0 '),
+(1894,'DustwallowCoastN11',1,15,518,33,45,0,-2607.14,-3826.64,6.27917,4.49985,'1877:0 1891:0 1895:0 '),
+(1895,'DustwallowCoastN12',1,15,518,33,45,0,-2466.63,-3818.63,2.61691,3.22358,'1896:0 1894:0 1899:0 1900:0 '),
+(1896,'DustwallowCoastN13',1,17,385,33,45,0,-2395.84,-3763.83,5.73158,5.36182,'1574:0 1895:0 '),
+(1897,'DustwallowCoastN14',1,15,518,33,45,0,-3001.64,-4378.46,9.05538,1.1933,'1886:0 1887:0 1888:0 '),
+(1898,'DustwallowCoastN15',1,15,518,33,45,0,-2662.99,-4255.03,3.90542,2.70126,'1888:0 1889:0 1901:0 '),
+(1899,'DustwallowCoastN16',1,15,518,33,45,0,-2408.96,-4080.5,3.33986,2.28499,'1893:0 1895:0 1900:0 1901:0 '),
+(1900,'DustwallowCoastN17',1,15,518,33,45,0,-2302.1,-4086.25,16.0641,1.37353,'1573:0 1574:0 1895:0 1899:0 1901:0 '),
+(1901,'DustwallowCoastN18',1,15,518,33,45,0,-2291.73,-4303.19,4.72444,2.85793,'1898:0 1899:0 1900:0 '),
+(1902,'DustwallowN9',1,15,15,33,45,0,-2942.4,-3252.27,31.3912,5.0692,'100:0 101:0 102:0 1875:0 1903:0 '),
+(1903,'DustwallowC2',1,15,15,33,45,0,-3285.02,-3185.79,32.3767,5.19094,'1873:0 1902:0 1904:0 1905:0 '),
+(1904,'DustwallowC3',1,15,2302,33,45,0,-3645.37,-3105.83,35.4956,0.749902,'99:0 1873:0 1903:0 1905:0 1907:0 103:0 '),
+(1905,'DustwallowC4',1,15,4046,33,45,0,-3692.77,-3428.45,36.5831,1.67942,'1903:0 1904:0 1906:0 1907:0 '),
+(1906,'DustwallowC5',1,15,501,33,45,0,-4023.01,-3761.02,42.2472,0.725162,'1905:0 1907:0 105:0 '),
+(1907,'DustwallowC6',1,15,4049,33,45,0,-4017.64,-3385.66,38.3117,5.35312,'1904:0 1905:0 1906:0 103:0 105:0 '),
+(1908,'DustwallowC7',1,15,510,33,45,0,-4230.28,-2794.11,27.7681,6.16323,'103:0 108:0 1909:0 '),
+(1909,'DustwallowS1',1,15,509,33,45,0,-4392.92,-2968.72,72.0173,1.4685,'103:0 108:0 1908:0 233:0 105:0 '),
+(1910,'DustwallowS2',1,15,511,33,45,0,-4652.75,-3983.64,63.5063,1.62756,'106:0 107:0 '),
+(1911,'DustwallowS3',1,15,511,33,45,0,-4869.31,-3443.39,39.4441,0.620287,'106:0 107:0 233:0 '),
+(1912,'DustwallowCoastS1',1,15,516,33,45,0,-3990.53,-4144.75,15.8765,3.0059,'104:0 1882:0 '),
+(1913,'FeralasN1',1,357,1114,38,50,0,-2571.82,2244.63,96.3995,0.543668,'1802:0 1914:0 '),
+(1914,'FeralasN2',1,357,1114,38,50,0,-2742,2335.99,62.5691,5.81565,'1913:0 1915:0 1920:0 1921:0 '),
+(1915,'FeralasN3',1,357,1114,38,50,0,-2829.93,2719.49,74.7843,5.10291,'1914:0 1916:0 1920:0 '),
+(1916,'FeralasN4',1,357,1114,38,50,0,-3032.68,2638.14,54.8507,0.249148,'1915:0 1917:0 1920:0 '),
+(1917,'FeralasN5',1,357,1119,38,50,0,-3246.59,2815.94,85.1355,5.88045,'1916:0 1918:0 '),
+(1918,'FeralasN6',1,357,1119,38,50,0,-3570.32,2569.75,80.1298,0.734128,'1917:0 1919:0 1923:0 '),
+(1919,'FeralasN7',1,357,1119,38,50,0,-3349.08,2217.29,32.4203,2.18908,'1918:0 1920:0 1922:0 '),
+(1920,'FeralasN8',1,357,1119,38,50,0,-2939.01,2249.46,45.7452,1.87688,'1914:0 1915:0 1916:0 1919:0 1921:0 '),
+(1921,'FeralasN9',1,357,1111,50,60,0,-2867.51,1894.77,52.6495,3.09033,'1914:0 1920:0 '),
+(1922,'FeralasN10',1,357,1119,38,50,0,-3464.98,2077.93,40.3195,0.882963,'1919:0 1923:0 1925:0 1926:0 '),
+(1923,'FeralasN11',1,357,1119,38,50,0,-3508.95,2343.43,61.5171,1.82151,'1918:0 1922:0 1924:0 '),
+(1924,'FeralasN12',1,357,1119,38,50,0,-3582.9,2225.74,39.1949,3.55134,'1923:0 1925:0 '),
+(1925,'FeralasN13',1,357,1119,38,50,0,-3677.85,2192.02,79.5813,5.92325,'1922:0 1924:0 1929:0 '),
+(1926,'FeralasN14',1,357,1119,38,50,0,-3902.37,1958.83,79.7325,5.2537,'1922:0 1927:0 1931:0 '),
+(1927,'FeralasN15',1,357,1115,38,50,0,-3845.14,1829.16,124.075,1.98644,'1926:0 131:0 '),
+(1928,'FeralasN16',1,357,1115,38,50,0,-3896.35,1647.85,117.592,4.8178,'131:0 '),
+(1929,'FeralasN17',1,357,1119,38,50,0,-3899.54,2080.79,120.315,0.496151,'1925:0 1930:0 '),
+(1930,'FeralasN18',1,357,1119,38,50,0,-4106.11,2126.23,91.7704,5.83686,'1929:0 1931:0 1932:0 '),
+(1931,'FeralasN19',1,357,1119,38,50,0,-4171.24,2101.97,88.0788,0.490217,'1926:0 1930:0 1943:0 '),
+(1932,'FeralasCoast1',1,357,1108,38,50,0,-4118.28,2330.97,2.19033,5.05932,'1930:0 1933:0 1935:0 '),
+(1933,'FeralasCoast2',1,357,1108,38,50,0,-4052.79,2718.62,0.6784,4.75105,'1932:0 1934:0 1939:0 '),
+(1934,'FeralasCoast3',1,357,1108,38,50,0,-3843.41,3064.54,7.61114,4.17574,'1933:0 '),
+(1935,'FeralasCoast4',1,357,1108,38,50,0,-4379.47,2356.68,-0.331094,5.57371,'1932:0 1936:0 1937:0 1939:0 1944:0 '),
+(1936,'FeralasCoast5',1,357,1108,38,50,0,-4743.36,2004.49,5.62754,0.704225,'1935:0 1937:0 1950:0 '),
+(1937,'FeralasCoast6',1,357,1108,38,50,0,-4901.88,2189.77,1.21295,5.78972,'1935:0 1936:0 1938:0 '),
+(1938,'FeralasCoast7',1,357,1108,38,50,0,-5436.32,2245.93,4.15669,6.02534,'1937:0 '),
+(1939,'FeathermoonCoast',1,357,1116,38,50,2,-4396.44,3096.49,-0.543116,1.686,'58:0 1933:0 1935:0 '),
+(1940,'SardorIsle1',1,357,1117,38,50,2,-4874.91,3238.84,9.84719,0.996823,'58:0 132:0 1941:0 '),
+(1941,'SardorIsle2',1,357,1120,38,50,2,-4509.12,3541.55,19.5222,3.63969,'58:0 132:0 1940:0 '),
+(1942,'ShalzarusLairInside',1,357,3117,38,50,0,-5628.12,3481.23,0.291859,1.03412,'140:0 '),
+(1943,'FeralasC1',1,357,1108,38,50,0,-4354.27,2114.61,65.9115,3.94793,'1931:0 1944:0 '),
+(1944,'FeralasC2',1,357,1108,38,50,0,-4459.61,2051.49,45.6382,0.749398,'1935:0 1943:0 1945:0 '),
+(1945,'FeralasC3',1,357,1108,38,50,0,-4587.74,2020.12,49.7424,0.107333,'1944:0 1946:0 '),
+(1946,'FeralasC4',1,357,1108,38,50,0,-4669.12,1941.38,71.209,4.65283,'1945:0 1947:0 '),
+(1947,'FeralasC5',1,357,1136,38,50,0,-4689.38,1793.15,92.5165,3.59252,'1946:0 1948:0 1951:0 '),
+(1948,'FeralasC6',1,357,1136,38,50,0,-4548.77,1825.47,91.6009,4.86489,'1947:0 1949:0 '),
+(1949,'FeralasC7',1,357,2577,38,50,0,-4570.42,1333.99,110.276,1.57406,'1948:0 1952:0 1966:0 '),
+(1950,'FeralasC8',1,357,1136,38,50,0,-4774.62,1706.39,79.0617,1.25399,'1936:0 1951:0 '),
+(1951,'FeralasC9',1,357,1136,38,50,0,-4747.41,1601.96,83.6922,1.48372,'1947:0 1950:0 1952:0 1953:0 '),
+(1952,'FeralasC10',1,357,1136,38,50,0,-4850.91,1315.71,81.0286,0.264391,'1949:0 1951:0 1966:0 '),
+(1953,'FeralasC11',1,357,1105,38,50,0,-4984.77,1575.59,59.7078,0.164254,'1951:0 1954:0 1956:0 1964:0 '),
+(1954,'FeralasC12',1,357,1105,38,50,0,-4932.88,1723.53,64.1127,4.66263,'1953:0 1955:0 '),
+(1955,'FeralasC13',1,357,1105,38,50,0,-5149.79,1759.34,78.4796,0.706951,'1954:0 '),
+(1956,'FeralasC14',1,357,1136,38,50,0,-5121.12,1597.3,62.6844,6.11245,'1953:0 1957:0 1964:0 '),
+(1957,'FeralasC15',1,357,1136,38,50,0,-5312.41,1586.43,50.2301,2.5919,'1956:0 1958:0 1961:0 1964:0 '),
+(1958,'FeralasC16',1,357,1106,38,50,0,-5747.35,1698.84,93.4873,6.16546,'1957:0 1959:0 '),
+(1959,'FeralasC17',1,357,2522,38,50,0,-5765.25,1224.11,66.4458,1.50412,'1958:0 1960:0 '),
+(1960,'FeralasC18',1,357,2522,38,50,0,-5550.63,1116.69,56.7549,0.496841,'1959:0 1961:0 '),
+(1961,'FeralasC19',1,357,2522,38,50,0,-5461.46,1368.9,22.0332,4.46507,'1957:0 1960:0 1962:0 1964:0 '),
+(1962,'FeralasC20',1,357,2522,38,50,0,-5595.89,1373.16,54.1263,3.31838,'1961:0 1963:0 '),
+(1963,'FeralasC21',1,357,2522,38,50,0,-5687.79,1413.51,73.2559,3.3773,'1962:0 '),
+(1964,'FeralasC22',1,357,2522,38,50,0,-5109.82,1250.83,51.7218,2.34252,'1953:0 1956:0 1957:0 1961:0 1965:0 '),
+(1965,'FeralasC23',1,357,2522,38,50,0,-4947.18,1144.74,76.4718,2.43362,'1964:0 1966:0 '),
+(1966,'FeralasC24',1,357,1136,38,50,0,-4819.41,1182.67,88.2722,1.88973,'1949:0 1952:0 1965:0 1967:0 '),
+(1967,'FeralasC25',1,357,2521,38,50,0,-4850.75,1054.39,94.6178,1.13575,'1966:0 1968:0 '),
+(1968,'FeralasC26',1,357,357,38,50,0,-4701.43,1002.11,106.384,2.81258,'1967:0 1969:0 1972:0 '),
+(1969,'FeralasC27',1,357,357,38,50,0,-4686.71,913.041,90.3337,1.80138,'1968:0 1970:0 '),
+(1970,'FeralasC28',1,357,357,38,50,0,-4641.48,856.356,83.6012,2.41398,'1969:0 1971:0 '),
+(1971,'FeralasC29',1,357,357,38,50,0,-4679.42,716.437,75.2356,1.09647,'1970:0 1974:0 1981:0 '),
+(1972,'FeralasC30',1,357,357,38,50,0,-4555.72,884.281,58.0988,3.21115,'1968:0 1973:0 '),
+(1973,'FeralasC31',1,357,357,38,50,0,-4505.93,684.371,66.7637,1.78171,'1972:0 1974:0 1975:0 1976:0 '),
+(1974,'FeralasE1',1,357,357,38,50,0,-4659.39,623.64,52.4147,4.96061,'1971:0 1973:0 1975:0 1978:0 2006:0 '),
+(1975,'FeralasE2',1,357,357,38,50,0,-4635.27,542.675,37.1032,1.8524,'1973:0 1974:0 1976:0 1981:0 1993:0 1994:0 1995:0 '),
+(1976,'FeralasE3',1,357,357,38,50,0,-4390.02,604.52,62.0106,2.9598,'1973:0 1975:0 1977:0 1995:0 2006:0 '),
+(1977,'FeralasE4',1,357,1100,38,50,0,-4212.24,655.545,69.8097,3.6706,'1976:0 2005:0 2006:0 '),
+(1978,'FeralasE5',1,357,2519,38,50,0,-4898.74,674.126,43.55,1.02185,'1974:0 1979:0 1981:0 1982:0 '),
+(1979,'FeralasE6',1,357,2519,38,50,0,-4953.5,761.759,82.878,5.39652,'1978:0 1980:0 '),
+(1980,'FeralasE7',1,357,2520,38,50,0,-4845.02,785.634,113.891,1.35172,'1979:0 178:0 '),
+(1981,'FeralasE8',1,357,2519,38,50,0,-4880.52,558.22,12.8999,1.88775,'1971:0 1975:0 1978:0 1993:0 1994:0 '),
+(1982,'FeralasE9',1,357,2519,38,50,0,-5149.35,692.713,54.9213,6.26831,'1978:0 1983:0 1994:0 '),
+(1983,'FeralasE10',1,357,1101,38,50,0,-5319.6,478.232,53.9695,0.898155,'1982:0 1984:0 1994:0 '),
+(1984,'FeralasE11',1,357,1101,38,50,0,-5163.07,220.677,54.4074,1.30064,'1983:0 1985:0 1986:0 1987:0 1988:0 1991:0 '),
+(1985,'FeralasE12',1,357,1101,38,50,0,-5302,428.292,8.41442,3.73933,'1984:0 '),
+(1986,'FeralasE13',1,357,1101,38,50,0,-5384.3,261.887,20.4496,0.905996,'1984:0 '),
+(1987,'FeralasE14',1,357,1101,38,50,0,-5265.18,-4.42852,15.1479,1.56377,'1984:0 '),
+(1988,'FeralasE15',1,357,1101,38,50,0,-5343.63,67.4607,28.7204,3.66077,'1984:0 1989:0 1990:0 '),
+(1989,'FeralasE16',1,357,1101,38,50,0,-5450.99,119.201,27.5633,6.28204,'1988:0 '),
+(1990,'FeralasE17',1,357,1101,38,50,0,-5340.47,-23.1596,18.5077,1.41062,'1988:0 '),
+(1991,'FeralasE18',1,357,2519,38,50,0,-4991.17,205.185,56.0523,2.62992,'1984:0 136:0 1992:0 1994:0 '),
+(1992,'FeralasE19',1,357,1137,38,50,0,-4866.29,339.413,26.1994,4.53453,'136:0 1991:0 1993:0 1994:0 1999:0 '),
+(1993,'FeralasE20',1,357,357,38,50,0,-4722.79,464.496,31.986,3.94744,'1975:0 1981:0 1992:0 '),
+(1994,'FeralasE21',1,357,2519,38,50,0,-5009.99,424.997,15.1355,0.648747,'1975:0 1981:0 1982:0 1983:0 1991:0 1992:0 '),
+(1995,'FeralasE22',1,357,357,38,50,4,-4578.16,370.868,33.8808,1.77815,'1975:0 1976:0 53:0 2006:0 '),
+(1996,'FeralasE23',1,357,1099,38,50,5,-4481.74,227.782,48.3927,0.264285,'53:0 '),
+(1997,'FeralasE24',1,357,1099,38,50,4,-4376.3,121.922,32.6793,1.76165,'53:0 1998:0 '),
+(1998,'FeralasE25',1,357,1137,38,50,4,-4328.21,-19.6833,60.5124,1.72631,'1997:0 2003:0 '),
+(1999,'FeralasE26',1,357,357,38,50,0,-4659.2,184.738,43.8095,4.93936,'1992:0 2000:0 '),
+(2000,'FeralasE27',1,357,357,38,50,0,-4603.74,66.3705,89.2353,5.28101,'1999:0 2001:0 '),
+(2001,'FeralasE28',1,357,357,38,50,0,-4564.62,-31.7688,90.9571,1.80758,'2000:0 2002:0 '),
+(2002,'FeralasE29',1,357,357,38,50,0,-4446.96,-44.7766,57.3336,5.9427,'2001:0 2003:0 2009:0 '),
+(2003,'FeralasE30',1,357,1137,38,50,0,-4300.16,-85.5649,62.2238,2.29256,'1998:0 2002:0 2004:0 2007:0 2008:0 '),
+(2004,'FeralasE31',1,357,2518,38,50,0,-4205.65,113.809,55.5058,4.08129,'2003:0 2006:0 137:0 '),
+(2005,'FeralasE32',1,357,1100,38,50,0,-4133.72,537.891,69.2153,3.29981,'1977:0 2006:0 '),
+(2006,'FeralasE33',1,357,357,38,50,0,-4279.19,459.305,53.0559,3.87904,'1974:0 1976:0 1977:0 1995:0 2004:0 2005:0 137:0 '),
+(2007,'FeralasE34',1,357,1137,38,50,0,-4106.63,-81.3584,57.9545,3.10739,'2003:0 137:0 2008:0 '),
+(2008,'FeralasE35',1,357,1137,38,50,0,-4234.2,-193.867,59.9266,1.9823,'2003:0 2007:0 2010:0 2017:0 '),
+(2009,'FeralasE36',1,357,1137,38,50,0,-4457.62,-347.118,42.7385,1.56603,'2002:0 2010:0 2013:0 '),
+(2010,'FeralasE37',1,357,1137,38,50,0,-4279.38,-302.439,53.8359,3.38225,'2008:0 2009:0 2011:0 '),
+(2011,'FeralasE38',1,357,1137,38,50,0,-4304.01,-380.254,42.9873,1.37949,'2010:0 2012:0 '),
+(2012,'FeralasE39',1,357,1137,38,50,0,-4323.94,-518.378,18.8016,1.66222,'2011:0 2013:0 2015:0 '),
+(2013,'FeralasE40',1,357,1137,38,50,0,-4484.94,-528.383,12.6689,1.34413,'2009:0 2012:0 2014:0 '),
+(2014,'FeralasE41',1,357,1137,38,50,0,-4483.85,-680.591,-13.4172,2.0451,'2013:0 40:0 2019:0 '),
+(2015,'FeralasE42',1,357,1137,38,50,0,-4357.69,-582.597,3.62467,1.18115,'2012:0 2016:0 '),
+(2016,'FeralasE43',1,357,1137,38,50,0,-4283.62,-657.145,-16.5908,4.73115,'2015:0 2019:0 '),
+(2017,'FeralasE44',1,357,1137,38,50,0,-4097.49,-507.444,10.4313,4.54463,'2008:0 2018:0 '),
+(2018,'FeralasE45',1,357,1137,38,50,0,-4189.57,-767.003,-39.6189,2.74803,'2017:0 2019:0 2023:0 '),
+(2019,'FeralasE46',1,357,1137,38,50,0,-4273.71,-763.178,-44.585,1.5287,'40:0 2014:0 2016:0 2018:0 2020:0 '),
+(2020,'ThousandNeedlesW1',1,400,400,23,35,0,-4400.82,-883.395,-57.6691,2.28464,'40:0 2019:0 2022:0 2024:0 '),
+(2021,'ThousandNeedlesW2',1,400,400,23,35,0,-4635.23,-913.058,-56.816,0.876811,'40:0 2022:0 2030:0 '),
+(2022,'ThousandNeedlesW3',1,400,400,23,35,0,-4526.31,-1003.24,-57.3019,0.841468,'2020:0 2021:0 2024:0 2025:0 '),
+(2023,'ThousandNeedlesW4',1,400,400,23,35,0,-4265.7,-975.548,-52.6163,1.36572,'2018:0 2024:0 '),
+(2024,'ThousandNeedlesW5',1,400,400,23,35,0,-4345.17,-1001.19,-55.4334,0.859138,'2020:0 2022:0 2023:0 2026:0 '),
+(2025,'ThousandNeedlesW6',1,400,400,23,35,0,-4577.79,-1063.18,-51.9676,0.682426,'2022:0 2026:0 2027:0 '),
+(2026,'ThousandNeedlesW7',1,400,480,23,35,0,-4478.86,-1145.77,-53.883,1.10654,'2024:0 2025:0 2028:0 '),
+(2027,'ThousandNeedlesW8',1,400,400,23,35,0,-4653.89,-1114.06,-54.8856,5.97601,'2025:0 2028:0 2029:0 '),
+(2028,'ThousandNeedlesW9',1,400,480,23,35,0,-4608.02,-1288.85,-51.0977,0.870926,'2026:0 2027:0 2033:0 2037:0 '),
+(2029,'ThousandNeedlesW10',1,400,400,23,35,0,-4726.44,-1099.89,-54.2582,6.07616,'2027:0 2030:0 2033:0 '),
+(2030,'ThousandNeedlesW11',1,400,400,23,35,0,-4790.74,-1025.56,-58.7304,0.476274,'2021:0 2029:0 2031:0 2058:0 '),
+(2031,'ThousandNeedlesW12',1,400,400,23,35,0,-4923.35,-1082.53,-50.209,0.562663,'2030:0 2032:0 2035:0 '),
+(2032,'ThousandNeedlesW13',1,400,400,23,35,0,-4838.39,-1191.4,-49.6151,2.08829,'2031:0 2033:0 2034:0 '),
+(2033,'ThousandNeedlesW14',1,400,400,23,35,0,-4768.1,-1216.56,-52.8083,3.08574,'2028:0 2029:0 2032:0 2036:0 '),
+(2034,'ThousandNeedlesW15',1,400,400,23,35,0,-4942.46,-1263.31,-48.5414,1.36768,'2032:0 2035:0 50:0 '),
+(2035,'ThousandNeedlesW16',1,400,400,23,35,0,-5066.47,-1194.08,-55.537,0.71973,'2031:0 2034:0 2039:0 '),
+(2036,'ThousandNeedlesW17',1,400,400,23,35,0,-4769.77,-1352.68,-49.836,1.52869,'50:0 2033:0 2037:0 2040:0 '),
+(2037,'ThousandNeedlesW18',1,400,400,23,35,0,-4652.8,-1464.98,-50.872,2.47901,'2028:0 2036:0 2041:0 2043:0 '),
+(2038,'ThousandNeedlesW19',1,400,400,23,35,0,-5074.73,-1410.96,-52.2312,0.222955,'50:0 2039:0 2048:0 '),
+(2039,'ThousandNeedlesW20',1,400,400,23,35,0,-5194.18,-1406.79,-50.3763,0.764877,'2035:0 2038:0 2050:0 '),
+(2040,'ThousandNeedlesW21',1,400,400,23,35,0,-4891.87,-1456.05,-51.236,1.07118,'50:0 2036:0 2042:0 2048:0 '),
+(2041,'ThousandNeedlesW22',1,400,400,23,35,0,-4757,-1501.21,-28.7948,0.370198,'2037:0 2042:0 '),
+(2042,'ThousandNeedlesW23',1,400,400,23,35,0,-4811.64,-1556.31,-50.0359,0.963171,'2040:0 2041:0 2043:0 2046:0 '),
+(2043,'ThousandNeedlesW24',1,400,400,23,35,0,-4661.22,-1624.56,-25.4573,1.73482,'2037:0 2042:0 2044:0 '),
+(2044,'ThousandNeedlesW25',1,400,400,23,35,0,-4624.13,-1730.14,-31.5621,1.85852,'2043:0 2045:0 '),
+(2045,'ThousandNeedlesW26',1,400,485,23,35,0,-4691.02,-1824.75,-56.5207,1.01619,'2044:0 2047:0 2081:0 '),
+(2046,'ThousandNeedlesW27',1,400,400,23,35,0,-4811.86,-1670.4,-51.0873,1.72892,'2042:0 2047:0 2052:0 '),
+(2047,'ThousandNeedlesW28',1,400,2097,23,35,0,-4783.23,-1788.72,-49.3172,1.42261,'2045:0 2046:0 2051:0 '),
+(2048,'ThousandNeedlesW29',1,400,400,23,35,0,-4982.42,-1560.83,-47.125,1.17787,'2038:0 2040:0 2049:0 2052:0 '),
+(2049,'ThousandNeedlesW30',1,400,400,23,35,0,-5165.39,-1577.56,-54.4116,0.343386,'2048:0 2050:0 2054:0 '),
+(2050,'ThousandNeedlesW31',1,400,483,23,35,0,-5295.65,-1509.76,-56.4121,0.573119,'2039:0 2049:0 2055:0 '),
+(2051,'ThousandNeedlesW32',1,400,2097,23,35,0,-4855.93,-1831.87,-51.9183,1.28194,'2047:0 2052:0 2079:0 2080:0 '),
+(2052,'ThousandNeedlesW33',1,400,400,23,35,0,-4969.52,-1717.69,-61.5435,1.6491,'2046:0 2048:0 2051:0 2053:0 '),
+(2053,'ThousandNeedlesW34',1,400,400,23,35,0,-5061.47,-1763.65,-66.1325,0.36653,'2052:0 2054:0 2068:0 '),
+(2054,'ThousandNeedlesW35',1,400,400,23,35,0,-5173.45,-1717.17,-61.8311,6.25112,'2049:0 2053:0 2055:0 2086:0 2087:0 '),
+(2055,'ThousandNeedlesW36',1,400,483,23,35,0,-5372.83,-1603.26,-55.6282,0.975215,'2050:0 2054:0 2056:0 2087:0 2088:0 '),
+(2056,'ThousandNeedlesW37',1,400,483,23,35,0,-5472.25,-1702.35,2.75952,1.04984,'2055:0 116:0 '),
+(2057,'ThousandNeedlesW38',1,400,487,23,35,0,-5593.3,-1588.57,6.36415,0.366532,'116:0 '),
+(2058,'ThousandNeedlesW39',1,400,482,23,35,0,-4950.58,-1058.58,-14.0026,1.23243,'2030:0 2059:0 '),
+(2059,'ThousandNeedlesW40',1,400,482,23,35,0,-4980.25,-980.015,-4.94507,5.09659,'2058:0 2060:0 2062:0 2061:0 '),
+(2060,'ThousandNeedlesW41',1,400,482,23,35,0,-4876.43,-922.254,-5.58887,3.87725,'2059:0 2062:0 2061:0 '),
+(2061,'ThousandNeedlesW42',1,400,482,23,35,0,-5005.39,-842.193,-5.46968,5.01411,'2059:0 2060:0 2062:0 '),
+(2062,'ThousandNeedlesW43',1,400,482,23,35,0,-5051.17,-927.317,-5.60775,4.14232,'2059:0 2060:0 2061:0 2063:0 2064:0 '),
+(2063,'ThousandNeedlesW44',1,400,482,23,35,0,-5166.88,-896.379,-5.07889,5.92361,'2062:0 '),
+(2064,'ThousandNeedlesW45',1,400,482,23,35,0,-5091.13,-1008.99,-5.23615,3.78733,'2062:0 2065:0 '),
+(2065,'ThousandNeedlesW46',1,400,482,23,35,0,-5126.17,-1095.6,50.5447,1.11501,'2064:0 2066:0 '),
+(2066,'ThousandNeedlesW47',1,400,482,23,35,0,-5191.66,-1142.08,49.8328,4.3371,'2065:0 2067:0 '),
+(2067,'ThousandNeedlesW48',1,400,482,23,35,0,-5186.85,-1242.42,53.7882,2.36968,'2066:0 '),
+(2068,'DarkcloudPinnacle1',1,400,2097,23,35,0,-5005.12,-1890.45,3.66479,1.83561,'2053:0 2069:0 '),
+(2069,'DarkcloudPinnacle2',1,400,2097,23,35,0,-4901.08,-1867.77,34.9781,3.58507,'2068:0 2070:0 '),
+(2070,'DarkcloudPinnacle3',1,400,2097,23,35,0,-4776.06,-1872.74,90.3879,3.04316,'2069:0 2071:0 '),
+(2071,'DarkcloudPinnacle4',1,400,2097,23,35,0,-4876.74,-1978.26,91.8746,0.720343,'2070:0 2072:0 115:0 '),
+(2072,'DarkcloudPinnacle5',1,400,2097,23,35,0,-4915.54,-2071.05,84.7897,4.93989,'2071:0 2073:0 2076:0 '),
+(2073,'DarkcloudPinnacle6',1,400,2097,23,35,0,-4831.42,-2151.41,81.6488,1.60588,'2072:0 2074:0 2075:0 '),
+(2074,'DarkcloudPinnacle7',1,400,2097,23,35,0,-4748.26,-2111.8,83.523,4.04415,'2073:0 '),
+(2075,'DarkcloudPinnacle8',1,400,400,23,35,0,-4842.57,-2213.19,85.1857,5.94087,'2073:0 '),
+(2076,'DarkcloudPinnacle9',1,400,2097,23,35,0,-5016.1,-2107.74,83.8605,6.28252,'2072:0 '),
+(2077,'DarkcloudPinnacle10',1,400,2097,23,35,0,-5170.08,-2145.09,93.7072,3.77318,'115:0 '),
+(2078,'DarkcloudPinnacle11',1,400,2097,23,35,0,-4921.47,-1843.98,80.8273,3.6318,'115:0 '),
+(2079,'ThousandNeedlesC1',1,400,2097,23,35,0,-4970.93,-1895.26,-42.399,2.08851,'2051:0 2080:0 '),
+(2080,'ThousandNeedlesC2',1,400,2097,23,35,0,-4870.6,-1904.88,-51.5857,2.74235,'2051:0 2079:0 2082:0 '),
+(2081,'ThousandNeedlesC3',1,400,2097,23,35,0,-4709.18,-1916.95,-45.1441,1.27365,'2045:0 2082:0 '),
+(2082,'ThousandNeedlesC4',1,400,2097,23,35,0,-4776.72,-1989.22,-60.8744,1.12639,'2080:0 2081:0 2083:0 '),
+(2083,'ThousandNeedlesC5',1,400,2097,23,35,0,-4881.01,-2128.55,-44.1711,3.78849,'2082:0 2084:0 '),
+(2084,'ThousandNeedlesC6',1,400,481,23,35,0,-5057.5,-2264.52,-53.5104,0.73918,'2083:0 2085:0 2094:0 119:0 '),
+(2085,'ThousandNeedlesC7',1,400,2097,23,35,0,-5086.72,-2103.07,-39.7408,4.73175,'2084:0 2086:0 '),
+(2086,'ThousandNeedlesC8',1,400,400,23,35,0,-5241.22,-1991.69,-60.4397,4.88884,'2054:0 2085:0 2090:0 2094:0 '),
+(2087,'ThousandNeedlesC9',1,400,483,23,35,0,-5343.03,-1806.64,-52.2102,0.525945,'2054:0 2055:0 2089:0 '),
+(2088,'ThousandNeedlesC10',1,400,483,23,35,0,-5473.39,-1743.1,-18.0835,0.979516,'2055:0 2089:0 '),
+(2089,'ThousandNeedlesC11',1,400,483,23,35,0,-5533.01,-1878.93,-58.2063,1.19746,'2087:0 2088:0 2090:0 2092:0 '),
+(2090,'ThousandNeedlesC12',1,400,400,23,35,0,-5432.97,-2043.66,-64.7738,6.26721,'2086:0 2089:0 2091:0 '),
+(2091,'ThousandNeedlesC13',1,400,400,23,35,0,-5465.16,-2122.43,-60.3274,1.03645,'2090:0 2092:0 2095:0 '),
+(2092,'ThousandNeedlesC14',1,400,400,23,35,0,-5599.58,-2073.33,-64.8276,0.983438,'2089:0 2091:0 2093:0 '),
+(2093,'ThousandNeedlesC15',1,400,400,23,35,0,-5667.81,-2212.47,-58.1306,1.11303,'2092:0 2096:0 2106:0 '),
+(2094,'ThousandNeedlesC16',1,400,400,23,35,0,-5287.5,-2195.62,-54.0753,0.741926,'2084:0 2086:0 2095:0 2097:0 119:0 '),
+(2095,'ThousandNeedlesC17',1,400,400,23,35,0,-5426.32,-2213.81,-58.3051,6.2613,'2091:0 2094:0 2096:0 2097:0 '),
+(2096,'ThousandNeedlesC18',1,400,400,23,35,0,-5522.8,-2260.72,-59.6581,0.457222,'2093:0 2095:0 2098:0 '),
+(2097,'ThousandNeedlesC19',1,400,400,23,35,0,-5326.39,-2315.08,-42.353,1.99266,'2094:0 2095:0 2098:0 2110:0 '),
+(2098,'ThousandNeedlesC20',1,400,484,23,35,4,-5535.61,-2362.59,-50.5979,1.14639,'2096:0 2097:0 2099:0 2107:0 '),
+(2099,'ThousandNeedlesC21',1,400,484,23,35,4,-5649.75,-2375.72,2.56609,6.22399,'2098:0 2100:0 '),
+(2100,'ThousandNeedlesC22',1,400,484,23,35,4,-5656.57,-2454.18,0.642997,4.88096,'2099:0 2101:0 '),
+(2101,'ThousandNeedlesC23',1,400,484,23,35,4,-5604.75,-2490.4,30.4679,0.258887,'2100:0 2102:0 '),
+(2102,'ThousandNeedlesC24',1,400,484,23,35,4,-5527.14,-2463.43,30.6774,2.88172,'2101:0 2103:0 '),
+(2103,'ThousandNeedlesC25',1,400,484,23,35,4,-5474.04,-2382.59,57.2742,4.1305,'2102:0 2104:0 '),
+(2104,'ThousandNeedlesC26',1,400,484,23,35,4,-5424.92,-2272.98,82.5255,4.55855,'2103:0 41:0 '),
+(2105,'ThousandNeedlesC27',1,400,484,23,35,5,-5477.21,-2454.4,89.2838,1.45228,'41:0 '),
+(2106,'ThousandNeedlesC28',1,400,400,23,35,0,-5735.44,-2408.6,-53.3532,0.767009,'2093:0 2107:0 2108:0 '),
+(2107,'ThousandNeedlesC29',1,400,484,23,35,0,-5587.73,-2442.35,-50.4618,1.40318,'2098:0 2106:0 2109:0 '),
+(2108,'ThousandNeedlesC30',1,400,400,23,35,0,-5685.83,-2597.38,-56.0596,2.12378,'2106:0 2109:0 2119:0 '),
+(2109,'ThousandNeedlesC31',1,400,484,23,35,0,-5520.25,-2555.03,-56.5953,1.46797,'2107:0 2108:0 2111:0 2118:0 '),
+(2110,'ThousandNeedlesC32',1,400,484,23,35,0,-5309.22,-2432.88,-43.4182,2.04524,'2097:0 2111:0 2112:0 '),
+(2111,'ThousandNeedlesC33',1,400,400,23,35,4,-5357.57,-2551.14,-55.4342,1.46403,'2109:0 2110:0 2113:0 2115:0 '),
+(2112,'ThousandNeedlesC34',1,400,400,23,35,0,-5163.1,-2464.2,-52.5964,1.02224,'119:0 2110:0 2113:0 '),
+(2113,'ThousandNeedlesC35',1,400,400,23,35,0,-5168.45,-2584.79,-50.393,1.73498,'2111:0 2112:0 2114:0 '),
+(2114,'ThousandNeedlesC36',1,400,400,23,35,0,-5206.18,-2701.85,-49.9805,1.80567,'2113:0 2115:0 2116:0 '),
+(2115,'ThousandNeedlesC37',1,400,400,23,35,0,-5338.74,-2645.97,-45.5587,1.67019,'2111:0 2114:0 2117:0 '),
+(2116,'ThousandNeedlesC38',1,400,2303,23,35,0,-5338.36,-2841.96,-55.7141,1.17145,'2114:0 2117:0 2120:0 2123:0 '),
+(2117,'ThousandNeedlesC39',1,400,400,23,35,0,-5400.44,-2696.1,-41.6368,5.12985,'2115:0 2116:0 2118:0 '),
+(2118,'ThousandNeedlesC40',1,400,400,23,35,0,-5508.15,-2681.27,-49.789,6.27849,'2109:0 2117:0 2119:0 '),
+(2119,'ThousandNeedlesC41',1,400,400,23,35,0,-5557.86,-2761.38,-53.7029,2.24548,'2108:0 2118:0 2121:0 '),
+(2120,'ThousandNeedlesC42',1,400,2303,23,35,0,-5427.21,-2905.53,-56.1528,0.737522,'2116:0 2121:0 2122:0 '),
+(2121,'ThousandNeedlesC43',1,400,400,23,35,0,-5557.61,-2850.74,-55.2145,1.22644,'2119:0 2120:0 2124:0 '),
+(2122,'ThousandNeedlesC44',1,400,2303,23,35,0,-5449.75,-3008,-48.4049,1.26768,'2120:0 2123:0 2125:0 '),
+(2123,'ThousandNeedlesC45',1,400,2303,23,35,0,-5324.57,-3065.64,-49.0275,2.62249,'2116:0 2122:0 2127:0 '),
+(2124,'ThousandNeedlesC46',1,400,400,23,35,0,-5623.73,-2943.53,-50.4623,1.05563,'2121:0 2125:0 2126:0 '),
+(2125,'ThousandNeedlesC47',1,400,400,23,35,0,-5602.92,-3056.82,-51.9701,1.71732,'2122:0 2124:0 2126:0 2130:0 '),
+(2126,'ThousandNeedlesC48',1,400,400,23,35,0,-5718.6,-3126.82,-37.7719,1.04973,'2124:0 2125:0 2131:0 '),
+(2127,'ThousandNeedlesC49',1,400,400,23,35,0,-5328.41,-3207.34,-47.4244,5.04348,'2123:0 2128:0 2129:0 '),
+(2128,'ThousandNeedlesC50',1,400,400,23,35,0,-5464.87,-3276.04,-34.1317,0.525478,'2127:0 2129:0 2130:0 '),
+(2129,'ThousandNeedlesC51',1,400,400,23,35,0,-5455.25,-3387.53,-41.6009,1.22056,'2127:0 2128:0 2132:0 '),
+(2130,'ThousandNeedlesC52',1,400,400,23,35,0,-5569.49,-3268.7,-44.3082,1.72125,'2125:0 2128:0 2131:0 2133:0 '),
+(2131,'ThousandNeedlesC53',1,400,400,23,35,0,-5740.95,-3216.87,-41.218,1.17932,'2126:0 2130:0 121:0 '),
+(2132,'ThousandNeedlesC54',1,400,439,23,35,0,-5553.99,-3514.19,-56.2254,0.918174,'2129:0 2133:0 2134:0 '),
+(2133,'ThousandNeedlesC55',1,400,439,23,35,0,-5650.38,-3490.29,-57.2333,1.16557,'121:0 2130:0 2132:0 122:0 2134:0 '),
+(2134,'ThousandNeedlesE1',1,400,2240,23,35,0,-5619.93,-3820.34,-58.7494,1.7723,'121:0 122:0 2132:0 2133:0 2135:0 2136:0 '),
+(2135,'ThousandNeedlesE2',1,400,439,23,35,0,-5645.47,-4214.99,-58.7498,1.71339,'2134:0 2136:0 '),
+(2136,'ThousandNeedlesE3',1,400,2240,23,35,0,-5936.34,-4266.6,-58.7493,0.65899,'122:0 2134:0 2135:0 117:0 2137:0 '),
+(2137,'ThousandNeedlesE4',1,400,2240,23,35,0,-6405.27,-4240.86,-58.749,0.861231,'117:0 123:0 2136:0 '),
+(2138,'ThousandNeedlesE5',1,400,439,23,35,0,-6173.94,-3567.25,-58.7497,5.13183,'117:0 118:0 121:0 122:0 123:0 '),
+(2139,'ThousandNeedlesE6',1,400,439,23,35,0,-6638.63,-3654.02,-58.7493,0.631484,'118:0 2141:0 '),
+(2140,'ThousandNeedlesE7',1,400,439,23,35,0,-6660.6,-3797.14,-58.5293,2.97002,'123:0 2141:0 '),
+(2141,'ThousandNeedlesE8',1,400,439,23,35,0,-6820.59,-3759.56,21.2097,1.72713,'2139:0 2140:0 2142:0 '),
+(2142,'TanarisExitN1',1,440,440,38,50,0,-6890.93,-3772.75,52.9557,0.201496,'2141:0 2143:0 '),
+(2143,'TanarisExitN2',1,440,440,38,50,0,-6952.74,-3716.92,43.1345,3.42359,'2142:0 2144:0 2145:0 '),
+(2144,'GadgetzanH1',1,440,976,38,50,5,-7047.86,-3764.87,11.4018,3.75207,'2143:0 52:0 2147:0 2148:0 2149:0 2166:0 '),
+(2145,'GadgetzanA1',1,440,976,38,50,2,-7182.58,-3638.57,11.2417,5.95314,'2143:0 2146:0 2165:0 2166:0 '),
+(2146,'GadgetzanA2',1,440,976,38,50,3,-7232.4,-3740.53,8.47838,5.52708,'2145:0 52:0 2147:0 2148:0 2165:0 2166:0 '),
+(2147,'GadgetzanS',1,440,976,38,50,1,-7160.74,-3844,8.72832,1.31539,'52:0 2144:0 2146:0 '),
+(2148,'Tanaris1',1,440,440,38,50,0,-7236.3,-4040.94,11.0963,1.40179,'2144:0 2146:0 2149:0 2150:0 2158:0 2161:0 2165:0 '),
+(2149,'Tanaris2',1,440,1937,38,50,0,-7012.17,-4180.07,10.8027,2.40318,'2144:0 2148:0 2150:0 2151:0 2152:0 '),
+(2150,'Tanaris3',1,440,440,38,50,0,-7183.44,-4321.24,9.48149,1.28398,'2148:0 2149:0 2151:0 2152:0 2157:0 2158:0 '),
+(2151,'Tanaris4',1,440,1937,38,50,0,-6915.38,-4366.17,11.3936,2.18522,'2149:0 2150:0 2152:0 '),
+(2152,'Tanaris5',1,440,440,38,50,0,-7083.47,-4512.85,8.48356,1.53726,'2149:0 2150:0 2151:0 2153:0 2157:0 2158:0 '),
+(2153,'Tanaris6',1,440,977,38,50,0,-6965.03,-4691.43,8.43736,2.08705,'2152:0 2154:0 2155:0 2156:0 2157:0 '),
+(2154,'Tanaris7',1,440,977,38,50,0,-6745.21,-4852.73,0.167925,2.76838,'2153:0 2155:0 '),
+(2155,'Tanaris8',1,440,977,38,50,0,-6936.98,-4872.05,0.71439,1.89659,'2153:0 2154:0 2156:0 '),
+(2156,'Tanaris9',1,440,988,38,50,0,-7135.69,-4833.99,0.699453,1.36644,'2153:0 2155:0 2157:0 '),
+(2157,'Tanaris10',1,440,985,38,50,0,-7326.32,-4666.64,8.78219,0.194235,'2150:0 2152:0 2153:0 2156:0 2158:0 113:0 '),
+(2158,'Tanaris11',1,440,985,38,50,0,-7455.84,-4410.59,11.5646,0.58301,'2148:0 2150:0 2152:0 2157:0 113:0 2160:0 2161:0 '),
+(2159,'Tanaris12',1,440,988,40,50,0,-7777.85,-4943.31,6.30343,4.78293,'113:0 2160:0 2210:0 '),
+(2160,'Tanaris13',1,440,985,38,50,0,-7765.82,-4633.67,11.3435,5.2954,'113:0 2158:0 2159:0 2161:0 2162:0 '),
+(2161,'Tanaris14',1,440,1938,38,50,0,-7816.44,-4067.72,9.39531,5.57225,'2148:0 2158:0 2160:0 2162:0 2163:0 2164:0 2165:0 '),
+(2162,'Tanaris15',1,440,440,40,50,0,-8124.61,-4381.44,10.6814,6.10827,'2160:0 2161:0 2163:0 2206:0 '),
+(2163,'Tanaris16',1,440,440,40,50,0,-8211.49,-4018.52,10.2243,5.89032,'2161:0 2162:0 2164:0 2205:0 2209:0 '),
+(2164,'Tanaris17',1,440,1938,38,50,0,-7957.98,-3774.76,42.6206,4.73579,'2161:0 2163:0 2165:0 2173:0 '),
+(2165,'Tanaris18',1,440,440,38,50,0,-7532.17,-3671.41,9.08631,5.75681,'2145:0 2146:0 2148:0 2161:0 2164:0 2166:0 2172:0 2173:0 '),
+(2166,'Tanaris19',1,440,440,38,50,0,-7149.95,-3429.64,10.9479,4.73187,'2144:0 2145:0 2146:0 2165:0 2167:0 2170:0 2172:0 '),
+(2167,'Tanaris20',1,440,979,38,50,0,-6944.47,-3147.06,30.6034,1.0405,'2166:0 2168:0 2169:0 2170:0 '),
+(2168,'Tanaris21',1,440,978,38,50,0,-6847.43,-2908.93,8.88901,4.55712,'2167:0 2169:0 2170:0 '),
+(2169,'Tanaris22',1,440,979,38,50,0,-6994.4,-2790.52,8.87793,5.49763,'2167:0 2168:0 2170:0 2171:0 '),
+(2170,'Tanaris23',1,440,979,38,50,0,-7181.29,-3008.99,31.1598,2.12434,'2166:0 2167:0 2168:0 2169:0 2171:0 2172:0 '),
+(2171,'Tanaris24',1,440,982,40,50,0,-7405.37,-2656.15,12.3269,5.64056,'2169:0 2170:0 2172:0 2174:0 2175:0 '),
+(2172,'Tanaris25',1,440,979,38,50,0,-7432.96,-3165.88,11.6881,0.195781,'2165:0 2166:0 2170:0 2171:0 2173:0 2174:0 '),
+(2173,'Tanaris26',1,440,1939,38,50,0,-7856.78,-3289.98,68.7512,5.401,'2164:0 2165:0 2172:0 2174:0 2184:0 2187:0 '),
+(2174,'Tanaris27',1,440,982,40,50,0,-7689.14,-2835.54,14.0257,3.79487,'2171:0 2172:0 2173:0 2175:0 2179:0 2182:0 2184:0 '),
+(2175,'Tanaris28',1,440,982,44,55,0,-7757.78,-2516.52,8.85209,5.79567,'2171:0 2174:0 2176:0 2177:0 2178:0 2179:0 2183:0 '),
+(2176,'Tanaris29',1,440,982,38,50,0,-7885.89,-2645.63,-56.7571,1.76264,'2175:0 '),
+(2177,'Tanaris30',1,440,982,38,50,0,-7691.97,-2600,-56.5855,2.87594,'2175:0 '),
+(2178,'Tanaris31',1,440,982,38,50,0,-7867.56,-2503.34,-45.915,6.01951,'2175:0 '),
+(2179,'Tanaris32',1,440,982,44,55,0,-8024.98,-2496.1,4.7767,5.76032,'2174:0 2175:0 2180:0 2181:0 2182:0 '),
+(2180,'Tanaris33',1,440,982,38,50,0,-7961.12,-2608.77,-51.3402,2.94075,'2181:0 2179:0 '),
+(2181,'Tanaris34',1,440,982,38,50,0,-7948.03,-2388.48,-27.27,2.48522,'2180:0 2179:0 '),
+(2182,'Tanaris35',1,440,982,44,55,0,-8192.63,-2678.87,9.10516,6.208,'2174:0 2179:0 2183:0 2185:0 '),
+(2183,'Tanaris36',1,440,982,40,50,0,-8237.94,-2283.21,9.47101,5.21841,'2175:0 2182:0 2188:0 2189:0 2190:0 '),
+(2184,'Tanaris37',1,440,1939,40,50,0,-8080.23,-2940.32,41.1249,5.97434,'2173:0 2174:0 2185:0 2186:0 2187:0 '),
+(2185,'Tanaris38',1,440,983,40,50,0,-8463.57,-2772.2,16.342,6.04503,'2182:0 2184:0 2186:0 2187:0 2190:0 '),
+(2186,'Tanaris39',1,440,983,40,50,0,-8572.13,-2989.04,10.5515,0.775002,'2184:0 2185:0 2187:0 2190:0 2194:0 2196:0 '),
+(2187,'Tanaris40',1,440,983,40,50,0,-8349.72,-3161.78,10.5974,1.38762,'2173:0 2184:0 2185:0 2186:0 '),
+(2188,'Tanaris41',1,440,440,44,55,0,-8568.73,-2090.66,8.81721,5.96256,'2183:0 2189:0 2220:0 '),
+(2189,'Tanaris42',1,440,980,44,55,0,-8728.04,-2264.78,8.87691,0.109387,'2183:0 2188:0 2190:0 2191:0 2192:0 '),
+(2190,'Tanaris43',1,440,440,40,50,0,-8780.75,-2536.53,12.5632,1.2757,'2183:0 2185:0 2186:0 2189:0 2192:0 2194:0 '),
+(2191,'Tanaris44',1,440,980,44,55,0,-9113.86,-2138.28,14.5526,5.80156,'2189:0 2192:0 '),
+(2192,'Tanaris45',1,440,440,44,55,0,-9078.5,-2368.44,15.1243,6.03129,'2189:0 2190:0 2191:0 2193:0 2194:0 '),
+(2193,'Tanaris46',1,440,440,40,50,0,-9394.76,-2441.52,12.341,0.162396,'2192:0 114:0 2194:0 '),
+(2194,'Tanaris47',1,440,992,40,50,0,-9166,-2942.59,27.3153,4.4055,'114:0 2186:0 2190:0 2192:0 2193:0 2195:0 2196:0 '),
+(2195,'Tanaris48',1,440,992,40,50,0,-9259.98,-3213.55,17.6595,1.63894,'114:0 2194:0 2196:0 2197:0 2198:0 '),
+(2196,'Tanaris49',1,440,984,40,50,0,-8891.65,-3316.57,17.9459,2.09054,'2186:0 2194:0 2195:0 2197:0 2198:0 '),
+(2197,'Tanaris50',1,440,981,44,55,0,-8891.37,-3634.86,9.8928,2.97216,'2195:0 2196:0 2198:0 2199:0 2204:0 2205:0 '),
+(2198,'Tanaris51',1,440,440,40,50,0,-9376.51,-3525.65,10.4557,1.04009,'2195:0 2196:0 2197:0 2199:0 '),
+(2199,'Tanaris52',1,440,981,44,55,0,-9238.88,-3842.23,16.1398,6.21782,'2197:0 2198:0 2200:0 2201:0 2204:0 '),
+(2200,'Tanaris53',1,440,981,44,55,0,-9122.46,-4119.91,14.5657,1.92562,'2199:0 2202:0 2203:0 2204:0 '),
+(2201,'Tanaris54',1,440,981,38,50,0,-9448.09,-4056.48,-45.7265,1.70179,'2199:0 '),
+(2202,'Tanaris55',1,440,981,38,50,0,-9058.94,-4138.03,-30.5429,1.76658,'2200:0 '),
+(2203,'Tanaris56',1,440,981,38,50,0,-9239.16,-3990.68,-38.2526,5.54632,'2200:0 '),
+(2204,'Tanaris57',1,440,981,44,55,0,-8846.97,-4120.67,11.0961,2.09647,'2197:0 2199:0 2200:0 2205:0 2209:0 '),
+(2205,'Tanaris58',1,440,440,40,50,0,-8582.56,-3848.15,27.4666,3.85733,'2163:0 2197:0 2204:0 2209:0 '),
+(2206,'Tanaris59',1,440,440,40,50,0,-8436.38,-4485.59,9.98615,0.059917,'2162:0 2207:0 2209:0 '),
+(2207,'Tanaris60',1,440,1940,44,50,0,-8543.26,-4792.62,0.74885,2.08624,'2206:0 2208:0 2371:0 '),
+(2208,'Tanaris61',1,440,1940,44,50,0,-8731.47,-4651.05,6.22094,6.04857,'2207:0 2209:0 '),
+(2209,'Tanaris62',1,440,981,40,50,0,-8636.73,-4274.81,14.2733,1.53645,'2163:0 2204:0 2205:0 2206:0 2208:0 '),
+(2210,'Tanaris63',1,440,1336,40,50,0,-7834.45,-5044.24,4.58704,0.700017,'2159:0 2211:0 '),
+(2211,'Tanaris64',1,440,1336,40,50,0,-7869.58,-5185.77,0.738081,3.22506,'2210:0 2212:0 2213:0 2215:0 '),
+(2212,'Tanaris65',1,440,1336,40,50,0,-8043.72,-5139.25,11.1577,5.95236,'2211:0 '),
+(2213,'Tanaris66',1,440,1336,40,50,0,-7985.53,-5405.09,1.12058,1.11823,'2211:0 2214:0 2215:0 2216:0 '),
+(2214,'Tanaris67',1,440,1336,40,50,0,-7957.94,-5481.79,0.207866,2.5025,'2213:0 '),
+(2215,'Tanaris68',1,440,1336,40,50,0,-7979.86,-5272.84,0.574685,0.762833,'2211:0 2213:0 2216:0 2217:0 2218:0 2219:0 '),
+(2216,'Tanaris69',1,440,1336,40,50,0,-8057.83,-5349.53,19.8843,5.57338,'2213:0 2215:0 '),
+(2217,'Tanaris70',1,440,1336,40,50,0,-8101.51,-5296.31,2.11654,0.146278,'2215:0 '),
+(2218,'Tanaris71',1,440,1336,40,50,0,-8088.86,-5238.43,1.94444,6.18206,'2215:0 '),
+(2219,'Tanaris72',1,440,1336,40,50,0,-8005.83,-5204.31,4.73672,1.59535,'2215:0 '),
+(2220,'TanarisExitSW',1,440,440,44,55,0,-8243.03,-2079.74,-95.586,0.052021,'2188:0 2221:0 '),
+(2221,'Ungoro1',1,490,490,44,56,0,-8066.01,-2098.76,-168.295,6.18792,'2220:0 2222:0 '),
+(2222,'Ungoro2',1,490,490,44,56,0,-7916.41,-2142.07,-238.077,0.49967,'2221:0 2223:0 '),
+(2223,'Ungoro3',1,490,490,44,56,0,-7864.72,-2099.17,-266.094,3.40762,'2222:0 2224:0 2260:0 '),
+(2224,'Ungoro4',1,490,1942,44,56,0,-7934.33,-2040.71,-267.978,5.68527,'2223:0 2225:0 '),
+(2225,'Ungoro5',1,490,1942,44,56,0,-7884.5,-1843.96,-274.777,4.70158,'2224:0 2226:0 2260:0 2261:0 '),
+(2226,'Ungoro6',1,490,540,46,56,0,-8088.18,-1491.28,-269.655,5.9268,'2225:0 2227:0 2228:0 2261:0 '),
+(2227,'Ungoro7',1,490,490,46,56,0,-8249.65,-1584.9,-198.819,0.538974,'2226:0 2229:0 '),
+(2228,'Ungoro8',1,490,540,46,56,0,-8064.8,-1172.37,-270.687,4.96077,'2226:0 2229:0 2232:0 '),
+(2229,'Ungoro9',1,490,540,46,56,0,-7866.69,-1345.21,-274.102,2.63992,'2227:0 2228:0 2230:0 2231:0 2232:0 2261:0 2262:0 2265:0 '),
+(2230,'Ungoro10',1,490,490,46,56,0,-7978.25,-1085.08,-328.506,4.68783,'2229:0 '),
+(2231,'Ungoro11',1,490,540,46,56,0,-8110.2,-1212.13,-336.702,6.17813,'2229:0 '),
+(2232,'Ungoro12',1,490,539,48,56,0,-7862.94,-1011.26,-266.988,4.49344,'2228:0 2229:0 2233:0 2234:0 2262:0 '),
+(2233,'Ungoro13',1,490,539,48,56,0,-7893.05,-604.125,-260.044,4.74085,'2232:0 2234:0 2235:0 '),
+(2234,'Ungoro14',1,490,539,48,56,0,-7779.84,-752.864,-268.32,4.3658,'2232:0 2233:0 2235:0 2262:0 2263:0 '),
+(2235,'Ungoro15',1,490,543,48,56,0,-7516.02,-568.085,-272.224,3.45867,'2233:0 2234:0 2236:0 2240:0 2263:0 '),
+(2236,'Ungoro16',1,490,543,48,56,0,-7357.96,-423.47,-270.864,3.80227,'2235:0 2237:0 2238:0 '),
+(2237,'Ungoro17',1,490,543,48,56,0,-7453.5,-224.428,-202.131,5.11585,'2236:0 '),
+(2238,'Ungoro18',1,490,543,48,56,0,-7065.02,-412.024,-271.337,3.13271,'2236:0 2239:0 2240:0 '),
+(2239,'Ungoro19',1,490,490,48,56,0,-6942.78,-227.898,-200.477,4.11643,'2238:0 '),
+(2240,'Ungoro20',1,490,543,48,56,0,-7057.61,-568.049,-272.117,3.13074,'2235:0 2238:0 2241:0 2273:0 2275:0 '),
+(2241,'Ungoro21',1,490,490,46,56,0,-6819.88,-500.077,-273.734,4.04377,'2240:0 2242:0 2273:0 '),
+(2242,'Ungoro22',1,490,490,46,56,0,-6621.16,-628.631,-271.06,2.65557,'2241:0 2243:0 2273:0 2289:0 '),
+(2243,'Ungoro23',1,490,490,46,56,0,-6516.77,-714.125,-272.04,4.8802,'2242:0 2244:0 2271:0 '),
+(2244,'Ungoro24',1,490,538,46,56,0,-6357.05,-1044.55,-271.024,2.01939,'2243:0 2245:0 2247:0 '),
+(2245,'Ungoro25',1,490,541,46,56,0,-6247.33,-1096.9,-216.374,2.3198,'111:0 2244:0 2246:0 '),
+(2246,'Ungoro26',1,490,541,46,56,0,-6263.44,-1146.22,-245.676,0.70581,'111:0 2245:0 2247:0 '),
+(2247,'Ungoro27',1,490,538,46,56,0,-6307.92,-1177.22,-269.521,1.78377,'2244:0 2246:0 2248:0 '),
+(2248,'Ungoro28',1,490,538,46,56,0,-6416.8,-1325.76,-272.118,0.908046,'2247:0 2249:0 2270:0 2271:0 '),
+(2249,'Ungoro29',1,490,538,46,56,0,-6394.87,-1511.09,-269.907,1.76217,'2248:0 112:0 2251:0 2269:0 2270:0 2271:0 '),
+(2250,'Ungoro30',1,490,542,46,56,0,-6359.08,-1992.29,-276.383,1.21435,'112:0 '),
+(2251,'Ungoro31',1,490,538,46,56,0,-6575.48,-1808.43,-271.11,0.413242,'112:0 2249:0 2252:0 2253:0 2269:0 2270:0 '),
+(2252,'Ungoro32',1,490,490,46,56,0,-6527.29,-2027.48,-271.963,1.5501,'2251:0 2253:0 '),
+(2253,'Ungoro33',1,490,490,46,56,0,-6834.73,-2083.14,-267.953,0.248293,'2251:0 2252:0 2254:0 2267:0 2269:0 '),
+(2254,'Ungoro34',1,490,1942,46,56,0,-7068.84,-2256.36,-271.191,0.560497,'2253:0 2255:0 2256:0 2267:0 '),
+(2255,'Ungoro35',1,490,1943,46,56,0,-6944.44,-2436.79,-201.566,2.1097,'2254:0 '),
+(2256,'Ungoro36',1,490,1942,46,56,0,-7266.48,-2293,-268.44,0.00677204,'2254:0 2257:0 '),
+(2257,'Ungoro37',1,490,1942,44,56,0,-7476.48,-2263.22,-266.534,5.76177,'2256:0 2258:0 2259:0 '),
+(2258,'Ungoro38',1,490,1942,46,56,0,-7419.79,-2422.73,-214.477,1.54419,'2257:0 '),
+(2259,'Ungoro39',1,490,1942,44,56,0,-7613.45,-2129.98,-272.086,5.58506,'2257:0 2260:0 2266:0 '),
+(2260,'Ungoro40',1,490,1942,44,56,0,-7787.58,-1962.82,-272.166,5.62628,'2223:0 2225:0 2259:0 2261:0 2266:0 '),
+(2261,'Ungoro41',1,490,1942,46,56,0,-7685.24,-1654.69,-272.216,4.29698,'2225:0 2226:0 2229:0 2260:0 2265:0 2266:0 '),
+(2262,'Ungoro42',1,490,490,48,56,0,-7724.44,-1062.81,-269.408,1.8701,'2229:0 2232:0 2234:0 2263:0 2264:0 '),
+(2263,'Ungoro43',1,490,539,48,56,0,-7524.61,-811.974,-269.097,2.63781,'2234:0 2235:0 2262:0 2264:0 2276:0 '),
+(2264,'Ungoro44',1,490,490,46,56,0,-7536.49,-1136.09,-271.668,2.21958,'2262:0 2263:0 2265:0 2276:0 '),
+(2265,'Ungoro45',1,490,490,46,56,0,-7540.94,-1440.28,-272.37,1.75227,'2229:0 2261:0 2264:0 2268:0 '),
+(2266,'Ungoro46',1,490,1942,44,56,0,-7481.25,-1864.35,-272.185,3.61563,'2259:0 2260:0 2261:0 2267:0 '),
+(2267,'Ungoro47',1,490,1942,46,56,0,-7196.2,-1804.18,-272.191,4.61501,'2253:0 2254:0 2266:0 2268:0 '),
+(2268,'Ungoro48',1,490,537,46,56,0,-7052.38,-1597.57,-270.962,3.20599,'2265:0 2267:0 2269:0 2270:0 2272:0 2279:0 2280:0 '),
+(2269,'Ungoro49',1,490,538,46,56,0,-6864.28,-1691.91,-271.236,0.290198,'2249:0 2251:0 2253:0 2268:0 2270:0 '),
+(2270,'Ungoro50',1,490,538,46,56,0,-6742.71,-1481.45,-270.728,0.152749,'2248:0 2249:0 2251:0 2268:0 2269:0 2271:0 2272:0 '),
+(2271,'Ungoro51',1,490,538,46,56,0,-6687.22,-1202.84,-270.132,5.43062,'2243:0 2248:0 2249:0 2270:0 2272:0 2274:0 2275:0 '),
+(2272,'Ungoro52',1,490,537,48,56,0,-6971.9,-1359.19,-272.023,5.74869,'2268:0 2270:0 2271:0 2280:0 '),
+(2273,'Ungoro53',1,490,490,46,56,0,-6905.86,-744.591,-271.912,1.82168,'2240:0 2241:0 2242:0 2274:0 2275:0 '),
+(2274,'Ungoro54',1,490,490,46,56,0,-6713.26,-889.582,-269.981,2.47553,'2271:0 2273:0 2275:0 '),
+(2275,'Ungoro55',1,490,490,46,56,0,-7071.75,-971.188,-268.921,1.5625,'2240:0 2271:0 2273:0 2274:0 2276:0 '),
+(2276,'Ungoro56',1,490,537,48,56,0,-7262.04,-1142.55,-256.214,3.05082,'2263:0 2264:0 2275:0 2277:0 '),
+(2277,'Ungoro57',1,490,537,48,56,0,-7276.34,-1237.12,-242.301,0.11537,'2276:0 2278:0 2286:0 '),
+(2278,'Ungoro58',1,490,537,48,56,0,-7196.58,-1221.48,-206.377,2.70522,'2277:0 '),
+(2279,'Ungoro59',1,490,537,48,56,0,-7139.11,-1460.35,-240.441,5.44625,'2268:0 '),
+(2280,'Ungoro60',1,490,537,48,56,0,-6995.92,-1426.86,-263.362,1.61744,'2268:0 2272:0 2281:0 '),
+(2281,'Ungoro61',1,490,537,48,56,0,-7087.82,-1424.62,-235.604,0.254778,'2280:0 2282:0 '),
+(2282,'Ungoro62',1,490,537,48,56,0,-7094.67,-1371.27,-215.077,4.51555,'2281:0 2283:0 '),
+(2283,'Ungoro63',1,490,537,48,56,0,-7151.31,-1318.52,-184.389,0.761355,'2282:0 2284:0 2285:0 '),
+(2284,'Ungoro64',1,490,537,48,56,0,-7093.52,-1298.11,-185.557,3.52203,'2283:0 '),
+(2285,'Ungoro65',1,490,537,48,56,0,-7193.59,-1360.95,-184.286,6.25914,'2283:0 '),
+(2286,'Ungoro66',1,490,537,48,56,0,-7288.45,-1306.18,-240.621,1.48982,'2277:0 2287:0 '),
+(2287,'Ungoro67',1,490,537,48,56,0,-7220.03,-1431,-231.915,2.60313,'2286:0 2288:0 '),
+(2288,'Ungoro68',1,490,537,48,56,0,-7328.61,-1466.63,-241.155,0.211588,'2287:0 '),
+(2289,'Ungoro69',1,490,490,50,56,0,-6487.3,-527.418,-240.618,3.68697,'2242:0 2290:0 '),
+(2290,'Ungoro70',1,490,490,50,56,0,-6221.83,-588.48,-118.307,2.76414,'2289:0 2291:0 '),
+(2291,'Ungoro71',1,490,490,50,56,0,-6222.04,-471.141,-64.8223,4.41936,'2290:0 2292:0 '),
+(2292,'Silithus1',1,1377,1377,50,60,0,-6290.28,-372.309,-0.180207,5.29035,'2291:0 184:0 '),
+(2293,'Silithus2',1,1377,1377,50,60,0,-6723.42,16.99,1.33043,2.60703,'184:0 2294:0 2295:0 2296:0 '),
+(2294,'Silithus3',1,1377,2738,50,60,0,-7058.45,311.497,7.73577,5.31076,'2293:0 2295:0 2304:0 2350:0 2351:0 2352:0 2353:0 '),
+(2295,'Silithus4',1,1377,1377,50,60,0,-6775.62,325.939,7.96733,4.88272,'191:0 2293:0 2294:0 2296:0 2304:0 2350:0 '),
+(2296,'Silithus5',1,1377,1377,53,60,0,-6480.77,427.825,2.85797,3.86957,'191:0 2293:0 2295:0 2299:0 2304:0 2311:0 '),
+(2297,'Silithus6',1,1377,3446,53,60,0,-6249.14,4.14336,6.27956,4.62356,'191:0 2298:0 '),
+(2298,'Silithus7',1,1377,3446,53,60,0,-6303.03,23.7784,-8.51367,4.98288,'2297:0 '),
+(2299,'Silithus8',1,1377,1377,53,60,0,-6325.77,679.48,7.83164,4.56898,'191:0 2296:0 2300:0 2304:0 2311:0 '),
+(2300,'Silithus9',1,1377,2742,53,60,0,-6512.68,1140.49,5.52295,5.13838,'2299:0 2301:0 2311:0 2317:0 2322:0 2323:0 '),
+(2301,'Silithus10',1,1377,2742,53,60,0,-6376.67,1003.32,-29.6361,5.81971,'2300:0 2302:0 2303:0 '),
+(2302,'Silithus11',1,1377,2742,53,60,0,-6233.34,982.199,-44.8168,2.95104,'2301:0 2303:0 '),
+(2303,'Silithus12',1,1377,2742,53,60,0,-6264.39,1180.37,-17.4845,2.70757,'2301:0 2302:0 '),
+(2304,'Silithus13',1,1377,3425,50,60,0,-6806.63,645.151,14.4502,4.36084,'2294:0 2295:0 2296:0 2299:0 2305:0 2350:0 2351:0 '),
+(2305,'Silithus14',1,1377,3425,53,60,0,-6809.1,722.467,39.8123,2.17349,'2304:0 2306:0 188:0 '),
+(2306,'Silithus15',1,1377,3425,53,60,0,-6835.28,767.676,43.3803,5.14818,'2305:0 188:0 2307:0 2308:0 2309:0 2310:0 '),
+(2307,'Silithus16',1,1377,3425,53,60,5,-6754.01,823.51,57.2677,3.58719,'2306:0 '),
+(2308,'Silithus17',1,1377,3425,53,60,1,-6739.83,766.866,128.438,3.03271,'2306:0 '),
+(2309,'Silithus18',1,1377,3425,53,60,0,-6767.97,869.849,23.6798,5.43995,'2306:0 2310:0 2311:0 '),
+(2310,'Silithus19',1,1377,3425,53,60,0,-6882.21,862.037,35.6652,6.05845,'2306:0 2309:0 2323:0 '),
+(2311,'Silithus20',1,1377,2742,53,60,0,-6689.89,843.881,1.63418,4.68008,'2296:0 2299:0 2300:0 2309:0 2312:0 2313:0 '),
+(2312,'Silithus21',1,1377,2742,53,60,0,-6610.39,1133.65,-47.8484,4.53085,'2311:0 '),
+(2313,'Silithus22',1,1377,2742,53,60,0,-6560.42,848.396,-19.7968,5.5872,'2311:0 2314:0 2315:0 2316:0 '),
+(2314,'Silithus23',1,1377,2742,53,60,0,-6485.94,926.037,-42.1164,4.07923,'2313:0 '),
+(2315,'Silithus24',1,1377,2742,53,60,0,-6592.71,755.859,-52.6973,0.303426,'2313:0 '),
+(2316,'Silithus25',1,1377,2742,53,60,0,-6626.24,951.29,-53.3026,5.44387,'2313:0 '),
+(2317,'Silithus26',1,1377,2742,53,60,0,-6416.82,1332.7,1.61694,4.0223,'2300:0 2318:0 2322:0 '),
+(2318,'Silithus27',1,1377,2740,53,60,0,-6260.69,1633.49,6.1983,4.14011,'2317:0 2319:0 133:0 '),
+(2319,'Silithus28',1,1377,1377,53,60,0,-6412.61,1879.6,4.97151,5.48313,'2318:0 133:0 2320:0 134:0 '),
+(2320,'Silithus29',1,1377,1377,53,60,0,-6709.78,1906.69,5.58306,6.01956,'2319:0 2321:0 134:0 '),
+(2321,'Silithus30',1,1377,2743,53,60,0,-6952.45,1684.29,2.49135,0.649405,'2320:0 134:0 2322:0 2325:0 '),
+(2322,'Silithus31',1,1377,1377,53,60,0,-6798.69,1359.48,2.84112,2.99187,'134:0 189:0 2300:0 2317:0 2321:0 2325:0 '),
+(2323,'Silithus32',1,1377,1377,53,60,0,-6935.53,933.15,20.0826,5.50711,'177:0 189:0 2300:0 2310:0 2324:0 2351:0 '),
+(2324,'Silithus33',1,1377,1377,53,60,0,-7170.32,969.526,1.6856,0.846154,'177:0 189:0 2323:0 2335:0 2343:0 '),
+(2325,'Silithus34',1,1377,2743,55,60,0,-7102.06,1490.93,6.9342,0.374927,'189:0 2321:0 2322:0 2326:0 '),
+(2326,'Silithus35',1,1377,2743,55,60,0,-7227.39,1476.62,-3.4765,1.83774,'2325:0 2327:0 2335:0 2336:0 '),
+(2327,'Silithus36',1,1377,2743,55,60,0,-7304.89,1624.78,-30.4609,5.43684,'2326:0 2328:0 2329:0 2330:0 '),
+(2328,'Silithus37',1,1377,2743,55,60,0,-7466.84,1605.7,-50.256,4.1959,'2327:0 2331:0 '),
+(2329,'Silithus38',1,1377,2743,55,60,0,-7434.92,1813.75,-46.5685,5.83934,'2327:0 2332:0 '),
+(2330,'Silithus39',1,1377,2743,55,60,0,-7246.4,1714.88,-63.0024,4.43346,'2327:0 2333:0 2334:0 '),
+(2331,'Silithus40',1,1377,1377,53,60,0,-7396.76,1242.93,-84.3036,3.00401,'2328:0 '),
+(2332,'Silithus41',1,1377,2743,53,60,0,-7611.96,1707.51,-36.9118,0.00770472,'2329:0 '),
+(2333,'Silithus42',1,1377,2743,53,60,0,-7390.74,1717.46,-92.9352,5.54673,'2330:0 '),
+(2334,'Silithus43',1,1377,2743,53,60,0,-7320.18,1835.39,-90.5829,0.977671,'2330:0 '),
+(2335,'Silithus44',1,1377,1377,53,60,0,-7395.86,1200.83,3.1343,6.21237,'177:0 189:0 2324:0 2326:0 2336:0 2341:0 2342:0 2343:0 '),
+(2336,'Silithus45',1,1377,2743,53,60,0,-7467.85,1375.97,4.32407,0.317961,'2326:0 2335:0 135:0 2337:0 2341:0 2342:0 '),
+(2337,'Silithus46',1,1377,1377,53,60,0,-7741.83,1415.69,0.628408,1.87894,'135:0 2336:0 2338:0 2339:0 2340:0 '),
+(2338,'Silithus47',1,1377,1377,53,60,0,-7929.26,1491.4,-6.62955,0.141247,'135:0 2337:0 2339:0 '),
+(2339,'Silithus48',1,1377,1377,53,60,0,-7951.61,1381.21,2.92482,0.094128,'193:0 2337:0 2338:0 2340:0 '),
+(2340,'Silithus49',1,1377,1377,53,60,0,-7884.95,1305.55,-9.32275,1.92018,'193:0 2337:0 2339:0 2341:0 '),
+(2341,'Silithus50',1,1377,1377,53,60,0,-7724.06,1121.13,1.90701,2.14991,'193:0 2335:0 2336:0 2340:0 2342:0 2347:0 '),
+(2342,'Silithus51',1,1377,1377,53,60,0,-7614.56,1040.35,4.34335,2.37375,'2335:0 2336:0 2341:0 2343:0 2347:0 2348:0 '),
+(2343,'Silithus52',1,1377,1377,53,60,0,-7446.46,1011.04,1.56245,2.60898,'177:0 2324:0 2335:0 2342:0 2348:0 '),
+(2344,'Silithus53',1,1377,3427,53,60,0,-8071.74,1080.25,7.69378,0.464863,'193:0 2345:0 '),
+(2345,'Silithus54',1,1377,1377,55,60,0,-8049.18,988.938,42.0219,2.43622,'2344:0 '),
+(2346,'Silithus55',1,1377,2744,55,60,0,-8023.11,662.371,-12.5444,1.51572,'193:0 2359:0 '),
+(2347,'Silithus56',1,1377,2744,53,60,0,-7855.36,863.831,-4.99768,1.56248,'193:0 2341:0 2342:0 2348:0 '),
+(2348,'Silithus57',1,1377,1377,53,60,0,-7512.58,878.283,-2.19269,1.08534,'177:0 2342:0 2343:0 2347:0 2349:0 2350:0 '),
+(2349,'Silithus58',1,1377,1377,53,60,0,-7412.18,577.662,-7.35207,4.30862,'177:0 2348:0 2355:0 2357:0 192:0 2359:0 '),
+(2350,'Silithus59',1,1377,1377,53,60,0,-7177.07,574.409,1.58818,2.04744,'177:0 2294:0 2295:0 2304:0 2348:0 2351:0 2352:0 2355:0 '),
+(2351,'Silithus60',1,1377,3097,53,60,0,-6922.48,666.906,11.4539,0.176223,'2294:0 2304:0 2323:0 2350:0 '),
+(2352,'Silithus61',1,1377,2738,50,60,0,-7078.09,417.604,8.20627,4.43703,'2294:0 2350:0 2353:0 '),
+(2353,'Silithus62',1,1377,2738,50,60,0,-7146.41,350.222,26.2951,0.0509645,'2294:0 2352:0 2354:0 2356:0 '),
+(2354,'Silithus63',1,1377,2738,50,60,0,-7259.78,328.568,47.9494,0.00187492,'2353:0 2356:0 2357:0 '),
+(2355,'Silithus64',1,1377,2738,50,60,0,-7283.42,473.511,11.4843,5.52991,'2349:0 2350:0 2356:0 2357:0 '),
+(2356,'Silithus65',1,1377,2738,50,60,0,-7183.12,437.593,64.3972,4.38322,'2353:0 2354:0 2355:0 '),
+(2357,'Silithus66',1,1377,2738,50,60,0,-7342.29,338.615,9.9245,1.29662,'2349:0 2354:0 2355:0 192:0 '),
+(2358,'Silithus67',1,1377,2744,53,60,0,-7815.08,208.412,5.58908,6.15627,'192:0 '),
+(2359,'Silithus68',1,1377,2744,55,60,0,-7734.1,629.157,-47.1739,6.08166,'2349:0 2360:0 2361:0 2346:0 '),
+(2360,'Silithus69',1,1377,2744,55,60,0,-7803.61,427.995,-36.2971,1.11402,'2359:0 2361:0 2362:0 '),
+(2361,'Silithus70',1,1377,2744,55,60,0,-7937.51,488.881,-34.8964,5.632,'2359:0 2360:0 2365:0 2366:0 '),
+(2362,'Silithus71',1,1377,2744,55,60,0,-7860.7,346.797,-48.3413,1.79141,'2360:0 2363:0 2364:0 '),
+(2363,'Silithus72',1,1377,2744,53,60,0,-7708.29,262.213,-42.7965,5.31941,'2362:0 '),
+(2364,'Silithus73',1,1377,2744,53,60,0,-7678.37,284.795,-37.2732,5.97131,'2362:0 '),
+(2365,'Silithus74',1,1377,1377,53,60,0,-8294.16,376.133,-94.7165,0.44759,'2361:0 '),
+(2366,'Silithus75',1,1377,2744,53,60,0,-8140.13,753.793,-85.1582,5.97285,'2361:0 2367:0 '),
+(2367,'Silithus76',1,1377,1377,53,60,0,-8313.26,729.325,-74.3037,4.85955,'2366:0 '),
+(2368,'AltarOfStorms2',0,46,255,48,56,1,-7605.65,-798.145,190.852,3.45765,'635:0 '),
+(2369,'Darrowshire',0,139,2262,53,60,1,1416.41,-3653.3,82.0183,4.38389,'230:0 '),
+(2370,'BLS4H',0,4,72,43,54,5,-11896.1,-3084.13,31.0889,0.713907,'855:0 '),
+(2371,'TanarisSpawnAll',1,440,1940,44,50,1,-8319.94,-5071.72,4.11589,2.25351,'2207:0 ');
+--
+DELETE FROM `creature_template_npcbot_wander_nodes` WHERE `id` IN (2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395);
+INSERT INTO `creature_template_npcbot_wander_nodes`(`id`,`name`,`mapid`,`zoneid`,`areaid`,`minlevel`,`maxlevel`,`flags`,`x`,`y`,`z`,`o`,`links`) VALUES
+(2372,'WarsongGulchSpawnA1',489,3277,4571,10,80,59,1523.81,1481.76,351.992,3.14159,'2373:0 2375:0 2378:0 2377:0 '),
+(2373,'WarsongGulchAInside1',489,3277,3321,10,80,0,1488.03,1463.62,362.472,1.46358,'2372:0 2374:0 2379:0 '),
+(2374,'WarsongGulchAInside2',489,3277,4571,10,80,32,1530.85,1468.31,362.665,3.14825,'2372:0 2373:0 '),
+(2375,'WarsongGulchAInside3',489,3277,3321,10,80,0,1471.13,1454.77,342.795,6.27608,'2372:0 2376:0 2380:0 '),
+(2376,'WarsongGulchAInside4',489,3277,3321,10,80,32,1523.32,1468.01,373.688,4.44809,'2374:0 2375:0 '),
+(2377,'WarsongGulchAInside5',489,3277,3321,10,80,0,1439.11,1574.68,343.587,5.09406,'2381:0 2383:0 2372:0 '),
+(2378,'WarsongGulchAInside6',489,3277,3321,10,80,0,1416.56,1540.82,342.735,5.58886,'2381:0 2383:0 2372:0 '),
+(2379,'WarsongGulchAInside7',489,3277,3321,10,80,0,1360.6,1392.13,326.593,5.39054,'2381:0 2382:0 2373:0 '),
+(2380,'WarsongGulchAInside8',489,3277,3321,10,80,0,1356.9,1461.83,324.512,0.0216269,'2381:0 2382:0 2383:0 2375:0 '),
+(2381,'WarsongGulchMidC1',489,3277,3277,10,80,2,1231.42,1473.79,307.813,5.82692,'2391:0 2392:0 '),
+(2382,'WarsongGulchMidE1',489,3277,3277,10,80,2,1225.27,1411.04,310.329,0.0703331,'2391:0 2392:0 '),
+(2383,'WarsongGulchMidW1',489,3277,3277,10,80,2,1195.67,1530.47,306.785,6.16029,'2391:0 2392:0 '),
+(2384,'WarsongGulchSpawnH1',489,3277,4572,10,80,61,929.191,1434.63,345.536,0.0577507,'2385:0 2387:0 2390:0 2389:0 '),
+(2385,'WarsongGulchHInside1',489,3277,3320,10,80,0,965.729,1453.27,356.269,4.75445,'2384:0 2391:0 2386:0 '),
+(2386,'WarsongGulchHInside2',489,3277,4572,10,80,32,925.907,1451.62,355.856,5.79629,'2384:0 2385:0 '),
+(2387,'WarsongGulchHInside3',489,3277,3320,10,80,0,982.314,1463.02,335.964,1.72006,'2384:0 2392:0 2388:0 '),
+(2388,'WarsongGulchHInside4',489,3277,3320,10,80,32,931.381,1448.91,367.604,1.1742,'2386:0 2387:0 '),
+(2389,'WarsongGulchHInside5',489,3277,3320,10,80,0,1033.59,1363.21,342.852,2.24035,'2394:0 2395:0 2384:0 '),
+(2390,'WarsongGulchHInside6',489,3277,3320,10,80,0,1060.56,1390.51,338.618,2.82356,'2394:0 2395:0 2384:0 '),
+(2391,'WarsongGulchHInside7',489,3277,3320,10,80,0,1086.1,1540.21,316.792,2.79013,'2393:0 2394:0 2385:0 '),
+(2392,'WarsongGulchHInside8',489,3277,3320,10,80,0,1119.21,1462.5,316.34,3.25941,'2393:0 2394:0 2395:0 2387:0 '),
+(2393,'WarsongGulchMidW2',489,3277,3277,10,80,4,1255.33,1511.56,309.973,3.31243,'2379:0 2380:0 '),
+(2394,'WarsongGulchMidC2',489,3277,3277,10,80,4,1217.19,1480.7,306.432,3.41258,'2379:0 2380:0 '),
+(2395,'WarsongGulchMidE2',489,3277,3277,10,80,4,1263.56,1400.5,310.369,3.07681,'2379:0 2380:0 ');
diff --git a/sql/Bot SQL/characters_bots.sql b/sql/Bot SQL/characters_bots.sql
new file mode 100644
index 0000000000000..f590d45d68ae6
--- /dev/null
+++ b/sql/Bot SQL/characters_bots.sql
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS `characters_npcbot`;
+CREATE TABLE `characters_npcbot` (
+ `entry` int(10) unsigned NOT NULL COMMENT 'creature_template.entry',
+ `owner` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'characters.guid (lowguid)',
+ `roles` smallint(5) unsigned NOT NULL COMMENT 'bitmask: tank(1),dps(2),heal(4),ranged(8)',
+ `faction` int(10) unsigned NOT NULL DEFAULT '35',
+ `equipMhEx` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipOhEx` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipRhEx` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipHead` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipShoulders` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipChest` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipWaist` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipLegs` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipFeet` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipWrist` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipHands` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipBack` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipBody` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipFinger1` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipFinger2` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipTrinket1` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipTrinket2` int(10) unsigned NOT NULL DEFAULT '0',
+ `equipNeck` int(10) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
diff --git a/sql/Bot SQL/locales/esES/npc_text_locale.sql b/sql/Bot SQL/locales/esES/npc_text_locale.sql
new file mode 100644
index 0000000000000..8e0f8b2eac8e2
--- /dev/null
+++ b/sql/Bot SQL/locales/esES/npc_text_locale.sql
@@ -0,0 +1,382 @@
+DELETE FROM `npc_text_locale` WHERE `Locale`='esES' AND `ID` BETWEEN '70000' AND '71000';
+INSERT INTO `npc_text_locale` (`ID`, `Locale`, `Text0_0`, `Text0_1`, `Text1_0`, `Text1_1`, `Text2_0`, `Text2_1`, `Text3_0`, `Text3_1`, `Text4_0`, `Text4_1`, `Text5_0`, `Text5_1`, `Text6_0`, `Text6_1`, `Text7_0`, `Text7_1`)
+VALUES
+('70001','esES','Vivo solo para servir a mi dueño.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70002','esES','¿Necesitas algo?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70003','esES','Mortales... normalmente mato a miserables como tú a la vista.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70004','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70005','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70006','esES','¿Estás sorprendido, mortal? Como nathrezim menor, tengo que recurrir a buscar aliados. Parece que podrías divertirme al menos.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70007','esES','¿Qué pasa ahora, mortal?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70008','esES','¿Puedes dejarme en paz? ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70009','esES','¿Ahora que?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70101','esES','|cffff3300Blademaster|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"An elite swordsman, former member of Burning Blade clan, now an elite fighter within the Horde".$B$BMain attribute: Agility.$B$BNetherwalk (Windwalk). Allows Blademaster to become invisible, and move faster for a set amount of time. When the Blademaster attacks a unit to break invisibility, he will deal bonus damage.$B$BMirror Image. Confuses the enemy by creating illusions of the Blademaster and dispelling all magic from the Blademaster.$B$BCritical Strike (passive). Gives a 15% chance to deal critical x2(x3,x4) times normal damage on his attacks.$B$BBladestorm (NIY). Grants immunity to magic and deals damage to all surrounding enemies.$B$B',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70102','esES','|cff9900ccObsidian Destroyer|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"An obsidian winged monstrocity with insatiable hunger for magic".$B$BHigh armor, very high resistances, partially immune to magic, loses mana over time and doesnt benefit from passive mana regeneration effects, mail/plate armor, dual-wielding wands, deals spellshadow damage, no physical attack, cannot attack enemies not in front while moving, spell power bonus: 50% attack power + 200% intellect + wands damage.$B$BDevour Magic. Dispels up to 2 magic effects from enemies, up to 2 magic effects and up to 2 curses from allies and damaging summoned units in 20 yards area. Every dispelled effect restores 20% mana and 5% health, 7 seconds cooldown.$B$BShadow Blast. Empowered attack that deals increased splash damage.$B$BDrain Mana. Drains all mana (limited by casters mana pool) from a random friendly unit.$B$BReplenish Mana. Energizes surrounding party and raid members within 25 yards for 2% of their maximum mana nullifying casters mana, affects up to 10 targets, 3 seconds cooldown.$B$BRegenerating Aura. Heals surrounding party and raid members within 25 yards for 3% of their maximum health nullifying casters mana, affects up to 10 targets, 3 seconds cooldown.$B$BShadow Armor (passive). Restores mana equal to a percentage of damage taken.$B$B',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70103','esES','|cff0000ddArchmage|r$b|cffdd6600-=Warcraft III tribute=-|r$B$BSpell damage taken reduced by 35%, partially immune to control effects, cloth armor, deals spellsfire/spellfrost damage, no physical attack, spell power bonus: 100% intellect. Main attribute: Intellect.$B$BBlizzard. Your typical blizzard, just a little more powerful, 6 seconds cooldown.$B$BSummon Water Elemental. Summons a water elemental to attack archmage enemies for 1 min, 20 seconds cooldown.$B$BBrilliance Aura. Increases maximum mana by 10% and greatly increases mana regeneration of party and raid members within 40 yards.$B$BMass Teleport. NIY.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70104','esES','|cff9900ccDreadlord|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"Incredibly powerful demon who wields power of darkness and mental domination".$B$BHigh armor, high resistances, partially immune to control effects, damage taken speeds up spells recharge, plate armor, deals melee/spellshadow damage, bonus damage against incapacitated targets, spell power bonus: 200% strength. Main attribute: Strength.$B$BCarrion Swarm. Sends a horde of bats combined with chaotic magic to damage enemies in a very large frontal cone, cannot crit, 10 seconds cooldown.$B$BSleep. Puts the enemy target to sleep for 60 seconds and allows next physical attack on that target to bypass armor, direct damage caused will awaken the target, 6 seconds cooldown.$B$BVampiric Aura. Increases physical critical damage by 5% and heals party and raid members within 40 yards for a percentage (100% for Dreadlord and 25% for everyone else) of damage done by melee physical attacks and Carrion Swarm, no threat.$B$BSummon Infernal Servant. Calls an infernal down from the sky dealing damage and stunning enemy units, infernal is very resistant to magic and lasts 180 seconds, 180 seconds cooldown.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70105','esES','|cff0000ddSpell Breaker|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"An elven warrior trained to disrupt and contort magical energies".$B$BSpell damage taken reduced by 75%, partially immune to control effects, armor penalty -30%, mail/plate armor, deals melee/arcane damage, spell power bonus: 200% strength. Main attribute: Strength.$B$BSteal Magic (Spellsteal). Steals a benefical spell from an enemy and applies it to a nearby ally or removes a negative spell from an ally and applies it to a nearby enemy, affects magic and curse effects, 3 seconds cooldown.$B$BFeedback (passive). Successful melee attacks burn target mana equal to damage caused (increased by spellpower) dealing arcane damage. If target is drained, Spell Breaker melee attacks will do triple damage with increased critical strike chance',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70106','esES','|cff9900ccDark Ranger|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"A former ranger of Quel thalas forcibly raised from the dead".$B$BSpell damage taken reduced by 35%, undead, partially immune to control effects, leather/cloth armor, deals physical/spellshadow damage, stick to shadows and generates no threat, spell power bonus: 50% intellect. Main attribute: Agility.$B$BSilence. Silences an enemy and up to 4 nearby targets for 8 seconds, 15 seconds cooldown.$B$BBlack Arrow. Fires a cursed arrow dealing 150% weapon damage and additional spellshadow damage over time. If affected target dies from Dark Ranger damage, Dark Minion will spawn from the corpse (maximum 5 Minions, 80 seconds duration, only works on humanoids, beasts and dragonkin). Deals five times more damage if target is under 20% health.$B$BDrain Life. Drains health from an enemy every second for 5 seconds, healing Dark Ranger for 200% of the drained amount.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70201','esES','Siempre hay tipos dispuestos a matar por dinero.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70202','esES','Estos son los bots que están disponibles en este momento: ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70203','esES','Estos son los bots que están disponibles en este momento: ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70204','esES','Parece que no hay nadie disponible en este momento, vuelve más tarde.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70300','esES','¡Muere!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70301','esES','Resucitandote',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70302','esES','Resucitando ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70303','esES','tu bot',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70304','esES',' bot',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70305','esES','Todavía no puedo crear agua',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70306','esES','Todavía no puedo crear comida',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70307','esES','No puedo hacerlo ahora',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70308','esES','Aquí tienes...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70309','esES','Desactivado',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70310','esES','No está listo todavía',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70311','esES','Tipo de objeto no válido',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70312','esES','Fallido',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70313','esES','Vale',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70314','esES','No estoy en ninguna forma',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70315','esES','No tengo piedra de salud',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70316','esES','¡Aún no puedo crear piedras de salud!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70317','esES','¡WTF, no tengo forzar cerraduras!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70318','esES','Mi nivel de habilidad no es alto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70319','esES','Cambiando mi talento a ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70320','esES','Armas',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70321','esES','Furia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70322','esES','Protección',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70323','esES','Retribución',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70324','esES','Maestro de bestias',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70325','esES','Punteria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70326','esES','Supervivencia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70327','esES','Asesinato',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70328','esES','Combate',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70329','esES','Sutileza',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70330','esES','Disciplina',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70331','esES','Sagrado',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70332','esES','Sombra',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70333','esES','Sangre',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70334','esES','Escarcha',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70335','esES','Profano',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70336','esES','Elemental',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70337','esES','Mejora',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70338','esES','Restauración',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70339','esES','Arcano',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70340','esES','Fuego',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70341','esES','Aflición',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70342','esES','Demologia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70343','esES','Destrucción',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70344','esES','Equilibrio',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70345','esES','Combate feral',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70346','esES','Unknown',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70347','esES','Vete, debilucho',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70348','esES',' no está convencido',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70349','esES','No voy a perder el tiempo en nada',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70350','esES','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70351','esES','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70352','esES','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70353','esES','Estoy listo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70354','esES','Vete, sirvo a mi dueño ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70355','esES','unknown',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70356','esES',' en ti!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70357','esES',' en mí mismo!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70358','esES',' en ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70359','esES',' usado!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70360','esES','bot tank',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70361','esES','clase',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70362','esES','jugador',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70363','esES','dueño',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70364','esES','ninguno',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70365','esES','Rango',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70366','esES','talento',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70367','esES','pasivo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70368','esES','oculto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70369','esES','conocido',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70370','esES','habilidad',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70371','esES','str',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70372','esES','agi',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70373','esES','sta',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70374','esES','int',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70375','esES','spi',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70376','esES','unk stat',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70377','esES','total',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70378','esES','Melee AP',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70379','esES','Ranged AP',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70380','esES','armadura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70381','esES','crit',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70382','esES','defensa',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70383','esES','miss',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70384','esES','evasión',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70385','esES','parry',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70386','esES','bloqueo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70387','esES','valor de bloqueo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70388','esES','Daño recibido cuerpo a cuerpo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70389','esES','Daño recibido de hechizos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70390','esES','Rango de daño mano principal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70391','esES','Daño múltiple mano principal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70392','esES','Tiempo de ataque mano principal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70393','esES','Rango de daño de mano secundaria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70394','esES','Daño múltiple mano secundaria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70395','esES','Tiempo de ataque mano secundaria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70396','esES','Rango de daño a distancia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70397','esES','Daño a distancia múltiple',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70398','esES','Tiempo de ataque a distancia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70399','esES','min',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70400','esES','max',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70401','esES','DPS',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70402','esES','base hp',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70403','esES','total hp',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70404','esES','base mana',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70405','esES','total mana',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70406','esES','mana actual',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70407','esES','poder de hechizos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70408','esES','health regen_5 bonus',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70409','esES','mana regen_5 no cast',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70410','esES','mana regen_5 casting',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70411','esES','haste',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70412','esES','hit',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70413','esES','pericia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70414','esES','penetración de armadura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70415','esES','penetración de hechizos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70416','esES','%',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70417','esES','sagrado',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70418','esES','fuego',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70419','esES','naturaleza',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70420','esES','escarcha',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70421','esES','sombra',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70422','esES','arcano',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70423','esES','Resistencia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70424','esES','Estados de comando',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70425','esES','Seguir',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70426','esES','Ataque',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70427','esES','Quédate',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70428','esES','Reiniciar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70429','esES','Parar por completo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70430','esES','Distancia de seguimiento',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70431','esES','Especificaciones',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70432','esES','Rol principal del bot',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70433','esES','Rol de recoleción del bot',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70434','esES','Muertes PvP',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70435','esES','jugadores',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70436','esES','Murió ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70437','esES',' veces',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70438','esES','%s (bot) se calma',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70439','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70440','esES','¿Estás seguro de que quieres arriesgarte a dibujar ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70441','esES',' atención?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70442','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70443','esES','Quieres atraer ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70444','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70445','esES','Quieres contratar a ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70446','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70447','esES','Administrar equipamiento...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70448','esES','Administrar rol...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70449','esES','Administrar formación...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70450','esES','Administrar habilidades...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70451','esES','Administrar talentos...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70452','esES','Dar consumibles...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70453','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70454','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70455','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70456','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70457','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70458','esES','¡Sigueme!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70459','esES','¡Mantén tu posición!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70460','esES','¡Quédate aquí, no hagas nada!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70461','esES','Necesito comida',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70462','esES','Necesito agua',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70463','esES','Necesito una mesa de refrigerios',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70464','esES','Ayúdame a abrir esta cerradura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70465','esES','Necesito una piedra de salud',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70466','esES','Necesito un pozo de alma',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70467','esES','Necesito que actualices tus venenos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70468','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70469','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70470','esES','Necesito que actualices tus encantamientos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70471','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70472','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70473','esES','Necesito que te quites el cambio de forma',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70474','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70475','esES','Despedir',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70476','esES','Despedir a ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70477','esES','Puede que te arrepientas...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70478','esES','!Tranquilizaté!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70479','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70480','esES','Nada',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70481','esES','Distancia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70482','esES','ATRÁS',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70483','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70484','esES','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70485','esES','Aleatoria (Astucia)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70486','esES','Aleatoria (Ferocidad)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70487','esES','Aleatoria (Tenacidad)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70488','esES','Muéstrame tu inventario',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70489','esES','Auto-equipar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70490','esES','Mano Principal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70491','esES','Mano Secundaria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70492','esES','A distancia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70493','esES','Reliquia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70494','esES','Cabeza',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70495','esES','Hombros',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70496','esES','Pecho',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70497','esES','Cintura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70498','esES','Piernas',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70499','esES','Pies',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70500','esES','Brazales',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70501','esES','Guantes',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70502','esES','Capa',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70503','esES','Camisa',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70504','esES','Anillo1...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70505','esES','Anillo2...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70506','esES','Abalorio1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70507','esES','Abalorio2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70508','esES','Collar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70509','esES','Desequipar todo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70510','esES','Actualizar equipamiento (Visual)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70511','esES','Solo visual',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70512','esES','Equipado',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70513','esES','nada',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70514','esES','Usa tu equipamiento antiguo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70515','esES','Desequipar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70516','esES','Mmmm... no tengo nada que darte',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70517','esES','Recolectar material',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70518','esES','Estado de las habilidades',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70519','esES','Administrar habilidades disponibles',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70520','esES','Usar ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70521','esES','Actualizar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70522','esES','Daño',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70523','esES','Control',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70524','esES','Healer',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70525','esES','Otros',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70526','esES',' hace un ruido chirriante y comienza a seguir ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70527','esES','%s no se unira a ti hasta que su dueño no lo despida.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70528','esES','%s no se unira a ti hasta que seas nivel 60',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70529','esES','%s no se unira a ti hasta que seas nivel 55',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70530','esES','%s no se unira a ti hasta que seas nivel 40',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70531','esES','%s no se unira a ti hasta que seas nivel 20',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70532','esES','Superas el número máximo de bots (%u)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70533','esES','No tienes suficiente dinero',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70534','esES','¡No puedes tener más bots de esa clase! %u de %u ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70535','esES','¡No se puede reiniciar el equipamiento en el slot %u (%s)! ¡No se puede despedir el bot!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70536','esES','actual',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70537','esES','Distancia de ataque',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70538','esES','Ataques de corto alcance',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70539','esES','Ataques de largo alcance',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70540','esES','Exacto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70541','esES','Eliminar Buff',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70542','esES','Fija tu tipo de poder',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70543','esES','¡No se puede desequipar a %s por alguna razón! Enviando por correo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70544','esES','Tank',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70545','esES','A distancia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70546','esES','Mineria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70547','esES','Herbolistaeria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70548','esES','Desollar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70549','esES','Ingeniería',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70550','esES','El contrato del bot expiró',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70551','esES','Los NPCBot están deshabilitado actualmente.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70552','esES','%s No se unira a ti, ya tiene un dueño: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70553','esES','%s no puede unirse mientras estás a punto de teletransportarte',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70554','esES','Aspecto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70555','esES','de Mono',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70556','esES','de Halcón',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70557','esES','de Guepardo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70558','esES','de Víbora',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70559','esES','de la Bestia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70560','esES','de la Manada',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70561','esES','de lo Salvaje',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70562','esES','de Dracohalcón',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70563','esES','Sin Aspecto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70564','esES','Aura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70565','esES','de Devoción',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70566','esES','de Concentración',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70567','esES','de Resistencia al fuego',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70568','esES','de Resistencia a la escarcha',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70569','esES','de Resistencia a las sombras',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70570','esES','de Reprensión',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70571','esES','de Cruzado',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70572','esES','Sin Aura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70573','esES','Veneno entorpecedor',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70574','esES','Veneno instantáneo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70575','esES','Veneno mortal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70576','esES','Veneno hiriente',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70577','esES','Veneno de aturdimiento mental',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70578','esES','Veneno anestésico',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70579','esES','Nada',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70580','esES','Lengua de fuego',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70581','esES','Estigma de escarcha',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70582','esES','Viento furioso',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70583','esES','Vida terrestre',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70584','esES','Necesito tus servicios',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70585','esES','Tienes demasiados bots',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70586','esES','Quieres contratar a ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70587','esES',' está ocupado en este momento, vuelve a intentarlo más tarde.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70588','esES','Un placer hacer negocios contigo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70589','esES','Guerreros',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70590','esES','Paladines',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70591','esES','Magos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70592','esES','Sacerdotes',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70593','esES','Brujos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70594','esES','Druidas',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70595','esES','Caballeros de la Muerte',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70596','esES','Picaros',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70597','esES','Chamanes',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70598','esES','Cazadores',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70599','esES','Blademasters',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70600','esES','Destroyers',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70601','esES','Archmagi',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70602','esES','Dreadlords',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70603','esES','Spell Breakers',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70604','esES','Dark Rangers',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70605','esES','Guerrero',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70606','esES','Paladin',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70607','esES','Mago',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70608','esES','Sacerdote',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70609','esES','Brujo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70610','esES','Druida',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70611','esES','Caballero de la Muerte',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70612','esES','Picaro',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70613','esES','Chaman',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70614','esES','Cazador',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70615','esES','Blademaster',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70616','esES','Destroyer',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70617','esES','Archmage',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70618','esES','Dreadlord',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70619','esES','Spell Breaker',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70620','esES','Dark Ranger',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70621','esES','Hombre',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70622','esES','Mujer',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70623','esES','Humano',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70624','esES','Orco',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70625','esES','Enano',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70626','esES','Elfo de la noche',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70627','esES','No-muerto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70628','esES','Tauren',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70629','esES','Gnomo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70630','esES','Troll',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70631','esES','Elfo de sangre',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70632','esES','Draenei',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70633','esES','Unknown',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70634','esES','Saquear',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70635','esES','|cff9d9d9dBasura|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70636','esES','|cffffffffComún|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70637','esES','|cff1eff00Poco común|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70638','esES','|cff0070ddRaro|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70639','esES','|cffa335eeÉpico|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70640','esES','|cffff8000Legendario|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70641','esES','Elige un comprtamineto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70642','esES','Retrasa el ataque a',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70643','esES','Retrasa la sanación a',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70644','esES','s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70645','esES','Off-Tank',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70646','esES','Necromancers',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70647','esES','Necromancer',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70648','esES','Ángulo de ataque',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70649','esES','Normal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70650','esES','Evitar AOE frontal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70652','esES','¿Estás seguro de que esto va a funcionar? Más vale que sea la mejor agua del mundo...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70653','esES','Parece que realmente te vendría bien un trago de agua fresca.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70654','esES','Brujas del mar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70655','esES','Bruja de mar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70656','esES','Maná por daño',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70657','esES','Daño por maná',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70658','esES','Transfiguración...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70659','esES','DESACTIVAR el posicionamiento de combate',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70660','esES','Objetivo prioritario',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
diff --git a/sql/Bot SQL/locales/esMX/npc_text_locale.sql b/sql/Bot SQL/locales/esMX/npc_text_locale.sql
new file mode 100644
index 0000000000000..d71d85823894f
--- /dev/null
+++ b/sql/Bot SQL/locales/esMX/npc_text_locale.sql
@@ -0,0 +1,382 @@
+DELETE FROM `npc_text_locale` WHERE `Locale`='esMX' AND `ID` BETWEEN '70000' AND '71000';
+INSERT INTO `npc_text_locale` (`ID`, `Locale`, `Text0_0`, `Text0_1`, `Text1_0`, `Text1_1`, `Text2_0`, `Text2_1`, `Text3_0`, `Text3_1`, `Text4_0`, `Text4_1`, `Text5_0`, `Text5_1`, `Text6_0`, `Text6_1`, `Text7_0`, `Text7_1`)
+VALUES
+('70001','esMX','Vivo solo para servir a mi dueño.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70002','esMX','¿Necesitas algo?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70003','esMX','Mortales... normalmente mato a miserables como tú a la vista.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70004','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70005','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70006','esMX','¿Estás sorprendido, mortal? Como nathrezim menor, tengo que recurrir a buscar aliados. Parece que podrías divertirme al menos.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70007','esMX','¿Qué pasa ahora, mortal?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70008','esMX','¿Puedes dejarme en paz? ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70009','esMX','¿Ahora que?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70101','esMX','|cffff3300Blademaster|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"An elite swordsman, former member of Burning Blade clan, now an elite fighter within the Horde".$B$BMain attribute: Agility.$B$BNetherwalk (Windwalk). Allows Blademaster to become invisible, and move faster for a set amount of time. When the Blademaster attacks a unit to break invisibility, he will deal bonus damage.$B$BMirror Image. Confuses the enemy by creating illusions of the Blademaster and dispelling all magic from the Blademaster.$B$BCritical Strike (passive). Gives a 15% chance to deal critical x2(x3,x4) times normal damage on his attacks.$B$BBladestorm (NIY). Grants immunity to magic and deals damage to all surrounding enemies.$B$B',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70102','esMX','|cff9900ccObsidian Destroyer|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"An obsidian winged monstrocity with insatiable hunger for magic".$B$BHigh armor, very high resistances, partially immune to magic, loses mana over time and doesnt benefit from passive mana regeneration effects, mail/plate armor, dual-wielding wands, deals spellshadow damage, no physical attack, cannot attack enemies not in front while moving, spell power bonus: 50% attack power + 200% intellect + wands damage.$B$BDevour Magic. Dispels up to 2 magic effects from enemies, up to 2 magic effects and up to 2 curses from allies and damaging summoned units in 20 yards area. Every dispelled effect restores 20% mana and 5% health, 7 seconds cooldown.$B$BShadow Blast. Empowered attack that deals increased splash damage.$B$BDrain Mana. Drains all mana (limited by casters mana pool) from a random friendly unit.$B$BReplenish Mana. Energizes surrounding party and raid members within 25 yards for 2% of their maximum mana nullifying casters mana, affects up to 10 targets, 3 seconds cooldown.$B$BRegenerating Aura. Heals surrounding party and raid members within 25 yards for 3% of their maximum health nullifying casters mana, affects up to 10 targets, 3 seconds cooldown.$B$BShadow Armor (passive). Restores mana equal to a percentage of damage taken.$B$B',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70103','esMX','|cff0000ddArchmage|r$b|cffdd6600-=Warcraft III tribute=-|r$B$BSpell damage taken reduced by 35%, partially immune to control effects, cloth armor, deals spellsfire/spellfrost damage, no physical attack, spell power bonus: 100% intellect. Main attribute: Intellect.$B$BBlizzard. Your typical blizzard, just a little more powerful, 6 seconds cooldown.$B$BSummon Water Elemental. Summons a water elemental to attack archmage enemies for 1 min, 20 seconds cooldown.$B$BBrilliance Aura. Increases maximum mana by 10% and greatly increases mana regeneration of party and raid members within 40 yards.$B$BMass Teleport. NIY.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70104','esMX','|cff9900ccDreadlord|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"Incredibly powerful demon who wields power of darkness and mental domination".$B$BHigh armor, high resistances, partially immune to control effects, damage taken speeds up spells recharge, plate armor, deals melee/spellshadow damage, bonus damage against incapacitated targets, spell power bonus: 200% strength. Main attribute: Strength.$B$BCarrion Swarm. Sends a horde of bats combined with chaotic magic to damage enemies in a very large frontal cone, cannot crit, 10 seconds cooldown.$B$BSleep. Puts the enemy target to sleep for 60 seconds and allows next physical attack on that target to bypass armor, direct damage caused will awaken the target, 6 seconds cooldown.$B$BVampiric Aura. Increases physical critical damage by 5% and heals party and raid members within 40 yards for a percentage (100% for Dreadlord and 25% for everyone else) of damage done by melee physical attacks and Carrion Swarm, no threat.$B$BSummon Infernal Servant. Calls an infernal down from the sky dealing damage and stunning enemy units, infernal is very resistant to magic and lasts 180 seconds, 180 seconds cooldown.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70105','esMX','|cff0000ddSpell Breaker|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"An elven warrior trained to disrupt and contort magical energies".$B$BSpell damage taken reduced by 75%, partially immune to control effects, armor penalty -30%, mail/plate armor, deals melee/arcane damage, spell power bonus: 200% strength. Main attribute: Strength.$B$BSteal Magic (Spellsteal). Steals a benefical spell from an enemy and applies it to a nearby ally or removes a negative spell from an ally and applies it to a nearby enemy, affects magic and curse effects, 3 seconds cooldown.$B$BFeedback (passive). Successful melee attacks burn target mana equal to damage caused (increased by spellpower) dealing arcane damage. If target is drained, Spell Breaker melee attacks will do triple damage with increased critical strike chance',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70106','esMX','|cff9900ccDark Ranger|r$b|cffdd6600-=Warcraft III tribute=-|r$B$B"A former ranger of Quel thalas forcibly raised from the dead".$B$BSpell damage taken reduced by 35%, undead, partially immune to control effects, leather/cloth armor, deals physical/spellshadow damage, stick to shadows and generates no threat, spell power bonus: 50% intellect. Main attribute: Agility.$B$BSilence. Silences an enemy and up to 4 nearby targets for 8 seconds, 15 seconds cooldown.$B$BBlack Arrow. Fires a cursed arrow dealing 150% weapon damage and additional spellshadow damage over time. If affected target dies from Dark Ranger damage, Dark Minion will spawn from the corpse (maximum 5 Minions, 80 seconds duration, only works on humanoids, beasts and dragonkin). Deals five times more damage if target is under 20% health.$B$BDrain Life. Drains health from an enemy every second for 5 seconds, healing Dark Ranger for 200% of the drained amount.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70201','esMX','Siempre hay tipos dispuestos a matar por dinero.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70202','esMX','Estos son los bots que están disponibles en este momento: ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70203','esMX','Estos son los bots que están disponibles en este momento: ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70204','esMX','Parece que no hay nadie disponible en este momento, vuelve más tarde.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70300','esMX','¡Muere!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70301','esMX','Resucitandote',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70302','esMX','Resucitando ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70303','esMX','tu bot',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70304','esMX',' bot',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70305','esMX','Todavía no puedo crear agua',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70306','esMX','Todavía no puedo crear comida',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70307','esMX','No puedo hacerlo ahora',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70308','esMX','Aquí tienes...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70309','esMX','Desactivado',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70310','esMX','No está listo todavía',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70311','esMX','Tipo de objeto no válido',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70312','esMX','Fallido',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70313','esMX','Vale',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70314','esMX','No estoy en ninguna forma',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70315','esMX','No tengo piedra de salud',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70316','esMX','¡Aún no puedo crear piedras de salud!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70317','esMX','¡WTF, no tengo forzar cerraduras!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70318','esMX','Mi nivel de habilidad no es alto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70319','esMX','Cambiando mi talento a ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70320','esMX','Armas',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70321','esMX','Furia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70322','esMX','Protección',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70323','esMX','Retribución',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70324','esMX','Maestro de bestias',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70325','esMX','Punteria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70326','esMX','Supervivencia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70327','esMX','Asesinato',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70328','esMX','Combate',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70329','esMX','Sutileza',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70330','esMX','Disciplina',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70331','esMX','Sagrado',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70332','esMX','Sombra',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70333','esMX','Sangre',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70334','esMX','Escarcha',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70335','esMX','Profano',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70336','esMX','Elemental',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70337','esMX','Mejora',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70338','esMX','Restauración',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70339','esMX','Arcano',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70340','esMX','Fuego',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70341','esMX','Aflición',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70342','esMX','Demologia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70343','esMX','Destrucción',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70344','esMX','Equilibrio',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70345','esMX','Combate feral',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70346','esMX','Unknown',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70347','esMX','Vete, debilucho',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70348','esMX',' no está convencido',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70349','esMX','No voy a perder el tiempo en nada',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70350','esMX','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70351','esMX','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70352','esMX','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70353','esMX','Estoy listo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70354','esMX','Vete, sirvo a mi dueño ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70355','esMX','unknown',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70356','esMX',' en ti!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70357','esMX',' en mí mismo!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70358','esMX',' en ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70359','esMX',' usado!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70360','esMX','bot tank',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70361','esMX','clase',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70362','esMX','jugador',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70363','esMX','dueño',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70364','esMX','ninguno',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70365','esMX','Rango',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70366','esMX','talento',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70367','esMX','pasivo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70368','esMX','oculto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70369','esMX','conocido',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70370','esMX','habilidad',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70371','esMX','str',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70372','esMX','agi',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70373','esMX','sta',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70374','esMX','int',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70375','esMX','spi',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70376','esMX','unk stat',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70377','esMX','total',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70378','esMX','Melee AP',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70379','esMX','Ranged AP',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70380','esMX','armadura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70381','esMX','crit',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70382','esMX','defensa',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70383','esMX','miss',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70384','esMX','evasión',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70385','esMX','parry',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70386','esMX','bloqueo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70387','esMX','valor de bloqueo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70388','esMX','Daño recibido cuerpo a cuerpo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70389','esMX','Daño recibido de hechizos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70390','esMX','Rango de daño mano principal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70391','esMX','Daño múltiple mano principal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70392','esMX','Tiempo de ataque mano principal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70393','esMX','Rango de daño de mano secundaria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70394','esMX','Daño múltiple mano secundaria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70395','esMX','Tiempo de ataque mano secundaria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70396','esMX','Rango de daño a distancia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70397','esMX','Daño a distancia múltiple',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70398','esMX','Tiempo de ataque a distancia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70399','esMX','min',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70400','esMX','max',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70401','esMX','DPS',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70402','esMX','base hp',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70403','esMX','total hp',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70404','esMX','base mana',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70405','esMX','total mana',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70406','esMX','mana actual',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70407','esMX','poder de hechizos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70408','esMX','health regen_5 bonus',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70409','esMX','mana regen_5 no cast',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70410','esMX','mana regen_5 casting',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70411','esMX','haste',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70412','esMX','hit',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70413','esMX','pericia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70414','esMX','penetración de armadura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70415','esMX','penetración de hechizos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70416','esMX','%',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70417','esMX','sagrado',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70418','esMX','fuego',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70419','esMX','naturaleza',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70420','esMX','escarcha',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70421','esMX','sombra',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70422','esMX','arcano',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70423','esMX','Resistencia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70424','esMX','Estados de comando',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70425','esMX','Seguir',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70426','esMX','Ataque',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70427','esMX','Quédate',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70428','esMX','Reiniciar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70429','esMX','Parar por completo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70430','esMX','Distancia de seguimiento',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70431','esMX','Especificaciones',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70432','esMX','Rol principal del bot',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70433','esMX','Rol de recoleción del bot',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70434','esMX','Muertes PvP',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70435','esMX','jugadores',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70436','esMX','Murió ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70437','esMX',' veces',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70438','esMX','%s (bot) se calma',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70439','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70440','esMX','¿Estás seguro de que quieres arriesgarte a dibujar ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70441','esMX',' atención?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70442','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70443','esMX','Quieres atraer ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70444','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70445','esMX','Quieres contratar a ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70446','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70447','esMX','Administrar equipamiento...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70448','esMX','Administrar rol...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70449','esMX','Administrar formación...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70450','esMX','Administrar habilidades...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70451','esMX','Administrar talentos...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70452','esMX','Dar consumibles...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70453','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70454','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70455','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70456','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70457','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70458','esMX','¡Sigueme!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70459','esMX','¡Mantén tu posición!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70460','esMX','¡Quédate aquí, no hagas nada!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70461','esMX','Necesito comida',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70462','esMX','Necesito agua',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70463','esMX','Necesito una mesa de refrigerios',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70464','esMX','Ayúdame a abrir esta cerradura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70465','esMX','Necesito una piedra de salud',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70466','esMX','Necesito un pozo de alma',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70467','esMX','Necesito que actualices tus venenos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70468','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70469','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70470','esMX','Necesito que actualices tus encantamientos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70471','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70472','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70473','esMX','Necesito que te quites el cambio de forma',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70474','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70475','esMX','Despedir',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70476','esMX','Despedir a ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70477','esMX','Puede que te arrepientas...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70478','esMX','!Tranquilizaté!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70479','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70480','esMX','Nada',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70481','esMX','Distancia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70482','esMX','ATRÁS',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70483','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70484','esMX','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70485','esMX','Aleatoria (Astucia)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70486','esMX','Aleatoria (Ferocidad)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70487','esMX','Aleatoria (Tenacidad)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70488','esMX','Muéstrame tu inventario',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70489','esMX','Auto-equipar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70490','esMX','Mano Principal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70491','esMX','Mano Secundaria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70492','esMX','A distancia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70493','esMX','Reliquia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70494','esMX','Cabeza',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70495','esMX','Hombros',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70496','esMX','Pecho',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70497','esMX','Cintura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70498','esMX','Piernas',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70499','esMX','Pies',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70500','esMX','Brazales',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70501','esMX','Guantes',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70502','esMX','Capa',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70503','esMX','Camisa',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70504','esMX','Anillo1...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70505','esMX','Anillo2...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70506','esMX','Abalorio1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70507','esMX','Abalorio2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70508','esMX','Collar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70509','esMX','Desequipar todo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70510','esMX','Actualizar equipamiento (Visual)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70511','esMX','Solo visual',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70512','esMX','Equipado',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70513','esMX','nada',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70514','esMX','Usa tu equipamiento antiguo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70515','esMX','Desequipar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70516','esMX','Mmmm... no tengo nada que darte',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70517','esMX','Recolectar material',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70518','esMX','Estado de las habilidades',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70519','esMX','Administrar habilidades disponibles',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70520','esMX','Usar ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70521','esMX','Actualizar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70522','esMX','Daño',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70523','esMX','Control',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70524','esMX','Healer',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70525','esMX','Otros',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70526','esMX',' hace un ruido chirriante y comienza a seguir ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70527','esMX','%s no se unira a ti hasta que su dueño no lo despida.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70528','esMX','%s no se unira a ti hasta que seas nivel 60',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70529','esMX','%s no se unira a ti hasta que seas nivel 55',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70530','esMX','%s no se unira a ti hasta que seas nivel 40',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70531','esMX','%s no se unira a ti hasta que seas nivel 20',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70532','esMX','Superas el número máximo de bots (%u)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70533','esMX','No tienes suficiente dinero',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70534','esMX','¡No puedes tener más bots de esa clase! %u de %u ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70535','esMX','¡No se puede reiniciar el equipamiento en el slot %u (%s)! ¡No se puede despedir el bot!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70536','esMX','actual',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70537','esMX','Distancia de ataque',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70538','esMX','Ataques de corto alcance',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70539','esMX','Ataques de largo alcance',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70540','esMX','Exacto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70541','esMX','Eliminar Buff',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70542','esMX','Fija tu tipo de poder',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70543','esMX','¡No se puede desequipar a %s por alguna razón! Enviando por correo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70544','esMX','Tank',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70545','esMX','A distancia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70546','esMX','Mineria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70547','esMX','Herbolistaeria',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70548','esMX','Desollar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70549','esMX','Ingeniería',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70550','esMX','El contrato del bot expiró',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70551','esMX','Los NPCBot están deshabilitado actualmente.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70552','esMX','%s No se unira a ti, ya tiene un dueño: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70553','esMX','%s no puede unirse mientras estás a punto de teletransportarte',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70554','esMX','Aspecto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70555','esMX','de Mono',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70556','esMX','de Halcón',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70557','esMX','de Guepardo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70558','esMX','de Víbora',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70559','esMX','de la Bestia',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70560','esMX','de la Manada',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70561','esMX','de lo Salvaje',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70562','esMX','de Dracohalcón',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70563','esMX','Sin Aspecto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70564','esMX','Aura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70565','esMX','de Devoción',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70566','esMX','de Concentración',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70567','esMX','de Resistencia al fuego',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70568','esMX','de Resistencia a la escarcha',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70569','esMX','de Resistencia a las sombras',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70570','esMX','de Reprensión',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70571','esMX','de Cruzado',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70572','esMX','Sin Aura',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70573','esMX','Veneno entorpecedor',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70574','esMX','Veneno instantáneo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70575','esMX','Veneno mortal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70576','esMX','Veneno hiriente',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70577','esMX','Veneno de aturdimiento mental',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70578','esMX','Veneno anestésico',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70579','esMX','Nada',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70580','esMX','Lengua de fuego',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70581','esMX','Estigma de escarcha',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70582','esMX','Viento furioso',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70583','esMX','Vida terrestre',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70584','esMX','Necesito tus servicios',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70585','esMX','Tienes demasiados bots',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70586','esMX','Quieres contratar a ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70587','esMX',' está ocupado en este momento, vuelve a intentarlo más tarde.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70588','esMX','Un placer hacer negocios contigo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70589','esMX','Guerreros',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70590','esMX','Paladines',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70591','esMX','Magos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70592','esMX','Sacerdotes',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70593','esMX','Brujos',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70594','esMX','Druidas',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70595','esMX','Caballeros de la Muerte',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70596','esMX','Picaros',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70597','esMX','Chamanes',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70598','esMX','Cazadores',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70599','esMX','Blademasters',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70600','esMX','Destroyers',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70601','esMX','Archmagi',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70602','esMX','Dreadlords',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70603','esMX','Spell Breakers',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70604','esMX','Dark Rangers',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70605','esMX','Guerrero',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70606','esMX','Paladin',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70607','esMX','Mago',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70608','esMX','Sacerdote',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70609','esMX','Brujo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70610','esMX','Druida',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70611','esMX','Caballero de la Muerte',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70612','esMX','Picaro',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70613','esMX','Chaman',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70614','esMX','Cazador',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70615','esMX','Blademaster',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70616','esMX','Destroyer',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70617','esMX','Archmage',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70618','esMX','Dreadlord',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70619','esMX','Spell Breaker',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70620','esMX','Dark Ranger',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70621','esMX','Hombre',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70622','esMX','Mujer',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70623','esMX','Humano',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70624','esMX','Orco',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70625','esMX','Enano',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70626','esMX','Elfo de la noche',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70627','esMX','No-muerto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70628','esMX','Tauren',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70629','esMX','Gnomo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70630','esMX','Troll',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70631','esMX','Elfo de sangre',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70632','esMX','Draenei',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70633','esMX','Unknown',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70634','esMX','Saquear',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70635','esMX','|cff9d9d9dBasura|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70636','esMX','|cffffffffComún|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70637','esMX','|cff1eff00Poco común|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70638','esMX','|cff0070ddRaro|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70639','esMX','|cffa335eeÉpico|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70640','esMX','|cffff8000Legendario|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70641','esMX','Elige un comprtamineto',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70642','esMX','Retrasa el ataque a',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70643','esMX','Retrasa la sanación a',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70644','esMX','s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70645','esMX','Off-Tank',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70646','esMX','Necromancers',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70647','esMX','Necromancer',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70648','esMX','Ángulo de ataque',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70649','esMX','Normal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70650','esMX','Evitar AOE frontal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70652','esMX','¿Estás seguro de que esto va a funcionar? Más vale que sea la mejor agua del mundo...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70653','esMX','Parece que realmente te vendría bien un trago de agua fresca.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70654','esMX','Brujas del mar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70655','esMX','Bruja de mar',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70656','esMX','Maná por daño',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70657','esMX','Daño por maná',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70658','esMX','Transfiguración...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70659','esMX','DESACTIVAR el posicionamiento de combate',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70660','esMX','Objetivo prioritario',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
diff --git a/sql/Bot SQL/locales/ruRU/npc_text_locale.sql b/sql/Bot SQL/locales/ruRU/npc_text_locale.sql
new file mode 100644
index 0000000000000..b5bad3c03d59f
--- /dev/null
+++ b/sql/Bot SQL/locales/ruRU/npc_text_locale.sql
@@ -0,0 +1,380 @@
+DELETE FROM `npc_text_locale` WHERE `Locale`='ruRU' AND `ID` BETWEEN '70000' AND '71000';
+INSERT INTO `npc_text_locale` (`ID`, `Locale`, `Text0_0`, `Text0_1`, `Text1_0`, `Text1_1`, `Text2_0`, `Text2_1`, `Text3_0`, `Text3_1`, `Text4_0`, `Text4_1`, `Text5_0`, `Text5_1`, `Text6_0`, `Text6_1`, `Text7_0`, `Text7_1`)
+VALUES
+('70001', 'ruRU', 'Я живу только для того, чтобы служить хозяину!', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70002', 'ruRU', 'Тебе что-то нужно?', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70003', 'ruRU', 'Смертные... обычно я убиваю тварей вроде тебя как только увижу!', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70004', 'ruRU', '<Перед вами, похоже, обсидиановый разрушитель. Этот, впрочем, выглядит иначе, поврежденный и поблекший, он не реагирует на ваше присутствие. Вам помнится Плеть когда-то давно использовала таких. Как, черт возьми, он оказался здесь? При дальнейшем осмотре вы замечаете щель на его спине.>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70005', 'ruRU', '<Обсидиановый Разрушитель смотрит на вас и издает глубокий рычащий звук.>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70006', 'ruRU', 'Ты удивлен, смертный? Как низший натрезим, я вынужден прибегать к поиску союзников. Ты выглядишь так, будто сможешь меня хотя бы развлечь.', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70007', 'ruRU', 'Ну что ещё, смертный?', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70008', 'ruRU', 'Ты можешь просто оставить меня в покое? <вздох>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70009', 'ruRU', 'Что теперь?', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70010', 'ruRU', '<Вы видите истощенную предводительницу наг. Она выглядит усталой и слабой, и пытается не смотреть на вас.>$B$BНе нуж-жно с-с-слов, с-с-смертный...', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70011', 'ruRU', 'У меня опять что-то не так с-с причёс-ской? <Она расчесывает свои "волосы">$B... Нет, вс-сё в порядке. Так в чём же дело?', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70101', 'ruRU', '|cffff3300Мастер Клинка|r$b|cffdd6600-=отсылка к Warcraft III=-|r$B$B"Элитный мечник, бывший член клана Пылающего Клинка, ныне элитный воин Орды".$B$BОсновная характеристика: Ловкость.$B$BПуть Пустоты (Прогулка с ветром). Позволяет Мастеру клинка становиться невидимым и двигаться быстрее в течение определенного времени. Если Мастер клинка атакует врага, выходя из невидимости, он наносит дополнительный урон.$B$BЗеркальное изображение. Сбивает противника с толку, создавая иллюзию Мастера клинка и рассеивая всю магию Мастера клинка.$B$BКритический удар (пассивный). Дает 15% шанс нанести критический урон в 2(3,4) раза больше обычного при атаках.$B$BВихрь клинков (NIY). Дает иммунитет к магии и наносит урон всем окружающим врагам.$B$B', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70102', 'ruRU', '|cff9900ccОбсидиановый Разрушитель|r$b|cffdd6600-=отсылка к Warcraft III=-|r$B$B"Крылатое чудовище из обсидиана, обладающее ненасытной жаждой магии".$B$BКрепкая броня, очень высокое сопротивление, частичный иммунитет к магии, постоянно теряет ману, пассивные эффекты регенерации маны для него бесполезны, кольчужная/латная броня, использует жезлы в обоих руках, наносит урон темной магией, нет физической атаки, не может атаковать во время перемещения, бонус к силе заклинаний: 50% силы атаки + 200% интеллекта + урон жезлов.$B$BПожирание магии. Снимает до 2 магических эффектов с врагов, до 2 магических эффектов и до 2 проклятий с союзников и наносит урон призванным юнитам в радиусе 20 м. Каждый развеянный эффект восстанавливает 20% маны и 5% здоровья, время восстановления 7 секунд.$B$BТеневой взрыв. Усиленная атака, наносящая повышенный урон по площади.$B$BВытягивание маны. Вытягивает всю ману (ограниченную запасом маны заклинателя) из случайного дружественного юнита.$B$BПополнить запасы маны. Восполняет манну окружающим участникав группы и рейда в радиусе 25 ярдов на 3% от их максимального запаса, сводя на нет ману заклинателя, время восстановления 3 секунды.$B$BАура восстановления. Исцеляет окружающих членов группы и рейда в радиусе 25 м на 3% от их максимального запаса здоровья, сводя на нет ману заклинателя, время восстановления 3 секунды.$B$BТемная броня (пассивная). Восстанавливает ману в размере процента от полученного урона.$B$B', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70103', 'ruRU', '|cff0000ddАрхимаг|r$b|cffdd6600-=отсылка к Warcraft III=-|r$B$B Получаемый урон от заклинаний уменьшен на 35%, частично невосприимчив к эффектам контроля, тканевая броня, наносит урон от магии огня/льда, нет физической атаки, бонус к силе заклинаний: 100% интеллекта. Основная характеристика: Интеллект.$B$BСнежная буря. Обычная снежная буря, только немного мощнее, время восстановления 6 секунд.$B$BПризыв элементаля воды. Призывает элементаля воды, который атакует врагов архимага. Время восстановления: 1 мин., 20 сек.$B$BАура великолепия. Увеличивает максимальный запас маны на 10% и значительно увеличивает регенерацию маны участников группы и рейда в радиусе 40 м.$B$BM Массовая телепортация. NIY.$B$B', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70104', 'ruRU', '|cff9900ccПовелитель Ужаса|r$b|cffdd6600-=отсылка к Warcraft III=-|r$B$B"Невероятно могущественный демон, владеющий силами тьмы и управления разумом".$B$BКрепкая броня, высокое сопротивление, частичная невосприимчивость к эффектам контроля, получаемый урон ускоряет перезарядку заклинаний, латная броня, наносит урон в ближнем бою а также урон от темной магии, дополнительный урон по целям выведенным из равновесия, бонус к силе заклинаний: 200% силы. Основная характеристика: Сила.$B$BТемная Стая. Посылает стаю летучих мышей наносящих урон от магии в конусе перед собой, не может нанести критический урон, время восстановления 10 секунд.$B$BСон. Погружает вражескую цель в сон на 60 секунд и позволяет при наненсения урона следующей физической атаке этой цели игнорировать ее броню, нанесенный прямой урон пробудит цель, время восстановления 6 секунд.$B$BАура вампиризма. Увеличивает физический критический урон на 5% и исцеляет членов группы и рейда в радиусе 40 м в процентном соотношении (100% для Повелителя ужаса и 25% для всех остальных) от урона, нанесенного физическими атаками в ближнем бою и Темной Стаей, без угрозы.$B$BПризыв Инфернала. Призывает инфернала с неба на 180 секунд, нанося урон и оглушая врагов, инфернал очень устойчив к магии, время восстановления 180 секунд.$B$B', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70105', 'ruRU', '|cff0000ddРазрушитель Заклинаний|r$b|cffdd6600-=отсылка к Warcraft III=-|r$B$B"Эльфийский воин, специально обученный разрушать и искажать магию".$B$BУрон, получаемый от заклинаний, уменьшен на 75%, частично невосприимчив к эффектам контроля, штраф за броню -30%, кольчужная/латная броня, наносит урон в ближнем бою и урон от тайной магии, бонус к силе заклинаний: 200% силы. Основная характеристика: Сила.$B$BПохищение Магии. Похищает полезное заклинание у врага и передаёт его ближайшему союзнику или снимает отрицательное заклинание с союзника на ближайшего врага, влияет на эффекты магии и проклятия, время восстановления 2 секунды.$B$BСожжение Маны (пассивная). Успешные атаки ближнего боя сжигают ману цели, равную нанесенному урону (увеличенному силой заклинаний), нанося урон от тайной магии. Если мана цели исчерпана, атаки ближнего боя Разрушителя Заклинаний будут наносить тройной урон с повышенным шансом критического удара. Если у цели нет маны, Разрушитель Заклинаний восполнит ману в количестве 25% от нанесенного урона.$B$B', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70106', 'ruRU', '|cff9900ccТемная Охотница|r$b|cffdd6600-=отсылка к Warcraft III=-|r$B$B"Бывшая охотница Кель\'Таласа, насильно возвращённая из мира мёртвых".$B$B Получаемый урон от заклинаний уменьшен на 35%, нежить, частично невосприимчива к эффектам контроля, кожаная/тканевая броня, наносит физический урон/урон от темной магии, придерживается теней и не генерирует угрозы, бонус к силе заклинаний: 50% интеллекта. Основное характеристика: Ловкость.$B$BБезмолвие. Заставляет врага и до 4 его ближайших друзей замолчать на 8 секунд, теряя возможность применять заклинания, время восстановления 15 секунд.$B$BЧерная стрела. Выпускает проклятую стрелу, наносящую 150% урона от оружия и дополнительный урон от темной магии каждые несколько секунд. Если цель умирает от урона Темной Охотницы, она превратится в Тёмного Приспешника (максимум 5 приспешников, продолжительность 80 секунд, срабатывает только на гуманоидах, зверях и драконах). Наносит пятикратный урон, если у цели меньше 20% здоровья.$B$Bпохищение Жизни. Высасывает здоровье врага каждую секунду в течение 5 секунд, исцеляя Темную Охотницу на 200% от похищенного количества.$B$B', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70107', 'ruRU', '|cff9900ccНекромант|r$b|cffdd6600-=отсылка к Warcraft III / Diablo II=-|r$B$BПолучаемый урон от заклинаний уменьшен на 20%, частично невосприимчив к эффектам контроля, тканевая броня, наносит урон от темной магии, нет физической атаки, бонус к силе заклинаний: интеллект 100%. Основная характеристика: Интеллект.$B$BВоскрешение Мертвых. Поднимает 2 скелета из трупа (максимум 6 скелетов, продолжительность 65 секунд, работает только с гуманоидами, зверями и драконами).$B$BНечестивое Бешенство. Увеличивает скорость атаки цели в ближнем бою на 75%, но постоянно истощает здоровье. Длится 45 секунд. Не может быть отменено. Разблокируется на 30 уровне.$B$BВзрыв Трупа. Заставляет труп взорваться, нанося урон в размере от 35% до 75% от максимального здоровья мертвого существа (зависит от уровня Некроманта) всем окружающим врагам. Этот урон не генерирует угрозы. Разблокируется на 40 уровне.$B$BУвечье. Снижает скорость передвижения цели, скорость атаки в ближнем бою и общую силу на 50% на 60 секунд. Разблокируется на уровне 50.$B$B', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70108', 'ruRU', '|cff0000ddМорская Ведьма|r$b|cffdd6600-=отсылка к Warcraft III=-|r$B$B"Грозная колдунья наг, часто ассоциирующаяся с приходом ужасных штормов".$B$BПолучаемый урон от заклинаний уменьшен на 30%, частично невосприимчив к эффектам контроля, тканевая броня, наносит физический урон/урон от магии льда, бонус к силе атаки: ловкость x2, бонус к силе заклинаний: 200% к интеллекту. Основная характеристика: Интеллект.$B$BРаздвоенная молния. Вызывает разветвлённую молнию, наносящую урон врагам. Поражает от 2 до всех целей (в зависимости от уровня Морской Ведьмы), оглушая их на 2 секунды. Этот урон не создает угрозы.$B$BЛедяные Стрелы. Наполняет стрелу магическим морозом для дополнительного урона, снижая скорость движения цели, скорость атаки и произнесения заклинаний на 30-70% (в зависимости от уровня Морской ведьмы).$B$BЩит Маны. Создает щит, который поглощает 100% входящего (не смягченного) урона, используя ману Морской Ведьмы. Эффект варьируется от 1 единицы урона за 10 единиц маны до 10 единиц урона за 1 единицу ману (в зависимости от уровня Морской Ведьмы).$B$BТорнадо. Вызывает яростный торнадо, который наносит урон и замедляет ближайших врагов, иногда полностью выводя их из строя. На открытом пространстве Торнадо со временем разрастается, увеличивая наносимый урон и область действия, но в закрытом помещении уменьшается и быстро рассеивается. Разблокируется на уровне 60.$B$BНага (пассивный эффект). Скорость плавания, урон и шанс уклонения значительно увеличиваются в воде.$B$B', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70201', 'ruRU', 'Всегда найдутся чуваки, готовые убить за деньги.', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70202', 'ruRU', 'Наёмники востребованы всегда. Вот кто доступен прямо сейчас.', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70203', 'ruRU', 'Наёмники востребованы всегда. Вот кто доступен прямо сейчас.', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70204', 'ruRU', 'Похоже сейчас никого нет, проверь позже.', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70300', 'ruRU', 'Умри!', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70301', 'ruRU', 'Воскрешаю тебя', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70302', 'ruRU', 'Воскрешаю ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70303', 'ruRU', 'твой бот', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70304', 'ruRU', ' бот', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70305', 'ruRU', 'Я пока не могу применить заклинание создания воды', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70306', 'ruRU', 'Я пока не могу применить заклинание создания еды', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70307', 'ruRU', 'Я не могу сделать это сейчас', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70308', 'ruRU', 'Во-о-от...', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70309', 'ruRU', 'Отключено', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70310', 'ruRU', 'Ещё не готово', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70311', 'ruRU', 'Неверный тип объекта', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70312', 'ruRU', 'Не удалось', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70313', 'ruRU', 'Готово', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70314', 'ruRU', 'Я не изменил форму', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70315', 'ruRU', 'У меня нет камня здоровья', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70316', 'ruRU', 'Я пока не могу создавать камни здоровья!', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70317', 'ruRU', 'WTF у меня нет отмычек!', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70318', 'ruRU', 'Мой уровень навыка недостаточно высок', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70319', 'ruRU', 'Меняю специализацию на ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70320', 'ruRU', 'Оружие', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70321', 'ruRU', 'Неистовство', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70322', 'ruRU', 'Защита', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70323', 'ruRU', 'Воздаяние', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70324', 'ruRU', 'Повелитель зверей', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70325', 'ruRU', 'Стрельба', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70326', 'ruRU', 'Выживание', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70327', 'ruRU', 'Ликвидация', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70328', 'ruRU', 'Бой', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70329', 'ruRU', 'Скрытность', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70330', 'ruRU', 'Послушание', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70331', 'ruRU', 'Свет', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70332', 'ruRU', 'Тьма', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70333', 'ruRU', 'Кровь', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70334', 'ruRU', 'Лёд', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70335', 'ruRU', 'Нечестивость', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70336', 'ruRU', 'Стихии', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70337', 'ruRU', 'Совершенствование', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70338', 'ruRU', 'Исцеление', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70339', 'ruRU', 'Тайная магия', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70340', 'ruRU', 'Огонь', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70341', 'ruRU', 'Колдовство', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70342', 'ruRU', 'Демонология', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70343', 'ruRU', 'Разрушение', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70344', 'ruRU', 'Баланс', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70345', 'ruRU', 'Сила зверя', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70346', 'ruRU', 'Неизвестно', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70347', 'ruRU', 'Проваливай, слабак', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70348', 'ruRU', ' не убеждён', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70349', 'ruRU', 'Я не собираюсь тратить свое время на всякую ерунду', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70353', 'ruRU', 'Я готов', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70354', 'ruRU', 'Уходи. Я служу своему хозяину ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70355', 'ruRU', 'неизвестный', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70356', 'ruRU', ' на тебя!', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70357', 'ruRU', ' на себя!', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70358', 'ruRU', ' на ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70359', 'ruRU', ' использовано!', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70360', 'ruRU', 'бот-танк', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70361', 'ruRU', 'класс', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70362', 'ruRU', 'игрок', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70363', 'ruRU', 'владелец', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70364', 'ruRU', 'никто', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70365', 'ruRU', 'Уровень', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70366', 'ruRU', 'талант', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70367', 'ruRU', 'пассивный', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70368', 'ruRU', 'скрытый', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70369', 'ruRU', 'изучен', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70370', 'ruRU', 'способность', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70371', 'ruRU', 'сила', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70372', 'ruRU', 'ловкость', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70373', 'ruRU', 'выносливость', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70374', 'ruRU', 'интеллект', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70375', 'ruRU', 'дух', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70376', 'ruRU', 'неизвестный стат', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70377', 'ruRU', 'всего', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70378', 'ruRU', 'Сила атаки ближний бой', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70379', 'ruRU', 'Сила атаки дальний бой', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70380', 'ruRU', 'броня', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70381', 'ruRU', 'крит', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70382', 'ruRU', 'защита', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70383', 'ruRU', 'промах', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70384', 'ruRU', 'уклонение', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70385', 'ruRU', 'парирование', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70386', 'ruRU', 'блок', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70387', 'ruRU', 'показатель блокирования', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70388', 'ruRU', 'Получаемый урон в ближнем бою', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70389', 'ruRU', 'Получаемый урон от заклинаний', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70390', 'ruRU', 'Разброс урона оружия в правой руке', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70391', 'ruRU', 'Множитель урона оружия в правой руке', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70392', 'ruRU', 'Скорость атаки оружием в правой руке', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70393', 'ruRU', 'Разброс урон оружия в левой руке', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70394', 'ruRU', 'Множитель урона оружия в левой руке', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70395', 'ruRU', 'Скорость атаки оружием в левой руке', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70396', 'ruRU', 'Разброс урона оружия дальнего боя', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70397', 'ruRU', 'Множитель урона оружия дальнего боя', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70398', 'ruRU', 'Скорость атаки оружием дальнего боя', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70399', 'ruRU', 'минимум', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70400', 'ruRU', 'максимум', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70402', 'ruRU', 'базовый уровень здоровья', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70403', 'ruRU', 'всего здоровья', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70404', 'ruRU', 'базовый уровень маны', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70405', 'ruRU', 'всего маны', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70406', 'ruRU', 'текущий запас маны', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70407', 'ruRU', 'сила заклинаний', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70408', 'ruRU', 'бонус регенерации здоровья_5', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70409', 'ruRU', 'регенерация маны_5 без использования заклинания', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70410', 'ruRU', 'регенерация маны_5 при использовании заклинания', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70411', 'ruRU', 'скорость', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70412', 'ruRU', 'меткость', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70413', 'ruRU', 'мастерство', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70414', 'ruRU', 'пробивание брони', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70415', 'ruRU', 'проникновение заклинаний', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70416', 'ruRU', 'проц.', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70417', 'ruRU', 'святлая магия', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70418', 'ruRU', 'магия огня', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70419', 'ruRU', 'силы природы', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70420', 'ruRU', 'магия льда', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70421', 'ruRU', 'темная магия', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70422', 'ruRU', 'тайная магия', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70423', 'ruRU', 'Сопротивление', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70424', 'ruRU', 'Состояния команд', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70425', 'ruRU', 'Следовать', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70426', 'ruRU', 'Атаковать', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70427', 'ruRU', 'Стоять', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70428', 'ruRU', 'Сброс', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70429', 'ruRU', 'Полная остановка', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70430', 'ruRU', 'Дистанция следования', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70431', 'ruRU', 'Специализация', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70432', 'ruRU', 'Маска ролей ботов (главная)', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70433', 'ruRU', 'Маска ролей ботов (сбор)', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70434', 'ruRU', 'PvP-убийства', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70435', 'ruRU', 'игроки', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70436', 'ruRU', 'Умер ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70437', 'ruRU', ' раз', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70438', 'ruRU', '%s (бот) успокаивается', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70439', 'ruRU', '<Отладка>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70440', 'ruRU', 'Вы уверены, что хотите рискнуть, привлекая внимание ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70441', 'ruRU', '?', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70442', 'ruRU', '<Вставить монету>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70443', 'ruRU', 'Вы хотите приманить ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70444', 'ruRU', '<Попробовать сделать подношение>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70445', 'ruRU', 'Вы хотите нанять ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70446', 'ruRU', '<Нанять бота>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70447', 'ruRU', 'Снаряжение...', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70448', 'ruRU', 'Роли...', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70449', 'ruRU', 'Построение...', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70450', 'ruRU', 'Способности...', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70451', 'ruRU', 'Специализация...', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70452', 'ruRU', 'Дать использовать...', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70453', 'ruRU', '<Создать группу>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70454', 'ruRU', '<Создать группу (все боты)>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70455', 'ruRU', '<Добавить в группу>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70456', 'ruRU', '<Добавить всех ботов в группу>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70457', 'ruRU', '<Удалить из группы>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70458', 'ruRU', 'Следуй за мной', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70459', 'ruRU', 'Удерживай позицию', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70460', 'ruRU', 'Стой здесь и ничего не делай', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70461', 'ruRU', 'Мне нужна еда', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70462', 'ruRU', 'Мне нужна вода', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70463', 'ruRU', 'Мне нужен стол с едой', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70464', 'ruRU', 'Помоги мне взломать замок', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70465', 'ruRU', 'Мне нужен камень здоровья', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70466', 'ruRU', 'Мне нужен источник душ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70467', 'ruRU', 'Мне нужно, чтобы ты обновил яды', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70468', 'ruRU', '<Выберите яд (правая рука)>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70469', 'ruRU', '<Выберите яд (левая рука)>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70470', 'ruRU', 'Мне нужно, чтобы ты обновил чары', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70471', 'ruRU', '<Выберите чары (правая рука)>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70472', 'ruRU', '<Выберите чары (левая рука)>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70473', 'ruRU', 'Мне нужно, чтобы ты вышел из формы', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70474', 'ruRU', '<Выбрать тип питомца>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70475', 'ruRU', 'Свободен отсюда', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70476', 'ruRU', 'Вы действительно хотите уволить ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70477', 'ruRU', 'Вы можете пожалеть об этом...', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70478', 'ruRU', 'Соберись, тряпка', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70479', 'ruRU', '<Рассмотреть существо>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70480', 'ruRU', 'Ладно, не важно', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70481', 'ruRU', 'дист.', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70482', 'ruRU', 'НАЗАД', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70483', 'ruRU', '<Авто>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70484', 'ruRU', '<Нет>', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70485', 'ruRU', 'Случайный (Хитрость)', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70486', 'ruRU', 'Случайный (Свирепость)', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70487', 'ruRU', 'Случайный (Упорство)', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70488', 'ruRU', 'Покажи мне свой инвентарь', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70489', 'ruRU', 'Автовыбор', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70490', 'ruRU', 'Правая рука', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70491', 'ruRU', 'Левая рука', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70492', 'ruRU', 'Дальний бой', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70493', 'ruRU', 'Реликвия', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70494', 'ruRU', 'Голова', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70495', 'ruRU', 'Плечи', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70496', 'ruRU', 'Грудь', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70497', 'ruRU', 'Пояс', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70498', 'ruRU', 'Ноги', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70499', 'ruRU', 'Ступни', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70500', 'ruRU', 'Запястья', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70501', 'ruRU', 'Кисти рук', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70502', 'ruRU', 'Спина', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70503', 'ruRU', 'Рубашка', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70504', 'ruRU', 'Палец1', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70505', 'ruRU', 'Палец2', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70506', 'ruRU', 'Аксессуар1', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70507', 'ruRU', 'Аксессуар2', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70508', 'ruRU', 'Шея', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70509', 'ruRU', 'Снять все', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70510', 'ruRU', 'Обновить внешний вид', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70511', 'ruRU', 'только внешний вид', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70512', 'ruRU', 'Надето', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70513', 'ruRU', 'ничего', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70514', 'ruRU', 'Используй свое старое cнаряжение', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70515', 'ruRU', 'Снять', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70516', 'ruRU', 'Хм... мне нечего тебе дать', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70517', 'ruRU', 'Сбор ингредиентов', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70518', 'ruRU', 'Статус способностей', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70519', 'ruRU', 'Разрешённые способности', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70520', 'ruRU', 'Используй ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70521', 'ruRU', 'Обновить', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70522', 'ruRU', 'Урон', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70523', 'ruRU', 'Контроль', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70524', 'ruRU', 'Лечение', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70525', 'ruRU', 'Другое', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70526', 'ruRU', ' издает скрежет и начинает следовать за ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70527', 'ruRU', '%s не присоединится к вам, пока владелец не уволит', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70528', 'ruRU', '%s не присоединится к вам, пока вы не достигнете 60-го уровня', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70529', 'ruRU', '%s не присоединится к вам, пока вы не достигнете 55-го уровня', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70530', 'ruRU', '%s не присоединится к вам, пока вы не достигнете 40-го уровня', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70531', 'ruRU', '%s не присоединится к вам, пока вы не достигнете 20-го уровня', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70532', 'ruRU', 'Вы превысили максимальное количество ботов (%u)', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70533', 'ruRU', 'У вас недостаточно денег', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70534', 'ruRU', 'У вас не может быть больше ботов этого класса! %u из %u', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70535', 'ruRU', 'Не удается сбросить снаряжение в слоте %u (%s)! Не могу уволить бота!', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70536', 'ruRU', 'сейчас', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70537', 'ruRU', 'Дистанция атаки', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70538', 'ruRU', 'Короткая дистанция', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70539', 'ruRU', 'Длинная дистанция', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70540', 'ruRU', 'Заданная', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70541', 'ruRU', 'Снять бафф', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70542', 'ruRU', 'Исправь тип энергии', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70543', 'ruRU', 'Не могу снять %s по какой-то идиотской причине! Отправляю по почте', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70544', 'ruRU', 'Танк', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70545', 'ruRU', 'Дальний бой', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70546', 'ruRU', 'Горное дело', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70547', 'ruRU', 'Травничество', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70548', 'ruRU', 'Снятие шкур', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70549', 'ruRU', 'Инженерное дело', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70550', 'ruRU', 'Срок владения ботом истек из-за бездействия', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70551', 'ruRU', 'Система NpcBot в данный момент отключена. Пожалуйста, обратитесь к администратору', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70552', 'ruRU', '%s не присоединится к вам, уже есть владелец: %s', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70553', 'ruRU', '%s не может присоединиться к вам: телепортируется', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70554', 'ruRU', 'Дух', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70555', 'ruRU', 'Обезьяна', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70556', 'ruRU', 'Ястреб', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70557', 'ruRU', 'Гепард', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70558', 'ruRU', 'Гадюка', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70559', 'ruRU', 'Зверь', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70560', 'ruRU', 'Стая', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70561', 'ruRU', 'Дикий', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70562', 'ruRU', 'Дракондор', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70563', 'ruRU', 'Нет духа', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70564', 'ruRU', 'Аура', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70565', 'ruRU', 'Благочестие', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70566', 'ruRU', 'Сосредоточенность', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70567', 'ruRU', 'Защита от огня', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70568', 'ruRU', 'Защита от магии льда', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70569', 'ruRU', 'Защита от темной магии', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70570', 'ruRU', 'Воздаяние', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70571', 'ruRU', 'Воин света', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70572', 'ruRU', 'Нет ауры', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70573', 'ruRU', 'Калечащий', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70574', 'ruRU', 'Быстродействующий', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70575', 'ruRU', 'Смертельный', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70576', 'ruRU', 'Нейтрализующий', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70577', 'ruRU', 'Дурманящий', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70578', 'ruRU', 'Анестезирующий', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70579', 'ruRU', 'Ничего', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70580', 'ruRU', 'Языки пламени', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70581', 'ruRU', 'Ледяное клеймо', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70582', 'ruRU', 'Неистовство ветра', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70583', 'ruRU', 'Жизнь земли', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70584', 'ruRU', 'Мне нужны твои услуги', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70585', 'ruRU', 'У тебя слишком много ботов', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70586', 'ruRU', 'Вы хотите нанять ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70587', 'ruRU', ' сейчас немного занят, повторите попытку позже.', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70588', 'ruRU', 'Приятно иметь с тобой дело', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70589', 'ruRU', 'Воины', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70590', 'ruRU', 'Паладины', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70591', 'ruRU', 'Маги', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70592', 'ruRU', 'Жрецы', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70593', 'ruRU', 'Чернокнижники', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70594', 'ruRU', 'Друиды', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70595', 'ruRU', 'Рыцари Смерти', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70596', 'ruRU', 'Разбойники', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70597', 'ruRU', 'Шаманы', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70598', 'ruRU', 'Охотники', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70599', 'ruRU', 'Мастера Клинка', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70600', 'ruRU', 'Разрушители', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70601', 'ruRU', 'Архимаги', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70602', 'ruRU', 'Повелители Ужаса', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70603', 'ruRU', 'Разрушители Заклинаний', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70604', 'ruRU', 'Тёмные Охотницы', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70605', 'ruRU', 'Воин', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70606', 'ruRU', 'Паладин', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70607', 'ruRU', 'Маг', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70608', 'ruRU', 'Жрец', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70609', 'ruRU', 'Чернокнижник', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70610', 'ruRU', 'Друид', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70611', 'ruRU', 'Рыцарь смерти', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70612', 'ruRU', 'Разбойник', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70613', 'ruRU', 'Шаман', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70614', 'ruRU', 'Охотник', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70615', 'ruRU', 'Мастер Клинка', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70616', 'ruRU', 'Разрушитель', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70617', 'ruRU', 'Архимаг', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70618', 'ruRU', 'Повелитель Ужаса', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70619', 'ruRU', 'Разрушитель Заклинаний', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70620', 'ruRU', 'Темная Охотница', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70621', 'ruRU', 'Мужчина', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70622', 'ruRU', 'Женщина', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70623', 'ruRU', 'Человек', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70624', 'ruRU', 'Орк', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70625', 'ruRU', 'Гном', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70626', 'ruRU', 'Ночной эльф', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70627', 'ruRU', 'Нежить', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70628', 'ruRU', 'Таурен', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70629', 'ruRU', 'Гном', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70630', 'ruRU', 'Тролль', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70631', 'ruRU', 'Эльф крови', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70632', 'ruRU', 'Дреней', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70633', 'ruRU', 'Неизвестно', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70634', 'ruRU', 'Сбор добычи', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70635', 'ruRU', '|cff9d9d9dПлохой|r', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70636', 'ruRU', '|cffffffffОбычный|r', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70637', 'ruRU', '|cff1eff00Необычный|r', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70638', 'ruRU', '|cff0070ddРедкий|r', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70639', 'ruRU', '|cffa335eeЭпический|r', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70640', 'ruRU', '|cffff8000Легендарный|r', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70641', 'ruRU', 'Активное действие', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70642', 'ruRU', 'Задержка атаки на', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70643', 'ruRU', 'Задержка лечения на', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70644', 'ruRU', 'с', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70645', 'ruRU', 'Off-танк (второй танк)', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70646', 'ruRU', 'Некроманты', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70647', 'ruRU', 'Некромант', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70648', 'ruRU', 'Позиционирование в дальнем бою', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70649', 'ruRU', 'Обычное', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70650', 'ruRU', 'Избегать фронтального АОЕ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70652', 'ruRU', 'Вы уверены, что это сработает? Это должна быть самая лучшая вода в мире...', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70653', 'ruRU', 'Похоже, тебе не помешает хороший глоток свежей воды.', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70654', 'ruRU', 'Морские Ведьмы', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70655', 'ruRU', 'Морская Ведьма', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70656', 'ruRU', 'Маны на единицу урона', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70657', 'ruRU', 'Урона на еденицу маны', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+('70658', 'ruRU', 'Трансмогрификация...', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
diff --git a/sql/Bot SQL/locales/zhCN/npc_text_locale.sql b/sql/Bot SQL/locales/zhCN/npc_text_locale.sql
new file mode 100644
index 0000000000000..147367d5c8412
--- /dev/null
+++ b/sql/Bot SQL/locales/zhCN/npc_text_locale.sql
@@ -0,0 +1,380 @@
+DELETE FROM `npc_text_locale` WHERE `Locale`='zhCN' AND `ID` BETWEEN '70000' AND '71000';
+INSERT INTO `npc_text_locale` (`ID`, `Locale`, `Text0_0`, `Text0_1`, `Text1_0`, `Text1_1`, `Text2_0`, `Text2_1`, `Text3_0`, `Text3_1`, `Text4_0`, `Text4_1`, `Text5_0`, `Text5_1`, `Text6_0`, `Text6_1`, `Text7_0`, `Text7_1`)
+VALUES
+('70001','zhCN','我愿意为你奉献一切。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70002','zhCN','你需要什么吗?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70003','zhCN','凡人,通常情况下,我会立刻杀了你这混蛋!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70004','zhCN','<你看着这个黑曜石毁灭者。它看起来有点与众不同,它并没有因为你的伤害而消失,在仔细检查过后,你注意到它的背部有一个小口。>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70005','zhCN','<毁灭者盯着你,发出低沉的咆哮。>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70006','zhCN','你惊讶吗,凡人?作为一名纳斯雷兹姆,我不得不寻求盟友,你看起来至少可以逗我开心。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70007','zhCN','现在怎么样了,凡人?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70008','zhCN','你就不能让我一个人静一静吗? <唉。。。>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70009','zhCN','现在如何?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70101','zhCN','|cffff3300剑圣|r$b|cffdd6600-=致敬魔兽争霸III=-|r$B$B\\\"剑圣,以前是燃烧之刃家族的成员,现在是部落中的精锐战士\".$B$B主要属性:敏捷.$B$B疾风步.让剑圣隐形,并在一段时间内移动得更快.当剑圣攻击一个单位以打破隐身状态时,他将造成额外的伤害.$B$B镜像.制造剑圣幻象迷惑敌人,并驱散剑圣的所有魔法.$B$B爆击(被动).有15%的几率在他的攻击中造成致命的x2(x3,x4)倍的正常伤害.$B$B剑刃风暴. 给予魔法免疫并对周围所有敌人造成伤害.$B$B',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70102','zhCN','|cff9900cc黑曜石毁灭者|r$b|cffdd6600-=致敬魔兽争霸III=-|r$B$B\\\"黑曜石毁灭者,对魔法有着无法满足的渴望\\\".$B$B高护甲,非常高的抵抗力,部分免疫魔法,随着时间的推移失去法力\\并且不受益于被动法力再生效果,板甲,双持魔杖,造成暗影法术伤害,没有物理攻击\\法术伤害加成:50%攻击力+200% 智力增加魔杖伤害.$B$B吞噬魔法.从敌人身上驱散最多2个魔法效果,从盟友身上驱散最多2个魔法效果和最多2个诅咒,并在20码范围内伤害召唤单位.每次驱散效果回复20%法力和5%生命,7秒冷却.$B$B暗影爆炸.强化攻击,增加飞溅伤害.$B$B吸取法力.从随机友方单位吸取所有法力(受施法者法力限制).$B$B补充法力.给周围15码范围内的团队和团队成员通电,使其法力值达到最大值的1%,影响最多10个目标,冷却3秒.$B$B再生光环.治疗周围15码范围内的团队和团队成员,使其生命值降低施法者法力上限的2%,最多影响10个目标,冷却3秒.$B$B暗影护甲(被动).恢复相当于所受伤害百分比的法力值.$B$B',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70103','zhCN','|cff0000dd大魔导师|r$b|cffdd6600-=致敬魔兽争霸III=-|r$B$B\\\"大法师,无法用言语来形容的暴雪亲儿子\\\".$B$B法术伤害降低35%,部分免疫控制效果,布甲,造成火/冰法术伤害,无物理攻击,法术能量加成:100%智力.主要属性:智力.$B$B暴风雪!典型的暴风雪,只是稍微强大一点,6秒冷却.召唤水元素攻击大法师的敌人1分钟,冷却20秒.$B$B光辉光环.增加10%的法力上限,大大提高40码范围内己方和队友的法力回复.$B$B大规模传送.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70104','zhCN','|cff9900cc恐惧魔王|r$b|cffdd6600-=致敬魔兽争霸III=-|r$B$B\\\"恐惧魔王,拥有黑暗力量和精神控制力的强大恶魔\\\".$B$B高护甲,高抵抗,部分免疫控制效果,所受伤害加速法术能量,板甲,造成近战/暗影法术伤害,对瘫痪目标造成额外伤害,法术能量加成:200%力量.主要属性:力量.$B$B腐蚀虫群.派一大群蝙蝠与混乱魔法结合,对面前锥形范围的敌人造成伤害,无法暴击,冷却10秒.$B$B沉睡.使敌方目标睡眠60秒,并允许下次对该目标的物理攻击忽视护甲,造成的直接伤害将唤醒目标,冷却6秒.$B$B吸血鬼的光环.增加5%的物理暴击伤害,治疗40码范围内的团队和突袭成员受到近战物理攻击和腐肉群伤害的百分比(恐惧领主100%,其他人25%),没有威胁.$B$B召唤地狱恶魔.召唤一个来自天空的恶魔,恶魔对魔法有很强的抵抗力并且持续180秒,180秒的冷却时间.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70105','zhCN','|cff0000dd破法者|r$b|cffdd6600-=致敬魔兽争霸III=-|r$B$B\\\"破法者,一个被训练来破坏和扭曲魔法能量的精灵战士\\\".$B$B法术伤害减少75%,部分免疫控制效果,护甲降低-30%,板甲,近战/奥术伤害,法术能量加成:200%力量.主要属性:力量.$B$B魔法偷取.从敌人身上偷取一个有益的法术并施于附近的盟友,或者从盟友身上移除一个消极的法术并施于附近的敌人,影响魔法和诅咒效果,3秒冷却.$B$B能量窃取(被动).成功的近战攻击消耗目标的法力,相当于造成的伤害(由法术力增加),造成奥术伤害.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70106','zhCN','|cff9900cc黑暗游侠|r$b|cffdd6600-=致敬魔兽争霸III=-|r$B$B\\\"黑暗游侠,强行起死回生的奎尔萨拉斯的前游侠\\\".$B$B法术伤害减少35%,不死系,部分免疫控制效果,皮甲/布甲,造成物理/暗影法术伤害,不产生威胁,法术力量加成:50%智力.主要属性:敏捷.$B$B沉默.使一个敌人和最多4个附近目标沉默8秒,15秒冷却.$B$B黑箭.射出一支诅咒之箭,造成150%武器伤害和额外的暗影伤害.如果受影响的目标死于黑暗游侠的伤害,黑暗仆从将从尸体中产生(最多5个仆从,持续时间80秒,只对人形、野兽和龙类有效).如果目标生命低于20%,造成5倍伤害.$B$B吸取生命.每秒吸取一个敌人的生命值,持续5秒,治疗黑暗游侠消耗生命值的200%.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70201','zhCN','并不总是有人愿意为钱去卖命!',NULL,'我们的服务遍布艾泽拉斯的每个角落!',NULL,'很高兴为您服务,我这里有最能打的家伙!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70202','zhCN','雇佣兵向来十分抢手;以下是现在你能雇佣的人:',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70203','zhCN','雇佣兵向来十分抢手;以下是现在你能雇佣的人:',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70204','zhCN','看来现在没有空闲的雇佣兵,你过些时候再来看看吧。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70300','zhCN','去死!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70301','zhCN','正在复活你!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70302','zhCN','正在复活 ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70303','zhCN','你的机器人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70304','zhCN','的机器人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70305','zhCN','我现在还不能制造魔法水',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70306','zhCN','我现在还不能制造魔法食物',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70307','zhCN','我还不能那样做',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70308','zhCN','给你...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70309','zhCN','已禁用',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70310','zhCN','还没有准备好',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70311','zhCN','无效的物品类型',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70312','zhCN','失败',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70313','zhCN','完成',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70314','zhCN','我没有变形',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70315','zhCN','我没有治疗石',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70316','zhCN','我还不能制造治疗石',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70317','zhCN','搞什么鬼,我没有锁可开!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70318','zhCN','我的技能等级还不够高',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70319','zhCN','正在将我的天赋切换为',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70320','zhCN','武器',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70321','zhCN','狂怒',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70322','zhCN','防护',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70323','zhCN','惩戒',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70324','zhCN','野兽控制',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70325','zhCN','射击',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70326','zhCN','生存',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70327','zhCN','刺杀',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70328','zhCN','战斗',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70329','zhCN','敏锐',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70330','zhCN','戒律',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70331','zhCN','神圣',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70332','zhCN','暗影',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70333','zhCN','鲜血',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70334','zhCN','冰霜',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70335','zhCN','邪恶',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70336','zhCN','元素',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70337','zhCN','增强',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70338','zhCN','恢复',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70339','zhCN','奥术',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70340','zhCN','火焰',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70341','zhCN','痛苦',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70342','zhCN','恶魔学识',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70343','zhCN','毁灭',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70344','zhCN','平衡',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70345','zhCN','野性战斗',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70346','zhCN','未知',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70347','zhCN','滚开! 懦夫。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70348','zhCN',' 不方便。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70349','zhCN','我不会把我宝贵的时间浪费在这些琐事上!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70350','zhCN','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70351','zhCN','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70352','zhCN','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70353','zhCN','我准备好了',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70354','zhCN','走开!我已经有雇主了!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70355','zhCN','未知',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70356','zhCN','在你身上!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70357','zhCN','在我身上!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70358','zhCN',' 对 ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70359','zhCN',' 已使用!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70360','zhCN','坦克机器人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70361','zhCN','职业',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70362','zhCN','玩家',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70363','zhCN','雇主',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70364','zhCN','无',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70365','zhCN','级别',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70366','zhCN','天赋',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70367','zhCN','被动',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70368','zhCN','隐藏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70369','zhCN','已知',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70370','zhCN','能力',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70371','zhCN','力量',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70372','zhCN','敏捷',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70373','zhCN','耐力',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70374','zhCN','智力',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70375','zhCN','精神',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70376','zhCN','未知属性',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70377','zhCN','共',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70378','zhCN','近战攻击强度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70379','zhCN','远程攻击强度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70380','zhCN','护甲',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70381','zhCN','暴击',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70382','zhCN','防御',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70383','zhCN','未命中',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70384','zhCN','躲闪',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70385','zhCN','招架',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70386','zhCN','格挡',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70387','zhCN','盾牌格挡值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70388','zhCN','近战防御',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70389','zhCN','法术防御',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70390','zhCN','主手攻击伤害范围',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70391','zhCN','主手攻击伤害加成',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70392','zhCN','主手攻击速度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70393','zhCN','副手攻击伤害范围',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70394','zhCN','副手攻击伤害加成',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70395','zhCN','副手攻击速度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70396','zhCN','远程攻击伤害范围',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70397','zhCN','远程攻击伤害加成',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70398','zhCN','远程攻击速度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70399','zhCN','最小',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70400','zhCN','最大',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70401','zhCN','输出',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70402','zhCN','基础生命值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70403','zhCN','最大生命值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70404','zhCN','基础法力值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70405','zhCN','最大法力值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70406','zhCN','当前法力值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70407','zhCN','法术强度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70408','zhCN','每5秒恢复生命',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70409','zhCN','非施法状态:每5秒回复法力值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70410','zhCN','施法状态:每5秒回复法力值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70411','zhCN','急速',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70412','zhCN','命中',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70413','zhCN','专精',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70414','zhCN','物理 护甲穿透',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70415','zhCN','法术 护甲穿透',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70416','zhCN','%',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70417','zhCN','神圣',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70418','zhCN','火焰',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70419','zhCN','自然',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70420','zhCN','冰霜',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70421','zhCN','暗影',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70422','zhCN','奥术',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70423','zhCN','抗性',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70424','zhCN','指令状态',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70425','zhCN','跟随',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70426','zhCN','攻击',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70427','zhCN','停留',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70428','zhCN','重置',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70429','zhCN','完全停止',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70430','zhCN','跟随距离',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70431','zhCN','天赋',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70432','zhCN','机器人主职务',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70433','zhCN','机器人材料采集',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70434','zhCN','PvP 杀敌',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70435','zhCN','玩家',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70436','zhCN','已死亡 ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70437','zhCN',' 次',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70438','zhCN','%s (机器人)渐渐冷静了下来。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70439','zhCN','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70440','zhCN','你真的想冒险引起',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70441','zhCN','对你的注意?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70442','zhCN','<请投币>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70443','zhCN','你想吸引',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70444','zhCN','<试着发出邀请...>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70445','zhCN','你想雇佣',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70446','zhCN','<雇佣机器人>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70447','zhCN','机器人 装备 管理...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70448','zhCN','机器人 职责 管理...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70449','zhCN','机器人 队形 管理...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70450','zhCN','机器人 技能 管理...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70451','zhCN','机器人 天赋 管理...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70452','zhCN','使用消耗品、合剂等...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70453','zhCN','<创建队伍>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70454','zhCN','<创建队伍(所有机器人)>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70455','zhCN','<加入队伍>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70456','zhCN','<将所有机器人加入队伍>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70457','zhCN','<移出队伍>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70458','zhCN','跟着我!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70459','zhCN','原地守候!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70460','zhCN','停下来,什么也别做!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70461','zhCN','给我一些食物',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70462','zhCN','给我一些水',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70463','zhCN','召唤一个魔法餐桌!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70464','zhCN','帮我开个锁',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70465','zhCN','给我一颗治疗石',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70466','zhCN','召唤一个灵魂之井!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70467','zhCN','给你的武器重新上毒...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70468','zhCN','<选择毒药 (主手武器)>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70469','zhCN','<选择毒药 (副手武器)>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70470','zhCN','元素武器附魔...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70471','zhCN','<选择附魔 (主手武器)>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70472','zhCN','<选择附魔 (副手武器)>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70473','zhCN','取消你的变形形态',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70474','zhCN','<选择宠物类型>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70475','zhCN','你被解雇了!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70476','zhCN','你确定要解雇',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70477','zhCN','你可别后悔...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70478','zhCN','该死的,振作起来!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70479','zhCN','<职业介绍>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70480','zhCN','没事了',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70481','zhCN','距离',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70482','zhCN','返回',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70483','zhCN','<自动>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70484','zhCN','<解散宠物>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70485','zhCN','召唤随机宠物 (狡诈型)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70486','zhCN','召唤随机宠物 (残暴型)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70487','zhCN','召唤随机宠物 (坚韧型)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70488','zhCN','让我看看你的装备',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70489','zhCN','自动筛选可用装备...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70490','zhCN','主手武器...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70491','zhCN','副手武器...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70492','zhCN','远程武器...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70493','zhCN','圣物...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70494','zhCN','头部...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70495','zhCN','肩部...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70496','zhCN','胸部...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70497','zhCN','腰带...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70498','zhCN','腿部...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70499','zhCN','脚...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70500','zhCN','手腕...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70501','zhCN','手...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70502','zhCN','披风...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70503','zhCN','衬衣...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70504','zhCN','戒指1...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70505','zhCN','戒指2...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70506','zhCN','饰品1...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70507','zhCN','饰品2...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70508','zhCN','颈部...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70509','zhCN','卸下全部装备(退回到背包)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70510','zhCN','刷新机器人外观',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70511','zhCN','只有外观,无实际效果',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70512','zhCN','已装备',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70513','zhCN','没有可供选择的装备',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70514','zhCN','使用你的旧装备',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70515','zhCN','卸下这件装备',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70516','zhCN','额...我没有适合你的装备了...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70517','zhCN','收集材料',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70518','zhCN','技能状态...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70519','zhCN','管理可用技能...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70520','zhCN','使用 ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70521','zhCN','刷新',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70522','zhCN','伤害类技能...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70523','zhCN','控制类技能...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70524','zhCN','治疗类技能...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70525','zhCN','其他技能...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70526','zhCN',' 发出了一阵摩擦声,并开始跟随着 ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70527','zhCN','在他的雇主把他解雇之前, %s不能加入你的队伍。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70528','zhCN','在你到达60级以前, %s不会加入你们',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70529','zhCN','在你到达55级以前, %s不会加入你们',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70530','zhCN','在你到达40级以前, %s不会加入你们',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70531','zhCN','在你到达20级以前, %s不会加入你们',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70532','zhCN','你最多只能招募%u个机器人!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70533','zhCN','你没有足够的现金',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70534','zhCN','你最多只能招募%u位%u。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70535','zhCN','无法退还装备 %u (%s)! 无法解雇机器人!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70536','zhCN','当前设定',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70537','zhCN','攻击距离',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70538','zhCN','最小远程攻击距离...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70539','zhCN','最大远程攻击距离...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70540','zhCN','设定攻击距离',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70541','zhCN','移除增益魔法...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70542','zhCN','修正属性...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70543','zhCN','因为某些原因,无法卸下 %s 这件装备将发到你的邮箱。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70544','zhCN','坦克',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70545','zhCN','远程',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70546','zhCN','采矿',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70547','zhCN','草药',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70548','zhCN','剥皮',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70549','zhCN','工程学',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70550','zhCN','由于长时间未上线,已自动解除雇佣状态。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70551','zhCN','机器人系统已被禁用,请联系管理员。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70552','zhCN','%s 不能假如你的队伍,已经有雇主了:%s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70553','zhCN','%s 正在传送中,不能加入你的队伍',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70554','zhCN','守护',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70555','zhCN','灵猴',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70556','zhCN','雄鹰守护',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70557','zhCN','猎豹守护',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70558','zhCN','蝰蛇守护',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70559','zhCN','野兽守护',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70560','zhCN','豹群守护',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70561','zhCN','野性守护',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70562','zhCN','龙鹰守护',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70563','zhCN','无守护',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70564','zhCN','光环',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70565','zhCN','虔诚',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70566','zhCN','专注',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70567','zhCN','火焰抗性',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70568','zhCN','冰霜抗性',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70569','zhCN','暗影抗性',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70570','zhCN','惩戒',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70571','zhCN','十字军',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70572','zhCN','无光环',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70573','zhCN','减速药膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70574','zhCN','速效药膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70575','zhCN','致命药膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70576','zhCN','致伤药膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70577','zhCN','麻痹药膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70578','zhCN','麻醉药膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70579','zhCN','无',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70580','zhCN','火舌武器',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70581','zhCN','冰封武器',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70582','zhCN','风怒武器',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70583','zhCN','大地生命武器',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70584','zhCN','我需要你的服务。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70585','zhCN','你不能再雇佣更多的机器人了。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70586','zhCN','你希望雇佣',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70587','zhCN','现在正在忙着,请稍后再试。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70588','zhCN','很高兴和你进行交易。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70589','zhCN','战士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70590','zhCN','圣骑士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70591','zhCN','法师',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70592','zhCN','牧师',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70593','zhCN','术士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70594','zhCN','德鲁伊',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70595','zhCN','死亡骑士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70596','zhCN','盗贼',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70597','zhCN','萨满',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70598','zhCN','猎人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70599','zhCN','剑圣',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70600','zhCN','黑曜石毁灭者',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70601','zhCN','大法师',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70602','zhCN','恐惧魔王',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70603','zhCN','破法者',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70604','zhCN','黑暗游侠',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70605','zhCN','战士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70606','zhCN','圣骑士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70607','zhCN','法师',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70608','zhCN','牧师',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70609','zhCN','术士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70610','zhCN','德鲁伊',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70611','zhCN','死亡骑士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70612','zhCN','盗贼',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70613','zhCN','萨满',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70614','zhCN','猎人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70615','zhCN','剑圣',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70616','zhCN','黑曜石毁灭者',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70617','zhCN','大法师',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70618','zhCN','恐惧魔王',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70619','zhCN','破法者',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70620','zhCN','黑暗游侠',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70621','zhCN','男',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70622','zhCN','女',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70623','zhCN','人类',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70624','zhCN','兽人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70625','zhCN','矮人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70626','zhCN','暗夜精灵',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70627','zhCN','亡灵',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70628','zhCN','牛头人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70629','zhCN','侏儒',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70630','zhCN','地精',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70631','zhCN','血精灵',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70632','zhCN','德莱尼',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70633','zhCN','未知',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70634','zhCN','自动拾取',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70635','zhCN','|cff9d9d9d灰色|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70636','zhCN','|cffffffff白色|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70637','zhCN','|cff1eff00绿色|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70638','zhCN','|cff0070dd蓝色|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70639','zhCN','|cffa335ee紫色|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70640','zhCN','|cffff8000橙色|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70641','zhCN','参与行为',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70642','zhCN','|延迟攻击时间|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70643','zhCN','|延迟治疗时间|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70644','zhCN','|秒|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70645','zhCN','|副坦克|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70646','zhCN','|亡灵法师们|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70647','zhCN','|亡灵法师|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70648','zhCN','|攻击方向|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70649','zhCN','|正常|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70650','zhCN','|避免正面AOE|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70651','zhCN','|NIY|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70652','zhCN','|你确定这会奏效吗?最好是世界上最好的水....|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70653','zhCN','|看来你真的需要喝点淡水。|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70654','zhCN','|海女巫们|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70655','zhCN','|海女巫|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70656','zhCN','|每点伤害的法力|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70657','zhCN','|每点魔法的伤害|r',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
diff --git a/sql/Bot SQL/locales/zhTW/npc_text_locale.sql b/sql/Bot SQL/locales/zhTW/npc_text_locale.sql
new file mode 100644
index 0000000000000..62661d2b7187c
--- /dev/null
+++ b/sql/Bot SQL/locales/zhTW/npc_text_locale.sql
@@ -0,0 +1,343 @@
+DELETE FROM `npc_text_locale` WHERE `Locale`='zhTW' AND `ID` BETWEEN '70000' AND '71000';
+INSERT INTO `npc_text_locale` (`ID`, `Locale`, `Text0_0`, `Text0_1`, `Text1_0`, `Text1_1`, `Text2_0`, `Text2_1`, `Text3_0`, `Text3_1`, `Text4_0`, `Text4_1`, `Text5_0`, `Text5_1`, `Text6_0`, `Text6_1`, `Text7_0`, `Text7_1`)
+VALUES
+('70001','zhTW','我願意為你奉獻一切。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70002','zhTW','你需要什麼嗎?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70003','zhTW','凡人,通常情況下,我會立刻殺了你這混蛋!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70004','zhTW','<你看著這個黑曜石毀滅者。它看起來有點與眾不同,它並沒有因為你的傷害而消失,在仔細檢查過後,你注意到它的背部有一個小口。>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70005','zhTW','<毀滅者盯著你,發出低沉的咆哮。>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70006','zhTW','你驚訝嗎,凡人?作為一名納斯雷茲姆,我不得不尋求盟友,你看起來至少可以逗我開心。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70007','zhTW','現在怎麼樣了,凡人?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70008','zhTW','你就不能讓我一個人靜一靜嗎? <唉...>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70009','zhTW','現在如何?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70101','zhTW','|cffff3300劍聖|r$b|cffdd6600-=致敬魔獸爭霸III=-|r$B$B\\\"劍聖,以前是燃燒之刃家族的成員,現在是部落中的精銳戰士\".$B$B主要屬性:敏捷.$B$B疾風步.讓劍聖隱形,並在一段時間內移動得更快.當劍聖攻擊一個單位以打破隱身狀態時,他將造成額外的傷害.$B$B鏡像.製造劍聖幻象迷惑敵人,並驅散劍聖的所有魔法.$B$B爆擊(被動).有15%的機率在他的攻擊中造成致命的x2(x3,x4)倍的正常傷害.$B$B劍刃風暴. 給予魔法免疫並對周圍所有敵人造成傷害.$B$B',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70102','zhTW','|cff9900cc黑曜石毀滅者|r$b|cffdd6600-=致敬魔獸爭霸III=-|r$B$B\\\"黑曜石毀滅者,對魔法有著無法滿足的渴望\\\".$B$B高護甲,非常高的抵抗力,部分免疫魔法,隨著時間的推移失去法力\\並且不受益於被動法力再生效果,鎧甲,雙持魔杖,造成暗影法術傷害,沒有物理攻擊\\法術傷害加成:50%攻擊力+200% 智力增加魔杖傷害.$B$B吞噬魔法.從敵人身上驅散最多2個魔法效果,從盟友身上驅散最多2個魔法效果和最多2個詛咒,並在20碼範圍內傷害召喚單位.每次驅散效果回復20%法力和5%生命,7秒冷卻.$B$B暗影爆炸.強化攻擊,增加飛濺傷害.$B$B吸取法力.從隨機友方單位吸取所有法力(受施法者法力限制).$B$B補充法力.給周圍15碼範圍內的團隊和團隊成員通電,使其法力值達到最大值的1%,影響最多10個目標,冷卻3秒.$B$B再生光環.治療周圍15碼範圍內的團隊和團隊成員,使其生命值降低施法者法力上限的2%,最多影響10個目標,冷卻3秒.$B$B暗影護甲(被動).恢復相當於所受傷害百分比的法力值.$B$B',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70103','zhTW','|cff0000dd大魔導師|r$b|cffdd6600-=致敬魔獸爭霸III=-|r$B$B\\\"大法師,無法用言語來形容的暴雪親兒子\\\".$B$B法術傷害降低35%,部分免疫控制效果,布甲,造成火/冰法術傷害,無物理攻擊,法術能量加成:100%智力.主要屬性:智力.$B$B暴風雪!典型的暴風雪,只是稍微強大一點,6秒冷卻.召喚水元素攻擊大法師的敵人1分鐘,冷卻20秒.$B$B光輝光環.增加10%的法力上限,大大提高40碼範圍內己方和隊友的法力回復.$B$B大規模傳送.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70104','zhTW','|cff9900cc恐懼魔王|r$b|cffdd6600-=致敬魔獸爭霸III=-|r$B$B\\\"恐懼魔王,擁有黑暗力量和精神控制力的強大惡魔\\\".$B$B高護甲,高抵抗,部分免疫控制效果,所受傷害加速法術能量,鎧甲,造成近戰/暗影法術傷害,對癱瘓目標造成額外傷害,法術能量加成:200%力量.主要屬性:力量.$B$B腐蝕蟲群.派一大群蝙蝠與混亂魔法結合,對面前錐形範圍的敵人造成傷害,無法暴擊,冷卻10秒.$B$B沉睡.使敵方目標睡眠60秒,並允許下次對該目標的物理攻擊忽視護甲,造成的直接傷害將喚醒目標,冷卻6秒.$B$B吸血鬼的光環.增加5%的物理暴擊傷害,治療40碼範圍內的團隊和突襲成員受到近戰物理攻擊和腐肉群傷害的百分比(驚懼領主100%,其他人25%),沒有威脅.$B$B召喚地獄惡魔.召喚一個來自天空的惡魔,惡魔對魔法有很強的抵抗力並且持續180秒,180秒的冷卻時間.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70105','zhTW','|cff0000dd破法者|r$b|cffdd6600-=致敬魔獸爭霸III=-|r$B$B\\\"破法者,一個被訓練來破壞和扭曲魔法能量的精靈戰士\\\".$B$B法術傷害減少75%,部分免疫控制效果,護甲降低-30%,鎧甲,近戰/秘法傷害,法術能量加成:200%力量.主要屬性:力量.$B$B魔法偷取.從敵人身上偷取一個有益的法術並施於附近的盟友,或者從盟友身上移除一個消極的法術並施於附近的敵人,影響魔法和詛咒效果,3秒冷卻.$B$B能量竊取(被動).成功的近戰攻擊消耗目標的法力,相當於造成的傷害(由法術力增加),造成秘法傷害.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70106','zhTW','|cff9900cc黑暗遊俠|r$b|cffdd6600-=致敬魔獸爭霸III=-|r$B$B\\\"黑暗遊俠,強行起死回生的奎爾薩拉斯的前遊俠\\\".$B$B法術傷害減少35%,不死系,部分免疫控制效果,皮甲/布甲,造成物理/暗影法術傷害,不產生威脅,法術力量加成:50%智力.主要屬性:敏捷.$B$B沉默.使一個敵人和最多4個附近目標沉默8秒,15秒冷卻.$B$B黑箭.射出一支詛咒之箭,造成150%武器傷害和額外的暗影傷害.如果受影響的目標死於黑暗遊俠的傷害,黑暗僕從將從屍體中產生(最多5個僕從,持續時間80秒,只對人形、野獸和龍類有效).如果目標生命低於20%,造成5倍傷害.$B$B吸取生命.每秒吸取一個敵人的生命值,持續5秒,治療黑暗遊俠消耗生命值的200%.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70201','zhTW','並不總是有人願意為錢去賣命!',NULL,'我們的服務遍布艾澤拉斯的每個角落!',NULL,'很高興為您服務,我這里有最能打的傢伙!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70202','zhTW','雇傭兵向來十分搶手;以下是現在你能雇傭的人:',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70203','zhTW','雇傭兵向來十分搶手;以下是現在你能雇傭的人:',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70204','zhTW','看來現在沒有空閒的雇傭兵,你過些時候再來看看吧。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70300','zhTW','去死!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70301','zhTW','正在復活你!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70302','zhTW','正在復活 ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70303','zhTW','你的機器人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70304','zhTW','的機器人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70305','zhTW','我現在還不能製造魔法水',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70306','zhTW','我現在還不能製造魔法食物',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70307','zhTW','我還不能那樣做',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70308','zhTW','給你...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70309','zhTW','已禁用',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70310','zhTW','還沒有準備好',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70311','zhTW','無效的物品類型',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70312','zhTW','失敗',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70313','zhTW','完成',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70314','zhTW','我沒有變形',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70315','zhTW','我沒有治療石',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70316','zhTW','我還不能製造治療石',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70317','zhTW','搞什麼鬼,我沒有鎖可開!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70318','zhTW','我的技能等級還不夠高',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70319','zhTW','正在將我的天賦切換為',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70320','zhTW','武器',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70321','zhTW','狂怒',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70322','zhTW','防護',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70323','zhTW','懲戒',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70324','zhTW','野獸控制',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70325','zhTW','射擊',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70326','zhTW','生存',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70327','zhTW','刺殺',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70328','zhTW','戰鬥',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70329','zhTW','敏銳',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70330','zhTW','戒律',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70331','zhTW','神聖',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70332','zhTW','暗影',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70333','zhTW','鮮血',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70334','zhTW','冰霜',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70335','zhTW','邪惡',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70336','zhTW','元素',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70337','zhTW','增強',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70338','zhTW','恢復',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70339','zhTW','秘法',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70340','zhTW','火焰',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70341','zhTW','痛苦',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70342','zhTW','惡魔學識',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70343','zhTW','毀滅',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70344','zhTW','平衡',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70345','zhTW','野性戰鬥',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70346','zhTW','未知',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70347','zhTW','滾開! 懦夫。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70348','zhTW',' 不方便。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70349','zhTW','我不會把我寶貴的時間浪費在這些瑣事上!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70350','zhTW','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70351','zhTW','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70352','zhTW','NIY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70353','zhTW','我準備好了',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70354','zhTW','走開!我已經有雇主了!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70355','zhTW','未知',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70356','zhTW','在你身上!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70357','zhTW','在我身上!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70358','zhTW',' 對 ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70359','zhTW',' 已使用!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70360','zhTW','坦克機器人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70361','zhTW','職業',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70362','zhTW','玩家',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70363','zhTW','雇主',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70364','zhTW','無',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70365','zhTW','級別',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70366','zhTW','天賦',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70367','zhTW','被動',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70368','zhTW','隱藏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70369','zhTW','已知',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70370','zhTW','能力',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70371','zhTW','力量',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70372','zhTW','敏捷',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70373','zhTW','耐力',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70374','zhTW','智力',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70375','zhTW','精神',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70376','zhTW','未知屬性',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70377','zhTW','共',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70378','zhTW','近戰攻擊強度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70379','zhTW','遠程攻擊強度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70380','zhTW','護甲',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70381','zhTW','暴擊',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70382','zhTW','防禦',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70383','zhTW','未命中',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70384','zhTW','躲閃',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70385','zhTW','招架',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70386','zhTW','格擋',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70387','zhTW','盾牌格擋值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70388','zhTW','近戰防禦',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70389','zhTW','法術防禦',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70390','zhTW','主手攻擊傷害範圍',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70391','zhTW','主手攻擊傷害加成',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70392','zhTW','主手攻擊速度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70393','zhTW','副手攻擊傷害範圍',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70394','zhTW','副手攻擊傷害加成',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70395','zhTW','副手攻擊速度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70396','zhTW','遠程攻擊傷害範圍',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70397','zhTW','遠程攻擊傷害加成',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70398','zhTW','遠程攻擊速度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70399','zhTW','最小',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70400','zhTW','最大',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70401','zhTW','輸出',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70402','zhTW','基礎生命值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70403','zhTW','最大生命值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70404','zhTW','基礎法力值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70405','zhTW','最大法力值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70406','zhTW','當前法力值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70407','zhTW','法術強度',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70408','zhTW','每5秒恢復生命',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70409','zhTW','非施法狀態:每5秒回復法力值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70410','zhTW','施法狀態:每5秒回復法力值',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70411','zhTW','急速',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70412','zhTW','命中',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70413','zhTW','專精',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70414','zhTW','物理 護甲穿透',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70415','zhTW','法術 護甲穿透',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70416','zhTW','%',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70417','zhTW','神聖',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70418','zhTW','火焰',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70419','zhTW','自然',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70420','zhTW','冰霜',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70421','zhTW','暗影',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70422','zhTW','秘法',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70423','zhTW','抗性',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70424','zhTW','指令狀態',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70425','zhTW','跟隨',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70426','zhTW','攻擊',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70427','zhTW','停留',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70428','zhTW','重置',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70429','zhTW','完全停止',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70430','zhTW','跟隨距離',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70431','zhTW','天賦',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70432','zhTW','機器人主職務',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70433','zhTW','機器人材料採集',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70434','zhTW','PvP 殺敵',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70435','zhTW','玩家',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70436','zhTW','已死亡 ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70437','zhTW',' 次',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70438','zhTW','%s (機器人)漸漸冷靜了下來。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70439','zhTW','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70440','zhTW','你真的想冒險引起',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70441','zhTW','對你的注意?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70442','zhTW','<請投幣>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70443','zhTW','你想吸引',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70444','zhTW','<試著發出邀請...>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70445','zhTW','你想雇傭',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70446','zhTW','<雇傭機器人>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70447','zhTW','機器人 裝備 管理...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70448','zhTW','機器人 職責 管理...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70449','zhTW','機器人 隊形 管理...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70450','zhTW','機器人 技能 管理...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70451','zhTW','機器人 天賦 管理...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70452','zhTW','使用消耗品、合劑等...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70453','zhTW','<創建隊伍>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70454','zhTW','<創建隊伍(所有機器人)>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70455','zhTW','<加入隊伍>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70456','zhTW','<將所有機器人加入隊伍>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70457','zhTW','<移出隊伍>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70458','zhTW','跟著我!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70459','zhTW','原地守候!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70460','zhTW','停下來,什麼也別做!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70461','zhTW','給我一些食物',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70462','zhTW','給我一些水',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70463','zhTW','召喚一個魔法餐桌!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70464','zhTW','幫我開個鎖',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70465','zhTW','給我一顆治療石',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70466','zhTW','召喚一個靈魂之井!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70467','zhTW','給你的武器重新上毒...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70468','zhTW','<選擇毒藥 (主手武器)>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70469','zhTW','<選擇毒藥 (副手武器)>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70470','zhTW','元素武器附魔...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70471','zhTW','<選擇附魔 (主手武器)>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70472','zhTW','<選擇附魔 (副手武器)>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70473','zhTW','取消你的變形形態',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70474','zhTW','<選擇寵物類型>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70475','zhTW','你被解雇了!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70476','zhTW','你確定要解雇',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70477','zhTW','你可別後悔...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70478','zhTW','該死的,振作起來!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70479','zhTW','<職業介紹>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70480','zhTW','沒事了',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70481','zhTW','距離',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70482','zhTW','返回',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70483','zhTW','<自動>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70484','zhTW','<解散寵物>',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70485','zhTW','召喚隨機寵物 (狡詐型)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70486','zhTW','召喚隨機寵物 (殘暴型)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70487','zhTW','召喚隨機寵物 (堅韌型)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70488','zhTW','讓我看看你的裝備',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70489','zhTW','自動篩選可用裝備...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70490','zhTW','主手武器...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70491','zhTW','副手武器...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70492','zhTW','遠程武器...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70493','zhTW','聖物...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70494','zhTW','頭部...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70495','zhTW','肩部...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70496','zhTW','胸部...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70497','zhTW','腰帶...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70498','zhTW','腿部...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70499','zhTW','腳...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70500','zhTW','手腕...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70501','zhTW','手...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70502','zhTW','披風...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70503','zhTW','襯衣...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70504','zhTW','戒指1...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70505','zhTW','戒指2...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70506','zhTW','飾品1...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70507','zhTW','飾品2...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70508','zhTW','頸部...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70509','zhTW','卸下全部裝備(退回到背包)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70510','zhTW','刷新機器人外觀',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70511','zhTW','只有外觀,無實際效果',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70512','zhTW','已裝備',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70513','zhTW','沒有可供選擇的裝備',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70514','zhTW','使用你的舊裝備',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70515','zhTW','卸下這件裝備',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70516','zhTW','額...我沒有適合你的裝備了...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70517','zhTW','收集材料',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70518','zhTW','技能狀態...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70519','zhTW','管理可用技能...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70520','zhTW','使用 ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70521','zhTW','刷新',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70522','zhTW','傷害類技能...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70523','zhTW','控制類技能...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70524','zhTW','治療類技能...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70525','zhTW','其他技能...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70526','zhTW',' 發出了一陣摩擦聲,並開始跟隨著 ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70527','zhTW','在他的雇主把他解雇之前, %s不能加入你的隊伍。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70528','zhTW','在你到達60級以前, %s不會加入你們',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70529','zhTW','在你到達55級以前, %s不會加入你們',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70530','zhTW','在你到達40級以前, %s不會加入你們',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70531','zhTW','在你到達20級以前, %s不會加入你們',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70532','zhTW','你最多只能招募%u個機器人!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70533','zhTW','你沒有足夠的現金',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70534','zhTW','你最多只能招募%u位%u。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70535','zhTW','無法退還裝備 %u (%s)! 無法解雇機器人!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70536','zhTW','當前設定',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70537','zhTW','攻擊距離',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70538','zhTW','最小遠程攻擊距離...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70539','zhTW','最大遠程攻擊距離...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70540','zhTW','設定攻擊距離',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70541','zhTW','移除增益魔法...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70542','zhTW','修正屬性...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70543','zhTW','因為某些原因,無法卸下 %s 這件裝備將發到你的郵箱。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70544','zhTW','坦克',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70545','zhTW','遠程',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70546','zhTW','採礦',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70547','zhTW','草藥',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70548','zhTW','剝皮',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70549','zhTW','工程學',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70550','zhTW','由於長時間未上線,已自動解除雇傭狀態。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70551','zhTW','機器人系統已被停用,請聯系管理員。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70552','zhTW','%s 不能假如你的隊伍,已經有雇主了:%s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70553','zhTW','%s 正在傳送中,不能加入你的隊伍',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70554','zhTW','守護',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70555','zhTW','靈猴',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70556','zhTW','雄鷹守護',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70557','zhTW','獵豹守護',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70558','zhTW','蝮蛇守護',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70559','zhTW','野獸守護',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70560','zhTW','豹群守護',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70561','zhTW','野性守護',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70562','zhTW','龍鷹守護',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70563','zhTW','無守護',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70564','zhTW','光環',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70565','zhTW','虔誠',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70566','zhTW','專注',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70567','zhTW','火焰抗性',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70568','zhTW','冰霜抗性',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70569','zhTW','暗影抗性',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70570','zhTW','懲戒',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70571','zhTW','十字軍',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70572','zhTW','無光環',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70573','zhTW','減速藥膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70574','zhTW','速效藥膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70575','zhTW','致命藥膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70576','zhTW','致傷藥膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70577','zhTW','麻痹藥膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70578','zhTW','麻醉藥膏',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70579','zhTW','無',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70580','zhTW','火舌武器',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70581','zhTW','冰封武器',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70582','zhTW','風怒武器',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70583','zhTW','大地生命武器',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70584','zhTW','我需要你的服務。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70585','zhTW','你不能再雇傭更多的機器人了。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70586','zhTW','你希望雇傭',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70587','zhTW','現在正在忙著,請稍後再試。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70588','zhTW','很高興和你進行交易。',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70589','zhTW','戰士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70590','zhTW','聖騎士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70591','zhTW','法師',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70592','zhTW','牧師',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70593','zhTW','術士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70594','zhTW','德魯伊',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70595','zhTW','死亡騎士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70596','zhTW','盜賊',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70597','zhTW','薩滿',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70598','zhTW','獵人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70599','zhTW','劍聖',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70600','zhTW','黑曜石毀滅者',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70601','zhTW','大法師',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70602','zhTW','恐懼魔王',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70603','zhTW','破法者',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70604','zhTW','黑暗遊俠',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70605','zhTW','戰士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70606','zhTW','聖騎士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70607','zhTW','法師',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70608','zhTW','牧師',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70609','zhTW','術士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70610','zhTW','德魯伊',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70611','zhTW','死亡騎士',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70612','zhTW','盜賊',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70613','zhTW','薩滿',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70614','zhTW','獵人',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70615','zhTW','劍聖',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70616','zhTW','黑曜石毀滅者',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70617','zhTW','大法師',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70618','zhTW','恐懼魔王',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70619','zhTW','破法者',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
+('70620','zhTW','黑暗遊俠',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
diff --git a/sql/Bot SQL/merge_sqls_auth_unix.sh b/sql/Bot SQL/merge_sqls_auth_unix.sh
new file mode 100644
index 0000000000000..a237789bd2945
--- /dev/null
+++ b/sql/Bot SQL/merge_sqls_auth_unix.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+cat updates/auth/*.sql > ALL_auth.sql
diff --git a/sql/Bot SQL/merge_sqls_auth_windows.bat b/sql/Bot SQL/merge_sqls_auth_windows.bat
new file mode 100644
index 0000000000000..1bc1c01450d39
--- /dev/null
+++ b/sql/Bot SQL/merge_sqls_auth_windows.bat
@@ -0,0 +1 @@
+copy /a updates\auth\*.sql /b ALL_auth.sql
diff --git a/sql/Bot SQL/merge_sqls_characters_unix.sh b/sql/Bot SQL/merge_sqls_characters_unix.sh
new file mode 100644
index 0000000000000..40f062d933d7c
--- /dev/null
+++ b/sql/Bot SQL/merge_sqls_characters_unix.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+cat characters_bots.sql > ALL_characters.sql
+cat updates/characters/*.sql >> ALL_characters.sql
diff --git a/sql/Bot SQL/merge_sqls_characters_windows.bat b/sql/Bot SQL/merge_sqls_characters_windows.bat
new file mode 100644
index 0000000000000..45cf6a33e95dc
--- /dev/null
+++ b/sql/Bot SQL/merge_sqls_characters_windows.bat
@@ -0,0 +1 @@
+copy /a characters_bots.sql + /a updates\characters\*.sql /b ALL_characters.sql
diff --git a/sql/Bot SQL/merge_sqls_world_unix.sh b/sql/Bot SQL/merge_sqls_world_unix.sh
new file mode 100644
index 0000000000000..ab7b2b1f19aa0
--- /dev/null
+++ b/sql/Bot SQL/merge_sqls_world_unix.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+cat *world_*.sql > ALL_world.sql
+cat updates/world/*.sql >> ALL_world.sql
diff --git a/sql/Bot SQL/merge_sqls_world_windows.bat b/sql/Bot SQL/merge_sqls_world_windows.bat
new file mode 100644
index 0000000000000..26b87e5632599
--- /dev/null
+++ b/sql/Bot SQL/merge_sqls_world_windows.bat
@@ -0,0 +1 @@
+copy /a *world_*.sql + /a updates\world\*.sql /b ALL_world.sql
diff --git a/sql/Bot SQL/updates/auth/2021_09_14_00_rbac_permissions.sql b/sql/Bot SQL/updates/auth/2021_09_14_00_rbac_permissions.sql
new file mode 100644
index 0000000000000..5a9cb73097090
--- /dev/null
+++ b/sql/Bot SQL/updates/auth/2021_09_14_00_rbac_permissions.sql
@@ -0,0 +1,39 @@
+--
+SET @PERMISSION_START = 70001;
+SET @PERMISSION_END = 70033;
+
+DELETE FROM `rbac_permissions` WHERE id BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_permissions` (`id`,`name`) VALUES
+('70001','Command: npcbot'),
+('70002','Command: npcbot add'),
+('70003','Command: npcbot remove'),
+('70004','Command: npcbot spawn'),
+('70005','Command: npcbot move'),
+('70006','Command: npcbot delete'),
+('70007','Command: npcbot lookup'),
+('70008','Command: npcbot revive'),
+('70009','Command: npcbot reloadconfig'),
+('70010','Command: npcbot info'),
+('70011','Command: npcbot hide'),
+('70012','Command: npcbot unhide'),
+('70013','Command: npcbot recall'),
+('70014','Command: npcbot kill'),
+('70015','Command: npcbot debug raid'),
+('70016','Command: npcbot debug mount'),
+('70017','Command: npcbot debug spellvisual'),
+('70018','Command: npcbot debug states'),
+('70019','Command: npcbot toggle flags'),
+('70020','Command: npcbot set faction'),
+('70021','Command: npcbot set owner'),
+('70022','Command: npcbot set spec'),
+('70023','Command: npcbot command standstill'),
+('70024','Command: npcbot command stopfully'),
+('70025','Command: npcbot command follow'),
+('70026','Command: npcbot distance attack short'),
+('70027','Command: npcbot distance attack long'),
+('70028','Command: npcbot distance attack'),
+('70029','Command: npcbot distance'),
+('70030','Command: npcbot order cast'),
+('70031','Command: npcbot vehicle eject'),
+('70032','Command: npcbot dump load'),
+('70033','Command: npcbot dump write');
diff --git a/sql/Bot SQL/updates/auth/2021_09_14_01_rbac_linked_permissions.sql b/sql/Bot SQL/updates/auth/2021_09_14_01_rbac_linked_permissions.sql
new file mode 100644
index 0000000000000..555828ce0d320
--- /dev/null
+++ b/sql/Bot SQL/updates/auth/2021_09_14_01_rbac_linked_permissions.sql
@@ -0,0 +1,39 @@
+--
+SET @PERMISSION_START = 70001;
+SET @PERMISSION_END = 70033;
+
+DELETE FROM `rbac_linked_permissions` WHERE linkedId BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES
+('199','70001'),
+('197','70002'),
+('197','70003'),
+('197','70004'),
+('197','70005'),
+('197','70006'),
+('197','70007'),
+('197','70008'),
+('197','70009'),
+('199','70010'),
+('199','70011'),
+('199','70012'),
+('199','70013'),
+('199','70014'),
+('197','70015'),
+('197','70016'),
+('197','70017'),
+('197','70018'),
+('197','70019'),
+('197','70020'),
+('197','70021'),
+('197','70022'),
+('199','70023'),
+('199','70024'),
+('199','70025'),
+('199','70026'),
+('199','70027'),
+('199','70028'),
+('199','70029'),
+('199','70030'),
+('199','70031'),
+('196','70032'),
+('196','70033');
diff --git a/sql/Bot SQL/updates/auth/2021_12_29_00_rbac_permissions.sql b/sql/Bot SQL/updates/auth/2021_12_29_00_rbac_permissions.sql
new file mode 100644
index 0000000000000..30491065a6628
--- /dev/null
+++ b/sql/Bot SQL/updates/auth/2021_12_29_00_rbac_permissions.sql
@@ -0,0 +1,7 @@
+--
+SET @PERMISSION_START = 70034;
+SET @PERMISSION_END = 70034;
+
+DELETE FROM `rbac_permissions` WHERE id BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_permissions` (`id`,`name`) VALUES
+('70034','Command: npcbot spawned');
diff --git a/sql/Bot SQL/updates/auth/2021_12_29_01_rbac_linked_permissions.sql b/sql/Bot SQL/updates/auth/2021_12_29_01_rbac_linked_permissions.sql
new file mode 100644
index 0000000000000..5b960ef797bdb
--- /dev/null
+++ b/sql/Bot SQL/updates/auth/2021_12_29_01_rbac_linked_permissions.sql
@@ -0,0 +1,7 @@
+--
+SET @PERMISSION_START = 70034;
+SET @PERMISSION_END = 70034;
+
+DELETE FROM `rbac_linked_permissions` WHERE linkedId BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES
+('196','70034');
diff --git a/sql/Bot SQL/updates/auth/2022_06_24_00_rbac_permissions.sql b/sql/Bot SQL/updates/auth/2022_06_24_00_rbac_permissions.sql
new file mode 100644
index 0000000000000..916767c49b9fc
--- /dev/null
+++ b/sql/Bot SQL/updates/auth/2022_06_24_00_rbac_permissions.sql
@@ -0,0 +1,7 @@
+--
+SET @PERMISSION_START = 70035;
+SET @PERMISSION_END = 70035;
+
+DELETE FROM `rbac_permissions` WHERE id BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_permissions` (`id`,`name`) VALUES
+('70035','Command: npcbot command walk');
diff --git a/sql/Bot SQL/updates/auth/2022_06_24_01_rbac_linked_permissions.sql b/sql/Bot SQL/updates/auth/2022_06_24_01_rbac_linked_permissions.sql
new file mode 100644
index 0000000000000..a62f6925d7951
--- /dev/null
+++ b/sql/Bot SQL/updates/auth/2022_06_24_01_rbac_linked_permissions.sql
@@ -0,0 +1,7 @@
+--
+SET @PERMISSION_START = 70035;
+SET @PERMISSION_END = 70035;
+
+DELETE FROM `rbac_linked_permissions` WHERE linkedId BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES
+('199','70035');
diff --git a/sql/Bot SQL/updates/auth/2022_07_04_00_rbac_permissions.sql b/sql/Bot SQL/updates/auth/2022_07_04_00_rbac_permissions.sql
new file mode 100644
index 0000000000000..deac7ed3e294c
--- /dev/null
+++ b/sql/Bot SQL/updates/auth/2022_07_04_00_rbac_permissions.sql
@@ -0,0 +1,7 @@
+--
+SET @PERMISSION_START = 70036;
+SET @PERMISSION_END = 70036;
+
+DELETE FROM `rbac_permissions` WHERE id BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_permissions` (`id`,`name`) VALUES
+('70036','Command: npcbot createnew');
diff --git a/sql/Bot SQL/updates/auth/2022_07_04_01_rbac_linked_permissions.sql b/sql/Bot SQL/updates/auth/2022_07_04_01_rbac_linked_permissions.sql
new file mode 100644
index 0000000000000..dac351bef17d6
--- /dev/null
+++ b/sql/Bot SQL/updates/auth/2022_07_04_01_rbac_linked_permissions.sql
@@ -0,0 +1,7 @@
+--
+SET @PERMISSION_START = 70036;
+SET @PERMISSION_END = 70036;
+
+DELETE FROM `rbac_linked_permissions` WHERE linkedId BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES
+('196','70036');
diff --git a/sql/Bot SQL/updates/auth/2022_11_30_00_rbac_permissions.sql b/sql/Bot SQL/updates/auth/2022_11_30_00_rbac_permissions.sql
new file mode 100644
index 0000000000000..9a02a53a5d13c
--- /dev/null
+++ b/sql/Bot SQL/updates/auth/2022_11_30_00_rbac_permissions.sql
@@ -0,0 +1,7 @@
+--
+SET @PERMISSION_START = 70037;
+SET @PERMISSION_END = 70037;
+
+DELETE FROM `rbac_permissions` WHERE id BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_permissions` (`id`,`name`) VALUES
+('70037','Command: npcbot sendto');
diff --git a/sql/Bot SQL/updates/auth/2022_11_30_rbac_linked_permissions.sql b/sql/Bot SQL/updates/auth/2022_11_30_rbac_linked_permissions.sql
new file mode 100644
index 0000000000000..840f9898f3ff8
--- /dev/null
+++ b/sql/Bot SQL/updates/auth/2022_11_30_rbac_linked_permissions.sql
@@ -0,0 +1,7 @@
+--
+SET @PERMISSION_START = 70037;
+SET @PERMISSION_END = 70037;
+
+DELETE FROM `rbac_linked_permissions` WHERE linkedId BETWEEN @PERMISSION_START AND @PERMISSION_END;
+INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES
+('199','70037');
diff --git a/sql/Bot SQL/updates/characters/2020_05_15_characters_npcbot_NPCBots_4.7.8a-4.7.27a.sql b/sql/Bot SQL/updates/characters/2020_05_15_characters_npcbot_NPCBots_4.7.8a-4.7.27a.sql
new file mode 100644
index 0000000000000..ab44f6517579e
--- /dev/null
+++ b/sql/Bot SQL/updates/characters/2020_05_15_characters_npcbot_NPCBots_4.7.8a-4.7.27a.sql
@@ -0,0 +1 @@
+ALTER TABLE `characters_npcbot` ADD `spec` tinyint(3) unsigned NOT NULL DEFAULT '1' AFTER `roles`;
diff --git a/sql/Bot SQL/updates/characters/2020_06_21_characters_npcbot_43fceb98.sql b/sql/Bot SQL/updates/characters/2020_06_21_characters_npcbot_43fceb98.sql
new file mode 100644
index 0000000000000..368e5a977f608
--- /dev/null
+++ b/sql/Bot SQL/updates/characters/2020_06_21_characters_npcbot_43fceb98.sql
@@ -0,0 +1,172 @@
+DROP TEMPORARY TABLE IF EXISTS `npcbot_extras_temp`;
+
+CREATE TEMPORARY TABLE `npcbot_extras_temp` (
+ `entry` MEDIUMINT(8) UNSIGNED NOT NULL,
+ `class` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1',
+ PRIMARY KEY (`entry`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8;
+
+INSERT INTO `npcbot_extras_temp` (`entry`,`class`) VALUES
+('70001','1'),('70002','1'),('70003','1'),('70004','1'),('70005','1'),
+('70006','1'),('70007','1'),('70008','1'),('70009','1'),('70010','1'),
+('70011','1'),('70012','1'),('70013','1'),('70014','1'),('70015','1'),
+('70016','1'),('70017','1'),('70018','1'),('70019','1'),('70020','1'),
+('70021','1'),('70022','1'),('70023','1'),('70024','1'),('70025','1'),
+('70026','1'),('70027','1'),('70028','1'),('70029','1'),('70030','1'),
+('70031','1'),('70032','1'),('70033','1'),('70034','1'),('70035','1'),
+('70036','1'),('70037','1'),('70038','1'),('70051','2'),('70052','2'),
+('70053','2'),('70054','2'),('70055','2'),('70056','2'),('70057','2'),
+('70058','2'),('70059','2'),('70060','2'),('70061','2'),('70062','2'),
+('70063','2'),('70064','2'),('70065','2'),('70066','2'),('70067','2'),
+('70068','2'),('70069','2'),('70070','2'),('70071','2'),('70072','2'),
+('70073','2'),('70074','2'),('70101','3'),('70102','3'),('70103','3'),
+('70104','3'),('70105','3'),('70106','3'),('70107','3'),('70108','3'),
+('70109','3'),('70110','3'),('70111','3'),('70112','3'),('70113','3'),
+('70114','3'),('70115','3'),('70116','3'),('70117','3'),('70118','3'),
+('70119','3'),('70120','3'),('70121','3'),('70122','3'),('70123','3'),
+('70124','3'),('70125','3'),('70126','3'),('70127','3'),('70128','3'),
+('70129','3'),('70130','3'),('70131','3'),('70132','3'),('70133','3'),
+('70134','3'),('70135','3'),('70136','3'),('70137','3'),('70138','3'),
+('70139','3'),('70151','4'),('70152','4'),('70153','4'),('70154','4'),
+('70155','4'),('70156','4'),('70157','4'),('70158','4'),('70159','4'),
+('70160','4'),('70161','4'),('70162','4'),('70163','4'),('70164','4'),
+('70165','4'),('70166','4'),('70167','4'),('70168','4'),('70169','4'),
+('70170','4'),('70171','4'),('70172','4'),('70173','4'),('70174','4'),
+('70175','4'),('70176','4'),('70177','4'),('70178','4'),('70179','4'),
+('70180','4'),('70181','4'),('70201','5'),('70202','5'),('70203','5'),
+('70204','5'),('70205','5'),('70206','5'),('70207','5'),('70208','5'),
+('70209','5'),('70210','5'),('70211','5'),('70212','5'),('70213','5'),
+('70214','5'),('70215','5'),('70216','5'),('70217','5'),('70218','5'),
+('70219','5'),('70220','5'),('70221','5'),('70222','5'),('70223','5'),
+('70224','5'),('70225','5'),('70226','5'),('70227','5'),('70228','5'),
+('70229','5'),('70230','5'),('70231','5'),('70232','5'),('70233','5'),
+('70234','5'),('70235','5'),('70236','5'),('70237','5'),('70238','5'),
+('70239','5'),('70240','5'),('70251','7'),('70252','7'),('70253','7'),
+('70254','7'),('70255','7'),('70256','7'),('70257','7'),('70258','7'),
+('70259','7'),('70260','7'),('70261','7'),('70265','7'),('70267','7'),
+('70268','7'),('70301','8'),('70302','8'),('70303','8'),('70304','8'),
+('70305','8'),('70306','8'),('70307','8'),('70308','8'),('70309','8'),
+('70310','8'),('70311','8'),('70312','8'),('70313','8'),('70314','8'),
+('70315','8'),('70316','8'),('70317','8'),('70318','8'),('70319','8'),
+('70320','8'),('70321','8'),('70322','8'),('70323','8'),('70324','8'),
+('70325','8'),('70326','8'),('70327','8'),('70328','8'),('70329','8'),
+('70330','8'),('70331','8'),('70332','8'),('70333','8'),('70334','8'),
+('70335','8'),('70336','8'),('70351','9'),('70352','9'),('70353','9'),
+('70354','9'),('70355','9'),('70356','9'),('70357','9'),('70358','9'),
+('70359','9'),('70360','9'),('70361','9'),('70362','9'),('70363','9'),
+('70364','9'),('70365','9'),('70366','9'),('70367','9'),('70368','9'),
+('70369','9'),('70370','9'),('70371','9'),('70372','9'),('70373','9'),
+('70374','9'),('70375','9'),('70376','9'),('70377','9'),('70401','11'),
+('70402','11'),('70403','11'),('70404','11'),('70405','11'),('70406','11'),
+('70407','11'),('70408','11'),('70409','11'),('70410','11'),('70411','11'),
+('70412','11'),('70413','11'),('70414','11'),('70415','11'),('70416','11'),
+('70417','11'),('70418','11'),('70451','6'),('70452','6'),('70453','6'),
+('70454','6'),('70455','6'),('70456','6'),('70457','6'),('70458','6'),
+('70459','6'),('70460','6'),('70461','6'),('70462','6'),('70463','6'),
+('70464','6'),('70465','6'),('70501','0'),('70502','0'),('70503','0'),
+('70504','0'),('70505','0'),('70506','0'),('70507','0'),('70508','0'),
+('70509','0'),('70510','0'),('70511','0'),('70512','0'),('70513','0'),
+('70514','0'),('70515','0'),('70516','0'),('70517','0'),('70518','0'),
+('70519','0'),('70520','0'),('70521','0'),('70522','0'),('70523','0'),
+('70524','0'),('70525','0'),('70526','0'),('70527','0'),('70528','0'),
+('70529','0'),('70530','0'),('70531','0'),('70532','0'),('70533','0'),
+('70534','0'),('70535','0'),('70536','0'),('70537','0'),('70538','0'),
+('70542','0'),('70543','0'),('70544','0'),('70545','0'),('70551','12'),
+('70552','12'),('70553','13'),('70554','13'),('70555','14'),('70556','0'),
+('70557','15'),('70558','15'),('70559','15'),('70560','15'),('70561','15'),
+('70562','0'),('70563','16'),('70564','16'),('70565','16'),('70566','16'),
+('70567','16'),('70568','17'),('70569','17'),('70570','17'),('70571','17'),
+('70572','17'),('70573','0'),('70574','0');
+
+/*!50003 DROP PROCEDURE IF EXISTS `sp__update_specs_2020_06_21`*/;
+
+DELIMITER ;;
+
+/*!50003 CREATE*/
+/*!50003 PROCEDURE `sp__update_specs_2020_06_21`()
+BEGIN
+
+DECLARE CLASS_WARRIOR INT DEFAULT 1;
+DECLARE CLASS_PALADIN INT DEFAULT 2;
+DECLARE CLASS_HUNTER INT DEFAULT 3;
+DECLARE CLASS_ROGUE INT DEFAULT 4;
+DECLARE CLASS_PRIEST INT DEFAULT 5;
+DECLARE CLASS_DEATH_KNIGHT INT DEFAULT 6;
+DECLARE CLASS_SHAMAN INT DEFAULT 7;
+DECLARE CLASS_MAGE INT DEFAULT 8;
+DECLARE CLASS_WARLOCK INT DEFAULT 9;
+DECLARE CLASS_DRUID INT DEFAULT 11;
+DECLARE CLASS_BLADEMASTER INT DEFAULT 12;
+DECLARE CLASS_SPHYNX INT DEFAULT 13;
+DECLARE CLASS_ARCHMAGE INT DEFAULT 14;
+DECLARE CLASS_DREADLORD INT DEFAULT 15;
+DECLARE CLASS_SPELL_BREAKER INT DEFAULT 16;
+DECLARE CLASS_DARK_RANGER INT DEFAULT 17;
+
+DECLARE SPEC_START_WARRIOR INT DEFAULT 1;
+DECLARE SPEC_START_PALADIN INT DEFAULT 4;
+DECLARE SPEC_START_HUNTER INT DEFAULT 7;
+DECLARE SPEC_START_ROGUE INT DEFAULT 10;
+DECLARE SPEC_START_PRIEST INT DEFAULT 13;
+DECLARE SPEC_START_DEATH_KNIGHT INT DEFAULT 16;
+DECLARE SPEC_START_SHAMAN INT DEFAULT 19;
+DECLARE SPEC_START_MAGE INT DEFAULT 22;
+DECLARE SPEC_START_WARLOCK INT DEFAULT 25;
+DECLARE SPEC_START_DRUID INT DEFAULT 28;
+DECLARE SPEC_DEFAULT INT DEFAULT 31;
+
+DECLARE NPCBOT_ENTRY_BEGIN INT DEFAULT 70001;
+DECLARE NPCBOT_ENTRY_END INT DEFAULT 71000;
+
+DECLARE cur_pos INT;
+DECLARE myclass INT;
+DECLARE myspec INT;
+
+SET cur_pos = NPCBOT_ENTRY_BEGIN;
+WHILE cur_pos < NPCBOT_ENTRY_END DO
+ SET myclass = (SELECT `class` FROM `npcbot_extras_temp` WHERE `entry` = cur_pos);
+ SET myspec = (SELECT `spec` FROM `characters_npcbot` WHERE `entry` = cur_pos);
+
+ IF myclass != 0 AND myspec != 0 AND myspec < 4 THEN
+
+ IF myclass = CLASS_WARRIOR THEN
+ SET myspec = myspec + SPEC_START_WARRIOR - 1;
+ ELSEIF myclass = CLASS_PALADIN THEN
+ SET myspec = myspec + SPEC_START_PALADIN - 1;
+ ELSEIF myclass = CLASS_HUNTER THEN
+ SET myspec = myspec + SPEC_START_HUNTER - 1;
+ ELSEIF myclass = CLASS_ROGUE THEN
+ SET myspec = myspec + SPEC_START_ROGUE - 1;
+ ELSEIF myclass = CLASS_PRIEST THEN
+ SET myspec = myspec + SPEC_START_PRIEST - 1;
+ ELSEIF myclass = CLASS_DEATH_KNIGHT THEN
+ SET myspec = myspec + SPEC_START_DEATH_KNIGHT - 1;
+ ELSEIF myclass = CLASS_SHAMAN THEN
+ SET myspec = myspec + SPEC_START_SHAMAN - 1;
+ ELSEIF myclass = CLASS_MAGE THEN
+ SET myspec = myspec + SPEC_START_MAGE - 1;
+ ELSEIF myclass = CLASS_WARLOCK THEN
+ SET myspec = myspec + SPEC_START_WARLOCK - 1;
+ ELSEIF myclass = CLASS_DRUID THEN
+ SET myspec = myspec + SPEC_START_DRUID - 1;
+ ELSE
+ SET myspec = SPEC_DEFAULT;
+ END IF;
+
+ UPDATE `characters_npcbot` SET `spec` = myspec WHERE `entry` = cur_pos;
+
+ END IF;
+
+ SET cur_pos = cur_pos + 1;
+
+END WHILE;
+
+DROP TEMPORARY TABLE IF EXISTS `npcbot_extras_temp`;
+
+END*/;;
+
+DELIMITER ;
+
+CALL `sp__update_specs_2020_06_21`();
+
+DROP PROCEDURE IF EXISTS `sp__update_specs_2020_06_21`;
diff --git a/sql/Bot SQL/updates/characters/2020_10_08_characters_npcbot_NPCBots_4.7.34a-4.7.39a.sql b/sql/Bot SQL/updates/characters/2020_10_08_characters_npcbot_NPCBots_4.7.34a-4.7.39a.sql
new file mode 100644
index 0000000000000..74e0e207cec1d
--- /dev/null
+++ b/sql/Bot SQL/updates/characters/2020_10_08_characters_npcbot_NPCBots_4.7.34a-4.7.39a.sql
@@ -0,0 +1 @@
+ALTER TABLE `characters_npcbot` ADD `spells_disabled` longtext AFTER `equipNeck`;
diff --git a/sql/Bot SQL/updates/characters/2021_01_04_characters_npcbot.sql b/sql/Bot SQL/updates/characters/2021_01_04_characters_npcbot.sql
new file mode 100644
index 0000000000000..d553cc876a6ff
--- /dev/null
+++ b/sql/Bot SQL/updates/characters/2021_01_04_characters_npcbot.sql
@@ -0,0 +1 @@
+ALTER TABLE `characters_npcbot` MODIFY COLUMN `roles` int(10) unsigned NOT NULL COMMENT 'bitmask: tank(1),dps(2),heal(4),ranged(8)';
diff --git a/sql/Bot SQL/updates/characters/2021_01_24_characters_npcbot_stats.sql b/sql/Bot SQL/updates/characters/2021_01_24_characters_npcbot_stats.sql
new file mode 100644
index 0000000000000..4bad365447b69
--- /dev/null
+++ b/sql/Bot SQL/updates/characters/2021_01_24_characters_npcbot_stats.sql
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS `characters_npcbot_stats`;
+
+CREATE TABLE `characters_npcbot_stats` (
+ `entry` int(10) unsigned NOT NULL DEFAULT '0',
+ `maxhealth` int(10) unsigned NOT NULL DEFAULT '0',
+ `maxpower` int(10) unsigned NOT NULL DEFAULT '0',
+ `strength` int(10) unsigned NOT NULL DEFAULT '0',
+ `agility` int(10) unsigned NOT NULL DEFAULT '0',
+ `stamina` int(10) unsigned NOT NULL DEFAULT '0',
+ `intellect` int(10) unsigned NOT NULL DEFAULT '0',
+ `spirit` int(10) unsigned NOT NULL DEFAULT '0',
+ `armor` int(10) unsigned NOT NULL DEFAULT '0',
+ `defense` int(10) unsigned NOT NULL DEFAULT '0',
+ `resHoly` int(10) unsigned NOT NULL DEFAULT '0',
+ `resFire` int(10) unsigned NOT NULL DEFAULT '0',
+ `resNature` int(10) unsigned NOT NULL DEFAULT '0',
+ `resFrost` int(10) unsigned NOT NULL DEFAULT '0',
+ `resShadow` int(10) unsigned NOT NULL DEFAULT '0',
+ `resArcane` int(10) unsigned NOT NULL DEFAULT '0',
+ `blockPct` float unsigned NOT NULL DEFAULT '0',
+ `dodgePct` float unsigned NOT NULL DEFAULT '0',
+ `parryPct` float unsigned NOT NULL DEFAULT '0',
+ `critPct` float unsigned NOT NULL DEFAULT '0',
+ `attackPower` int(10) unsigned NOT NULL DEFAULT '0',
+ `spellPower` int(10) unsigned NOT NULL DEFAULT '0',
+ `spellPen` int(10) unsigned NOT NULL DEFAULT '0',
+ `hastePct` float unsigned NOT NULL DEFAULT '0',
+ `hitBonusPct` float unsigned NOT NULL DEFAULT '0',
+ `expertise` int(10) unsigned NOT NULL DEFAULT '0',
+ `armorPenPct` float unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
diff --git a/sql/Bot SQL/updates/characters/2021_08_27_characters_npcbot.sql b/sql/Bot SQL/updates/characters/2021_08_27_characters_npcbot.sql
new file mode 100644
index 0000000000000..2744daddfa987
--- /dev/null
+++ b/sql/Bot SQL/updates/characters/2021_08_27_characters_npcbot.sql
@@ -0,0 +1,2 @@
+-- An update for shifted roles
+UPDATE `characters_npcbot` SET `roles` = (roles & 0x1) | ((roles & ~0x1) << 1);
diff --git a/sql/Bot SQL/updates/characters/2022_11_15_characters_npcbot_transmog.sql b/sql/Bot SQL/updates/characters/2022_11_15_characters_npcbot_transmog.sql
new file mode 100644
index 0000000000000..c8985a9579ece
--- /dev/null
+++ b/sql/Bot SQL/updates/characters/2022_11_15_characters_npcbot_transmog.sql
@@ -0,0 +1,10 @@
+--
+DROP TABLE IF EXISTS `characters_npcbot_transmog`;
+CREATE TABLE `characters_npcbot_transmog` (
+ `entry` int(10) unsigned NOT NULL,
+ `slot` tinyint(3) unsigned NOT NULL,
+ `item_id` int(10) unsigned NOT NULL DEFAULT '0',
+ `fake_id` int(10) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`,`slot`),
+ CONSTRAINT `bot_id` FOREIGN KEY (`entry`) REFERENCES `characters_npcbot` (`entry`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
diff --git a/sql/Bot SQL/updates/characters/2022_11_27_characters_npcbot_group_member.sql b/sql/Bot SQL/updates/characters/2022_11_27_characters_npcbot_group_member.sql
new file mode 100644
index 0000000000000..3e7688bb12fe1
--- /dev/null
+++ b/sql/Bot SQL/updates/characters/2022_11_27_characters_npcbot_group_member.sql
@@ -0,0 +1,10 @@
+--
+DROP TABLE IF EXISTS `characters_npcbot_group_member`;
+CREATE TABLE `characters_npcbot_group_member` (
+ `guid` int(10) unsigned NOT NULL,
+ `entry` int(10) unsigned NOT NULL,
+ `memberFlags` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `subgroup` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `roles` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`entry`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
diff --git a/sql/Bot SQL/updates/world/2020_07_08_creature_template_npcbot_extras.sql b/sql/Bot SQL/updates/world/2020_07_08_creature_template_npcbot_extras.sql
new file mode 100644
index 0000000000000..2e67192b3f54f
--- /dev/null
+++ b/sql/Bot SQL/updates/world/2020_07_08_creature_template_npcbot_extras.sql
@@ -0,0 +1,2 @@
+-- Zandine race fix
+UPDATE `creature_template_npcbot_extras` SET `race`='10' WHERE (`entry`='70135');
diff --git a/sql/Bot SQL/updates/world/2020_09_25_creature_template.sql b/sql/Bot SQL/updates/world/2020_09_25_creature_template.sql
new file mode 100644
index 0000000000000..e714bcb463436
--- /dev/null
+++ b/sql/Bot SQL/updates/world/2020_09_25_creature_template.sql
@@ -0,0 +1,2 @@
+-- Marion modelId fix
+UPDATE `creature_template` SET `modelid1`='1603' WHERE (`entry`='70158');
diff --git a/sql/Bot SQL/updates/world/2020_10_14_creature_classlevelstats.sql b/sql/Bot SQL/updates/world/2020_10_14_creature_classlevelstats.sql
new file mode 100644
index 0000000000000..22639e986a7c3
--- /dev/null
+++ b/sql/Bot SQL/updates/world/2020_10_14_creature_classlevelstats.sql
@@ -0,0 +1,611 @@
+--
+SET @CLASS_HUNTER = 3;
+SET @CLASS_PRIEST = 5;
+SET @CLASS_DK = 6;
+SET @CLASS_SHAMAN = 7;
+SET @CLASS_WARLOCK = 9;
+SET @CLASS_DRUID = 11;
+
+-- actual values are irrelevant, but hp and mana must be > 1
+DELETE FROM `creature_classlevelstats` WHERE `class` IN (@CLASS_HUNTER,@CLASS_PRIEST,@CLASS_DK,@CLASS_SHAMAN,@CLASS_WARLOCK,@CLASS_DRUID) AND `level` BETWEEN '1' AND '100';
+INSERT INTO `creature_classlevelstats` (`level`,`class`,`basehp0`,`basehp1`,`basehp2`,`basemana`,`basearmor`,`attackpower`,`rangedattackpower`,`damage_base`,`damage_exp1`,`damage_exp2`,`comment`) VALUES
+('1', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('1', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('1', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('1', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('1', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('1', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('2', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('3', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('4', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('5', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('6', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('7', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('8', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('9', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('10', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('11', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('12', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('13', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('14', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('15', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('16', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('17', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('18', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('19', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('20', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('21', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('22', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('23', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('24', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('25', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('26', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('27', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('28', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('29', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('30', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('31', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('32', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('33', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('34', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('35', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('36', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('37', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('38', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('39', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('40', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('41', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('42', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('43', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('44', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('45', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('46', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('47', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('48', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('49', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('50', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('51', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('52', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('53', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('54', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('55', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('56', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('57', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('58', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('59', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('60', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('61', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('62', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('63', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('64', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('65', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('66', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('67', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('68', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('69', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('70', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('71', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('72', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('73', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('74', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('75', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('76', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('77', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('78', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('79', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('80', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('81', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('82', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('83', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('84', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('85', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('86', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('87', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('88', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('89', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('90', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('91', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('92', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('93', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('94', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('95', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('96', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('97', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('98', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('99', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_HUNTER, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_PRIEST, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_DK, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_SHAMAN, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_WARLOCK,'2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL),
+('100', @CLASS_DRUID, '2', '2', '2', '2', '0', '0', '0', '0.1', '0', '0', NULL);
diff --git a/sql/Bot SQL/updates/world/2020_10_14_creature_template.sql b/sql/Bot SQL/updates/world/2020_10_14_creature_template.sql
new file mode 100644
index 0000000000000..4580de48b79a0
--- /dev/null
+++ b/sql/Bot SQL/updates/world/2020_10_14_creature_template.sql
@@ -0,0 +1,50 @@
+--
+SET @CLASS_WARRIOR = 1;
+SET @CLASS_PALADIN = 2;
+SET @CLASS_HUNTER = 3;
+SET @CLASS_ROGUE = 4;
+SET @CLASS_PRIEST = 5;
+SET @CLASS_DK = 6;
+SET @CLASS_SHAMAN = 7;
+SET @CLASS_MAGE = 8;
+SET @CLASS_WARLOCK = 9;
+SET @CLASS_DRUID = 11;
+SET @CLASS_BM = 12;
+SET @CLASS_SPHYNX = 13;
+SET @CLASS_ARCHMAGE = 14;
+SET @CLASS_DREADLORD = 15;
+SET @CLASS_SPELLBREAKER = 16;
+SET @CLASS_DARK_RANGER = 17;
+
+UPDATE `creature_template` SET `unit_class`:=@CLASS_DK
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DK);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_DRUID
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DRUID);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_HUNTER
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_HUNTER);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_MAGE
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_MAGE);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_PALADIN
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_PALADIN);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_PRIEST
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_PRIEST);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_ROGUE
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_ROGUE);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_SHAMAN
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SHAMAN);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_WARLOCK
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_WARLOCK);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_WARRIOR
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_WARRIOR);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_WARRIOR
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_BM);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_WARLOCK
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SPHYNX);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_MAGE
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_ARCHMAGE);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_WARLOCK
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DREADLORD);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_PALADIN
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_SPELLBREAKER);
+UPDATE `creature_template` SET `unit_class`:=@CLASS_DK
+WHERE `entry` IN (SELECT `entry` FROM `creature_template_npcbot_extras` WHERE `class`=@CLASS_DARK_RANGER);
diff --git a/sql/Bot SQL/updates/world/2020_10_15_creature_template.sql b/sql/Bot SQL/updates/world/2020_10_15_creature_template.sql
new file mode 100644
index 0000000000000..9cb16889dc63c
--- /dev/null
+++ b/sql/Bot SQL/updates/world/2020_10_15_creature_template.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_template` SET `unit_flags2`='16416' WHERE `entry` IN ('70551','70552');
diff --git a/sql/Bot SQL/updates/world/2020_11_07_npc_text.sql b/sql/Bot SQL/updates/world/2020_11_07_npc_text.sql
new file mode 100644
index 0000000000000..5177d7202d029
--- /dev/null
+++ b/sql/Bot SQL/updates/world/2020_11_07_npc_text.sql
@@ -0,0 +1,329 @@
+--
+SET @LOCALIZED_STRINGS_START = 70300;
+SET @LOCALIZED_STRINGS_END = 70799;
+
+-- LOCALIZATION STRING --
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70300','Die!','-1'),
+('70301','Rezzing You','-1'),
+('70302','Rezzing ','-1'),
+('70303','your bot','-1'),
+('70304','\'s bot','-1'),
+('70305','I can\'t conjure water yet','-1'),
+('70306','I can\'t conjure food yet','-1'),
+('70307','I can\'t do it right now','-1'),
+('70308','Here you go...','-1'),
+('70309','Disabled','-1'),
+('70310','Not ready yet','-1'),
+('70311','Invalid object type','-1'),
+('70312','Failed','-1'),
+('70313','Done','-1'),
+('70314','I am not shapeshifted','-1'),
+('70315','I don\'t have a healthstone','-1'),
+('70316','I can\'t create healthstones yet!','-1'),
+('70317','WTF I don\'t have lockpicking!','-1'),
+('70318','My skill level in not high enough','-1'),
+('70319','Changing my spec to ','-1'),
+('70320','Arms','-1'),
+('70321','Fury','-1'),
+('70322','Protection','-1'),
+('70323','Retribution','-1'),
+('70324','Beast Mastery','-1'),
+('70325','Marksmanship','-1'),
+('70326','Survival','-1'),
+('70327','Assassination','-1'),
+('70328','Combat','-1'),
+('70329','Subtlety','-1'),
+('70330','Discipline','-1'),
+('70331','Holy','-1'),
+('70332','Shadow','-1'),
+('70333','Blood','-1'),
+('70334','Frost','-1'),
+('70335','Unholy','-1'),
+('70336','Elemental','-1'),
+('70337','Enhancement','-1'),
+('70338','Restoration','-1'),
+('70339','Arcane','-1'),
+('70340','Fire','-1'),
+('70341','Affliction','-1'),
+('70342','Demonology','-1'),
+('70343','Destruction','-1'),
+('70344','Balance','-1'),
+('70345','Feral Combat','-1'),
+('70346','Unknown','-1'),
+('70347','Go away, weakling','-1'),
+('70348',' is not convinced','-1'),
+('70349','I am not going to waste my time on just anything','-1'),
+('70350','NIY','-1'),
+('70351','NIY','-1'),
+('70352','NIY','-1'),
+('70353','I am ready','-1'),
+('70354','Go away. I serve my master ','-1'),
+('70355','unknown','-1'),
+('70356',' on You!','-1'),
+('70357',' on myself!','-1'),
+('70358',' on ','-1'),
+('70359',' used!','-1'),
+('70360','bot tank','-1'),
+('70361','class','-1'),
+('70362','player','-1'),
+('70363','master','-1'),
+('70364','none','-1'),
+('70365','Rank','-1'),
+('70366','talent','-1'),
+('70367','passive','-1'),
+('70368','hidden','-1'),
+('70369','known','-1'),
+('70370','ability','-1'),
+('70371','str','-1'),
+('70372','agi','-1'),
+('70373','sta','-1'),
+('70374','int','-1'),
+('70375','spi','-1'),
+('70376','unk stat','-1'),
+('70377','total','-1'),
+('70378','Melee AP','-1'),
+('70379','Ranged AP','-1'),
+('70380','armor','-1'),
+('70381','crit','-1'),
+('70382','defense','-1'),
+('70383','miss','-1'),
+('70384','dodge','-1'),
+('70385','parry','-1'),
+('70386','block','-1'),
+('70387','block value','-1'),
+('70388','Damage taken melee','-1'),
+('70389','Damage taken spell','-1'),
+('70390','Damage range mainhand','-1'),
+('70391','Damage mult mainhand','-1'),
+('70392','Attack time mainhand','-1'),
+('70393','Damage range offhand','-1'),
+('70394','Damage mult offhand','-1'),
+('70395','Attack time offhand','-1'),
+('70396','Damage range ranged','-1'),
+('70397','Damage mult ranged','-1'),
+('70398','Attack time ranged','-1'),
+('70399','min','-1'),
+('70400','max','-1'),
+('70401','DPS','-1'),
+('70402','base hp','-1'),
+('70403','total hp','-1'),
+('70404','base mana','-1'),
+('70405','total mana','-1'),
+('70406','current mana','-1'),
+('70407','spell power','-1'),
+('70408','health regen_5 bonus','-1'),
+('70409','mana regen_5 no cast','-1'),
+('70410','mana regen_5 casting','-1'),
+('70411','haste','-1'),
+('70412','hit','-1'),
+('70413','expertise','-1'),
+('70414','armor penetration','-1'),
+('70415','spell penetration','-1'),
+('70416','pct','-1'),
+('70417','holy','-1'),
+('70418','fire','-1'),
+('70419','nature','-1'),
+('70420','frost','-1'),
+('70421','shadow','-1'),
+('70422','arcane','-1'),
+('70423','Resistance','-1'),
+('70424','Command states','-1'),
+('70425','Follow','-1'),
+('70426','Attack','-1'),
+('70427','Stay','-1'),
+('70428','Reset','-1'),
+('70429','FullStop','-1'),
+('70430','Follow distance','-1'),
+('70431','Spec','-1'),
+('70432','Bot roles mask main','-1'),
+('70433','Bot roles mask gathering','-1'),
+('70434','PvP kills','-1'),
+('70435','players','-1'),
+('70436','Died ','-1'),
+('70437',' times','-1'),
+('70438','%s (bot) calms down','-1'),
+('70439','','-1'),
+('70440','Are you sure you want to risk drawing ','-1'),
+('70441','\'s attention?','-1'),
+('70442','','-1'),
+('70443','Do you want to entice ','-1'),
+('70444','','-1'),
+('70445','Do you wish to hire ','-1'),
+('70446','','-1'),
+('70447','Manage equipment...','-1'),
+('70448','Manage roles...','-1'),
+('70449','Manage formation...','-1'),
+('70450','Manage abilities...','-1'),
+('70451','Manage talents...','-1'),
+('70452','Give consumable...','-1'),
+('70453','','-1'),
+('70454','','-1'),
+('70455','','-1'),
+('70456','','-1'),
+('70457','','-1'),
+('70458','Follow me','-1'),
+('70459','Hold your position','-1'),
+('70460','Stay here and don\'t do anything','-1'),
+('70461','I need food','-1'),
+('70462','I need water','-1'),
+('70463','I need a refreshment table','-1'),
+('70464','Help me pick a lock','-1'),
+('70465','I need your healthstone','-1'),
+('70466','I need a soulwell','-1'),
+('70467','I need you to refresh poisons','-1'),
+('70468','','-1'),
+('70469','','-1'),
+('70470','I need you to refresh enchants','-1'),
+('70471','','-1'),
+('70472','','-1'),
+('70473','I need you to remove shapeshift','-1'),
+('70474','','-1'),
+('70475','You are dismissed','-1'),
+('70476','Are you going to abandon ','-1'),
+('70477','You may regret it...','-1'),
+('70478','Pull yourself together, damnit','-1'),
+('70479','','-1'),
+('70480','Nevermind','-1'),
+('70481','dist','-1'),
+('70482','BACK','-1'),
+('70483','','-1'),
+('70484','','-1'),
+('70485','Random (Cunning)','-1'),
+('70486','Random (Ferocity)','-1'),
+('70487','Random (Tenacity)','-1'),
+('70488','Show me your inventory','-1'),
+('70489','Auto-equip...','-1'),
+('70490','Main hand','-1'),
+('70491','Off-hand','-1'),
+('70492','Ranged','-1'),
+('70493','Relic','-1'),
+('70494','Head','-1'),
+('70495','Shoulders','-1'),
+('70496','Chest','-1'),
+('70497','Waist','-1'),
+('70498','Legs','-1'),
+('70499','Feet','-1'),
+('70500','Wrist','-1'),
+('70501','Hands','-1'),
+('70502','Back','-1'),
+('70503','Shirt','-1'),
+('70504','Finger1','-1'),
+('70505','Finger2','-1'),
+('70506','Trinket1','-1'),
+('70507','Trinket2','-1'),
+('70508','Neck','-1'),
+('70509','Unequip all','-1'),
+('70510','Update visual','-1'),
+('70511','visual only','-1'),
+('70512','Equipped','-1'),
+('70513','nothing','-1'),
+('70514','Use your old equipment','-1'),
+('70515','Unequip it','-1'),
+('70516','Hm... I have nothing to give you','-1'),
+('70517','Gathering','-1'),
+('70518','Abilities status','-1'),
+('70519','Manage allowed abilities','-1'),
+('70520','Use ','-1'),
+('70521','Update','-1'),
+('70522','Damage','-1'),
+('70523','Control','-1'),
+('70524','Heal','-1'),
+('70525','Other','-1'),
+('70526',' makes a grinding sound and begins to follow ','-1'),
+('70527','%s will not join you until dismissed by the owner','-1'),
+('70528','%s will not join you until you are level 60','-1'),
+('70529','%s will not join you until you are level 55','-1'),
+('70530','%s will not join you until you are level 40','-1'),
+('70531','%s will not join you until you are level 20','-1'),
+('70532','You exceed max npcbots (%u)','-1'),
+('70533','You don\'t have enough money','-1'),
+('70534','You cannot have more bots of that class! %u of %u','-1'),
+('70535','Cannot reset equipment in slot %u (%s)! Cannot dismiss bot!','-1'),
+('70536','current','-1'),
+('70537','Attack distance','-1'),
+('70538','Short range attacks','-1'),
+('70539','Long range attacks','-1'),
+('70540','Exact','-1'),
+('70541','Remove buff','-1'),
+('70542','Fix your power type','-1'),
+('70543','Cannot unequip %s for some stupid reason! Sending through mail','-1'),
+('70544','Tank','-1'),
+('70545','Ranged','-1'),
+('70546','Miner','-1'),
+('70547','Herbalist','-1'),
+('70548','Skinner','-1'),
+('70549','Engineer','-1'),
+('70550','Bot ownership expired due to inactivity','-1'),
+('70551','NpcBot system is currently disabled. Please contact administration.','-1'),
+('70552','%s will not join you, already has master: %s','-1'),
+('70553','%s cannot join you while about to teleport','-1'),
+('70554','Aspect','-1'),
+('70555','Monkey','-1'),
+('70556','Hawk','-1'),
+('70557','Cheetah','-1'),
+('70558','Viper','-1'),
+('70559','Beast','-1'),
+('70560','Pack','-1'),
+('70561','Wild','-1'),
+('70562','Dragonhawk','-1'),
+('70563','No Aspect','-1'),
+('70564','Aura','-1'),
+('70565','Devotion','-1'),
+('70566','Concentration','-1'),
+('70567','Fire Resistance','-1'),
+('70568','Frost Resistance','-1'),
+('70569','Shadow Resistance','-1'),
+('70570','Retribution','-1'),
+('70571','Crusader','-1'),
+('70572','No Aura','-1'),
+('70573','Crippling','-1'),
+('70574','Instant','-1'),
+('70575','Deadly','-1'),
+('70576','Wound','-1'),
+('70577','Mind-Numbing','-1'),
+('70578','Anesthetic','-1'),
+('70579','Nothing','-1'),
+('70580','Flametongue','-1'),
+('70581','Frostbrand','-1'),
+('70582','Windfury','-1'),
+('70583','Earthliving','-1'),
+('70584','I need your services','-1'),
+('70585','You have too many bots','-1'),
+('70586','Do you wish to hire ','-1'),
+('70587',' is a bit busy at the moment, try again later.','-1'),
+('70588','Pleasure doing business with you','-1'),
+('70589','Warriors','-1'),
+('70590','Paladins','-1'),
+('70591','Mages','-1'),
+('70592','Priests','-1'),
+('70593','Warlocks','-1'),
+('70594','Druids','-1'),
+('70595','Death Knights','-1'),
+('70596','Rogues','-1'),
+('70597','Shamans','-1'),
+('70598','Hunters','-1'),
+('70599','Blademasters','-1'),
+('70600','Destroyers','-1'),
+('70601','Archmagi','-1'),
+('70602','Dreadlords','-1'),
+('70603','Spell Breakers','-1'),
+('70604','Dark Rangers','-1'),
+('70605','Warrior','-1'),
+('70606','Paladin','-1'),
+('70607','Mage','-1'),
+('70608','Priest','-1'),
+('70609','Warlock','-1'),
+('70610','Druid','-1'),
+('70611','Death Knight','-1'),
+('70612','Rogue','-1'),
+('70613','Shaman','-1'),
+('70614','Hunter','-1'),
+('70615','Blademaster','-1'),
+('70616','Destroyer','-1'),
+('70617','Archmage','-1'),
+('70618','Dreadlord','-1'),
+('70619','Spell Breaker','-1'),
+('70620','Dark Ranger','-1');
diff --git a/sql/Bot SQL/updates/world/2020_12_11_npc_text.sql b/sql/Bot SQL/updates/world/2020_12_11_npc_text.sql
new file mode 100644
index 0000000000000..f9c08b5218633
--- /dev/null
+++ b/sql/Bot SQL/updates/world/2020_12_11_npc_text.sql
@@ -0,0 +1,4 @@
+--
+DELETE FROM `npc_text` WHERE ID = 70550;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70550','Bot ownership expired','-1');
diff --git a/sql/Bot SQL/updates/world/2021_01_04_npc_text.sql b/sql/Bot SQL/updates/world/2021_01_04_npc_text.sql
new file mode 100644
index 0000000000000..75681a46c27ad
--- /dev/null
+++ b/sql/Bot SQL/updates/world/2021_01_04_npc_text.sql
@@ -0,0 +1,19 @@
+--
+SET @LOCALIZED_STRINGS_START = 70621;
+SET @LOCALIZED_STRINGS_END = 70633;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70621','Male','-1'),
+('70622','Female','-1'),
+('70623','Human','-1'),
+('70624','Orc','-1'),
+('70625','Dwarf','-1'),
+('70626','Night Elf','-1'),
+('70627','Undead','-1'),
+('70628','Tauren','-1'),
+('70629','Gnome','-1'),
+('70630','Troll','-1'),
+('70631','Blood Elf','-1'),
+('70632','Draenei','-1'),
+('70633','Unknown','-1');
diff --git a/sql/Bot SQL/updates/world/2021_01_05_npc_text.sql b/sql/Bot SQL/updates/world/2021_01_05_npc_text.sql
new file mode 100644
index 0000000000000..26352ce0a817b
--- /dev/null
+++ b/sql/Bot SQL/updates/world/2021_01_05_npc_text.sql
@@ -0,0 +1,13 @@
+--
+SET @LOCALIZED_STRINGS_START = 70634;
+SET @LOCALIZED_STRINGS_END = 70640;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70634','Looting','-1'),
+('70635','|cff9d9d9dPoor|r','-1'),
+('70636','|cffffffffCommon|r','-1'),
+('70637','|cff1eff00Uncommon|r','-1'),
+('70638','|cff0070ddRare|r','-1'),
+('70639','|cffa335eeEpic|r','-1'),
+('70640','|cffff8000Legendary|r','-1');
diff --git a/sql/Bot SQL/updates/world/2021_01_08_npc_text.sql b/sql/Bot SQL/updates/world/2021_01_08_npc_text.sql
new file mode 100644
index 0000000000000..6f8781ecd22fd
--- /dev/null
+++ b/sql/Bot SQL/updates/world/2021_01_08_npc_text.sql
@@ -0,0 +1,9 @@
+--
+SET @LOCALIZED_STRINGS_START = 70641;
+SET @LOCALIZED_STRINGS_END = 70643;
+
+DELETE FROM `npc_text` WHERE ID BETWEEN @LOCALIZED_STRINGS_START and @LOCALIZED_STRINGS_END;
+INSERT INTO `npc_text` (`ID`,`text0_0`,`VerifiedBuild`) VALUES
+('70641','Grab on ','-1'),
+('70642','my ','-1'),
+('70643','