Code:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using Silverwave.Core;
using Silverwave.HabboHotel.Catalogs;
using Silverwave.HabboHotel.GameClients;
using Silverwave.HabboHotel.Items;
using Silverwave.HabboHotel.Navigators;
using Silverwave.HabboHotel.Pathfinding;
using Silverwave.HabboHotel.Pets;
using Silverwave.HabboHotel.RoomBots;
using Silverwave.HabboHotel.Rooms;
using Silverwave.HabboHotel.Users;
using Silverwave.HabboHotel.Users.Badges;
using Silverwave.Collections;
using Database_Manager.Database.Session_Details.Interfaces;
using System.Collections;
using System.Drawing;
using Silverwave.Messages.Headers;
using System.Text.RegularExpressions;
using System.Threading;
using Silverwave.HabboHotel.Groups;
using Silverwave.HabboHotel.Rooms.Wired;
using Silverwave.Communication.Packets.Outgoing.Rooms.Avatar;
namespace Silverwave.Messages
{
partial class GameClientMessageHandler
{
internal void GetTrainerPanel()
{
uint PetId = Request.PopWiredUInt();
Pet PetData = null;
Room Room = Session.GetHabbo().CurrentRoom;
if (Room == null)
{
return;
}
if ((PetData = Room.GetRoomUserManager().GetPet(PetId).PetData) == null)
{
return;
}
else
{
int Level = PetData.Level;
Response.Init(Outgoing.SerializeTrainerPanel);
Response.AppendInt32(PetData.PetId);
Response.AppendInt32(4);
Response.AppendInt32(0);
Response.AppendInt32(1);
Response.AppendInt32(3);
Response.AppendInt32(4);
Response.AppendInt32(2);
Response.AppendInt32(0);
Response.AppendInt32(1);
SendResponse();
}
}
internal void InitRoomGroupBadges()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().LoadingRoom);
}
internal void GetPub()
{
uint Id = Request.PopWiredUInt();
RoomData Data = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateRoomData(Id);
if (Data == null)
{
return;
}
GetResponse().Init(453);
GetResponse().AppendInt32(Data.Id);
GetResponse().AppendString(Data.CCTs);
GetResponse().AppendInt32(Data.Id);
SendResponse();
}
internal void OpenPub()
{
int Junk = Request.PopWiredInt32();
uint Id = Request.PopWiredUInt();
int Junk2 = Request.PopWiredInt32();
RoomData Data = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateRoomData(Id);
if (Data == null)
{
return;
}
PrepareRoomForUser(Data.Id, "");
}
internal void GetInventory()
{
QueuedServerMessage response = new QueuedServerMessage(Session.GetConnection());
response.appendResponse(Session.GetHabbo().GetInventoryComponent().SerializeFloorItemInventory());
//response.appendResponse(Session.GetHabbo().GetInventoryComponent().SerializeWallItemInventory());
response.sendResponse();
}
internal void GetRoomData1()
{
if (Session.GetHabbo().LoadingRoom <= 0)
{
return;
}
Response.Init(297);
Response.AppendInt32(0);
SendResponse();
}
internal void GetRoomData2()
{
try
{
QueuedServerMessage message = new QueuedServerMessage(Session.GetConnection());
if (Session.GetHabbo().LoadingRoom <= 0 || CurrentLoadingRoom == null)
return;
RoomData Data = CurrentLoadingRoom.RoomData;//SilverwaveEnvironment.GetGame().GetRoomManager().GenerateRoomData(Session.GetHabbo().LoadingRoom);
if (Data == null)
{
return;
}
if (Data.Model == null)
{
Session.SendNotif(LanguageLocale.GetValue("room.missingmodeldata"));
Session.SendMessage(new ServerMessage(Outgoing.OutOfRoom));
ClearRoomLoading();
return;
}
//CurrentLoadingRoom = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().LoadingRoom);
message.appendResponse(CurrentLoadingRoom.GetGameMap().Model.SerializeRelativeHeightmap());
message.appendResponse(CurrentLoadingRoom.GetGameMap().Model.GetHeightmap());
message.sendResponse();
GetRoomData3();
}
catch (Exception e)
{
Logging.LogException("Unable to load room ID [" + Session.GetHabbo().LoadingRoom + "] " + e.ToString());
//Session.SendNotif(LanguageLocale.GetValue("room.roomdataloaderror"));
}
}
internal Room CurrentLoadingRoom;
public int FloodCount;
public DateTime FloodTime;
internal void GetRoomData3()
{
if (Session.GetHabbo().LoadingRoom <= 0 || !Session.GetHabbo().LoadingChecksPassed || CurrentLoadingRoom == null || Session == null)
{
return;
}
if (CurrentLoadingRoom.UsersNow + 1 > CurrentLoadingRoom.UsersMax && !Session.GetHabbo().HasFuse("fuse_enter_full_rooms"))
{
Session.SendNotif(LanguageLocale.GetValue("room.fullerror"));
return;
}
ClearRoomLoading();
QueuedServerMessage response = new QueuedServerMessage(Session.GetConnection());
RoomItem[] floorItems = CurrentLoadingRoom.GetRoomItemHandler().mFloorItems.Values.ToArray();
RoomItem[] wallItems = CurrentLoadingRoom.GetRoomItemHandler().mWallItems.Values.ToArray();
Response.Init(Outgoing.SerializeFloorItems);
if (CurrentLoadingRoom.Group != null)
{
if (CurrentLoadingRoom.Group.AdminOnlyDeco == 1)
{
Response.AppendInt32(CurrentLoadingRoom.Group.Admins.Count + 1); // count of owners
foreach (GroupUser User in CurrentLoadingRoom.Group.Admins.Values)
{
Response.AppendInt32(User.Id);
Response.AppendString(SilverwaveEnvironment.getHabboForId(User.Id).Username);
}
}
else
{
Response.AppendInt32(CurrentLoadingRoom.Group.Members.Count + 1); // count of owners
foreach (GroupUser User in CurrentLoadingRoom.Group.Members.Values)
{
Response.AppendInt32(User.Id);
Response.AppendString(SilverwaveEnvironment.getHabboForId(User.Id).Username);
}
}
Response.AppendInt32(CurrentLoadingRoom.OwnerId);
Response.AppendString(CurrentLoadingRoom.Owner);
}
else
{
Response.AppendInt32(1); // count of owners
// serialize all owners
Response.AppendInt32(CurrentLoadingRoom.OwnerId);
Response.AppendString(CurrentLoadingRoom.Owner);
}
Response.AppendInt32(floorItems.Length);
foreach (RoomItem Item in floorItems)
Item.Serialize(Response);
response.appendResponse(GetResponse());
Response.Init(Outgoing.SerializeWallItems);
if (CurrentLoadingRoom.Group != null)
{
if (CurrentLoadingRoom.Group.AdminOnlyDeco == 1)
{
Response.AppendInt32(CurrentLoadingRoom.Group.Admins.Count + 1); // count of owners
foreach (GroupUser User in CurrentLoadingRoom.Group.Admins.Values)
{
Response.AppendInt32(User.Id);
Response.AppendString(SilverwaveEnvironment.getHabboForId(User.Id).Username);
}
}
else
{
Response.AppendInt32(CurrentLoadingRoom.Group.Members.Count + 1); // count of owners
foreach (GroupUser User in CurrentLoadingRoom.Group.Members.Values)
{
Response.AppendInt32(User.Id);
Response.AppendString(SilverwaveEnvironment.getHabboForId(User.Id).Username);
}
}
Response.AppendInt32(CurrentLoadingRoom.OwnerId);
Response.AppendString(CurrentLoadingRoom.Owner);
}
else
{
Response.AppendInt32(1); // count of owners
// serialize all owners
Response.AppendInt32(CurrentLoadingRoom.OwnerId);
Response.AppendString(CurrentLoadingRoom.Owner);
}
// serialize items
Response.AppendInt32(wallItems.Length);
foreach (RoomItem Item in wallItems)
Item.Serialize(Response);
response.appendResponse(GetResponse());
Array.Clear(floorItems, 0, floorItems.Length);
Array.Clear(wallItems, 0, wallItems.Length);
floorItems = null;
wallItems = null;
CurrentLoadingRoom.GetRoomUserManager().AddUserToRoom(Session, false);
//this.SerializeRoomInformation(CurrentLoadingRoom);
response.sendResponse();
if (SilverwaveEnvironment.GetUnixTimestamp() < Session.GetHabbo().FloodTime && Session.GetHabbo().FloodTime != 0)
{
ServerMessage Packet = new ServerMessage(Outgoing.FloodFilter);
Packet.AppendInt32(Session.GetHabbo().FloodTime - SilverwaveEnvironment.GetUnixTimestamp());
Session.SendMessage(Packet);
}
}
internal void RequestFloorItems()
{
}
internal void RequestWallItems()
{
}
internal void SaveBranding()
{
uint ItemId = Request.PopWiredUInt();
uint Data = Request.PopWiredUInt();
string BrandData = "state" + Convert.ToChar(9) + "0";
for (int i = 1; i <= Data; i++)
{
BrandData = BrandData + Convert.ToChar(9) + Request.PopFixedString();
}
Room Room = Session.GetHabbo().CurrentRoom;
RoomItem Item = Room.GetRoomItemHandler().GetItem(ItemId);
Item.ExtraData = BrandData;
Room.GetRoomItemHandler().SetFloorItem(Session, Item, Item.GetX, Item.GetY, Item.Rot, false, false, true);
}
internal void OnRoomUserAdd()
{
if (Session == null || GetResponse() == null)
return;
QueuedServerMessage response = new QueuedServerMessage(Session.GetConnection());
List<RoomUser> UsersToDisplay = new List<RoomUser>();
if (CurrentLoadingRoom == null || CurrentLoadingRoom.GetRoomUserManager() == null || CurrentLoadingRoom.GetRoomUserManager().UserList == null)
return;
foreach (RoomUser User in CurrentLoadingRoom.GetRoomUserManager().UserList.Values)
{
if (User == null || User.IsSpectator)
continue;
UsersToDisplay.Add(User);
}
Response.Init(Outgoing.SetRoomUser);
Response.AppendInt32(UsersToDisplay.Count);
foreach (RoomUser User in UsersToDisplay)
{
User.Serialize(Response, CurrentLoadingRoom.GetGameMap().gotPublicPool);
}
response.appendResponse(GetResponse());
response.appendResponse(RoomFloorAndWallComposer(CurrentLoadingRoom));
response.appendResponse(GetResponse());
Response.Init(Outgoing.ValidRoom);
Response.AppendBoolean(true);
Response.AppendInt32(CurrentLoadingRoom.RoomId);
Response.AppendBoolean(CurrentLoadingRoom.CheckRights(Session, true));
response.appendResponse(GetResponse());
//DataTable Table;
//using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
//{
//dbClient.setQuery("SELECT user_id FROM room_rights WHERE room_id=" + CurrentLoadingRoom.RoomData.Id);
//Table = dbClient.getTable();
//}
/*GetResponse().Init(Outgoing.GetPowerList);
GetResponse().AppendUInt(CurrentLoadingRoom.RoomData.Id);
GetResponse().AppendInt32(Table.Rows.Count);
foreach (DataRow i in Table.Rows)
{
Habbo xUser = SilverwaveEnvironment.getHabboForId((uint)i[0]);
GetResponse().AppendUInt(xUser.Id);
GetResponse().AppendString(xUser.Username);
}
//response.appendResponse(GetResponse());*/
foreach (uint i in CurrentLoadingRoom.UsersWithRights)
{
Habbo xUser = SilverwaveEnvironment.getHabboForId(i);
if (xUser != null)
{
GetResponse().Init(Outgoing.GivePowers);
GetResponse().AppendInt32(CurrentLoadingRoom.RoomId);
GetResponse().AppendInt32(xUser.Id);
GetResponse().AppendString(xUser.Username);
response.appendResponse(GetResponse());
}
}
ServerMessage Updates = CurrentLoadingRoom.GetRoomUserManager().SerializeStatusUpdates(true);
if (Updates != null)
response.appendResponse(Updates);
if (CurrentLoadingRoom.Event != null)
{
SilverwaveEnvironment.GetGame().GetRoomEvents().SerializeEventInfo(CurrentLoadingRoom.RoomId);
}
foreach (RoomUser User in CurrentLoadingRoom.GetRoomUserManager().UserList.Values)
{
if (User == null || User.IsSpectator)
continue;
if (User.IsBot)
{
if (User.BotData.DanceId > 0)
{
Response.Init(Outgoing.Dance);
Response.AppendInt32(User.VirtualId);
Response.AppendInt32(User.BotData.DanceId);
response.appendResponse(GetResponse());
}
}
else
{
if (User.IsDancing)
{
Response.Init(Outgoing.Dance);
Response.AppendInt32(User.VirtualId);
Response.AppendInt32(User.DanceId);
response.appendResponse(GetResponse());
}
}
if (User.IsAsleep)
{
response.appendResponse(new SleepComposer(User, true));
}
if (User.CarryItemID > 0 && User.CarryTimer > 0)
{
Response.Init(Outgoing.ApplyCarryItem);
Response.AppendInt32(User.VirtualId);
Response.AppendInt32(User.CarryTimer);
response.appendResponse(GetResponse());
}
if (!User.IsBot)
{
try
{
if (User != null && User.GetClient() != null && User.GetClient().GetHabbo() != null)
{
if (User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent() != null && User.CurrentEffect >= 1)
{
Response.Init(Outgoing.ApplyEffects);
Response.AppendInt32(User.VirtualId);
Response.AppendInt32(User.CurrentEffect);
Response.AppendInt32(0);
response.appendResponse(GetResponse());
}
ServerMessage RoomUpdate = new ServerMessage(Outgoing.UpdateUserInformation);
RoomUpdate.AppendInt32(User.VirtualId);
RoomUpdate.AppendString(User.GetClient().GetHabbo().Look);
RoomUpdate.AppendString(User.GetClient().GetHabbo().Gender.ToLower());
RoomUpdate.AppendString(User.GetClient().GetHabbo().Motto);
RoomUpdate.AppendInt32(User.GetClient().GetHabbo().AchievementPoints);
if(CurrentLoadingRoom != null)
CurrentLoadingRoom.SendMessage(RoomUpdate);
}
}
catch (Exception e) { Logging.HandleException(e, "Rooms.SendRoomData3"); }
}
}
response.sendResponse();
CurrentLoadingRoom = null;
}
internal void enterOnRoom()
{
uint Id = Request.PopWiredUInt();
String Password = Request.PopFixedString();
this.PrepareRoomForUser(Id, Password);
}
internal void PrepareRoomForUser(uint Id, string Password)
{
ClearRoomLoading();
QueuedServerMessage response = new QueuedServerMessage(Session.GetConnection());
if (Session == null)
return;
if (SilverwaveEnvironment.ShutdownStarted)
{
Session.SendNotif(LanguageLocale.GetValue("shutdown.alert"));
return;
}
if (Session.GetHabbo().InRoom)
{
Room OldRoom = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (OldRoom != null)
{
if(OldRoom.GetRoomUserManager() != null)
OldRoom.GetRoomUserManager().RemoveUserFromRoom(Session, false, false);
}
}
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().LoadRoom(Id);
if (Room == null)
return;
if (Room.UserCount >= Room.UsersMax && !Session.GetHabbo().HasFuse("fuse_enter_full_rooms"))
{
if (Session.GetHabbo().Id != Room.OwnerId)
{
// This rom is full!!
ServerMessage msg = new ServerMessage(Outgoing.RoomErrorToEnter);
msg.AppendInt32(1);
//Session.SendMessage(msg);
ServerMessage msg2 = new ServerMessage(Outgoing.OutOfRoom);
Session.SendMessage(msg2);
return;
}
}
if (Room == null || Session == null || Session.GetHabbo() == null)
return;
if (Session.GetHabbo().IsTeleporting && Session.GetHabbo().TeleportingRoomID != Id)
return;
Session.GetHabbo().LoadingRoom = Id;
CurrentLoadingRoom = Room;
if (!Session.GetHabbo().HasFuse("fuse_enter_any_room") && Room.UserIsBanned(Session.GetHabbo().Id))
{
if (Room.HasBanExpired(Session.GetHabbo().Id))
{
Room.RemoveBan(Session.GetHabbo().Id);
}
else
{
// You are banned of this room!
// C`PA
// Response.Init(Outgoing.RoomErrorToEnter);
//Response.AppendInt32(4);
//response.appendResponse(GetResponse());
Session.SendNotif("You are banned from this room");
Response.Init(Outgoing.OutOfRoom);
response.appendResponse(GetResponse());
response.sendResponse();
return;
}
}
Response.Init(Outgoing.PrepareRoomForUsers);
response.appendResponse(GetResponse());
if (!Session.GetHabbo().HasFuse("fuse_enter_any_room") && !Room.CheckRights(Session, true, true) && !Session.GetHabbo().IsTeleporting && !Session.GetHabbo().IsHopping)
{
if (Room.State == 1)
{
if (Room.UserCount == 0)
{
Response.Init(Outgoing.DoorBellNoPerson);
response.appendResponse(GetResponse());
}
else
{
Response.Init(Outgoing.Doorbell);
Response.AppendString("");
response.appendResponse(GetResponse());
ServerMessage RingMessage = new ServerMessage(Outgoing.Doorbell);
RingMessage.AppendString(Session.GetHabbo().Username);
Room.SendMessageToUsersWithRights(RingMessage);
}
response.sendResponse();
return;
}
else if (Room.State == 2)
{
if (Password.ToLower() != Room.Password.ToLower())
{
Response.Init(Outgoing.OutOfRoom);
response.appendResponse(GetResponse());
response.sendResponse();
return;
}
}
}
Session.GetHabbo().LoadingChecksPassed = true;
response.addBytes(LoadRoomForUser().getPacket);
//LoadRoomForUser();
response.sendResponse();
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
dbClient.runFastQuery("INSERT INTO user_roomvisits (user_id,room_id,entry_timestamp,exit_timestamp,hour,minute) VALUES ('" + Session.GetHabbo().Id + "','" + Id + "','" + SilverwaveEnvironment.GetUnixTimestamp() + "','0','" + DateTime.Now.Hour + "','" + DateTime.Now.Minute + "');" +
"UPDATE user_stats SET RoomVisits = RoomVisits + 1 WHERE id = " + Session.GetHabbo().Id);
}
internal void ReqLoadRoomForUser()
{
LoadRoomForUser().sendResponse();
}
internal QueuedServerMessage LoadRoomForUser()
{
Room Room = CurrentLoadingRoom;
QueuedServerMessage response = new QueuedServerMessage(Session.GetConnection());
if (Room == null || !Session.GetHabbo().LoadingChecksPassed)
return response;
if (Session.GetHabbo().FavouriteGroup > 0)
{
if (CurrentLoadingRoom.Group != null && !(CurrentLoadingRoom.LoadedGroups.ContainsKey(CurrentLoadingRoom.Group.Id)))
CurrentLoadingRoom.LoadedGroups.Add(CurrentLoadingRoom.Group.Id, CurrentLoadingRoom.Group.Badge);
if (!CurrentLoadingRoom.LoadedGroups.ContainsKey(Session.GetHabbo().FavouriteGroup))
{
if (SilverwaveEnvironment.GetGame().GetGroupManager().GetGroup(Session.GetHabbo().FavouriteGroup) != null)
CurrentLoadingRoom.LoadedGroups.Add(Session.GetHabbo().FavouriteGroup, SilverwaveEnvironment.GetGame().GetGroupManager().GetGroup(Session.GetHabbo().FavouriteGroup).Badge);
}
}
Response.Init(Outgoing.SerializeRoomBadges);
Response.AppendInt32(CurrentLoadingRoom.LoadedGroups.Count);
foreach (KeyValuePair<uint, string> Group in CurrentLoadingRoom.LoadedGroups)
{
Response.AppendInt32(Group.Key);
Response.AppendString(Group.Value);
}
response.appendResponse(GetResponse());
Response.Init(Outgoing.InitialRoomInformation);
Response.AppendString(Room.ModelName);
Response.AppendInt32(Room.RoomId);
response.appendResponse(GetResponse());
if (Session.GetHabbo().SpectatorMode)
{
Response.Init(Outgoing.SpectatorMode);
response.appendResponse(GetResponse());
}
if (Room.Wallpaper != "0.0")
{
Response.Init(Outgoing.RoomDecoration);
Response.AppendString("wallpaper");
Response.AppendString(Room.Wallpaper);
response.appendResponse(GetResponse());
}
if (Room.Floor != "0.0")
{
Response.Init(Outgoing.RoomDecoration);
Response.AppendString("floor");
Response.AppendString(Room.Floor);
response.appendResponse(GetResponse());
}
Response.Init(Outgoing.RoomDecoration);
Response.AppendString("landscape");
Response.AppendString(Room.Landscape);
response.appendResponse(GetResponse());
if (Room.CheckRights(Session, true))
{
Response.Init(Outgoing.RoomRightsLevel);
Response.AppendInt32(4);
response.appendResponse(GetResponse());
Response.Init(Outgoing.HasOwnerRights);
response.appendResponse(GetResponse());
}
else if (Room.CheckRights(Session))
{
Response.Init(Outgoing.RoomRightsLevel);
Response.AppendInt32(1);
response.appendResponse(GetResponse());
}
else
{
Response.Init(Outgoing.RoomRightsLevel);
Response.AppendInt32(0);
response.appendResponse(GetResponse());
}
Response.Init(Outgoing.RateRoom);
Response.AppendInt32(Room.Score);
Response.AppendBoolean(!(Session.GetHabbo().RatedRooms.Contains(Room.RoomId) || Room.CheckRights(Session, true)));
response.appendResponse(GetResponse());
return response;
}
internal void ClearRoomLoading()
{
Session.GetHabbo().LoadingRoom = 0;
Session.GetHabbo().LoadingChecksPassed = false;
}
internal void Talk()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null)
{
return;
}
int color = Request.PopWiredInt32();
User.Chat(Session, Request.PopFixedString(), false, color, Request.PopWiredInt32());
}
internal void Shout()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null)
{
return;
}
int color = Request.PopWiredInt32();
User.Chat(Session, Request.PopFixedString(), true, Request.PopWiredInt32());
}
internal void Whisper()
{
if (Session == null || Session.GetHabbo() == null)
return;
Room Room = Session.GetHabbo().CurrentRoom;
if (Room == null)
{
return;
}
if (Room.MutedUsers.ContainsKey(Session.GetHabbo().Id))
{
if (Room.MutedUsers[Session.GetHabbo().Id] > SilverwaveEnvironment.GetUnixTimestamp())
{
Session.SendNotif("You are muted. You cannot whisper.");
return;
}
else
{
Room.MutedUsers.Remove(Session.GetHabbo().Id);
}
}
if (Session.GetHabbo().Muted)
{
Session.SendNotif(LanguageLocale.GetValue("user.ismuted"));
return;
}
if (Room.RoomMuted)
return;
string Params = Request.PopFixedString();
string ToUser = Params.Split(' ')[0];
string Message = Params.Substring(ToUser.Length + 1);
int Bubble = Request.PopWiredInt32();
Message = LanguageLocale.FilterSwearwords(Message);
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
RoomUser User2 = Room.GetRoomUserManager().GetRoomUserByHabbo(ToUser);
ServerMessage TellMsg = new ServerMessage();
//TellMsg.Init(Outgoing.Whisp);
TellMsg.AppendInt32(User.VirtualId);
TellMsg.AppendString(Message);
TellMsg.AppendInt32(0);
//if (Bubble > 0 && !Session.GetHabbo().GetSubscriptionManager().HasSubscription && Session.GetHabbo().Rank < 4)
if (Bubble > 0 && Session.GetHabbo().Rank < 2 && !Session.GetHabbo().VIP)
{
Session.SendNotif("To use coloured chat you must have VIP");
TellMsg.AppendInt32(0);
}
else
{
if (new[] { 21, 22, 20, 19, 18, 17, 16, 10, 9 }.Contains(Bubble) && Session.GetHabbo().Rank < 8)
TellMsg.AppendInt32(0);
else
TellMsg.AppendInt32(Bubble);
}
TellMsg.AppendInt32(0);
TellMsg.AppendInt32(-1);
if (User != null && !User.IsBot)
{
User.GetClient().SendMessage(TellMsg);
if (User2 != null && !User2.IsBot && User2.GetClient() != null && User2.GetClient().GetHabbo() !=null)
{
if(Room.IsWorkingChat)
Room.Added.Add(new Chatlog(User.HabboId, "<Whisper to " + User2.GetClient().GetHabbo().Username + ">: " + Message, SilverwaveEnvironment.GetUnixTimestamp()));
else
Room.RoomChat.Add(new Chatlog(User.HabboId, "<Whisper to " + User2.GetClient().GetHabbo().Username + ">: " + Message, SilverwaveEnvironment.GetUnixTimestamp()));
}
}
User.UnIdle();
if (User2 != null && !User2.IsBot && User2.userID != User.userID)
{
if (User2.GetClient().GetHabbo().DisableWhisper)
{
User.GetClient().SendWhisper("This user does not allow whispers");
return;
}
else
{
if (!User2.GetClient().GetHabbo().MutedUsers.Contains(Session.GetHabbo().Id))
User2.GetClient().SendMessage(TellMsg);
}
}
TimeSpan SinceLastMessage = DateTime.Now - FloodTime;
if (SinceLastMessage.Seconds > 4)
FloodCount = 0;
if (SinceLastMessage.Seconds < 4 && FloodCount > 5 && Session.GetHabbo().Rank < 5)
{
Session.GetHabbo().FloodTime = SilverwaveEnvironment.GetUnixTimestamp() + 30;
ServerMessage Packet = new ServerMessage(Outgoing.FloodFilter);
Packet.AppendInt32(30); //Blocked for 30sec
User.GetClient().SendMessage(Packet);
return;
}
FloodTime = DateTime.Now;
FloodCount++;
List<RoomUser> ToNotify = Room.GetRoomUserManager().GetRoomUserByRank(4);
if (ToNotify.Count > 0)
{
TellMsg = new ServerMessage();
foreach (RoomUser user in ToNotify)
{
if (user != null)
{
if (user.HabboId != User2.HabboId && user.HabboId != User.HabboId && user.GetClient() != null)
{
user.GetClient().SendMessage(TellMsg);
}
}
}
}
}
internal void Move()
{
Room Room = Session.GetHabbo().CurrentRoom;
RoomUser User;
if (Room == null)
{
return;
}
User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null || !User.CanWalk)
{
return;
}
int MoveX = Request.PopWiredInt32();
int MoveY = Request.PopWiredInt32();
if (MoveX == User.X && MoveY == User.Y)
{
return;
}
User.MoveTo(MoveX, MoveY);
}
internal void CanCreateRoom()
{
Response.Init(Outgoing.CanCreateRoom);
Response.AppendInt32((Session.GetHabbo().UsersRooms.Count >= 150) ? 1 : 0);
Response.AppendInt32(150); // Limit
SendResponse();
}
internal void CreateRoom()
{
string RoomName = Request.PopFixedString();
string ModelName = Request.PopFixedString();
//string RoomState = Request.PopFixedString(); // unused, room open by default on creation. may be added in later build of Habbo?
RoomData NewRoom = SilverwaveEnvironment.GetGame().GetRoomManager().CreateRoom(Session, RoomName, ModelName);
if (NewRoom != null)
{
Response.Init(Outgoing.OnCreateRoomInfo);
Response.AppendInt32(NewRoom.Id);
Response.AppendString(NewRoom.Name);
SendResponse();
}
}
internal void GetRoomEditData()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Convert.ToUInt32(Request.PopWiredInt32()));
GetResponse().Init(Outgoing.GetRoomDataForEdit);
GetResponse().AppendInt32(Room.RoomId);
GetResponse().AppendString(Room.Name);
GetResponse().AppendString(Room.Description);
GetResponse().AppendInt32(Room.State);
GetResponse().AppendInt32(Room.Category);
GetResponse().AppendInt32(Room.UsersMax);
GetResponse().AppendInt32(((Room.RoomData.Model.MapSizeX * Room.RoomData.Model.MapSizeY) > 100) ? 50 : 25); // Max can be elected
GetResponse().AppendInt32(Room.TagCount);
foreach (string Tag in Room.Tags.ToArray())
{
GetResponse().AppendString(Tag);
}
GetResponse().AppendInt32(Room.CanTradeInRoom ? 2 : 0); // trade
GetResponse().AppendInt32(Room.AllowPets); // allows pets in room - pet system lacking, so always off
GetResponse().AppendInt32(Room.AllowPetsEating); // allows pets to eat your food - pet system lacking, so always off
GetResponse().AppendInt32(Room.AllowWalkthrough);
GetResponse().AppendInt32(Room.Hidewall);
GetResponse().AppendInt32(Room.WallThickness);
GetResponse().AppendInt32(Room.FloorThickness);
GetResponse().AppendInt32(Room.ChatType);
GetResponse().AppendInt32(Room.ChatBalloon);
GetResponse().AppendInt32(Room.ChatSpeed);
GetResponse().AppendInt32(Room.ChatMaxDistance);
GetResponse().AppendInt32(Room.ChatFloodProtection);
GetResponse().AppendInt32(Room.WhoCanMute);
GetResponse().AppendInt32(Room.WhoCanKick);
GetResponse().AppendInt32(Room.WhoCanBan); // who can ban
SendResponse();
}
internal void RoomSettingsOkComposer(uint roomId)
{
GetResponse().Init(Outgoing.RoomSettingsOkComposer);
GetResponse().AppendInt32(roomId);
SendResponse();
}
internal void RoomUpdatedOkComposer(uint roomId)
{
GetResponse().Init(Outgoing.RoomUpdatedOkComposer);
GetResponse().AppendInt32(roomId);
SendResponse();
}
internal ServerMessage RoomFloorAndWallComposer(Room room)
{
//Habbo owner = SilverwaveEnvironment.getHabboForId((uint)room.OwnerId);
//if (owner.GetSubscriptionManager().HasSubscription)
{
ServerMessage m = new ServerMessage(Outgoing.RoomFloorAndWallComposer);
m.AppendBoolean(room.Hidewall == 1);
m.AppendInt32(room.WallThickness);
m.AppendInt32(room.FloorThickness);
return m;
}
}
internal ServerMessage SerializeRoomChatOption(Room room)
{
ServerMessage m = new ServerMessage(Outgoing.RoomChatOptionsComposer);
m.AppendInt32(room.ChatType); //ChatMode, ChatSize, ChatSpeed, HearingDistance, ExtraFlood is the order.
m.AppendInt32(room.ChatBalloon);
m.AppendInt32(room.ChatSpeed);
m.AppendInt32(room.ChatMaxDistance);
m.AppendInt32(room.ChatFloodProtection);
return m;
}
internal void ParseRoomDataInformation()
{
uint roomId = Request.PopWiredUInt();
int backward = Request.PopWiredInt32();
int forward = Request.PopWiredInt32();
Room r = SilverwaveEnvironment.GetGame().GetRoomManager().LoadRoom(roomId);
if ((backward == 0) && (forward == 1))
{
SerializeRoomInformation(r, false);
//this.Session.GetHabbo().RoomFowards.Add(roomId);
}
else if ((backward == 1) && (forward == 0))
{
SerializeRoomInformation(r, true);
//this.Session.GetHabbo().RoomFowards.Remove(roomId);
}
else
SerializeRoomInformation(r,true);
}
internal void SerializeRoomInformation(Room Room, bool show)//ill debug it, second,
{
GetResponse().Init(Outgoing.RoomData);
GetResponse().AppendBoolean(show);
GetResponse().AppendInt32(Room.RoomId);
GetResponse().AppendString(Room.Name);
GetResponse().AppendBoolean(Room.Type == "private");
GetResponse().AppendInt32(Room.OwnerId);
GetResponse().AppendString(Room.Owner);
GetResponse().AppendInt32(Room.State);
GetResponse().AppendInt32(Room.UsersNow);
GetResponse().AppendInt32(Room.UsersMax);
GetResponse().AppendString(Room.Description);
GetResponse().AppendInt32(0); //unused, let be 0
GetResponse().AppendInt32(Room.CanTradeInRoom ? 2 : 0);
GetResponse().AppendInt32(Room.Score);
GetResponse().AppendInt32(0); // visible for rank > x
GetResponse().AppendInt32(Room.Category);
if(Room.GroupId > 0)
{
GetResponse().AppendInt32(Room.Group.Id);
GetResponse().AppendString(Room.Group.Name);
GetResponse().AppendString(Room.Group.Badge);
Response.AppendString("");
}
else
{
GetResponse().AppendInt32(0);
GetResponse().AppendString("");
GetResponse().AppendString("");
GetResponse().AppendString("");
}
GetResponse().AppendInt32(Room.TagCount);
foreach (string Tag in Room.Tags.ToArray())
{
GetResponse().AppendString(Tag);
}
//GUESTROOM THUMBNAIL^? disabled
GetResponse().AppendInt32(0); //
GetResponse().AppendInt32(0); //
GetResponse().AppendInt32(0);
//GetResponse().AppendInt32(0); loop
//GUESROOM THUBNAILS ^
GetResponse().AppendBoolean(Room.AllowPets==1);
GetResponse().AppendBoolean(Room.AllowPetsEating==1);
GetResponse().AppendString(""); // EVENT related stuff
GetResponse().AppendString(""); // EVENT related stuff
GetResponse().AppendInt32(0); // EVENT Time Left, in minutes
GetResponse().AppendBoolean(!(Room.RoomId==this.Session.GetHabbo().CurrentRoomId)); //forwarding
GetResponse().AppendBoolean(false);
GetResponse().AppendBoolean(false);
GetResponse().AppendBoolean(false);
GetResponse().AppendInt32(Room.WhoCanMute); // who can mute
GetResponse().AppendInt32(Room.WhoCanKick); // who can kick
GetResponse().AppendInt32(Room.WhoCanBan); // who can ban
GetResponse().AppendBoolean(Room.CheckRights(Session, true));
GetResponse().AppendInt32(Room.ChatType); //ChatMode, ChatSize, ChatSpeed, HearingDistance, ExtraFlood is the order.
GetResponse().AppendInt32(Room.ChatBalloon);
GetResponse().AppendInt32(Room.ChatSpeed);
GetResponse().AppendInt32(Room.ChatMaxDistance);
GetResponse().AppendInt32(Room.ChatFloodProtection);
SendResponse();
if (Room.Group == null)
{
DataTable Table;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT user_id FROM room_rights WHERE room_id=" + Room.RoomId);
Table = dbClient.getTable();
}
Response.Init(Outgoing.LoadRoomRightsList);
GetResponse().AppendInt32(Room.RoomData.Id);
GetResponse().AppendInt32(Table.Rows.Count);
foreach (DataRow i in Table.Rows)
{
Habbo xUser = SilverwaveEnvironment.getHabboForId((uint)i[0]);
if (xUser != null)
{
GetResponse().AppendInt32(xUser.Id);
GetResponse().AppendString(xUser.Username);
}
}
SendResponse();
}
}
internal void SaveRoomData()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
RoomData oldRoomData = Room.RoomData;
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
int Id = Request.PopWiredInt32();
string Name = Request.PopFixedString();
string Description = Request.PopFixedString();
int State = Request.PopWiredInt32();
string Password = Request.PopFixedString();
int MaxUsers = Request.PopWiredInt32();
int CategoryId = Request.PopWiredInt32();
int TagCount = Request.PopWiredInt32();
List<string> Tags = new List<string>();
StringBuilder formattedTags = new StringBuilder();
for (int i = 0; i < TagCount; i++)
{
if (i > 0)
{
formattedTags.Append(",");
}
string tag = Request.PopFixedString().ToLower();
Tags.Add(tag);
formattedTags.Append(tag);
}
int undef = Request.PopWiredInt32(); //roommoderation ?
int AllowPets = Convert.ToInt32(SilverwaveEnvironment.BoolToEnum(Request.PopWiredBoolean()));
int AllowPetsEat = Convert.ToInt32(SilverwaveEnvironment.BoolToEnum(Request.PopWiredBoolean()));
int AllowWalkthrough = Convert.ToInt32(SilverwaveEnvironment.BoolToEnum(Request.PopWiredBoolean()));
int Hidewall = Convert.ToInt32(SilverwaveEnvironment.BoolToEnum(Request.PopWiredBoolean()));
int WallThickness = Request.PopWiredInt32();
int FloorThickness = Request.PopWiredInt32();
int WhoMute = Request.PopWiredInt32();
int WhoKick = Request.PopWiredInt32();
int WhoBan = Request.PopWiredInt32();
int ChatType = Request.PopWiredInt32();
int ChatBalloon = Request.PopWiredInt32();
int ChatSpeed = Request.PopWiredInt32();
int ChatMaxDistance = Request.PopWiredInt32();
int ChatFloodProtection = Request.PopWiredInt32();
if (WallThickness < -2 || WallThickness > 1)
WallThickness = 0;
if (FloorThickness < -2 || FloorThickness > 1)
FloorThickness = 0;
if (Name.Length < 1)
return;
if (State < 0 || State > 2)
return;
if (MaxUsers < 0)
{
return;
}
if (ChatMaxDistance > 99)
ChatMaxDistance = 99;
FlatCat FlatCat = SilverwaveEnvironment.GetGame().GetNavigator().GetFlatCat(CategoryId);
if (FlatCat == null)
{
return;
}
if (FlatCat.MinRank > Session.GetHabbo().Rank)
{
Session.SendNotif(LanguageLocale.GetValue("user.roomdata.rightserror"));
CategoryId = 0;
}
if (TagCount > 2)
{
return;
}
Room.AllowPets = AllowPets;
Room.AllowPetsEating = AllowPetsEat;
Room.AllowWalkthrough = AllowWalkthrough;
Room.Hidewall = Hidewall;
Room.RoomData.AllowPets = AllowPets;
Room.RoomData.AllowPetsEating = AllowPetsEat;
Room.RoomData.AllowWalkthrough = AllowWalkthrough;
Room.RoomData.Hidewall = Hidewall;
Room.Name = Name;
Room.State = State;
Room.Description = Description;
Room.Category = CategoryId;
Room.Password = Password;
Room.RoomData.Name = Name;
Room.RoomData.State = State;
Room.RoomData.Description = Description;
Room.RoomData.Category = CategoryId;
Room.RoomData.Password = Password;
Room.WhoCanBan = WhoBan;
Room.WhoCanKick = WhoKick;
Room.WhoCanMute = WhoMute;
Room.RoomData.WhoCanBan = WhoBan;
Room.RoomData.WhoCanKick = WhoKick;
Room.RoomData.WhoCanMute = WhoMute;
Room.ClearTags();
Room.AddTagRange(Tags);
Room.UsersMax = MaxUsers;
Room.RoomData.Tags.Clear();
Room.RoomData.Tags.AddRange(Tags);
Room.RoomData.UsersMax = MaxUsers;
Room.WallThickness = WallThickness;
Room.FloorThickness = FloorThickness;
Room.RoomData.WallThickness = WallThickness;
Room.RoomData.FloorThickness = FloorThickness;
Room.ChatType = ChatType;
Room.ChatBalloon = ChatBalloon;
Room.ChatSpeed = ChatSpeed;
Room.ChatMaxDistance = ChatMaxDistance;
Room.ChatFloodProtection = ChatFloodProtection;
Room.RoomData.ChatType = ChatType;
Room.RoomData.ChatBalloon = ChatBalloon;
Room.RoomData.ChatSpeed = ChatSpeed;
Room.RoomData.ChatMaxDistance = ChatMaxDistance;
Room.RoomData.ChatFloodProtection = ChatFloodProtection;
this.RoomSettingsOkComposer(Room.RoomId);
this.RoomUpdatedOkComposer(Room.RoomId);
Session.GetHabbo().CurrentRoom.SendMessage(RoomFloorAndWallComposer(Room));
Session.GetHabbo().CurrentRoom.SendMessage(SerializeRoomChatOption(Room));
Room.RoomData.SerializeRoomData(Response, false, Session, true);
}
internal void GetBannedUsers()
{
uint RoomId = Request.PopWiredUInt();
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(RoomId);
if (Room == null)
return;
List<uint> Bans = Room.BannedUsers();
Response.Init(Outgoing.GetRoomBannedUsers);
Response.AppendInt32(RoomId);
Response.AppendInt32(Bans.Count); // Count
foreach (uint Ban in Bans)
{
Response.AppendInt32(Ban); // Id
if (SilverwaveEnvironment.getHabboForId(Ban) != null)
Response.AppendString(SilverwaveEnvironment.getHabboForId(Ban).Username); // Name
else
Response.AppendString("Undefined");
}
SendResponse();
}
internal void UsersWithRights()
{
Response.Init(Outgoing.LoadRoomRightsList);
Response.AppendInt32(Session.GetHabbo().CurrentRoom.RoomId);
Response.AppendInt32(Session.GetHabbo().CurrentRoom.UsersWithRights.Count);
foreach (uint User in Session.GetHabbo().CurrentRoom.UsersWithRights)
{
Habbo Hab = SilverwaveEnvironment.getHabboForId(User);
Response.AppendInt32(User);
Response.AppendString((Hab == null) ? "Undefined" : Hab.Username);
}
SendResponse();
}
internal void UnbanUser()
{
uint UserId = Request.PopWiredUInt();
uint RoomId = Request.PopWiredUInt();
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(RoomId);
if (Room == null)
return;
Room.Unban(UserId);
Response.Init(Outgoing.UnbanUser);
Response.AppendInt32(RoomId);
Response.AppendInt32(UserId);
SendResponse();
}
internal void GiveRights()
{
uint UserId = Request.PopWiredUInt();
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
return;
RoomUser RoomUser = Room.GetRoomUserManager().GetRoomUserByHabbo(UserId);
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
if (Room.UsersWithRights.Contains(UserId))
{
Session.SendNotif(LanguageLocale.GetValue("user.giverights.error"));
return;
}
Room.UsersWithRights.Add(UserId);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("INSERT INTO room_rights (room_id,user_id) VALUES (" + Room.RoomId + "," + UserId + ")");
}
if (RoomUser != null && !RoomUser.IsBot)
{
Response.Init(Outgoing.GivePowers);
Response.AppendInt32(Room.RoomId);
Response.AppendInt32(RoomUser.GetClient().GetHabbo().Id);
Response.AppendString(RoomUser.GetClient().GetHabbo().Username);
SendResponse();
//RoomUser.AddStatus("flatctrl", "");
RoomUser.UpdateNeeded = true;
if (RoomUser != null && !RoomUser.IsBot)
{
RoomUser.AddStatus("flatctrl 1", "");
Response.Init(Outgoing.RoomRightsLevel);
Response.AppendInt32(1);
RoomUser.GetClient().SendMessage(GetResponse());
}
}
UsersWithRights();
}
internal void TakeRights()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
StringBuilder DeleteParams = new StringBuilder();
int Amount = Request.PopWiredInt32();
for (int i = 0; i < Amount; i++)
{
if (i > 0)
{
DeleteParams.Append(" OR ");
}
uint UserId = Request.PopWiredUInt();
if (Room.UsersWithRights.Contains(UserId))
Room.UsersWithRights.Remove(UserId);
DeleteParams.Append("room_id = '" + Room.RoomId + "' AND user_id = '" + UserId + "'");
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(UserId);
if (User != null && !User.IsBot)
{
Response.Init(Outgoing.RoomRightsLevel);
Response.AppendInt32(0);
User.GetClient().SendMessage(GetResponse());
User.RemoveStatus("flatctrl 1");
User.UpdateNeeded = true;
}
// GhntX]hqu@U
Response.Init(Outgoing.RemovePowers);
Response.AppendInt32(Room.RoomId);
Response.AppendInt32(UserId);
SendResponse();
}
UsersWithRights();
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("DELETE FROM room_rights WHERE " + DeleteParams.ToString());
}
}
internal void TakeAllRights()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
DataTable Ta;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT user_id FROM room_rights WHERE room_id=" + Room.RoomId);
Ta = dbClient.getTable();
}
foreach (DataRow Row in Ta.Rows)
{
uint UserId = (uint)Row[0];
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(UserId);
Response.Init(Outgoing.RemovePowers);
Response.AppendInt32(Room.RoomId);
Response.AppendInt32(UserId);
SendResponse();
if (User != null && !User.IsBot)
{
Response.Init(Outgoing.RoomRightsLevel);
Response.AppendInt32(0);
User.GetClient().SendMessage(GetResponse());
User.RemoveStatus("flatctrl 1");
User.UpdateNeeded = true;
}
}
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("DELETE FROM room_rights WHERE room_id = " + Room.RoomId);
}
Room.UsersWithRights.Clear();
UsersWithRights();
}
internal void KickUser()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
if (!Room.CheckRights(Session) && Room.WhoCanKick != 2)
{
return; // insufficient permissions
}
uint UserId = Request.PopWiredUInt();
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(UserId);
if (User == null || User.IsBot)
{
return;
}
if (Room.CheckRights(User.GetClient(), true) || User.GetClient().GetHabbo().HasFuse("fuse_mod") || User.GetClient().GetHabbo().HasFuse("fuse_no_kick"))
{
return; // can't kick room owner or mods!
}
Room.GetRoomUserManager().RemoveUserFromRoom(User.GetClient(), true, true);
User.GetClient().CurrentRoomUserID = -1;
}
internal void BanUser()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || ((Room.WhoCanBan == 0 && !Room.CheckRights(Session, true)) || (Room.WhoCanBan == 1 && !Room.CheckRights(Session))))
{
return; // insufficient permissions
}
int UserId = Request.PopWiredInt32();
uint RoomId = Request.PopWiredUInt();
string R = Request.PopFixedString();
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Convert.ToUInt32(UserId));
if (User == null || User.IsBot)
{
return;
}
if (User.GetClient().GetHabbo().HasFuse("fuse_mod") || User.GetClient().GetHabbo().HasFuse("fuse_no_kick"))
{
return;
}
long Time = 0;
if (R.ToLower().Contains("hour"))
Time = 3600;
else if (R.ToLower().Contains("day"))
Time = 86400;
else if (R.ToLower().Contains("perm"))
Time = 788922000;
Room.AddBan(UserId, Time);
Room.GetRoomUserManager().RemoveUserFromRoom(User.GetClient(), true, true);
Session.CurrentRoomUserID = -1;
}
internal void SetHomeRoom()
{
uint RoomId = Request.PopWiredUInt();
RoomData Data = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateRoomData(RoomId);
if (RoomId != 0)
{
if (Data == null)
{
return;
}
}
Session.GetHabbo().HomeRoom = RoomId;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE users SET home_room = " + RoomId + " WHERE id = " + Session.GetHabbo().Id);
}
Response.Init(Outgoing.HomeRoom);
Response.AppendInt32(RoomId);
Response.AppendInt32(RoomId);
SendResponse();
}
internal void DeleteRoom()
{
uint RoomId = Request.PopWiredUInt();
if (Session == null || Session.GetHabbo() == null || Session.GetHabbo().UsersRooms == null)
return;
//TargetRoom = Session.GetHabbo().CurrentRoom; ;
Room TargetRoom = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(RoomId);
if (TargetRoom == null)
return;
if (TargetRoom.Owner == Session.GetHabbo().Username || Session.GetHabbo().Rank > 6)
{
if (this.Session.GetHabbo().GetInventoryComponent() != null)
{
this.Session.GetHabbo().GetInventoryComponent().AddItemArray(TargetRoom.GetRoomItemHandler().RemoveAllFurniture(Session));
}
RoomData data = TargetRoom.RoomData;
SilverwaveEnvironment.GetGame().GetRoomManager().UnloadRoom(TargetRoom);
SilverwaveEnvironment.GetGame().GetRoomManager().QueueVoteRemove(data);
if (data == null || Session == null)
{
return;
}
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("DELETE FROM rooms WHERE id = " + RoomId);
dbClient.runFastQuery("DELETE FROM user_favorites WHERE room_id = " + RoomId);
dbClient.runFastQuery("DELETE FROM items WHERE room_id = " + RoomId);
dbClient.runFastQuery("DELETE FROM room_rights WHERE room_id = " + RoomId);
dbClient.runFastQuery("UPDATE users SET home_room = '0' WHERE home_room = " + RoomId);
}
if (Session.GetHabbo().Rank > 5 && Session.GetHabbo().Username != data.Owner)
{
SilverwaveEnvironment.GetGame().GetModerationTool().LogStaffEntry(Session.GetHabbo().Username, data.Name, "Room deletion", string.Format("Deleted room ID {0}", data.Id));
}
RoomData removedRoom = (from p in Session.GetHabbo().UsersRooms
where p.Id == RoomId
select p).SingleOrDefault();
if (removedRoom != null)
Session.GetHabbo().UsersRooms.Remove(removedRoom);
}
}
internal void LookAt()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null)
{
return;
}
User.UnIdle();
int X = Request.PopWiredInt32();
int Y = Request.PopWiredInt32();
if (X == User.X && Y == User.Y)
{
return;
}
int Rot = Rotation.Calculate(User.X, User.Y, X, Y);
User.SetRot(Rot, false);
User.UpdateNeeded = true;
if (User.RidingHorse)
{
//RoomBot Horse = SilverwaveEnvironment.GetGame().GetBotManager().GetBot(User.HorseID);
RoomUser Horse = Session.GetHabbo().CurrentRoom.GetRoomUserManager().GetRoomUserByVirtualId(Convert.ToInt32(User.HorseID));
Horse.SetRot(Rot, false);
Horse.UpdateNeeded = true;
}
}
internal void StartTyping()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null)
{
return;
}
ServerMessage Message = new ServerMessage(Outgoing.TypingStatus);
Message.AppendInt32(User.VirtualId);
Message.AppendInt32(1);
Room.SendMessage(Message);
}
internal void StopTyping()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null)
{
return;
}
ServerMessage Message = new ServerMessage(Outgoing.TypingStatus);
Message.AppendInt32(User.VirtualId);
Message.AppendInt32(0);
Room.SendMessage(Message);
}
internal void IgnoreUser()
{
Room Room = Session.GetHabbo().CurrentRoom;
if (Room == null)
return;
String username = Request.PopFixedString();
Habbo user = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUsername(username).GetHabbo();
if (user == null)
return;
if (Session.GetHabbo().MutedUsers.Contains(user.Id) || user.Rank > 4)
return;
Session.GetHabbo().MutedUsers.Add(user.Id);
Response.Init(Outgoing.UpdateIgnoreStatus);
Response.AppendInt32(1);
Response.AppendString(username);
SendResponse();
}
internal void UnignoreUser()
{
Room Room = Session.GetHabbo().CurrentRoom;
if (Room == null)
return;
String username = Request.PopFixedString();
Habbo user = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUsername(username).GetHabbo();
if (user == null)
return;
if (!Session.GetHabbo().MutedUsers.Contains(user.Id))
return;
Session.GetHabbo().MutedUsers.Remove(user.Id);
Response.Init(Outgoing.UpdateIgnoreStatus);
Response.AppendInt32(3);
Response.AppendString(username);
SendResponse();
}
internal void CanCreateRoomEvent()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
Boolean Allow = true;
int ErrorCode = 0;
if (Room.State != 0)
{
Allow = false;
ErrorCode = 3;
}
//Response.Init(Outgoing.CanCreateEvent);
Response.AppendBoolean(Allow);
Response.AppendInt32(ErrorCode);
//SendResponse();
}
internal void Sign()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null)
{
return;
}
User.UnIdle();
int SignId = Request.PopWiredInt32();
User.AddStatus("sign", Convert.ToString(SignId));
User.UpdateNeeded = true;
User.SignTime = SilverwaveEnvironment.GetUnixTimestamp() + 5;
}
internal void GetUserTags()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Request.PopWiredUInt());
if (User == null || User.IsBot)
{
return;
}
Response.Init(Outgoing.GetUserTags);
Response.AppendInt32(User.GetClient().GetHabbo().Id);
Response.AppendInt32(User.GetClient().GetHabbo().Tags.Count);
foreach (string Tag in User.GetClient().GetHabbo().Tags)
{
Response.AppendString(Tag);
}
SendResponse();
}
internal void GetUserBadges()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Request.PopWiredUInt());
if (User == null || User.IsBot)
return;
if (User.GetClient() == null)
return;
Response.Init(Outgoing.GetUserBadges);
Response.AppendInt32(User.GetClient().GetHabbo().Id);
Response.AppendInt32(User.GetClient().GetHabbo().GetBadgeComponent().EquippedCount);
foreach (Badge Badge in User.GetClient().GetHabbo().GetBadgeComponent().BadgeList.Values)
{
if (Badge.Slot <= 0)
{
continue;
}
Response.AppendInt32(Badge.Slot);
Response.AppendString(Badge.Code);
}
SendResponse();
}
internal void RateRoom()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || Session.GetHabbo().RatedRooms.Contains(Room.RoomId) || Room.CheckRights(Session, true))
{
return;
}
int Rating = Request.PopWiredInt32();
switch (Rating)
{
case -1:
Room.Score--;
Room.RoomData.Score--;
break;
case 1:
Room.Score++;
Room.RoomData.Score++;
break;
default:
return;
}
SilverwaveEnvironment.GetGame().GetRoomManager().QueueVoteAdd(Room.RoomData);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE rooms SET score = " + Room.Score + " WHERE id = " + Room.RoomId);
}
Session.GetHabbo().RatedRooms.Add(Room.RoomId);
Response.Init(Outgoing.RateRoom);
Response.AppendInt32(Room.Score);
Response.AppendBoolean(Room.CheckRights(Session, true));
SendResponse();
}
internal void Dance()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null)
{
return;
}
User.UnIdle();
int DanceId = Request.PopWiredInt32();
if (DanceId < 0 || DanceId > 4)
{
DanceId = 0;
}
if (DanceId > 0 && User.CarryItemID > 0)
{
User.CarryItem(0);
}
User.DanceId = DanceId;
ServerMessage DanceMessage = new ServerMessage(Outgoing.Dance);
DanceMessage.AppendInt32(User.VirtualId);
DanceMessage.AppendInt32(DanceId);
Room.SendMessage(DanceMessage);
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.SOCIAL_DANCE);
if (Room.GetRoomUserManager().GetRoomUsers().Count > 19)
{
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.MASS_DANCE);
}
}
internal void AnswerDoorbell()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session))
{
return;
}
string Name = Request.PopFixedString();
bool Result = Request.PopWiredBoolean();
GameClient Client = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUsername(Name);
if (Client == null)
{
return;
}
if (Result)
{
Client.GetHabbo().LoadingChecksPassed = true;
Client.GetMessageHandler().Response.Init(Outgoing.ValidDoorBell);
Client.GetMessageHandler().Response.AppendString("");
Client.GetMessageHandler().SendResponse();
}
else
{
if (Client.GetHabbo().CurrentRoomId != Session.GetHabbo().CurrentRoomId)
{
Client.GetMessageHandler().Response.Init(Outgoing.DoorBellNoPerson);
Client.GetMessageHandler().Response.AppendString("");
Client.GetMessageHandler().SendResponse();
}
}
}
internal void ApplyRoomEffect()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
UserItem Item = Session.GetHabbo().GetInventoryComponent().GetItem(Request.PopWiredUInt());
if (Item == null)
{
return;
}
string type = "floor";
if (Item.GetBaseItem().Name.ToLower().Contains("wallpaper"))
{
type = "wallpaper";
}
else if (Item.GetBaseItem().Name.ToLower().Contains("landscape"))
{
type = "landscape";
}
switch (type)
{
case "floor":
Room.Floor = Item.ExtraData;
Room.RoomData.Floor = Item.ExtraData;
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.FURNI_DECORATION_FLOOR);
break;
case "wallpaper":
Room.Wallpaper = Item.ExtraData;
Room.RoomData.Wallpaper = Item.ExtraData;
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.FURNI_DECORATION_WALL);
break;
case "landscape":
Room.Landscape = Item.ExtraData;
Room.RoomData.Landscape = Item.ExtraData;
break;
}
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("UPDATE rooms SET " + type + " = @eXtradata WHERE id = " + Room.RoomId);
dbClient.addParameter("extradata", Item.ExtraData);
dbClient.runQuery();
dbClient.runFastQuery("DELETE FROM items WHERE id=" + Item.Id + " LIMIT 1");
}
Session.GetHabbo().GetInventoryComponent().RemoveItem(Item.Id, false);
ServerMessage Message = new ServerMessage(Outgoing.RoomDecoration);
Message.AppendString(type);
Message.AppendString(Item.ExtraData);
Room.SendMessage(Message);
}
internal void PlacePostIt()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session))
{
return;
}
uint itemId = Request.PopWiredUInt();
string locationData = Request.PopFixedString();
UserItem item = Session.GetHabbo().GetInventoryComponent().GetItem(itemId);
if (item == null || Room == null)
return;
try
{
//WallCoordinate coordinate = new WallCoordinate(":" + locationData.Split(':')[1]);
string WallPossition = WallPositionCheck(":" + locationData.Split(':')[1]);
RoomItem RoomItem = new RoomItem(item.Id, Room.RoomId, item.BaseItem, item.ExtraData, WallPossition, Room, Session.GetHabbo().Id, item.GroupId, item.GetBaseItem().FlatId);
if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem))
{
Session.GetHabbo().GetInventoryComponent().RemoveItem(itemId, true);
}
}
catch
{
Response.Init(516);
Response.AppendInt32(11);
SendResponse();
return;
}
}
internal void PlaceItem()
{
// AZ@J16 10 10 0
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
if (SilverwaveEnvironment.GetDBConfig().DBData["placing_enabled"] != "1")
{
Session.SendNotif("The hotel managers have disabled placing of furniture.");
return;
}
string PlacementData = Request.PopFixedString();
string[] DataBits = PlacementData.Split(' ');
uint ItemId = uint.Parse(DataBits[0].Replace("-", ""));
UserItem Item = Session.GetHabbo().GetInventoryComponent().GetItem(ItemId);
if (Item == null)
{
return;
}
//bool UpdateNeeded = false;
if (Room.GetRoomItemHandler().mFloorItems.Values.Count + Room.GetRoomItemHandler().mWallItems.Values.Count > 3000)
{
Session.SendNotif("You cannot have more than 3000 items in a room!");
return;
}
else if (Item.GetBaseItem().Name.ToLower().Contains("cf") && Room.OwnerId != Session.GetHabbo().Id && Session.GetHabbo().Rank < 4)
{
Session.SendNotif("You cannot place exchange items in other people's rooms!");
return;
}
switch (Item.GetBaseItem().InteractionType)
{
case Silverwave.HabboHotel.Items.InteractionType.dimmer:
{
MoodlightData moodData = Room.MoodlightData;
if (moodData != null && Room.GetRoomItemHandler().GetItem(moodData.ItemId) != null)
{
Session.SendNotif(LanguageLocale.GetValue("user.maxmoodlightsreached"));
return;
}
break;
}
case Silverwave.HabboHotel.Items.InteractionType.roombg:
{
TonerData tonerData = Room.TonerData;
if (tonerData != null && Room.GetRoomItemHandler().GetItem(tonerData.ItemId) != null)
{
Session.SendNotif("You can only have one background toner per room!");
return;
}
break;
}
case Silverwave.HabboHotel.Items.InteractionType.hopper:
{
if (Room.GetRoomItemHandler().HopperCount > 0)
{
Session.SendNotif("You can only have one hopper per room!");
return;
}
break;
}
case Silverwave.HabboHotel.Items.InteractionType.freezetileblock:
{
List<RoomItem> Itms = Room.GetGameMap().GetRoomItemForSquare(int.Parse(DataBits[1]), int.Parse(DataBits[2]));
bool hases = false;
foreach (RoomItem item in Itms)
{
if (item.GetBaseItem().InteractionType == InteractionType.freezetile)
hases = true;
else
continue;
}
if (!hases)
return;
break;
}
case Silverwave.HabboHotel.Items.InteractionType.onewaygate:
case Silverwave.HabboHotel.Items.InteractionType.teleport:
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("REPLACE INTO item_tolls(item_id, toll_price) VALUES (" + Item.Id + ", 0)");
}
break;
}
}
if (Room.CheckRights(Session))
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE items SET user_id=" + Room.OwnerId + " WHERE id=" + Item.Id + " LIMIT 1");
}
if (DataBits[1].StartsWith(":"))
{
try
{
//WallCoordinate coordinate = new WallCoordinate(":" + PlacementData.Split(':')[1]);
string WallPos = WallPositionCheck(":" + PlacementData.Split(':')[1]);
RoomItem RoomItem = new RoomItem(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, WallPos, Room, Convert.ToUInt32(Room.OwnerId),Item.GroupId, Item.GetBaseItem().FlatId);
if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem))
{
Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId, true);
}
}
catch
{
// Invalid wallitem
/*
Response.Init(516);
Response.AppendInt32(11);
SendResponse();*/
return;
}
}
// Floor Item
else
{
int X = int.Parse(DataBits[1]);
int Y = int.Parse(DataBits[2]);
int Rot = int.Parse(DataBits[3]);
RoomItem RoomItem = new RoomItem(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, X, Y, 0, Rot, Room, Convert.ToUInt32(Room.OwnerId), Item.GroupId, Item.GetBaseItem().FlatId);
if (Room.GetRoomItemHandler().SetFloorItem(Session, RoomItem, X, Y, Rot, true, false, true))
{
Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId, true);
if (RoomItem.IsWired)
{
WiredItem WItem = Room.GetWiredHandler().GenerateNewItem(RoomItem);
Room.GetWiredHandler().SaveWired(WItem);
Room.GetWiredHandler().AddWired(WItem);
}
}
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.FURNI_PLACE);
}
}
else if (Room.CheckRights(Session, true, true))
{
// Wall Item
if (DataBits[1].StartsWith(":"))
{
try
{
//WallCoordinate coordinate = new WallCoordinate(":" + PlacementData.Split(':')[1]);
string WallPos = WallPositionCheck(":" + PlacementData.Split(':')[1]);
RoomItem RoomItem = new RoomItem(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, WallPos, Room, Session.GetHabbo().Id, Item.GroupId, Item.GetBaseItem().FlatId);
if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem))
{
Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId, true);
}
}
catch
{
// Invalid wallitem
/*
Response.Init(516);
Response.AppendInt32(11);
SendResponse();*/
return;
}
}
// Floor Item
else
{
int X = int.Parse(DataBits[1]);
int Y = int.Parse(DataBits[2]);
int Rot = int.Parse(DataBits[3]);
RoomItem RoomItem = new RoomItem(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, X, Y, 0, Rot, Room, Session.GetHabbo().Id, Item.GroupId,Item.GetBaseItem().FlatId);
if (Room.GetRoomItemHandler().SetFloorItem(Session, RoomItem, X, Y, Rot, true, false, true))
{
Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId, true);
if (RoomItem.IsWired)
{
WiredItem WItem = Room.GetWiredHandler().GenerateNewItem(RoomItem);
Room.GetWiredHandler().AddWired(WItem);
Room.GetWiredHandler().SaveWired(WItem);
}
}
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.FURNI_PLACE);
}
//if (UpdateNeeded)
// Room.SaveFurniture();
}
}
internal void TakeItem()
{
int junk = Request.PopWiredInt32();
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
return;
RoomItem Item = Room.GetRoomItemHandler().GetItem(Request.PopWiredUInt());
if (Item == null)
{
return;
}
if (Item.UserID != Session.GetHabbo().Id)
{
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
}
if (Room.ForSale)
{
Session.SendWhisper("You cannot edit the room whilst it's for sale.");
Session.SendWhisper("Cancel the sale of this room by doing ':sellroom 0' (without '')");
return;
}
if (Item.GetBaseItem().InteractionType == Silverwave.HabboHotel.Items.InteractionType.postit)
return;
Room.GetRoomItemHandler().RemoveFurniture(Session, Item.Id);
Session.GetHabbo().GetInventoryComponent().AddNewItem(Item.Id, Item.BaseItem, Item.ExtraData, Item.GroupId, true, true, 0,0,0);
Session.GetHabbo().GetInventoryComponent().UpdateItems(true);
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.FURNI_PICK);
}
internal void MoveItem()
{
RoomItem Item;
uint ItemId = Request.PopWiredUInt();
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
return;
if (Room.Group != null)
{
if (Room == null)
{
return;
}
else if (!Room.CheckRights(Session, false, true))
{
Item = Room.GetRoomItemHandler().GetItem(ItemId);
if (Item == null)
{
return;
}
ServerMessage Message = new ServerMessage(Outgoing.UpdateItemOnRoom);
Item.Serialize(Message);
Session.SendMessage(Message);
return;
}
}
else
{
if (Room == null || !Room.CheckRights(Session))
{
return;
}
}
Item = Room.GetRoomItemHandler().GetItem(ItemId);
if (Item == null)
{
return;
}
if (Room.ForSale)
{
Session.SendWhisper("You cannot edit the room whilst it's for sale.");
Session.SendWhisper("Cancel the sale of this room by doing ':sellroom 0' (without '')");
ServerMessage Message = new ServerMessage(Outgoing.UpdateItemOnRoom);
Item.Serialize(Message);
Room.SendMessage(Message);
return;
}
int x = Request.PopWiredInt32();
int y = Request.PopWiredInt32();
int Rotation = Request.PopWiredInt32();
int Junk = Request.PopWiredInt32();
bool UpdateNeeded = false;
if (Item.GetBaseItem().InteractionType == Silverwave.HabboHotel.Items.InteractionType.teleport || Item.GetBaseItem().InteractionType == Silverwave.HabboHotel.Items.InteractionType.hopper)
UpdateNeeded = true;
if (x != Item.GetX || y != Item.GetY)
{
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.FURNI_MOVE);
}
if (Rotation != Item.Rot)
{
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.FURNI_ROTATE);
}
if (!Room.GetRoomItemHandler().SetFloorItem(Session, Item, x, y, Rotation, false, false, true))
{
ServerMessage Message = new ServerMessage(Outgoing.UpdateItemOnRoom);
Item.Serialize(Message);
Room.SendMessage(Message);
return;
}
if (Item.GetZ >= 0.1)
{
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.FURNI_STACK);
}
if (UpdateNeeded)
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
Room.GetRoomItemHandler().SaveFurniture(dbClient);
}
}
}
public string WallPositionCheck(string wallPosition)
{
//:w=3,2 l=9,63 l
try
{
if (wallPosition.Contains(Convert.ToChar(13)))
{ return null; }
if (wallPosition.Contains(Convert.ToChar(9)))
{ return null; }
string[] posD = wallPosition.Split(' ');
if (posD[2] != "l" && posD[2] != "r")
return null;
string[] widD = posD[0].Substring(3).Split(',');
int widthX = int.Parse(widD[0]);
int widthY = int.Parse(widD[1]);
if (widthX < 0 || widthY < 0 || widthX > 200 || widthY > 200)
return null;
string[] lenD = posD[1].Substring(2).Split(',');
int lengthX = int.Parse(lenD[0]);
int lengthY = int.Parse(lenD[1]);
if (lengthX < 0 || lengthY < 0 || lengthX > 200 || lengthY > 200)
return null;
return ":w=" + widthX + "," + widthY + " " + "l=" + lengthX + "," + lengthY + " " + posD[2];
}
catch
{
return null;
}
}
internal void MoveWallItem()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session))
{
return;
}
uint itemID = Request.PopWiredUInt();
string wallPositionData = Request.PopFixedString();
RoomItem Item = Room.GetRoomItemHandler().GetItem(itemID);
if (Item == null)
return;
try
{
string WallPos = WallPositionCheck(":" + wallPositionData.Split(':')[1]);
Item.wallCoord = WallPos;
}
catch
{
// invalid pos
/*
Response.Init(516);
Response.AppendInt32(11);
SendResponse();*/
return;
}
Room.GetRoomItemHandler().UpdateItem(Item);
/*ServerMessage LeaveMessage = new ServerMessage();
LeaveMessage.AppendRawUInt(Item.Id);
LeaveMessage.AppendString(string.Empty);
LeaveMessage.AppendBoolean(false);
Room.SendMessage(LeaveMessage);*/
ServerMessage Message = new ServerMessage(Outgoing.UpdateWallItemOnRoom);
Item.Serialize(Message);
Room.SendMessage(Message);
}
internal void TriggerItem()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
int itemID = Request.PopWiredInt32();
uint Items;
if (itemID < 0)
return;
else
Items = Convert.ToUInt32(itemID);
//uint itemID = Request.PopWiredUInt();
RoomItem Item = Room.GetRoomItemHandler().GetItem(Items);
if (Item == null)
{
return;
}
Boolean hasRights = false;
if (Room.CheckRights(Session, false, true))
{
hasRights = true;
}
if (Room.ForSale)
{
Session.SendWhisper("You cannot edit the room whilst it's for sale.");
Session.SendWhisper("Cancel the sale of this room by doing ':sellroom 0' (without '')");
return;
}
if (Item.GetBaseItem().InteractionType == InteractionType.roombg)
{
if(!Room.CheckRights(Session, true))
return;
if (Room.TonerData.Enabled == 0)
Room.TonerData.Enabled = 1;
else
Room.TonerData.Enabled = 0;
ServerMessage Message = new ServerMessage(Outgoing.UpdateItemOnRoom);
Item.Serialize(Message);
Room.SendMessage(Message);
Item.UpdateState();
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE room_items_toner SET enabled = '" + Room.TonerData.Enabled + "' LIMIT 1");
}
return;
}
string oldData = Item.ExtraData;
int request = Request.PopWiredInt32();
Item.Interactor.OnTrigger(Session, Item, request, hasRights);
Item.OnTrigger(Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id));
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.EXPLORE_FIND_ITEM, Item.GetBaseItem().ItemId);
foreach (RoomUser User in Room.GetRoomUserManager().UserList.Values)
{
if(User == null)
continue;
Room.GetRoomUserManager().UpdateUserStatus(User, true);
}
}
internal void TriggerItemDiceSpecial()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomItem Item = Room.GetRoomItemHandler().GetItem(Request.PopWiredUInt());
if (Item == null)
{
return;
}
Boolean hasRights = false;
if (Room.CheckRights(Session))
{
hasRights = true;
}
Item.Interactor.OnTrigger(Session, Item, -1, hasRights);
Item.OnTrigger(Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id));
}
internal void OpenPostit()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
//TODO fix post it
if (Room == null)
{
return;
}
RoomItem Item = Room.GetRoomItemHandler().GetItem(Request.PopWiredUInt());
if (Item == null || Item.GetBaseItem().InteractionType != Silverwave.HabboHotel.Items.InteractionType.postit)
{
return;
}
// @p181855059CFF9C stickynotemsg
Response.Init(Outgoing.OpenPostIt);
Response.AppendString(Item.Id.ToString());
Response.AppendString(Item.ExtraData);
SendResponse();
}
internal void SavePostit()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomItem Item = Room.GetRoomItemHandler().GetItem(Request.PopWiredUInt());
if (Item == null || Item.GetBaseItem().InteractionType != Silverwave.HabboHotel.Items.InteractionType.postit)
{
return;
}
String Color = Request.PopFixedString();
String Text = Request.PopFixedString();
if (!Room.CheckRights(Session))
{
if (!Text.StartsWith(Item.ExtraData))
{
return; // we can only ADD stuff! older stuff changed, this is not allowed
}
}
switch (Color)
{
case "FFFF33":
case "FF9CFF":
case "9CCEFF":
case "9CFF9C":
break;
default:
return; // invalid color
}
Item.ExtraData = Color + " " + Text;
Item.UpdateState(true, true);
}
internal void DeletePostit()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
RoomItem Item = Room.GetRoomItemHandler().GetItem(Request.PopWiredUInt());
if (Item == null || Item.GetBaseItem().InteractionType != Silverwave.HabboHotel.Items.InteractionType.postit)
{
return;
}
Room.GetRoomItemHandler().RemoveFurniture(Session, Item.Id);
}
internal void OpenPresent()
{
Room Room = Session.GetHabbo().CurrentRoom;
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
if (SilverwaveEnvironment.GetDBConfig().DBData["gifts_enabled"] != "1")
{
Session.SendNotif("The hotel managers have disabled gifting");
return;
}
uint ItemId = Request.PopWiredUInt();
RoomItem Present = Room.GetRoomItemHandler().GetItem(ItemId);
if (Present == null)
{
return;
}
DataRow Data = null;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT base_id,amount,extra_data FROM user_presents WHERE item_id = " + Present.Id + " LIMIT 1");
Data = dbClient.getRow();
}
if (Data == null)
{
Session.SendNotif("Oops! Appears there was a bug with this gift.\nWe'll just get rid of it for you.");
Room.GetRoomItemHandler().RemoveFurniture(null, Present.Id, false);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("DELETE FROM items WHERE id=" + Present.Id + " LIMIT 1;");
}
Session.GetHabbo().GetInventoryComponent().RemoveItem(Present.Id, false);
return;
}
uint PurchaserId = 0;
if (!uint.TryParse(Present.ExtraData.Split(';')[0], out PurchaserId))
{
Session.SendNotif("Oops! Appears there was a bug with this gift.\nWe'll just get rid of it for you.");
Room.GetRoomItemHandler().RemoveFurniture(null, Present.Id, false);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("DELETE FROM items WHERE id=" + Present.Id + " LIMIT 1;");
}
Session.GetHabbo().GetInventoryComponent().RemoveItem(Present.Id, false);
return;
}
Habbo Purchaser = SilverwaveEnvironment.getHabboForId(PurchaserId);
if (Purchaser == null)
{
Session.SendNotif("Oops! Appears there was a bug with this gift.\nWe'll just get rid of it for you.");
Room.GetRoomItemHandler().RemoveFurniture(null, Present.Id, false);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("DELETE FROM items WHERE id=" + Present.Id + " LIMIT 1;");
}
Session.GetHabbo().GetInventoryComponent().RemoveItem(Present.Id, false);
return;
}
string Message = Present.ExtraData.Split(';')[1].Split((char)5)[0].Remove(0, 1);
Response.Init(Outgoing.UpdateFloorItemExtraData);
Response.AppendString(ItemId.ToString());
Response.AppendInt32(1);
Response.AppendInt32(6);
Response.AppendString("EXTRA_PARAM");
Response.AppendString("");
Response.AppendString("MESSAGE");
Response.AppendString(Message);
Response.AppendString("PURCHASER_NAME");
Response.AppendString(Purchaser.Username);
Response.AppendString("PURCHASER_FIGURE");
Response.AppendString(Purchaser.Look);
Response.AppendString("PRODUCT_CODE");
Response.AppendString("A1 KUMIANKKA");
Response.AppendString("state");
Response.AppendString("1");
Room.SendMessage(Response);
Thread thread = new Thread(() => FinishOpenGift(SilverwaveEnvironment.GetGame().GetItemManager().GetItem(Convert.ToUInt32(Data["base_id"])), Present, Room, Data));
thread.Start();
}
/*
internal void OpenPresent()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
uint ItemId = Request.PopWiredUInt();
RoomItem Present = Room.GetRoomItemHandler().GetItem(ItemId);
if (Present == null)
{
return;
}
if (SilverwaveEnvironment.GetDBConfig().DBData["gifts_enabled"] != "1")
{
Session.SendNotif("The hotel managers have disabled gifting");
return;
}
DataRow Data = null;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT base_id,amount,extra_data FROM user_presents WHERE item_id = " + Present.Id + "");
Data = dbClient.getRow();
}
if (Data == null)
{
Room.GetRoomItemHandler().RemoveFurniture(Session, Present.Id);
return;
}
Item BaseItem = SilverwaveEnvironment.GetGame().GetItemManager().GetItem(Convert.ToUInt32(Data["base_id"]));
if (BaseItem == null)
{
Room.GetRoomItemHandler().RemoveFurniture(Session, Present.Id);
return;
}
uint PurchaserId = (uint)int.Parse(Present.ExtraData.Split(';')[0]);
Habbo Purchaser = SilverwaveEnvironment.getHabboForId(PurchaserId);
Response.Init(Outgoing.UpdateFloorItemExtraData);
Response.AppendString(ItemId.ToString());
Response.AppendInt32(1);
Response.AppendInt32(6);
Response.AppendString("EXTRA_PARAM");
Response.AppendString("");
Response.AppendString("MESSAGE");
Response.AppendString(Present.ExtraData.Split(';')[1].Split((char)5)[0]);
Response.AppendString("PURCHASER_NAME");
Response.AppendString(Purchaser.Username);
Response.AppendString("PURCHASER_FIGURE");
Response.AppendString(Purchaser.Look);
Response.AppendString("PRODUCT_CODE");
Response.AppendString("A1 KUMIANKKA");
Response.AppendString("state");
Response.AppendString("1");
Room.SendMessage(Response);
Present.ReqUpdate(5, true);
Thread thread = new Thread(() => FinishOpenGift(BaseItem, Present, Room, Data));
thread.Start();
}*/
private void FinishOpenGift(Item BaseItem, RoomItem Present, Room Room, DataRow Data)
{
Thread.Sleep(3000);
try
{
if (BaseItem == null || Present == null || Room == null || Data == null)
return;
if (BaseItem.Type.ToString().ToLower().Equals("s") && BaseItem.InteractionType != InteractionType.teleport)
{
Room.GetRoomItemHandler().RemoveFurniture(Session, Present.Id);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("DELETE FROM items WHERE id=" + Present.Id + " LIMIT 1;");
dbClient.setQuery("UPDATE items SET extra_data = @Edata WHERE id = " + Present.Id + " LIMIT 1");
dbClient.addParameter("edata", Data["extra_data"]);
dbClient.runQuery();
dbClient.runFastQuery("DELETE FROM user_presents WHERE item_id = " + Present.Id + " LIMIT 1");
}
string type = Present.GetBaseItem().Type.ToString().ToLower();
string ExtraData = Present.ExtraData;
Present.BaseItem = Convert.ToUInt32(Data["base_id"]);
Present.refreshItem();
Present.ExtraData = "";
if ((int)Data["amount"] == 1)
{
if (!Room.GetRoomItemHandler().SetFloorItem(Session, Present, Present.GetX, Present.GetY, Present.Rot, true, false, true))
{
SilverwaveEnvironment.GetGame().GetCatalog().DeliverItems(Session, BaseItem, (int)Data["amount"], (String)Data["extra_data"], 0, 0);
Session.GetHabbo().GetInventoryComponent().UpdateItems(true);
}
}
else
{
SilverwaveEnvironment.GetGame().GetCatalog().DeliverItems(Session, BaseItem, (int)Data["amount"], (String)Data["extra_data"], 0, 0);
Session.GetHabbo().GetInventoryComponent().UpdateItems(true);
}
Response.Init(Outgoing.OpenGift);
Response.AppendString(BaseItem.Type.ToString());
Response.AppendInt32(BaseItem.SpriteId);
Response.AppendString(BaseItem.Name);
Response.AppendInt32(Present.Id);
Response.AppendString(type);
Response.AppendBoolean(false);
Response.AppendString(ExtraData);
//SendResponse();
}
else
{
Room.GetRoomItemHandler().RemoveFurniture(Session, Present.Id);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("DELETE FROM items WHERE id=" + Present.Id + " LIMIT 1;");
dbClient.runFastQuery("DELETE FROM user_presents WHERE item_id = " + Present.Id);
}
Session.GetMessageHandler().GetResponse().Init(Outgoing.SendPurchaseAlert);
Session.GetMessageHandler().GetResponse().AppendInt32(1); // items
int Type = 2;
if (BaseItem.Type.ToString().ToLower().Equals("s"))
{
if (BaseItem.InteractionType == InteractionType.pet)
Type = 3;
else
Type = 1;
}
Session.GetMessageHandler().GetResponse().AppendInt32(Type);
List<UserItem> items = SilverwaveEnvironment.GetGame().GetCatalog().DeliverItems(Session, BaseItem, (int)Data["amount"], (String)Data["extra_data"], 0, 0);
Session.GetMessageHandler().GetResponse().AppendInt32(items.Count);
foreach (UserItem u in items)
Session.GetMessageHandler().GetResponse().AppendInt32(u.Id);
Session.GetMessageHandler().SendResponse();
Session.GetHabbo().GetInventoryComponent().UpdateItems(true);
}
}
catch { }
}
internal void GetMoodlight()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true))
{
//Console.WriteLine("error loading! " + (Room.MoodlightData == null));
return;
}
if (Room.MoodlightData == null)
{
foreach (RoomItem item in Room.GetRoomItemHandler().mWallItems.Values)
{
if (item.GetBaseItem().InteractionType == InteractionType.dimmer)
Room.MoodlightData = new MoodlightData(item.Id);
}
}
if (Room.MoodlightData == null)
return;
Response.Init(Outgoing.DimmerData);
Response.AppendInt32(Room.MoodlightData.Presets.Count);
Response.AppendInt32(Room.MoodlightData.CurrentPreset);
int i = 0;
foreach (MoodlightPreset Preset in Room.MoodlightData.Presets)
{
i++;
Response.AppendInt32(i);
Response.AppendInt32(int.Parse(SilverwaveEnvironment.BoolToEnum(Preset.BackgroundOnly)) + 1);
Response.AppendString(Preset.ColorCode);
Response.AppendInt32(Preset.ColorIntensity);
}
SendResponse();
}
internal void UpdateMoodlight()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true) || Room.MoodlightData == null)
{
return;
}
RoomItem Item = Room.GetRoomItemHandler().GetItem(Room.MoodlightData.ItemId);
if (Item == null || Item.GetBaseItem().InteractionType != InteractionType.dimmer)
return;
// EVIH@G#EA4532RbI
int Preset = Request.PopWiredInt32();
int BackgroundMode = Request.PopWiredInt32();
string ColorCode = Request.PopFixedString();
int Intensity = Request.PopWiredInt32();
bool BackgroundOnly = false;
if (BackgroundMode >= 2)
{
BackgroundOnly = true;
}
Room.MoodlightData.Enabled = true;
Room.MoodlightData.CurrentPreset = Preset;
Room.MoodlightData.UpdatePreset(Preset, ColorCode, Intensity, BackgroundOnly);
Item.ExtraData = Room.MoodlightData.GenerateExtraData();
Item.UpdateState();
}
internal void SwitchMoodlightStatus()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true) || Room.MoodlightData == null)
{
return;
}
RoomItem Item = Room.GetRoomItemHandler().GetItem(Room.MoodlightData.ItemId);
if (Item == null || Item.GetBaseItem().InteractionType != InteractionType.dimmer)
return;
if (Room.MoodlightData.Enabled)
{
Room.MoodlightData.Disable();
}
else
{
Room.MoodlightData.Enable();
}
Item.ExtraData = Room.MoodlightData.GenerateExtraData();
Item.UpdateState();
}
internal void SaveRoomBg()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
RoomItem Item = Room.GetRoomItemHandler().GetItem(Room.TonerData.ItemId);
if (Item == null || Item.GetBaseItem().InteractionType != InteractionType.roombg)
return;
int lol = Request.PopWiredInt32();
int Int1 = Request.PopWiredInt32();
int Int2 = Request.PopWiredInt32();
int Int3 = Request.PopWiredInt32();
if (Int1 > 255 || Int2 > 255 || Int3 > 255)
return;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE room_items_toner SET enabled = '1', data1=" + Int1 + " ,data2=" + Int2 + ",data3=" + Int3 + " WHERE id=" + Item.Id + " LIMIT 1");
}
Room.TonerData.Data1 = Int1;
Room.TonerData.Data2 = Int2;
Room.TonerData.Data3 = Int3;
Room.TonerData.Enabled = 1;
ServerMessage Message = new ServerMessage(Outgoing.UpdateItemOnRoom);
Item.Serialize(Message);
Room.SendMessage(Message);
Item.UpdateState();
}
internal void InitTrade()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CanTradeInRoom)
{
return;
}
if (SilverwaveEnvironment.GetDBConfig().DBData["trading_enabled"] != "1")
{
Session.SendNotif("The hotel managers have disabled trading");
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
RoomUser User2 = Room.GetRoomUserManager().GetRoomUserByVirtualId(Request.PopWiredInt32());
if (User2 == null || User2.GetClient() == null || User2.GetClient().GetHabbo() == null)
return;
bool IsDisabled = false;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT accept_trading FROM users WHERE id = " + User2.GetClient().GetHabbo().Id);
IsDisabled = SilverwaveEnvironment.EnumToBool(dbClient.getString());
}
if (!IsDisabled)
{
Session.SendNotif(LanguageLocale.GetValue("user.tradedisabled"));
return;
}
else
Room.TryStartTrade(User, User2);
}
internal void OfferTradeItem()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CanTradeInRoom)
{
return;
}
Trade Trade = Room.GetUserTrade(Session.GetHabbo().Id);
UserItem Item = Session.GetHabbo().GetInventoryComponent().GetItem(Request.PopWiredUInt());
if (Trade == null || Item == null)
{
return;
}
Trade.OfferItem(Session.GetHabbo().Id, Item);
}
internal void TakeBackTradeItem()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CanTradeInRoom)
{
return;
}
Trade Trade = Room.GetUserTrade(Session.GetHabbo().Id);
UserItem Item = Session.GetHabbo().GetInventoryComponent().GetItem(Request.PopWiredUInt());
if (Trade == null || Item == null)
{
return;
}
Trade.TakeBackItem(Session.GetHabbo().Id, Item);
}
internal void StopTrade()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CanTradeInRoom)
{
return;
}
Room.TryStopTrade(Session.GetHabbo().Id);
}
internal void AcceptTrade()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CanTradeInRoom)
{
return;
}
Trade Trade = Room.GetUserTrade(Session.GetHabbo().Id);
if (Trade == null)
{
return;
}
Trade.Accept(Session.GetHabbo().Id);
}
internal void UnacceptTrade()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CanTradeInRoom)
{
return;
}
Trade Trade = Room.GetUserTrade(Session.GetHabbo().Id);
if (Trade == null)
{
return;
}
Trade.Unaccept(Session.GetHabbo().Id);
}
internal void CompleteTrade()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CanTradeInRoom)
{
return;
}
Trade Trade = Room.GetUserTrade(Session.GetHabbo().Id);
if (Trade == null)
{
return;
}
Trade.CompleteTrade(Session.GetHabbo().Id);
}
internal void GiveRespect()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || Session.GetHabbo().DailyRespectPoints <= 0)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Request.PopWiredUInt());
if (User == null || User.GetClient().GetHabbo().Id == Session.GetHabbo().Id || User.IsBot)
{
return;
}
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.SOCIAL_RESPECT);
SilverwaveEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(Session, "ACH_RespectGiven", 1);
SilverwaveEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(User.GetClient(), "ACH_RespectEarned", 1);
Session.GetHabbo().DailyRespectPoints--;
User.GetClient().GetHabbo().Respect++;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE user_stats SET Respect = Respect + 1 WHERE id = " + User.GetClient().GetHabbo().Id + " LIMIT 1;" +
"UPDATE user_stats SET DailyRespectPoints = DailyRespectPoints - 1 WHERE id= " + Session.GetHabbo().Id + " LIMIT 1");
}
// FxkqUzYP_
ServerMessage Message = new ServerMessage(Outgoing.GiveRespect);
Message.AppendInt32(User.GetClient().GetHabbo().Id);
Message.AppendInt32(User.GetClient().GetHabbo().Respect);
Room.SendMessage(Message);
Room.SendMessage(new ActionComposer(Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Username), 7));
}
internal void ApplyEffect()
{
int Effect = Request.PopWiredInt32();
Session.GetHabbo().GetAvatarEffectsInventoryComponent().ApplyCustomEffect(Effect);
}
internal void EnableEffect()
{
RoomUser User = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId).GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Username);
if (!User.RidingHorse)
Session.GetHabbo().GetAvatarEffectsInventoryComponent().EnableEffect(Request.PopWiredInt32());
}
internal void RecycleItems()
{
if (!Session.GetHabbo().InRoom)
{
return;
}
int itemCount = Request.PopWiredInt32();
if (itemCount != 3)
{
return;
}
for (int i = 0; i < itemCount; i++)
{
UserItem Item = Session.GetHabbo().GetInventoryComponent().GetItem(Request.PopWiredUInt());
if (Item != null && Item.GetBaseItem().AllowRecycle)
{
Session.GetHabbo().GetInventoryComponent().RemoveItem(Item.Id, false);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
dbClient.runFastQuery("DELETE FROM items WHERE id=" + Item.Id + " LIMIT 1");
}
else
{
return;
}
}
uint newItemId;// = SilverwaveEnvironment.GetGame().GetCatalog().GenerateItemId();
EcotronReward Reward = SilverwaveEnvironment.GetGame().GetCatalog().GetRandomEcotronReward();
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("INSERT INTO items (user_id,base_item,extra_data) VALUES ( @userid ,1478, @timestamp)");
dbClient.addParameter("userid", (int)Session.GetHabbo().Id);
dbClient.addParameter("timestamp", DateTime.Now.ToLongDateString());
newItemId = (uint)dbClient.insertQuery();
dbClient.runFastQuery("INSERT INTO user_presents (item_id,base_id,amount,extra_data) VALUES (" + newItemId + "," + Reward.BaseId + ",1,'')");
}
Session.GetHabbo().GetInventoryComponent().UpdateItems(true);
Response.Init(Outgoing.RecycleState);
Response.AppendInt32(1);
Response.AppendInt32(newItemId);
SendResponse();
}
internal void RedeemExchangeFurni()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
if (SilverwaveEnvironment.GetDBConfig().DBData["exchange_enabled"] != "1")
{
Session.SendNotif("The hotel managers have temporarilly disabled exchanging!");
return;
}
RoomItem Exchange = Room.GetRoomItemHandler().GetItem(Request.PopWiredUInt());
if (Exchange == null)
{
return;
}
if (!Exchange.GetBaseItem().Name.StartsWith("CF_") && !Exchange.GetBaseItem().Name.StartsWith("CFC_"))
{
return;
}
string[] Split = Exchange.GetBaseItem().Name.Split('_');
int Value = int.Parse(Split[1]);
if (Value > 0)
{
Session.GetHabbo().Credits += Value;
Session.GetHabbo().UpdateCreditsBalance();
}
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
dbClient.runFastQuery("DELETE FROM items WHERE id=" + Exchange.Id + " LIMIT 1;");
//"UPDATE users SET credits='" + Session.GetHabbo().Credits + "' WHERE id='" + Session.GetHabbo().Id + "' LIMIT 1");
Room.GetRoomItemHandler().RemoveFurniture(null, Exchange.Id, false);
Session.GetHabbo().GetInventoryComponent().RemoveItem(Exchange.Id, false);
Response.Init(Outgoing.UpdateInventary);
SendResponse();
}
internal void KickBot()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session, true))
{
return;
}
RoomUser Bot = Room.GetRoomUserManager().GetRoomUserByVirtualId(Request.PopWiredInt32());
if (Bot == null || !Bot.IsBot)
{
return;
}
Room.GetRoomUserManager().RemoveBot(Bot.VirtualId, true);
}
internal void PlacePet()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || (Room.AllowPets == 0 && !Room.CheckRights(Session, true)) || !Room.CheckRights(Session, true))
{
return;
}
uint PetId = Request.PopWiredUInt();
Pet Pet = Session.GetHabbo().GetInventoryComponent().GetPet(PetId);
if (Pet == null || Pet.PlacedInRoom)
{
return;
}
int X = Request.PopWiredInt32();
int Y = Request.PopWiredInt32();
if (!Room.GetGameMap().CanWalk(X, Y, false))
{
return;
}
RoomUser oldPet = Room.GetRoomUserManager().GetPet(PetId);
if (oldPet != null)
Room.GetRoomUserManager().RemoveBot(oldPet.VirtualId, false);
Pet.PlacedInRoom = true;
Pet.RoomId = Room.RoomId;
List<RandomSpeech> RndSpeechList = new List<RandomSpeech>();
List<BotResponse> BotResponse = new List<Silverwave.HabboHotel.RoomBots.BotResponse>();
RoomUser PetUser = Room.GetRoomUserManager().DeployBot(new RoomBot(Pet.PetId, Convert.ToUInt32(Pet.OwnerId), Pet.RoomId, AIType.Pet, "freeroam", Pet.Name, "", Pet.Look, X, Y, 0, 0, 0, 0, 0, 0, ref RndSpeechList, ref BotResponse, "", 0), Pet);
Session.GetHabbo().GetInventoryComponent().MovePetToRoom(Pet.PetId);
if (Pet.DBState != DatabaseUpdateState.NeedsInsert)
Pet.DBState = DatabaseUpdateState.NeedsUpdate;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
Room.GetRoomUserManager().SavePets(dbClient);
Session.SendMessage(Session.GetHabbo().GetInventoryComponent().SerializePetInventory());
}
internal void GetPetInfo()
{
if (Session.GetHabbo() == null || Session.GetHabbo().CurrentRoom == null)
return;
uint PetId = Request.PopWiredUInt();
RoomUser pet = Session.GetHabbo().CurrentRoom.GetRoomUserManager().GetPet(PetId);
if (pet == null || pet.PetData == null)
{
return;
}
Session.SendMessage(pet.PetData.SerializeInfo());
}
internal void PickUpPet()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Session == null || Session.GetHabbo() == null || Session.GetHabbo().GetInventoryComponent() == null)
return;
if (Room == null || (Room.AllowPets == 0 && !Room.CheckRights(Session, true)))
{
return;
}
uint PetId = Request.PopWiredUInt();
//Session.SendNotif(PetId + "");
RoomUser PetUser = Room.GetRoomUserManager().GetPet(PetId);
if (PetUser == null)
return;
if (PetUser.RidingHorse == true)
{
RoomUser usuarioVinculado = Room.GetRoomUserManager().GetRoomUserByVirtualId(Convert.ToInt32(PetUser.HorseID));
if (usuarioVinculado != null)
{
usuarioVinculado.RidingHorse = false;
usuarioVinculado.ApplyEffect(-1);
usuarioVinculado.MoveTo(new Point(usuarioVinculado.X + 1, usuarioVinculado.Y + 1));
}
}
if (PetUser.PetData.DBState != DatabaseUpdateState.NeedsInsert)
PetUser.PetData.DBState = DatabaseUpdateState.NeedsUpdate;
PetUser.PetData.RoomId = 0;
Session.GetHabbo().GetInventoryComponent().AddPet(PetUser.PetData);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
Room.GetRoomUserManager().SavePets(dbClient);
Room.GetRoomUserManager().RemoveBot(PetUser.VirtualId, false);
Session.SendMessage(Session.GetHabbo().GetInventoryComponent().SerializePetInventory());
}
internal void RespectPet()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
uint PetId = Request.PopWiredUInt();
RoomUser PetUser = Room.GetRoomUserManager().GetPet(PetId);
if (PetUser == null || PetUser.PetData == null)
{
return;
}
PetUser.PetData.OnRespect();
Session.GetHabbo().DailyPetRespectPoints--;
SilverwaveEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(Session, "ACH_PetRespectGiver", 1, false);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
//dbClient.addParameter("userid", Session.GetHabbo().Id);
dbClient.runFastQuery("UPDATE user_stats SET DailyPetRespectPoints = DailyPetRespectPoints - 1 WHERE id = " + Session.GetHabbo().Id + " LIMIT 1");
}
}
internal void AllowAllRide()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
uint PetID = Request.PopWiredUInt();
RoomUser Pet = Room.GetRoomUserManager().GetPet(PetID);
if (Pet.PetData.AnyoneCanRide == 1)
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
dbClient.runFastQuery("UPDATE bots_petdata SET anyone_ride=0 WHERE id=" + PetID + " LIMIT 1");
Pet.PetData.AnyoneCanRide = 0;
}
else
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
dbClient.runFastQuery("UPDATE bots_petdata SET anyone_ride=1 WHERE id=" + PetID + " LIMIT 1");
Pet.PetData.AnyoneCanRide = 1;
}
ServerMessage Nfo = new ServerMessage(Outgoing.PetInformation);
Nfo.AppendInt32(Pet.PetData.PetId);
Nfo.AppendString(Pet.PetData.Name);
Nfo.AppendInt32(Pet.PetData.Level);
Nfo.AppendInt32(20);
Nfo.AppendInt32(Pet.PetData.experience);
Nfo.AppendInt32(Pet.PetData.experienceGoal);
Nfo.AppendInt32(Pet.PetData.Energy);
Nfo.AppendInt32(100);
Nfo.AppendInt32(Pet.PetData.Nutrition);
Nfo.AppendInt32(150);
//Nfo.AppendString(Color.ToLower());
Nfo.AppendInt32(Pet.PetData.Respect);
Nfo.AppendInt32(Pet.PetData.OwnerId);
Nfo.AppendInt32(Pet.PetData.Age);
Nfo.AppendString(Pet.PetData.OwnerName);
Nfo.AppendInt32(1);
Nfo.AppendBoolean(Pet.PetData.HaveSaddle);
Nfo.AppendBoolean(SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Pet.PetData.RoomId).GetRoomUserManager().GetRoomUserByVirtualId(Pet.PetData.VirtualId).RidingHorse);
Nfo.AppendInt32(0);
Nfo.AppendInt32(Pet.PetData.AnyoneCanRide); // Anyone can ride horse
Nfo.AppendInt32(0);
Nfo.AppendInt32(0);
Nfo.AppendInt32(0);
Nfo.AppendInt32(0);
Nfo.AppendInt32(0);
Nfo.AppendInt32(0);
Nfo.AppendString("");
Nfo.AppendBoolean(false);
Nfo.AppendInt32(-1);
Nfo.AppendInt32(-1);
Nfo.AppendInt32(-1);
Nfo.AppendBoolean(false);
Room.SendMessage(Nfo);
}
internal void AddSaddle()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || (Room.AllowPets == 0 && !Room.CheckRights(Session, true)))
{
return;
}
uint ItemId = Request.PopWiredUInt();
RoomItem Item = Room.GetRoomItemHandler().GetItem(ItemId);
if (Item == null)
return; ;
uint PetId = Request.PopWiredUInt();
RoomUser PetUser = Room.GetRoomUserManager().GetPet(PetId);
if (PetUser == null || PetUser.PetData == null || PetUser.PetData.OwnerId != Session.GetHabbo().Id)
{
return;
}
Room.GetRoomItemHandler().RemoveFurniture(Session, Item.Id, false);
if (Item.GetBaseItem().Name.Contains("horse_hairdye"))
{
string HairType = Item.GetBaseItem().Name.Split('_')[2];
int HairDye = 48;
HairDye = HairDye + int.Parse(HairType);
PetUser.PetData.HairDye = HairDye;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE bots_petdata SET hairdye = '" + PetUser.PetData.HairDye + "' WHERE id = " + PetUser.PetData.PetId);
}
}
else if (Item.GetBaseItem().Name.Contains("horse_dye"))
{
string Race = Item.GetBaseItem().Name.Split('_')[2];
int Parse = int.Parse(Race);
int RaceLast = 2 + (Parse * 4) - 4;
if (Parse == 13)
RaceLast = 61;
else if (Parse == 14)
RaceLast = 65;
else if (Parse == 15)
RaceLast = 69;
else if (Parse == 16)
RaceLast = 73;
PetUser.PetData.Race = RaceLast.ToString();
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE bots_petdata SET race = '" + PetUser.PetData.Race + "' WHERE id = " + PetUser.PetData.PetId);
dbClient.runFastQuery("DELETE FROM items WHERE id=" + Item.Id + " LIMIT 1");
}
}
else if (Item.GetBaseItem().Name.Contains("horse_hairstyle"))
{
string HairType = Item.GetBaseItem().Name.Split('_')[2];
int Parse = 100;
Parse = Parse + int.Parse(HairType);
PetUser.PetData.PetHair = Parse;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE bots_petdata SET pethair = '" + PetUser.PetData.PetHair + "' WHERE id = " + PetUser.PetData.PetId);
dbClient.runFastQuery("DELETE FROM items WHERE id=" + Item.Id + " LIMIT 1");
}
}
else if (Item.GetBaseItem().Name.Contains("saddle"))
{
PetUser.PetData.HaveSaddle = true;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE bots_petdata SET have_saddle = 1 WHERE id = " + PetUser.PetData.PetId);
dbClient.runFastQuery("DELETE FROM items WHERE id=" + Item.Id + " LIMIT 1");
}
}
ServerMessage Message = new ServerMessage(Outgoing.PlaceBot);
Message.AppendInt32(1);
PetUser.Serialize(Message, false);
Room.SendMessage(Message);
ServerMessage AddToPet = new ServerMessage(Outgoing.PetData);
AddToPet.AppendInt32(PetUser.PetData.VirtualId);
AddToPet.AppendInt32(PetUser.PetData.PetId);
AddToPet.AppendInt32(PetUser.PetData.Type);
AddToPet.AppendInt32(int.Parse(PetUser.PetData.Race));
AddToPet.AppendString(PetUser.PetData.Color.ToLower());
if (PetUser.PetData.HaveSaddle)
{
AddToPet.AppendInt32(2);
AddToPet.AppendInt32(3);
AddToPet.AppendInt32(4);
AddToPet.AppendInt32(9);
AddToPet.AppendInt32(0);
AddToPet.AppendInt32(3);
AddToPet.AppendInt32(PetUser.PetData.PetHair);
AddToPet.AppendInt32(PetUser.PetData.HairDye);
AddToPet.AppendInt32(3);
AddToPet.AppendInt32(PetUser.PetData.PetHair);
AddToPet.AppendInt32(PetUser.PetData.HairDye);
}
else
{
AddToPet.AppendInt32(1);
AddToPet.AppendInt32(2);
AddToPet.AppendInt32(2);
AddToPet.AppendInt32(PetUser.PetData.PetHair);
AddToPet.AppendInt32(PetUser.PetData.HairDye);
AddToPet.AppendInt32(3);
AddToPet.AppendInt32(PetUser.PetData.PetHair);
AddToPet.AppendInt32(PetUser.PetData.HairDye);
}
AddToPet.AppendBoolean(PetUser.PetData.HaveSaddle);
AddToPet.AppendBoolean(PetUser.RidingHorse);
Room.SendMessage(AddToPet);
}
internal void RemoveSaddle()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || (Room.AllowPets == 0 && !Room.CheckRights(Session, true)))
{
return;
}
uint PetId = Request.PopWiredUInt();
RoomUser PetUser = Room.GetRoomUserManager().GetPet(PetId);
if (PetUser == null || PetUser.PetData == null || PetUser.PetData.OwnerId != Session.GetHabbo().Id)
{
return;
}
//SilverwaveEnvironment.GetGame().GetCatalog().DeliverItems(Session, SilverwaveEnvironment.GetGame().GetItemManager().GetItem((uint)2804), 1, "");
PetUser.PetData.HaveSaddle = false;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
//dbClient.addParameter("userid", Session.GetHabbo().Id);
dbClient.runFastQuery("UPDATE bots_petdata SET have_saddle = 0 WHERE id = " + PetUser.PetData.PetId);
dbClient.runFastQuery("INSERT INTO items (user_id, base_item) VALUES (" + Session.GetHabbo().Id + ", 4221);");
}
Session.GetHabbo().GetInventoryComponent().UpdateItems(true);
ServerMessage Message = new ServerMessage(Outgoing.PlaceBot);
Message.AppendInt32(1);
PetUser.Serialize(Message, false);
Room.SendMessage(Message);
ServerMessage AddToPet = new ServerMessage(Outgoing.PetData);
AddToPet.AppendInt32(PetUser.PetData.VirtualId);
AddToPet.AppendInt32(PetUser.PetData.PetId);
AddToPet.AppendInt32(PetUser.PetData.Type);
AddToPet.AppendInt32(int.Parse(PetUser.PetData.Race));
AddToPet.AppendString(PetUser.PetData.Color.ToLower());
AddToPet.AppendInt32(1);
AddToPet.AppendInt32(2);
AddToPet.AppendInt32(2);
AddToPet.AppendInt32(PetUser.PetData.PetHair);
AddToPet.AppendInt32(PetUser.PetData.HairDye);
AddToPet.AppendInt32(3);
AddToPet.AppendInt32(PetUser.PetData.PetHair);
AddToPet.AppendInt32(PetUser.PetData.HairDye);
AddToPet.AppendBoolean(PetUser.PetData.HaveSaddle);
AddToPet.AppendBoolean(PetUser.RidingHorse);
Room.SendMessage(AddToPet);
}
internal void CancelMountOnPet()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null)
return;
uint PetId = Request.PopWiredUInt();
RoomUser Pet = Room.GetRoomUserManager().GetPet(PetId);
if (Pet == null || Pet.PetData == null)
{
return;
}
User.RidingHorse = false;
User.HorseID = 0;
Pet.RidingHorse = false;
Pet.HorseID = 0;
User.MoveTo(User.X + 1, User.Y + 1);
User.ApplyEffect(-1);
}
internal void GiveHanditem()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
//if (Room == null || Room.IsPublic || (!Room.AllowPets && !Room.CheckRights(Session, true)))
if (Room == null)
return;
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null)
return;
RoomUser toGive = Room.GetRoomUserManager().GetRoomUserByHabbo(Request.PopWiredUInt());
if (toGive == null)
return;
if (!((Math.Abs((int)(User.X - toGive.X)) >= 3) || (Math.Abs((int)(User.Y - toGive.Y)) >= 3)) || User.GetClient().GetHabbo().Rank > 4)
{
if (User.CarryItemID > 0 && User.CarryTimer > 0)
{
if(User.CarryItemID == 8)
SilverwaveEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.GIVE_COFFEE);
toGive.CarryItem(User.CarryItemID);
User.CarryItem(0);
toGive.DanceId = 0;
}
}
}
internal void RedeemVoucher()
{
string ticket = this.Request.PopFixedString();
string productName = "";
string productDescription= "";
bool isValid = false;
DataRow dRow;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT * FROM vouchers WHERE voucher = @vo LIMIT 1");
dbClient.addParameter("vo", ticket);
dRow = dbClient.getRow();
}
if (dRow != null)
{
isValid = true;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("DELETE * FROM vouchers WHERE voucher = @vou LIMIT 1");
dbClient.addParameter("vou", ticket);
dbClient.runQuery();
}
this.Session.GetHabbo().Credits += (int)dRow["value"];
this.Session.GetHabbo().UpdateCreditsBalance();
this.Session.GetHabbo().NotifyNewPixels((int)dRow["extra_duckets"]);
}
this.Session.GetHabbo().NotifyVoucher(isValid, productName, productDescription);
}
internal void RemoveHanditem()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
//if (Room == null || Room.IsPublic || (!Room.AllowPets && !Room.CheckRights(Session, true)))
if (Room == null)
return;
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null)
return;
if (User.CarryItemID > 0 && User.CarryTimer > 0)
User.CarryItem(0);
}
internal void MountOnPet()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
//if (Room == null || Room.IsPublic || (!Room.AllowPets && !Room.CheckRights(Session, true)))
if (Room == null)
{
return;
}
RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (User == null)
return;
uint PetId = Request.PopWiredUInt();
bool Type = Request.PopWiredBoolean();
RoomUser Pet = Room.GetRoomUserManager().GetPet(PetId);
//if (Pet == null || Pet.PetData == null || Pet.PetData.OwnerId != Session.GetHabbo().Id)
if (Pet == null || Pet.PetData == null)
{
return;
}
if (Pet.PetData.AnyoneCanRide == 0 && Pet.PetData.OwnerId != User.userID)
{
Session.SendNotif("You are unable to ride this horse.\nThe owner of the pet has not selected for anyone to ride it.");
return;
}
if (Type)
{
if (Pet.RidingHorse == true)
{
string[] Speech2 = PetLocale.GetValue("pet.alreadymounted");
Random RandomSpeech2 = new Random();
Pet.Chat(null, Speech2[RandomSpeech2.Next(0, Speech2.Length - 1)], false,0,0);
}
else if (User.RidingHorse == true)
{
Session.SendNotif("You are already riding a horse!");
}
else
{
Pet.Statusses.Remove("sit");
Pet.Statusses.Remove("lay");
Pet.Statusses.Remove("snf");
Pet.Statusses.Remove("eat");
Pet.Statusses.Remove("ded");
Pet.Statusses.Remove("jmp");
int NewX2 = User.X;
int NewY2 = User.Y;
//Pet.PetData.Addexperience(10); // Give XP
Room.SendMessage(Room.GetRoomItemHandler().UpdateUserOnRoller(Pet, new Point(NewX2, NewY2), 0, Room.GetGameMap().SqAbsoluteHeight(NewX2, NewY2)));
Room.GetRoomUserManager().UpdateUserStatus(Pet, false);
Room.SendMessage(Room.GetRoomItemHandler().UpdateUserOnRoller(User, new Point(NewX2, NewY2), 0, Room.GetGameMap().SqAbsoluteHeight(NewX2, NewY2) + 1));
Room.GetRoomUserManager().UpdateUserStatus(User, false);
Pet.ClearMovement(true);
User.RidingHorse = true;
Pet.RidingHorse = true;
Pet.HorseID = (uint)User.VirtualId;
User.HorseID = Convert.ToUInt32(Pet.VirtualId);
User.ApplyEffect(77);
User.Z += 1;
User.UpdateNeeded = true;
Pet.UpdateNeeded = true;
}
}
else
{
if (User.VirtualId == Pet.HorseID)
{
Pet.Statusses.Remove("sit");
Pet.Statusses.Remove("lay");
Pet.Statusses.Remove("snf");
Pet.Statusses.Remove("eat");
Pet.Statusses.Remove("ded");
Pet.Statusses.Remove("jmp");
User.RidingHorse = false;
User.HorseID = 0;
Pet.RidingHorse = false;
Pet.HorseID = 0;
User.MoveTo(new Point(User.X + 2, User.Y + 2));
User.ApplyEffect(-1);
User.UpdateNeeded = true;
Pet.UpdateNeeded = true;
}
else
{
Session.SendNotif("Could not dismount this horse - You are not riding it!");
}
}
ServerMessage AddToPet = new ServerMessage(Outgoing.PetData);
AddToPet.AppendInt32(Pet.PetData.VirtualId);
AddToPet.AppendInt32(Pet.PetData.PetId);
AddToPet.AppendInt32(Pet.PetData.Type);
AddToPet.AppendInt32(int.Parse(Pet.PetData.Race));
AddToPet.AppendString(Pet.PetData.Color.ToLower());
AddToPet.AppendInt32(2);
AddToPet.AppendInt32(3);
AddToPet.AppendInt32(4);
AddToPet.AppendInt32(9);
AddToPet.AppendInt32(0);
AddToPet.AppendInt32(3);
AddToPet.AppendInt32(Pet.PetData.PetHair);
AddToPet.AppendInt32(Pet.PetData.HairDye);
AddToPet.AppendInt32(3);
AddToPet.AppendInt32(Pet.PetData.PetHair);
AddToPet.AppendInt32(Pet.PetData.HairDye);
AddToPet.AppendBoolean(Pet.PetData.HaveSaddle);
AddToPet.AppendBoolean((Pet.RidingHorse) ? true : false);
Room.SendMessage(AddToPet);
}
internal void SetLookTransfer()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session))
return;
uint ItemID = Request.PopWiredUInt();
string Gender = Request.PopFixedString().ToUpper();
string Look = Request.PopFixedString();
RoomItem RoomItemToSet = Room.GetRoomItemHandler().mFloorItems.GetValue(ItemID);
if (Gender.Length > 1)
return;
if (Gender != "M" && Gender != "F")
return;
RoomItemToSet.Figure = SilverwaveEnvironment.FilterFigure(Look);
RoomItemToSet.Gender = Gender;
RoomItemToSet.ExtraData = Gender + ":" + Look;
}
internal void CommandsPet()
{
uint PetID = Request.PopWiredUInt();
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
RoomUser PetUser = Room.GetRoomUserManager().GetPet(PetID);
if (PetUser == null || PetUser.PetData == null)
return;
//2603:I,I,I,I,I
Response.Init(2603);
Response.AppendInt32(PetUser.PetData.PetId);
Response.AppendInt32(0);
Response.AppendInt32(1);
Response.AppendInt32(14);
Response.AppendInt32(43);
Response.AppendInt32(2);
Response.AppendInt32(3);
Response.AppendInt32(4);
Response.AppendInt32(17);
Response.AppendInt32(5);
Response.AppendInt32(6);
Response.AppendInt32(7);
Response.AppendInt32(8);
Response.AppendInt32(9);
Response.AppendInt32(10);
Response.AppendInt32(11);
Response.AppendInt32(12);
Response.AppendInt32(13);
Response.AppendInt32(15);
Response.AppendInt32(16);
Response.AppendInt32(24);
Response.AppendInt32(25);
Response.AppendInt32(26);
Response.AppendInt32(4);
Response.AppendInt32(0);
Response.AppendInt32(1);
Response.AppendInt32(14);
Response.AppendInt32(43);
SendResponse();
/*GetResponse().Init(605);
GetResponse().AppendUInt(PetID);
int level = PetUser.PetData.Level;
GetResponse().AppendInt32(18);
GetResponse().AppendInt32(0);
GetResponse().AppendInt32(1);
GetResponse().AppendInt32(2);
GetResponse().AppendInt32(3);
GetResponse().AppendInt32(4);
GetResponse().AppendInt32(17);
GetResponse().AppendInt32(5);
GetResponse().AppendInt32(6);
GetResponse().AppendInt32(7);
GetResponse().AppendInt32(8);
GetResponse().AppendInt32(9);
GetResponse().AppendInt32(10);
GetResponse().AppendInt32(11);
GetResponse().AppendInt32(12);
GetResponse().AppendInt32(13);
GetResponse().AppendInt32(14);
GetResponse().AppendInt32(15);
GetResponse().AppendInt32(16);
for (int i = 0; level > i; )
{
i++;
GetResponse().AppendInt32(i);
}
GetResponse().AppendInt32(0);
GetResponse().AppendInt32(1);
GetResponse().AppendInt32(2);*/
}
internal void SaveWired()
{
uint itemID = Request.PopWiredUInt();
RoomItem Item = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId).GetRoomItemHandler().GetItem(itemID);
WiredSaver.SaveWired(Session, Item, Request);
}
internal void SaveWiredConditions()
{
uint itemID = Request.PopWiredUInt();
RoomItem Item = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId).GetRoomItemHandler().GetItem(itemID);
WiredSaver.SaveWired(Session, Item, Request);
}
internal void PlaceBot()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || ((Room.AllowPets == 0) && !Room.CheckRights(Session, true)) || !Room.CheckRights(Session, true))
{
return;
}
uint PetId = Request.PopWiredUInt();
RoomBot Bot = Session.GetHabbo().GetInventoryComponent().GetBot(PetId);
if (Bot == null)
{
Logging.WriteLine("Null bot found" + PetId);
return;
}
int X = Request.PopWiredInt32();
int Y = Request.PopWiredInt32();
//Session.SendNotif("RoomID: " + Room.RoomId + "\nBotID: " + BotId + "\nX: " + X + "\nY: " + Y + "");
if (!Room.GetGameMap().CanWalk(X, Y, false) || !Room.GetGameMap().ValidTile(X, Y))
{
Session.SendNotif("You cannot place a bot here!");
return;
}
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE bots SET room_id = '" + Room.RoomId + "', x = '" + X + "', y = '" + Y + "' WHERE id = '" + PetId + "'");
}
Bot.RoomId = Room.RoomId;
List<RandomSpeech> RndSpeechList = new List<RandomSpeech>();
List<BotResponse> BotResponse = new List<Silverwave.HabboHotel.RoomBots.BotResponse>();
RoomUser PetUser = Room.GetRoomUserManager().DeployBot(new RoomBot(PetId,Bot.OwnerId, Bot.RoomId, AIType.Generic, "freeroam", Bot.Name, Bot.Motto, Bot.Look, X, Y, 0, 0, 0, 0, 0, 0, ref RndSpeechList, ref BotResponse,Bot.Gender,Bot.DanceId), null);
Session.GetHabbo().GetInventoryComponent().MoveBotToRoom(PetId);
Session.SendMessage(Session.GetHabbo().GetInventoryComponent().SerializeBotInventory());
}
internal void Sit()
{
RoomUser user = Session.GetHabbo().CurrentRoom.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (user.Statusses.ContainsKey("lie") || user.isLying || user.RidingHorse || user.IsWalking)
{
return;
}
if (!user.Statusses.ContainsKey("sit"))
{
if ((user.RotBody % 2) == 0)
{
if (user == null)
return;
try
{
user.Statusses.Add("sit", "1.0");
user.Z -= 0.35;
user.isSitting = true;
user.UpdateNeeded = true;
}
catch { }
}
else
{
user.RotBody--;
user.Statusses.Add("sit", "1.0");
user.Z -= 0.35;
user.isSitting = true;
user.UpdateNeeded = true;
}
}
else if (user.isSitting == true)
{
user.Z += 0.35;
user.Statusses.Remove("sit");
user.Statusses.Remove("1.0");
user.isSitting = false;
user.UpdateNeeded = true;
}
}
internal void PickUpBot()
{
uint BotId = Request.PopWiredUInt();
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
RoomUser BotUser = Room.GetRoomUserManager().GetBot(BotId);
uint ownerID = 0;
using (IQueryAdapter adapter = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
try
{
adapter.setQuery("SELECT user_id FROM bots WHERE id = " + BotId);
ownerID = Convert.ToUInt32((adapter.getInteger()));
}
catch (Exception ex)
{
Logging.LogQueryError(ex, "Error @ Bot pickup for Bot:" + BotId);
}
}
if ((Session == null) || (Session.GetHabbo() == null) || (Session.GetHabbo().GetInventoryComponent() == null) || (BotUser == null) || (this.Session.GetHabbo().Id != ownerID))
return;
Session.GetHabbo().GetInventoryComponent().AddBot(BotUser.BotData);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
dbClient.runFastQuery("UPDATE bots SET room_id = '0' WHERE id = '" + BotId + "' LIMIT 1");
Room.GetRoomUserManager().RemoveBot(BotUser.VirtualId, false);
Session.SendMessage(Session.GetHabbo().GetInventoryComponent().SerializeBotInventory());
}
internal void CancelMysteryBox()
{
uint ItemId = Request.PopWiredUInt();
RoomUser User = Session.GetHabbo().CurrentRoom.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
RoomItem item = Session.GetHabbo().CurrentRoom.GetRoomItemHandler().GetItem(User.GateId);
if (item == null)
{
return;
}
if (item.InteractingUser == Session.GetHabbo().Id)
item.InteractingUser = 0;
else if (item.InteractingUser2 == Session.GetHabbo().Id)
item.InteractingUser2 = 0;
User.GateId = 0;
string BoxColour = item.ExtraData.Split(Convert.ToChar(5))[0];
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("UPDATE items SET extra_data = '" + BoxColour + Convert.ToChar(5) + "2' WHERE id=" + item.Id + " LIMIT 1;");
}
item.ExtraData = BoxColour + Convert.ToChar(5) + "2";
item.UpdateNeeded = true;
item.UpdateState(true, true);
}
internal void ReturnMysBox()
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
bool QueryReq = false;
dbClient.setQuery("SELECT * FROM items WHERE id=" + Session.GetHabbo().MysteryBoxId + " LIMIT 1");
DataRow Row = dbClient.getRow();
if (Row != null)
{
if (!string.IsNullOrEmpty(Row[2].ToString()))
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(uint.Parse(Row[2].ToString()));
if (Room != null)
{
RoomItem Item = Room.GetRoomItemHandler().GetItem(Session.GetHabbo().MysteryBoxId);
if (Item != null)
{
Session.GetHabbo().GetInventoryComponent().AddItem(Item);
Room.GetRoomItemHandler().RemoveFurniture(Session, Session.GetHabbo().MysteryBoxId, true);
Session.GetHabbo().GetInventoryComponent().UpdateItems(true);
return;
}
else
{
QueryReq = true;
}
}
else
{
QueryReq = true;
}
}
else
{
QueryReq = true;
}
if(QueryReq)
dbClient.runFastQuery("UPDATE items SET room_id=0 WHERE id=" + Session.GetHabbo().MysteryBoxId + " LIMIT 1");
Session.GetHabbo().GetInventoryComponent().AddNewItem(uint.Parse(Row[1].ToString()), 4700, Row[3].ToString(), 0, true, true, 0, 0);
Session.GetHabbo().GetInventoryComponent().UpdateItems(true);
}
}
}
internal void SaveMannequin()
{
uint ItemId = Request.PopWiredUInt();
string Name = Request.PopFixedString();
RoomItem Item = Session.GetHabbo().CurrentRoom.GetRoomItemHandler().GetItem(ItemId);
if (Item == null)
return;
if (!Item.ExtraData.Contains(Convert.ToChar(5)))
return;
if (!Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
return;
String[] Split = Item.ExtraData.Split(Convert.ToChar(5));
Split[2] = Name;
Item.ExtraData = Split[0] + Convert.ToChar(5) + Split[1] + Convert.ToChar(5) + Split[2];
Item.Serialize(Response);
Item.UpdateState(true, true);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("UPDATE items SET extra_data=@Ed WHERE id=" + Item.Id + " LIMIT 1");
dbClient.addParameter("Ed", Item.ExtraData);
dbClient.runQuery();
}
}
internal void SaveMannequin2()
{
uint ItemId = Request.PopWiredUInt();
RoomItem Item = Session.GetHabbo().CurrentRoom.GetRoomItemHandler().GetItem(ItemId);
if (Item == null)
return;
if (!Item.ExtraData.Contains(Convert.ToChar(5)))
return;
if (!Session.GetHabbo().CurrentRoom.CheckRights(Session, true))
return;
String[] Split = Item.ExtraData.Split(Convert.ToChar(5));
Split[0] = Session.GetHabbo().Gender.ToLower();
Split[1] = "";
foreach (String Str in Session.GetHabbo().Look.Split('.'))
{
if(Str.Contains("hr") || Str.Contains("hd") || Str.Contains("he") || Str.Contains("ea") || Str.Contains("ha"))
continue;
Split[1] += Str + ".";
}
Split[1] = Split[1].TrimEnd('.');
Item.ExtraData = Split[0] + Convert.ToChar(5) + Split[1] + Convert.ToChar(5) + Split[2];
Item.UpdateNeeded = true;
Item.UpdateState(true, true);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("UPDATE items SET extra_data=@Ed WHERE id=" + Item.Id + " LIMIT 1");
dbClient.addParameter("Ed", Item.ExtraData);
dbClient.runQuery();
}
}
internal void EjectFurni()
{
int Junk = Request.PopWiredInt32();
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (Room == null || !Room.CheckRights(Session))
{
return;
}
uint Itemid = Request.PopWiredUInt();
RoomItem Item = Room.GetRoomItemHandler().GetItem(Itemid);
if (Item == null)
{
return;
}
GameClient Client = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUserID(Item.UserID);
if (Item.GetBaseItem().InteractionType == Silverwave.HabboHotel.Items.InteractionType.postit)
return;
if (Client != null)
{
Room.GetRoomItemHandler().RemoveFurniture(Session, Item.Id);
Client.GetHabbo().GetInventoryComponent().AddNewItem(Item.Id, Item.BaseItem, Item.ExtraData, Item.GroupId, true, true, 0,0,0);
Client.GetHabbo().GetInventoryComponent().UpdateItems(true);
}
else
{
Room.GetRoomItemHandler().RemoveFurniture(Session, Item.Id);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("UPDATE items SET room_id='0' WHERE id=" + Item.Id + " LIMIT 1");
}
}
}
internal void MuteUser()
{
uint UserId = Request.PopWiredUInt();
uint RoomId = Request.PopWiredUInt();
uint Time = Request.PopWiredUInt();
Room Room = Session.GetHabbo().CurrentRoom;
if (Room == null || ((Room.WhoCanBan == 0 && !Room.CheckRights(Session, true)) || (Room.WhoCanBan == 1 && !Room.CheckRights(Session))))
return;
RoomUser Target = Room.GetRoomUserManager().GetRoomUserByHabbo(SilverwaveEnvironment.getHabboForId(UserId).Username);
if (Target == null)
return;
else if (Target.GetClient().GetHabbo().Rank > 3)
return;
if (Room.MutedUsers.ContainsKey(UserId))
{
if (Room.MutedUsers[UserId] < SilverwaveEnvironment.GetUnixTimestamp())
Room.MutedUsers.Remove(UserId);
else
return;
}
Room.MutedUsers.Add(UserId, uint.Parse((SilverwaveEnvironment.GetUnixTimestamp() + (Time * 60)).ToString()));
Target.GetClient().SendNotif("The room owner has muted you for " + Time + " minutes!");
}
internal void UpdateEventInfo()
{
int um = Request.PopWiredInt32();
string Name = Request.PopFixedString();
string Desc = Request.PopFixedString();
RoomData Room = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateRoomData(Session.GetHabbo().CurrentRoomId);
if (Room == null)
{
return;
}
// to-do: check rights for editing event ?
Room.Event.Name = LanguageLocale.FilterSwearwords(Name);
Room.Event.Description = LanguageLocale.FilterSwearwords(Desc);
SilverwaveEnvironment.GetGame().GetRoomEvents().UpdateEvent(Room.Event);
}
internal void HandleBotSpeechList()
{
int botId = this.Request.PopWiredInt32();
int skillType = this.Request.PopWiredInt32();
switch (skillType)
{
case 2:
{
string truncatedText = "";
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
DataTable dt;
DataRow speakingRow;
dbClient.setQuery("SELECT * FROM bots_speech WHERE bot_id = " + botId);
dt = dbClient.getTable();
if (dt != null)
{
foreach (DataRow dr in dt.Rows)
{
truncatedText += (dr["text"] + "\n");
}
dbClient.setQuery("SELECT * FROM bots WHERE id = " + botId);
speakingRow = dbClient.getRow();
truncatedText += ";#;";
truncatedText += Convert.ToString(speakingRow["automatic_chat"]);
truncatedText += ";#;";
truncatedText += Convert.ToString(speakingRow["speaking_interval"]);
}
}
ServerMessage message = new ServerMessage(Outgoing.SerializeSpeechList);
message.AppendInt32(botId);
message.AppendInt32(skillType);
message.AppendString(truncatedText);
this.Response = message;
this.SendResponse();
break;
}
case 5:
{
ServerMessage message = new ServerMessage(Outgoing.SerializeSpeechList);
message.AppendInt32(botId);
message.AppendInt32(skillType);
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT name FROM bots WHERE id = " + botId);
message.AppendString(dbClient.getString());
}
this.Response = message;
this.SendResponse();
break;
}
default:
return;
}
}
internal void ManageBotActions()
{
Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
uint BotId = Request.PopWiredUInt();
int ActionType = Request.PopWiredInt32();
string Data = SilverwaveEnvironment.FilterInjectionChars(Request.PopFixedString());
RoomUser BotUser = Room.GetRoomUserManager().GetBot(BotId);
bool newBot = false;
// Console.WriteLine("TEST1" + ActionType + ">>" + BotId);
switch (ActionType)
{
case 1:
BotUser.BotData.Look = this.Session.GetHabbo().Look;
break;
case 2:
DataTable BotSpeech;
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("SELECT text, shout FROM bots_speech WHERE bot_id = @id;");
dbClient.addParameter("id", BotId);
BotSpeech = dbClient.getTable();
}
string[] firstdata = Data.Split(new string[] {";#;"},StringSplitOptions.None);
string[] toinendata = firstdata[0].Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
string automaticChat = firstdata[1];
string speakingInterval = firstdata[2]; //seconds
if (String.IsNullOrEmpty(speakingInterval) || Convert.ToInt32(speakingInterval) <= 0)
speakingInterval = "7";
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.runFastQuery("DELETE FROM bots_speech WHERE bot_id = '" + BotId + "'");
}
for (int i = 0; i <= toinendata.Length - 1; i++)
{
using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
{
dbClient.setQuery("INSERT INTO `bots_speech` (`bot_id`, `text`) VALUES ('" + BotId + "', @data)");
dbClient.addParameter("data", toinendata[i]);
dbClient.runQuery();
dbClient.runFastQuery("UPDATE bots SET automatic_chat='" + automaticChat + "',speaking_interval=" + Convert.ToInt32(speakingInterval) + " WHERE id = " + BotId);
}
}
List<RandomSpeech> RndSpeechList = new List<RandomSpeech>();
foreach (DataRow Row2 in BotSpeech.Rows)
{
RndSpeechList.Add(new RandomSpeech((string)Row2["text"], SilverwaveEnvironment.EnumToBool(Row2["shout"].ToString())));
}
List<BotResponse> responses = new List<BotResponse>();
Room.GetRoomUserManager().RemoveBot(BotUser.VirtualId, false);
Room.GetRoomUserManager().DeployBot(new RoomBot(BotUser.BotData.BotId,BotUser.BotData.OwnerId, BotUser.BotData.RoomId, AIType.Generic, BotUser.BotData.WalkingMode, BotUser.BotData.Name, BotUser.BotData.Motto, BotUser.BotData.Look, BotUser.X, BotUser.Y, BotUser.Z, BotUser.BotData.Rot, 0, 0, 0, 0, ref RndSpeechList, ref responses, BotUser.BotData.Gender,BotUser.BotData.DanceId), null);
newBot = true;
break;
case 3:
// Stand
break;
case 4:
// Dance
if (BotUser.BotData.DanceId > 0)
{
BotUser.BotData.DanceId = 0;
}
else
{
Random rnd = new Random();
BotUser.DanceId = rnd.Next(1, 4);
BotUser.BotData.DanceId = BotUser.DanceId;
}
ServerMessage message = new ServerMessage(Outgoing.Dance);
message.AppendInt32(BotUser.VirtualId);
message.AppendInt32(BotUser.BotData.DanceId);
Session.GetHabbo().CurrentRoom.SendMessage(message);
break;
case 5:
BotUser.BotData.Name = Data;
break;
default:
break;
}
if (!newBot)
{
ServerMessage EnterMessage = new ServerMessage(Outgoing.PlaceBot);
EnterMessage.AppendInt32(1);
BotUser.Serialize(EnterMessage, Room.GetGameMap().gotPublicPool);
Room.SendMessage(EnterMessage);
}
}
internal void That()
{
Response.Init(Outgoing.AutoRoom);
Response.AppendInt32(0);
SendResponse();
}
internal void MuteAll()
{
Room Room = Session.GetHabbo().CurrentRoom;
if (Room == null || !Room.CheckRights(Session, true))
return;
Room.RoomMuted = !Room.RoomMuted;
Response.Init(Outgoing.BroadcastMessage);
Response.AppendString((Room.RoomMuted) ? "The room has been muted" : "The room has been unmuted");
Response.AppendString("");
Room.SendMessage(Response);
}
}
}