Code:
-- phpMyAdmin SQL Dump
-- version 3.2.4
-- http://www.phpmyadmin.net
--
-- Machine: localhost
-- Genereertijd: 02 Mei 2011 om 10:51
-- Serverversie: 5.1.41
-- PHP-Versie: 5.3.1
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `hotel`
--
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `navigator_publics`
--
CREATE TABLE IF NOT EXISTS `navigator_publics` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ordernum` int(11) unsigned NOT NULL DEFAULT '1',
`bannertype` enum('0','1') NOT NULL DEFAULT '0' COMMENT '0 = big, 1 = normal',
`caption` varchar(100) NOT NULL,
`image` text NOT NULL,
`image_type` enum('internal','external') NOT NULL DEFAULT 'internal',
`room_id` int(10) unsigned NOT NULL DEFAULT '0',
`category_parent_id` int(11) NOT NULL DEFAULT '0',
`enabled` enum('0','1') NOT NULL DEFAULT '1',
`recommended` enum('0','1') NOT NULL DEFAULT '0',
`category` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;
--
-- Gegevens worden uitgevoerd voor tabel `navigator_publics`
--
INSERT INTO `navigator_publics` (`id`, `ordernum`, `bannertype`, `caption`, `image`, `image_type`, `room_id`, `category_parent_id`, `enabled`, `recommended`, `category`) VALUES
(1, 1, '0', 'Ontvangstruimte', 'welcome_lounge', 'internal', 1, 0, '1', '1', '0'),
(2, 2, '1', 'Theather', 'theatredrome', 'internal', 0, 13, '1', '0', '0'),
(3, 3, '1', 'Club Orient', '', 'internal', 3, 0, '1', '0', '0'),
(4, 4, '1', 'Picknick Ruimte', 'picnic', 'internal', 4, 12, '1', '0', '0'),
(5, 5, '1', 'Thee Ruimte', 'tearoom', 'internal', 5, 14, '1', '0', '0'),
(6, 6, '1', 'Meet Hotel Lounge', 'dusty_lounge', 'internal', 6, 0, '1', '0', '0'),
(7, 7, '1', 'Meet Hotel Bioscoop', 'habbo_cinema', 'internal', 7, 13, '1', '0', '0'),
(8, 8, '1', 'Infobus', 'park', 'internal', 8, 12, '1', '0', '0'),
(9, 9, '1', 'Star Lounge', 'star_lounge', 'internal', 9, 13, '1', '0', '0'),
(12, 11, '1', 'Outsides', '', 'internal', 1, 0, '1', '0', '1'),
(13, 12, '1', 'Entertainment', '', 'internal', 1, 0, '1', '0', '1'),
(14, 13, '0', 'Restaurants', '', 'internal', 0, 0, '1', '0', '1'),
(15, 14, '0', 'Pooling', '', 'internal', 0, 0, '1', '0', '1');
3. Open your emu and Replace the whole navigator.cs with:
Code:
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using Uber.Collections;
using Uber.HabboHotel.Rooms;
using Uber.HabboHotel.Users.Messenger;
using Uber.HabboHotel.GameClients;
using Uber.Messages;
using Uber.Storage;
namespace Uber.HabboHotel.Navigators
{
class Navigator
{
private SafeList<FlatCat> PrivateCategories;
private SafeDictionary<int, PublicItem> PublicItems;
private SafeDictionary<int, PublicItem> PublicRecommended;
public Navigator() { }
public void Initialize()
{
PrivateCategories = new SafeList<FlatCat>();
PublicItems = new SafeDictionary<int, PublicItem>();
PublicRecommended = new SafeDictionary<int, PublicItem>();
DataTable dPrivCats = null;
DataTable dPubItems = null;
DataTable dPubRecommended = null;
using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient())
{
dPrivCats = dbClient.ReadDataTable("SELECT id,caption,min_rank FROM navigator_flatcats WHERE enabled = '1'");
dPubItems = dbClient.ReadDataTable("SELECT id,bannertype,caption,image,image_type,room_id,category_parent_id,category FROM navigator_publics WHERE enabled = '1' ORDER BY ordernum ASC");
dPubRecommended = dbClient.ReadDataTable("SELECT id,bannertype,caption,image,image_type,room_id,category_parent_id FROM navigator_publics WHERE recommended = '1' AND category = '0' ORDER BY ordernum ASC");
}
if (dPrivCats != null)
{
foreach (DataRow Row in dPrivCats.Rows)
{
PrivateCategories.Add(new FlatCat((int)Row["id"], (string)Row["caption"], (int)Row["min_rank"]));
}
}
if (dPubItems != null)
{
foreach (DataRow Row in dPubItems.Rows)
{
PublicItems.Add((int)Row["id"], new PublicItem((int)Row["id"], int.Parse(Row["bannertype"].ToString()), (string)Row["caption"],
(string)Row["image"], ((Row["image_type"].ToString().ToLower() == "internal") ? PublicImageType.INTERNAL : PublicImageType.EXTERNAL),
(uint)Row["room_id"], (int)Row["category_parent_id"], UberEnvironment.EnumToBool(Row["category"].ToString())));
}
}
if (dPubRecommended != null)
{
foreach (DataRow Row in dPubRecommended.Rows)
{
PublicRecommended.Add((int)Row["id"], new PublicItem((int)Row["id"], int.Parse(Row["bannertype"].ToString()), (string)Row["caption"],
(string)Row["image"], ((Row["image_type"].ToString().ToLower() == "internal") ? PublicImageType.INTERNAL : PublicImageType.EXTERNAL),
(uint)Row["room_id"], (int)Row["category_parent_id"],false));
}
}
}
public int GetCountForParent(int ParentId)
{
int i = 0;
foreach (PublicItem Item in PublicItems.Values)
{
//if (!Item.Category)
//{
if (Item.ParentId == ParentId || ParentId == -1)
{
i++;
}
//}
}
return i;
}
public FlatCat GetFlatCat(int Id)
{
foreach (FlatCat FlatCat in PrivateCategories)
{
if (FlatCat.Id == Id)
{
return FlatCat;
}
}
return null;
}
public ServerMessage SerializeFlatCategories()
{
ServerMessage Cats = new ServerMessage(221);
Cats.AppendInt32(PrivateCategories.Count);
foreach (FlatCat FlatCat in PrivateCategories)
{
if (FlatCat.Id > 0)
{
Cats.AppendBoolean(true);
}
Cats.AppendInt32(FlatCat.Id);
Cats.AppendStringWithBreak(FlatCat.Caption);
}
Cats.AppendStringWithBreak("");
return Cats;
}
public void SerializeItemsFromCata(int Id, ServerMessage Message)
{
foreach (PublicItem Item in this.PublicItems.Values)
{
if (Item.ParentId == Id && !Item.Category)
{
Item.Serialize(Message);
}
}
}
public ServerMessage SerializePublicRooms()
{
ServerMessage Frontpage = new ServerMessage(450);
Frontpage.AppendInt32(this.PublicItems.Count);
foreach (PublicItem Pub in PublicItems.Values)
{
if (Pub.Category)
{
Pub.Serialize(Frontpage);
this.SerializeItemsFromCata(Pub.Id, Frontpage);
}
if (!Pub.Category && Pub.ParentId == 0)
{
Pub.Serialize(Frontpage);
}
}
return Frontpage;
}
public ServerMessage SerializeFavoriteRooms(GameClient Session)
{
ServerMessage Rooms = new ServerMessage(451);
Rooms.AppendInt32(6);
Rooms.AppendStringWithBreak("");
Rooms.AppendInt32(Session.GetHabbo().FavoriteRooms.Count);
foreach (uint Id in Session.GetHabbo().FavoriteRooms)
{
UberEnvironment.GetGame().GetRoomManager().GenerateRoomData(Id).Serialize(Rooms, false);
}
return Rooms;
}
public ServerMessage SerializeRecentRooms(GameClient Session)
{
DataTable Data = null;
using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient())
{
Data = dbClient.ReadDataTable("SELECT * FROM user_roomvisits ORDER BY entry_timestamp DESC LIMIT 50");
}
List<RoomData> ValidRecentRooms = new List<RoomData>();
List<uint> RoomsListed = new List<uint>();
if (Data != null)
{
foreach (DataRow Row in Data.Rows)
{
RoomData rData = UberEnvironment.GetGame().GetRoomManager().GenerateRoomData((uint)Row["room_id"]);
if (rData == null || rData.IsPublicRoom || RoomsListed.Contains(rData.Id))
{
continue;
}
ValidRecentRooms.Add(rData);
RoomsListed.Add(rData.Id);
}
}
ServerMessage Rooms = new ServerMessage(451);
Rooms.AppendInt32(7);
Rooms.AppendStringWithBreak("");
Rooms.AppendInt32(ValidRecentRooms.Count);
foreach (RoomData _Data in ValidRecentRooms)
{
_Data.Serialize(Rooms, false);
}
return Rooms;
}
public ServerMessage SerializeEventListing(GameClient Session, int Category)
{
ServerMessage Message = new ServerMessage(451);
Message.AppendInt32(Category);
Message.AppendInt32(12);
Message.AppendStringWithBreak("");
List<Room> EventRooms = UberEnvironment.GetGame().GetRoomManager().GetEventRoomsForCategory(Category);
Message.AppendInt32(EventRooms.Count);
foreach (Room Room in EventRooms)
{
RoomData Data = new RoomData();
Data.Fill(Room);
Data.Serialize(Message, true);
}
return Message;
}
public ServerMessage SerializePopularRoomTags()
{
Dictionary<string, int> Tags = new Dictionary<string, int>();
DataTable Data = null;
using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient())
{
Data = dbClient.ReadDataTable("SELECT tags,users_now FROM rooms WHERE roomtype = 'private' AND users_now > 0 ORDER BY users_now DESC LIMIT 50");
}
if (Data != null)
{
foreach (DataRow Row in Data.Rows)
{
List<string> RoomTags = new List<string>();
foreach (string Tag in Row["tags"].ToString().Split(','))
{
RoomTags.Add(Tag);
}
foreach (string Tag in RoomTags)
{
if (Tags.ContainsKey(Tag))
{
Tags[Tag] += (int)Row["users_now"];
}
else
{
Tags.Add(Tag, (int)Row["users_now"]);
}
}
}
}
List<KeyValuePair<string, int>> SortedTags = new List<KeyValuePair<string, int>>(Tags);
SortedTags.Sort(
delegate(KeyValuePair<string, int> firstPair,
KeyValuePair<string, int> nextPair)
{
return firstPair.Value.CompareTo(nextPair.Value);
}
);
ServerMessage Message = new ServerMessage(452);
Message.AppendInt32(SortedTags.Count);
foreach (KeyValuePair<string, int> TagData in SortedTags)
{
Message.AppendStringWithBreak(TagData.Key);
Message.AppendInt32(TagData.Value);
}
return Message;
}
public ServerMessage SerializeSearchResults(string SearchQuery) // todo search cache
{
DataTable Data = null;
using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient())
{
SearchQuery = UberEnvironment.FilterInjectionChars(SearchQuery.ToLower()).Trim();
if (SearchQuery.Length > 0)
{
dbClient.AddParamWithValue("query", SearchQuery + "%");
dbClient.AddParamWithValue("tags_query", "%" + SearchQuery + "%");
Data = dbClient.ReadDataTable("SELECT * FROM rooms WHERE caption LIKE @query AND roomtype = 'private' OR tags LIKE @tags_query AND roomtype = 'private' OR owner LIKE @query AND roomtype = 'private' ORDER BY users_now DESC LIMIT 30");
}
}
List<RoomData> Results = new List<RoomData>();
if (Data != null)
{
foreach (DataRow Row in Data.Rows)
{
RoomData RData = new RoomData();
RData.Fill(Row);
Results.Add(RData);
}
}
ServerMessage Message = new ServerMessage(451);
//Message.AppendInt32(1);
Message.AppendInt32(9);
Message.AppendStringWithBreak(SearchQuery);
Message.AppendInt32(Results.Count);
foreach (RoomData Room in Results)
{
Room.Serialize(Message, false);
}
return Message;
}
public ServerMessage SerializeRoomListing(GameClient Session, int Mode)
{
ServerMessage Rooms = new ServerMessage(451);
if (Mode >= -1)
{
//Rooms.AppendInt32(Mode);
Rooms.AppendInt32(1);
}
else if (Mode == -2)
{
//Rooms.AppendInt32(0);
Rooms.AppendInt32(2);
}
else if (Mode == -3)
{
//Rooms.AppendInt32(0);
Rooms.AppendInt32(5);
}
else if (Mode == -4)
{
//Rooms.AppendInt32(0);
Rooms.AppendInt32(3);
}
else if (Mode == -5)
{
//Rooms.AppendInt32(0);
Rooms.AppendInt32(4);
}
Rooms.AppendStringWithBreak("");
DataTable Data = null;
using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient())
{
switch (Mode)
{
case -5:
List<uint> FriendRooms = new List<uint>();
foreach (MessengerBuddy Buddy in Session.GetHabbo().GetMessenger().GetBuddies())
{
GameClient Client = UberEnvironment.GetGame().GetClientManager().GetClientByHabbo(Buddy.Id);
if (Client == null || Client.GetHabbo() == null || Client.GetHabbo().CurrentRoomId <= 0)
{
continue;
}
FriendRooms.Add(Client.GetHabbo().CurrentRoomId);
}
StringBuilder _Query = new StringBuilder("SELECT * FROM rooms WHERE");
int _i = 0;
foreach (uint Room in FriendRooms)
{
if (_i > 0)
{
_Query.Append(" OR");
}
_Query.Append(" id = '" + Room + "'");
_i++;
}
_Query.Append(" ORDER BY users_now DESC LIMIT 40");
if (_i > 0)
{
Data = dbClient.ReadDataTable(_Query.ToString());
}
else
{
Data = null;
}
break;
case -4:
List<string> FriendsNames = new List<string>();
foreach (MessengerBuddy Buddy in Session.GetHabbo().GetMessenger().GetBuddies())
{
FriendsNames.Add(Buddy.Username);
}
StringBuilder Query = new StringBuilder("SELECT * FROM rooms WHERE");
int i = 0;
foreach (string Name in FriendsNames)
{
if (i > 0)
{
Query.Append(" OR");
}
Query.Append(" owner = '" + Name + "'");
i++;
}
Query.Append(" ORDER BY users_now DESC LIMIT 40");
if (i > 0)
{
Data = dbClient.ReadDataTable(Query.ToString());
}
else
{
Data = null;
}
break;
case -3:
Data = dbClient.ReadDataTable("SELECT * FROM rooms WHERE owner = '" + Session.GetHabbo().Username + "' ORDER BY id ASC");
break;
case -2:
Data = dbClient.ReadDataTable("SELECT * FROM rooms WHERE score > 0 AND roomtype = 'private' ORDER BY score DESC LIMIT 40");
break;
case -1:
/*List<Room> NavRooms = UberEnvironment.GetGame().GetRoomManager().GetRoomsForNavigator();
Rooms.AppendInt32(NavRooms.Count);
foreach (Room Room in NavRooms)
{
UberEnvironment.GetGame().GetRoomManager().GenerateRoomData(Room.RoomId).Serialize(Rooms, false);
}
return Rooms;*/
Data = dbClient.ReadDataTable("SELECT * FROM rooms WHERE users_now > 0 AND roomtype = 'private' ORDER BY users_now DESC LIMIT 40");
break;
default:
Data = dbClient.ReadDataTable("SELECT * FROM rooms WHERE category = '" + Mode + "' AND roomtype = 'private' ORDER BY users_now DESC LIMIT 40");
break;
}
}
if (Data == null)
{
Rooms.AppendInt32(0);
}
else
{
Rooms.AppendInt32(Data.Rows.Count);
foreach (DataRow Row in Data.Rows)
{
UberEnvironment.GetGame().GetRoomManager().GenerateRoomData((uint)Row["id"]).Serialize(Rooms, false);
}
}
if (PublicRecommended.Count > 0)
{
Rooms.AppendStringWithBreak("");
foreach (PublicItem Pub in PublicRecommended.Values)
{
Pub.Serialize(Rooms);
}
}
return Rooms;
}
}
}
4. Replace the whole PublicItem with: