protected override void HandleRequest() { using (Database db = new Database()) { try { Account acc = db.Verify(Query["guid"], Query["password"], Program.GameData); string classType = Program.GameData.ObjectTypeToId[ushort.Parse(Query["classType"])]; if (CheckAccount(acc, db)) { int price = Program.GameData.ObjectDescs[ushort.Parse(Query["classType"])].UnlockCost; if (acc.Credits < price) return; db.UpdateCredit(acc, -price); MySqlCommand cmd = db.CreateQuery(); cmd.CommandText = "UPDATE unlockedclasses SET available='unrestricted' WHERE accId=@accId AND class=@class;"; cmd.Parameters.AddWithValue("@accId", acc.AccountId); cmd.Parameters.AddWithValue("@class", classType); cmd.ExecuteNonQuery(); } } catch (Exception e) { using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream)) { wtr.WriteLine("<Error>Invalid classType"); wtr.Flush(); wtr.WriteLine(e); } } } }
protected override void HandleRequest() { StreamWriter wtr = new StreamWriter(Context.Response.OutputStream); if (Query.AllKeys.Length > 0) { using (Database db = new Database()) { Account acc = db.Verify(Query["guid"], Query["password"], Program.GameData); if (CheckAccount(acc, db, false)) { foreach (ItemCostItem item in Prices) { if (item.Type == Query["skinType"] && item.Puchasable == 1) { if (!acc.OwnedSkins.Contains(int.Parse(Query["skinType"]))) { acc.OwnedSkins.Add(int.Parse(Query["skinType"])); db.UpdateCredit(acc, -item.Price); MySqlCommand cmd = db.CreateQuery(); cmd.CommandText = "UPDATE accounts SET ownedSkins=@ownedSkins WHERE uuid=@uuid AND password=SHA1(@password)"; cmd.Parameters.AddWithValue("@ownedSkins", Utils.GetCommaSepString(acc.OwnedSkins.ToArray())); cmd.Parameters.AddWithValue("@uuid", Query["guid"]); cmd.Parameters.AddWithValue("@password", Query["password"]); if (cmd.ExecuteNonQuery() == 0) wtr.WriteLine("<Error>Unable to purchase</Error>"); } } } } } } }
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 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 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("Use /name <name>"); } else if (args.Length == 1) { using (var db = new Database()) { var db1 = db.CreateQuery(); db1.CommandText = "SELECT COUNT(name) FROM accounts WHERE name=@name;"; db1.Parameters.AddWithValue("@name", args[0]); if ((int) (long) db1.ExecuteScalar() > 0) { player.SendError("Name Already In Use."); } else { db1 = db.CreateQuery(); db1.CommandText = "UPDATE accounts SET name=@name WHERE id=@accId"; db1.Parameters.AddWithValue("@name", args[0]); db1.Parameters.AddWithValue("@accId", player.Client.Account.AccountId.ToString()); if (db1.ExecuteNonQuery() > 0) { player.Client.Player.Credits = db.UpdateCredit(player.Client.Account, -0); player.Client.Player.Name = args[0]; player.Client.Player.NameChosen = true; player.Client.Player.UpdateCount++; player.SendInfo("Success!"); } else { player.SendError("Internal Server Error Occurred."); } } db1.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); }
protected override void HandleRequest() { StreamWriter wtr = new StreamWriter(Context.Response.OutputStream); if (Query.AllKeys.Length > 0) { using (Database db = new Database()) { Package package = Package.GetPackage(int.Parse(Query["packageId"])); if (package == null) { wtr.Write("<Error>This package is not available any more</Error>"); return; } JsonSerializer s = new JsonSerializer(); var contents = s.Deserialize<PackageContent>(new JsonTextReader(new StringReader(package.Contents))); Account acc = db.Verify(Query["guid"], Query["password"], Program.GameData); if (CheckAccount(acc, db, false)) { if (acc.Credits < package.Price) { wtr.Write("<Error>Not enough gold.<Error/>"); return; } var cmd = db.CreateQuery(); if (contents.items?.Count > 0) { foreach (var i in contents.items) { Dictionary<string, int> itemDic = new Dictionary<string, int>(); List<int> gifts = acc.Gifts; gifts.Add(i); cmd = db.CreateQuery(); cmd.CommandText = "UPDATE accounts SET gifts=@gifts WHERE uuid=@uuid AND password=SHA1(@password);"; cmd.Parameters.AddWithValue("@gifts", Utils.GetCommaSepString<int>(gifts.ToArray())); cmd.Parameters.AddWithValue("@uuid", Query["guid"]); cmd.Parameters.AddWithValue("@password", Query["password"]); cmd.ExecuteNonQuery(); } } if (contents.charSlots > 0) { cmd = db.CreateQuery(); cmd.CommandText = "UPDATE accounts SET maxCharSlot=maxCharSlot + @amount WHERE uuid=@uuid AND password=SHA1(@password);"; cmd.Parameters.AddWithValue("@amount", contents.charSlots); cmd.Parameters.AddWithValue("@uuid", Query["guid"]); cmd.Parameters.AddWithValue("@password", Query["password"]); if (cmd.ExecuteNonQuery() == 0) return; } if (contents.vaultChests > 0) { for (int j = 0; j < contents.vaultChests; j++) db.CreateChest(acc); } db.UpdateCredit(acc, -package.Price); wtr.Write("<Success/>"); } } } }
protected override void HandleRequest() { using (var db = new Database()) { int currency = -1; int price = -1; int.TryParse(Query["currency"], out currency); string status = "<Error>Internal Server Error</Error>"; Account acc; if (CheckAccount(acc = db.Verify(Query["guid"], Query["password"], Program.GameData), db, false)) { var cmd = db.CreateQuery(); cmd.CommandText = "SELECT * FROM thealchemist WHERE startTime <= now() AND endTime >= now() AND id=@gameId;"; cmd.Parameters.AddWithValue("@gameId", Query["gameId"]); Random rand = new Random(); List<int> gifts = new List<int>(); using (var rdr = cmd.ExecuteReader()) { rdr.Read(); if (rdr.HasRows) { List<int> items = Utils.FromCommaSepString32(rdr.GetString("contents")).ToList(); List<int> candidates = new List<int>(3); do { int item = items[rand.Next(items.Count)]; if (!candidates.Contains(item)) candidates.Add(item); } while (candidates.Count < 3); if (currency == GOLD) { if (Query["status"] == "0") { if (CurrentGames.ContainsKey(acc.AccountId)) CurrentGames.Remove(acc.AccountId); CurrentGames.Add(acc.AccountId, candidates.ToArray()); price = rdr.GetInt32("priceFirstInGold"); status = "<Success><Candidates>" + Utils.GetCommaSepString(candidates.ToArray()) + "</Candidates><Gold>" + (acc.Credits - price) + "</Gold></Success>"; } else if (Query["status"] == "1") { if (CurrentGames.ContainsKey(acc.AccountId)) { candidates = CurrentGames[acc.AccountId].ToList(); candidates.Shuffle(); status = "<Success><Awards>" + candidates[int.Parse(Query["choice"])] + "</Awards></Success>"; gifts.Add(candidates[int.Parse(Query["choice"])]); candidates.Remove(candidates[int.Parse(Query["choice"])]); CurrentGames[acc.AccountId] = candidates.ToArray(); } } else if (Query["status"] == "2") { if (CurrentGames.ContainsKey(acc.AccountId)) { candidates = CurrentGames[acc.AccountId].ToList(); candidates.Shuffle(); price = rdr.GetInt32("priceSecondInGold"); status = "<Success><Awards>" + candidates[int.Parse(Query["choice"])] + "</Awards></Success>"; gifts.Add(candidates[int.Parse(Query["choice"])]); CurrentGames.Remove(acc.AccountId); } } } else if (currency == FORTUNETOKENS) { if (Query["status"] == "0") { if (CurrentGames.ContainsKey(acc.AccountId)) CurrentGames.Remove(acc.AccountId); CurrentGames.Add(acc.AccountId, candidates.ToArray()); price = rdr.GetInt32("priceFirstInToken"); status = "<Success><Candidates>" + Utils.GetCommaSepString(candidates.ToArray()) + "</Candidates><FortuneToken>" + (acc.FortuneTokens - price) + "</FortuneToken></Success>"; } else if (Query["status"] == "1") { if (CurrentGames.ContainsKey(acc.AccountId)) { candidates = CurrentGames[acc.AccountId].ToList(); candidates.Shuffle(); status = "<Success><Awards>" + candidates[int.Parse(Query["choice"])] + "</Awards></Success>"; gifts.Add(candidates[int.Parse(Query["choice"])]); candidates.Remove(candidates[int.Parse(Query["choice"])]); CurrentGames[acc.AccountId] = candidates.ToArray(); } } else if (Query["status"] == "2") { status = "<Error>You can not play twiche with a Fortune Token</Error>"; } } else status = "<Error>Invalid currency</Error>"; } else status = "<Error>Invalid gameId</Error>"; } if (currency == GOLD) db.UpdateCredit(acc, price == -1 ? 0 : -price); else if (currency == FORTUNETOKENS) db.UpdateFortuneToken(acc, price == -1 ? 0 : -price); db.AddGifts(acc, gifts); } else status = "<Error>Account not found</Error>"; using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream)) wtr.Write(status); } }
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); }
private bool ParseContents(Account acc, string json) { try { using (var db = new Database()) { var code = GiftCode.FromJson(json); if (code == null) return false; var cmd = db.CreateQuery(); if (code.Gifts.Count > 0) { List<int> gifts = acc.Gifts; foreach (var i in code.Gifts) gifts.Add(i); cmd = db.CreateQuery(); cmd.CommandText = "UPDATE accounts SET gifts=@gifts WHERE uuid=@uuid AND password=SHA1(@password);"; cmd.Parameters.AddWithValue("@gifts", Utils.GetCommaSepString<int>(gifts.ToArray())); cmd.Parameters.AddWithValue("@uuid", Query["guid"]); cmd.Parameters.AddWithValue("@password", Query["password"]); cmd.ExecuteNonQuery(); } if (code.CharSlots > 0) { cmd = db.CreateQuery(); cmd.CommandText = "UPDATE accounts SET maxCharSlot=maxCharSlot + @amount WHERE uuid=@uuid AND password=SHA1(@password);"; cmd.Parameters.AddWithValue("@amount", code.CharSlots); cmd.Parameters.AddWithValue("@uuid", Query["guid"]); cmd.Parameters.AddWithValue("@password", Query["password"]); cmd.ExecuteNonQuery(); } if (code.VaultChests > 0) for (int j = 0; j < code.VaultChests; j++) db.CreateChest(acc); if (code.Gold > 0) db.UpdateCredit(acc, code.Gold); if (code.Fame > 0) db.UpdateFame(acc, code.Fame); } } catch (Exception) { return false; } return true; }
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 free 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) { RandomBosses = new[] { "Thessal the Mermaid Goddess", "Crystal Prisoner", "Tomb Support", "Tomb Defender", "Tomb Attacker", "Oryx the Mad God 2" }; } var db = new Database(); foreach (var i in Players) { if (Math.IEEERemainder(Wave, 25) == 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 {Effect = ConditionEffectIndex.Invulnerable, DurationMS = 5000}; var healing = new ConditionEffect {Effect = ConditionEffectIndex.Healing, DurationMS = 5000}; foreach (var i in Players) { i.Value.Client.SendPacket(new SwitchMusicPacket() { Music = "Arena" }); i.Value.ApplyConditionEffect(new[] { 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; 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 override void BehaviorEvent(string type) { var typec = type.Split(':'); if (typec.Length > 1) if (typec[0] == "dmg") { try { towerHp -= Convert.ToInt32(typec[1]); if (towerHp > 0) BroadcastPacket(new TextPacket { Stars = -1, BubbleTime = 0, Name = "#Zombies", Text = "Your tower's been damaged! " + towerHp + " HP left." }, null); else { Flags["finished"] = true; BroadcastPacket(new TextPacket { BubbleTime = 0, Stars = -1, Name = "#Zombies", Text = "Your tower's been destroyed! You each earn " + famePot + " fame!" }, null); double golddivider = wave / 15; int tokens = (int)Math.Floor(golddivider); 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" }); i.Value.Credits = i.Value.Client.Account.Credits = db.UpdateCredit(i.Value.Client.Account, tokens); i.Value.UpdateCount++; Flags["counting"] = true; db.Dispose(); } foreach (var i in Enemies) { if (!i.Value.isPet) { LeaveWorld(i.Value); } } LeaveWorld(tower); } } catch { } } base.BehaviorEvent(type); }
protected override void HandleRequest() { rand = Query["ignore"] != null ? new Random(int.Parse(Query["ignore"])) : new Random(); using (Database db = new Database()) { Account acc = db.Verify(Query["guid"], Query["password"], Program.GameData); if (CheckAccount(acc, db, false)) { if (Query["boxId"] == null) { using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream)) wtr.WriteLine("<Error>Box not found</Error>"); return; } MysteryBox box = MysteryBox.GetBox(int.Parse(Query["boxId"])); if (box == null) { using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream)) wtr.WriteLine("<Error>Box not found</Error>"); return; } if (box.Sale != null && DateTime.UtcNow <= box.Sale.SaleEnd) { switch (box.Sale.Currency) { case 0: if (acc.Credits < box.Sale.Price) { using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream)) wtr.WriteLine("<Error>Not Enough Gold</Error>"); return; } break; case 1: if (acc.Stats.Fame < box.Sale.Price) { using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream)) wtr.WriteLine("<Error>Not Enough Fame</Error>"); return; } break; } } else { switch (box.Price.Currency) { case 0: if (acc.Credits < box.Price.Amount) { using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream)) wtr.WriteLine("<Error>Not Enough Gold</Error>"); return; } break; case 1: if (acc.Stats.Fame < box.Price.Amount) { using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream)) wtr.WriteLine("<Error>Not Enough Fame</Error>"); return; } break; } } MysteryBoxResult res = new MysteryBoxResult { Awards = Utils.GetCommaSepString(GetAwards(box.Contents)) }; if (box.Sale != null && DateTime.UtcNow <= box.Sale.SaleEnd) res.GoldLeft = box.Sale.Currency == 0 ? db.UpdateCredit(acc, -box.Sale.Price) : db.UpdateFame(acc, -box.Sale.Price); else res.GoldLeft = box.Price.Currency == 0 ? db.UpdateCredit(acc, -box.Price.Amount) : db.UpdateFame(acc, -box.Price.Amount); if (box.Sale != null && DateTime.UtcNow <= box.Sale.SaleEnd) res.Currency = box.Sale.Currency; else res.Currency = box.Price.Currency; sendMysteryBoxResult(Context.Response.OutputStream, res); int[] gifts = Utils.FromCommaSepString32(res.Awards); foreach (int item in gifts) acc.Gifts.Add(item); MySqlCommand cmd = db.CreateQuery(); cmd.CommandText = "UPDATE accounts SET gifts=@gifts WHERE uuid=@uuid AND password=SHA1(@password);"; cmd.Parameters.AddWithValue("@uuid", Query["guid"]); cmd.Parameters.AddWithValue("@password", Query["password"]); cmd.Parameters.AddWithValue("@gifts", Utils.GetCommaSepString(acc.Gifts.ToArray())); cmd.ExecuteNonQuery(); } else using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream)) wtr.WriteLine("<Error>Account not found</Error>"); } }