コード例 #1
0
ファイル: CommandListener.cs プロジェクト: DaimOwns/Snowlight
        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);
            }
        }
コード例 #2
0
        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());
            }
        }