/// <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; } } } }
/// <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; }
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); } }
/// <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; }
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; }
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); } }
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())); } }
/// <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); }
/// <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? }
// 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) + ";"); } } }
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 }
/// <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);"); } } } }
/// <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); } } } } }
/// <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."); }