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.Encryption; using Chop.Game.Messenger; 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" + "\0"; 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 Protocol Crypto; //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(1024); Response = new ResponseBuilder(); _socket.BeginReceive(_buffer, 0, 1024, SocketFlags.None, new AsyncCallback(DataIn), null); } private void DataIn(IAsyncResult iAr) { try { int packetLength = _socket.EndReceive(iAr); if (packetLength > 0) { int pos = 0; byte[] dataIn = new byte[packetLength]; Array.Copy(_buffer, 0, dataIn, 0, packetLength); string data = Encoding.Default.GetString(_buffer, 0, packetLength); if (data.StartsWith("(Encoding.Default.GetBytes(POLICY))); Core.ClientManager.RemoveClient(this); return; } //string encryptedTest = Encoding.Default.GetString(dataIn, 0, packetLength); ; // We want to replace some chars with readable text! //for (int i = 0; i <= 13; i++) // char 0-13 //{ // encryptedTest = encryptedTest.Replace(Convert.ToChar(i).ToString(), "{" + i + "}"); //} //Console.ForegroundColor = ConsoleColor.Magenta; //Console.WriteLine("ENCRYPTED [" + _ID + "]: \"" + encryptedTest + "\""); //Console.ResetColor(); if (Crypto != null) { if (Crypto.Initialized) { dataIn = Crypto.Rc4.Decipher(dataIn); } } //encryptedTest = Encoding.Default.GetString(dataIn, 0, packetLength); ; // We want to replace some chars with readable text! //for (int i = 0; i <= 13; i++) // char 0-13 //{ // encryptedTest = encryptedTest.Replace(Convert.ToChar(i).ToString(), "{" + i + "}"); //} //Console.ForegroundColor = ConsoleColor.Magenta; //Console.WriteLine("DECRYPTED [" + _ID + "]: \"" + encryptedTest + "\""); //Console.ResetColor(); while (pos < packetLength) { int length = BitConverter.ToInt32(new byte[] { dataIn[pos + 3], dataIn[pos + 2], dataIn[pos + 1], dataIn[pos], }, 0); pos += 4; //string cData = Encoding.Default.GetString(_buffer, 0, packetLength); //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(dataIn, pos, message, 0, length); mRequest = RequestParser.Parse(message); try { if (Core.ClientManager.RequestHandlers[mRequest.HeaderID] != null) { Core.DebugLog.AddValue("DATA", "Incoming data from client [" + mRequest.HeaderID + ", " + Core.ClientManager.RequestHandlers[mRequest.HeaderID].GetType() + "]: \"" + _ID + "\""); Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("Incoming data from client [" + mRequest.HeaderID + ", " + Core.ClientManager.RequestHandlers[mRequest.HeaderID].GetType() + "]: \"" + _ID + "\""); Console.ResetColor(); 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() + " 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, 1024, 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); } } }