Exemple #1
0
        /// <summary>
        /// Serializes the search result list statics.
        /// </summary>
        /// <param name="staticId">The static identifier.</param>
        /// <param name="direct">if set to <c>true</c> [direct].</param>
        /// <param name="message">The message.</param>
        /// <param name="session">The session.</param>
        internal static void SerializeSearchResultListStatics(string staticId, bool direct, ServerMessage message,
                                                              GameClient session)
        {
            if (string.IsNullOrEmpty(staticId) || staticId == "official") staticId = "official_view";
            if (staticId != "hotel_view" && staticId != "roomads_view" && staticId != "myworld_view" &&
                !staticId.StartsWith("category__") && staticId != "official_view")
            {
                message.AppendString(staticId); // code
                message.AppendString(""); // title
                message.AppendInteger(1); // 0 : no button - 1 : Show More - 2 : Show Back button
                message.AppendBool(staticId != "my" && staticId != "popular" && staticId != "official-root"); // collapsed
                message.AppendInteger(staticId == "official-root" ? 1 : 0); // 0 : list - 1 : thumbnail
            }
            KeyValuePair<RoomData, uint>[] rooms;
            switch (staticId)
            {
                case "hotel_view":
                    {
                        SerializeSearchResultListStatics("popular", false, message, session);
                        foreach (FlatCat flat in AzureEmulator.GetGame().GetNavigator().PrivateCategories.Values) SerializeSearchResultListFlatcats(flat.Id, false, message);
                        break;
                    }
                case "myworld_view":
                    {
                        SerializeSearchResultListStatics("my", false, message, session);
                        SerializeSearchResultListStatics("favorites", false, message, session);
                        SerializeSearchResultListStatics("my_groups", false, message, session);
                        SerializeSearchResultListStatics("history", false, message, session);
                        SerializeSearchResultListStatics("friends_rooms", false, message, session);
                        break;
                    }
                case "roomads_view":
                    {
                        foreach (FlatCat flat in AzureEmulator.GetGame().GetNavigator().PrivateCategories.Values) SerializePromotionsResultListFlatcats(flat.Id, false, message);
                        SerializeSearchResultListStatics("top_promotions", false, message, session);
                        break;
                    }
                case "official_view":
                    {
                        SerializeSearchResultListStatics("official-root", false, message, session);
                        SerializeSearchResultListStatics("staffpicks", false, message, session);
                        break;
                    }
                case "official-root":
                    {
                        message.AppendServerMessage(AzureEmulator.GetGame().GetNavigator().NewPublicRooms);
                        break;
                    }
                case "staffpicks":
                    {
                        message.AppendServerMessage(AzureEmulator.GetGame().GetNavigator().NewStaffPicks);
                        break;
                    }
                case "my":
                    {
                        var i = 0;
                        message.StartArray();
                        foreach (var data in session.GetHabbo().UsersRooms.Where(data => data != null))
                        {
                            data.Serialize(message, false);
                            message.SaveArray();
                            if (i++ == (direct ? 100 : 8)) break;
                        }
                        message.EndArray();
                        break;
                    }
                case "favorites":
                    {
                        if (session.GetHabbo().FavoriteRooms == null)
                        {
                            message.AppendInteger(0);
                            return;
                        }

                        var i = 0;
                        message.AppendInteger(session.GetHabbo().FavoriteRooms.Count > (direct ? 40 : 8)
                            ? (direct ? 40 : 8)
                            : session.GetHabbo().FavoriteRooms.Count);
                        foreach (
                            var data in
                                session.GetHabbo()
                                    .FavoriteRooms.Select(
                                        dataId => AzureEmulator.GetGame().GetRoomManager().GenerateRoomData(dataId))
                                    .Where(data => data != null))
                        {
                            data.Serialize(message, false);
                            i++;
                            if (i == (direct ? 40 : 8)) break;
                        }
                        break;
                    }
                case "friends_rooms":
                    {
                        var i = 0;
                        if (session == null || session.GetHabbo() == null || session.GetHabbo().GetMessenger() == null ||
                            session.GetHabbo().GetMessenger().GetActiveFriendsRooms() == null)
                        {
                            message.AppendInteger(0);
                            return;
                        }
                        List <RoomData> roomsFriends =
                            session.GetHabbo()
                                .GetMessenger()
                                .GetActiveFriendsRooms()
                                .OrderByDescending(p => p.UsersNow)
                                .Take((direct ? 40 : 8))
                                .ToList();
                        message.AppendInteger(roomsFriends.Count);
                        foreach (RoomData data in roomsFriends.Where(data => data != null))
                        {
                            data.Serialize(message, false);

                            i++;
                            if (i == (direct ? 40 : 8)) break;
                        }
                        break;
                    }
                case "recommended":
                    {
                        break;
                    }
                case "popular":
                    {
                        try
                        {
                            rooms = AzureEmulator.GetGame().GetRoomManager().GetActiveRooms();
                            if (rooms == null)
                            {
                                message.AppendInteger(0);
                                break;
                            }
                            message.AppendInteger(rooms.Length);
                            foreach (var room in rooms) room.Key.Serialize(message, false);
                        }
                        catch (Exception e)
                        {
                            Writer.Writer.LogException(e.ToString());
                            message.AppendInteger(0);
                        }
                        break;
                    }
                case "top_promotions":
                    {
                        try
                        {
                            rooms = AzureEmulator.GetGame().GetRoomManager().GetEventRooms();
                            message.AppendInteger(rooms.Length);
                            foreach (var room in rooms) room.Key.Serialize(message, false);
                        }
                        catch
                        {
                            message.AppendInteger(0);
                        }
                        break;
                    }
                case "my_groups":
                    {
                        var i = 0;
                        message.StartArray();
                        foreach (RoomData data in from xGroupId in session.GetHabbo().MyGroups
                                             select AzureEmulator.GetGame().GetGroupManager().GetGroup(xGroupId)
                                                 into xGroup
                                             where xGroup != null
                                             select AzureEmulator.GetGame().GetRoomManager().GenerateRoomData(xGroup.RoomId)
                                                     into data
                                             where data != null
                                             select data)
                        {
                            data.Serialize(message, false);
                            message.SaveArray();
                            if (i++ == (direct ? 40 : 8)) break;
                        }
                        message.EndArray();
                        break;
                    }
                case "history":
                    {
                        var i = 0;
                        message.StartArray();
                        foreach (RoomData roomData in session.GetHabbo()
                            .RecentlyVisitedRooms.Select(
                                roomId => AzureEmulator.GetGame().GetRoomManager().GenerateRoomData(roomId)).Where(roomData => roomData != null))
                        {
                            roomData.Serialize(message, false);
                            message.SaveArray();

                            if (i++ == (direct ? 40 : 8)) break;
                        }

                        message.EndArray();
                        break;
                    }
                default:
                    {
                        if (staticId.StartsWith("category__"))
                        {
                            SerializeSearchResultListFlatcats(
                                AzureEmulator.GetGame()
                                    .GetNavigator()
                                    .GetFlatCatIdByName(staticId.Replace("category__", "")), true, message);
                        }
                        else message.AppendInteger(0);
                        break;
                    }
            }
        }