private void ProcessData(byte[] Data) { if (Data.Length == 0) { return; } ASCIIEncoding enc = new ASCIIEncoding(); String command = enc.GetString(Data); command = command.Replace("\r\n", "").Trim(); String[] bits = command.Split(Convert.ToChar(1)); command = bits[0]; Session Target = null; switch (command) { case "status": SendData("1"); break; case "human": is_human = true; SendData("Welcome. To get a list of commands type commands."); break; case "close": case "exit": SendData("Bye"); stop(mId); break; case "ha": if (bits.Length < 2) { SendData("Command must be ha <message>"); break; } string Alert = UserInputFilter.FilterString(bits[1]); SessionManager.BroadcastPacket(UserAlertModernComposer.Compose("Important notice from Hotel Management", Alert)); break; case "update_catalog": using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { CatalogManager.RefreshCatalogData(MySqlClient); } break; case "update_items": using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { ItemDefinitionManager.Initialize(MySqlClient); } break; case "premium": if (bits.Length < 3 || (bits[1] != "enable" && bits[1] != "disable")) { SendData("Command must be premium (enable|disable) <userid>"); break; } Target = SessionManager.GetSessionByCharacterId(Convert.ToUInt32(bits[2])); if (Target == null) { SendData("User not online"); break; } if (bits[1] == "enable" && !Target.CharacterInfo.IsPremium) { Target.CharacterInfo.IsPremium = true; Target.SendData(UserAlertModernComposer.Compose("Premium", "Your premium was activated")); ServerMessage Welcome = new ServerMessage(575); Welcome.AppendInt32(1); Welcome.AppendInt32(0); Welcome.AppendInt32(1); Target.SendData(Welcome); } else if (bits[1] == "disable" && Target.CharacterInfo.IsPremium) { ServerMessage Welcome = new ServerMessage(575); Welcome.AppendInt32(0); Welcome.AppendInt32(1); Welcome.AppendInt32(0); Target.SendData(Welcome); Target.CharacterInfo.IsPremium = false; Target.SendData(UserAlertModernComposer.Compose("Premium", "Your premium was deactivated")); } Target.SendData(CatalogUpdatedNotificationComposer.Compose()); SendData("OK"); break; case "update_badges": if (bits.Length < 2) { SendData("Command must be update_badges <userid>"); break; } Target = SessionManager.GetSessionByCharacterId(Convert.ToUInt32(bits[1])); if (Target == null) { SendData("User not online"); break; } using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { Target.AchievementCache.ReloadCache(MySqlClient); Target.BadgeCache.ReloadCache(MySqlClient, Target.AchievementCache); RoomInstance Instance = RoomManager.GetInstanceByRoomId(Target.CurrentRoomId); if (Instance != null) { Instance.BroadcastMessage(RoomUserBadgesComposer.Compose(Target.CharacterId, Target.BadgeCache.EquippedBadges)); } } SendData("OK"); break; case "": break; default: SendData("Unknown Command."); break; } if (!is_human) { stop(mId); } }
public static void RefreshCatalogData(SqlDatabaseClient MySqlClient, bool NotifyUsers = true) { int CountLoaded = 0; lock (mPages) { mCatalogItems.Clear(); mCatalogItemsIdIndex.Clear(); mCatalogItemsNameIndex.Clear(); mPages.Clear(); mClubOffers.Clear(); mPages.Add(-1, new CatalogPage(-1, 0, string.Empty, 0, 0, string.Empty, true, true, string.Empty, null, null, new List <CatalogItem>())); // root category MySqlClient.SetParameter("enabled", "1"); DataTable ItemTable = MySqlClient.ExecuteQueryTable("SELECT * FROM catalog_items WHERE enabled = @enabled ORDER BY name ASC"); foreach (DataRow Row in ItemTable.Rows) { int PageId = (int)Row["page_id"]; if (!mCatalogItems.ContainsKey(PageId)) { mCatalogItems[PageId] = new List <CatalogItem>(); } CatalogItem Item = new CatalogItem((uint)Row["id"], (uint)Row["base_id"], (string)Row["name"], (int)Row["cost_credits"], (int)Row["cost_pixels"], (int)Row["amount"], (string)Row["preset_flags"], (int)Row["club_restriction"]); if (Item.Definition == null) { Output.WriteLine("Warning: Catalog item " + (uint)Row["id"] + " has an invalid base_id reference.", OutputLevel.Warning); continue; } mCatalogItems[PageId].Add(Item); mCatalogItemsIdIndex[Item.Id] = Item; mCatalogItemsNameIndex[Item.DisplayName] = Item; } MySqlClient.SetParameter("enabled", "1"); DataTable Table = MySqlClient.ExecuteQueryTable("SELECT * FROM catalog WHERE enabled = @enabled ORDER BY order_num ASC"); foreach (DataRow Row in Table.Rows) { List <string> PageStrings1 = new List <string>(); List <string> PageStrings2 = new List <string>(); foreach (string String in Row["page_strings_1"].ToString().Split('|')) { PageStrings1.Add(String); } foreach (string String in Row["page_strings_2"].ToString().Split('|')) { PageStrings2.Add(String); } int Id = (int)Row["id"]; mPages.Add(Id, new CatalogPage((int)Row["id"], (int)Row["parent_id"], (string)Row["title"], (int)Row["icon"], (int)Row["color"], (string)Row["required_right"], (Row["visible"].ToString() == "1"), (Row["dummy_page"].ToString() == "1"), (string)Row["template"], PageStrings1, PageStrings2, mCatalogItems.ContainsKey(Id) ? mCatalogItems[Id] : new List <CatalogItem>())); CountLoaded++; } DataTable ClubTable = MySqlClient.ExecuteQueryTable("SELECT * FROM catalog_subscriptions"); foreach (DataRow Row in ClubTable.Rows) { CatalogClubOfferType OfferType = CatalogClubOfferType.Basic; switch ((string)Row["type"]) { case "vip": OfferType = CatalogClubOfferType.Vip; break; case "upgrade": OfferType = CatalogClubOfferType.VipUpgrade; break; } mClubOffers.Add((uint)Row["id"], new CatalogClubOffer((uint)Row["id"], (string)Row["name"], (int)Row["cost_credits"], (int)Row["length_days"], OfferType)); } } Output.WriteLine("Loaded " + CountLoaded + " catalog page(s).", OutputLevel.DebugInformation); if (NotifyUsers) { SessionManager.BroadcastPacket(CatalogUpdatedNotificationComposer.Compose()); } }