using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using Chop.Database;
using Chop.Game.Rooms;
using Chop.Game.User;
using Chop.User;
namespace Chop
{
public class GameClient
{
#region Fields
public static uint MESSAGEID_MAX = 4000;
internal delegate void requestHandler();
internal requestHandler[] mRequestHandlers;
const string POLICY = "\r\n"
+
"\r\n"
+ "\r\n"
+ "\r\n"
+ "\x0";
private uint _ID;
private Socket _socket;
private byte[] _buffer;
private bool _pinged;
private RequestParser mRequest;
internal ResponseBuilder Response;
public Habbo mHabbo;
//public HabboConsole mConsole;
public Room mRoom;
public RoomUser mRoomUser;
//public VirtualGame mGame;
//private GamePlayer mGamePlayer;
public uint ID { get { return _ID; } }
public string IP { get { return _socket.RemoteEndPoint.ToString().Split(':')[0]; } }
public bool Ponged { get { return _pinged; } set { _pinged = value; } }
public bool IsLoggedIn { get { return mHabbo != null; } }
#endregion
#region Properties
//public GamePlayer GamePlayer
//{
// get
// {
// return mGamePlayer;
// }
// set
// {
// if (value != null)
// value.mClient = this;
// mGamePlayer = value;
// }
//}
internal bool StillAlive() // this was a thriump. I'm making a note here: HUGE SUCCESS!
{
return (_socket != null);
}
#endregion
#region Connection stuff
public GameClient(uint ID, Socket Socket)
{
_ID = ID;
_socket = Socket;
_pinged = true;
mRequestHandlers = new requestHandler[MESSAGEID_MAX + 1];
_buffer = Core.ClientManager.BufferManager.TakeBuffer(512);
Response = new ResponseBuilder();
_socket.BeginReceive(_buffer, 0, 512, SocketFlags.None, new AsyncCallback(DataIn), null);
}
private void DataIn(IAsyncResult iAr)
{
try
{
int bytesIn = _socket.EndReceive(iAr);
if (bytesIn > 0)
{
int pos = 0;
string data = Encoding.Default.GetString(_buffer, 0, bytesIn);
if (data.StartsWith("(Encoding.Default.GetBytes(POLICY)));
Core.ClientManager.RemoveClient(this);
return;
}
while (pos < bytesIn)
{
int length = BitConverter.ToInt32(new byte[] { _buffer[pos + 3], _buffer[pos + 2], _buffer[pos + 1], _buffer[pos], }, 0);
pos += 4;
string cData = Encoding.Default.GetString(_buffer, pos, length);
string consoleText = cData; // We want to replace some chars with readable text!
for (int i = 0; i <= 13; i++) // char 0-13
{
consoleText = consoleText.Replace(Convert.ToChar(i).ToString(), "{" + i + "}");
}
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("Incoming data from client [" + _ID + "]: \"" + consoleText + "\"");
Console.ResetColor();
byte[] message = new byte[length];
Array.Copy(_buffer, pos, message, 0, length);
mRequest = RequestParser.Parse(message);
try
{
if (Core.ClientManager.RequestHandlers[mRequest.HeaderID] != null)
{
Core.ClientManager.RequestHandlers[mRequest.HeaderID].Handle(this, mRequest);
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Message ID [" + mRequest.HeaderID + "] is not registered"); // Not registered
Console.ResetColor();
Core.DebugLog.AddValue("unknownid", mRequest.HeaderID.ToString());
}
}
catch (NotImplementedException x)
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Message ID [" + mRequest.HeaderID + "], " + Core.ClientManager.RequestHandlers[mRequest.HeaderID].GetType().ToString() + " is not implemented yet.");
Console.ResetColor();
}
//if (mRequest.HeaderID <= MESSAGEID_MAX)
// if (mRequestHandlers[mRequest.HeaderID] != null)
// mRequestHandlers[mRequest.HeaderID].Invoke();
// else
// {
// Console.WriteLine("Message ID [" + mRequest.HeaderID + "] is not registered"); // Not registered
// //Core.DebugLog.AddValue("unknownid", mRequest.HeaderID + ": " + mRequest.Content);
// }
//else
//{
// Console.WriteLine("Message ID [" + mRequest.HeaderID + "] is over the max message ID"); // Over max ID
// //Core.DebugLog.AddValue("unknownovermaxid", mRequest.HeaderID + ": " + mRequest.Content);
//}
pos += length;
}
}
else
{
Core.ClientManager.RemoveClient(this);
return;
}
_socket.BeginReceive(_buffer, 0, 512, SocketFlags.None, new AsyncCallback(DataIn), null);
}
catch (SocketException) // Nothing special
{
Core.ClientManager.RemoveClient(this);
return;
}
catch (ObjectDisposedException) // Nothing special
{
Core.ClientManager.RemoveClient(this);
return;
}
catch (Exception x)
{
Core.DebugLog.AddValue("disconnect", x.ToString());
Console.WriteLine(x.ToString() + " (GameClient.DataIn)");
Core.ClientManager.RemoveClient(this);
return;
}
}
public void SendData(List data)
{
try
{
string consoleText = Encoding.Default.GetString(data.ToArray()); ; // We want to replace some chars with readable text!
for (int i = 0; i <= 13; i++) // char 0-13
{
consoleText = consoleText.Replace(Convert.ToChar(i).ToString(), "{" + i + "}");
}
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("Outgoing data to client [" + _ID + "]: \"" + consoleText + "\"");
Console.ResetColor();
_socket.Send(data.ToArray());
//mSocket.BeginSend(b, 0, b.Length, SocketFlags.None, new AsyncCallback(DataSent), null);
}
catch (SocketException) // Nothing special
{
Core.ClientManager.RemoveClient(this);
}
catch (ObjectDisposedException) // Nothing special
{
Core.ClientManager.RemoveClient(this);
}
catch (Exception x)
{
Console.WriteLine(x + " (GameClient.SendData)");
Core.ClientManager.RemoveClient(this);
}
}
public void SendData(string data)
{
}
//public void DataSent(IAsyncResult iAr)
//{
//}
internal void SendResponse()
{
SendMessage(Response);
}
public void SendMessage(ResponseBuilder Message)
{
SendData(Message.ToBytes());
}
public void Stop()
{
if (!StillAlive())
return;
//// First we destory all habbo related stuff, like kicking from rooms.
//if (mRoomUser != null && mRoom != null)
// mRoomUser.Destroy();
_socket.Close();
_socket = null;
Core.ClientManager.BufferManager.ReturnBuffer(_buffer);
_buffer = null;
}
#endregion
#region Packet registration
internal void RegisterGlobal()
{
//mRequestHandlers[196] = new requestHandler(PONG);
//mRequestHandlers[202] = new requestHandler(GENERATEKEY);
//mRequestHandlers[206] = new requestHandler(INIT_CRYPTO);
//mRequestHandlers[49] = new requestHandler(GDATE);
//mRequestHandlers[42] = new requestHandler(APPROVENAME);
//mRequestHandlers[203] = new requestHandler(APPROVE_PASSWORD);
//mRequestHandlers[197] = new requestHandler(APPROVEEMAIL);
//mRequestHandlers[46] = new requestHandler(AC);
//mRequestHandlers[146] = new requestHandler(PARENT_EMAIL_REQUIRED);
//mRequestHandlers[131] = new requestHandler(COPPA_REG_GETREALTIME);
//mRequestHandlers[43] = new requestHandler(REGISTER);
//mRequestHandlers[4] = new requestHandler(TRY_LOGIN);
//mRequestHandlers[204] = new requestHandler(SSO);
//mRequestHandlers[7] = new requestHandler(GET_INFO);
//mRequestHandlers[8] = new requestHandler(GET_CREDITS);
//mRequestHandlers[44] = new requestHandler(HANDLER44);
//// console
//mRequestHandlers[12] = new requestHandler(FRIENDLIST_INIT);
//mRequestHandlers[36] = new requestHandler(MESSENGER_MOTTO);
//mRequestHandlers[37] = new requestHandler(MESSENGER_ACCEPTBUDDY);
//mRequestHandlers[38] = new requestHandler(MESSENGER_DECLINEBUDDY);
//mRequestHandlers[39] = new requestHandler(MESSENGER_REQUESTBUDDY);
//mRequestHandlers[40] = new requestHandler(MESSENGER_REMOVEBUDDY);
//mRequestHandlers[41] = new requestHandler(FINDUSER);
//mRequestHandlers[33] = new requestHandler(MESSENGER_SENDMSG);
//mRequestHandlers[32] = new requestHandler(MESSENGER_MARKREAD);
//mRequestHandlers[15] = new requestHandler(MESSENGER_UPDATE);
//mRequestHandlers[201] = new requestHandler(MESSENGER_REPORTMESSAGE);
//mRequestHandlers[157] = new requestHandler(GETAVAILABLEBADGES);
//mRequestHandlers[129] = new requestHandler(REDEEM_VOUCHER);
//// habbo club
//mRequestHandlers[26] = new requestHandler(SCR_GET_USER_INFO);
//mRequestHandlers[190] = new requestHandler(SCR_BUY);
//// navigator
//mRequestHandlers[182] = new requestHandler(GETINTERST);
//mRequestHandlers[2] = new requestHandler(room_directory);
//mRequestHandlers[126] = new requestHandler(GETROOMAD);
//mRequestHandlers[60] = new requestHandler(G_HMAP);
//mRequestHandlers[151] = new requestHandler(GETUSERFLATCATS);
//mRequestHandlers[264] = new requestHandler(GET_RECOMMENDED_ROOMS);
//mRequestHandlers[29] = new requestHandler(CREATEFLAT);
//mRequestHandlers[153] = new requestHandler(SETFLATCAT);
//mRequestHandlers[25] = new requestHandler(SETFLATINFO);
//mRequestHandlers[16] = new requestHandler(SUSERF);
//mRequestHandlers[21] = new requestHandler(GETFLATINFO);
//mRequestHandlers[57] = new requestHandler(TRYFLAT);
//mRequestHandlers[59] = new requestHandler(GOTOFLAT);
//mRequestHandlers[159] = new requestHandler(HANDLER159);
//mRequestHandlers[160] = new requestHandler(HANDLER160);
//mRequestHandlers[161] = new requestHandler(HANDLER161);
//mRequestHandlers[162] = new requestHandler(HANDLER162);
//mRequestHandlers[163] = new requestHandler(HANDLER163);
//mRequestHandlers[165] = new requestHandler(HANDLER165);
//mRequestHandlers[167] = new requestHandler(HANDLER167);
//mRequestHandlers[168] = new requestHandler(HANDLER168);
//mRequestHandlers[170] = new requestHandler(HANDLER170);
//mRequestHandlers[171] = new requestHandler(HANDLER171);
//mRequestHandlers[150] = new requestHandler(NAVIGATE);
//// CFH
//mRequestHandlers[198] = new requestHandler(CHANGECALLCATEGORY);
//mRequestHandlers[199] = new requestHandler(MESSAGETOCALLER);
//mRequestHandlers[48] = new requestHandler(PICK_CRYFORHELP);
//mRequestHandlers[323] = new requestHandler(FOLLOW_CRYFORHELP);
}
public void RegisterRoom()
{
//mRequestHandlers[53] = new requestHandler(QUIT);
//mRequestHandlers[61] = new requestHandler(G_USRS);
//mRequestHandlers[62] = new requestHandler(G_OBJS);
//mRequestHandlers[63] = new requestHandler(G_ITEMS);
//mRequestHandlers[64] = new requestHandler(G_STAT);
//mRequestHandlers[213] = new requestHandler(GET_FURNI_REVISIONS);
//mRequestHandlers[75] = new requestHandler(MOVE);
//mRequestHandlers[93] = new requestHandler(DANCE);
//mRequestHandlers[94] = new requestHandler(WAVE);
//mRequestHandlers[88] = new requestHandler(STOP);
//mRequestHandlers[52] = new requestHandler(CHAT);
//mRequestHandlers[55] = new requestHandler(SHOUT);
//mRequestHandlers[56] = new requestHandler(WHISPER);
//mRequestHandlers[116] = new requestHandler(SWIMSUIT);
//mRequestHandlers[237] = new requestHandler(GET_PENDING_CALLS_FOR_HELP);
//mRequestHandlers[238] = new requestHandler(DELETE_PENDING_CALLS_FOR_HELP);
//mRequestHandlers[86] = new requestHandler(CALL_FOR_HELP);
//mRequestHandlers[65] = new requestHandler(GETSTRIP);
}
public void UnRegisterRoom()
{
mRequestHandlers[61] = null;
mRequestHandlers[62] = null;
mRequestHandlers[64] = null;
mRequestHandlers[75] = null;
mRequestHandlers[93] = null;
mRequestHandlers[94] = null;
mRequestHandlers[88] = null;
mRequestHandlers[52] = null;
mRequestHandlers[55] = null;
mRequestHandlers[56] = null;
mRequestHandlers[116] = null;
mRequestHandlers[237] = null;
mRequestHandlers[238] = null;
mRequestHandlers[86] = null;
mRequestHandlers[65] = null;
}
public void RegisterCatalogue()
{
//mRequestHandlers[100] = new requestHandler(GPRC);
//mRequestHandlers[101] = new requestHandler(GCIX);
//mRequestHandlers[102] = new requestHandler(GCAP);
}
public void UnRegisterCatalogue()
{
mRequestHandlers[100] = null;
mRequestHandlers[101] = null;
mRequestHandlers[102] = null;
}
#endregion
#region Misc
public void SendCreditAmount(bool pReload)
{
if (pReload)
using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
{
dbClient.AddParamWithValue("id", mHabbo.mID);
mHabbo.mCredits = dbClient.ReadInt32("SELECT credits FROM habbos WHERE id = @id");
}
ResponseBuilder sResponse = new ResponseBuilder(6); // "@F"
sResponse.Append(mHabbo.mCredits + ".0");
SendMessage(sResponse);
}
#endregion
#region Packet proccessing
//private void HandleReleaseInfo()
//{
// string clientRevision = mRequest.ReadString();
// Response.Init(324);
// SendResponse();
//}
//#region Misc
/////
///// 196 - "CD" - "PONG"
/////
//private void PONG()
//{
// mPonged = true;
//}
/////
///// 206 - "CN" - "INIT_CRYPTO"
/////
//private void INIT_CRYPTO()
//{
// mResponse.Init(277); // "DU"
// mResponse.AppendInt32(1);
// mResponse.AppendInt32(0);
// SendResponse();
//}
/////
///// 202 - "CJ" - "GENERATEKEY"
/////
//private void GENERATEKEY()
//{
// mResponse.Init(257); // "DA"
// mResponse.AppendInt32(6);
// mResponse.AppendInt32(0);
// mResponse.AppendInt32(1);
// mResponse.AppendInt32(1);
// mResponse.AppendInt32(1);
// mResponse.AppendInt32(3);
// mResponse.AppendInt32(0);
// mResponse.AppendInt32(2);
// mResponse.AppendInt32(1);
// mResponse.AppendInt32(4);
// mResponse.AppendInt32(1);
// mResponse.AppendInt32(5);
// mResponse.AppendString(Core.Config.GetString("core.date.format")); // Date format
// SendResponse();
// mResponse.Init(8); // "@H"
// mResponse.Append("[100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,176,177,178,180,185,190,195,200,205,206,207,210,215,220,225,230,235,240,245,250,255,260,265,266,267,270,275,280,281,285,290,295,300,305,500,505,510,515,520,525,530,535,540,545,550,555,565,570,575,580,585,590,595,596,600,605,610,615,620,625,626,627,630,635,640,645,650,655,660,665,667,669,670,675,680,685,690,695,696,700,705,710,715,720,725,730,735,740]");
// SendResponse();
//}
/////
///// 49 - "@q" - "GDATE"
/////
//private void GDATE()
//{
// mResponse.Init(163); // "Bc"
// mResponse.Append(DateTime.Today.ToString(Core.Config.GetString("core.date.format")));
// SendResponse();
//}
//private void REDEEM_VOUCHER() // "BA": "REDEEM_VOUCHER"
//{
// // ERRORS:
// // 3 = must be redeemed on website
// // 2 = product delivery failed
// // 1 = invalid code
// // 0 = technical error
// int sErrorID = -1;
// DataRow row = null;
// Voucher sVoucher = null;
// try
// {
// string sCode = mRequest.PopString();
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// dbClient.AddParamWithValue("code", sCode);
// row = dbClient.ReadDataRow("SELECT * FROM vouchers WHERE code = @code", true);
// }
// }
// catch { sErrorID = 0; }
// if (row == null && sErrorID == -1) // do not overwrite error
// sErrorID = 1;
// if (sErrorID == -1)
// {
// // Now that we know the voucher exists, we parse it
// sVoucher = Voucher.Parse(row);
// if (sVoucher.mOnWebsiteOnly) // must redeem on site
// sErrorID = 3;
// }
// if (sErrorID != -1) // Something went wrong
// {
// mResponse.Init(213); // "CU"
// mResponse.Append(sErrorID);
// SendResponse();
// return;
// }
// // delete vouchet
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// dbClient.AddParamWithValue("code", sVoucher.mCode);
// dbClient.ExecuteQuery("DELETE FROM vouchers WHERE code = @code");
// }
// // update credits
// mHabbo.mCredits += sVoucher.mReward;
// mHabbo.UpdateColumn("credits", mHabbo.mCredits);
// SendCreditAmount(false);
// mResponse.Init(212); // "CT"
// SendResponse();
//}
//private void SCR_BUY() // "B~": "SCR_BUY"
//{
// /*string sSubscription = */mRequest.PopString();
// int sSubscriptionType = mRequest.PopWiredInt();
// int sMonths = 0;
// int sPrice = 0;
// switch (sSubscriptionType)
// {
// case 1:
// {
// sMonths = 1;
// sPrice = 25;
// break;
// }
// case 2:
// {
// sMonths = 3;
// sPrice = 60;
// break;
// }
// case 3:
// {
// sMonths = 6;
// sPrice = 105;
// break;
// }
// }
// if (sPrice > mHabbo.mCredits) // not enought credits
// {
// return;
// }
// // Update
// mHabbo.mCredits -= sPrice;
// mHabbo.UpdateColumn("credits", mHabbo.mCredits);
// mHabbo.mSubscription.AddPeriods(sMonths);
// // Notify
// mResponse.Init(7); // "@G"
// mResponse.Append(mHabbo.mSubscription.GetStatus());
// SendResponse();
//}
//private void HANDLER44() // "@l": Change user settings (figure, emails, motto)
//{
// string figure = mHabbo.mFigure;
// string motto = mHabbo.mMotto;
// bool emails = false;
// for (int i = 0; i < 3; i++)
// {
// if (mRequest.GetRestContent == string.Empty)
// break;
// mRequest.PopBase64Int(); // parameter ID
// if (i == 0) // figure
// figure = mRequest.PopString();
// else if (i == 1)
// motto = mRequest.PopString();
// else
// emails = mRequest.PopBase64Boolean();
// }
// var contents = new Dictionary
// {{"figure", figure}, {"motto", motto}};
// mHabbo.UpdateColumns(contents);
//}
//#endregion
//#region Register
/////
///// 42 - "@j" - "APPROVENAME"
/////
//private void APPROVENAME()
//{
// // Errors:
// // 0 = valid
// // 1 = too long
// // 2 = unacceptable to staff
// // 3 = 2 (unacceptable to staff)
// // 4 = name taken
// string Name = mRequest.PopString();
// int ErrorID = 0;
// if (Name.Length > 15) // Name too long
// ErrorID = 1;
// if (Name.Length < 2) // Name too short
// ErrorID = 2;
// else if (Name.Contains("MOD-") || Helper.ContainsOtherChars(Name, Core.Config.GetString("game.registration.characters.allowed")) || Core.BobbaFilter.ContainsBobba(Name)) // invalid name
// ErrorID = 3;
// else if (Core.HabboManager.HabboExists(Name)) // name taken
// ErrorID = 4;
// mResponse.Init(36); // "@d"
// mResponse.AppendInt32(ErrorID);
// SendResponse();
//}
//private void PARENT_EMAIL_REQUIRED() // "BR": PARENT_EMAIL_REQUIRED
//{
// string sBirthDate = mRequest.PopString();
// string sName = mRequest.PopString();
// int sMessageID;
// try
// {
// mResponse.Init(217); // "CY"
// DateTime sBirth = DateTime.Parse(sBirthDate, new System.Globalization.CultureInfo("en-GB"));
// sMessageID = sBirth.Year >= DateTime.Now.Year - Core.Config.GetInt("game.registration.age.parentmail") ? 0 : 1;
// }
// catch
// {
// sMessageID = 0;
// }
// mResponse.Append(sMessageID);
// SendResponse();
//}
/////
///// 203 - "CK" - "APPROVE_PASSWORD"
/////
//private void APPROVE_PASSWORD()
//{
// // Errors:
// // 0 = valid
// // 1 = too short
// // 2 = too long
// // 3 = invalid chars
// // 4 = needs atleast 1 number
// // 5 = name & password too similar
// // must be 6 chr long
// // only chars = 1234567890qwertyuiopasdfg hjklzxcvbnm-=?!@@:.,
// string Name = mRequest.PopString();
// string Password = mRequest.PopString();
// int ErrorID = 0;
// if (Password.Length < 6)
// ErrorID = 1;
// else if (Password.Length > 10)
// ErrorID = 2;
// else if (Helper.ContainsOtherChars(Password, Core.Config.GetString("game.registration.characters.allowed")))
// ErrorID = 3;
// else if (!Helper.ContainsNumber(Password))
// ErrorID = 4;
// else if (Password.ToLower().Contains(Name.ToLower()))
// ErrorID = 5;
// mResponse.Init(282); // "DZ"
// mResponse.AppendInt32(ErrorID);
// SendResponse();
//}
/////
///// 197 - "CK" - "APPROVEEMAIL"
/////
//private void APPROVEEMAIL()
//{
// string Mail = mRequest.PopString();
// if (Mail.Contains('@') && Mail.Contains('.')) // TODO: Maybe better check?
// mResponse.Init(271); // "DO"
// else
// mResponse.Init(272); // "DP"
// SendResponse();
//}
/////
///// 46 - "@n" - "AC"
/////
//private void AC()
//{
// try
// {
// DateTime Birth = DateTime.Parse(mRequest.Content, new System.Globalization.CultureInfo("en-GB"));
// if (Birth.Year > DateTime.Now.Year - Core.Config.GetInt("game.registration.age.min"))
// mResponse.Init(272); // "DP"
// else if (Birth.Year < DateTime.Now.Year - Core.Config.GetInt("game.registration.age.max"))
// mResponse.Init(272); // "DP"
// else
// mResponse.Init(271); // "DO"
// }
// catch
// {
// mResponse.Init(272); // "DP"
// }
// SendResponse();
//}
/////
///// 131 - "BC" - "COPPA_REG_GETREALTIME"
/////
//private void COPPA_REG_GETREALTIME()
//{
// mResponse.Init(217); // "CY"
// mResponse.Append(0);
// //mResponse.Init(214); // "CV"
// SendResponse();
//}
/////
///// 43 - "@k" - "REGISTER"
/////
//private void REGISTER()
//{
// #region Decoding
// //newUser.sPassword = FuseMessage.getStructured(3, mPacketBody);
// //newUser.sFigure = FuseMessage.getStructured(4, mPacketBody);
// //newUser.sSex = FuseMessage.getStructured(5, mPacketBody);
// //newUser.sMission = FuseMessage.getStructured(6, mPacketBody);
// //newUser.sEmail = FuseMessage.getStructured(7, mPacketBody);
// //newUser.sDOB = FuseMessage.getStructured(8, mPacketBody);
// //mRequest.Content = mRequest.Content.Replace("A@", "@E");
// string name = "MOD-|"; // mRequest.GetStructured(2);
// string figure = "f"; // mRequest.GetStructured(4);
// char gender = 'g'; // Convert.ToChar(mRequest.GetStructured(5));
// string mail = "m"; // mRequest.GetStructured(7);
// string birth = "b"; // mRequest.GetStructured(8);
// string password = "p"; // mRequest.GetStructured(3);
// bool ReceiveMails = false;
// for (int i = 0; i < 6; i++)
// {
// int id = mRequest.PopBase64Int();
// string content = mRequest.PopString();
// switch (id)
// {
// case 2:
// name = content;
// break;
// case 4:
// figure = content;
// break;
// case 5:
// gender = Convert.ToChar(content);
// break;
// case 6: // Unknown, maybe parent mail?
// break;
// case 7:
// mail = content;
// break;
// case 8:
// birth = content;
// break;
// }
// }
// // Get rid of trash
// mRequest.PopBase64Int();
// mRequest.PopBase64Int();
// mRequest.PopBase64Int();
// mRequest.PopBase64Int();
// ReceiveMails = mRequest.PopBase64Boolean();
// // More trash...
// mRequest.PopBase64Int();
// password = mRequest.PopString();
// #endregion
// #region Checking
// bool Error = false;
// if (name.Length > 15) // Name too long
// Error = true;
// else if (name.Length < 2) // Name too short
// Error = true;
// else if (name.Contains("MOD-") || Helper.ContainsOtherChars(name, Core.Config.GetString("game.registration.characters.allowed")) || Core.BobbaFilter.ContainsBobba(name)) // invalid name
// return;
// else if (Core.HabboManager.HabboExists(name)) // name taken
// Error = true;
// if (password.Length < 6)
// Error = true;
// else if (password.Length > 10)
// Error = true;
// else if (Helper.ContainsOtherChars(password, Core.Config.GetString("game.registration.characters.allowed")))
// Error = true;
// else if (!Helper.ContainsNumber(password))
// Error = true;
// else if (password.ToLower().Contains(name.ToLower()))
// Error = true;
// try
// {
// DateTime BirthTime = DateTime.Parse(birth, new System.Globalization.CultureInfo("en-GB"));
// if (BirthTime.Year > DateTime.Now.Year - Core.Config.GetInt("game.registration.age.min"))
// Error = true;
// else if (BirthTime.Year < DateTime.Now.Year - Core.Config.GetInt("game.registration.age.max"))
// Error = true;
// }
// catch
// {
// Error = true;
// }
// if (!(mail.Contains('@') && mail.Contains('.'))) // TODO: Maybe better check?
// Error = true;
// if (gender != 'M' && gender != 'F')
// Error = true;
// // TODO: Figure check
// if (Error)
// {
// Core.ClientManager.RemoveClient(this);
// return;
// }
// #endregion
// #region Saving
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// dbClient.AddParamWithValue("name", name);
// dbClient.AddParamWithValue("figure", figure);
// dbClient.AddParamWithValue("gender", gender);
// dbClient.AddParamWithValue("mail", mail);
// dbClient.AddParamWithValue("birth", birth);
// dbClient.AddParamWithValue("password", password);
// dbClient.AddParamWithValue("credits", Core.Config.GetInt("game.registration.default.credits"));
// dbClient.AddParamWithValue("motto", Core.Config.GetString("game.registration.default.motto"));
// dbClient.ExecuteQuery("INSERT INTO habbos(name,figure,gender,mail,birth,password,credits,motto) VALUES(@name,@figure,@gender,@mail,@birth,@password,@credits,@motto)");
// }
// #endregion
//}
//#endregion
//#region Login
//private void ClientInit()
//{
//}
/////
///// 4 - "@D" - "TRY_LOGIN"
/////
//private void TRY_LOGIN()
//{
// string Username = mRequest.PopString();
// string Password = mRequest.PopString();
// DataRow row;
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// dbClient.AddParamWithValue("username", Username);
// row = dbClient.ReadDataRow("SELECT * FROM habbos WHERE name = @username");
// }
// if (row == null) // User don't exists!
// {
// mResponse.Init(33); // "@a"
// mResponse.Append("login incorrect: Wrong username");
// SendResponse();
// return;
// }
// else if (row["password"].ToString() != Password) // Wrong password!
// {
// mResponse.Init(33); // "@a"
// mResponse.Append("login incorrect: Wrong password");
// SendResponse();
// return;
// }
// DataRow banRow;
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// dbClient.AddParamWithValue("id", row["id"]);
// banRow = dbClient.ReadDataRow("SELECT * FROM bans WHERE habboid = @id");
// }
// if (banRow != null) // ban fond
// {
// int i = DateTime.Compare(DateTime.Parse(banRow["expires"].ToString(), new System.Globalization.CultureInfo("en-GB")), DateTime.Now);
// if (i < 0) // Ban expired
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// dbClient.AddParamWithValue("id", row["id"]);
// dbClient.ExecuteQuery("DELETE FROM bans WHERE habboid = @id");
// }
// else
// {
// mResponse.Init(35); // "@c"
// mResponse.Append(banRow["message"]);
// SendResponse();
// Thread.Sleep(10000);
// Core.ClientManager.RemoveClient(this);
// return;
// }
// }
// if (Core.ClientManager.GetClientByHabbo(row["name"].ToString()) != null) // Aleredy logged in, disconnect old
// Core.ClientManager.RemoveClient(Core.ClientManager.GetClientByHabbo(row["name"].ToString()));
// mHabbo = Habbo.Parse(row);
// mHabbo.mClient = this;
// mHabbo.mLastVisit = DateTime.Now.ToString("dd'.'MM'.'yyyy HH':'mm");
// mHabbo.UpdateColumn("lastvisit", mHabbo.mLastVisit);
// mResponse.Init(2); // "@B"
// mResponse.Append(Core.RankManager.GetRights(mHabbo.mRank));
// SendResponse();
// mResponse.Init(3); // "@C"
// SendResponse();
// mResponse.Init(8); // "@H"
// mResponse.Append("[100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,176,177,178,180,185,190,195,200,205,206,207,210,215,220,225,230,235,240,245,250,255,260,265,266,267,270,275,280,281,285,290,295,300,305,500,505,510,515,520,525,530,535,540,545,550,555,565,570,575,580,585,590,595,596,600,605,610,615,620,625,626,627,630,635,640,645,650,655,660,665,667,669,670,675,680,685,690,695,696,700,705,710,715,720,725,730,735,740,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873]");
// SendResponse();
//}
/////
///// 204 - "CL" - "SSO"
/////
//private void SSO()
//{
// string Session = mRequest.PopString();
// DataRow row;
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// dbClient.AddParamWithValue("session", Session);
// row = dbClient.ReadDataRow("SELECT * FROM habbos WHERE session = @session");
// }
// if (row == null) // User don't exists!
// {
// mResponse.Init(33); // "@a"
// mResponse.Append("login incorrect: Wrong username");
// SendResponse();
// return;
// }
// DataRow banRow;
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// dbClient.AddParamWithValue("id", row["id"]);
// banRow = dbClient.ReadDataRow("SELECT * FROM bans WHERE habboid = @id");
// }
// if (banRow != null) // ban fond
// {
// int i = DateTime.Compare(DateTime.Parse(banRow["expires"].ToString(), new System.Globalization.CultureInfo("en-GB")), DateTime.Now);
// if (i < 0) // Ban expired
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// dbClient.AddParamWithValue("id", row["id"]);
// dbClient.ExecuteQuery("DELETE FROM bans WHERE habboid = @id");
// }
// else
// {
// mResponse.Init(35); // "@c"
// mResponse.Append(banRow["message"]);
// SendResponse();
// Thread.Sleep(10000);
// Core.ClientManager.RemoveClient(this);
// return;
// }
// }
// if (Core.ClientManager.GetClientByHabbo(row["name"].ToString()) != null) // Aleredy logged in, disconnect old
// Core.ClientManager.RemoveClient(Core.ClientManager.GetClientByHabbo(row["name"].ToString()));
// mHabbo = Habbo.Parse(row);
// mHabbo.mClient = this;
// mHabbo.mLastVisit = DateTime.Now.ToString("dd'.'MM'.'yyyy HH':'mm");
// mHabbo.UpdateColumn("lastvisit", mHabbo.mLastVisit);
// mHabbo.UpdateColumn("session", "");
// mResponse.Init(2); // "@B"
// mResponse.Append(Core.RankManager.GetRights(mHabbo.mRank));
// SendResponse();
// mResponse.Init(3); // "@C"
// SendResponse();
// mResponse.Init(8); // "@H"
// mResponse.Append("[100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,176,177,178,180,185,190,195,200,205,206,207,210,215,220,225,230,235,240,245,250,255,260,265,266,267,270,275,280,281,285,290,295,300,305,500,505,510,515,520,525,530,535,540,545,550,555,565,570,575,580,585,590,595,596,600,605,610,615,620,625,626,627,630,635,640,645,650,655,660,665,667,669,670,675,680,685,690,695,696,700,705,710,715,720,725,730,735,740,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873]");
// SendResponse();
//}
//#endregion
//#region Loading
/////
///// 7 - "@G" - "GET_INFO"
/////
//private void GET_INFO()
//{
// mResponse.Init(5); // "@E"
// mResponse.Append(mHabbo.ToFuseString());
// SendResponse();
//}
/////
///// 8 - "@H" - "GET_CREDITS"
/////
//private void GET_CREDITS()
//{
// SendCreditAmount(false);
//}
//private void GETAVAILABLEBADGES() // "B]": "GETAVAILABLEBADGES"
//{
// int i = 0;
// int sCurrentBadgeOrderID = 0;
// mHabbo.LoadBadges();
// mResponse.Init(229); // "Ce"
// mResponse.AppendInt32(mHabbo.mBadges.Count);
// foreach (Badge lBadge in mHabbo.mBadges)
// {
// mResponse.AppendString(lBadge.mID);
// if (lBadge.mIsCurrent)
// sCurrentBadgeOrderID = i;
// i++;
// }
// mResponse.AppendInt32(sCurrentBadgeOrderID);
// mResponse.AppendWiredBoolean(mHabbo.mCurrentBadge != null);
// SendResponse();
//}
//private void SCR_GET_USER_INFO() // "@Z": "SCR_GET_USER_INFO"
//{
// // TODO: code hc
// string sSubscription = mRequest.PopString();
// mHabbo.LoadSubscription();
// if (mHabbo.mSubscription.mDaysRemaining > 0 && mHabbo.mSubscription.mPeriodsRemaining > 0)
// mHabbo.mSubscription.CheckStatus();
// mResponse.Init(7); // "@G"
// mResponse.Append(mHabbo.mSubscription.GetStatus());
// SendResponse();
//}
//#endregion
//#region Navigator
/////
///// 150 - "BV" - "NAVIGATE"
/////
//private void NAVIGATE()
//{
// bool hideFull = mRequest.PopWiredBoolean();
// int id = mRequest.PopWiredInt();
// NavigatorCategory category = Core.NavigatorManager.GetCategory(id);
// List rooms = Core.NavigatorManager.GetRooms(id, hideFull);
// mResponse.Init(220); // "C\"
// mResponse.AppendWiredBoolean(hideFull);
// mResponse.AppendInt32(id);
// mResponse.AppendInt32((int)category.Type);
// mResponse.AppendString(category.Name);
// mResponse.AppendInt32(0);
// mResponse.AppendInt32(10000);
// mResponse.AppendInt32(category.ParentCategory);
// if (category.Type == CategoryType.Flats)
// mResponse.AppendInt32(rooms.Count);
// foreach (NavigatorRoom room in rooms)
// mResponse.Append(room.ToFuseString(category.Type));
// foreach (NavigatorCategory c in Core.NavigatorManager.GetCategories(id))
// {
// mResponse.AppendInt32(c.ID);
// mResponse.AppendInt32(0);
// mResponse.AppendString(c.Name);
// mResponse.AppendInt32(c.Visitors);
// mResponse.AppendInt32(c.MaxVisitors);
// mResponse.AppendInt32(id);
// }
// SendResponse();
//}
//private void GETUSERFLATCATS() // "BW" - "GETUSERFLATCATS"
//{
// List categories = Core.NavigatorManager.GetCategories(CategoryType.Flats, mHabbo.mRank);
// mResponse.Init(221); // "C]"
// mResponse.AppendInt32(categories.Count);
// foreach (NavigatorCategory category in categories)
// {
// mResponse.AppendInt32(category.ID);
// mResponse.AppendString(category.Name);
// }
// SendResponse();
//}
//private void GET_RECOMMENDED_ROOMS() // "DH" - "GET_RECOMMENDED_ROOMS"
//{
// // this feature don't exists in r14?
// List rooms = Core.NavigatorManager.GetRandomRooms();
// mResponse.Init(351); // "E_"
// mResponse.AppendInt32(rooms.Count);
// foreach(NavigatorRoom room in rooms)
// mResponse.Append(room.ToFuseString(CategoryType.Flats));
// SendResponse();
//}
//private void CREATEFLAT() // "@]" - "CREATEFLAT"
//{
// int id;
// #region Parsing
// mRequest.PopArgument();
// string floor = mRequest.PopArgument(); // IDK WHAT THIS IS FOR, always "first floor"
// string name = mRequest.PopFilteredArgument();
// string model = mRequest.PopArgument();
// RoomState state = (RoomState)Enum.Parse(typeof(RoomState), mRequest.PopArgument());
// bool showOwner = mRequest.PopBooleanArgument();
// #endregion
// #region Checking
// bool Error = false;
// if (name.Length == 0)
// Error = true;
// else if (!model.StartsWith("model_"))
// Error = true;
// else if (model.Length != 7)
// Error = true;
// if (Error)
// {
// mResponse.Init(33); // "@a"
// mResponse.Append("Error creating a private room");
// SendResponse();
// return;
// }
// #endregion
// #region Saving
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// dbClient.AddParamWithValue("name", name);
// dbClient.AddParamWithValue("model", model);
// dbClient.AddParamWithValue("owner", mHabbo.mName);
// dbClient.AddParamWithValue("roomstate", ((int)state).ToString());
// dbClient.AddParamWithValue("showowner", Convert.ToInt32(showOwner));
// dbClient.ExecuteQuery("INSERT INTO rooms(name,owner,state,model,showowner) VALUES(@name,@owner,@roomstate,@model,@showowner)");
// id = dbClient.ReadInt32("SELECT MAX(id) FROM rooms WHERE owner = @owner");
// }
// #endregion
// mResponse.Init(59); // "@{"
// mResponse.AppendString(id, 13);
// mResponse.Append(name);
// SendResponse();
//}
//private void SETFLATCAT() // "BY" - "SETFLATCAT"
//{
// int roomID = mRequest.PopWiredInt();
// int categoryID = mRequest.PopWiredInt();
// NavigatorCategory category = Core.NavigatorManager.GetCategory(categoryID);
// // check if this is valid
// if(category == null)
// return;
// else if(category.mMinimumCreateRank > mHabbo.mRank)
// return;
// else if(category.Type != CategoryType.Flats)
// return;
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient()) // if user don't own room, no update to row
// {
// dbClient.AddParamWithValue("id", roomID);
// dbClient.AddParamWithValue("category", categoryID);
// dbClient.AddParamWithValue("owner", mHabbo.mName);
// dbClient.ExecuteQuery("UPDATE rooms SET category = @category WHERE id = @id AND owner = @owner");
// }
//}
//private void SETFLATINFO() // "@Y" - "SETFLATINFO"
//{
// // almost same as holo
// if (mRequest.Content[0] == '/')
// mRequest.PopArgument();
// int roomID = mRequest.PopIntArgument();
// string[] content = mRequest.PopArgument().Split(Convert.ToChar(13));
// NavigatorRoom room = Core.NavigatorManager.GetRoom(roomID);
// if(room == null)
// return;
// else if(room.mOwnerID != mHabbo.mID)
// return;
// string newDescription = room.mDescription;
// bool newAllrights = room.mAllHaveRights;
// int newMaxvisitors = room.mMaxVisitors;
// string newPassword = room.mPassword;
// foreach (string pair in content)
// {
// if (pair == "")
// continue;
// string key = pair.Split('=')[0];
// string value = pair.Split('=')[1];
// switch (key)
// {
// case "description":
// {
// newDescription = Core.BobbaFilter.FilterText(value);
// break;
// }
// case "allsuperuser":
// {
// newAllrights = value == "1";
// break;
// }
// case "maxvisitors":
// {
// newMaxvisitors = Convert.ToInt32(value);
// // check
// if (newMaxvisitors > 25 || newMaxvisitors < 10)
// newMaxvisitors = mRoom.mMaxVisitors;
// break;
// }
// case "password":
// {
// newPassword = value;
// break;
// }
// default:
// return;
// }
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// dbClient.AddParamWithValue("id", roomID);
// dbClient.AddParamWithValue("owner", mHabbo.mName);
// dbClient.AddParamWithValue("desc", newDescription);
// dbClient.AddParamWithValue("allrights", Convert.ToByte(newAllrights).ToString());
// dbClient.AddParamWithValue("visitors", newMaxvisitors);
// dbClient.AddParamWithValue("password", newPassword);
// dbClient.ExecuteQuery("UPDATE rooms SET description = @desc,allrights = @allrights,maxvisitors = @visitors,password = @password WHERE id = @id AND owner = @owner");
// }
// }
//}
//private void SUSERF() // "@P" - "SUSERF"
//{
// List rooms = Core.NavigatorManager.GetUsersRooms(mHabbo.mName);
// if (rooms.Count == 0)
// {
// mResponse.Init(57); // "@y"
// mResponse.Append(mHabbo.mName);
// SendResponse();
// return;
// }
// mResponse.Init(16); // "@P"
// foreach (NavigatorRoom room in rooms)
// {
// mResponse.AppendString(room.mID, 9);
// mResponse.AppendString(room.mName, 9);
// mResponse.AppendString(room.mOwnerName, 9);
// mResponse.AppendString(room.mState, 9);
// mResponse.AppendString('x', 9);
// mResponse.AppendString(room.Visitors, 9);
// mResponse.AppendString(room.mMaxVisitors, 9);
// mResponse.AppendString("null", 9);
// mResponse.AppendString(room.mDescription, 9);
// mResponse.AppendString(room.mDescription, 9);
// mResponse.AppendChar(13);
// }
// SendResponse();
//}
//#endregion
//#region Console/Messenger
//private void FRIENDLIST_INIT()// "@L": "FRIENDLIST_INIT"
//{
// mResponse.Init(12); // "@L"
// mResponse.AppendString(mHabbo.mConsoleMotto);
// // mResponse.Append(mConsole.GetBuddyListResponse());
// SendResponse();
// mConsole = new HabboConsole(mHabbo);
// mConsole.LoadBuddies(true);
// mResponse = mConsole.GetBuddyRequests();
// SendResponse();
// mResponse.Init(134); // "BF"
// mResponse.Append(mConsole.GetMail());
// SendResponse();
//}
//private void MESSENGER_MOTTO() // "@d": "MESSENGER_MOTTO"
//{
// string sConsoleMotto = mRequest.PopFilteredString();
// mHabbo.mConsoleMotto = sConsoleMotto;
// mHabbo.UpdateColumn("consolemotto", sConsoleMotto);
// mResponse.Init(147); // "BS"
// mResponse.AppendString(mHabbo.mConsoleMotto);
// SendResponse();
//}
//private void FINDUSER() // "@i": "FINDUSER"
//{
// string sUsername = mRequest.PopString();
// string sDestination = mRequest.PopString(); // Just guess
// mResponse.Init(128); // "B@"
// mResponse.AppendString(sDestination);
// if (Core.HabboManager.HabboExists(sUsername))
// {
// Habbo sHabbo = Core.ClientManager.GetClientByHabbo(sUsername) != null ? Core.ClientManager.GetClientByHabbo(sUsername).mHabbo : Habbo.LoadByName(sUsername);
// mResponse.AppendInt32(sHabbo.mID);
// mResponse.AppendString(sHabbo.mName);
// mResponse.AppendWiredBoolean(sHabbo.mGender == 'M');
// mResponse.AppendString(sHabbo.mConsoleMotto);
// mResponse.AppendWiredBoolean(sHabbo.mClient != null); // aka online
// mResponse.AppendString(sHabbo.GetPosition()); // in guestroom = Floor1b, (else your message)
// mResponse.AppendString(sHabbo.mLastVisit);
// mResponse.AppendString(sHabbo.mFigure);
// }
// else
// mResponse.AppendInt32(0);
// SendResponse();
//}
//private void MESSENGER_REQUESTBUDDY() // "@g": "MESSENGER_REQUESTBUDDY"
//{
// string sReceiverName = mRequest.PopString();
// mConsole.SendBuddyRequest(sReceiverName);
//}
//private void MESSENGER_ACCEPTBUDDY() // "@e": "MESSENGER_ACCEPTBUDDY"
//{
// uint sSenderID = mRequest.PopWiredUInt();
// mConsole.AcceptBuddyRequest(sSenderID);
//}
//private void MESSENGER_DECLINEBUDDY() // "@f": "MESSENGER_DECLINEBUDDY"
//{
// bool sDeleteAll = !mRequest.PopWiredBoolean();
// if (sDeleteAll)
// mConsole.DeclineAllBuddyRequests();
// else
// {
// uint sSenderID = mRequest.PopWiredUInt();
// mConsole.DeclineBuddyRequest(sSenderID);
// }
//}
//private void MESSENGER_REMOVEBUDDY() // "@h": "MESSENGER_REMOVEBUDDY"
//{
// int sCount = mRequest.PopWiredInt(); // just guess
// uint sBuddyID = mRequest.PopWiredUInt();
// mConsole.DeleteBuddy(sBuddyID);
//}
//private void MESSENGER_SENDMSG() // "@a": "MESSENGER_SENDMSG"
//{
// int sCount = mRequest.PopWiredInt(); // just guess
// List sReceivers = new List();
// for (int i = 0; i < sCount; i++)
// sReceivers.Add(mRequest.PopWiredUInt());
// string sMessage = mRequest.PopFilteredString();
// mConsole.SendMessage(sReceivers, sMessage);
//}
//private void MESSENGER_MARKREAD() // "@`": "MESSENGER_MARKREAD" 32
//{
// int sMessageID = mRequest.PopWiredInt();
// mConsole.DeleteMessage(sMessageID);
//}
//private void MESSENGER_UPDATE() // "@O": "MESSENGER_UPDATE" 15
//{
// mResponse.Init(13); // "@M"
// mResponse.Append(mConsole.GetUpdates());
// SendResponse();
//}
//private void MESSENGER_REPORTMESSAGE() // "CI" "MESSENGER_REPORTMESSAGE" 201
//{
// // TODO: Delete buddy!
// int sMessageID = mRequest.PopWiredInt();
// string sMessage;
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// sMessage = "Reported console message:\r\n" + dbClient.ReadString("SELECT message FROM console_mail WHERE id = '" + sMessageID + "'");
// if (mRoom != null)
// Core.CryForHelpManager.AddMessage(mHabbo.mName, IP, sMessage, mRoom.mID, mRoom.mName);
// else
// Core.CryForHelpManager.AddMessage(mHabbo.mName, IP, sMessage, 0, "Not in any room");
// ResponseBuilder Message = new ResponseBuilder(148); // "BT": [[#hobba_handler, #handle_cryforhelp]]
// Message.Append(Core.CryForHelpManager.GetMessage(mHabbo.mName).ToFuseString());
// Core.ClientManager.SendMessage(Message, "fuse_receive_calls_for_help");
//}
//#endregion
//#region Room loading
//private void GETINTERST() // "Bv": "GETINTERST"
//{
// string sSource = mRequest.Content;
// mResponse.Init(258); // "DB": [[#room_handler, #handle_interstitialdata]]
// mResponse.AppendString("", 9); // image url
// mResponse.Append(""); // link url
// SendResponse();
//}
//private void room_directory() // "@B": #room_directory
//{
// // ERRORS:
// // 1 = full
// // 2 = closed
// // 3 = unknown (queue_set..alert)
// bool sIsPublic = mRequest.PopBase64Boolean(); // room is public or not
// int sID = mRequest.PopWiredInt(); // ID of room
// int sErrorID = -1;
// mResponse.Init(19); // "@S": [[#room_handler, #handle_opc_ok]]
// SendResponse();
// mResponse.Init(166); // "Bf": [[#statsBrokerJs, #handle_update_stats]]
// mResponse.Append("/client");
// SendResponse();
// if (mRoom != null)
// {
// mRoomUser.Destroy();
// if (mGamePlayer != null && mGame.mIsStarting)
// {
// mResponse.Init(69); // "AE": [[#room_handler, #handle_room_ready]]
// mResponse.Append("bb_arena_5");
// mResponse.Append(' ');
// mResponse.Append(sID);
// SendResponse();
// mResponse.Init(243); // "Cs"
// mResponse.Append(mGame.mRoom.GetStageInfo());
// SendResponse();
// return;
// }
// }
// if (sErrorID > -1)
// {
// mResponse.Init(224); // "C`": [[#navigator_handler, #handle_cantconnect]]
// mResponse.AppendInt32(sErrorID);
// SendResponse();
// return;
// }
// mRoomUser = new RoomUser {mClient = this, mEnteringRoomID = sID};
// mRoomUser.mRoomEnterChecks[0] = true;
// if (sIsPublic)
// {
// using (DatabaseClient dbClient = Core.DatabaseManager.GetClient())
// {
// string roomModel = dbClient.ReadString("SELECT model FROM rooms WHERE id = '" + sID + "'");
// mResponse.Init(69); // "AE": [[#room_handler, #handle_room_ready]]
// mResponse.Append(roomModel);
// mResponse.Append(' ');
// mResponse.Append(sID);
// SendResponse();
// }
// mRoomUser.mRoomEnterChecks[1] = true;
// }
//}
//private void GETROOMAD() // "A~": "GETROOMAD"
//{
// mResponse.Init(208); // "CP"
// mResponse.Append(0);
// SendResponse();
//}
//private void G_HMAP() // "@|": "G_HMAP"
//{
// if (mRoomUser != null && mRoomUser.mRoomEnterChecks[1])
// {
// if (Core.RoomManager.ContainsRoom(mRoomUser.mEnteringRoomID))
// mRoom = Core.RoomManager.GetRoom(mRoomUser.mEnteringRoomID);
// else
// {
// mRoom = Room.Load(mRoomUser.mEnteringRoomID);
// Core.RoomManager.AddRoom(mRoom);
// }
// mRoom.AddUser(mRoomUser);
// mResponse.Init(31); // "@_": [[#room_handler, #handle_heightmap]]
// mResponse.Append(mRoom.mTemplate.Heightmap);
// SendResponse();
// }
// else if (mGame != null && mGame.mIsStarting) // enter game!
// {
// mResponse.Init(31); // "@_": [[#room_handler, #handle_heightmap]]
// mResponse.Append(mGame.mRoom.mTemplate.Heightmap);
// SendResponse();
// mResponse = mGame.mRoom.GetPlayers();
// SendResponse();
// }
//}
//private void G_USRS() // "@}": "G_USRS"
//{
// mResponse = mRoom.GetAllDetails();
// SendResponse();
//}
//private void G_OBJS() // "@~": "G_OBJS"
//{
// mResponse.Init(30); // "@^": [[#room_handler, #handle_OBJECTS]]
// mResponse.Append(mRoom.mTemplate.Publicroom_items);
// SendResponse();
// mResponse.Init(32); // "@`": [[#room_handler, #handle_activeobjects]]
// mResponse.Append("H");
// SendResponse();
// mResponse.Init(297); // "Di"
// mResponse.AppendInt32(0);
// SendResponse();
// mResponse.Init(309); // "Du"
// mResponse.AppendInt32(0);
// SendResponse();
// // Lobby test
// if (mRoom.mLobby != null)
// {
// mResponse.Init(231); // "Cg"
// mResponse.AppendInt32(0); // unknown
// mResponse.AppendString("Elite"); // ranks that can play here
// mResponse.AppendInt32(0); // min points to play here
// mResponse.AppendInt32(0); // max points to play here
// SendResponse();
// mResponse.Init(250); // "Cz"
// mResponse.AppendInt32(mRoom.mUsers.Count);
// foreach (RoomUser user in mRoom.mUsers.Values)
// {
// mResponse.AppendInt32(user.mDynamicID);
// mResponse.AppendString(1337); // points
// mResponse.AppendString("Elite"); // rank
// }
// SendResponse();
// }
//}
//private void GET_FURNI_REVISIONS() // "CU": "GET_FURNI_REVISIONS"
//{
// mResponse.Init(295); // "Dg"
// mResponse.Append(Core.CatalogueManager.FurnitureRevisions);
// SendResponse();
//}
//private void G_STAT() // "A@": "G_STAT"
//{
// mResponse = mRoom.GetAllStatuses();
// SendResponse();
//}
//private void G_ITEMS() // "@": "G_ITEMS"
//{
// mResponse.Init(45); // "@m": [[#room_handler, #handle_items]]
// mResponse.Append("");
// SendResponse();
//}
//private void GETFLATINFO() // "@U" - "GETFLATINFO"
//{
// int id = mRequest.PopIntArgument();
// NavigatorRoom room = Core.NavigatorManager.GetRoom(id);
// if (room == null)
// return;
// mResponse.Init(54); // "@v"
// mResponse.AppendWiredBoolean(room.mAllHaveRights);
// mResponse.AppendInt32((int)room.mState);
// mResponse.AppendInt32(room.mID);
// mResponse.AppendString(room.mShowOwnerName ? room.mOwnerName : "-"); // replace owner name with - if not show
// mResponse.AppendString(room.mModel);
// mResponse.AppendString(room.mName);
// mResponse.AppendString(room.mDescription);
// mResponse.AppendWiredBoolean(room.mShowOwnerName);
// mResponse.AppendWiredBoolean(room.GetCategory().mHasTrading);
// mResponse.AppendInt32(room.Visitors);
// mResponse.AppendInt32(room.mMaxVisitors);
// SendResponse();
//}
//private void TRYFLAT() // "@y" - "TRYFLAT"
//{
// int roomID = mRequest.PopIntArgument();
// bool error = false;
// if (!mRoomUser.mRoomEnterChecks[0])
// error = true;
// else if (Core.NavigatorManager.GetRoom(mRoomUser.mEnteringRoomID).GetCategory().Type != CategoryType.Flats)
// error = true;
// if (error)
// {
// mResponse.Init(224); // "C`": [[#navigator_handler, #handle_cantconnect]]
// SendResponse();
// return;
// }
// NavigatorRoom room = Core.NavigatorManager.GetRoom(mRoomUser.mEnteringRoomID);
// if (room.mOwnerID != mHabbo.mID && !Core.RankManager.RankHasRight(mHabbo.mRank, "fuse_enter_locked_rooms")) // need password/doorbell check!
// {
// switch (room.mState)
// {
// case RoomState.open: // open room, nothing to check
// break;
// case RoomState.closed: // doorbell!
// {
// if (room.Visitors == 0)
// {
// mResponse.Init(131); // "BC": [[#room_handler, #handle_flatnotallowedtoenter]]
// SendResponse(); // no answer...
// return;
// }
// ResponseBuilder r = new ResponseBuilder(91); // "A[": [[#room_handler, #handle_doorbell_ringing]]
// SendMessage(r); // user don't need anything more
// r.Append(mHabbo.mName);
// Core.RoomManager.GetRoom(room.mID).SendMessageToRights(r);
// break;
// }
// case RoomState.password: // obvious
// {
// string password = mRequest.PopArgument();
// if (password != room.mPassword) // wrong!
// {
// mResponse.Init(33); // "@a": [#navigator_handler, #handle_error]
// mResponse.Append("Incorrect flat password");
// SendResponse();
// return;
// }
// break;
// }
// }
// }
// // congratulations user, no errors!
// mRoomUser.mRoomEnterChecks[1] = true;
// mResponse.Init(41); // "@i": [[#room_handler, #handle_flat_letin]]
// SendResponse();
//}
//private void GOTOFLAT() // "@{" - "GOTOFLAT"
//{
// int roomID = mRequest.PopIntArgument();
// if (!mRoomUser.mRoomEnterChecks[1] || Core.NavigatorManager.GetRoom(mRoomUser.mEnteringRoomID).GetCategory().Type != CategoryType.Flats)
// {
// mResponse.Init(224); // "C`": [[#navigator_handler, #handle_cantconnect]]
// SendResponse();
// return;
// }
// NavigatorRoom room = Core.NavigatorManager.GetRoom(mRoomUser.mEnteringRoomID);
// mResponse.Init(69); // "AE": [[#room_handler, #handle_room_ready]]
// mResponse.AppendString(room.mModel);
// mResponse.AppendInt32(mRoomUser.mEnteringRoomID);
// SendResponse();
// if (room.mWallID != 0)
// {
// mResponse.Init(46); // "@n"
// mResponse.AppendString("wallpaper");
// mResponse.AppendString(room.mWallID);
// SendResponse();
// }
// if (room.mFloorID != 0)
// {
// mResponse.Init(46); // "@n"
// mResponse.AppendString("floor");
// mResponse.AppendString(room.mFloorID);
// SendResponse();
// }
// if (room.mOwnerID == mHabbo.mID || Core.RankManager.RankHasRight(mHabbo.mRank, "fuse_any_room_controller"))
// mRoomUser.mIsOwner = true;
// if (mRoomUser.mIsOwner)
// {
// mRoomUser.mHasRights = true;
// mResponse.Init(47); // "@o"
// SendResponse();
// }
// if (mRoomUser.mHasRights)
// {
// mResponse.Init(42); // "@j"
// SendResponse();
// }
// // TODO: votes
// mResponse.Init(345); // "EY": [[#room_handler, #handle_room_rating]]
// mResponse.AppendInt32(0);
// SendResponse();
//}
//#endregion
//#region In-room
//private void QUIT() // "@u": Exit room
//{
// if (mRoomUser != null)
// mRoomUser.Destroy();
//}
//private void MOVE() // "AK": "MOVE"
//{
// if (!mRoomUser.mCanWalk)
// return;
// mRoomUser.mWalkingX = (byte)mRequest.PopBase64Int();
// mRoomUser.mWalkingY = (byte)mRequest.PopBase64Int();
// mRoomUser.mIsWalking = true;
//}
//private void WAVE() // "A^": "WAVE"
//{
// if (mRoomUser.mStatuses.ContainsKey("wave"))
// return;
// mRoomUser.RemoveStatus("Dance", true);
// mRoomUser.AddStatus("wave", true, Core.Config.GetInt("game.room.user.wave.duration"));
//}
//private void DANCE() // "A]": "DANCE"
//{
// if (!mRoom.ContainsUser(mHabbo.mName))
// return;
// if (mRequest.Content == "") // Standard dance
// mRoomUser.AddStatus("Dance", true, 0);
// else
// {
// int sID = mRequest.PopWiredInt(); // ID of dance
// if (sID < 0 || sID > 4) // Invalid dance
// return;
// mRoomUser.AddStatus("Dance", sID, true, 0);
// }
//}
//private void STOP() // "AX": "STOP" 88
//{
// mRoomUser.RemoveStatus(mRequest.Content, true);
//}
//private void CHAT() // "@t": "CHAT" 52
//{
// if (!mRoom.ContainsUser(mHabbo.mName))
// return;
// string sText = mRequest.PopFilteredString();
// mRoom.Chat(mRoomUser, sText);
//}
//private void SHOUT() // "@w": "SHOUT" 55
//{
// if (!mRoom.ContainsUser(mHabbo.mName))
// return;
// string sText = mRequest.PopFilteredString();
// mRoom.Shout(mRoomUser, sText);
//}
//private void WHISPER() // "@x": "WHISPER" 56
//{
// if (!mRoom.ContainsUser(mHabbo.mName))
// return;
// string sReceiver = mRequest.PopArgument(' ');
// string sText = mRequest.PopFilteredArgument(' ');
// mRoom.Whisper(mRoomUser, sReceiver, sText);
//}
//#region Cry For Help
//#region User Side
//private void GET_PENDING_CALLS_FOR_HELP() // "Cm": "GET_PENDING_CALLS_FOR_HELP"
//{
// if (!mRoom.ContainsUser(mHabbo.mName))
// return;
// mResponse.Init(319); // "D"
// CryForHelp message = Core.CryForHelpManager.GetMessage(mHabbo.mName);
// if (message != null)
// {
// mResponse.AppendWiredBoolean(true);
// mResponse.AppendString(message.ID);
// mResponse.AppendString(message.Sent);
// mResponse.AppendString(message.Message);
// }
// else
// mResponse.AppendWiredBoolean(false);
// SendResponse();
//}
//private void DELETE_PENDING_CALLS_FOR_HELP() // "Cn": "DELETE_PENDING_CALLS_FOR_HELP"
//{
// if (!mRoom.ContainsUser(mHabbo.mName))
// return;
// CryForHelp CFH = Core.CryForHelpManager.GetMessage(mHabbo.mName);
// if (CFH != null)
// Core.CryForHelpManager.DeleteMessage(CFH.ID);
// mResponse.Init(320); // "E@": [[#dialogs_handler, #handle_pending_CFHs_deleted]]
// SendResponse();
//}
//private void CALL_FOR_HELP() // "AV": "CALL_FOR_HELP"
//{
// if (!mRoom.ContainsUser(mHabbo.mName))
// return;
// string cfhMessage = mRequest.PopString();
// Core.CryForHelpManager.AddMessage(mHabbo.mName, IP, cfhMessage, mRoomUser.mEnteringRoomID, mRoom.mName);
// mResponse.Init(321); // "EA": [[#dialogs_handler, #handle_cfh_sending_mResponse]]
// mResponse.AppendInt32(0);
// SendResponse();
// ResponseBuilder Message = new ResponseBuilder(148); // "BT": [[#hobba_handler, #handle_cryforhelp]]
// Message.Append(Core.CryForHelpManager.GetMessage(mHabbo.mName).ToFuseString());
// Core.ClientManager.SendMessage(Message, "fuse_receive_calls_for_help");
//}
//#endregion
//#region Staff Side
//private void MESSAGETOCALLER() // "CG": "MESSAGETOCALLER"
//{
// if (!Core.RankManager.RankHasRight(mHabbo.mRank, "fuse_receive_calls_for_help"))
// return;
// int cfhID = HabboEncoding.DecodeWired(mRequest.PopString());
// string cfhReply = mRequest.PopString();
// Core.CryForHelpManager.SendReply(cfhID, cfhReply);
//}
//private void CHANGECALLCATEGORY() // "CF": "CHANGECALLCATEGORY"
//{
// if (!Core.RankManager.RankHasRight(mHabbo.mRank, "fuse_receive_calls_for_help"))
// return;
// int cfhID = HabboEncoding.DecodeWired(mRequest.PopString());
// CryForHelp CFH = Core.CryForHelpManager.GetMessage(cfhID);
// if (CFH != null)
// {
// //using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient())
// //{
// // dbClient.AddParamWithValue("username", CFH.Username);
// // dbClient.AddParamWithValue("ip", CFH.IP);
// // dbClient.AddParamWithValue("message", CFH.Message);
// // dbClient.AddParamWithValue("date", CFH.Sent);
// // dbClient.AddParamWithValue("roomid", CFH.RoomID);
// // dbClient.ExecuteQuery("INSERT INTO cms_help (username,ip,message,date,picked_up,subject,roomid) VALUES (@username,@ip,@message,@date,'0','CFH message [hotel]',@roomid)");
// //}
// Core.CryForHelpManager.DeleteMessage(cfhID);
// }
//}
//private void PICK_CRYFORHELP() // "@p": "PICK_CRYFORHELP"
//{
// int cfhID = HabboEncoding.DecodeWired(mRequest.PopString());
// Core.CryForHelpManager.PickupMessage(cfhID);
// ResponseBuilder Message = new ResponseBuilder(149); // "BU": [[#hobba_handler, #handle_picked_cry]]
// Message.AppendInt32(cfhID);
// Message.AppendChar(2);
// Message.AppendString(mHabbo.mName);
// Core.ClientManager.SendMessage(Message, "fuse_receive_calls_for_help");
//}
//private void FOLLOW_CRYFORHELP() // "EC": "FOLLOW_CRYFORHELP"
//{
// if (!Core.RankManager.RankHasRight(mHabbo.mRank, "fuse_receive_calls_for_help"))
// return;
// int cfhID = HabboEncoding.DecodeWired(mRequest.PopString());
// CryForHelp CFH = Core.CryForHelpManager.GetMessage(cfhID);
// if (CFH != null)
// {
// Room room = Core.RoomManager.GetRoom(CFH.RoomID);
// if (room != null)
// {
// mResponse.Init(286); // "D^"
// mResponse.AppendWiredBoolean(room.mTemplate.Publicroom_items == ""); // TODO: this is just temp
// mResponse.AppendInt32(room.mID);
// SendResponse();
// }
// }
//}
//#endregion
//#endregion
//private void SWIMSUIT() // "At": "SWIMSUIT" 116
//{
// // check
// if (!mRoom.ContainsUser(mHabbo.mName))
// return;
// RoomTrigger trigger = mRoom.GetTrigger(mRoomUser.mX, mRoomUser.mY);
// if (trigger == null)
// return;
// if (!trigger.mName.StartsWith("curtains"))
// return;
// // parse and set
// string figure = mRequest.Content; // TODO: a check?
// mHabbo.mPoolFigure = figure;
// mHabbo.UpdateColumn("poolfigure", mHabbo.mPoolFigure);
// mRoom.SendTriggerState(trigger.mName, "open");
// mRoom.SendDetails(mRoomUser);
// mRoomUser.mCanWalk = true;
// mRoomUser.mWalkingX = (byte)(trigger.mX + 2);
// mRoomUser.mWalkingY = trigger.mY;
// mRoomUser.mIsWalking = true;
//}
//#endregion
//#region Catalogue
//private void GCIX() // "Ae": "GCIX"
//{
// mResponse.Init(126); // "A~": [[#catalogue_handler, #handle_catalogindex]]
// foreach (CataloguePage page in Core.CatalogueManager.GetPages())
// if (page.MinRank <= mHabbo.mRank)
// {
// mResponse.AppendString(page.IndexName, 9);
// mResponse.AppendString(page.DisplayName, 13);
// }
// SendResponse();
//}
//private void GCAP() // "Af": "GCAP"
//{
// string X = mRequest.PopArgument();
// string PageName = mRequest.PopArgument();
// CataloguePage page = Core.CatalogueManager.getPage(PageName);
// if (page.MinRank <= mHabbo.mRank)
// {
// mResponse.Init(127); // "A": [[#catalogue_handler, #handle_catalogpage]]
// mResponse.Append(page.ToFuseString());
// SendResponse();
// }
//}
//private void GPRC() // "Ad": "GPRC"
//{
// #region Parsing
// string Type = mRequest.PopArgument('\r'); // "production"
// string PageIndexName = mRequest.PopArgument('\r');
// string Language = mRequest.PopArgument('\r'); // "en"
// string Sprite = mRequest.PopArgument('\r');
// string Var = mRequest.PopFilteredArgument('\r'); // floor/wallpaper id or trophy description only?
// bool IsPresent = mRequest.PopBooleanArgument('\r');
// string ReceiverName = mRequest.PopArgument('\r'); // for presents
// string PresentDescription = mRequest.PopFilteredArgument('\r');
// string X = mRequest.PopArgument('\r');
// uint ReceiverID = ReceiverName != string.Empty ? Core.HabboManager.GetID(ReceiverName) : mHabbo.mID;
// if (X != "") // maybe it can have a value?
// Core.DebugLog.AddValue("X.value", X);
// #endregion
// #region Checking
// CataloguePage page = Core.CatalogueManager.getPage(PageIndexName);
// if (page == null)
// return;
// CatalogueProduct product = Core.CatalogueManager.GetProduct(Sprite, page.IndexID);
// if (product == null)
// return;
// else if (page.MinRank > mHabbo.mRank)
// return;
// else if (Type != "production")
// return;
// else if (Language != "en")
// return;
// // TODO: check description length?
// #endregion
// ItemTemplate template = Core.CatalogueManager.GetItem(product.mTemplateID);
// if (product.mCost > mHabbo.mCredits)
// {
// mResponse.Init(68); // "AD": [[#catalogue_handler, #handle_purchase_nobalance]]
// SendResponse();
// return;
// }
// Core.CatalogueManager.MakeItem(template, ReceiverID, Var);
// //if (IsPresent)
// //{
// // if (ReceiverID == 0) // habbo don't exist
// // {
// // mResponse.Init(76); // "AL"
// // mResponse.Append(ReceiverName);
// // SendResponse();
// // return;
// // }
// // Core.CatalogueManager.MakePresent(ReceiverID, PresentDescription);
// //}
// if (Core.Config.GetBoolean("game.catalogue.alerts.enabled"))
// {
// mResponse.Init(67); // "AC": [[#catalogue_handler, #handle_purchase_ok]]
// mResponse.Append(mHabbo.mCredits);
// SendResponse();
// }
// // if success, remove credit
// mHabbo.mCredits -= product.mCost;
// mHabbo.UpdateColumn("credits", mHabbo.mCredits);
// SendCreditAmount(false);
//}
//#endregion
//#region Furniture
//private void GETSTRIP() // "AA"
//{
// switch (mRequest.Content)
// {
// case "new":
// //mHandPage = 0;
// break;
// case "next":
// mHandPage++;
// break;
// case "prev":
// mHandPage--;
// break;
// }
// SendHandInfo();
//}
//#endregion
//#region Battleball
//private void HANDLER159() // "B_" - Get game list
//{
// mResponse.Init(232); // "Ch"
// // open games
// List games = mRoom.mLobby.GetGames(VirtualGameState.Open);
// mResponse.AppendInt32(games.Count);
// foreach(VirtualGame game in games)
// {
// mResponse.Append(game.ToFuseString());
// }
// // running games
// games = mRoom.mLobby.GetGames(VirtualGameState.Running);
// mResponse.AppendInt32(games.Count);
// foreach (VirtualGame game in games)
// {
// mResponse.Append(game.ToFuseString());
// }
// // ended games
// games = mRoom.mLobby.GetGames(VirtualGameState.Closed);
// mResponse.AppendInt32(games.Count);
// foreach (VirtualGame game in games)
// {
// mResponse.Append(game.ToFuseString());
// }
// SendResponse();
//}
//private void HANDLER160() // "B`" - View game info
//{
// int id = mRequest.PopWiredInt();
// VirtualGame game = mRoom.mLobby.GetGame(id);
// game.AddSubscriber(this);
// mResponse.Init(233); // "Ci"
// mResponse.Append(game.ToInfoString());
// SendResponse();
//}
//private void HANDLER161() // "Ba" - subscriber leaves game
//{
// if (mGame == null)
// return;
// mGame.RemoveSubscriber(this);
//}
//private void HANDLER162() // "Bb" - Start create game
//{
// mResponse.Init(235); // "Ck"
// mResponse.AppendInt32(3); // count of preferences
// mResponse.AppendString("fieldType"); // maps available?
// mResponse.Append("HJIIIIQA");
// //mResponse.AppendString("maximumSimultaneousPowerups");
// //mResponse.Append("HIPAIIIRB");
// //mResponse.AppendString("powerupCreateChance");
// //mResponse.Append("HIRLIIIPY");
// mResponse.AppendString("numTeams");
// mResponse.Append("HJJIJIPA");
// //mResponse.AppendString("coloringForOpponentTimePulses");
// //mResponse.Append("HISCIIIPY");
// //mResponse.AppendString("gameLengthSeconds");
// //mResponse.Append("HIPmIHH");
// //mResponse.AppendString("allowedPowerups");
// //mResponse.Append("IJ1,2,3,4,5,6,7,8,9" + Convert.ToChar(2) + "H");
// //mResponse.AppendString("cleaningTilesTimePulses");
// //mResponse.Append("HISCIIIPY");
// //mResponse.AppendString("powerupCreateFirstTimePulses");
// //mResponse.Append("HIHIHIPY");
// //mResponse.AppendString("secondsUntilRestart");
// //mResponse.Append("HIRGIHH");
// //mResponse.AppendString("powerupTimeToLivePulses");
// //mResponse.Append("HIPOIQAIPY");
// //mResponse.AppendString("powerupCreateIntervalPulses");
// //mResponse.Append("HIPEIQAIPY");
// //mResponse.AppendString("stunTimePulses");
// //mResponse.Append("HIRBIIIPY");
// //mResponse.AppendString("highJumpsTimePulses");
// //mResponse.Append("HISCIIIPY");
// mResponse.AppendString("name");
// mResponse.Append("IJ" + Convert.ToChar(2) + "H");
// //mResponse.AppendString("secondsUntilStart");
// //mResponse.Append("HISCIHH");
// SendResponse();
//}
//private void HANDLER163() // "Bc" - Create game
//{
// //if (mHabbo.mTickets < 2)
// // return;
// VirtualGame game = new VirtualGame {mLobby = mRoom.mLobby, mOwner = this, mState = VirtualGameState.Open};
// #region Parsing
// int preferenceCount = mRequest.PopWiredInt();
// for (int i = 0; i < preferenceCount; i++)
// {
// string key = mRequest.PopString();
// mRequest.reader++; // trash int aka boolean indicating b64 value or not
// switch (key)
// {
// case "fieldType":
// {
// game.mMapID = mRequest.PopWiredByte();
// break;
// }
// case "numTeams":
// {
// game.InitTeams(mRequest.PopWiredByte());
// break;
// }
// //case "allowedPowerups":
// case "name":
// {
// game.mName = mRequest.PopString();
// break;
// }
// }
// }
// #endregion
// #region Checking
// if (game.mMapID > 5 || game.mMapID < 1)
// return;
// if (game.mTeams.Length > 4 || game.mTeams.Length < 2)
// return;
// if (game.mName.Length == 0)
// return;
// #endregion
// mRoom.mLobby.CreateGame(game);
//}
//private void HANDLER165() // "Be" - Join/switch team
//{
// //if (mHabbo.mTickets < 2)
// // return;
// int gameID = mRequest.PopWiredInt();
// byte teamID = mRequest.PopWiredByte();
// VirtualGame game = mRoom.mLobby.GetGame(gameID);
// if (game == null) // not exist
// return;
// game.AddPlayer(this, teamID);
//}
//private void HANDLER167() // "Bg" - player leaves game
//{
// if (mGame == null)
// return;
// mGame.RemovePlayer(mGamePlayer, false, 0);
//}
//private void HANDLER168() // "Bh" - kick somebody from game
//{
// int dynID = mRequest.PopWiredInt();
// if (mGame != null && mGame.mOwner == this)
// mGame.RemovePlayer(mGamePlayer, true, 6);
//}
//private void HANDLER170() // "Bj" - start game
//{
// if (mGame != null && mGame.Launchable && mGame.mOwner == this)
// mGame.Start();
//}
//private void HANDLER171() // "Bk" - move in game
//{
// mRequest.reader++;
// mGamePlayer.mWalkingX = mRequest.PopWiredByte();
// mGamePlayer.mWalkingY = mRequest.PopWiredByte();
//}
//#endregion
#endregion
private void SendHandInfo()
{
//List furniInfo = FurnitureManager.GetFurniture(mHabbo.mID);
//int endId = furniInfo.Count;
//ResponseBuilder Message = new ResponseBuilder(140); //BL
//if (furniInfo.Count > 0)
//{
// Message.Append("SI");
// int startId = mHandPage * 9;
// if (endId > (startId + 9)) { endId = startId + 9; }
// if (startId > endId || startId == endId) { mHandPage--; SendHandInfo(); return; }
// for (int i = startId; i < endId; i++)
// {
// Furniture info = furniInfo[i];
// ItemTemplate template = info.GetTemplate();
// if (template.TypeID > 0) //Floor Item
// {
// Message.Append(Convert.ToChar(30));
// Message.Append(info.mID.ToString());
// Message.Append(Convert.ToChar(30));
// Message.Append(i.ToString());
// Message.Append(Convert.ToChar(30));
// Message.Append("S");
// Message.Append(Convert.ToChar(30));
// Message.Append(info.mID);
// Message.Append(Convert.ToChar(30));
// Message.Append(template.Sprite);
// Message.Append(Convert.ToChar(30));
// Message.Append(template.Width);
// Message.Append(Convert.ToChar(30));
// Message.Append(template.Length);
// Message.Append(Convert.ToChar(30));
// Message.Append(template.Colour);
// Message.Append(template.Recycleable ? "1" : "0");
// Message.Append(Convert.ToChar(30));
// Message.AppendString(template.Sprite, 30);
// Message.Append("/");
// }
// else //Wall item
// {
// string Sprite = template.Sprite;
// string Colour = template.Colour;
// if (template.posterString != null)
// {
// Sprite = template.posterString[0];
// Colour = template.posterString[1];
// }
// Message.Append(Convert.ToChar(30));
// Message.Append(info.mID.ToString());
// Message.Append(Convert.ToChar(30));
// Message.Append(i.ToString());
// Message.Append(Convert.ToChar(30));
// Message.Append("I");
// Message.Append(Convert.ToChar(30));
// Message.Append(info.mID.ToString());
// Message.Append(Convert.ToChar(30));
// Message.Append(Sprite);
// Message.Append(Convert.ToChar(30));
// if (Sprite == "post.it" || Sprite == "post.it.vd")
// Message.AppendString(info.mVar, 30);
// else
// Message.AppendString(Colour, 30);
// Message.Append(template.Recycleable ? "1" : "0");
// Message.Append("/");
// }
// }
// Message.AppendChar(13);
// Message.Append(furniInfo.Count);
//}
//SendMessage(Message);
}
}
}