/// <summary>
        /// Read and send back Player name lookup packet
        /// </summary>
        /// <param name="client">
        /// Client sending
        /// </param>
        /// <param name="packet">
        /// Packet data
        /// </param>
        public static void Read(Client client, byte[] packet)
        {
            PacketReader reader = new PacketReader(ref packet);

            reader.ReadUInt16(); // packet ID
            reader.ReadUInt16(); // data length
            uint playerId = uint.MaxValue;
            string playerName = reader.ReadString();
            client.Server.Debug(
                client, "{0} >> PlayerNameLookup: PlayerName: {1}", client.Character.characterName, playerName);
            reader.Finish();

            SqlWrapper ms = new SqlWrapper();
            string sqlQuery = "SELECT `ID` FROM `characters` WHERE `Name` = " + "'" + playerName + "'";
            DataTable dt = ms.ReadDatatable(sqlQuery);
            if (dt.Rows.Count > 0)
            {
                // Yes, this double cast is correct
                playerId = (uint)(int)dt.Rows[0][0];
            }

            byte[] namelookup = NameLookupResult.Create(playerId, playerName);
            client.Send(namelookup);
            client.KnownClients.Add(playerId);
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="guildID"></param>
 /// <returns></returns>
 public static List<GuildEntry> GetGuildInfo(int guildID)
 {
     List<GuildEntry> Guild = new List<GuildEntry>();
     SqlWrapper ms = new SqlWrapper();
     string SqlQuery = "SELECT * FROM `organizations` WHERE ID=" + "'" + guildID + "'";
     DataTable dt = ms.ReadDatatable(SqlQuery);
     foreach (DataRow row in dt.Rows)
     {
         GuildEntry guildEntry = new GuildEntry();
         guildEntry.guildID = (UInt32) row["ID"];
         guildEntry.creation = (DateTime) row["creation"];
         guildEntry.Name = (string) row["Name"];
         guildEntry.LeaderID = (Int32) row["LeaderID"];
         guildEntry.GovernmentForm = (Int32) row["GovernmentForm"];
         guildEntry.Description = (string) row["Description"];
         guildEntry.Objective = (string) row["Objective"];
         guildEntry.History = (string) row["History"];
         guildEntry.Tax = (Int32) row["Tax"];
         guildEntry.Bank = (UInt64) row["Bank"];
         guildEntry.Comission = (Int32) row["Comission"];
         guildEntry.ContractsID = (Int32) row["ContractsID"];
         guildEntry.TowerFieldID = (Int32) row["TowerfieldID"];
         Guild.Add(guildEntry);
     }
     return Guild;
 }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="charId"></param>
        /// <returns></returns>
        public static List<ItemsEntry> LoadItems(int charId)
        {
            List<ItemsEntry> items = new List<ItemsEntry>();
            SqlWrapper sqlWrapper = new SqlWrapper();
            try
            {
                string sqlQuery =
                    "SELECT `Placement`, `Flags`, `MultipleCount`, `Type`, `Instance`, `LowID`, `HighID`, `Quality`, `Nothing` FROM `inventory` WHERE ID = "
                    + "'" + charId + "' ORDER BY Placement ASC";
                DataTable dataTable = sqlWrapper.ReadDatatable(sqlQuery);

                foreach (DataRow itemRow in dataTable.Rows)
                {
                    ItemsEntry itemEntry = new ItemsEntry();
                    itemEntry.Placement = (Int32)itemRow["Placement"];
                    itemEntry.Flags = (Int16)itemRow["Flags"];
                    itemEntry.MultipleCount = (Int16)itemRow["MultipleCount"];
                    itemEntry.ItemType = (Int32)itemRow["Type"];
                    itemEntry.Instance = (Int32)itemRow["Instance"];
                    itemEntry.LowId = (Int32)itemRow["LowID"];
                    itemEntry.HighId = (Int32)itemRow["HighID"];
                    itemEntry.Quality = (Int32)itemRow["Quality"];
                    itemEntry.Nothing = (Int32)itemRow["Nothing"];

                    items.Add(itemEntry);
                }
            }
            catch (Exception e)
            {
                sqlWrapper.sqlclose();
                Console.WriteLine("Error: CharacterID: " + charId + "Message: " + e.Message);
            }
            return items;
        }
 // Load All Container Arrays from  SQL
 void LoadFromSQL(string tablename)
 {
     // Empty the Array first
     for (int i = 0; i < Items.Length; i++)
         Items[i] = null;
     SqlWrapper sql = new SqlWrapper();
     DataTable dt = sql.ReadDatatable("SELECT * FROM " + tablename + " WHERE container=" + Type + " AND ID=" + Instance);
     foreach (DataRow row in dt.Rows)
     {
         int place = (Int32)row["placement"];
         if (place < NumberOfSlots)
         {
             if (((Int32)row["type"] != 0) && ((Int32)row["instance"] != 0))
             {
                 // Do stuff with instanced items
                 // Create item from lowid/highid interpolated by QL and read stats from sql
             }
             else
             {
                 ContainerEntry ce = new ContainerEntry();
                 ce.LowID = (Int32)row["lowid"];
                 ce.HighID = (Int32)row["highid"];
                 ce.QL = (Int32)row["quality"];
                 ce.Amount = (Int32)row["multiplecount"];
                 ce.Flags = (uint)row["flags"];
                 ce.InstanceID = 0;
                 ce.Type = 0;
                 Items[place] = ce;
             }
         }
     }
 }
Пример #5
0
        /// <summary>
        /// </summary>
        /// <param name="orgId">
        /// </param>
        /// <param name="excludePresident">
        /// </param>
        /// <returns>
        /// </returns>
        public static List<int> GetOrgMembers(uint orgId, bool excludePresident)
        {
            // Stat #5 == Clan == OrgID
            // Stat #48 == ClanLevel == Org Rank (0 is president)
            SqlWrapper mySql = new SqlWrapper();
            List<int> orgMembers = new List<int>();
            string pres = string.Empty;

            if (excludePresident)
            {
                pres = " AND `ID` NOT IN (SELECT `ID` FROM `characters_stats` WHERE `Stat` = '48' AND `Value` = '0')";
            }

            DataTable dt =
                mySql.ReadDatatable(
                    "SELECT `ID` FROM `characters_stats` WHERE `Stat` = '5' AND `Value` = '" + orgId + "'" + pres);

            if (dt.Rows.Count > 0)
            {
                foreach (DataRow row in dt.Rows)
                {
                    orgMembers.Add((Int32)row[0]);
                }
            }

            return orgMembers;
        }
        public static int CacheAllFromDB()
        {
            int c = 0;
            SqlWrapper ms = new SqlWrapper();
            DataTable dt = ms.ReadDatatable("SELECT * FROM doors");

            foreach (DataRow row in dt.Rows)
            {
                Doors door = new Doors();
                door.ID = (Int32)row["ID"];
                door.Coordinates.x = (Single)row["X"];
                door.Coordinates.y = (Single)row["Y"];
                door.Coordinates.z = (Single)row["Z"];
                door.hX = (Single)row["hx"];
                door.hY = (Single)row["hy"];
                door.hZ = (Single)row["hz"];
                door.hW = (Single)row["hw"];

                door.teleport_to_ID = (Int32)row["toid"];
                door.teleport_to_PlayField = (Int32)(UInt32)row["toplayfield"];
                door.proxy = (Boolean)row["proxy"];
                door.playfield = (Int32)(UInt32)row["playfield"];
                Program.zoneServer.Doors.Add(door);
                c++;
            }
            return c;
        }
Пример #7
0
        public void writeOwnertoSql()
        {
            SqlWrapper ms = new SqlWrapper();

            ms.SqlInsert(
                "INSERT INTO " + this.GetSqlTablefromDynelType() + "owner VALUES (" + this.Id.ToString() + ","
                + this.Owner.Id.ToString() + ")");
        }
        /// <summary>
        /// Read login 
        /// </summary>
        /// <param name="recvLogin">
        /// Username sent by client
        /// </param>
        public void GetLoginFlags(string recvLogin)
        {
            string sqlQuery = "SELECT Flags FROM login WHERE Username = "******"'" + recvLogin + "'";
            SqlWrapper ms = new SqlWrapper();
            DataTable dt = ms.ReadDatatable(sqlQuery);

            foreach (DataRow row in dt.Rows)
            {
                this.flagsL = (Int32)row[0];
            }
        }
        /// <summary>
        /// Returns the Password hash
        /// </summary>
        /// <param name="recvLogin">
        /// Username received from the client
        /// </param>
        public void GetLoginPassword(string recvLogin)
        {
            string sqlQuery = "SELECT `Password` FROM `login` WHERE `Username` = " + "'" + recvLogin + "'";
            SqlWrapper ms = new SqlWrapper();
            DataTable dt = ms.ReadDatatable(sqlQuery);

            foreach (DataRow row in dt.Rows)
            {
                this.passwdL = (string)row[0];
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="recvLogin"></param>
        public void GetLoginName(string recvLogin)
        {
            string SqlQuery = "SELECT Username FROM login WHERE Username = "******"'" + recvLogin + "'";
            SqlWrapper ms = new SqlWrapper();
            DataTable dt = ms.ReadDatatable(SqlQuery);

            foreach (DataRow row in dt.Rows)
            {
                this.loginN = (string)row[0];
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="recvLogin"></param>
        public void GetCharacterZone(string recvLogin)
        {
            string sqlQuery = "SELECT `playfield` FROM `characters` WHERE Username = "******"'" + recvLogin + "'";
            SqlWrapper ms = new SqlWrapper();
            DataTable dt = ms.ReadDatatable(sqlQuery);

            foreach (DataRow datarow2 in dt.Rows)
            {
                this.playfield = (Int32)datarow2["playfield"];
                this.zone = BitConverter.GetBytes(this.playfield);
            }
        }
Пример #12
0
        /// <summary>
        /// Read name packet
        /// </summary>
        /// <param name="charId">
        /// The character Id.
        /// </param>
        /// <returns>
        /// The name of the character
        /// </returns>
        public string GetCharacterName(int charId)
        {
            string sqlQuery = string.Format("SELECT `Name` FROM `characters` WHERE `ID` = '{0}'", charId);
            SqlWrapper ms = new SqlWrapper();
            DataTable dt = ms.ReadDatatable(sqlQuery);
            if (dt.Rows.Count > 0)
            {
                this.name1 = (string)dt.Rows[0][0];
            }

            return this.name1;
        }
        public static List<UploadedNanoEntry> UploadedNanos(int charId)
        {
            List<UploadedNanoEntry> uploadedNano = new List<UploadedNanoEntry>();
            SqlWrapper ms = new SqlWrapper();
            string sqlQuery = "SELECT `NanoProgramID` FROM `uploadednanos` WHERE CharID = " + "'" + charId + "'";
            DataTable dt = ms.ReadDatatable(sqlQuery);

            foreach (DataRow nanoRow in dt.Rows)
            {
                uploadedNano.Add(new UploadedNanoEntry { NanoProgramId = (Int32)nanoRow["NanoProgramID"] });
            }
            return uploadedNano;
        }
Пример #14
0
        public void readOwnerfromSql()
        {
            SqlWrapper ms = new SqlWrapper();

            DataTable dt =
                ms.ReadDatatable(
                    "SELECT * FROM " + this.GetSqlTablefromDynelType() + "owner WHERE ID=" + this.Id.ToString());
            if (dt.Rows.Count > 0)
            {
                //TODO: Add Pet code here
                // Owner = FindCharacterByID(ms.myreader.GetInt32("owner");
            }
        }
        // LoadRecentMsgsList unused?

        /// <summary>
        /// The load recent msgs list.
        /// </summary>
        /// <param name="charId">
        /// The char Id.
        /// </param>
        /// <returns>
        /// List of received messages
        /// </returns>
        public static Collection<RecentMsgsEntry> LoadRecentMsgsList(uint charId)
        {
            Collection<RecentMsgsEntry> reciviedMsgsList = new Collection<RecentMsgsEntry>();
            SqlWrapper ms = new SqlWrapper();
            string sqlQuery = "SELECT `ReceivedID` FROM `receivedmsgs` WHERE PlayerID =" + "'" + charId + "'";
            DataTable dt = ms.ReadDatatable(sqlQuery);
            foreach (DataRow msgsRow in dt.Rows)
            {
                RecentMsgsEntry rme = new RecentMsgsEntry { ReceivedId = uint.Parse(msgsRow["ReceivedID"].ToString()) };
                reciviedMsgsList.Add(rme);
            }

            return reciviedMsgsList;
        }
Пример #16
0
        public void readWaypointsfromSQL()
        {
            SqlWrapper ms = new SqlWrapper();
            AOCoord m_wp;

            DataTable dt = ms.ReadDT("SELECT * FROM " + getSQLTablefromDynelType() + "waypoints WHERE ID=" + ID.ToString());

            foreach (DataRow row in dt.Rows)
            {
                m_wp = new AOCoord((Single)row["X"], (Single)row["Y"], (Single)row["Z"]);
                Waypoints.Add(m_wp);
            }
             
        }
 public static bool IsOnline(int id)
 {
     SqlWrapper sql = new SqlWrapper();
     DataTable dt = sql.ReadDatatable("SELECT * FROM characters WHERE ID = " + id + ";");
     if (dt.Rows.Count == 0)
     {
         throw new CharacterDoesNotExistException("Character does not exist: " + id);
     }
     if ((Int16)dt.Rows[0]["Online"] == 1)
     {
         return true;
     }
     return false;
 }
        /// <summary>
        /// The load buddy list.
        /// </summary>
        /// <param name="charId">
        /// The char Id.
        /// </param>
        /// <returns>
        /// Buddy list
        /// </returns>
        public static Collection<BuddyListEntry> LoadBuddyList(int charId)
        {
            Collection<BuddyListEntry> buddyList = new Collection<BuddyListEntry>();
            SqlWrapper ms = new SqlWrapper();
            string sqlQuery = "SELECT `BuddyID` FROM `buddylist` WHERE PlayerID = " + "'" + charId + "'";
            DataTable dt = ms.ReadDatatable(sqlQuery);

            foreach (DataRow buddyRow in dt.Rows)
            {
                BuddyListEntry buddylistentry = new BuddyListEntry();
                buddylistentry.BuddyId = uint.Parse(buddyRow["BuddyID"].ToString());
                buddyList.Add(buddylistentry);
            }

            return buddyList;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="recvLogin"></param>
        public void GetCharacterName(string recvLogin)
        {
            string sqlQuery = "SELECT `Name`, `Breed`, `Profession` FROM `characters` WHERE Username = "******"'"
                              + recvLogin + "'";
            SqlWrapper ms = new SqlWrapper();
            DataTable dt = ms.ReadDatatable(sqlQuery);

            foreach (DataRow datarow1 in dt.Rows)
            {
                this.name = Encoding.ASCII.GetBytes(datarow1["Name"].ToString().PadRight(11, '\u0000'));
                this.cbreedint = int.Parse(datarow1["Breed"].ToString());
                this.breed = BitConverter.GetBytes(this.cbreedint);
                this.cprofint = int.Parse(datarow1["Profession"].ToString());
                this.prof = BitConverter.GetBytes(this.cprofint);
            }
        }
Пример #20
0
        public void writeWaypointstoSQL()
        {
            SqlWrapper ms = new SqlWrapper();
            int count;

            ms.SqlDelete("DELETE FROM "+getSQLTablefromDynelType()+"waypoints WHERE ID="+ID.ToString());

            for (count = 0; count < Waypoints.Count; count++)
            {
                ms.SqlInsert("INSERT INTO " + getSQLTablefromDynelType() + "waypoints VALUES (" + ID.ToString() + "," + PlayField.ToString() + ","
                    + String.Format(System.Globalization.CultureInfo.InvariantCulture, "'{0}'", Waypoints[count].x) + ","
                    + String.Format(System.Globalization.CultureInfo.InvariantCulture, "'{0}'", Waypoints[count].y) + ","
                    + String.Format(System.Globalization.CultureInfo.InvariantCulture, "'{0}'", Waypoints[count].z) + ")");
            }
            if (Waypoints.Count > 0) { }
        }
        public static void CacheAllFromDB()
        {
            SqlWrapper wrapper = new SqlWrapper();
            DataTable dt = wrapper.ReadDatatable("SELECT * FROM mobdroptable");

            DataRowCollection drc = dt.Rows;
            foreach (DataRow row in drc)
            {
                FullDropList.Add(
                    new LootItem(
                        row[0].ToString(),
                        row[1].ToString(),
                        row[2].ToString(),
                        row[3].ToString(),
                        row[4].ToString(),
                        row[5].ToString()));
            }
        }
Пример #22
0
        /// <summary>
        /// The execute command.
        /// </summary>
        /// <param name="client">
        /// The client.
        /// </param>
        /// <param name="target">
        /// The target.
        /// </param>
        /// <param name="args">
        /// The args.
        /// </param>
        public override void ExecuteCommand(Client client, Identity target, string[] args)
        {
            if (args.Length >= 2)
            {
                if (args[1].ToLower() == "list")
                {
                    string filter = string.Empty;
                    if (args.Length > 2)
                    {
                        for (int i = 2; i < args.Length; i++)
                        {
                            if (filter.Length > 0)
                            {
                                filter = filter + " AND ";
                            }

                            if (filter.Length == 0)
                            {
                                filter = "WHERE ";
                            }

                            filter = filter + "name like '%" + args[i] + "%' ";
                        }
                    }

                    SqlWrapper sql = new SqlWrapper();
                    DataTable dt =
                        sql.ReadDatatable("SELECT Hash, Name FROM mobtemplate " + filter + " order by Name ASC");
                    client.SendChatText("List of mobtemplates: ");
                    foreach (DataRow row in dt.Rows)
                    {
                        client.SendChatText(row[0] + " " + row[1]);
                    }
                    return;
                }
            }

            if (args.Length == 3)
            {
                NonPlayerCharacterHandler.SpawnMonster(client, args[1], uint.Parse(args[2]));
                return;
            }
            this.CommandHelp(client);
        }
Пример #23
0
        /// <summary>
        /// Check if a certain character is on the clients authenticated account
        /// </summary>
        /// <param name="UserName">Client Username</param>
        /// <param name="CharacterID">Client CharacterId</param>
        public bool IsCharacterOnAccount(string UserName, UInt32 CharacterID)
        {
            SqlWrapper mySql = new SqlWrapper();

            DataTable dt = mySql.ReadDatatable("SELECT `Username` FROM `characters` WHERE ID = " + CharacterID);

            if (dt.Rows.Count == 0)
            {
                return(false);
            }
            else
            {
                if (UserName.ToLower() == ((string)dt.Rows[0][0]).ToLower())
                {
                    return(true);
                }
                return(false);
            }
            return(false); // I hope this works otherwise turn it true?
        }
Пример #24
0
        // Save All Container Arrays To SQL
        void SaveToSQL(string tablename)
        {
            SqlWrapper sql = new SqlWrapper();

            sql.SqlDelete("DELETE FROM " + tablename + " WHERE container=" + Type + " AND ID=" + Instance);

            for (int i = 0; i < Items.Length; i++)
            {
                if (Items[i] is ContainerEntry)
                {
                    // Not instanced items first
                    ContainerEntry ce = (ContainerEntry)Items[i];
                    sql.SqlInsert("INSERT INTO " + tablename + " (ID,Placement, flags, multiplecount, type,instance, lowid,highid, quality,nothing, container) VALUES (" + Instance + "," + i + "," + ce.Flags + "," + ce.Amount + ",0,0," + ce.LowID + "," + ce.HighID + "," + ce.QL + ",0," + Type + ")");
                }
                else
                {
                    // Do instanced items stuff here
                    // insert into inventory table AND store item's stats
                }
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="accountName"></param>
        /// <returns></returns>
        public static List<CharacterEntry> LoadCharacters(string accountName)
        {
            List<CharacterEntry> characters = new List<CharacterEntry>();
            SqlWrapper ms = new SqlWrapper();

            string SqlQuery = "SELECT `characters`.`ID`, `characters`.`Name`, `characters`.`playfield`, (SELECT `Value` FROM `characters_stats` WHERE `characters`.`ID` = `characters_stats`.`ID` AND `Stat` = 54) as level, (SELECT `Value` FROM `characters_stats` WHERE `characters`.`ID` = `characters_stats`.`ID` AND `Stat` = 4) as breed, (SELECT `Value` FROM `characters_stats` WHERE `characters`.`ID` = `characters_stats`.`ID` AND `Stat` = 59) as gender, (SELECT `Value` FROM `characters_stats` WHERE `characters`.`ID` = `characters_stats`.`ID` AND `Stat` = 60) as profession FROM `characters` WHERE `characters`.Username = '******'";
            DataTable dt = ms.ReadDT(SqlQuery);

            foreach (DataRow row in dt.Rows)
            {
                CharacterEntry charentry = new CharacterEntry();
                charentry.ID = (Int32)row["ID"];
                charentry.Name = ((string)row["Name"]).PadRight(11, '\u0000');
                charentry.playfield = (Int32)row["playfield"];
                charentry.Level = (Int32)row["level"];
                charentry.Breed = (Int32)row["breed"];
                charentry.Gender = (Int32)row["gender"];
                charentry.Profession = (Int32)row["profession"];
                characters.Add(charentry);
            }
            return characters;
        }
 public override void ExecuteCommand(Client client, Identity target, string[] args)
 {
     if ((args.Length == 2) && (args[1].ToLower() != "list"))
     {
         VendorHandler.SpawnVendor(client, args[1]);
     }
     else
     {
         if (args.Length >= 2)
         {
             string filter = "";
             if (args.Length > 2)
             {
                 for (int i = 2; i < args.Length; i++)
                 {
                     if (filter.Length > 0)
                     {
                         filter = filter + " AND ";
                     }
                     if (filter.Length == 0)
                     {
                         filter = "WHERE ";
                     }
                     filter = filter + "name like '%" + args[i] + "%' ";
                 }
             }
             SqlWrapper sql = new SqlWrapper();
             DataTable dt =
                 sql.ReadDatatable("SELECT Hash, Name FROM vendortemplate " + filter + " order by Name ASC");
             client.SendChatText("List of vendortemplates: ");
             foreach (DataRow row in dt.Rows)
             {
                 client.SendChatText(row[0] + " " + row[1]);
             }
         }
     }
 }
        public Tradeskill(Client cli, int src_loc, int tgt_loc)
        {
            Cli = cli;
            SourcePlacement = src_loc;
            TargetPlacement = tgt_loc;
            Source = cli.Character.getInventoryAt(src_loc).Item;
            Target = cli.Character.getInventoryAt(tgt_loc).Item;

            SourceID = Source.highID;
            TargetID = Target.highID;

            isTradeskill = false;

            SqlWrapper wrapper = new SqlWrapper();
            DataTable dt = wrapper.ReadDT("SELECT * FROM tradeskill WHERE ID1 = " + Source.highID + " AND ID2 = " + Target.highID + ";");
            DataRowCollection drc = dt.Rows;

            if (drc.Count > 0)
            {
                isTradeskill = true;
                SourceName = (string)drc[0][3];
                TargetName = (string)drc[0][4];
                ResultName = (string)drc[0][5];
                ResultLID = (int)drc[0][6];
                ResultHID = (int)drc[0][7];
                RangePercent = (int)drc[0][8];
                DeleteFlag = (int)drc[0][9];
                FirstSkill = (int)drc[0][10];
                FirstSkillPercent = (int)drc[0][11];
                FirstSkillPerBump = (int)drc[0][12];
                SecondSkill = (int)drc[0][13];
                SecondSkillPercent = (int)drc[0][14];
                SecondSkillPerBump = (int)drc[0][15];
                MaxBump = (int)drc[0][16];
                MinXP = (int)drc[0][17];
                MaxXP = (int)drc[0][18];

                bDeleteSource = ((DeleteFlag & 1) == 1);
                bDeleteTarget = (((DeleteFlag >> 1) & 1) == 1);

                MinQL = Target.Quality;
                SetMaxQL();

                if (FirstSkill != 0)
                {
                    FirstSkillRequirement = (int)Math.Ceiling((decimal)FirstSkillPercent / 100M * (decimal)Target.Quality);
                    FirstSkillValue = Cli.Character.Stats.GetStatbyNumber(FirstSkill).Value;
                    FirstSkillName = StatsList.GetStatName(FirstSkill);
                }

                if (SecondSkill != 0)
                {
                    SecondSkillRequirement = (int)Math.Ceiling((decimal)SecondSkillPercent / 100M * (decimal)Target.Quality);
                    SecondSkillValue = Cli.Character.Stats.GetStatbyNumber(SecondSkill).Value;
                    SecondSkillName = StatsList.GetStatName(SecondSkill);
                }
            }
        }
 /// <summary>
 /// Read all stats from Sql
 /// </summary>
 public void ReadStatsfromSql()
 {
     SqlWrapper sql = new SqlWrapper();
     DataTable dt =
         sql.ReadDatatable(
             "SELECT Stat,Value FROM " + this.flags.Parent.GetSqlTablefromDynelType() + "_stats WHERE ID="
             + this.flags.Parent.Id); // Using Flags to address parent object
     foreach (DataRow row in dt.Rows)
     {
         this.SetBaseValue((Int32)row[0], (UInt32)((Int32)row[1]));
     }
 }
        /// <summary>
        /// Read stat from Sql
        /// </summary>
        public void ReadStatFromSql()
        {
            if (this.DoNotDontWriteToSql)
            {
                return;
            }
            SqlWrapper sql = new SqlWrapper();
            int id = this.parent.Id;
            DataTable dt =
                sql.ReadDatatable(
                    "SELECT Value FROM " + this.parent.GetSqlTablefromDynelType() + " WHERE ID=" + id + " AND Stat="
                    + this.StatNumber + ";");

            if (dt.Rows.Count > 0)
            {
                this.Value = (Int32)dt.Rows[0][0];
            }
        }
 /// <summary>
 /// Write Stat to Sql
 /// </summary>
 public void WriteStatToSql(bool doit)
 {
     if (this.DoNotDontWriteToSql)
     {
         return;
     }
     int id = this.parent.Id;
     SqlWrapper sql = new SqlWrapper();
     if (doit)
     {
         if (this.parent is NonPlayerCharacterClass)
         {
             sql.SqlInsert(
                 "INSERT INTO " + (this.parent).GetSqlTablefromDynelType()
                 + "_stats (ID, Playfield, Stat, Value) VALUES (" + id + "," + this.parent.PlayField + ","
                 + this.StatNumber + "," + ((Int32)this.StatBaseValue) + ") ON DUPLICATE KEY UPDATE Value="
                 + ((Int32)this.StatBaseValue) + ";");
         }
         else
         {
             sql.SqlInsert(
                 "INSERT INTO " + (this.parent).GetSqlTablefromDynelType() + "_stats (ID, Stat, Value) VALUES ("
                 + id + "," + this.StatNumber + "," + ((Int32)this.StatBaseValue)
                 + ") ON DUPLICATE KEY UPDATE Value=" + ((Int32)this.StatBaseValue) + ";");
         }
     }
 }
Пример #31
0
        static void Main(string[] args)
        {
            #region Console Texts...


            Console.Title = "CellAO " + AssemblyInfoclass.Title + " Console. Version: " + AssemblyInfoclass.Description + " " + AssemblyInfoclass.AssemblyVersion;
            ConsoleText ct = new ConsoleText();
            ct.TextRead("main.txt");
            Console.WriteLine("Loading " + AssemblyInfoclass.Title + "...");
            if (ismodified())
            {
                Console.WriteLine("Your " + AssemblyInfoclass.Title + " was compiled from modified source code.");
            }
            else
            if (ismixed())
            {
                Console.WriteLine("Your " + AssemblyInfoclass.Title + " uses mixed SVN revisions.");
            }

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("[OK]");
            Console.ResetColor();

            #endregion
            //Sying helped figure all this code out, about 5 yearts ago! :P
            bool processedargs = false;
            LoginServer           = new Server();
            LoginServer.EnableTCP = true;
            LoginServer.EnableUDP = false;
            try { LoginServer.TcpIP = IPAddress.Parse(ConfigReadWrite.Instance.CurrentConfig.ListenIP); }
            catch { ct.TextRead("ip_config_parse_error.txt"); Console.ReadKey(); return; }
            LoginServer.TcpPort = Convert.ToInt32(ConfigReadWrite.Instance.CurrentConfig.LoginPort);

            #region NLog

            LoggingConfiguration config        = new LoggingConfiguration();
            ColoredConsoleTarget consoleTarget = new ColoredConsoleTarget();
            consoleTarget.Layout = "${date:format=HH\\:MM\\:ss} ${logger} ${message}";
            FileTarget fileTarget = new FileTarget();
            config.AddTarget("file", fileTarget);
            fileTarget.FileName = "${basedir}/LoginEngineLog.txt";
            fileTarget.Layout   = "${date:format=HH\\:MM\\:ss} ${logger} ${message}";
            LoggingRule rule1 = new LoggingRule("*", LogLevel.Trace, consoleTarget);
            config.LoggingRules.Add(rule1);
            LoggingRule rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget);
            config.LoggingRules.Add(rule2);
            LogManager.Configuration = config;

            #endregion

            LoginServer.MaximumPendingConnections = 100;

            #region Console Commands
            //Andyzweb: Added checks for start and stop
            //also added a running command to return status of the server
            //and added Console.Write("\nServer Command >>"); to login server
            string consoleCommand;
            ct.TextRead("login_consolecommands.txt");
            while (true)
            {
                if (!processedargs)
                {
                    if (args.Length == 1)
                    {
                        if (args[0].ToLower() == "/autostart")
                        {
                            ct.TextRead("autostart.txt");
                            ThreadMgr.Start();
                            LoginServer.Start();
                        }
                    }
                    processedargs = true;
                }
                Console.Write("\nServer Command >>");

                consoleCommand = Console.ReadLine();
                string temp = "";
                while (temp != consoleCommand)
                {
                    temp           = consoleCommand;
                    consoleCommand = consoleCommand.Replace("  ", " ");
                }
                consoleCommand = consoleCommand.Trim();
                switch (consoleCommand.ToLower())
                {
                case "start":
                    if (LoginServer.Running)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        ct.TextRead("loginisrunning.txt");
                        Console.ResetColor();
                        break;
                    }
                    ThreadMgr.Start();
                    LoginServer.Start();
                    break;

                case "stop":
                    if (!LoginServer.Running)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        ct.TextRead("loginisnotrunning.txt");
                        Console.ResetColor();
                        break;
                    }
                    ThreadMgr.Stop();
                    LoginServer.Stop();
                    break;

                case "exit":
                    Process.GetCurrentProcess().Kill();
                    break;

                case "running":
                    if (LoginServer.Running)
                    {
                        //Console.WriteLine("Login Server is running");
                        ct.TextRead("loginisrunning.txt");
                        break;
                    }
                    //Console.WriteLine("Login Server not running");
                    ct.TextRead("loginisnotrunning.txt");
                    break;

                    #region Help Commands....
                case "help":
                    ct.TextRead("logincmdhelp.txt");
                    break;

                case "help start":
                    ct.TextRead("helpstart.txt");
                    break;

                case "help exit":
                    ct.TextRead("helpstop.txt");
                    break;

                case "help running":
                    ct.TextRead("loginhelpcmdrunning.txt");
                    break;

                case "help Adduser":
                    ct.TextRead("logincmdadduserhelp.txt");
                    break;

                case "help setpass":
                    ct.TextRead("logincmdhelpsetpass.txt");
                    break;

                    #endregion
                default:

                    #region Adduser
                    //This section handles the command for adding a user to the database
                    if (consoleCommand.ToLower().StartsWith("adduser"))
                    {
                        string[] parts = consoleCommand.Split(' ');
                        if (parts.Length < 9)
                        {
                            Console.WriteLine("Invalid command syntax.\nPlease use:\nAdduser <username> <password> <number of characters> <expansion> <gm level> <email> <FirstName> <LastName>");
                            break;
                        }
                        string username = parts[1];
                        string password = parts[2];
                        int    numChars = 0;
                        try
                        {
                            numChars = int.Parse(parts[3]);
                        }
                        catch { Console.WriteLine("Error: <number of characters> must be a number (duh!)"); break; }
                        int expansions = 0;
                        try
                        {
                            expansions = int.Parse(parts[4]);
                            if (expansions < 0 || expansions > 2047)
                            {
                                throw new Exception();
                            }
                        }
                        catch { Console.WriteLine("Error: <expansions> must be a number between 0 and 2047!"); break; }
                        int gm = 0;
                        try
                        {
                            gm = int.Parse(parts[5]);
                        }
                        catch { Console.WriteLine("Error: <GM Level> must be number (duh!)"); break; }

                        string email = parts[6].ToString();
                        try
                        {
                            if (email == null)
                            {
                                throw new Exception();
                            }
                        }
                        catch { Console.WriteLine("Error: <Email> You must supply an email address for this account"); break; }
                        string firstname = parts[7].ToString();
                        try
                        {
                            if (firstname == null)
                            {
                                throw new Exception();
                            }
                        }
                        catch { Console.WriteLine("Error: <FirstName> You must supply a first name for this accout"); break; }
                        string lastname = parts[8].ToString();
                        try
                        {
                            if (lastname == null)
                            {
                                throw new Exception();
                            }
                        }
                        catch { Console.WriteLine("Error: <LastName> You must supply a last name for this account"); break; }

                        string formatString;
                        formatString = "INSERT INTO `login` (`CreationDate`, `Flags`,`AccountFlags`,`Username`,`Password`,`Allowed_Characters`,`Expansions`, `GM`, `Email`, `FirstName`, `LastName`) VALUES " + "(NOW(), '0', '0', '{0}', '{1}', {2}, {3}, {4}, '{5}', '{6}', '{7}');";

                        LoginEncryption le = new LoginEncryption();

                        string hashedPassword = le.GeneratePasswordHash(password);

                        string sql =
                            String.Format(formatString,
                                          username, hashedPassword, numChars, expansions, gm, email, firstname, lastname);
                        AO.Core.SqlWrapper wrp = new AO.Core.SqlWrapper();
                        try
                        {
                            wrp.SqlInsert(sql);
                        }
                        catch (MySql.Data.MySqlClient.MySqlException ex)
                        {
                            switch (ex.Number)
                            {
                            case 1062:         //duplicate entry for key
                                Console.WriteLine("A user account with this username already exists.");
                                break;

                            default:
                                Console.WriteLine("An error occured while trying to add a new user account:\n{0}", ex.Message);
                                break;
                            }
                            break;
                        }
                        Console.WriteLine("User added successfully.");
                        break;
                    }
                    #endregion

                    #region Hashpass
                    //This function just hashes the string you enter using the loginencryption method
                    if (consoleCommand.ToLower().StartsWith("hash"))
                    {
                        string   Syntax = "The Syntax for this command is \"hash <String to hash>\" alphanumeric no spaces";
                        string[] parts  = consoleCommand.Split(' ');
                        if (parts.Length != 2)
                        {
                            Console.WriteLine(Syntax);
                            break;
                        }
                        string          pass   = parts[1];
                        LoginEncryption le     = new LoginEncryption();
                        string          hashed = le.GeneratePasswordHash(pass);
                        Console.WriteLine(hashed);
                        break;
                    }
                    #endregion

                    #region setpass
                    //sets the password for the given username
                    //Added by Andyzweb
                    //Still TODO add exception and error handling
                    if (consoleCommand.ToLower().StartsWith("setpass"))
                    {
                        string   Syntax = "The syntax for this command is \"setpass <account username> <newpass>\" where newpass is alpha numeric no spaces";
                        string[] parts  = consoleCommand.Split(' ');
                        if (parts.Length != 3)
                        {
                            Console.WriteLine(Syntax);
                            break;
                        }
                        string          username = parts[1];
                        string          newpass  = parts[2];
                        LoginEncryption le       = new LoginEncryption();
                        string          hashed   = le.GeneratePasswordHash(newpass);
                        string          formatString;
                        formatString = "UPDATE `login` SET Password = '******' WHERE login.Username = '******'";

                        string sql =
                            String.Format(formatString, hashed, username);

                        AO.Core.SqlWrapper updt = new AO.Core.SqlWrapper();
                        try
                        {
                            updt.SqlUpdate(sql);
                        }
                        //yeah this part here, some kind of exception handling for mysql errors
                        catch { }
                    }
                    #endregion

                    ct.TextRead("login_consolecmdsdefault.txt");
                    break;
                }
            }
            #endregion
        }
Пример #32
0
 /// <summary>
 /// Write inventory to database
 /// TODO: catch exceptions
 /// </summary>
 public void writeInventorytoSQL()
 {
     lock (Inventory)
     {
         SqlWrapper ms = new SqlWrapper();
         int count;
         ms.SqlDelete("DELETE FROM " + getSQLTablefromDynelType() + "inventory WHERE ID=" + ID.ToString() + " AND container=104;");
         for (count = 0; count < Inventory.Count; count++)
         {
             if (Inventory[count].Container != -1) // dont save possible trade leftovers
             {
                 ms.SqlInsert("INSERT INTO " + getSQLTablefromDynelType() + "inventory (ID,placement,flags,multiplecount,lowid,highid,quality,container) values (" + ID.ToString() + "," + Inventory[count].Placement.ToString() + ",1," + Inventory[count].Item.multiplecount.ToString() + "," + Inventory[count].Item.lowID.ToString() + "," + Inventory[count].Item.highID.ToString() + "," + Inventory[count].Item.Quality.ToString() + ",104);");
             }
         }
     }
 }
Пример #33
0
 /// <summary>
 /// Read inventory from database
 /// TODO: catch exceptions
 /// </summary>
 public void readInventoryfromSQL()
 {
     lock (Inventory)
     {
         SqlWrapper ms = new SqlWrapper();
         {
             InventoryEntries m_inv;
             Inventory.Clear();
             DataTable dt = ms.ReadDT("SELECT * FROM " + getSQLTablefromDynelType() + "inventory WHERE ID=" + ID.ToString() + " AND container=104 ORDER BY placement ASC;");
             if (dt.Rows.Count > 0)
             {
                 foreach (DataRow row in dt.Rows)
                 {
                     m_inv = new InventoryEntries();
                     m_inv.Container = (Int32)row["container"];
                     m_inv.Placement = (Int32)row["placement"];
                     m_inv.Item.highID = (Int32)row["highid"];
                     m_inv.Item.lowID = (Int32)row["lowid"];
                     m_inv.Item.Quality = (Int32)row["quality"];
                     m_inv.Item.multiplecount = (Int32)row["multiplecount"];
                     m_inv.Item.Type = (Int32)row["type"];
                     m_inv.Item.Instance = (Int32)row["instance"];
                     m_inv.Item.flags = (Int32)row["flags"];
                     Inventory.Add(m_inv);
                 }
             }
         }
     }
 }
Пример #34
0
        /// <summary>
        /// Check our tables and create/fill them if they don't exist
        /// </summary>
        public void CheckDBs()
        {
            SqlWrapper    ms        = new SqlWrapper();
            List <string> tablelist = new List <string>();
            List <string> tabletodo = new List <string>();
            bool          allok     = true;

            // ToDo: check if database exists and create it if not (parsing the connection string)
            if (this.ismssql)
            {
                ms.SqlRead("SELECT table_name FROM INFORMATION_SCHEMA.TABLES;");
            }
            else if (this.isnpgsql)
            {
                ms.SqlRead("SELECT table_name FROM information_schema.tables;");
            }
            else if (this.ismysql)
            {
                ms.SqlRead("show Tables");
            }

            if (ms.myreader.HasRows)
            {
                while (ms.myreader.Read())
                {
                    tablelist.Add(ms.myreader.GetString(0));
                }
            }
            else
            {
                allok = false;
            }

            ms.sqlclose();

            string[] sqlfiles = Directory.GetFiles("SQLTables");
            bool     isin;

            foreach (string s in sqlfiles)
            {
                isin = false;
                foreach (string table in tablelist)
                {
                    if (s.ToLower() == Path.Combine("SQLTables", table + ".sql").ToLower())
                    {
                        isin = true;
                        break;
                    }
                }

                if (!isin)
                {
                    tabletodo.Add(s);
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Table " + s + " doesn't exist.");
                    allok = false;
                }
            }

            if (!allok)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("SQL Tables are not complete. Should they be created? (Y/N) ");
                string answer = Console.ReadLine();
                string sqlquery;
                if (answer.ToLower() == "y")
                {
                    foreach (string todo in tabletodo)
                    {
                        long filesize = new FileInfo(todo).Length;
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.Write("Table " + todo.PadRight(67) + "[  0%]");

                        if (filesize > 10000)
                        {
                            string[] queries = File.ReadAllLines(todo);
                            int      c       = 0;
                            sqlquery = string.Empty;
                            string lastpercent = "0";
                            while (c < queries.Length)
                            {
                                if (queries[c].IndexOf("INSERT INTO") == -1)
                                {
                                    sqlquery += queries[c] + "\n";
                                }
                                else
                                {
                                    c--;
                                    break;
                                }

                                c++;
                            }

                            ms.SqlInsert(sqlquery);
                            c++;
                            string buf1 = string.Empty;
                            while (c < queries.Length)
                            {
                                if (queries[c].ToLower().Substring(0, 11) == "insert into")
                                {
                                    break;
                                }

                                c++;
                            }

                            if (c < queries.Length)
                            {
                                buf1 = queries[c].Substring(0, queries[c].ToLower().IndexOf("values"));
                                buf1 = buf1 + "VALUES ";
                                StringBuilder Buffer = new StringBuilder(0, 1 * 1024 * 1024);
                                while (c < queries.Length)
                                {
                                    if (Buffer.Length == 0)
                                    {
                                        Buffer.Append(buf1);
                                    }

                                    string part = string.Empty;
                                    while (c < queries.Length)
                                    {
                                        if (queries[c].Trim() != string.Empty)
                                        {
                                            part = queries[c].Substring(queries[c].ToLower().IndexOf("values"));
                                            part = part.Substring(part.IndexOf("("));  // from '(' to end
                                            part = part.Substring(0, part.Length - 1); // Remove ';'
                                            if (Buffer.Length + 1 + part.Length > 1024 * 1000)
                                            {
                                                Buffer.Remove(Buffer.Length - 2, 2);
                                                Buffer.Append(";");
                                                ms.SqlInsert(Buffer.ToString());
                                                Buffer.Clear();
                                                Buffer.Append(buf1);
                                                string lp2 =
                                                    Convert.ToInt32(Math.Floor((double)c / queries.Length * 100))
                                                    .ToString();
                                                if (lp2 != lastpercent)
                                                {
                                                    Console.Write(
                                                        "\rTable " + todo.PadRight(67) + "[" + lp2.PadLeft(3) + "%]");
                                                    lastpercent = lp2;
                                                }
                                            }

                                            Buffer.Append(part + ", ");
                                        }

                                        c++;
                                    }

                                    Buffer.Remove(Buffer.Length - 2, 2);
                                    Buffer.Append(";");
                                    ms.SqlInsert(Buffer.ToString());
                                    Buffer.Clear();
                                    string lp = Convert.ToInt32(Math.Floor((double)c / queries.Length * 100)).ToString();
                                    if (lp != lastpercent)
                                    {
                                        Console.Write("\rTable " + todo.PadRight(67) + "[" + lp.PadLeft(3) + "%]");
                                        lastpercent = lp;
                                    }
                                }
                            }
                            else
                            {
                                Console.Write("\rTable " + todo.PadRight(67) + "[100%]");
                            }
                        }
                        else
                        {
                            sqlquery = File.ReadAllText(todo);
                            ms.SqlInsert(sqlquery);
                            Console.Write("\rTable " + todo.PadRight(67) + "[100%]");
                        }

                        Console.WriteLine();
                    }
                }
            }

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Database is fine.");
        }