public void HandleRequest(HttpListenerContext context) { NameValueCollection query; using (var rdr = new StreamReader(context.Request.InputStream)) query = HttpUtility.ParseQueryString(rdr.ReadToEnd()); using (var db = new Database()) { Account acc = db.Verify(query["guid"], query["password"]); if (acc == null) { byte[] status = Encoding.UTF8.GetBytes("<Error>Wrong Username or Password</Error>"); context.Response.OutputStream.Write(status, 0, status.Length); } else { var serializer = new XmlSerializer(acc.GetType(), new XmlRootAttribute(acc.GetType().Name) {Namespace = ""}); var xws = new XmlWriterSettings(); xws.OmitXmlDeclaration = true; xws.Encoding = Encoding.UTF8; XmlWriter xtw = XmlWriter.Create(context.Response.OutputStream, xws); serializer.Serialize(xtw, acc, acc.Namespaces); } db.Dispose(); } }
public void HandleRequest(HttpListenerContext context) { NameValueCollection query; using (var rdr = new StreamReader(context.Request.InputStream)) query = HttpUtility.ParseQueryString(rdr.ReadToEnd()); using (var db = new Database()) { Account acc = db.Verify(query["guid"], query["password"]); byte[] status; if (acc == null) status = Encoding.UTF8.GetBytes("<Error>Bad login</Error>"); else { try { status = Encoding.UTF8.GetBytes(db.GetGuildBoard(acc)); } catch (Exception e) { status = Encoding.UTF8.GetBytes("<Error>" + e.Message + "</Error>"); } } context.Response.OutputStream.Write(status, 0, status.Length); db.Dispose(); } }
public void HandleRequest(HttpListenerContext context) { NameValueCollection query; using (var rdr = new StreamReader(context.Request.InputStream)) query = HttpUtility.ParseQueryString(rdr.ReadToEnd()); using (var db = new Database()) { Account acc = db.Verify(query["guid"], query["password"]); byte[] status; if (acc == null) { status = Encoding.UTF8.GetBytes("<Error>Bad login</Error>"); } else { MySqlCommand cmd = db.CreateQuery(); cmd.CommandText = "UPDATE accounts SET password=SHA1(@password) WHERE id=@accId;"; cmd.Parameters.AddWithValue("@accId", acc.AccountId); cmd.Parameters.AddWithValue("@password", query["newPassword"]); if (cmd.ExecuteNonQuery() > 0) status = Encoding.UTF8.GetBytes("<Success />"); else status = Encoding.UTF8.GetBytes("<Error>Internal error</Error>"); } context.Response.OutputStream.Write(status, 0, status.Length); db.Dispose(); } }
public void HandleRequest(HttpListenerContext context) { NameValueCollection query; using (var rdr = new StreamReader(context.Request.InputStream)) query = HttpUtility.ParseQueryString(rdr.ReadToEnd()); using (var db = new Database()) { Account acc = db.GetAccount(int.Parse(query["accountId"])); Char chr = db.LoadCharacter(acc, int.Parse(query["charId"])); MySqlCommand cmd = db.CreateQuery(); cmd.CommandText = @"SELECT time, killer, firstBorn FROM death WHERE accId=@accId AND chrId=@charId;"; cmd.Parameters.AddWithValue("@accId", query["accountId"]); cmd.Parameters.AddWithValue("@charId", query["charId"]); int time; string killer; bool firstBorn; using (MySqlDataReader rdr = cmd.ExecuteReader()) { rdr.Read(); time = Database.DateTimeToUnixTimestamp(rdr.GetDateTime("time")); killer = rdr.GetString("killer"); firstBorn = rdr.GetBoolean("firstBorn"); } db.Dispose(); using (var wtr = new StreamWriter(context.Response.OutputStream)) wtr.Write(chr.FameStats.Serialize(acc, chr, time, killer, firstBorn)); } }
public void HandleRequest(HttpListenerContext context) { string status; using (var db = new Database()) { NameValueCollection query = HttpUtility.ParseQueryString(context.Request.Url.Query); MySqlCommand cmd = db.CreateQuery(); cmd.CommandText = "SELECT id FROM accounts WHERE uuid=@uuid"; cmd.Parameters.AddWithValue("@uuid", query["guid"]); object id = cmd.ExecuteScalar(); if (id != null) { try { //int amount = int.Parse(query["jwt"]); //cmd = db.CreateQuery(); //cmd.CommandText = "UPDATE stats SET credits = credits + @amount WHERE accId=@accId"; //cmd.Parameters.AddWithValue("@accId", (int)id); //cmd.Parameters.AddWithValue("@amount", amount); //int result = cmd.ExecuteNonQuery(); //if (result > 0) // status = "Ya done..."; //else // status = "Internal error :("; status = "Yeah... We kind of fixed this..."; } catch { status = "Yeah... We kind of fixed this..."; } } else { status = "Yeah... We kind of fixed this..."; } db.Dispose(); } byte[] res = Encoding.UTF8.GetBytes( @"<html> <head> <title>Nope</title> <script>window.close();</script> </head> <body style='background: #333333'> <h1 style='color: #EEEEEE; text-align: center'> " + status + @" </h1> </body> </html>"); context.Response.OutputStream.Write(res, 0, res.Length); }
public void HandleRequest(HttpListenerContext context) { NameValueCollection query; using (var rdr = new StreamReader(context.Request.InputStream)) query = HttpUtility.ParseQueryString(rdr.ReadToEnd()); using (var db = new Database()) { byte[] status; if (!IsValidUsername(query["newGUID"])) status = Encoding.UTF8.GetBytes("<Error>Invalid Username</Error>"); if (db.HasUuid(query["guid"]) && db.Verify(query["guid"], "") != null) { if (db.HasUuid(query["newGUID"])) status = Encoding.UTF8.GetBytes("<Error>Username is already taken!</Error>"); else { MySqlCommand cmd = db.CreateQuery(); cmd.CommandText = "UPDATE accounts SET uuid=@newUuid, name=@newUuid, password=SHA1(@password), guest=FALSE WHERE uuid=@uuid, name=@name;"; cmd.Parameters.AddWithValue("@uuid", query["guid"]); cmd.Parameters.AddWithValue("@newUuid", query["newGUID"]); cmd.Parameters.AddWithValue("@password", query["newPassword"]); if (cmd.ExecuteNonQuery() > 0) status = Encoding.UTF8.GetBytes("<Success />"); else status = Encoding.UTF8.GetBytes("<Error>Internal Error</Error>"); } } else { if (db.Register(query["newGUID"], query["newPassword"], false) != null) status = Encoding.UTF8.GetBytes("<Success />"); else status = Encoding.UTF8.GetBytes("<Error>Internal Error</Error>"); } context.Response.OutputStream.Write(status, 0, status.Length); db.Dispose(); } }
public void HandleRequest(HttpListenerContext context) { NameValueCollection query; using (var rdr = new StreamReader(context.Request.InputStream)) query = HttpUtility.ParseQueryString(rdr.ReadToEnd()); using (var db = new Database()) { Account acc = db.Verify(query["guid"], query["password"]); byte[] status; if (acc == null) { status = Encoding.UTF8.GetBytes("<Error>Bad login</Error>"); } else { MySqlCommand cmd = db.CreateQuery(); object exescala; cmd.CommandText = "SELECT COUNT(name) FROM accounts WHERE name=@name;"; cmd.Parameters.AddWithValue("@name", query["name"]); exescala = cmd.ExecuteScalar(); if (int.Parse(exescala.ToString()) > 0) status = Encoding.UTF8.GetBytes("<Error>Duplicated name</Error>"); else { cmd = db.CreateQuery(); cmd.CommandText = "UPDATE accounts SET name=@name, namechosen=TRUE WHERE id=@accId;"; cmd.Parameters.AddWithValue("@accId", acc.AccountId); cmd.Parameters.AddWithValue("@name", query["name"]); if (cmd.ExecuteNonQuery() != 0) status = Encoding.UTF8.GetBytes("<Success />"); else status = Encoding.UTF8.GetBytes("<Error>Internal error</Error>"); } } context.Response.OutputStream.Write(status, 0, status.Length); db.Dispose(); } }
static void Main(string[] args) { XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config")); Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Thread.CurrentThread.Name = "Entry"; using (Settings = new SimpleSettings("wServer")) { var db = new Database(Settings.GetValue("conn")); RealmManager manager = new RealmManager( Settings.GetValue<int>("maxClient", "100"), Settings.GetValue<int>("tps", "20"), db); manager.Initialize(); manager.Run(); Server server = new Server(manager, 2050); PolicyServer policy = new PolicyServer(); Console.CancelKeyPress += (sender, e) => e.Cancel = true; policy.Start(); server.Start(); log.Info("Server initialized."); while (Console.ReadKey(true).Key != ConsoleKey.Escape) ; log.Info("Terminating..."); server.Stop(); policy.Stop(); manager.Stop(); db.Dispose(); log.Info("Server terminated."); } }
public void Execute(Player player, string[] args) { if (args.Length < 2) { player.SendHelp("Usage: /setguild <username> <guild id>"); } else { try { using (var dbx = new Database()) { var cmd = dbx.CreateQuery(); cmd.CommandText = "UPDATE accounts SET guild=@guild WHERE name=@name"; cmd.Parameters.AddWithValue("@guild", args[1]); cmd.Parameters.AddWithValue("@name", args[0]); if (cmd.ExecuteNonQuery() == 0) { player.SendInfo("Could not change guild."); } else { player.SendInfo("Guild successfully changed"); Console.ForegroundColor = ConsoleColor.Yellow; Console.Out.WriteLine(args[1] + "'s guild has been changed"); Console.ForegroundColor = ConsoleColor.White; } dbx.Dispose(); } } catch { player.SendInfo( "Could not change guild, please change in database. Use /setguild <username> <guild id>"); } } }
public void Execute(Player player, string[] args) { try { if (args.Length < 2) { player.SendHelp("Use /currency <currency> <player> <amount>"); } else if (args[0] == "ztokens") { var plr = RealmManager.FindPlayer(args[1]); using (var db = new Database()) { plr.zTokens = db.UpdateCredit(plr.Client.Account, int.Parse(args[2])); plr.UpdateCount++; db.Dispose(); } } else if (args[0] == "gold") { using (var db = new Database()) { var plr = RealmManager.FindPlayer(args[1]); plr.Credits = db.UpdateCredit(plr.Client.Account, int.Parse(args[2])); plr.UpdateCount++; db.Dispose(); } } else if (args[0] == "fame") { var plr = RealmManager.FindPlayer(args[1]); using (var db = new Database()) { plr.CurrentFame = db.UpdateFame(plr.Client.Account, int.Parse(args[2])); plr.UpdateCount++; db.Dispose(); } } } catch { player.SendError("Error!"); } }
public void Execute(Player player, string[] args) { if (args.Length == 0) { player.SendHelp("Usage: /unban <username>"); } try { using (var dbx = new Database()) { var cmd = dbx.CreateQuery(); cmd.CommandText = "UPDATE accounts SET banned=0 WHERE name=@name"; cmd.Parameters.AddWithValue("@name", args[0]); if (cmd.ExecuteNonQuery() == 0) { player.SendInfo("Could not unban"); } else { player.SendInfo("Account successfully Unbanned"); Console.ForegroundColor = ConsoleColor.Yellow; Console.Out.WriteLine(args[1] + " was Unbanned."); Console.ForegroundColor = ConsoleColor.White; } dbx.Dispose(); } } catch { player.SendInfo("Could not unban, please unban in database"); } }
public void Execute(Player player, string[] args) { if (args.Length == 0) { player.SendHelp("Usage: /whitelist <username>"); } try { using (var dbx = new Database()) { var cmd = dbx.CreateQuery(); cmd.CommandText = "UPDATE accounts SET rank=1 WHERE name=@name"; cmd.Parameters.AddWithValue("@name", args[0]); if (cmd.ExecuteNonQuery() == 0) { player.SendInfo("Could not whitelist!"); } else { player.SendInfo("Account successfully whitelisted!"); Console.ForegroundColor = ConsoleColor.Yellow; Console.Out.WriteLine(player.nName + " Has Whitelisted " + args[0]); Console.ForegroundColor = ConsoleColor.White; var dir = @"logs"; if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); using (var writer = new StreamWriter(@"logs\WhitelistLog.log", true)) { writer.WriteLine("[" + DateTime.Now + "]" + player.nName + " Has Whitelisted " + args[0]); } } dbx.Dispose(); } } catch { player.SendInfo("Could not whitelist!"); } }
public void Execute(Player player, string[] args) { if (args.Length < 1) { player.SendHelp("Usage: /settag [username] <tag>"); } else { if (args.Length == 1) { using (var db = new Database()) { var cmd = db.CreateQuery(); cmd.CommandText = "UPDATE accounts SET tag=@tag WHERE name=@name"; cmd.Parameters.AddWithValue("@name", player.nName); cmd.Parameters.AddWithValue("@tag", args[0]); if (cmd.ExecuteNonQuery() == 0) { player.SendInfo("Could not set tag"); } else { player.Name = "[" + args[0] + "] " + player.Client.Account.Name; player.SendInfo("Tag succesfully changed"); } db.Dispose(); } } else if (args.Length == 2) { var plr = player.Owner.GetUniqueNamedPlayerRough(string.Join(" ", args[0])); if (plr != null) { using (var db = new Database()) { var cmd = db.CreateQuery(); cmd.CommandText = "UPDATE accounts SET tag=@tag WHERE name=@name"; cmd.Parameters.AddWithValue("@name", args[0]); cmd.Parameters.AddWithValue("@tag", args[1]); if (cmd.ExecuteNonQuery() == 0) { player.SendInfo("Could not set tag"); } else { plr.Name = "[" + args[1] + "] " + plr.Client.Account.Name; player.SendInfo("Tag succesfully changed"); } db.Dispose(); } } else { player.SendError("Could not find player"); } } } }
public void Execute(Player player, string[] args) { if (args.Length < 2) { player.SendHelp("Usage: /ban <username> <reason>"); } else { try { using (var dbx = new Database()) { var dir = @"logs"; var cmd = dbx.CreateQuery(); cmd.CommandText = "UPDATE accounts SET banned=1, rank=0 WHERE name=@name"; cmd.Parameters.AddWithValue("@name", args[0]); if (cmd.ExecuteNonQuery() == 0) { player.SendInfo("Could not ban"); } else { string reason = string.Join(" ", args.Skip(1).ToArray()).Trim(); Player target = null; if ((target = RealmManager.FindPlayer(string.Join(" ", args[0]))) != null) { target.Client.Disconnect(); Console.ForegroundColor = ConsoleColor.Yellow; Console.Out.WriteLine(string.Join(" ", args) + " was Banned."); Console.ForegroundColor = ConsoleColor.White; } if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } using (var writer = new StreamWriter(@"logs\Bans.log", true)) { writer.WriteLine(player.Name + " Banned " + args[0] + ". " + "Reason: " + reason); } player.SendInfo("Account successfully Banned"); } dbx.Dispose(); } } catch { player.SendInfo("Could not ban"); } } }
public void Save() { try { if (Database != null) { if (Character != null) { Player.SaveToCharacter(); if (Player.Owner.Id != -6) Database.SaveCharacter(Account, Character); } Database.Dispose(); Database = null; } else { Database = new Database(); if (Character != null) { Player.SaveToCharacter(); if (Player.Owner.Id != -6) Database.SaveCharacter(Account, Character); } Database.Dispose(); Database = null; } } catch { } }
public void Execute(Player player, string[] args) { if (args.Length == 0 || args.Length == 1) { player.SendHelp("Use /rename <Old Player Name> <New Player Name>"); } else if (args.Length == 2) { using (var db = new Database()) { var db1 = db.CreateQuery(); db1.CommandText = "SELECT COUNT(name) FROM accounts WHERE name=@name;"; db1.Parameters.AddWithValue("@name", args[1]); if ((int) (long) db1.ExecuteScalar() > 0) { player.SendError("Name Already In Use."); } else { db1 = db.CreateQuery(); db1.CommandText = "SELECT COUNT(name) FROM accounts WHERE name=@name"; db1.Parameters.AddWithValue("@name", args[0]); if ((int) (long) db1.ExecuteScalar() < 1) { player.SendError("Name Not Found."); } else { db1 = db.CreateQuery(); db1.CommandText = "UPDATE accounts SET name=@newName, namechosen=TRUE WHERE name=@oldName;"; db1.Parameters.AddWithValue("@newName", args[1]); db1.Parameters.AddWithValue("@oldName", args[0]); if (db1.ExecuteNonQuery() > 0) { foreach (var playerX in RealmManager.Worlds) { if (playerX.Key != 0) { var world = playerX.Value; foreach (var p in world.Players) { var Client = p.Value; if ((player.Name.ToLower() == args[0].ToLower()) && player.NameChosen) { player.Name = args[1]; player.NameChosen = true; player.UpdateCount++; break; } } } } player.SendInfo("Success!"); // } else { player.SendError("Internal Server Error Occurred."); } } } db.Dispose(); } } }
public override void Tick(RealmTime time) { if (Players.Count > 0 && !Flags["finished"]) { if (Flags["started"] && !Flags["counting"]) { if (Enemies.Count < 1 + Pets.Count) { if (monstervalue != 0) { var db = new Database(); foreach (var i in Players) { i.Value.CurrentFame = i.Value.Client.Account.Stats.Fame = db.UpdateFame(i.Value.Client.Account, (int)monstervalue); i.Value.UpdateCount++; i.Value.Client.SendPacket(new NotificationPacket { Color = new ARGB(0xFFFF6600), ObjectId = i.Value.Id, Text = "+" + (int)monstervalue + " Fame" }); if (Math.IEEERemainder(monstervalue, 1000) == 0) { i.Value.Credits = i.Value.Client.Account.Credits = db.UpdateCredit(i.Value.Client.Account, 1); i.Value.UpdateCount++; } } db.Dispose(); Countdown(5); } } } else if (!Flags["started"] && !Flags["counting"]) { foreach (var i in RealmManager.Clients.Values) i.SendPacket(new TextPacket { Stars = -1, BubbleTime = 0, Name = "#Announcement", Text = "A Nexus Defense Game has been started. Closing in 1 minute!" }); Flags["counting"] = true; Countdown(60); } } base.Tick(time); }
public void Execute(Player player, string[] args) { if (args.Length < 2) { player.SendHelp("Usage: /grank <username> <number>"); } else { try { using (var dbx = new Database()) { var cmd = dbx.CreateQuery(); cmd.CommandText = "UPDATE accounts SET guildRank=@guildRank WHERE name=@name"; cmd.Parameters.AddWithValue("@guildRank", args[1]); cmd.Parameters.AddWithValue("@name", args[0]); if (cmd.ExecuteNonQuery() == 0) { player.SendInfo("Could not change guild rank. Use 10, 20, 30, 40, or 50 (invisible)"); } else { player.SendInfo("Guild rank successfully changed"); Console.ForegroundColor = ConsoleColor.Yellow; Console.Out.WriteLine(args[1] + "'s guild rank has been changed"); Console.ForegroundColor = ConsoleColor.White; } dbx.Dispose(); } } catch { player.SendInfo("Could not change rank, please change rank in database"); } } }
public void TickLoop() { log.Info("Database loop started."); do { //First finish every db query if (Manager.Terminating) { bool empty = true; foreach (var i in pendings) { if (i.Count > 0) { empty = false; break; } } if (empty) break; } foreach (ConcurrentQueue<Action<Database>> i in pendings) { Action<Database> callback; while (i.TryDequeue(out callback)) { try { Database db = new Database(Program.Settings.GetValue("conn")); callback(db); db.Dispose(); } catch (Exception ex) { log.Error(ex); } } } } while (true); log.Info("Database loop stopped."); }
public void Execute(Player player, string[] args) { try { if (args.Length == 0) { player.SendHelp("Use /gold <amount>"); } else { using (var db = new Database()) { player.Credits = db.UpdateCredit(player.Client.Account, int.Parse(args[0])); player.UpdateCount++; db.Dispose(); } } } catch { player.SendError("Error"); } }
public override void Tick(RealmTime time) { if (Players.Count > 0 && !Flags["finished"]) { if (Flags["started"] && !Flags["counting"]) { if (Enemies.Count < 1 + Pets.Count) { wave++; zombieAmount += Players.Count; famePot += wave * 10 / 2; Flags["counting"] = true; Countdown(5); } } else if (!Flags["started"] && !Flags["counting"]) { foreach (var i in RealmManager.Clients.Values) i.SendPacket(new TextPacket { Stars = -1, BubbleTime = 0, Name = "#Announcement", Text = "A zombie minigame has been started. Closing in 1 minute!" }); EnterWorld(tower); Flags["counting"] = true; Countdown(60); } else if (Flags["finished"] && !Flags["counting"]) { foreach (var i in Players) { var db = new Database(); i.Value.CurrentFame = i.Value.Client.Account.Stats.Fame = db.UpdateFame(i.Value.Client.Account, famePot); i.Value.UpdateCount++; i.Value.Client.SendPacket(new NotificationPacket { ObjectId = i.Value.Id, Color = new ARGB(0xFFFF6600), Text = "+" + famePot + " Fame" }); Flags["counting"] = true; db.Dispose(); } } } base.Tick(time); }
public Player(ClientProcessor psr) : base((short) psr.Character.ObjectType, psr.Random) { this.psr = psr; statsMgr = new StatsManager(this); nName = psr.Account.Name; AccountId = psr.Account.AccountId; if (psr.Account.Tag != "") { Name = "[" + psr.Account.Tag + "] " + psr.Account.Name; } else { Name = psr.Account.Name; } Level = psr.Character.Level; Experience = psr.Character.Exp; ExperienceGoal = GetExpGoal(psr.Character.Level); if (psr.Account.Name == "Lucifer" || psr.Account.Name == "Luciferus" || psr.Account.Name == "Amaymon") Stars = 666; else if (psr.Account.Rank > 2) Stars = 100; else if (psr.Account.Rank > 1) Stars = 95; else Stars = GetStars(); //Temporary (until pub server) Texture1 = psr.Character.Tex1; Texture2 = psr.Character.Tex2; Credits = psr.Account.Credits; zTokens = psr.Account.zTokens; NameChosen = psr.Account.NameChosen; CurrentFame = psr.Account.Stats.Fame; Fame = psr.Character.CurrentFame; var state = psr.Account.Stats.ClassStates.SingleOrDefault(_ => _.ObjectType == ObjectType); FameGoal = GetFameGoal(state != null ? state.BestFame : 0); Glowing = false; Guild = psr.Account.Guild.Name; GuildRank = psr.Account.Guild.Rank; if (psr.Character.HitPoints <= 0) { HP = psr.Character.MaxHitPoints; psr.Character.HitPoints = psr.Character.MaxHitPoints; } else HP = psr.Character.HitPoints; MP = psr.Character.MagicPoints; ConditionEffects = 0; OxygenBar = 100; Decision = 0; price = new Prices(); Locked = psr.Account.Locked ?? new List<int>(); Ignored = psr.Account.Ignored ?? new List<int>(); try { using (var dbx = new Database()) { Locked = dbx.GetLockeds(AccountId); Ignored = dbx.GetIgnoreds(AccountId); dbx.Dispose(); } } catch { } Inventory = psr.Character.Equipment.Select( _ => _ == -1 ? null : (XmlDatas.ItemDescs.ContainsKey(_) ? XmlDatas.ItemDescs[_] : null)).ToArray(); SlotTypes = Utils.FromCommaSepString32(XmlDatas.TypeToElement[ObjectType].Element("SlotTypes").Value); Stats = new[] { psr.Character.MaxHitPoints, psr.Character.MaxMagicPoints, psr.Character.Attack, psr.Character.Defense, psr.Character.Speed, psr.Character.HpRegen, psr.Character.MpRegen, psr.Character.Dexterity }; Pet = null; }
public override void Tick(RealmTime time) { if (Players.Count > 0 && !Flags["finished"]) { if (Flags["started"] && Flags["counting"]) { if (Enemies.Count < 15 + Pets.Count) { SheepSpawns.Shuffle(); SpawningSheep.Shuffle(); var e = Entity.Resolve(XmlData.IdToObjectType[SpawningSheep.First()]); e.Move(SheepSpawns[0].X, SheepSpawns[0].Y); EnterWorld(e); } } else if (Flags["started"] && !Flags["counting"]) { var div = (int)Math.Ceiling((double)(FamePot / Players.Count)); double golddivider = HerdedSheep / 20; var tokens = (int)Math.Floor(golddivider); var db = new Database(); BroadcastPacket(new TextPacket { BubbleTime = 0, Stars = -1, Name = "#Sheep Herding", Text = "Time's up! You each win " + div + " fame!" }, null); foreach (var i in Players) { i.Value.CurrentFame = i.Value.Client.Account.Stats.Fame = db.UpdateFame(i.Value.Client.Account, div); i.Value.UpdateCount++; i.Value.Client.SendPacket(new NotificationPacket { ObjectId = i.Value.Id, Color = new ARGB(0xFFFF6600), Text = "+" + div + " Fame" }); i.Value.Credits = i.Value.Client.Account.Credits = db.UpdateCredit(i.Value.Client.Account, tokens); i.Value.UpdateCount++; } db.Dispose(); foreach (var i in Enemies) if (!i.Value.isPet) LeaveWorld(i.Value); Flags["finished"] = true; } else if (!Flags["started"] && !Flags["counting"]) { foreach (var i in RealmManager.Clients.Values) i.SendPacket(new TextPacket { Stars = -1, BubbleTime = 0, Name = "#Announcement", Text = "A sheep herding minigame has been started. Closing in 1 minute!" }); Flags["counting"] = true; Countdown(60); } } base.Tick(time); }
public void HandleRequest(HttpListenerContext context) { NameValueCollection query; using (var rdr = new StreamReader(context.Request.InputStream)) query = HttpUtility.ParseQueryString(rdr.ReadToEnd()); byte[] status = null; string span = ""; switch (query["timespan"]) { case "week": span = "(time >= DATE_SUB(NOW(), INTERVAL 1 WEEK))"; break; case "month": span = "(time >= DATE_SUB(NOW(), INTERVAL 1 MONTH))"; break; case "all": span = "TRUE"; break; default: status = Encoding.UTF8.GetBytes("<Error>Invalid fame list</Error>"); break; } string ac = "FALSE"; if (query["accountId"] != null) ac = "(accId=@accId AND chrId=@charId)"; if (status == null) { var doc = new XmlDocument(); XmlElement root = doc.CreateElement("FameList"); XmlAttribute spanAttr = doc.CreateAttribute("timespan"); spanAttr.Value = query["timespan"]; root.Attributes.Append(spanAttr); doc.AppendChild(root); using (var db = new Database()) { MySqlCommand cmd = db.CreateQuery(); cmd.CommandText = @"SELECT * FROM death WHERE " + span + @" OR " + ac + @" ORDER BY totalFame DESC LIMIT 20;"; if (query["accountId"] != null) { cmd.Parameters.AddWithValue("@accId", query["accountId"]); cmd.Parameters.AddWithValue("@charId", query["charId"]); } using (MySqlDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { XmlElement elem = doc.CreateElement("FameListElem"); XmlAttribute accIdAttr = doc.CreateAttribute("accountId"); accIdAttr.Value = rdr.GetInt32("accId").ToString(); elem.Attributes.Append(accIdAttr); XmlAttribute chrIdAttr = doc.CreateAttribute("charId"); chrIdAttr.Value = rdr.GetInt32("chrId").ToString(); elem.Attributes.Append(chrIdAttr); root.AppendChild(elem); XmlElement nameElem = doc.CreateElement("Name"); nameElem.InnerText = rdr.GetString("name"); elem.AppendChild(nameElem); XmlElement objTypeElem = doc.CreateElement("ObjectType"); objTypeElem.InnerText = rdr.GetString("charType"); elem.AppendChild(objTypeElem); XmlElement tex1Elem = doc.CreateElement("Tex1"); tex1Elem.InnerText = rdr.GetString("tex1"); elem.AppendChild(tex1Elem); XmlElement tex2Elem = doc.CreateElement("Tex2"); tex2Elem.InnerText = rdr.GetString("tex2"); elem.AppendChild(tex2Elem); XmlElement equElem = doc.CreateElement("Equipment"); equElem.InnerText = rdr.GetString("items"); elem.AppendChild(equElem); XmlElement fameElem = doc.CreateElement("TotalFame"); fameElem.InnerText = rdr.GetString("totalFame"); elem.AppendChild(fameElem); } } db.Dispose(); } var settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; using (XmlWriter wtr = XmlWriter.Create(context.Response.OutputStream)) doc.Save(wtr); } }
public void TextBoxButton(TextBoxButtonPacket pkt) { var type = pkt.Type; if (type == "test") { psr.SendPacket(new TextBoxPacket { Button1 = "Yes", Button2 = "No", Message = "Do you want to enter the testing arena?", Title = "Testing Arena Confirmation", Type = "EnterTestArena" }); } if (type == "NewClient") { psr.Disconnect(); } if (type == "DecideArena") { if (pkt.Button == 1) { psr.SendPacket(new TextBoxPacket { Button1 = "Enter", Button2 = "Cancel", Message = "Host an arena at the price of x fame?", Title = "Arena Host Confirmation", Type = "EnterArena2" }); } else { psr.SendPacket(new TextBoxPacket { Button1 = "Enter", Button2 = "Cancel", Message = "Enter the arena solo at the price of 150 fame?", Title = "Solo Arena Confirmation", Type = "EnterArena1" }); } } if (type == "EnterTestArena") { if (pkt.Button == 1) { if (Client.Account.Stats.Fame >= 150) { /*RealmManager.PlayerWorldMapping.TryAdd(this.AccountId, Owner); psr.Reconnect(new ReconnectPacket() { Host = "", Port = 2050, GameId = world.Id, Name = world.Name, Key = Empty<byte>.Array, }); */ } else { SendHelp("Not Enough Fame"); } } else { SendInfo("Cancelled entering arena."); } } if (type == "EnterArena1") { if (pkt.Button == 1) { if (Client.Account.Stats.Fame >= 50) { using (var db = new Database()) { db.UpdateFame(psr.Account, -50); db.Dispose(); } var world = RealmManager.GetWorld(World.NEXUS_ID); var fworld = false; foreach (var i in RealmManager.Worlds) if (i.Value is BattleArenaMap) if ((i.Value as BattleArenaMap).Joinable) { world = i.Value; fworld = true; break; } if (!fworld) world = RealmManager.AddWorld(new BattleArenaMap()); psr.Reconnect(new ReconnectPacket { Host = "", Port = 2050, GameId = world.Id, Name = world.Name, Key = Empty<byte>.Array, }); } else { SendHelp("Not Enough Fame"); } } else { SendInfo("Cancelled entering arena."); } } if (type == "EnterArena2") { if (pkt.Button == 1) { var world = RealmManager.GetWorld(World.NEXUS_ID); var fworld = false; foreach (var i in RealmManager.Worlds) if (i.Value is BattleArenaMap2) if ((i.Value as BattleArenaMap2).Joinable) { world = i.Value; fworld = true; break; } if (!fworld) world = RealmManager.AddWorld(new BattleArenaMap2()); psr.Reconnect(new ReconnectPacket { Host = "", Port = 2050, GameId = world.Id, Name = world.Name, Key = Empty<byte>.Array, }); } else { SendInfo("Cancelled entering arena."); } } if (type == "SheepHerding") { if (pkt.Button == 1) { if (Client.Account.Stats.Fame >= 50) { using (var db = new Database()) { db.UpdateFame(psr.Account, -50); db.Dispose(); } var world = RealmManager.GetWorld(World.NEXUS_ID); var fworld = false; foreach (var i in RealmManager.Worlds) if (i.Value is Herding) if ((i.Value as Herding).Joinable) { world = i.Value; fworld = true; break; } if (!fworld) world = RealmManager.AddWorld(new Herding()); psr.Reconnect(new ReconnectPacket { Host = "", Port = 2050, GameId = world.Id, Name = world.Name, Key = Empty<byte>.Array, }); } else { SendHelp("Not Enough Fame"); } } else { SendInfo("Cancelled entering sheep herding."); } } if (type == "Zombies") { if (pkt.Button == 1) { if (Client.Account.Stats.Fame >= 10) { using (var db = new Database()) { db.UpdateFame(psr.Account, -10); db.Dispose(); } var world = RealmManager.GetWorld(World.NEXUS_ID); var fworld = false; foreach (var i in RealmManager.Worlds) if (i.Value is ZombieMG) if ((i.Value as ZombieMG).Joinable) { world = i.Value; fworld = true; break; } if (!fworld) world = RealmManager.AddWorld(new ZombieMG()); psr.Reconnect(new ReconnectPacket { Host = "", Port = 2050, GameId = world.Id, Name = world.Name, Key = Empty<byte>.Array, }); } else { SendHelp("Not Enough Fame"); } } else { SendInfo("Cancelled entering zombies."); } } if (type == "SlotMachine1") { if (pkt.Button == 1) { if (Client.Account.Stats.Fame >= 10) { using (var db = new Database()) { db.UpdateFame(psr.Account, -10); db.Dispose(); } var weaponsT5 = TierLoot.WeaponItems[5].ToList(); var weaponsT6 = TierLoot.WeaponItems[6].ToList(); var weaponsT7 = TierLoot.WeaponItems[7].ToList(); var abilitiesT3 = TierLoot.AbilityItems[2].ToList(); var ringsT3 = TierLoot.RingItems[3].ToList(); var armorT6 = TierLoot.ArmorItems[6].ToList(); var armorT7 = TierLoot.ArmorItems[7].ToList(); var armorT8 = TierLoot.ArmorItems[8].ToList(); var calculator = Random.Next(1, 1000); if (calculator <= 600) { SendHelp("Better luck next time!"); } else if (calculator <= 700 && calculator > 600) { SendHelp("Congratulations! You won a T5 Weapon!"); weaponsT5.Shuffle(); var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId}; container.Inventory[0] = weaponsT5[0]; container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5), Y + (float) ((invRand.NextDouble()*2 - 1)*0.5)); container.Size = 75; Owner.EnterWorld(container); } else if (calculator <= 750 && calculator > 700) { SendHelp("Congratulations! You won a T6 Weapon!"); weaponsT6.Shuffle(); var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId}; container.Inventory[0] = weaponsT6[0]; container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5), Y + (float) ((invRand.NextDouble()*2 - 1)*0.5)); container.Size = 75; Owner.EnterWorld(container); } else if (calculator <= 787.5 && calculator > 775) { SendHelp("Congratulations! You won a T7 Weapon!"); weaponsT7.Shuffle(); var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId}; container.Inventory[0] = weaponsT7[0]; container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5), Y + (float) ((invRand.NextDouble()*2 - 1)*0.5)); container.Size = 75; Owner.EnterWorld(container); } else if (calculator <= 800 && calculator > 787.5) { SendHelp("Congratulations! You won a T3 Ability!"); abilitiesT3.Shuffle(); var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId}; container.Inventory[0] = abilitiesT3[0]; container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5), Y + (float) ((invRand.NextDouble()*2 - 1)*0.5)); container.Size = 75; Owner.EnterWorld(container); } else if (calculator <= 850 && calculator > 800) { SendHelp("Congratulations! You won a T6 Armor!"); armorT6.Shuffle(); var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId}; container.Inventory[0] = armorT6[0]; container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5), Y + (float) ((invRand.NextDouble()*2 - 1)*0.5)); container.Size = 75; Owner.EnterWorld(container); } else if (calculator <= 875 && calculator > 850) { SendHelp("Congratulations! You won a T7 Armor!"); armorT7.Shuffle(); var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId}; container.Inventory[0] = armorT7[0]; container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5), Y + (float) ((invRand.NextDouble()*2 - 1)*0.5)); container.Size = 75; Owner.EnterWorld(container); } else if (calculator <= 887.5 && calculator > 875) { SendHelp("Congratulations! You won a T8 Armor!"); armorT8.Shuffle(); var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId}; container.Inventory[0] = armorT8[0]; container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5), Y + (float) ((invRand.NextDouble()*2 - 1)*0.5)); container.Size = 75; Owner.EnterWorld(container); } else if (calculator <= 900 && calculator > 887.5) { SendHelp("Congratulations! You won a T3 Ring!"); ringsT3.Shuffle(); var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId}; container.Inventory[0] = ringsT3[0]; container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5), Y + (float) ((invRand.NextDouble()*2 - 1)*0.5)); container.Size = 75; Owner.EnterWorld(container); } else if (calculator <= 905 && calculator > 900) { SendHelp("Too bad! You only got 1 fame!"); Client.Database.UpdateFame(Client.Account, 1); Fame += 1; UpdateCount++; } else if (calculator <= 910 && calculator > 905) { SendHelp("Too bad! You only got 5 fame!"); Client.Database.UpdateFame(Client.Account, 5); Fame += 5; UpdateCount++; } else if (calculator <= 940 && calculator > 910) { SendHelp("You won back the fame you paid!"); Client.Database.UpdateFame(Client.Account, 10); Fame += 10; UpdateCount++; } else if (calculator <= 970 && calculator > 940) { SendHelp("Nice! You won 25 fame!"); Client.Database.UpdateFame(Client.Account, 25); Fame += 25; UpdateCount++; } else if (calculator <= 985 && calculator > 970) { SendHelp("Nice! You won 50 fame!"); Client.Database.UpdateFame(Client.Account, 50); Fame += 50; UpdateCount++; } else if (calculator <= 990 && calculator > 985) { SendHelp("Very Nice! You won 100 fame!"); Client.Database.UpdateFame(Client.Account, 100); Fame += 100; UpdateCount++; } else if (calculator <= 994 && calculator > 990) { SendHelp("Awesome! You won 500 fame!"); Client.Database.UpdateFame(Client.Account, 500); Fame += 500; UpdateCount++; } else if (calculator <= 997 && calculator > 994) { SendHelp("Amazing! You won 1000 fame!"); Client.Database.UpdateFame(Client.Account, 1000); Fame += 1000; UpdateCount++; } else if (calculator <= 999 && calculator > 997) { SendHelp("Amazing! You won 5000 fame!"); Client.Database.UpdateFame(Client.Account, 5000); Fame += 5000; UpdateCount++; } else if (calculator <= 1000 && calculator > 999) { SendHelp("Incredible! You won the 10000 fame jackpot!"); foreach (var i in RealmManager.Clients.Values) i.SendPacket(new TextPacket { BubbleTime = 0, Stars = -1, Name = "#Announcement", Text = Name + " has won the 10000 Fame jackpot on the bronze slot machines!" }); Client.Database.UpdateFame(Client.Account, 10000); Fame += 10000; UpdateCount++; } psr.SendPacket(new BuyResultPacket { Result = 0 }); } else { SendHelp("Not Enough Fame"); } } else { SendInfo("Canceled"); psr.SendPacket(new BuyResultPacket { Result = 0 }); } } }
private void ProcessHelloPacket(HelloPacket pkt) { db = new Database(); //Console.Out.WriteLine(pkt.GUID + ": " + pkt.Password); if ((account = db.Verify(pkt.GUID, pkt.Password)) == null) { Console.WriteLine(@"Account not verified."); account = Database.CreateGuestAccount(pkt.GUID); if (account == null) { Console.WriteLine(@"Account is null!"); SendPacket(new FailurePacket { Message = "Invalid account." }); Disconnect(); db.Dispose(); return; } } if ((ip = db.CheckIp(skt.RemoteEndPoint.ToString().Split(':')[0])) == null) { Console.WriteLine(@"Error checking IP"); SendPacket(new FailurePacket { Message = "Error with IP." }); Disconnect(); db.Dispose(); return; } Console.WriteLine(@"Client trying to connect!"); ConnectedBuild = pkt.BuildVersion; if (!RealmManager.TryConnect(this)) { if (CheckAccountInUse(account.AccountId) != false) { Console.WriteLine(@"Account in use: " + account.AccountId + @" " + account.Name); account = null; SendPacket(new FailurePacket { Message = "Account in use! Retrying..." }); Disconnect(); db.Dispose(); return; } account = null; SendPacket(new FailurePacket { Message = "Failed to connect." }); Disconnect(); Console.WriteLine(@"Failed to connect."); } else { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(@"Client loading world"); Console.ForegroundColor = ConsoleColor.White; var world = RealmManager.GetWorld(pkt.GameId); if (world == null) { SendPacket(new FailurePacket { Message = "Invalid world." }); Disconnect(); Console.WriteLine(@"Invalid world"); } Console.ForegroundColor = ConsoleColor.Yellow; try { Console.WriteLine(@"Client joined world " + world.Id); } catch { Console.WriteLine(@"Error! World is null"); } Console.ForegroundColor = ConsoleColor.White; if (world.Id == -6) //Test World (world as Test).LoadJson(pkt.MapInfo); else if (world.IsLimbo) world = world.GetInstance(this); var seed = (uint) ((long) Environment.TickCount*pkt.GUID.GetHashCode())%uint.MaxValue; Random = new wRandom(seed); targetWorld = world.Id; if (!ConnectedBuildStartsWith(clientVer)) { SendPacket(new TextPacket { BubbleTime = 1, Stars = -1, Name = "", Text = "Your client is outdated. Visit http://forum.zerorealms.com to get the latest one!" }); Disconnect(); /*SendPacket(new TextBoxPacket { Button1 = "Okay", Message = "Your client is outdated, Click <font color=\"white\"><b><a href='http://forum.zerorealms.com'>Here</a></b></font> to get the latest one!", Title = "Outdated Client!", Type = "NewClient" });*/ } SendPacket(new MapInfoPacket { Width = world.Map.Width, Height = world.Map.Height, Name = world.Name, Seed = seed, Background = world.Background, AllowTeleport = world.AllowTeleport, ShowDisplays = world.ShowDisplays, Music = world.GetMusic(Random), ClientXML = world.ClientXML, ExtraXML = world.ExtraXML, SendMusic = ConnectedBuildStartsWith(clientVer) }); stage = ProtocalStage.Handshaked; } }
public void Execute(Player player, string[] args) { if (args.Length < 2) { player.SendHelp( "Usage: /rank <username> <number>\n0: Player\n1: Donator\n2: Game Master\n3: Developer\n4: Head Developer\n5: Admin"); } else { if (int.Parse(args[1]) < player.Client.Account.Rank) { try { using (var dbx = new Database()) { var cmd = dbx.CreateQuery(); cmd.CommandText = "UPDATE accounts SET rank=@rank WHERE name=@name"; cmd.Parameters.AddWithValue("@rank", args[1]); cmd.Parameters.AddWithValue("@name", args[0]); if (cmd.ExecuteNonQuery() == 0) { player.SendInfo("Could not change rank"); } else { player.SendInfo("Account rank successfully changed"); } dbx.Dispose(); } } catch { player.SendInfo("Could not change rank, please change rank in database"); } } else { player.SendError("You cannot set someone's rank higher than your own"); } } }
public override void Tick(RealmTime time) { base.Tick(time); if (Players.Count > 0) { if (!Flags["started"] && !Flags["counting"]) { foreach (var i in RealmManager.Clients.Values) i.SendPacket(new TextPacket { Stars = -1, BubbleTime = 0, Name = "#Announcement", Text = "A paid arena game has been started. Closing in 1 minute!" }); Flags["counting"] = true; Countdown(60); } else if (Flags["started"] && !Flags["counting"]) { if (Enemies.Count < 1 + Pets.Count) { Wave++; if (Wave < 6) { RandomBosses = new[] { "Red Demon", "Phoenix Lord", "Henchman of Oryx" }; } if (Wave > 5 && Wave < 11) { RandomBosses = new[] {"Red Demon", "Phoenix Lord", "Henchman of Oryx", "Stheno the Snake Queen"}; } if (Wave > 10 && Wave < 16) { RandomBosses = new[] {"Elder Tree", "Stheno the Snake Queen", "Archdemon Malphas", "Septavius the Ghost God"}; } if (Wave > 15 && Wave < 21) { RandomBosses = new[] { "Elder Tree", "Archdemon Malphas", "Septavius the Ghost God", "Thessal the Mermaid Goddess", "Crystal Prisoner" }; } if (Wave > 20 && Wave < 36) { RandomBosses = new[] { "Thessal the Mermaid Goddess", "Crystal Prisoner", "Tomb Support", "Tomb Defender", "Tomb Attacker", "Oryx the Mad God 2" }; } if (Wave > 35) { RandomBosses = new[] { "Thessal the Mermaid Goddess", "Crystal Prisoner", "Tomb Support", "Tomb Defender", "Tomb Attacker", "Oryx the Mad God 2", "Phoenix Wright", "Bridge Sentinel" }; } var db = new Database(); //FamePot = (Wave/2)*10/(Players.Count == 1 ? 1 : 2); if (Players.Count == 1) { FamePot = Wave / 2 * 10; } else if (Wave % 2 == 1) { FamePot = (Wave + 1) / 4 * 10; } else { FamePot = Wave / 4 * 10; } foreach (var i in Players) { i.Value.CurrentFame = i.Value.Client.Account.Stats.Fame = db.UpdateFame(i.Value.Client.Account, FamePot); i.Value.UpdateCount++; i.Value.Client.SendPacket(new NotificationPacket { Color = new ARGB(0xFFFF6600), ObjectId = i.Value.Id, Text = "+" + FamePot + " Fame" }); if (Math.IEEERemainder(Wave, 15) == 0) { i.Value.Credits = i.Value.Client.Account.Credits = db.UpdateCredit(i.Value.Client.Account, 1); i.Value.UpdateCount++; } } db.Dispose(); var Invincible = new ConditionEffect(); Invincible.Effect = ConditionEffectIndex.Invulnerable; Invincible.DurationMS = 6000; var Healing = new ConditionEffect(); Healing.Effect = ConditionEffectIndex.Healing; Healing.DurationMS = 6000; foreach (var i in Players) { i.Value.Client.SendPacket(new SwitchMusicPacket { Music = "Arena" }); i.Value.ApplyConditionEffect(Invincible, Healing); } foreach (var i in Players) { try { if (!Participants.Contains(i.Value.Client.Account.Name)) Participants.Add(i.Value.Client.Account.Name); } catch { } } Flags["counting"] = true; Timers.Add(new WorldTimer(1000, (world, t) => Countdown(5))); } else { foreach (var i in Enemies) { if (OutOfBounds(i.Value.X, i.Value.Y)) { LeaveWorld(i.Value); } } } } } else { if (Participants.Count > 0) { new Database().AddToArenaLb(Wave, Participants); Participants.Clear(); } } }
public void Save() { try { if (db != null) { if (character != null) { entity.SaveToCharacter(); if (entity.Owner.Id != -6) db.SaveCharacter(account, character); } db.Dispose(); db = null; } else { db = new Database(); if (character != null) { entity.SaveToCharacter(); if (entity.Owner.Id != -6) db.SaveCharacter(account, character); } db.Dispose(); db = null; } } catch { } }
public void HandleRequest(HttpListenerContext context) { NameValueCollection query; using (var rdr = new StreamReader(context.Request.InputStream)) query = HttpUtility.ParseQueryString(rdr.ReadToEnd()); using (var db = new Database()) { List<ServerItem> filteredServers = null; Account a = db.Verify(query["guid"], query["password"]); if (a != null) { if (a.Banned) { filteredServers = YoureBanned(); } else { filteredServers = GetServersForRank(a.Rank); } } else { filteredServers = GetServersForRank(0); } var chrs = new Chars { Characters = new List<Char>(), NextCharId = 2, MaxNumChars = 1, Account = db.Verify(query["guid"], query["password"]), Servers = filteredServers }; Account dvh = null; if (chrs.Account != null) { db.GetCharData(chrs.Account, chrs); db.LoadCharacters(chrs.Account, chrs); chrs.News = db.GetNews(chrs.Account); dvh = chrs.Account; } else { chrs.Account = Database.CreateGuestAccount(query["guid"]); chrs.News = db.GetNews(null); } var ms = new MemoryStream(); var serializer = new XmlSerializer(chrs.GetType(), new XmlRootAttribute(chrs.GetType().Name) {Namespace = ""}); var xws = new XmlWriterSettings(); xws.OmitXmlDeclaration = true; xws.Encoding = Encoding.UTF8; XmlWriter xtw = XmlWriter.Create(context.Response.OutputStream, xws); serializer.Serialize(xtw, chrs, chrs.Namespaces); db.Dispose(); } }