Advertisement
ossimc82

Database.cs

Apr 16th, 2014
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 46.85 KB | None | 0 0
  1. Example how to use Database.cs at the bottom (ignore the other mysql queries in there):
  2.  
  3. using (var db = new Database())
  4. {
  5.     if (petId != -1)
  6.     {
  7.         string abilities = String.Empty;
  8.         string av = String.Empty;
  9.         string levels = String.Empty;
  10.  
  11.         var cmd = db.CreateQuery();
  12.         cmd.CommandText = "SELECT objType, abilities, levels, rarity, family, available FROM pets WHERE petId=@petId";
  13.         cmd.Parameters.AddWithValue("@petId", petId);
  14.         using (var rdr = cmd.ExecuteReader())
  15.         {
  16.             while (rdr.Read())
  17.             {
  18.                 objType = rdr.GetInt16("objType");
  19.                 PetRarity = (Rarity)rdr.GetUInt32("rarity");
  20.                 PetFamily = (Family)rdr.GetUInt32("family");
  21.                 abilities = rdr.GetString("abilities");
  22.                 av = rdr.GetString("available");
  23.                 levels = rdr.GetString("levels");
  24.             }
  25.         }
  26.     }
  27. }
  28.  
  29.  
  30. --Database.cs--
  31.  
  32. using System;
  33. using System.Collections.Generic;
  34. using System.Globalization;
  35. using System.Linq;
  36. using System.Threading;
  37. using System.Xml.Linq;
  38. using db.data;
  39. using Ionic.Zlib;
  40. using MySql.Data.MySqlClient;
  41.  
  42. namespace db
  43. {
  44.     public partial class Database : IDisposable
  45.     {
  46.         private static string UppercaseFirst(string s)
  47.         {
  48.             if (string.IsNullOrEmpty(s))
  49.             {
  50.                 return string.Empty;
  51.             }
  52.             return char.ToUpper(s[0]) + s.Substring(1);
  53.         }
  54.         private const bool Testing = true;
  55.  
  56.         private static readonly string[] Names =
  57.         {
  58.             "Darq", "Deyst", "Drac", "Drol",
  59.             "Eango", "Eashy", "Eati", "Eendi", "Ehoni",
  60.             "Gharr", "Iatho", "Iawa", "Idrae", "Iri", "Issz", "Itani",
  61.             "Laen", "Lauk", "Lorz",
  62.             "Oalei", "Odaru", "Oeti", "Orothi", "Oshyu",
  63.             "Queq", "Radph", "Rayr", "Ril", "Rilr", "Risrr",
  64.             "Saylt", "Scheev", "Sek", "Serl", "Seus",
  65.             "Tal", "Tiar", "Uoro", "Urake", "Utanu",
  66.             "Vorck", "Vorv", "Yangu", "Yimi", "Zhiar"
  67.         };
  68.  
  69.         private readonly MySqlConnection _con;
  70.  
  71.         public Database()
  72.         {
  73.             _con = Testing
  74.                 ? new MySqlConnection(
  75.                     "Server=127.0.0.1;Database=rotmg_oking;uid=root;password=;Pooling=true;Connection Timeout=30;MinimumPoolSize=10;maximumpoolsize=1200;")
  76.                     //Testing Server
  77.                 : new MySqlConnection(
  78.                     "Server=69.244.79.228;Database=rotmg;uid=Server;password=123456EYb0ss;Pooling=true;Connection Timeout=30;MinimumPoolSize=10;maximumpoolsize=1200;");
  79.             _con.Open();
  80.         }
  81.  
  82.         public void Dispose()
  83.         {
  84.             _con.Close();
  85.         }
  86.  
  87.         public MySqlCommand CreateQuery()
  88.         {
  89.             return _con.CreateCommand();
  90.         }
  91.  
  92.         public static int DateTimeToUnixTimestamp(DateTime dateTime)
  93.         {
  94.             return (int)(dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds;
  95.         }
  96.  
  97.         public List<NewsItem> GetNews(Account acc)
  98.         {
  99.             MySqlCommand cmd = CreateQuery();
  100.             cmd.CommandText = "SELECT icon, title, text, link, date FROM news ORDER BY date LIMIT 10;";
  101.             var ret = new List<NewsItem>();
  102.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  103.             {
  104.                 while (rdr.Read())
  105.                     ret.Add(new NewsItem
  106.                     {
  107.                         Icon = rdr.GetString("icon"),
  108.                         Title = rdr.GetString("title"),
  109.                         TagLine = rdr.GetString("text"),
  110.                         Link = rdr.GetString("link"),
  111.                         Date = DateTimeToUnixTimestamp(rdr.GetDateTime("date")),
  112.                     });
  113.             }
  114.             if (acc != null)
  115.             {
  116.                 cmd.CommandText = @"SELECT charId, characters.charType, level, death.totalFame, time
  117. FROM characters, death
  118. WHERE dead = TRUE AND
  119. characters.accId=@accId AND death.accId=@accId
  120. AND characters.charId=death.chrId;";
  121.                 cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  122.                 using (MySqlDataReader rdr = cmd.ExecuteReader())
  123.                 {
  124.                     while (rdr.Read())
  125.                         ret.Add(new NewsItem
  126.                         {
  127.                             Icon = "fame",
  128.                             Title = string.Format("Your {0} died at level {1}",
  129.                                 XmlDatas.TypeToId[(short)rdr.GetInt32("charType")],
  130.                                 rdr.GetInt32("level")),
  131.                             TagLine = string.Format("You earned {0} glorious Fame",
  132.                                 rdr.GetInt32("totalFame")),
  133.                             Link = "fame:" + rdr.GetInt32("charId"),
  134.                             Date = DateTimeToUnixTimestamp(rdr.GetDateTime("time")),
  135.                         });
  136.                 }
  137.             }
  138.             ret.Sort((a, b) => -Comparer<int>.Default.Compare(a.Date, b.Date));
  139.             return ret.Take(10).ToList();
  140.         }
  141.  
  142.         public static Account CreateGuestAccount(string uuid)
  143.         {
  144.             return new Account
  145.             {
  146.                 Name = Names[(uint)uuid.GetHashCode() % Names.Length],
  147.                 AccountId = 0,
  148.                 Admin = false,
  149.                 Banned = false,
  150.                 Rank = 0,
  151.                 BeginnerPackageTimeLeft = 0,
  152.                 Converted = false,
  153.                 Credits = 0,
  154.                 Guild = new Guild
  155.                 {
  156.                     Name = "",
  157.                     Id = 0,
  158.                     Rank = 0
  159.                 },
  160.                 NameChosen = false,
  161.                 NextCharSlotPrice = 5000,
  162.                 VerifiedEmail = false,
  163.                 Stats = new Stats
  164.                 {
  165.                     BestCharFame = 0,
  166.                     ClassStates = new List<ClassStats>(),
  167.                     Fame = 0,
  168.                     TotalFame = 0
  169.                 },
  170.                 Vault = new VaultData
  171.                 {
  172.                     Chests = new List<VaultChest>()
  173.                 },
  174.                 Bonuses = new List<short>()
  175.             };
  176.         }
  177.  
  178.         public Account Verify(string uuid, string password)
  179.         {
  180.             MySqlCommand cmd = CreateQuery();
  181.             cmd.CommandText =
  182.                 "SELECT id, name, rank, namechosen, verified, guild, guildRank, guildFame, banned, locked, ignored, bonuses, tags, warnings FROM accounts WHERE uuid=@uuid AND password=SHA1(@password);";
  183.             cmd.Parameters.AddWithValue("@uuid", uuid);
  184.             cmd.Parameters.AddWithValue("@password", password);
  185.             Account ret;
  186.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  187.             {
  188.                 if (!rdr.HasRows) return null;
  189.                 rdr.Read();
  190.                 ret = new Account
  191.                 {
  192.                     Name = rdr.GetString(UppercaseFirst("name")),
  193.                     AccountId = rdr.GetInt32("id"),
  194.                     Admin = rdr.GetInt32("rank") >= 2,
  195.                     Rank = rdr.GetInt32("rank"),
  196.                     Banned = rdr.GetBoolean("banned"),
  197.                     BeginnerPackageTimeLeft = 0,
  198.                     Converted = false,
  199.                     Guild = new Guild
  200.                     {
  201.                         Id = rdr.GetInt32("guild"),
  202.                         Rank = rdr.GetInt32("guildRank"),
  203.                         Fame = rdr.GetInt32("guildFame")
  204.                     },
  205.                     NameChosen = rdr.GetBoolean("namechosen"),
  206.                     NextCharSlotPrice = 5000,
  207.                     VerifiedEmail = true, //rdr.GetBoolean("verified")
  208.                     Locked = Utils.StringListToIntList(rdr.GetString("locked").Split(',').ToList()),
  209.                     Ignored = Utils.StringListToIntList(rdr.GetString("ignored").Split(',').ToList()),
  210.                     Bonuses = Utils.FromCommaSepString16(rdr.GetString("bonuses")).ToList(),
  211.                     Tags = rdr.GetString("tags"),
  212.                     Warnings = rdr.GetInt32("warnings")
  213.                 };
  214.             }
  215.             ReadStats(ret);
  216.             ret.Guild.Name = GetGuildName(ret.Guild.Id);
  217.             return ret;
  218.         }
  219.  
  220.         public Account Register(string uuid, string password, bool isGuest)
  221.         {
  222.             MySqlCommand cmd = CreateQuery();
  223.             cmd.CommandText = "SELECT COUNT(id) FROM accounts WHERE uuid=@uuid;";
  224.             cmd.Parameters.AddWithValue("@uuid", uuid);
  225.             if ((int)(long)cmd.ExecuteScalar() > 0) return null;
  226.  
  227.             cmd = CreateQuery();
  228.             cmd.CommandText =
  229.                 "INSERT INTO accounts(uuid, password, name, rank, namechosen, verified, guild, guildRank, guildFame, vaultCount, maxCharSlot, regTime, guest, banned, locked, ignored, bonuses, tags, warnings) VALUES(@uuid, SHA1(@password), @name, 0, 1, 0, 0, 0, @empty, 1, 2, @regTime, @guest, 0, @empty, @empty, @empty, @empty, 0);";
  230.             cmd.Parameters.AddWithValue("@uuid", uuid);
  231.             cmd.Parameters.AddWithValue("@password", password);
  232.             cmd.Parameters.AddWithValue("@name", uuid); //names[(uint)uuid.GetHashCode() % names.Length]);
  233.             cmd.Parameters.AddWithValue("@guest", isGuest);
  234.             cmd.Parameters.AddWithValue("@regTime", DateTime.Now);
  235.             cmd.Parameters.AddWithValue("@empty", "");
  236.             int v = cmd.ExecuteNonQuery();
  237.             bool ret = v > 0;
  238.  
  239.             if (ret)
  240.             {
  241.                 cmd = CreateQuery();
  242.                 cmd.CommandText = "SELECT last_insert_id();";
  243.                 int accId = Convert.ToInt32(cmd.ExecuteScalar());
  244.  
  245.                 cmd = CreateQuery();
  246.                 cmd.CommandText =
  247.                     "INSERT INTO stats(accId, fame, totalFame, credits, totalCredits) VALUES(@accId, 100, 100, 0, 0);";
  248.                 cmd.Parameters.AddWithValue("@accId", accId);
  249.                 cmd.ExecuteNonQuery();
  250.  
  251.                 cmd = CreateQuery();
  252.                 cmd.CommandText = "INSERT INTO vaults(accId, items) VALUES(@accId, '-1, -1, -1, -1, -1, -1, -1, -1');";
  253.                 cmd.Parameters.AddWithValue("@accId", accId);
  254.                 cmd.ExecuteNonQuery();
  255.             }
  256.             return Verify(uuid, password);
  257.         }
  258.  
  259.         public bool HasUuid(string uuid)
  260.         {
  261.             MySqlCommand cmd = CreateQuery();
  262.             cmd.CommandText = "SELECT COUNT(id) FROM accounts WHERE uuid=@uuid;";
  263.             cmd.Parameters.AddWithValue("@uuid", uuid);
  264.             return (int)(long)cmd.ExecuteScalar() > 0;
  265.         }
  266.  
  267.         public Account GetAccount(int id)
  268.         {
  269.             MySqlCommand cmd = CreateQuery();
  270.             cmd.CommandText =
  271.                 "SELECT id, name, rank, namechosen, verified, guild, guildRank, guildFame, banned, locked, ignored, bonuses, tags, warnings FROM accounts WHERE id=@id;";
  272.             cmd.Parameters.AddWithValue("@id", id);
  273.             Account ret;
  274.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  275.             {
  276.                 if (!rdr.HasRows) return null;
  277.                 rdr.Read();
  278.                 ret = new Account
  279.                 {
  280.                     Name = rdr.GetString(UppercaseFirst("name")),
  281.                     AccountId = rdr.GetInt32("id"),
  282.                     Admin = rdr.GetInt32("rank") >= 2,
  283.                     Rank = rdr.GetInt32("rank"),
  284.                     Banned = rdr.GetBoolean("banned"),
  285.                     BeginnerPackageTimeLeft = 0,
  286.                     Converted = false,
  287.                     Guild = new Guild
  288.                     {
  289.                         Id = rdr.GetInt32("guild"),
  290.                         Rank = rdr.GetInt32("guildRank"),
  291.                         Fame = rdr.GetInt32("guildFame")
  292.                     },
  293.                     NameChosen = rdr.GetBoolean("namechosen"),
  294.                     NextCharSlotPrice = 5000,
  295.                     VerifiedEmail = rdr.GetBoolean("verified"),
  296.                     Locked = Utils.StringListToIntList(rdr.GetString("locked").Split(',').ToList()),
  297.                     Ignored = Utils.StringListToIntList(rdr.GetString("ignored").Split(',').ToList()),
  298.                     Bonuses = Utils.FromCommaSepString16(rdr.GetString("bonuses")).ToList(),
  299.                     Tags = rdr.GetString("tags"),
  300.                     Warnings = rdr.GetInt32("warnings")
  301.                 };
  302.             }
  303.             ReadStats(ret);
  304.             ret.Guild.Name = GetGuildName(ret.Guild.Id);
  305.             return ret;
  306.         }
  307.  
  308.         public Account GetAccount(string name)
  309.         {
  310.             MySqlCommand cmd = CreateQuery();
  311.             cmd.CommandText =
  312.                 "SELECT id, name, rank, namechosen, verified, guild, guildRank, guildFame, banned, locked, ignored, bonuses, tags, warnings FROM accounts WHERE name=@name;";
  313.             cmd.Parameters.AddWithValue("@name", name);
  314.             Account ret;
  315.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  316.             {
  317.                 if (!rdr.HasRows) return null;
  318.                 rdr.Read();
  319.                 ret = new Account
  320.                 {
  321.                     Name = rdr.GetString(UppercaseFirst("name")),
  322.                     AccountId = rdr.GetInt32("id"),
  323.                     Admin = rdr.GetInt32("rank") >= 2,
  324.                     Rank = rdr.GetInt32("rank"),
  325.                     BeginnerPackageTimeLeft = 0,
  326.                     Converted = false,
  327.                     Guild = new Guild
  328.                     {
  329.                         Id = rdr.GetInt32("guild"),
  330.                         Rank = rdr.GetInt32("guildRank"),
  331.                         Fame = rdr.GetInt32("guildFame")
  332.                     },
  333.                     NameChosen = rdr.GetBoolean("namechosen"),
  334.                     NextCharSlotPrice = 5000,
  335.                     VerifiedEmail = rdr.GetBoolean("verified"),
  336.                     Locked = Utils.StringListToIntList(rdr.GetString("locked").Split(',').ToList()),
  337.                     Ignored = Utils.StringListToIntList(rdr.GetString("ignored").Split(',').ToList()),
  338.                     Bonuses = Utils.FromCommaSepString16(rdr.GetString("bonuses")).ToList(),
  339.                     Tags = rdr.GetString("tags"),
  340.                     Warnings = rdr.GetInt32("warnings")
  341.                 };
  342.             }
  343.             ReadStats(ret);
  344.             ret.Guild.Name = GetGuildName(ret.Guild.Id);
  345.             return ret;
  346.         }
  347.  
  348.         public int UpdateCredit(Account acc, int amount)
  349.         {
  350.             MySqlCommand cmd = CreateQuery();
  351.             if (amount > 0)
  352.             {
  353.                 cmd.CommandText = "UPDATE stats SET totalCredits = totalCredits + @amount WHERE accId=@accId;";
  354.                 cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  355.                 cmd.Parameters.AddWithValue("@amount", amount);
  356.                 cmd.ExecuteNonQuery();
  357.                 cmd = CreateQuery();
  358.             }
  359.             cmd.CommandText = @"UPDATE stats SET credits = credits + (@amount) WHERE accId=@accId;
  360. SELECT credits FROM stats WHERE accId=@accId;";
  361.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  362.             cmd.Parameters.AddWithValue("@amount", amount);
  363.             return (int)cmd.ExecuteScalar();
  364.         }
  365.  
  366.         public int UpdateFame(Account acc, int amount)
  367.         {
  368.             MySqlCommand cmd = CreateQuery();
  369.             if (amount > 0)
  370.             {
  371.                 cmd.CommandText = "UPDATE stats SET totalFame = totalFame + @amount WHERE accId=@accId;";
  372.                 cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  373.                 cmd.Parameters.AddWithValue("@amount", amount);
  374.                 cmd.ExecuteNonQuery();
  375.                 cmd = CreateQuery();
  376.             }
  377.             cmd.CommandText = @"UPDATE stats SET fame = fame + (@amount) WHERE accId=@accId;
  378. SELECT fame FROM stats WHERE accId=@accId;";
  379.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  380.             cmd.Parameters.AddWithValue("@amount", amount);
  381.             return (int)cmd.ExecuteScalar();
  382.         }
  383.  
  384.         public void ReadStats(Account acc)
  385.         {
  386.             MySqlCommand cmd = CreateQuery();
  387.             cmd.CommandText = "SELECT fame, totalFame, credits FROM stats WHERE accId=@accId;";
  388.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  389.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  390.             {
  391.                 if (rdr.HasRows)
  392.                 {
  393.                     rdr.Read();
  394.                     acc.Credits = rdr.GetInt32("credits");
  395.                     acc.Stats = new Stats
  396.                     {
  397.                         Fame = rdr.GetInt32("fame"),
  398.                         TotalFame = rdr.GetInt32("totalFame")
  399.                     };
  400.                 }
  401.                 else
  402.                 {
  403.                     acc.Credits = 0;
  404.                     acc.Stats = new Stats
  405.                     {
  406.                         Fame = 0,
  407.                         TotalFame = 0,
  408.                         BestCharFame = 0,
  409.                         ClassStates = new List<ClassStats>()
  410.                     };
  411.                 }
  412.             }
  413.  
  414.             acc.Stats.ClassStates = ReadClassStates(acc);
  415.             if (acc.Stats.ClassStates.Count > 0)
  416.                 acc.Stats.BestCharFame = acc.Stats.ClassStates.Max(_ => _.BestFame);
  417.             acc.Vault = ReadVault(acc);
  418.         }
  419.  
  420.         public List<ClassStats> ReadClassStates(Account acc)
  421.         {
  422.             MySqlCommand cmd = CreateQuery();
  423.             cmd.CommandText = "SELECT objType, bestLv, bestFame FROM classstats WHERE accId=@accId;";
  424.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  425.             var ret = new List<ClassStats>();
  426.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  427.             {
  428.                 while (rdr.Read())
  429.                     ret.Add(new ClassStats
  430.                     {
  431.                         ObjectType = rdr.GetInt32("objType"),
  432.                         BestFame = rdr.GetInt32("bestFame"),
  433.                         BestLevel = rdr.GetInt32("bestLv")
  434.                     });
  435.             }
  436.             return ret;
  437.         }
  438.  
  439.         public VaultData ReadVault(Account acc)
  440.         {
  441.             MySqlCommand cmd = CreateQuery();
  442.             cmd.CommandText = "SELECT chestId, items FROM vaults WHERE accId=@accId;";
  443.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  444.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  445.             {
  446.                 if (rdr.HasRows)
  447.                 {
  448.                     var ret = new VaultData { Chests = new List<VaultChest>() };
  449.                     while (rdr.Read())
  450.                     {
  451.                         ret.Chests.Add(new VaultChest
  452.                         {
  453.                             ChestId = rdr.GetInt32("chestId"),
  454.                             _Items = rdr.GetString("items")
  455.                         });
  456.                     }
  457.                     return ret;
  458.                 }
  459.                 return new VaultData
  460.                 {
  461.                     Chests = new List<VaultChest>()
  462.                 };
  463.             }
  464.         }
  465.  
  466.         public void SaveChest(int accId, VaultChest chest)
  467.         {
  468.             MySqlCommand cmd = CreateQuery();
  469.             cmd.CommandText = "UPDATE vaults SET items=@items WHERE accId=@accId AND chestId=@chestId;";
  470.             cmd.Parameters.AddWithValue("@accId", accId);
  471.             cmd.Parameters.AddWithValue("@chestId", chest.ChestId);
  472.             cmd.Parameters.AddWithValue("@items", chest._Items);
  473.             cmd.ExecuteNonQuery();
  474.         }
  475.  
  476.         public VaultChest CreateChest(Account acc)
  477.         {
  478.             MySqlCommand cmd = CreateQuery();
  479.             cmd.CommandText = @"INSERT INTO vaults(accId, items) VALUES(@accId, '-1, -1, -1, -1, -1, -1, -1, -1');
  480. SELECT MAX(chestId) FROM vaults WHERE accId = @accId;";
  481.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  482.             return new VaultChest
  483.             {
  484.                 ChestId = (int)cmd.ExecuteScalar(),
  485.                 _Items = "-1, -1, -1, -1, -1, -1, -1, -1"
  486.             };
  487.         }
  488.  
  489.         public void GetCharData(Account acc, Chars chrs)
  490.         {
  491.             MySqlCommand cmd = CreateQuery();
  492.             cmd.CommandText = "SELECT IFNULL(MAX(id), 0) + 1 FROM characters WHERE accId=@accId;";
  493.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  494.             chrs.NextCharId = (int)(long)cmd.ExecuteScalar();
  495.  
  496.             cmd = CreateQuery();
  497.             cmd.CommandText = "SELECT maxCharSlot FROM accounts WHERE id=@accId;";
  498.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  499.             chrs.MaxNumChars = (int)cmd.ExecuteScalar();
  500.         }
  501.  
  502.         public int GetNextCharId(Account acc)
  503.         {
  504.             MySqlCommand cmd = CreateQuery();
  505.             cmd.CommandText = "SELECT IFNULL(MAX(id), 0) + 1 FROM characters WHERE accId=@accId;";
  506.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  507.             var ret = (int)(long)cmd.ExecuteScalar();
  508.             return ret;
  509.         }
  510.  
  511.         public void LoadCharacters(Account acc, Chars chrs)
  512.         {
  513.             MySqlCommand cmd = CreateQuery();
  514.             cmd.CommandText = "SELECT * FROM characters WHERE accId=@accId AND dead = FALSE;";
  515.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  516.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  517.             {
  518.                 while (rdr.Read())
  519.                 {
  520.                     int[] stats = Utils.FromCommaSepString32(rdr.GetString("stats"));
  521.                     chrs.Characters.Add(new Char
  522.                     {
  523.                         ObjectType = (short)rdr.GetInt32("charType"),
  524.                         CharacterId = rdr.GetInt32("charId"),
  525.                         Level = rdr.GetInt32("level"),
  526.                         Exp = rdr.GetInt32("exp"),
  527.                         CurrentFame = rdr.GetInt32("fame"),
  528.                         _Equipment = rdr.GetString("items"),
  529.                         MaxHitPoints = stats[0],
  530.                         HitPoints = rdr.GetInt32("hp"),
  531.                         MaxMagicPoints = stats[1],
  532.                         MagicPoints = rdr.GetInt32("mp"),
  533.                         Attack = stats[2],
  534.                         Defense = stats[3],
  535.                         Speed = stats[4],
  536.                         Dexterity = stats[5],
  537.                         HpRegen = stats[6],
  538.                         MpRegen = stats[7],
  539.                         Tex1 = rdr.GetInt32("tex1"),
  540.                         Tex2 = rdr.GetInt32("tex2"),
  541.                         Dead = false,
  542.                         PCStats = rdr.GetString("fameStats"),
  543.                         Pet = rdr.GetInt32("pet"),
  544.                         PetId = rdr.GetInt32("petId"),
  545.                         hungerLevel = rdr.GetInt32("hungerLevel")
  546.                     });
  547.                 }
  548.             }
  549.             foreach (Char i in chrs.Characters)
  550.             {
  551.                 i.Backpacks = GetBackpacks(i, acc);
  552.                 i.Backpack = 1;
  553.                 i._Equipment += ", " + Utils.GetCommaSepString(i.Backpacks[i.Backpack]);
  554.             }
  555.         }
  556.  
  557.         public static Char CreateCharacter(short type, int chrId)
  558.         {
  559.             XElement cls = XmlDatas.TypeToElement[type];
  560.             if (cls == null) return null;
  561.             var ret = new Char
  562.             {
  563.                 ObjectType = type,
  564.                 CharacterId = chrId,
  565.                 Level = 1,
  566.                 Exp = 0,
  567.                 CurrentFame = 0,
  568.                 Backpack = 1,
  569.                 _Equipment = cls.Element("Equipment").Value,
  570.                 MaxHitPoints = int.Parse(cls.Element("MaxHitPoints").Value),
  571.                 HitPoints = int.Parse(cls.Element("MaxHitPoints").Value),
  572.                 MaxMagicPoints = int.Parse(cls.Element("MaxMagicPoints").Value),
  573.                 MagicPoints = int.Parse(cls.Element("MaxMagicPoints").Value),
  574.                 Attack = int.Parse(cls.Element("Attack").Value),
  575.                 Defense = int.Parse(cls.Element("Defense").Value),
  576.                 Speed = int.Parse(cls.Element("Speed").Value),
  577.                 Dexterity = int.Parse(cls.Element("Dexterity").Value),
  578.                 HpRegen = int.Parse(cls.Element("HpRegen").Value),
  579.                 MpRegen = int.Parse(cls.Element("MpRegen").Value),
  580.                 Tex1 = 0,
  581.                 Tex2 = 0,
  582.                 Dead = false,
  583.                 PCStats = "",
  584.                 FameStats = new FameStats(),
  585.                 Pet = -1,
  586.                 PetId = -1,
  587.                 hungerLevel = 100
  588.             };
  589.             ret.Backpacks = new Dictionary<int, short[]> { { 1, ret.PackFromEquips() } };
  590.             return ret;
  591.         }
  592.  
  593.         public string GetEmail(string uuid, string password)
  594.          {
  595.              var cmd = CreateQuery();
  596.              cmd.CommandText = "SELECT email WHERE uuid=@uuid AND password=@pass LIMIT 1";
  597.              cmd.Parameters.AddWithValue("@uuid", uuid);
  598.              cmd.Parameters.AddWithValue("@pass", password);
  599.              using (MySqlDataReader rdr = cmd.ExecuteReader())
  600.              {
  601.                  if (!rdr.HasRows) return "";
  602.                  rdr.Read();
  603.                  return rdr.GetString("email");
  604.              }
  605.          }
  606.          public void InsertEmail(string uuid, string password, string hash)
  607.          {
  608.              Console.WriteLine("Adding Email!");
  609.  
  610.              var cmd = CreateQuery();
  611.              cmd.CommandText = "INSERT INTO emails(accId, name, email, accessKey) VALUES(@accId, @name, @email, @accessKey);";
  612.              cmd.Parameters.AddWithValue("@accId", GetAccInfo(uuid, 1));
  613.              cmd.Parameters.AddWithValue("@name", GetAccInfo(uuid, 2));
  614.              cmd.Parameters.AddWithValue("@email", GetAccInfo(uuid, 3));
  615.              cmd.Parameters.AddWithValue("@accessKey", hash);
  616.  
  617.              cmd.ExecuteNonQuery();
  618.          }
  619.  
  620.          public string GetAccInfo(string guid, int type)
  621.          {
  622.              var info = "";
  623.              var cmd = CreateQuery();
  624.              cmd.CommandText = "SELECT id, name, email FROM accounts WHERE uuid=@uuid LIMIT 1";
  625.              cmd.Parameters.AddWithValue("@uuid", guid);
  626.              using (MySqlDataReader rdr = cmd.ExecuteReader())
  627.              {
  628.                  if (!rdr.HasRows) return "";
  629.                  rdr.Read();
  630.                  if (type == 1)
  631.                      info = rdr.GetInt32("id").ToString();
  632.                  if (type == 2)
  633.                      info = rdr.GetString("name");
  634.                  if (type == 3)
  635.                      info = rdr.GetString("email");
  636.                  return info;
  637.              }
  638.          }
  639.  
  640.         public bool HasEmail(string email)
  641.         {
  642.             var cmd = CreateQuery();
  643.             cmd.CommandText = "SELECT COUNT(id) FROM accounts WHERE email=@email;";
  644.             cmd.Parameters.AddWithValue("@email", email);
  645.             return (int)(long)cmd.ExecuteScalar() > 0;
  646.         }
  647.  
  648.         public Char LoadCharacter(Account acc, int charId)
  649.         {
  650.             MySqlCommand cmd = CreateQuery();
  651.             cmd.CommandText = "SELECT * FROM characters WHERE accId=@accId AND charId=@charId;";
  652.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  653.             cmd.Parameters.AddWithValue("@charId", charId);
  654.             Char ret;
  655.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  656.             {
  657.                 if (!rdr.HasRows) return null;
  658.                 rdr.Read();
  659.                 int[] stats = Utils.FromCommaSepString32(rdr.GetString("stats"));
  660.                 ret = new Char
  661.                 {
  662.                     ObjectType = (short)rdr.GetInt32("charType"),
  663.                     CharacterId = rdr.GetInt32("charId"),
  664.                     hungerLevel = rdr.GetInt32("hungerLevel"),
  665.                     Level = rdr.GetInt32("level"),
  666.                     Exp = rdr.GetInt32("exp"),
  667.                     CurrentFame = rdr.GetInt32("fame"),
  668.                     _Equipment = rdr.GetString("items"),
  669.                     Backpack = 1,
  670.                     MaxHitPoints = stats[0],
  671.                     HitPoints = rdr.GetInt32("hp"),
  672.                     MaxMagicPoints = stats[1],
  673.                     MagicPoints = rdr.GetInt32("mp"),
  674.                     Attack = stats[2],
  675.                     Defense = stats[3],
  676.                     Speed = stats[4],
  677.                     HpRegen = stats[5],
  678.                     MpRegen = stats[6],
  679.                     Dexterity = stats[7],
  680.                     Tex1 = rdr.GetInt32("tex1"),
  681.                     Tex2 = rdr.GetInt32("tex2"),
  682.                     Dead = rdr.GetBoolean("dead"),
  683.                     Pet = rdr.GetInt32("pet"),
  684.                     PetId = rdr.GetInt32("petId"),
  685.                     PCStats = rdr.GetString("fameStats"),
  686.                     FameStats = new FameStats()
  687.                    
  688.                 };
  689.                 if (!string.IsNullOrEmpty(ret.PCStats) && ret.PCStats != "FameStats")
  690.                     try
  691.                     {
  692.                         ret.FameStats.Read(
  693.                             ZlibStream.UncompressBuffer(
  694.                                 Convert.FromBase64String(ret.PCStats.Replace('-', '+').Replace('_', '/'))));
  695.                     }
  696.                     catch (Exception e)
  697.                     {
  698.                         Console.WriteLine("[" + DateTime.Now.ToString("h:mm:ss tt") + "] " + e);
  699.                     }
  700.             }
  701.             ret.Backpacks = GetBackpacks(ret, acc);
  702.             ret._Equipment += ", " + Utils.GetCommaSepString(ret.Backpacks[1]);
  703.             return ret;
  704.         }
  705.  
  706.         public void SaveCharacter(Account acc, Char chr)
  707.         {
  708.             MySqlCommand cmd = CreateQuery();
  709.             cmd.CommandText = @"UPDATE characters SET
  710. level=@level,
  711. exp=@exp,
  712. fame=@fame,
  713. items=@items,
  714. stats=@stats,
  715. hp=@hp,
  716. mp=@mp,
  717. tex1=@tex1,
  718. tex2=@tex2,
  719. pet=@pet,
  720. petId=@petId,
  721. fameStats=@fameStats,
  722. hungerLevel=@hungerLevel
  723. WHERE accId=@accId AND charId=@charId;";
  724.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  725.             cmd.Parameters.AddWithValue("@charId", chr.CharacterId);
  726.  
  727.             cmd.Parameters.AddWithValue("@level", chr.Level);
  728.             cmd.Parameters.AddWithValue("@exp", chr.Exp);
  729.             cmd.Parameters.AddWithValue("@fame", chr.CurrentFame);
  730.             cmd.Parameters.AddWithValue("@items", Utils.GetCommaSepString(chr.EquipSlots()));
  731.             cmd.Parameters.AddWithValue("@stats", Utils.GetCommaSepString(new[]
  732.             {
  733.                 chr.MaxHitPoints,
  734.                 chr.MaxMagicPoints,
  735.                 chr.Attack,
  736.                 chr.Defense,
  737.                 chr.Speed,
  738.                 chr.HpRegen,
  739.                 chr.MpRegen,
  740.                 chr.Dexterity
  741.             }));
  742.             cmd.Parameters.AddWithValue("@hp", chr.HitPoints);
  743.             cmd.Parameters.AddWithValue("@mp", chr.MagicPoints);
  744.             cmd.Parameters.AddWithValue("@tex1", chr.Tex1);
  745.             cmd.Parameters.AddWithValue("@tex2", chr.Tex2);
  746.             cmd.Parameters.AddWithValue("@pet", chr.Pet);
  747.             cmd.Parameters.AddWithValue("@petId", chr.PetId);
  748.             chr.PCStats =
  749.                 Convert.ToBase64String(ZlibStream.CompressBuffer(chr.FameStats.Write()))
  750.                     .Replace('+', '-')
  751.                     .Replace('/', '_');
  752.             cmd.Parameters.AddWithValue("@fameStats", chr.PCStats);
  753.             cmd.Parameters.AddWithValue("@hungerLevel", chr.hungerLevel);
  754.             cmd.ExecuteNonQuery();
  755.  
  756.             cmd = CreateQuery();
  757.             cmd.CommandText = @"INSERT INTO classstats(accId, objType, bestLv, bestFame)
  758. VALUES(@accId, @objType, @bestLv, @bestFame)
  759. ON DUPLICATE KEY UPDATE
  760. bestLv = GREATEST(bestLv, @bestLv),
  761. bestFame = GREATEST(bestFame, @bestFame);";
  762.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  763.             cmd.Parameters.AddWithValue("@objType", chr.ObjectType);
  764.             cmd.Parameters.AddWithValue("@bestLv", chr.Level);
  765.             cmd.Parameters.AddWithValue("@bestFame", chr.CurrentFame);
  766.             cmd.ExecuteNonQuery();
  767.  
  768.             SaveBackpacks(chr, acc);
  769.         }
  770.  
  771.         public Dictionary<int, short[]> GetBackpacks(Char chr, Account acc)
  772.         {
  773.             MySqlCommand cmd = CreateQuery();
  774.             cmd.CommandText = "SELECT * FROM backpacks WHERE charId=@charId AND accId=@accId";
  775.             cmd.Parameters.AddWithValue("@charId", chr.CharacterId);
  776.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  777.             var ret = new Dictionary<int, short[]>();
  778.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  779.             {
  780.                 if (!rdr.HasRows)
  781.                     return new Dictionary<int, short[]> { { 1, new short[] { -1, -1, -1, -1, -1, -1, -1, -1 } } };
  782.                 while (rdr.Read())
  783.                     ret.Add(rdr.GetInt32("num"), Utils.FromCommaSepString16(rdr.GetString("items")));
  784.                 return ret;
  785.             }
  786.         }
  787.  
  788.         public void SaveBackpacks(Char chr, Account acc)
  789.         {
  790.             if (chr.Backpacks.Count > 0)
  791.             {
  792.                 foreach (var i in chr.Backpacks)
  793.                 {
  794.                     MySqlCommand cmd = CreateQuery();
  795.                     cmd.CommandText = @"INSERT INTO backpacks(accId, charId, num, items)
  796. VALUES(@accId, @charId, @num, @items)
  797. ON DUPLICATE KEY UPDATE
  798. items = @items;";
  799.                     cmd.Parameters.AddWithValue("@charId", chr.CharacterId);
  800.                     cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  801.                     cmd.Parameters.AddWithValue("@num", i.Key);
  802.                     cmd.Parameters.AddWithValue("@items", Utils.GetCommaSepString(i.Value));
  803.                     cmd.ExecuteNonQuery();
  804.                 }
  805.             }
  806.         }
  807.  
  808.         public void Death(Account acc, Char chr, string killer) //Save first
  809.         {
  810.             MySqlCommand cmd = CreateQuery();
  811.             cmd.CommandText = @"UPDATE characters SET
  812. dead=TRUE,
  813. deathTime=NOW()
  814. WHERE accId=@accId AND charId=@charId;";
  815.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  816.             cmd.Parameters.AddWithValue("@charId", chr.CharacterId);
  817.             cmd.ExecuteNonQuery();
  818.  
  819.             bool firstBorn;
  820.             int finalFame = chr.FameStats.CalculateTotal(acc, chr, chr.CurrentFame, out firstBorn);
  821.  
  822.             cmd = CreateQuery();
  823.             cmd.CommandText = @"UPDATE stats SET
  824. fame=fame+@amount,
  825. totalFame=totalFame+@amount
  826. WHERE accId=@accId;";
  827.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  828.             cmd.Parameters.AddWithValue("@amount", finalFame);
  829.             cmd.ExecuteNonQuery();
  830.  
  831.             if (acc.Guild.Id != 0)
  832.             {
  833.                 cmd = CreateQuery();
  834.                 cmd.CommandText = @"UPDATE guilds SET
  835. guildFame=guildFame+@amount,
  836. totalGuildFame=totalGuildFame+@amount
  837. WHERE name=@name;";
  838.                 cmd.Parameters.AddWithValue("@amount", finalFame);
  839.                 cmd.Parameters.AddWithValue("@name", acc.Guild.Name);
  840.                 cmd.ExecuteNonQuery();
  841.  
  842.                 cmd = CreateQuery();
  843.                 cmd.CommandText = @"UPDATE accounts SET
  844. guildFame=guildFame+@amount
  845. WHERE id=@id;";
  846.                 cmd.Parameters.AddWithValue("@amount", finalFame);
  847.                 cmd.Parameters.AddWithValue("@id", acc.AccountId);
  848.                 cmd.ExecuteNonQuery();
  849.             }
  850.  
  851.             cmd = CreateQuery();
  852.             cmd.CommandText =
  853.                 @"INSERT INTO death(accId, chrId, name, charType, tex1, tex2, items, fame, fameStats, totalFame, firstBorn, killer)
  854. VALUES(@accId, @chrId, @name, @objType, @tex1, @tex2, @items, @fame, @fameStats, @totalFame, @firstBorn, @killer);";
  855.             cmd.Parameters.AddWithValue("@accId", acc.AccountId);
  856.             cmd.Parameters.AddWithValue("@chrId", chr.CharacterId);
  857.             cmd.Parameters.AddWithValue("@name", acc.Name);
  858.             cmd.Parameters.AddWithValue("@objType", chr.ObjectType);
  859.             cmd.Parameters.AddWithValue("@tex1", chr.Tex1);
  860.             cmd.Parameters.AddWithValue("@tex2", chr.Tex2);
  861.             cmd.Parameters.AddWithValue("@items", chr._Equipment);
  862.             cmd.Parameters.AddWithValue("@fame", chr.CurrentFame);
  863.             cmd.Parameters.AddWithValue("@fameStats", chr.PCStats);
  864.             cmd.Parameters.AddWithValue("@totalFame", finalFame);
  865.             cmd.Parameters.AddWithValue("@firstBorn", firstBorn);
  866.             cmd.Parameters.AddWithValue("@killer", killer);
  867.             cmd.ExecuteNonQuery();
  868.         }
  869.  
  870.         public string GetCurrentVer()
  871.         {
  872.             MySqlCommand cmd = CreateQuery();
  873.  
  874.             cmd.CommandText = "SELECT cliVersion FROM clinews ORDER BY date DESC LIMIT 1";
  875.  
  876.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  877.             {
  878.                 if (!rdr.HasRows) throw new Exception("No rows found!");
  879.                 rdr.Read();
  880.                 return rdr.GetString("cliVersion");
  881.             }
  882.         }
  883.  
  884.         public void DbAccountList(int listId, List<int> accIds)
  885.         {
  886.             switch (listId)
  887.             {
  888.                 case 0:
  889.                     break;
  890.                 case 1:
  891.                     break;
  892.             }
  893.         }
  894.  
  895.         public void AddToArenaLb(int wave, List<string> participants)
  896.         {
  897.             string players = string.Join(", ", participants.ToArray());
  898.             MySqlCommand cmd = CreateQuery();
  899.             cmd.CommandText = "INSERT INTO arenalb(wave, players) VALUES(@wave, @players)";
  900.             cmd.Parameters.AddWithValue("@wave", wave);
  901.             cmd.Parameters.AddWithValue("@players", players);
  902.             try
  903.             {
  904.                 cmd.ExecuteNonQuery();
  905.             }
  906.             catch (Exception e)
  907.             {
  908.                 Console.WriteLine("[" + DateTime.Now.ToString("h:mm:ss tt") + "] " + e);
  909.             }
  910.         }
  911.  
  912.         public string[] GetArenaLeaderboards()
  913.         {
  914.             var lbrankings = new List<string>();
  915.  
  916.             MySqlCommand cmd = CreateQuery();
  917.  
  918.             cmd.CommandText = "SELECT * FROM arenalb ORDER BY wave DESC LIMIT 10";
  919.  
  920.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  921.             {
  922.                 if (!rdr.HasRows) lbrankings.Add("None");
  923.                 else
  924.                 {
  925.                     while (rdr.Read())
  926.                     {
  927.                         lbrankings.Add("Wave " + rdr.GetInt32("wave") + " - " + rdr.GetString("players"));
  928.                         lbrankings.Add("");
  929.                     }
  930.                 }
  931.             }
  932.  
  933.             return lbrankings.ToArray();
  934.         }
  935.  
  936.         public string[] GetGuildLeaderboards()
  937.         {
  938.             var guildrankings = new List<string>();
  939.  
  940.             MySqlCommand cmd = CreateQuery();
  941.  
  942.             cmd.CommandText = "SELECT * FROM guilds ORDER BY guildFame DESC LIMIT 10";
  943.  
  944.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  945.             {
  946.                 if (!rdr.HasRows) guildrankings.Add("None");
  947.                 else
  948.                 {
  949.                     while (rdr.Read())
  950.                     {
  951.                         guildrankings.Add(rdr.GetString("name") + " - " + rdr.GetInt32("guildFame") + " Fame");
  952.                     }
  953.                 }
  954.             }
  955.  
  956.             return guildrankings.ToArray();
  957.         }
  958.  
  959.  
  960.         public List<int> GetLockeds(int accId)
  961.         {
  962.             MySqlCommand cmd = CreateQuery();
  963.             cmd.CommandText = "SELECT locked FROM accounts WHERE id=@accId";
  964.             cmd.Parameters.AddWithValue("@accid", accId);
  965.             try
  966.             {
  967.                 return cmd.ExecuteScalar().ToString().Split(',').Select(int.Parse).ToList();
  968.             }
  969.             catch
  970.             {
  971.                 return new List<int>();
  972.             }
  973.         }
  974.  
  975.         public List<int> GetIgnoreds(int accId)
  976.         {
  977.             MySqlCommand cmd = CreateQuery();
  978.             cmd.CommandText = "SELECT ignored FROM accounts WHERE id=@accId";
  979.             cmd.Parameters.AddWithValue("@accid", accId);
  980.             try
  981.             {
  982.                 return cmd.ExecuteScalar().ToString().Split(',').Select(int.Parse).ToList();
  983.             }
  984.             catch
  985.             {
  986.                 return new List<int>();
  987.             }
  988.         }
  989.  
  990.         public List<string> GetCommands(int accId)
  991.         {
  992.             var cmd = CreateQuery();
  993.             cmd.CommandText = "SELECT commands FROM accounts WHERE id=@accId";
  994.             cmd.Parameters.AddWithValue("@accid", accId);
  995.             try
  996.             {
  997.                 List<string> commands = new List<string>();
  998.                 foreach (var i in cmd.ExecuteScalar().ToString().Split(','))
  999.                     commands.Add(i);
  1000.                 return commands;
  1001.             }
  1002.             catch
  1003.             { return new List<string>(); }
  1004.         }
  1005.  
  1006.         public bool AddLock(int accId, int lockId)
  1007.         {
  1008.             List<int> x = GetLockeds(accId);
  1009.             x.Add(lockId);
  1010.             string s = Utils.GetCommaSepString(x.ToArray());
  1011.             MySqlCommand cmd = CreateQuery();
  1012.             cmd.CommandText = "UPDATE accounts SET locked=@newlocked WHERE id=@accId";
  1013.             cmd.Parameters.AddWithValue("@newlocked", s);
  1014.             cmd.Parameters.AddWithValue("@accId", accId);
  1015.             if (cmd.ExecuteNonQuery() == 0)
  1016.                 return false;
  1017.             return true;
  1018.         }
  1019.  
  1020.         public bool RemoveLock(int accId, int lockId)
  1021.         {
  1022.             List<int> x = GetLockeds(accId);
  1023.             x.Remove(lockId);
  1024.             string s = Utils.GetCommaSepString(x.ToArray());
  1025.             MySqlCommand cmd = CreateQuery();
  1026.             cmd.CommandText = "UPDATE accounts SET locked=@newlocked WHERE id=@accId";
  1027.             cmd.Parameters.AddWithValue("@newlocked", s);
  1028.             cmd.Parameters.AddWithValue("@accId", accId);
  1029.             if (cmd.ExecuteNonQuery() == 0)
  1030.                 return false;
  1031.             return true;
  1032.         }
  1033.  
  1034.         public bool AddIgnore(int accId, int ignoreId)
  1035.         {
  1036.             List<int> x = GetIgnoreds(accId);
  1037.             x.Add(ignoreId);
  1038.             string s = Utils.GetCommaSepString(x.ToArray());
  1039.             MySqlCommand cmd = CreateQuery();
  1040.             cmd.CommandText = "UPDATE accounts SET ignored=@newignored WHERE id=@accId";
  1041.             cmd.Parameters.AddWithValue("@newignored", s);
  1042.             cmd.Parameters.AddWithValue("@accId", accId);
  1043.             if (cmd.ExecuteNonQuery() == 0)
  1044.                 return false;
  1045.             return true;
  1046.         }
  1047.  
  1048.         public bool RemoveIgnore(int accId, int ignoreId)
  1049.         {
  1050.             List<int> x = GetIgnoreds(accId);
  1051.             x.Remove(ignoreId);
  1052.             string s = Utils.GetCommaSepString(x.ToArray());
  1053.             MySqlCommand cmd = CreateQuery();
  1054.             cmd.CommandText = "UPDATE accounts SET ignored=@newignored WHERE id=@accId";
  1055.             cmd.Parameters.AddWithValue("@newignored", s);
  1056.             cmd.Parameters.AddWithValue("@accId", accId);
  1057.             if (cmd.ExecuteNonQuery() == 0)
  1058.                 return false;
  1059.             return true;
  1060.         }
  1061.  
  1062.         public bool SetBonuses(int accId, List<short> bonuses)
  1063.         {
  1064.             MySqlCommand cmd = CreateQuery();
  1065.             cmd.CommandText = "UPDATE accounts SET bonuses=@newbonuses WHERE id=@accId";
  1066.             cmd.Parameters.AddWithValue("@newbonuses", Utils.GetCommaSepString(bonuses.ToArray()));
  1067.             cmd.Parameters.AddWithValue("@accId", accId);
  1068.             if (cmd.ExecuteNonQuery() == 0)
  1069.                 return false;
  1070.             return true;
  1071.         }
  1072.  
  1073.         public bool SetBonuses(string ip, List<short> gifts)
  1074.         {
  1075.             MySqlCommand cmd = CreateQuery();
  1076.             cmd.CommandText = "UPDATE ips SET gifts=@newgifts WHERE ip=@ip";
  1077.             cmd.Parameters.AddWithValue("@newgifts", Utils.GetCommaSepString(gifts.ToArray()));
  1078.             cmd.Parameters.AddWithValue("@ip", ip);
  1079.             if (cmd.ExecuteNonQuery() == 0)
  1080.                 return false;
  1081.             return true;
  1082.         }
  1083.  
  1084.         public IP CheckIp(string ip)
  1085.         {
  1086.             IP ret = null;
  1087.             MySqlCommand cmd = CreateQuery();
  1088.             cmd.CommandText = "SELECT * FROM ips WHERE ip=@ip;";
  1089.             cmd.Parameters.AddWithValue("@ip", ip);
  1090.             bool foundIp = false;
  1091.             using (MySqlDataReader rdr = cmd.ExecuteReader())
  1092.             {
  1093.                 if (rdr.HasRows)
  1094.                 {
  1095.                     foundIp = true;
  1096.                     rdr.Read();
  1097.                     ret = new IP
  1098.                     {
  1099.                         Address = rdr.GetString("ip"),
  1100.                         Banned = rdr.GetBoolean("banned"),
  1101.                         Gifts = Utils.FromCommaSepString16(rdr.GetString("gifts")).ToList()
  1102.                     };
  1103.                 }
  1104.             }
  1105.             if (!foundIp)
  1106.             {
  1107.                 cmd = CreateQuery();
  1108.                 cmd.CommandText = @"INSERT INTO ips(ip, banned, gifts) VALUES (@ip, @banned, @gifts)";
  1109.                 cmd.Parameters.AddWithValue("@ip", ip);
  1110.                 cmd.Parameters.AddWithValue("@banned", 0);
  1111.                 cmd.Parameters.AddWithValue("@gifts", "");
  1112.                 cmd.ExecuteNonQuery();
  1113.                 ret = new IP
  1114.                 {
  1115.                     Address = ip,
  1116.                     Banned = false,
  1117.                     Gifts = new List<short>()
  1118.                 };
  1119.             }
  1120.             return ret;
  1121.         }
  1122.  
  1123.         public bool CreatePetData(int accId, short objType, uint[] abilityData, int[] abilityLevels, uint rarity, uint family, bool[] abilityAvailable)
  1124.         {
  1125.             //Not finished yet.
  1126.             MySqlCommand cmd = CreateQuery();
  1127.             cmd.CommandText = @"INSERT INTO pets(accId, objType, abilities, levels, rarity, family, available) VALUES(@accId, @objType, @abilities, @levels, @rarity, @family, @available);
  1128. SELECT MAX(petId) FROM pets WHERE accId = @accId;";
  1129.             cmd.Parameters.AddWithValue("@accId", accId);
  1130.             cmd.Parameters.AddWithValue("@objType", objType);
  1131.             cmd.Parameters.AddWithValue("@abilities", String.Format("{0}, {1}, {2}", abilityData[0], abilityData[1], abilityData[2]));
  1132.             cmd.Parameters.AddWithValue("@levels", String.Format("{0}, {1}, {2}", abilityLevels[0], abilityLevels[1], abilityLevels[2]));
  1133.             cmd.Parameters.AddWithValue("@rarity", rarity);
  1134.             cmd.Parameters.AddWithValue("@family", family);
  1135.             cmd.Parameters.AddWithValue("@available", String.Format("{0}, {1}, {2}", abilityAvailable[0], abilityAvailable[1], abilityAvailable[2]));
  1136.             return !(cmd.ExecuteNonQuery() == 0);
  1137.         }
  1138.  
  1139.         public int GetNextPetId(int accId)
  1140.         {
  1141.             MySqlCommand cmd = CreateQuery();
  1142.             cmd.CommandText = "SELECT IFNULL(MAX(petId), 0) + 1 FROM pets WHERE accId=@accId;";
  1143.             cmd.Parameters.AddWithValue("@accId", accId);
  1144.             var ret = (int)(long)cmd.ExecuteScalar();
  1145.             return ret;
  1146.         }
  1147.     }
  1148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement