description of TradeHandler.
Beispiel #1
0
        public void UpdateStorageItem(TradeHandler.TradeLogItem MyTradeLogItem, bool replaceQuantity)
        {
            MySqlConnection MyConnection = new MySqlConnection("Server=" + MainClass.SqlServer + ";Port=" + MainClass.SqlPort.ToString() + ";Database=" + MainClass.SqlDatabase + ";Uid=" + MainClass.SqlUsername + ";Pwd=" + MainClass.SqlPassword + ";");
            try
            {
                MyConnection.Open();
            }
            catch (Exception myException)
            {
            Console.WriteLine(myException.Message); Environment.Exit(0);
            }
            int tempQuantity;
            tempQuantity = (int)MyTradeLogItem.quantity;
            if (MyTradeLogItem.action.Contains("sold") || MyTradeLogItem.action.Contains("gave") || MyTradeLogItem.action.ToLower().Contains("withdrew"))
            {
                if (!replaceQuantity)
                {
                    tempQuantity = tempQuantity * -1;
                }
            }
            int rowsAffected = 0;
            string itemName = "";
            int imageid = 0;
            string sql = "UPDATE Storage SET quantity = quantity + ?quantity WHERE knownitemsid = ?knownitemsid AND botid = ?botid;";
            if (replaceQuantity)
            {
                sql = "UPDATE Storage SET quantity = ?quantity WHERE knownitemsid = ?knownitemsid AND botid = ?botid;";
            }

            TheLogger.Debug(sql + "\n");
            MySqlCommand cmd = new MySqlCommand(sql, MyConnection);
            cmd.Parameters.AddWithValue("?quantity", tempQuantity);
            cmd.Parameters.AddWithValue("?knownitemsid", MyTradeLogItem.KnownItemsSqlID);
            cmd.Parameters.AddWithValue("?botid", Settings.botid);
            try
            {
                rowsAffected = cmd.ExecuteNonQuery();
            }
            catch (MySqlException oMySQLException)
            {
                myErrorHandler.errorWriter(oMySQLException);
            }
            catch (Exception oException)
            {
                myErrorHandler.errorWriter(oException);
            }
            finally
            {
            }
            //didn't update any rows, must be a new item, so insert it with what we have...
            //the next time the storage is open, the rest of the info will be known
            if (rowsAffected == 0)
            {
                //ok, we need some info from the known items table about this item
                //since this function may end up being called from several locations
                //the amount of known information isn't standard....
                //easier to get it here than try to change the entire program....
                sql = "SELECT name, imageid FROM knownitems WHERE id = ?id ;";
                TheLogger.Debug(sql + "\n");
                cmd = new MySqlCommand(sql, MyConnection);
                cmd.Parameters.AddWithValue("?id", MyTradeLogItem.KnownItemsSqlID);
                TheLogger.Debug("MySQLDataReader start");
                MySqlDataReader reader = cmd.ExecuteReader();
                TheLogger.Debug("MySQLDataReader complete");
                try
                {
                    while (reader.Read())
                    {
                        itemName = reader.GetString(0);
                        imageid = reader.GetInt16(1);
                    }
                }
                catch (MySqlException oMySQLException)
                {
                    myErrorHandler.errorWriter(oMySQLException);
                }
                catch (Exception oException)
                {
                    myErrorHandler.errorWriter(oException);
                }
                finally
                {
                    reader.Close();
                }

            //                sql = "INSERT DELAYED INTO Storage (name, knownitemsid, imageid, quantity, botid, categorynum) VALUES (?name, ?knownitemsid, ?imageid, ?quantity, ?botid, ?categorynum);";
                sql = "INSERT INTO storage (name, knownitemsid, imageid, quantity, botid, categorynum) VALUES (?name, ?knownitemsid, ?imageid, ?quantity, ?botid, ?categorynum);";
                TheLogger.Debug(sql + "\n");
                cmd = new MySqlCommand(sql, MyConnection);
                cmd.Parameters.AddWithValue("?quantity", MyTradeLogItem.quantity);
                cmd.Parameters.AddWithValue("?name", itemName);
                cmd.Parameters.AddWithValue("?imageid", imageid);
                cmd.Parameters.AddWithValue("?knownitemsid", MyTradeLogItem.KnownItemsSqlID);
                cmd.Parameters.AddWithValue("?categorynum", MyTradeLogItem.categoryNum );
                cmd.Parameters.AddWithValue("?botid", Settings.botid);
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (MySqlException oMySQLException)
                {
                    myErrorHandler.errorWriter(oMySQLException);
                }
                catch (Exception oException)
                {
                    myErrorHandler.errorWriter(oException);
                }
                finally
                {
                    TheLogger.Debug("### SqlConnectionClose() in UpdateStorageItem \n");
                }
            }
            MyConnection.Close();
            return;
        }
Beispiel #2
0
        public void LogTrade(TradeHandler.TradeLogItem MyTradeLogItem, string username, int botid, bool sendCoinPMs)
        {
            if (username == "")
                return;
            bool sendPM = true;
            MySqlConnection MyConnection = new MySqlConnection("Server=" + MainClass.SqlServer + ";Port=" + MainClass.SqlPort.ToString() + ";Database=" + MainClass.SqlDatabase + ";Uid=" + MainClass.SqlUsername + ";Pwd=" + MainClass.SqlPassword + ";");
            try
            {
                MyConnection.Open();
            }
            catch (Exception myException)
            {
            Console.WriteLine(myException.Message); Environment.Exit(0);
            }
            string sql = "[" + MyTradeLogItem.action + "] [" + username + "] [" + MyTradeLogItem.quantity.ToString() + "] [" + GetKnownItemsname(MyTradeLogItem.KnownItemsSqlID) + "] [" + MyTradeLogItem.price * MyTradeLogItem.quantity + "gc";
            string[] names = botowner(Settings.botid).Split('|');
            if (MyTradeLogItem.action.ToLower().Contains("transaction coins") && !sendCoinPMs)
            {
                sendPM = false;
            }
            if (this.sendreceivedpms(Settings.botid) && sendPM)// Added this check * Draavell //
            {
                foreach (string name in names)
                {
                    if (MySqlManager.playerIsOnline(name.Trim()))
                    {
                        TheTCPWrapper.Send(CommandCreator.SEND_PM(name.Trim(), sql));
                    }
                }
            }
            //            sql = "INSERT DELAYED INTO tradelog (knownitemsid, quantity, price, username, tradetime, action, payedout, botid) VALUES(?knownitemsid, ?quantity, ?price, ?username, now(), ?action, ?payedout, ?botid);";
            sql = "INSERT INTO tradelog (knownitemsid, quantity, price, username, tradetime, action, payedout, botid) VALUES(?knownitemsid, ?quantity, ?price, ?username, now(), ?action, ?payedout, ?botid);";
            TheLogger.Debug(sql + "\n");
            MySqlCommand cmd = new MySqlCommand(sql, MyConnection);
            cmd.Parameters.AddWithValue("?knownitemsid", MyTradeLogItem.KnownItemsSqlID);
            cmd.Parameters.AddWithValue("?quantity", MyTradeLogItem.quantity);
            cmd.Parameters.AddWithValue("?price", MyTradeLogItem.price);
            cmd.Parameters.AddWithValue("?username", username);
            //cmd.Parameters.AddWithValue("?tradetime", "now()");
            cmd.Parameters.AddWithValue("?action", MyTradeLogItem.action);
            cmd.Parameters.AddWithValue("?payedout", 0);
            cmd.Parameters.AddWithValue("?botid", botid);

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (MySqlException oMySQLException)
            {
                myErrorHandler.errorWriter(oMySQLException);
            }
            catch (Exception oException)
            {
                myErrorHandler.errorWriter(oException);
            }
            finally
            {
            }
            MyConnection.Close();
            return;
        }
Beispiel #3
0
 public void getItemInfo(ref TradeHandler.TradeItem MyTradeItem)
 {
     string sql = "SELECT id, name, weight FROM knownitems WHERE elitemid = ?elitemid";
     MySqlConnection MyConnection = new MySqlConnection("Server=" + MainClass.SqlServer + ";Port=" + MainClass.SqlPort.ToString() + ";Database=" + MainClass.SqlDatabase + ";Uid=" + MainClass.SqlUsername + ";Pwd=" + MainClass.SqlPassword + ";");
     try
     {
         MyConnection.Open();
     }
     catch (Exception myException)
     {
     Console.WriteLine(myException.Message); Environment.Exit(0);
     }
     MySqlCommand cmd = new MySqlCommand(sql, MyConnection);
     cmd.Parameters.AddWithValue("?elitemid", MyTradeItem.ELServerItemID);
     MySqlDataReader reader = cmd.ExecuteReader();
     try
     {
         while (reader.Read())
         {
             MyTradeItem.KnownItemsSqlID = reader.GetInt16(0);
             MyTradeItem.name = reader.GetString(1);
             MyTradeItem.weight = reader.GetUInt16(2);
         }
     }
     catch (MySqlException oMySQLException)
     {
         {
             myErrorHandler.errorWriter(oMySQLException);
         }
     }
     catch (Exception oException)
     {
         {
             myErrorHandler.errorWriter(oException);
         }
     }
     finally
     {
     }
     reader.Close();
     MyConnection.Close();
 }
Beispiel #4
0
        public int GetStorageSQLID(TradeHandler.TradeItem MyTradeItem)
        {
            MySqlConnection MyConnection = new MySqlConnection("Server=" + MainClass.SqlServer + ";Port=" + MainClass.SqlPort.ToString() + ";Database=" + MainClass.SqlDatabase + ";Uid=" + MainClass.SqlUsername + ";Pwd=" + MainClass.SqlPassword + ";");
            try
            {
                MyConnection.Open();
            }
            catch (Exception myException)
            {
            Console.WriteLine(myException.Message); Environment.Exit(0);
            }
            TradeHandler.TradeItem MyTempTradeItem = new TradeHandler.TradeItem();
            MyTempTradeItem = MyTradeItem;
            // Add Item it the Global Items List and to the Inventory List
            // First check if the Item exists in the global Database, if not Add it.
            int id = -1;
            int count = -1;
            //string sql = "SELECT id FROM knownitems WHERE imageid = ?imageid and name = ?name order by imageid, name";
            string sql = "SELECT id FROM knownitems WHERE lower(name) = ?name order by name";
            MySqlCommand cmd = new MySqlCommand(sql, MyConnection);
            cmd.Parameters.AddWithValue("?imageid", MyTempTradeItem.imageid);
            cmd.Parameters.AddWithValue("?name", MyTempTradeItem.name.ToLower());
            TheLogger.Debug(sql + "\n");
            MySqlDataReader reader = cmd.ExecuteReader();
            TheLogger.Debug("### cmd.ExecuteReader() in GetStorageSQLID\n");

            try
            {
                while (reader.Read())
                {
                    id = reader.GetInt16(0);
                    count++;
                }
            }
            catch (MySqlException oMySQLException)
            {
                myErrorHandler.errorWriter(oMySQLException);
            }
            catch (Exception oException)
            {
                myErrorHandler.errorWriter(oException);
            }
            finally
            {
                reader.Close();
                TheLogger.Debug("### reader.Close() in GetStorageSQLID\n");
            }
            if (id != -1 && count == 0)
            {
                MyConnection.Close();
                return id;//we found a perfect match
            }
            count = -1;
            sql = "SELECT id FROM knownitems WHERE imageid = ?imageid and lower(name) = ?name order by imageid, name";
            cmd = new MySqlCommand(sql, MyConnection);
            cmd.Parameters.AddWithValue("?imageid", -1);
            cmd.Parameters.AddWithValue("?name", MyTempTradeItem.name.ToLower());
            TheLogger.Debug(sql + "\n");
            reader = cmd.ExecuteReader();

            try
            {
                while (reader.Read())
                {
                    id = reader.GetInt16(0);
                    count++;
                }
            }
            catch (MySqlException oMySQLException)
            {
                myErrorHandler.errorWriter(oMySQLException);
            }
            catch (Exception oException)
            {
                myErrorHandler.errorWriter(oException);
            }
            finally
            {
                reader.Close();
            }
            if (id != -1 && count == 0)
            {
                //update the imageid here from -1 to the right one
                // imageid = -1 update it
                Inventory.inventory_item MyInventoryItem = new Inventory.inventory_item();
                MyInventoryItem.imageid = MyTradeItem.imageid;
                MyInventoryItem.name = MyTradeItem.name;
                MyInventoryItem.description = "";
                MyInventoryItem.weight = MyTradeItem.weight;
                MyInventoryItem.is_resource = false;
                MyInventoryItem.is_reagent = false;
                MyInventoryItem.is_stackable = false;
                MyInventoryItem.use_with_inventory = false;
                updateknownitems(MyInventoryItem, id);
                MyConnection.Close();
                return id;//we found a perfect match
            }
            if (id == -1)
            {
            if(MyTradeItem.imageid == 0) TheLogger.ErrorLog("Possibly invalid Item: " + MyTradeItem.name + " added by " + Settings.botid + " in GetStorageSQLID()");
                sql = "INSERT INTO knownitems (name,description,imageid,weight,is_resource,is_reagent,is_stackable,use_with_inventory) VALUES (?name,?description,?imageid,?weight,?is_resource,?is_reagent,?is_stackable,?use_with_inventory)";
                cmd.Parameters.Clear();
                cmd = new MySqlCommand(sql, MyConnection);
                cmd.Parameters.AddWithValue("?name", MyTradeItem.name);
                cmd.Parameters.AddWithValue("?description", " ");
                cmd.Parameters.AddWithValue("?imageid", MyTradeItem.imageid);
                cmd.Parameters.AddWithValue("?weight", MyTradeItem.weight);
                cmd.Parameters.AddWithValue("?is_resource", -1);
                cmd.Parameters.AddWithValue("?is_reagent", -1);
                cmd.Parameters.AddWithValue("?is_stackable", -1);
                cmd.Parameters.AddWithValue("?use_with_inventory", -1);
                try
                {
                    cmd.ExecuteNonQuery();
                    id = GetKnownItemsSQLID(MyTradeItem);
                }
                catch (MySqlException oMySQLException)
                {
                    TheLogger.Log("ExecSql Error in " + oMySQLException.TargetSite + " due to : " + oMySQLException.Message + "\n");
                    TheLogger.Log("ExecSql by SQL : " + sql
                        + "\n");
                    myErrorHandler.errorWriter(oMySQLException);
                }
                catch (Exception oException)
                {
                    TheLogger.Log("ExecSql Error in " + oException.TargetSite + " due to : " + oException.Message + "\n");
                    TheLogger.Log("ExecSql by SQL : " + sql + "\n");
                    myErrorHandler.errorWriter(oException);
                }
                finally
                {
                    //reader.Close();
                }
                reader.Close();
                MyConnection.Close();
                return id;
            }
            reader.Close();
            MyConnection.Close();
            return id;
        }
Beispiel #5
0
        //public static myCoords myCurrentCoords = new myCoords();
        //public struct myCoords
        //{
        //    public int x;
        //    public int y;
        //}
        public static void Main(string[] args)
        {
            myHome.x = 0;
            myHome.y = 0;
            myHome.heading = 0;
            myHome.mapName = "";
            // Create instance of the log file handler
            Logger MyLogger = new Logger();

            // Create instance of the TCP client
            TCPClient.TCPClient MyTCPClient = new TCPClient.TCPClient();

            // Initialize the TCPWrapper
            TCPWrapper MyTCPWrapper = new TCPWrapper(MyTCPClient, MyLogger);

            // set up working directory
            if (args.Length > 0)
            {
                string botName = args[0];
                launchPath = args[1];
                SqlServer = args[2];
                SqlPort = Convert.ToInt16(args[3]);
                SqlUsername = args[4];
                SqlPassword = args[5];
                SqlDatabase = args[6];
                Environment.CurrentDirectory = launchPath + botName;
            }
            if (Environment.CurrentDirectory.ToLower().Contains("Live".ToLower()))
            {
                serverName = "live";
            }
            else if (Environment.CurrentDirectory.ToLower().Contains("Test".ToLower()))
            {
                serverName = "test";
            }
            else if (Environment.CurrentDirectory.ToLower().Contains("PK".ToLower()))
            {
                serverName = "pk";
            }
            else
            {
                launchedByBotManager = false;
            launchPath = "C:\\bot\\test\\";
                Console.WriteLine("serverName not found in file path, defaulting to test");
                Console.WriteLine("path containing cs-elbot.exe should be something like c:/bot/test/botname/");
                Console.WriteLine("If you're not using bot manager, don't worry about this message");
            }

            Settings MySettings = new Settings();

            //Load Sql Configuration if not supplied in parameters
            if (SqlServer == "")
            {
                MySettings.LoadSqlSettingsFromConfigfile();
            }

            MySettings.LoadSettings();
            errorHandler MyErrorHandler = new errorHandler();

            //Setup the MySQL Database
            MySqlManager MyMySqlManager = new MySqlManager(SqlServer, SqlUsername, SqlPassword, SqlDatabase, SqlPort, MyLogger, MyTCPWrapper, MyErrorHandler);
            Settings.TradeTimeOut = MyMySqlManager.GetTimeoutInterval(Settings.botid);
            botType = MyMySqlManager.getBotType(Settings.botid);
            //Console.WriteLine("Bot type: " + botType);

            MyMySqlManager.ImStarted(Settings.botid);
            Settings.URL = MyMySqlManager.getURL() + Settings.Loginname + ".php";

            try
            {
                System.Net.IPHostEntry ServerIPHostEntry = System.Net.Dns.GetHostEntry(Settings.ServerHostname);
                MyTCPWrapper.HostIp = ServerIPHostEntry.AddressList[0];
                MyTCPWrapper.Port = Settings.ServerPort;

                Logging.CommandLogger MyCommandDebugger = new Logging.CommandLogger(MyTCPWrapper, MyLogger);

                //BasicCommunication.HeartBeat MyHeartBeat = new BasicCommunication.HeartBeat(MyTCPWrapper, MyErrorHandler);
                BasicCommunication.HeartBeat MyHeartBeat = new BasicCommunication.HeartBeat(MyTCPWrapper);
                BasicCommunication.Ping MyPing = new BasicCommunication.Ping(MyTCPWrapper);
                Inventory MyInventory = new Inventory(MyTCPWrapper, MyLogger, MyMySqlManager);
                Storage MyStorage = new Storage(MyTCPWrapper, MyLogger, MyMySqlManager);
                BasicCommunication.new_minute MyMewMinute = new BasicCommunication.new_minute(MyTCPWrapper, MyMySqlManager, MyInventory);

                // Login here
                BasicCommunication.Login MyLogin = new BasicCommunication.Login(MyTCPWrapper);
                BasicCommunication.RawText MyRawText = new BasicCommunication.RawText(MyTCPWrapper);
                BasicCommunication.MessageParser MyMessageParser = new BasicCommunication.MessageParser(MyRawText, MyLogger, MyTCPWrapper, MyMySqlManager);
                BasicCommunication.changeMap MyChangeMap = new BasicCommunication.changeMap(MyTCPWrapper);

                //if this is a storage bot (not a tradebot) start a shutdown timer
                if (Settings.IsTradeBot == false && botType == 2)
                {
                    BasicCommunication.Shutdown MyShutdown = new BasicCommunication.Shutdown(MyTCPWrapper, MyMessageParser, MyMySqlManager, MyErrorHandler);
                }

                Logging.LoginLogger MyLoginLogger = new Logging.LoginLogger(MyLogin, MyLogger, MyTCPWrapper, MyMySqlManager);
                Logging.MessageLogger MyMessageLogger = new Logging.MessageLogger(MyMessageParser, MyLogger, MyMySqlManager);

                AdvancedCommunication.ActorHandler MyActorHandler = new AdvancedCommunication.ActorHandler(MyTCPWrapper, MyLogger, MyMySqlManager);

                AdvancedCommunication.PMHandler MyPMHandler = new AdvancedCommunication.PMHandler(MyTCPWrapper, MyMessageParser, MyMySqlManager);
                AdvancedCommunication.HelpCommandHandler MyHelpCommandHandler = new AdvancedCommunication.HelpCommandHandler(MyTCPWrapper, MyMessageParser, MyPMHandler, MyMySqlManager);
                AdvancedCommunication.AdvHelpCommandHandler MyAdvHelpCommandHandler = new AdvancedCommunication.AdvHelpCommandHandler(MyTCPWrapper, MyMessageParser, MyPMHandler, MyMySqlManager, MyHelpCommandHandler);
                AdvancedCommunication.AdminHelpCommandHandler MyAdminHelpCommandHandler = new AdvancedCommunication.AdminHelpCommandHandler(MyTCPWrapper, MyMessageParser, MyPMHandler, MyMySqlManager, MyAdvHelpCommandHandler);
                AdvancedCommunication.SAYCommandHandler MySAYCommandHandler = new AdvancedCommunication.SAYCommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyLogger, MyPMHandler);
                AdvancedCommunication.PMCommandHandler MyPMCommandHandler = new AdvancedCommunication.PMCommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager);

                AdvancedCommunication.BuddyHandler MyBuddyHandler = new AdvancedCommunication.BuddyHandler(MyTCPWrapper, MyMessageParser, MyAdvHelpCommandHandler, MyMySqlManager, MyLogin);

                //get my stats
                Stats MyStats = new Stats(MyTCPWrapper, MyLogger, MyMySqlManager);

                TradeHandler MyTradeHandler = new TradeHandler(MyTCPWrapper, MyMessageParser, MyMySqlManager, MyInventory, MyActorHandler, MyLogger, MyStorage, MyErrorHandler, MyHelpCommandHandler);

                AdvancedCommunication.INVCommandHandler MyINVCommandHandler = new AdvancedCommunication.INVCommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyInventory, MyTradeHandler, MyStats);
                AdvancedCommunication.INVRCommandHandler MyINVRCommandHandler = new AdvancedCommunication.INVRCommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyInventory, MyTradeHandler, MyStats);
                AdvancedCommunication.STOCommandHandler MySTOCommandHandler = new AdvancedCommunication.STOCommandHandler(MyTCPWrapper, MyMessageParser, MyAdvHelpCommandHandler, MyMySqlManager, MyStorage, MyTradeHandler, MyStats);
                AdvancedCommunication.INVLISTCommandHandler MyINVLISTCommandHandler = new AdvancedCommunication.INVLISTCommandHandler(MyHelpCommandHandler, MyTCPWrapper, MyMessageParser, MyAdvHelpCommandHandler, MyMySqlManager, MyInventory, MyTradeHandler, MyStats);
                AdvancedCommunication.ReserveCommandHandler MyReserveCommandHandler = new AdvancedCommunication.ReserveCommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyInventory, MyTradeHandler, MyStats, MyStorage);

                AdvancedCommunication.GiveCommandHandler MyGiveCommandHandler = new AdvancedCommunication.GiveCommandHandler(MyTCPWrapper, MyMessageParser, MyAdvHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler, MyPMHandler);
                AdvancedCommunication.GiveToCommandHandler MyGiveToCommandHandler = new AdvancedCommunication.GiveToCommandHandler(MyTCPWrapper, MyMessageParser, MyAdvHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler, MyPMHandler);
                AdvancedCommunication.BUYCommandHandler MyBUYCommandHandler = new AdvancedCommunication.BUYCommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler);
                AdvancedCommunication.DESCRIBECommandHandler MyDESCRIBECommandHandler = new AdvancedCommunication.DESCRIBECommandHandler(MyTCPWrapper, MyMessageParser, MyAdvHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler, MyPMHandler);

                AdvancedCommunication.DONATECommandHandler MyDONATECommandHandler = new AdvancedCommunication.DONATECommandHandler(MyTCPWrapper, MyMessageParser, MyAdvHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler);
                AdvancedCommunication.PUTONSALECommandHandler MyPUTONSALECommandHandler = new AdvancedCommunication.PUTONSALECommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler);
                AdvancedCommunication.WANTEDCommandHandler MyWANTEDCommandHandler = new AdvancedCommunication.WANTEDCommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler, MyInventory, MyStats);
                AdvancedCommunication.LOCCommandHandler MyLOCCommandHandler = new AdvancedCommunication.LOCCommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyLogger);
                AdvancedCommunication.BANCommandHandler MyBANCommandHandler = new AdvancedCommunication.BANCommandHandler(MyHelpCommandHandler, MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyLogger);
                AdvancedCommunication.DropCommandHandler MyDropCommandHandler = new AdvancedCommunication.DropCommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler, MyInventory);
                AdvancedCommunication.LaunchCommandHandler MyLaunchCommandHandler = new AdvancedCommunication.LaunchCommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler, MyInventory);
                AdvancedCommunication.QuitCommandHandler MyQuitCommandHandler = new AdvancedCommunication.QuitCommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler, MyInventory);
                AdvancedCommunication.WearCommandHandler MyWearCommandHandler = new AdvancedCommunication.WearCommandHandler(MyActorHandler, MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler, MyInventory);
                AdvancedCommunication.UseItemCommandHandler MyUseItemCommandHandler = new AdvancedCommunication.UseItemCommandHandler(MyActorHandler, MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler, MyInventory);

                AdvancedCommunication.ABOUTCommandHandler MyABOUTCommandHandler = new AdvancedCommunication.ABOUTCommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyLogger);
                AdvancedCommunication.AFKCommandHandler MyAFKCommandHandler = new AdvancedCommunication.AFKCommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyLogger);
                AdvancedCommunication.ELTCCommandHandler MyELTCCommandHandler = new AdvancedCommunication.ELTCCommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyLogger);

                AdvancedCommunication.ACCEPTMECommandHandler MyACCEPTMECommandHandler = new AdvancedCommunication.ACCEPTMECommandHandler(MyTCPWrapper, MyMessageParser, MyAdvHelpCommandHandler, MyMySqlManager, MyLogger);
                AdvancedCommunication.KICKMECommandHandler MyKICKMECommandHandler = new AdvancedCommunication.KICKMECommandHandler(MyTCPWrapper, MyMessageParser, MyAdvHelpCommandHandler, MyMySqlManager, MyLogger);
                AdvancedCommunication.GTCommandHandler MyGTCommandHandler = new AdvancedCommunication.GTCommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyLogger);
                AdvancedCommunication.GuildTextHandler MyGuildTextHandler = new AdvancedCommunication.GuildTextHandler(MyRawText, MyTCPWrapper, MyMessageParser, MyMySqlManager, MyLogger);

                AdvancedCommunication.GreetPlayers MyGreetPlayers = new AdvancedCommunication.GreetPlayers(MyTCPWrapper, MyMySqlManager, MyActorHandler);
                AdvancedCommunication.AdvertHandler MyAdvertHandler = new AdvancedCommunication.AdvertHandler(MyTCPWrapper, MyMySqlManager, MyLogger, MyTradeHandler, MyInventory, MyErrorHandler);
                AdvancedCommunication.HouseKeepingHandler MyHouseKeepingHandler = new AdvancedCommunication.HouseKeepingHandler(MyTCPWrapper, MyMySqlManager, MyLogger, MyErrorHandler);
                AdvancedCommunication.AltAdvertHandler MyAltAdvertHandler = new AdvancedCommunication.AltAdvertHandler(MyTCPWrapper, MyMySqlManager, MyLogger, MyTradeHandler, MyInventory, MyErrorHandler);
                //AdvancedCommunication.RulesHandler MyRulesHandler = new AdvancedCommunication.RulesHandler(MyTCPWrapper, MyMySqlManager, MyLogger, MyTradeHandler);
                AdvancedCommunication.MOVECommandHandler MyMOVECommandHandler = new AdvancedCommunication.MOVECommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyPMHandler);
                AdvancedCommunication.SitStandCommandHandler MySitStandCommandHandler = new AdvancedCommunication.SitStandCommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyPMHandler);
                AdvancedCommunication.RetradeCommandHandler MyRetradeCommandHandler = new AdvancedCommunication.RetradeCommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyActorHandler, MyTradeHandler);
                AdvancedCommunication.TextCommandsHandler MyTextCommandsHandler = new AdvancedCommunication.TextCommandsHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyLogger);
                AdvancedCommunication.WhoIsTradingCommandHandler MyWhoIsTradingHandler = new cs_elbot.AdvancedCommunication.WhoIsTradingCommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler);
                AdvancedCommunication.CancelTradeCommandHandler MyCancelTradeHandler = new cs_elbot.AdvancedCommunication.CancelTradeCommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler);

                //goto command handler
                AdvancedCommunication.GotoCommandHandler MyGotoCommandHandler = new cs_elbot.AdvancedCommunication.GotoCommandHandler(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyPMHandler, MyActorHandler);

                //use object command handler
                AdvancedCommunication.UseObject MyUseObjectCommandHandler = new cs_elbot.AdvancedCommunication.UseObject(MyTCPWrapper, MyMessageParser, MyAdminHelpCommandHandler, MyMySqlManager, MyPMHandler);

                //openstorage
                AdvancedCommunication.OpenStorage MyOpenStorageCommandHandler = new cs_elbot.AdvancedCommunication.OpenStorage(MyHelpCommandHandler, MyTCPWrapper, MyMessageParser, MyMySqlManager, MyActorHandler, MyAdminHelpCommandHandler);
                //withdraw
                AdvancedCommunication.WithdrawCommandHandler MyWithdrawCommandHandler = new cs_elbot.AdvancedCommunication.WithdrawCommandHandler(MyTCPWrapper, MyMessageParser, MyAdvHelpCommandHandler, MyMySqlManager, MyStorage, MyTradeHandler, MyStats, MyInventory);
                AdvancedCommunication.DepositCommandHandler MyDepositCommandHandler = new cs_elbot.AdvancedCommunication.DepositCommandHandler(MyTCPWrapper, MyMessageParser, MyAdvHelpCommandHandler, MyMySqlManager, MyInventory, MyTradeHandler, MyStats, MyStorage);

                //gamble
                AdvancedCommunication.GAMBLECommandHandler MyGAMBLECommandHandler = new AdvancedCommunication.GAMBLECommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyLogger, MyTradeHandler, MyInventory);
                AdvancedCommunication.PRIZECommandHandler MyPRIZECommandHandler = new AdvancedCommunication.PRIZECommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyInventory, MyTradeHandler, MyStats, MyLogger, MyActorHandler);

                //isonline command
                AdvancedCommunication.ISOnlineCommandHandler MyISOnlineCommandHandler = new AdvancedCommunication.ISOnlineCommandHandler(MyTCPWrapper, MyMessageParser, MyHelpCommandHandler, MyMySqlManager, MyLogger);

                //Guard bot code below
                if (botType == 3)
                {
                    AdvancedCommunication.AssessThreat MyAssessThreat = new AdvancedCommunication.AssessThreat(MyTCPWrapper, MyMySqlManager, MyActorHandler);
                }

                Perks MyPerks = new Perks(MyTCPWrapper, MyLogger, MyMySqlManager);
                CLI MyCLI = new CLI(MyTCPWrapper, MyMessageParser);

                MyCLI.DoLoop();
            }
            catch (System.Net.Sockets.SocketException se)
            {
                Console.WriteLine("Error in main loop: " + se.Message);
                if (se.ErrorCode == 11001) // Host name not found
                {
                    Console.WriteLine("When this error occurs, check that you are connected to the internet and a firewall is not blocking this program.");
                }
            }
            catch (Exception except)
            {
                MyErrorHandler.writeErrorMessage("Exception in main loop: " + except);
            }
            finally
            {
                Console.ReadLine();
            }
        }