using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using DuckEmulator.HabboHotel.Inside.Storage.MySql.Database.Interfaces; using DuckEmulator.HabboHotel.Outside.Messages.Types; namespace DuckEmulator.HabboHotel.Outside.Habbos.HabStructure { class BadgeTable { internal List Badges; internal HabboData Habbo; internal BadgeTable(HabboData Habbo) { this.Habbo = Habbo; LoadBadges(); } internal List GetEquiped() { var List = new List(); foreach (Badge Badge in Badges) { if (Badge.SlotId > 0) { List.Add(Badge); } } return List.ToList(); } internal void UpdateBadge(string Badge, int SlotId) { Badge SelectedBadge = GetBadge(Badge); if (SelectedBadge == null) return; if (SlotId < 0 || SlotId > 5) SlotId = 0; SelectedBadge.SlotId = SlotId; using (IQueryAdapter Adapter = DuckEnvironment.GetAdapter()) { Adapter.runFastQuery("UPDATE user_badges SET slot = '" + SelectedBadge.SlotId + "' WHERE user_id = '" + Habbo.Id + "' AND badgecode = '" + SelectedBadge.BadgeCode + "' LIMIT 1"); } } internal void EditBadge(string BadgeCode, string NewBadgeCode) { if (GetBadge(BadgeCode) == null) return; GetBadge(BadgeCode).BadgeCode = NewBadgeCode; Habbo.SendResponse(SerializeInventory()); Habbo.SendResponse(SerializeNewAdded(GetBadge(NewBadgeCode))); using (IQueryAdapter Adapter = DuckEnvironment.GetAdapter()) { Adapter.runFastQuery("UPDATE user_badges SET badgecode = '" + NewBadgeCode + "' WHERE user_id = '" + Habbo.Id + "' AND badgecode = '" + BadgeCode + "' LIMIT 1"); } } internal void GiveBadge(string BadgeCode, bool Created) { if (GetBadge(BadgeCode) != null) return; Badges.Add(new Badge(BadgeCode, 0)); Habbo.SendResponse(SerializeInventory()); if (Created) { Habbo.SendResponse(SerializeNewAdded(GetBadge(BadgeCode))); } using (IQueryAdapter Adapter = DuckEnvironment.GetAdapter()) { Adapter.runFastQuery("INSERT INTO user_badges (user_id,badgecode) VALUES ('" + Habbo.Id + "','" + BadgeCode + "')"); } } internal ServerMessage SerializeNewAdded(Badge Badge) { ServerMessage Message = new ServerMessage(832); Message.AppendBoolean(true); Message.AppendInt32(4); Message.AppendBoolean(true); Message.AppendInt32(0); // BagdeId or something o.O return Message; } internal void LoadBadges() { Badges = new List(); DataTable Data = null; using (IQueryAdapter Adapter = DuckEnvironment.GetAdapter()) { Adapter.setQuery("SELECT * FROM user_badges WHERE user_id = '" + Habbo.Id + "' ORDER BY slot ASC"); Data = Adapter.getTable(); } if (Data == null) return; foreach (DataRow Row in Data.Rows) { if (GetBadge(Row["badgecode"].ToString()) != null) continue; Badges.Add(new Badge(Row["badgecode"].ToString(), int.Parse(Row["slot"].ToString()))); } } internal Badge GetBadge(string BadgeCode) { foreach (Badge Badge in Badges) { if (Badge.BadgeCode.ToLower() == BadgeCode.ToLower()) { return Badge; } } return null; } internal ServerMessage SerializeInventory() { ServerMessage Message = new ServerMessage(229); Message.AppendInt32(Badges.Count); foreach (Badge Badge in Badges) { Message.AppendInt32(-1); Message.AppendStringWithBreak(Badge.BadgeCode); } Message.AppendInt32(GetEquiped().Count); foreach (Badge Badge in GetEquiped()) { Message.AppendInt32(Badge.SlotId); Message.AppendStringWithBreak(Badge.BadgeCode); } return Message; } } class Badge { internal string BadgeCode; internal int SlotId = new int(); internal Badge(string BadgeCode, int SlotId) { this.BadgeCode = BadgeCode; this.SlotId = SlotId; } } }