/// <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; } } }