using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using Blizzard.HabboHotel.Rooms; using Blizzard.HabboHotel.Items; using Blizzard.Connections; namespace Blizzard.HabboHotel.Users { public class Habbo { private Dictionary UsersOnLine = StaticGame.VirtualUser; internal int SessionId; internal int CurrentDrink; internal UserConnection ActualGame = null; internal int frzBalls = 1; internal bool IsFreeze = false; internal bool HasFreezeShield = false; internal bool HasFreezeDiagonal = false; internal int HyperBalls = 0; internal int FreezeLives = 3; internal int GameId; internal string ActualPacket = ""; internal ClientMessage ActualClientMessage; internal DateTime LastConnect; internal bool CONNECT = false; internal bool IsOnline = false; internal bool IsOnRoom = false; internal string UserName; internal string ConnectionTicket; internal int Id; internal int Rank; internal int Credits; internal int Pixels; internal int VirtualId; internal int CurrentRoomId; internal int X; internal int Y; internal int LastX; internal int LastY; internal string Z; internal string Motto; internal int RotHead; internal int RotBody; internal bool IsDancing = false; internal int DanceId = 0; internal int GoalX; internal DateTime LastDateTime; internal int GoalY; internal bool IsTeleportOn; internal string VisitedRooms; internal bool IsSit; internal bool IsMoonWalking; internal int MoonWalk; internal int CurrentEffect; internal string CurrentState; internal List FavouriteRooms; internal List QuestCompleted; internal int AwardedItems; internal List QuestType; internal List QuestSubType; internal int HomeRoom; internal bool IsWalking; internal bool RequestToWalk; internal int CarryTimer; internal List RatedRooms; internal bool InitedPing = false; internal bool IsKicking; internal Habbo(UserConnection Game, int ClientId) { this.ActualGame = Game; this.GameId = ClientId; } internal void SendMessage(ServerMessage Message) { if (Message.ToString().Length > 0) { if (Message == null) // failure? { return; } BlizzardSystem.WriteClientLine("[" + this.GameId + "] SENDED: " + Message.ToString()); ActualGame.SendPacket(Message.ToString()); } } internal void SeeMyFreezeLives() { // J}KQA ServerMessage Lives = new ServerMessage("J}"); Lives.AddInt(this.VirtualId); Lives.AddInt(this.FreezeLives); SendMessage(Lives); } internal void FreezeAndMoveMe() { Thread t = StaticGame.FreezeMoveSystem[this.Id]; (new EffectsInventory()).ShowEffect(this, 12); Thread.Sleep(6000); (new EffectsInventory()).ShowEffect(this, 0); foreach (RoomItem Item in RoomsData.Rooms[this.CurrentRoomId].FloorItems) { if (Item.GetBaseItem().Name == "es_exit") { this.SetPos(Item.X, Item.Y, ""); Item.ExtraData = "1"; Item.UpdateState(this); Thread.Sleep(1000); Item.ExtraData = "0"; Item.UpdateState(this); } } t.Abort(); StaticGame.FreezeMoveSystem.Remove(this.Id); } internal void DeletePoints(RoomItem It, string Team) { this.FreezeLives -= 1; SeeMyFreezeLives(); if (this.FreezeLives == 0) { Thread t = new Thread(new ThreadStart(FreezeAndMoveMe)); StaticGame.FreezeMoveSystem.Add(this.Id, t); t.Start(); if (Team.Equals("r")) { int p = int.Parse(It.ExtraData); if (p >= 20) p -= 20; It.ExtraData = p.ToString(); It.UpdateState(this); } else if (Team.Equals("g")) { int p = int.Parse(It.ExtraData); if (p >= 20) p -= 20; It.ExtraData = p.ToString(); It.UpdateState(this); } else if (Team.Equals("b")) { int p = int.Parse(It.ExtraData); if (p >= 20) p -= 20; It.ExtraData = p.ToString(); It.UpdateState(this); } else if (Team.Equals("y")) { int p = int.Parse(It.ExtraData); if (p >= 20) p -= 20; It.ExtraData = p.ToString(); It.UpdateState(this); } } if (Team.Equals("r")) { int p = int.Parse(It.ExtraData); if (p >= 10) p -= 10; It.ExtraData = p.ToString(); It.UpdateState(this); } else if (Team.Equals("g")) { int p = int.Parse(It.ExtraData); if (p >= 10) p -= 10; It.ExtraData = p.ToString(); It.UpdateState(this); } else if (Team.Equals("b")) { int p = int.Parse(It.ExtraData); if (p >= 10) p -= 10; It.ExtraData = p.ToString(); It.UpdateState(this); } else if (Team.Equals("y")) { int p = int.Parse(It.ExtraData); if (p >= 10) p -= 10; It.ExtraData = p.ToString(); It.UpdateState(this); } } internal void AddPoints(RoomItem It, string Team) { if (Team.Equals("r")) { int p = int.Parse(It.ExtraData); if (p >= 10) p += 10; It.ExtraData = p.ToString(); It.UpdateState(this); } else if (Team.Equals("g")) { int p = int.Parse(It.ExtraData); if (p >= 10) p += 10; It.ExtraData = p.ToString(); It.UpdateState(this); } else if (Team.Equals("b")) { int p = int.Parse(It.ExtraData); if (p >= 10) p += 10; It.ExtraData = p.ToString(); It.UpdateState(this); } else if (Team.Equals("y")) { int p = int.Parse(It.ExtraData); if (p >= 10) p += 10; It.ExtraData = p.ToString(); It.UpdateState(this); } } internal void SendBuilder(BuildMessage Message) { if (Message.ToString().Length > 0) { if (Message == null) { return; } BlizzardSystem.WriteClientLine("[" + this.GameId + "] SENDED: " + Message.ToString()); ActualGame.SendPackets(Message.ToString()); } } internal void RemoveUserFromRoom(bool NotifyClient, bool NotifyKick = false, bool RemoveFromUserList = true) { if (!this.IsOnRoom) return; if (NotifyClient) { if (NotifyKick) { ServerMessage Alert = new ServerMessage("@a"); Alert.AddInt(4008); this.SendMessage(Alert); } ServerMessage Kick = new ServerMessage("@R"); this.SendMessage(Kick); } RoomsData R = RoomsData.Rooms[this.CurrentRoomId]; if (RemoveFromUserList) R.UserList.Remove(this); R.CurrentUsersInRoom--; if (R.CurrentUsersInRoom == 0 && R.Id > 0) { Thread tRoom = StaticGame.RoomCycles[R.Id]; //StaticGame.RoomCycles.Remove(this.CurrentRoomId); //tRoom.Abort(); } this.IsOnRoom = false; HabboConsole H = new HabboConsole(this); H.UpdateMyFriends(); this.CurrentEffect = 0; this.IsFreeze = false; this.HasFreezeShield = false; if (R.CurrentUsersInRoom > 0) { ServerMessage LeaveMessage = new ServerMessage("@]"); LeaveMessage.AddString(this.VirtualId.ToString()); StaticGame.SendPacketToAllRoom(this, LeaveMessage); } this.CurrentRoomId = 0; StaticGame.UsersAtRoom.Remove(this.Id); } internal void DisconnectMe() { try { if (this.IsOnRoom) { RemoveUserFromRoom(false); } UsersData User = GetUserData(); User.IsOnline = false; UsersOnLine.Remove(this.Id); BlizzardSystem.ActualConnections--; BlizzardSystem.Net.DeleteConnection(GameId); BlizzardSystem.UpdateUsersConnected(BlizzardSystem.ActualConnections); BlizzardSystem.WriteLine(this.UserName + " has been disconnected"); this.CONNECT = false; this.IsOnline = false; HabboConsole H = new HabboConsole(this); H.UpdateMyFriends(); BlizzardSystem.MySQL.ExecuteNonQuery("UPDATE users SET connected = '0' WHERE id = " + this.Id); // Update All users! StaticGame.VirtualUser.Remove(this.Id); StaticGame.VirtualIds.Remove(this.VirtualId); ActualGame.OnDisconnect(); } catch (Exception e) { BlizzardSystem.WriteLine("Error on disconnect: " + e.ToString()); } } internal void InitPackets() { ServerMessage RequestSSO = new ServerMessage(257); RequestSSO.AddInt(9); RequestSSO.AddInt(0); RequestSSO.AddInt(0); RequestSSO.AddInt(1); RequestSSO.AddInt(1); RequestSSO.AddInt(3); RequestSSO.AddInt(0); RequestSSO.AddInt(2); RequestSSO.AddInt(1); RequestSSO.AddInt(4); RequestSSO.AddInt(0); RequestSSO.AddInt(5); RequestSSO.AddString("dd-MM-yyyy"); RequestSSO.AddChar(2); RequestSSO.AddInt(8); RequestSSO.AddString(@"[EMULATOR INFO] Hi Scripters, you cant hack Blizzard losers :D! thank you Littlej! [Itachi & LittleJ RULES >:D!] [\EMULATOR INFO]"); RequestSSO.AddInt(9); SendMessage(RequestSSO); } internal void Login() { BuildMessage LoginBuilder = new BuildMessage(); string SSOTicket = this.ActualPacket.Substring(5, 9); UsersData User = null; this.LastDateTime = DateTime.Now; foreach (UsersData users in UsersData.UsersRegistered) { if (users.ConnectionTicket.Contains(SSOTicket)) User = users; } if (User != null) { User.IsOnline = true; this.SessionId = BlizzardSystem.Sessions; BlizzardSystem.Sessions++; this.UserName = User.UserName; this.Id = User.Id; this.Rank = User.Rank; this.CurrentRoomId = 0; this.Motto = User.Motto; this.ConnectionTicket = User.ConnectionTicket; this.Credits = User.Credits; this.Pixels = User.Pixels; this.CurrentDrink = 0; this.IsOnline = true; this.IsOnRoom = false; this.LastConnect = DateTime.Now; this.VirtualId = (new Random()).Next(0, 1000000000); this.VisitedRooms = ""; this.AwardedItems = 0; this.QuestType = new List(); this.QuestSubType = new List(); ; this.FavouriteRooms = new List(); this.HomeRoom = User.HomeRoom; this.IsSit = false; this.MoonWalk = 0; this.IsMoonWalking = false; this.CurrentState = ""; this.IsWalking = false; this.IsKicking = true; this.RequestToWalk = false; this.CarryTimer = 0; this.RatedRooms = new List(); if(User.RoomFavourites.Contains(";")) { string[] rf = User.RoomFavourites.Split(';'); foreach (string rfs in rf) { if (rfs == "") continue; if (FavouriteRooms.Contains(int.Parse(rfs))) continue; this.FavouriteRooms.Add(int.Parse(rfs)); } } this.QuestCompleted = new List(); if (User.QuestCompleted.Contains(";")) { string[] rf = User.QuestCompleted.Split(';'); foreach (string rfs in rf) { if (rfs == "") continue; if (QuestCompleted.Contains(int.Parse(rfs))) continue; this.QuestCompleted.Add(int.Parse(rfs)); } } while (StaticGame.VirtualIds.Contains(this.VirtualId)) { VirtualId = (new Random()).Next(0, 1000000000); } StaticGame.VirtualIds.Add(this.VirtualId); if (StaticGame.VirtualUser.ContainsKey(this.Id)) { SendAlert("Ya estás conectad@ al hotel!", 2); return; } BlizzardSystem.WriteLine(UserName + " has been connected!"); BlizzardSystem.ActualConnections++; BlizzardSystem.UpdateUsersConnected(BlizzardSystem.ActualConnections); BlizzardSystem.MySQL.ExecuteNonQuery("UPDATE users SET connected = '1' WHERE id = " + Id); // Update All users! Subscription Sub = new Subscription(this); int Club = 0; if (Sub.LoadMySubscription() == "habbo_vip") { Club = 2; } else if (Sub.LoadMySubscription() == "habbo_club") { Club = 1; } int Staff = 0; if (Rank >= 7) Staff = 7; LoginBuilder.AddPacket("@C"); LoginBuilder.AddPacket("@B" + HabboEncode.encodeVL64(Club) + HabboEncode.encodeVL64(Staff)); LoginBuilder.AddPacket("GLH"); LoginBuilder.AddPacket("GG" + HabboEncode.encodeVL64(User.HomeRoom)); LoginBuilder.AddPacket("GJRGH"); LoginBuilder.AddPacket("DbII"); LoginBuilder.AddPacket("HEI"); ServerMessage M = new ServerMessage("GJ"); M.AddInt(30); M.AddInt(FavouriteRooms.Count); foreach (int f in FavouriteRooms) M.AddInt(f); LoginBuilder.AddPacket(M); //Alert LoginBuilder.AddPacket("LjI¡Bienvenido al hotel test de Blizzard Emulator, " + UserName + "!\n\nRecuerda que el emulador está en desarrollo, así que tiene errores.\n\n¡Gracias por venir y bienvenido!"); //LoginBuilder.AddPacket("NvH"); // Friend stream! this.SendBuilder(LoginBuilder); if (this.Rank > 3) { MOD.Init(this); } HabboConsole Consol = new HabboConsole(this); Consol.UseFriendStream(); Consol.UpdateMyFriends(); this.InitAllQuest(); StaticGame.VirtualUser.Add(this.Id, this); this.LastDateTime = DateTime.Now; this.InitedPing = true; } else { BlizzardSystem.WriteLine("Invalid user registered"); } } #region Aww /*internal void InitHabboInformation() { Subscription Sub = new Subscription(this); int Club = 0; if (Sub.LoadMySubscription() == "habbo_vip") { Club = 2; } else if (Sub.LoadMySubscription() == "habbo_club") { Club = 1; } int Staff = 0; if (Rank >= 7) Staff = 7; UsersData User = UsersData.UsersRegister[this.Id]; CryptoSMessage FuseRights = new CryptoSMessage(2); FuseRights.AddInt(Club); FuseRights.AddInt(Staff); this.SendCMessage(FuseRights); CryptoSMessage Extra1 = new CryptoSMessage(460); // Load Effects Extra1.AddInt(0); this.SendCMessage(Extra1); CryptoSMessage Home = new CryptoSMessage(455); // Home Room Home.AddInt(User.HomeRoom); Home.AddInt(User.HomeRoom); //8212this.SendCMessage(Home); CryptoSMessage Favs = new CryptoSMessage(458); // favs Favs.AddInt(30); Favs.AddInt(FavouriteRooms.Count); // Count favs foreach (int f in FavouriteRooms) Favs.AddInt(f); this.SendCMessage(Favs); CryptoSMessage Me = new CryptoSMessage(5); Me.AddInt(this.Id); Me.AddStringWithBreak(this.UserName); Me.AddStringWithBreak(User.Gender); Me.AddStringWithBreak(User.Motto); Me.AddStringWithBreak(User.RealName); Me.AddBoolean(false); Me.AddInt(55); // Respects Me.AddInt(3); // Respect to give Me.AddInt(3); // Respect to give to pet Me.AddInt(1); // Respects this.SendCMessage(Me); CryptoSMessage Alert = new CryptoSMessage(810); Alert.AddInt(1); Alert.AddStringWithBreak("Welcome to Blizzard, " + this.UserName); this.SendCMessage(Alert); CryptoSMessage Extra4 = new CryptoSMessage(290); // Extra3.AddBoolean(true); }*/ #endregion internal void GetCreditsPixelsSnowFlakesorHearts() { BuildMessage AllCoins = new BuildMessage(); ServerMessage UpdateCredits = new ServerMessage("@F"); UpdateCredits.AddStringWithBreak(this.Credits + ".0"); AllCoins.AddPacket(UpdateCredits); ServerMessage UpdatePixels = new ServerMessage("It"); UpdatePixels.AddInt(2); // Count of defined pixels/snowflakes/shells/idiot thing here UpdatePixels.AddInt(0); // Type (pixels) UpdatePixels.AddInt(this.Pixels); // Count UpdatePixels.AddInt(4); // Type (shells) UpdatePixels.AddInt(300); // Count AllCoins.AddPacket(UpdatePixels); this.SendBuilder(AllCoins); } internal void UpdateCredits(int NewCredits, bool inDatabase) { this.Credits = NewCredits; ServerMessage UpdateCredits = new ServerMessage("@F"); UpdateCredits.AddStringWithBreak(NewCredits + ".0"); SendMessage(UpdateCredits); if (inDatabase) { Updater.SQLStoExecute.Add("UPDATE users SET credits = '" + NewCredits + "' WHERE id = '" + this.Id + "'"); } } internal void CarryItem(int Item) { this.CurrentDrink = Item; if (Item > 0) { this.CarryTimer = 90; // Seconds } else { this.CarryTimer = 0; } if (this.CurrentRoomId > 0) { ServerMessage Message = new ServerMessage("Gb"); Message.AddInt(VirtualId); Message.AddInt(Item); StaticGame.VirtualRooms[this.CurrentRoomId].SendMessage(Message); Thread Wait = new Thread(new ThreadStart(WaitForCarryItem)); Wait.Start(); } } internal void WaitForCarryItem() { if (this.CurrentDrink > 0) { Thread.Sleep((CarryTimer * 1000)); this.CarryTimer = 0; this.CarryItem(0); } else { return; } } internal Room GetRoom() { foreach (KeyValuePair R in StaticGame.VirtualRooms) { int RoomId = R.Key; Room Ro = R.Value; if (RoomId == this.CurrentRoomId) return Ro; } return null; } internal ServerMessage MUpdateCredits(int NewCredits, bool inDatabase) { this.Credits = NewCredits; ServerMessage UpdateCredits = new ServerMessage("@F"); UpdateCredits.AddStringWithBreak(NewCredits + ".0"); if (inDatabase) { Updater.SQLStoExecute.Add("UPDATE users SET credits = '" + NewCredits + "' WHERE id = '" + this.Id + "'"); } return UpdateCredits; } internal void UpdatePixels(int NewPixels, int AddPixels, bool inDatabase) { this.Pixels = NewPixels; ServerMessage UpdatePixels = new ServerMessage("Fv"); UpdatePixels.AddInt(NewPixels); UpdatePixels.AddInt(AddPixels); SendMessage(UpdatePixels); if (inDatabase) { Updater.SQLStoExecute.Add("UPDATE users SET pixels = '" + NewPixels + "' WHERE id = '" + this.Id + "'"); } } internal void SerializeClub() { Subscription Sub = new Subscription(this); ServerMessage Update = new ServerMessage("@G"); Update.AddStringWithBreak("club_habbo"); if (!Sub.HasSubscription("habbo_club") && !Sub.HasSubscription("habbo_vip")) { for (int i = 0; i < 8; i++) { Update.AddBoolean(false); } Update.AddInt(1); Update.AddInt(20); Update.AddInt(15); } else if (Sub.HasSubscription("habbo_club")) { // IdIIIQAIXDgPLSA // @Gclub_habbo{2}SGHHJIHIHHHH // @G - club_habbo - char2 - 31 - 0 - 0 - 2 - 1 - 0 - 1 - 0 - 0 - 0 - 0 Sub.GetData("habbo_club"); Double Expire = Sub.ExpireTime; Double TimeLeft = Expire - BlizzardSystem.GetUnixTimeStamp(); int TotalDaysLeft = (int)Math.Ceiling(TimeLeft / 86400); int MonthsLeft; if (TotalDaysLeft <= 31) MonthsLeft = 0; else MonthsLeft = TotalDaysLeft / 31; Double Initial = Sub.InitialTime; Double TimeLeft2 = BlizzardSystem.GetUnixTimeStamp() - Initial; int TotalDaysLeft2 = (int)Math.Ceiling(TimeLeft2 / 86400); int MonthsLeft2 = TotalDaysLeft2 / 31; if (TotalDaysLeft - (MonthsLeft * 31) == 0) { MonthsLeft = MonthsLeft - 1; } Update.AddInt(TotalDaysLeft - (MonthsLeft * 31)); // Days Of Subcription Update.AddInt(1); // ? Of Subcription Update.AddInt(MonthsLeft); // Months Of Subscription Update.AddInt(1); // Boolean Of Subscription Update.AddInt(1); // Boolean Of Subscription Update.AddBoolean(false); // Type Of Subscription (true = VIP)/(false = HC) Update.AddInt(TotalDaysLeft2); // Days Of HC Update.AddInt(0); // Days Of VIP // And the Subscription Alert Update.AddBoolean(false); // Alert Active? Update.AddInt(15); // Initial Price Update.AddInt(10); // New Price } else if (Sub.HasSubscription("habbo_vip")) { // HC: #SG : 31 | #H : 0 | H : 0 | #J : 2 | #I : 1 | #H : 0 | #I : 1 | #H : 0 | #H : 0 | #H : 0 | #H : 0 // VIP: #QF : 25 | #QD : 17 | #K : 3 | #I : 1 | #I : 1 | #I : 1 | #Rn : 186 | #XWA : 348 | #H : 0 | #H : 0 | #H : 0 | // Fin: Days | ?? | Months || ?? | ?? | ?? | HC Days | VIP Days | Alert | Price | LOL | Bool || Sub.GetData("habbo_vip"); Double Expire = Sub.ExpireTime; Double TimeLeft = Expire - BlizzardSystem.GetUnixTimeStamp(); int TotalDaysLeft = (int)Math.Ceiling(TimeLeft / 86400); int MonthsLeft = TotalDaysLeft / 31; Double Initial = Sub.InitialTime; Double TimeLeft2 = BlizzardSystem.GetUnixTimeStamp() - Initial; int TotalDaysLeft2 = (int)Math.Ceiling(TimeLeft2 / 86400); if (TotalDaysLeft - (MonthsLeft * 31) == 0) { MonthsLeft = MonthsLeft - 1; } Update.AddInt(TotalDaysLeft - (MonthsLeft * 31)); // Days Of Subcription Update.AddInt(1); // ? Of Subcription Update.AddInt(MonthsLeft); // Months Of Subscription Update.AddBoolean(true); // Boolean Of Subscription Update.AddBoolean(true); // Boolean Of Subscription Update.AddBoolean(true); // Type Of Subscription (true = VIP)/(false = HC) Update.AddInt(0); // Days Of HC Update.AddInt(TotalDaysLeft2); // Days Of VIP // And the Subscription Alert Update.AddBoolean(false); // Alert Active? Update.AddInt(15); // Initial Price Update.AddInt(10); // New Price } // ROPQHHH this.SendMessage(Update); } internal void ChangeMotto() { string Motto = ActualPacket.Substring(4); if (Motto.Length <= 0) return; if (Motto == this.Motto) return; if (Motto.Contains(Convert.ToChar(2).ToString()) || Motto.Contains(Convert.ToChar(1).ToString())) return; this.Motto = Motto; UsersData D = UsersData.UsersRegister[this.Id]; D.Motto = Motto; Updater.SQLStoExecute.Add("UPDATE users SET motto = '" + Motto + "' WHERE id = " + this.Id); ServerMessage SUpdateInRoom = new ServerMessage("DJ"); SUpdateInRoom.AddInt(this.VirtualId); SUpdateInRoom.AddStringWithBreak(D.Look); SUpdateInRoom.AddStringWithBreak(D.Gender.ToLower()); SUpdateInRoom.AddStringWithBreak(Motto); SUpdateInRoom.AddInt(D.AchievementPoints); StaticGame.SendPacketToAllRoom(this, SUpdateInRoom); } internal void SerializeMe() { // @E10246263{2}julli123{2}hr-3043-1356.hd-180-3.ch-3050-1340-1341.lg-3078-1341.he-3079-96.fa-3147-1322.ca-1814.cc-3007-1341-1341{2}M{2}Wath's Up?{2}Julián Reyes Lahoz{2}Hch=s02/249,251,50{2}HI[EAKKi^wuD{1} // The most basic packet! ServerMessage Me = new ServerMessage("@E"); Me.AddStringWithBreak(this.Id.ToString()); Me.AddStringWithBreak(this.UserName); UsersData Dat = UsersData.UsersRegister[this.Id]; Me.AddStringWithBreak(Dat.Look); Me.AddStringWithBreak(Dat.Gender.ToLower()); Me.AddStringWithBreak(Dat.Motto); Me.AddStringWithBreak(Dat.RealName); Me.AddInt(0); Me.AddInt(2); Me.AddInt(0); // my respect Me.AddInt(5); // Repect to give Me.AddInt(3); // Respect to give to pet this.SendMessage(Me); } internal void UpdateBadge() { // B^I@CADMJ@@K@@PA@@QA@@ // B^ BadgesData.ResetSlots(this.Id); Updater.SQLStoExecute.Add("UPDATE users_badges SET badgeslot = 0 WHERE userid = " + this.Id); string[] All = ActualPacket.Substring(2).Split('@'); string Total = ActualPacket.Substring(2); int i = 0; if (Total.Contains("I@@")) i = i + 2; else { i++; string Badge1 = All[1].Substring(1); Badge1 = Badge1.Substring(0, Badge1.Length - 1); BadgesData.UpdateBadgeSlot(this.Id, Badge1, 1); Updater.SQLStoExecute.Add("UPDATE users_badges SET badgeslot = 1 WHERE userid = " + this.Id + " AND badgeid = '" + Badge1 + "'"); } if (Total.Contains("J@@")) i = i + 2; else { i++; string Badge2 = All[i].Substring(1); Badge2 = Badge2.Substring(0, Badge2.Length - 1); BadgesData.UpdateBadgeSlot(this.Id, Badge2, 2); Updater.SQLStoExecute.Add("UPDATE users_badges SET badgeslot = 2 WHERE userid = " + this.Id + " AND badgeid = '" + Badge2 + "'"); } if (Total.Contains("K@@")) i = i + 2; else { i++; string Badge3 = All[i].Substring(1); Badge3 = Badge3.Substring(0, Badge3.Length - 2); BadgesData.UpdateBadgeSlot(this.Id, Badge3, 3); Updater.SQLStoExecute.Add("UPDATE users_badges SET badgeslot = 3 WHERE userid = " + this.Id + " AND badgeid = '" + Badge3 + "'"); } if (Total.Contains("PA@@")) i = i + 2; else { i++; string Badge4 = All[i].Substring(1); Badge4 = Badge4.Substring(0, Badge4.Length - 2); BadgesData.UpdateBadgeSlot(this.Id, Badge4, 4); Updater.SQLStoExecute.Add("UPDATE users_badges SET badgeslot = 4 WHERE userid = " + this.Id + " AND badgeid = '" + Badge4 + "'"); } if (Total.Contains("QA@@")) i = i + 2; else { i++; string Badge5 = All[i].Substring(1); Badge5 = Badge5.Substring(0, Badge5.Length); BadgesData.UpdateBadgeSlot(this.Id, Badge5, 5); Updater.SQLStoExecute.Add("UPDATE users_badges SET badgeslot = 5 WHERE userid = " + this.Id + " AND badgeid = '" + Badge5 + "'"); } ServerMessage Badges = new ServerMessage("Cd"); List Equipped = new List(); foreach (BadgesData B in BadgesData.Badges) { if (B.BadgeSlot > 0) Equipped.Add(B); } Badges.AddInt(Equipped.Count); foreach (BadgesData B in Equipped) { Badges.AddInt(B.Id); Badges.AddInt(B.BadgeSlot); Badges.AddStringWithBreak(B.BadgeId); } this.SendMessage(Badges); this.SerializeBadges(); } /* * NQPPIACH_BattleBallQuestCompleted1{char2}KRBHIHbattleball{char2}RB{char1}L`PBdaily{char2}HPOPAS{HFIND_STUFF{char2}{char2}IFINDTRAY{char2}HIHroom_builder{char2}HPBHPpHMOVE_ITEM{char2}_2{char2}RLMOVEITEM{char2}HKHsocial{char2}HRAHQsHENTER_OTHER_USERS_ROOM{char2}_2{char2}RLENTEROTHERSROOM{char2}HIHidentity{char2}HKHStHCHANGE_FIGURE{char2}_2{char2}RLCHANGEFIGURE{char2}HIHexplore{char2}HPDHRuHFIND_STUFF{char2}_2{char2}RLFINDLIFEGUARDTOWER{char2}HIHpets{char2}HQBHRyHPET_RESPECT{char2}_2{char2}RLSCRATCHAPET{char2}HIHbattleball{char2}IREHXKAIFIND_STUFF{char2}{char2}RGFINDBBSCOREBOARD{char2}HIHfreeze{char2}HQGHYPAHGAME_JOIN_GAME{char2}{char2}RGFREEZEJOIN{char2}HIHH */ internal void GiveBadge(string BadgeId) { Updater.SQLStoExecute.Add("INSERT INTO users_badges (id, userid, badgeid, badgeslot) VALUES (NULL, " + this.Id + ", '" + BadgeId + "', 0)"); BadgesData B = new BadgesData(); B.Id = BadgesData.GetLastId() + 1; B.UserId = this.Id; B.BadgeId = BadgeId; B.BadgeSlot = 0; BadgesData.Badges.Add(B); ServerMessage AlertItem = new ServerMessage("M@"); AlertItem.AddInt(1); // Count AlertItem.AddInt(4); // Type (WallItems (1), FloorItems (2), Pets (3) or Badges (4)) AlertItem.AddInt(1); // Count AlertItem.AddInt(B.Id); // BadgeId this.SendMessage(AlertItem); } internal bool HasBadge(string BadgeId) { foreach (BadgesData B in BadgesData.SelectBadgesForUser(this.Id)) { if (B.BadgeId == BadgeId) return true; else continue; } return false; } internal void SerializeBadges() { ServerMessage Badges = new ServerMessage("Ce"); List MyBadges = BadgesData.SelectBadgesForUser(this.Id); List EquippedBadges = new List(); Badges.AddInt(MyBadges.Count); foreach (BadgesData B in MyBadges) { Badges.AddInt(B.Id); Badges.AddStringWithBreak(B.BadgeId); if (B.BadgeSlot > 0) EquippedBadges.Add(B); } Badges.AddInt(EquippedBadges.Count); foreach (BadgesData B in EquippedBadges) { Badges.AddInt(B.BadgeSlot); Badges.AddStringWithBreak(B.BadgeId); } this.SendMessage(Badges); } internal RoomsData CurrentRoom() { return RoomsData.Rooms[this.CurrentRoomId]; } internal void SaveWiredEffect() { try { // ojSQH@@HH if (this.ActualPacket.Substring(2).Length > 0) { int ItemId = this.ActualClientMessage.GetNextInt(); RoomItem Item = null; foreach (RoomItem CurrentItem in this.CurrentRoom().FloorItems) { if (CurrentItem.Id == ItemId) { Item = CurrentItem; } } if (Item == null) return; if (Item.GetBaseItem().Name == "wf_trg_enter_room") { int Item0 = this.ActualClientMessage.GetNextInt(); string Name = this.ActualClientMessage.GetNextString(); if (Name == "") return; Item.WiredString = Name; Item.IsWiredModify = true; } else if (Item.GetBaseItem().Name == "wf_act_show_message") { int Item0 = this.ActualClientMessage.GetNextInt(); string Name = this.ActualClientMessage.GetNextString(); if (Name == "") return; Item.WiredString = Name; Item.IsWiredModify = true; } else if (Item.GetBaseItem().Name == "wf_trg_periodically") { // ojY_CIPE@@HH int Junk = this.ActualClientMessage.GetNextInt(); int MiliSeconds = (500 * this.ActualClientMessage.GetNextInt()); if(MiliSeconds == -1) return; Item.WiredString = MiliSeconds.ToString(); Item.IsWiredModify = true; } else if (Item.GetBaseItem().Name == "wf_trg_says_something") { this.ActualClientMessage.GetNextInt(); this.ActualClientMessage.GetNextInt(); string Name = this.ActualClientMessage.GetNextString(); if (Name == "") return; Item.WiredString = Name; Item.IsWiredModify = true; } else if (Item.GetBaseItem().Name == "wf_act_teleport_to") { this.ActualClientMessage.oData = this.ActualClientMessage.oData.Split('@')[2]; int CountItems = this.ActualClientMessage.GetNextInt(); List Items = new List(); for (int i = 0; i != CountItems; ) { int nItem = this.ActualClientMessage.GetNextInt(); if (nItem != -1) Items.Add(nItem); i++; } string zItems = ""; foreach (int i in Items) { zItems += i.ToString() + ";"; } zItems = zItems.Substring(0, zItems.Length - 1); Item.WiredItems = Items; Item.IsWiredModify = true; } else if (Item.GetBaseItem().Name == "wf_act_toggle_state") { this.ActualClientMessage.oData = this.ActualClientMessage.oData.Split('@')[2]; int CountItems = this.ActualClientMessage.GetNextInt(); List Items = new List(); for (int i = 0; i != CountItems; ) { int nItem = this.ActualClientMessage.GetNextInt(); if (nItem != -1) Items.Add(nItem); i++; } string zItems = ""; foreach (int i in Items) { zItems += i.ToString() + ";"; } int MiliSecondsToWait = (500 * this.ActualClientMessage.GetNextInt()); zItems = zItems.Substring(0, zItems.Length - 1); Item.WiredString = MiliSecondsToWait.ToString(); Item.WiredItems = Items; Item.IsWiredModify = true; } else if (Item.GetBaseItem().Name == "wf_trg_walks_on_furni") { this.ActualClientMessage.oData = this.ActualClientMessage.oData.Split('@')[2]; int CountItems = this.ActualClientMessage.GetNextInt(); List Items = new List(); for (int i = 0; i != CountItems; ) { int nItem = this.ActualClientMessage.GetNextInt(); if (nItem != -1) Items.Add(nItem); i++; } string zItems = ""; foreach (int i in Items) { zItems += i.ToString() + ";"; } zItems = zItems.Substring(0, zItems.Length - 1); Item.WiredItems = Items; Item.IsWiredModify = true; } else if (Item.GetBaseItem().Name == "wf_trg_walks_off_furni") { this.ActualClientMessage.oData = this.ActualClientMessage.oData.Split('@')[2]; int CountItems = this.ActualClientMessage.GetNextInt(); List Items = new List(); for (int i = 0; i != CountItems; ) { int nItem = this.ActualClientMessage.GetNextInt(); if (nItem != -1) Items.Add(nItem); i++; } string zItems = ""; foreach (int i in Items) { zItems += i.ToString() + ";"; } zItems = zItems.Substring(0, zItems.Length - 1); Item.WiredItems = Items; Item.IsWiredModify = true; } else if (Item.GetBaseItem().Name == "wf_trg_state_changed") { this.ActualClientMessage.oData = this.ActualClientMessage.oData.Split('@')[2]; int CountItems = this.ActualClientMessage.GetNextInt(); List Items = new List(); for (int i = 0; i != CountItems; ) { int nItem = this.ActualClientMessage.GetNextInt(); if (nItem != -1) Items.Add(nItem); i++; } string zItems = ""; foreach (int i in Items) { zItems += i.ToString() + ";"; } zItems = zItems.Substring(0, zItems.Length - 1); Item.WiredItems = Items; Item.IsWiredModify = true; } else if (Item.GetBaseItem().Name == "wf_act_move_rotate") { int Two = this.ActualClientMessage.GetNextInt(); int Move = this.ActualClientMessage.GetNextInt(); // 0 = no move // 4 = To right (derecha) // 5 = To behind (detras) // 6 = To left (izquierda) // 7 = To Front (delante) // 2 = Adelante/atras (5/7) // 3 = Izquierda/derecha (4/6) // 1 = Random (4,5,6,7) int Rotate = this.ActualClientMessage.GetNextInt(); // 0 = no rotate // 1 = rotate to left // 2 = rotate right // Aleatory this.ActualClientMessage.oData = this.ActualClientMessage.oData.Split('@')[2]; int CountItems = this.ActualClientMessage.GetNextInt(); List Items = new List(); for (int i = 0; i != CountItems; ) { int nItem = this.ActualClientMessage.GetNextInt(); if (nItem != -1) Items.Add(nItem); i++; } string zItems = ""; foreach (int i in Items) { zItems += i.ToString() + ";"; } int MiliSecondsToWait = (500 * this.ActualClientMessage.GetNextInt()); zItems = zItems.Substring(0, zItems.Length - 1); Item.WiredString = Move + "|" + Rotate + "|" + MiliSecondsToWait; Item.WiredItems = Items; Item.IsWiredModify = true; } } } catch (Exception e) { BlizzardSystem.WriteLine("Error saving wired: " + e.ToString()); } } internal void WhispToMe(string Message) { ServerMessage Whisps = new ServerMessage("@Y"); Whisps.AddInt(this.VirtualId); Whisps.AddStringWithBreak(Message); Whisps.AddBoolean(false); this.SendMessage(Whisps); } internal void SerializeQuests() { /* Some Dates: - If you serialize the quests' table, it will finish with a Boolean (true), and begin with the packet L` and after this, the count of the categorys - All packets use the same structure - If you wish to see the "progress panel", the packet is Lb, and you must append the category and the item serialized... - If you wish to end a quest, it will be La, exactly the same at the others (category and item serialized....) */ ServerMessage Message = new ServerMessage("L`"); Message.AddInt(8); // Count of Categorys // Category Message.AddStringWithBreak("daily"); // Category Name List QuestDaily = QuestData.GetQuestForCategory("daily"); Message.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, "daily").Count); // Quest completed Message.AddInt(QuestDaily.Count); // Total Quest Message.AddInt(4); // Type of award (0=pixels, 4=shells) foreach (QuestData Q in QuestDaily) { if (this.QuestCompleted.Contains(Q.Id)) continue; Message.AddInt(Q.Id); // Id Message.AddBoolean(Q.Users.Contains(this.Id)); // Active? Message.AddStringWithBreak(Q.Type); // Type Message.AddStringWithBreak(Q.ExtraType); // ? Message.AddInt(Q.Award); // Shells/Pixels Message.AddStringWithBreak(Q.SubType); // ? Message.AddInt(0); // ? Message.AddInt(Q.CountFurnis); // ? Message.AddBoolean(false); } if (QuestData.GetCompletedQuestForUserAndCategory(this, "daily").Count == QuestDaily.Count) { Message.AddInt(0); Message.AddInt(0); Message.AddChar(2); Message.AddChar(2); Message.AddInt(0); Message.AddChar(2); Message.AddInt(0); Message.AddInt(0); Message.AddInt(1); } // Category Message.AddStringWithBreak("room_builder"); // Category Name List QuestRoom = QuestData.GetQuestForCategory("room_builder"); Message.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, "room_builder").Count); // Quest completed Message.AddInt(QuestRoom.Count); // Total Quest Message.AddInt(0); // Type of award (0=pixels, 4=shells) foreach (QuestData Q in QuestRoom) { if (this.QuestCompleted.Contains(Q.Id)) continue; Message.AddInt(Q.Id); // Id Message.AddBoolean(Q.Users.Contains(this.Id)); // Active? Message.AddStringWithBreak(Q.Type); // Type Message.AddStringWithBreak(Q.ExtraType); // ? Message.AddInt(Q.Award); // Shells/Pixels Message.AddStringWithBreak(Q.SubType); // ? Message.AddInt(0); // ? Message.AddInt(Q.CountFurnis); // ? Message.AddBoolean(false); } if (QuestData.GetCompletedQuestForUserAndCategory(this, "room_builder").Count == QuestRoom.Count) { Message.AddInt(0); Message.AddInt(0); Message.AddChar(2); Message.AddChar(2); Message.AddInt(0); Message.AddChar(2); Message.AddInt(0); Message.AddInt(0); Message.AddInt(1); } // Category Message.AddStringWithBreak("social"); // Category Name List QuestSocial = QuestData.GetQuestForCategory("social"); Message.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, "social").Count); // Quest completed Message.AddInt(QuestSocial.Count); // Total Quest Message.AddInt(0); // Type of award (0=pixels, 4=shells) foreach (QuestData Q in QuestSocial) { if (this.QuestCompleted.Contains(Q.Id)) continue; Message.AddInt(Q.Id); // Id Message.AddBoolean(Q.Users.Contains(this.Id)); // Active? Message.AddStringWithBreak(Q.Type); // Type Message.AddStringWithBreak(Q.ExtraType); // ? Message.AddInt(Q.Award); // Shells/Pixels Message.AddStringWithBreak(Q.SubType); // ? Message.AddInt(0); // ? Message.AddInt(Q.CountFurnis); // ? Message.AddBoolean(false); } if (QuestData.GetCompletedQuestForUserAndCategory(this, "social").Count == QuestSocial.Count) { Message.AddInt(0); Message.AddInt(0); Message.AddChar(2); Message.AddChar(2); Message.AddInt(0); Message.AddChar(2); Message.AddInt(0); Message.AddInt(0); Message.AddInt(1); } // Category Message.AddStringWithBreak("identity"); // Category Name List QuestIdentity = QuestData.GetQuestForCategory("identity"); Message.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, "identity").Count); // Quest completed Message.AddInt(QuestIdentity.Count); // Total Quest Message.AddInt(0); // Type of award (0=pixels, 4=shells) foreach (QuestData Q in QuestIdentity) { if (this.QuestCompleted.Contains(Q.Id)) continue; Message.AddInt(Q.Id); // Id Message.AddBoolean(Q.Users.Contains(this.Id)); // Active? Message.AddStringWithBreak(Q.Type); // Type Message.AddStringWithBreak(Q.ExtraType); // ? Message.AddInt(Q.Award); // Shells/Pixels Message.AddStringWithBreak(Q.SubType); // ? Message.AddInt(0); // ? Message.AddInt(Q.CountFurnis); // ? Message.AddBoolean(false); } if (QuestData.GetCompletedQuestForUserAndCategory(this, "identity").Count == QuestIdentity.Count) { Message.AddInt(0); Message.AddInt(0); Message.AddChar(2); Message.AddChar(2); Message.AddInt(0); Message.AddChar(2); Message.AddInt(0); Message.AddInt(0); Message.AddInt(1); } // Category Message.AddStringWithBreak("explore"); // Category Name List QuestExplore = QuestData.GetQuestForCategory("explore"); Message.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, "explore").Count); // Quest completed Message.AddInt(QuestExplore.Count); // Total Quest Message.AddInt(0); // Type of award (0=pixels, 4=shells) foreach (QuestData Q in QuestExplore) { if (this.QuestCompleted.Contains(Q.Id)) continue; Message.AddInt(Q.Id); // Id Message.AddBoolean(Q.Users.Contains(this.Id)); // Active? Message.AddStringWithBreak(Q.Type); // Type Message.AddStringWithBreak(Q.ExtraType); // ? Message.AddInt(Q.Award); // Shells/Pixels Message.AddStringWithBreak(Q.SubType); // ? Message.AddInt(0); // ? Message.AddInt(Q.CountFurnis); // ? Message.AddBoolean(false); } if (QuestData.GetCompletedQuestForUserAndCategory(this, "explore").Count == QuestExplore.Count) { Message.AddInt(0); Message.AddInt(0); Message.AddChar(2); Message.AddChar(2); Message.AddInt(0); Message.AddChar(2); Message.AddInt(0); Message.AddInt(0); Message.AddInt(1); } // Category Message.AddStringWithBreak("pets"); // Category Name List QuestPets = QuestData.GetQuestForCategory("pets"); Message.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, "pets").Count); // Quest completed Message.AddInt(QuestPets.Count); // Total Quest Message.AddInt(0); // Type of award (0=pixels, 4=shells) foreach (QuestData Q in QuestPets) { if (this.QuestCompleted.Contains(Q.Id)) continue; Message.AddInt(Q.Id); // Id Message.AddBoolean(Q.Users.Contains(this.Id)); // Active? Message.AddStringWithBreak(Q.Type); // Type Message.AddStringWithBreak(Q.ExtraType); // ? Message.AddInt(Q.Award); // Shells/Pixels Message.AddStringWithBreak(Q.SubType); // ? Message.AddInt(0); // ? Message.AddInt(Q.CountFurnis); // ? Message.AddBoolean(false); } if (QuestData.GetCompletedQuestForUserAndCategory(this, "pets").Count == QuestPets.Count) { Message.AddInt(0); Message.AddInt(0); Message.AddChar(2); Message.AddChar(2); Message.AddInt(0); Message.AddChar(2); Message.AddInt(0); Message.AddInt(0); Message.AddInt(1); } // Category Message.AddStringWithBreak("battleball"); // Category Name List QuestBattle = QuestData.GetQuestForCategory("battleball"); Message.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, "battleball").Count); // Quest completed Message.AddInt(QuestBattle.Count); // Total Quest Message.AddInt(0); // Type of award (0=pixels, 4=shells) foreach (QuestData Q in QuestBattle) { if (this.QuestCompleted.Contains(Q.Id)) continue; Message.AddInt(Q.Id); // Id Message.AddBoolean(Q.Users.Contains(this.Id)); // Active? Message.AddStringWithBreak(Q.Type); // Type Message.AddStringWithBreak(Q.ExtraType); // ? Message.AddInt(Q.Award); // Shells/Pixels Message.AddStringWithBreak(Q.SubType); // ? Message.AddInt(0); // ? Message.AddInt(Q.CountFurnis); // ? Message.AddBoolean(false); } if (QuestData.GetCompletedQuestForUserAndCategory(this, "battleball").Count == QuestBattle.Count) { Message.AddInt(0); Message.AddInt(0); Message.AddChar(2); Message.AddChar(2); Message.AddInt(0); Message.AddChar(2); Message.AddInt(0); Message.AddInt(0); Message.AddInt(1); } Message.AddStringWithBreak("freeze"); // Category Name List QuestFreeze = QuestData.GetQuestForCategory("freeze"); Message.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, "freeze").Count); // Quest completed Message.AddInt(QuestFreeze.Count); // Total Quest Message.AddInt(0); // Type of award (0=pixels, 4=shells) foreach (QuestData Q in QuestFreeze) { if (this.QuestCompleted.Contains(Q.Id)) continue; Message.AddInt(Q.Id); // Id Message.AddBoolean(Q.Users.Contains(this.Id)); // Active? Message.AddStringWithBreak(Q.Type); // Type (for use and the external texts) Message.AddStringWithBreak(Q.ExtraType); // Extra Value (no use?) Message.AddInt(Q.Award); // Shells/Pixels Message.AddStringWithBreak(Q.SubType); // Extra Type (for use and the external texts) Message.AddInt(0); // Furnis awarded Message.AddInt(Q.CountFurnis); // Total of furnis Message.AddBoolean(false); // Is category ended (IF IT IS, MUST ME LIKE THIS> HH{char2}{char2}H{char2}HHI) } if (QuestData.GetCompletedQuestForUserAndCategory(this, "freeze").Count == QuestFreeze.Count) { Message.AddInt(0); Message.AddInt(0); Message.AddChar(2); Message.AddChar(2); Message.AddInt(0); Message.AddChar(2); Message.AddInt(0); Message.AddInt(0); Message.AddInt(1); } Message.AddBoolean(true); // final bool // S{IFIND_STUFFIFINDTRAYHI this.SendMessage(Message); } internal void CompleteQuest(int QuestId) { this.AwardedItems = 0; // Laroom_builderIPBHPpIMOVE_ITEM_2RLMOVEITEMKKH QuestData Q = QuestData.GetQuestForID(QuestId); this.QuestType.Remove(Q.Type); this.QuestSubType.Remove(Q.SubType); ServerMessage Complete = new ServerMessage("La"); Complete.AddStringWithBreak(Q.Category); List QuestAnything = QuestData.GetQuestForCategory(Q.Category); Complete.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, Q.Category).Count); // Quest completed Complete.AddInt(QuestAnything.Count); // Total Quest if (Q.Category == "daily") { // Updateshells > award Complete.AddInt(4); } else { this.UpdatePixels(this.Pixels + Q.Award, Q.Award, true); Complete.AddInt(0); // Type of award (0=pixels, 4=shells) } Complete.AddInt(Q.Id); // Id Complete.AddBoolean(Q.Users.Contains(this.Id)); // Active? Complete.AddStringWithBreak(Q.Type); // Type Complete.AddStringWithBreak(Q.ExtraType); // ? Complete.AddInt(Q.Award); // Shells/Pixels Complete.AddStringWithBreak(Q.SubType); // ? Complete.AddInt(this.AwardedItems); // Awarded Items Complete.AddInt(Q.CountFurnis); // Count Furnis Complete.AddInt(0); // Ended? this.SendMessage(Complete); string q = ""; foreach (int i in QuestCompleted) { q += i.ToString() + ";"; } QuestCompleted.Add(QuestId); q += QuestId + ";"; Updater.SQLStoExecute.Add("UPDATE users SET questcompleted = '" + q + "' WHERE id = " + this.Id); this.QuestCompleted.Add(QuestId); this.SerializeQuests(); } internal void InitAllQuest() { List Z = QuestData.Quests; BuildMessage B = new BuildMessage(); foreach (QuestData Q in Z) { // Lbroom_builderHPBHPpIMOVE_ITEM_2RLMOVEITEMKKH if (this.QuestCompleted.Contains(Q.Id)) continue; if (Q.Users.Contains(this.Id) && !this.QuestCompleted.Contains(Q.Id)) { this.QuestType.Add(Q.Type); this.QuestSubType.Add(Q.SubType); ServerMessage Alert = new ServerMessage("Lb"); Alert.AddStringWithBreak(Q.Category); List QuestAnything = QuestData.GetQuestForCategory(Q.Category); Alert.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, Q.Category).Count); // Quest completed Alert.AddInt(QuestAnything.Count); // Total Quest if (Q.Category == "daily") Alert.AddInt(4); else Alert.AddInt(0); // Type of award (0=pixels, 4=shells) Alert.AddInt(Q.Id); // Id Alert.AddBoolean(Q.Users.Contains(this.Id)); // Active? Alert.AddStringWithBreak(Q.Type); // Type Alert.AddStringWithBreak(Q.ExtraType); // ? Alert.AddInt(Q.Award); // Shells/Pixels Alert.AddStringWithBreak(Q.SubType); // ? Alert.AddInt(this.AwardedItems); // Awarded Items Alert.AddInt(Q.CountFurnis); // Count Furnis Alert.AddInt(0); // ? B.AddPacket(Alert); } else continue; } if (B.ToString() != "") this.SendBuilder(B); } public void GetAchievementScoreMessage() { ServerMessage Message = new ServerMessage("F{"); Message.AddInt(UsersData.UsersRegister[this.Id].AchievementPoints); Message.AddBreak(); this.SendMessage(Message); } internal UsersData GetUserData() { UsersData subUser = UsersData.UsersRegister[this.Id]; return subUser; } internal void RegisterPing() { this.LastDateTime = DateTime.Now; } internal void GetWardrobe() { ServerMessage Wardrobe = new ServerMessage("DK"); if ((new Subscription(this)).HasSubscription("habbo_vip") || (new Subscription(this)).HasSubscription("habbo_club")) { Wardrobe.AddBoolean(true); List War = WardrobeData.GetWardrobeForUser(this.Id); Wardrobe.AddInt(War.Count); foreach (WardrobeData W in War) { Wardrobe.AddInt(W.Pos); Wardrobe.AddStringWithBreak(W.Look); Wardrobe.AddStringWithBreak(W.Gender); } } else Wardrobe.AddBoolean(false); this.SendMessage(Wardrobe); } internal void SaveWardrobe() { int SlotId = ActualClientMessage.GetNextInt(); string Look = ActualClientMessage.GetNextString(); string Gender = ActualClientMessage.GetNextString(); if (WardrobeData.HasWardrobePos(this.Id, SlotId)) { WardrobeData W = WardrobeData.GetWardrobePos(this.Id, SlotId); W.Look = Look; W.Gender = Gender; Updater.SQLStoExecute.Add("UPDATE users_wardrobe SET look = '" + Look + "' WHERE userid = " + this.Id + " AND pos = " + SlotId); Updater.SQLStoExecute.Add("UPDATE users_wardrobe SET gender = '" + Gender + "' WHERE userid = " + this.Id + " AND pos = " + SlotId); } else { WardrobeData W = new WardrobeData(); W.UserId = this.Id; W.Pos = SlotId; W.Look = Look; W.Gender = Gender; WardrobeData.Wardrobe.Add(W); Updater.SQLStoExecute.Add("INSERT INTO users_wardrobe (userid, pos, look, gender) VALUES (" + W.UserId + ", " + W.Pos + ", '" + W.Look + "', '" + W.Gender + "');"); } this.GetWardrobe(); } internal void AcceptQuest() { int QuestId = HabboEncode.decodeVL64(this.ActualPacket.Substring(2)); if (this.QuestCompleted.Contains(QuestId)) return; QuestData Q = QuestData.GetQuestForID(QuestId); // Lbroom_builderHPBHPpIMOVE_ITEM_2RLMOVEITEMKKH this.QuestType.Add(Q.Type); this.QuestSubType.Add(Q.SubType); Q.Users.Add(this.Id); Q.UsersActive += this.Id + ";"; Updater.SQLStoExecute.Add("UPDATE quests SET usersactive = '" + Q.UsersActive + "' WHERE id = " + Q.Id); ServerMessage Alert = new ServerMessage("Lb"); Alert.AddStringWithBreak(Q.Category); List QuestAnything = QuestData.GetQuestForCategory(Q.Category); Alert.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, Q.Category).Count); // Quest completed Alert.AddInt(QuestAnything.Count); // Total Quest if (Q.Category == "daily") Alert.AddInt(4); else Alert.AddInt(0); // Type of award (0=pixels, 4=shells) Alert.AddInt(Q.Id); // Id Alert.AddBoolean(Q.Users.Contains(this.Id)); // Active? Alert.AddStringWithBreak(Q.Type); // Type Alert.AddStringWithBreak(Q.ExtraType); // ? Alert.AddInt(Q.Award); // Shells/Pixels Alert.AddStringWithBreak(Q.SubType); // ? Alert.AddInt(this.AwardedItems); // Awarded Items Alert.AddInt(Q.CountFurnis); // Count Furnis Alert.AddInt(0); // ? this.SendMessage(Alert); } internal void UpdateQuest(int Awarded, int QuestId) { this.AwardedItems += Awarded; QuestData Q = QuestData.GetQuestForID(QuestId); // Lbroom_builderHPBHPpIMOVE_ITEM_2RLMOVEITEMKKH ServerMessage Alert = new ServerMessage("Lb"); Alert.AddStringWithBreak(Q.Category); List QuestAnything = QuestData.GetQuestForCategory(Q.Category); Alert.AddInt(QuestData.GetCompletedQuestForUserAndCategory(this, Q.Category).Count); // Quest completed Alert.AddInt(QuestAnything.Count); // Total Quest if (Q.Category == "daily") Alert.AddInt(4); else Alert.AddInt(0); // Type of award (0=pixels, 4=shells) Alert.AddInt(Q.Id); // Id Alert.AddBoolean(Q.Users.Contains(this.Id)); // Active? Alert.AddStringWithBreak(Q.Type); // Type Alert.AddStringWithBreak(Q.ExtraType); // ? Alert.AddInt(Q.Award); // Shells/Pixels Alert.AddStringWithBreak(Q.SubType); // ? Alert.AddInt(this.AwardedItems); // Awarded Items Alert.AddInt(Q.CountFurnis); // Count Furnis Alert.AddInt(0); // ? this.SendMessage(Alert); if (this.AwardedItems >= Q.CountFurnis) this.CompleteQuest(QuestId); } internal void SerializeMyInventory() { List FloorItems = new List(); List WallItems = new List(); foreach (UserItemsData Item in UserItemsData.UserItems) { if (Item.UserId == this.Id) { int ItemId = Item.Id; int FurniId = Item.FurniId; ItemsData ftem = ItemsData.RegisteredFurnis[FurniId]; if (ftem.Type.ToLower() != "s") WallItems.Add(Item); else FloorItems.Add(Item); } } ServerMessage Inventory = new ServerMessage("BL"); Inventory.AddStringWithBreak("S"); // Normal Item Inventory.AddInt(1); Inventory.AddInt(1); Inventory.AddInt(FloorItems.Count); foreach (UserItemsData Item in FloorItems) { int ItemId = Item.Id; int FurniId = Item.FurniId; string Extradata = Item.ExtraData; ItemsData fData = ItemsData.RegisteredFurnis[FurniId]; Inventory.AddInt(ItemId); Inventory.AddStringWithBreak(fData.Type.ToUpper()); Inventory.AddInt(ItemId); Inventory.AddInt(fData.SpriteId); if (fData.Name.Contains("a2")) Inventory.AddInt(3); else if (fData.Name.Contains("wallpaper")) Inventory.AddInt(2); else if (fData.Name.Contains("landscape")) Inventory.AddInt(4); else Inventory.AddInt(1); Inventory.AddStringWithBreak(Extradata); Inventory.AddBoolean(fData.CanRecycle); Inventory.AddBoolean(fData.CanTrade); Inventory.AddBoolean(fData.CanStack); Inventory.AddBoolean(fData.CanSell); Inventory.AddInt(-1); if (fData.Type.ToLower() == "s") { Inventory.AddStringWithBreak(""); Inventory.AddInt(0); } } ServerMessage WallInventory = new ServerMessage("BL"); WallInventory.AddStringWithBreak("I"); // Wall Item WallInventory.AddInt(1); WallInventory.AddInt(1); WallInventory.AddInt(WallItems.Count); foreach (UserItemsData Item in WallItems) { int ItemId = Item.Id; int FurniId = Item.FurniId; string Extradata = Item.ExtraData; ItemsData fData = ItemsData.RegisteredFurnis[FurniId]; if (fData.Type.ToLower() != "s") { WallInventory.AddInt(ItemId); WallInventory.AddStringWithBreak(fData.Type.ToUpper()); WallInventory.AddInt(ItemId); WallInventory.AddInt(fData.SpriteId); if (fData.Name.Contains("a2")) WallInventory.AddInt(3); else if (fData.Name.Contains("wallpaper")) WallInventory.AddInt(2); else if (fData.Name.Contains("landscape")) WallInventory.AddInt(4); else WallInventory.AddInt(0); WallInventory.AddStringWithBreak(Extradata); WallInventory.AddBoolean(fData.CanRecycle); WallInventory.AddBoolean(fData.CanTrade); WallInventory.AddBoolean(fData.CanStack); WallInventory.AddBoolean(fData.CanSell); WallInventory.AddInt(-1); } } this.SendMessage(Inventory); this.SendMessage(WallInventory); } internal void UpdateMyState(string Key, string Value) { // @bIHQAPA0.0{2}KK/flatctrl useradmin/mv 5,5,0.0/{2}{1} // @bIHPASD1.0{2}PAPA/flatctrl useradmin/mv 4,20,1.0//{2}{1} // @bIHPAPE1.0{2}PAPA/flatctrl useradmin//{2}{1} ServerMessage Update = new ServerMessage("@b"); UsersData DUser = UsersData.UsersRegister[this.Id]; Update.AddInt(1); // Count users (ME) Update.AddInt(this.VirtualId); Update.AddInt(this.X); Update.AddInt(this.Y); Update.AddStringWithBreak(this.Z.ToString()); Update.AddInt(this.RotHead); Update.AddInt(this.RotBody); Update.AddString("/"); Update.AddString(Key); Update.AddString(" "); Update.AddString(Value); Update.AddString("/"); Update.AddStringWithBreak("/"); StaticGame.SendPacketToAllRoom(this, Update); } internal ServerMessage UpdateMyStateMessage(string Key, string Value) { // @bIHQAPA0.0{2}KK/flatctrl useradmin/mv 5,5,0.0/{2}{1} // @bIHPASD1.0{2}PAPA/flatctrl useradmin/mv 4,20,1.0//{2}{1} // @bIHPAPE1.0{2}PAPA/flatctrl useradmin//{2}{1} ServerMessage Update = new ServerMessage("@b"); UsersData DUser = UsersData.UsersRegister[this.Id]; Update.AddInt(1); // Count users (ME) Update.AddInt(this.VirtualId); Update.AddInt(this.X); Update.AddInt(this.Y); Update.AddStringWithBreak(this.Z.ToString()); Update.AddInt(this.RotHead); Update.AddInt(this.RotBody); Update.AddString("/"); Update.AddString(Key); Update.AddString(" "); Update.AddString(Value); Update.AddString("/"); Update.AddStringWithBreak("/"); return Update; } internal void UpdateState() { this.UpdateMyState("", ""); } internal void SendAlert(string Message, int type) { if (type == 0) { this.SendMegaAlert(Message); } else if (type == 2) { this.SendAlert(Message); } else if (type == 3) { this.SendMODAlert(Message); } else if (type == 1) { this.SendLOLAlert(Message); } } internal void SendLOLAlert(string Message) { ServerMessage Alert = new ServerMessage("Lj"); Alert.AddBoolean(true); Alert.AddStringWithBreak(Message); this.SendMessage(Alert); } internal void ChangeLook() { // @l@AMAl(look) || @l@AF@s string Look = this.ActualPacket.Substring(7); string Gender = "M"; if (this.ActualPacket.Substring(3, 4).Contains("F")) { Gender = "F"; } // Any filter for scripters or noobs? // update in db and emu Updater.SQLStoExecute.Add("UPDATE users SET figure = '" + Look + "' WHERE id = '" + this.Id + "'"); Updater.SQLStoExecute.Add("UPDATE users SET gender = '" + Gender + "' WHERE id = '" + this.Id + "'"); UsersData Data = UsersData.UsersRegister[this.Id]; Data.Look = Look; Data.Gender = Gender; ServerMessage SUpdateInRoom = new ServerMessage("DJ"); SUpdateInRoom.AddInt(this.VirtualId); SUpdateInRoom.AddStringWithBreak(Look); SUpdateInRoom.AddStringWithBreak(Gender); SUpdateInRoom.AddStringWithBreak(Data.Motto); SUpdateInRoom.AddInt(Data.AchievementPoints); StaticGame.SendPacketToAllRoom(this, SUpdateInRoom); } internal void Dance() { // A]I Subscription Sub = new Subscription(this); int DanceId = HabboEncode.decodeVL64(this.ActualPacket.Substring(2)); if (DanceId < 0 || DanceId > 4 || !Sub.HasSubscription("habbo_club") && !Sub.HasSubscription("habbo_vip") && DanceId > 1) { DanceId = 0; } if (DanceId != 0) { this.IsDancing = true; this.DanceId = DanceId; } else { this.IsDancing = false; this.DanceId = 0; } ServerMessage Dance = new ServerMessage("G`"); Dance.AddInt(this.VirtualId); Dance.AddInt(DanceId); StaticGame.SendPacketToAllRoom(this, Dance); } internal void MakeRoomCentral() { int RoomId = HabboEncode.decodeVL64(this.ActualPacket.Substring(2)); this.HomeRoom = RoomId; Updater.SQLStoExecute.Add("UPDATE users SET roomhome = " + RoomId + " WHERE id = " + this.Id); ServerMessage H = new ServerMessage("GG"); H.AddInt(RoomId); this.SendMessage(H); } internal void SetPos(int X, int Y, string Z) { this.X = X; this.Y = Y; this.Z = StaticGame.VirtualRooms[this.CurrentRoomId].SecondGetHForXY(X, Y).ToString().Replace(',', '.'); this.UpdateMyState("", ""); Room R = StaticGame.VirtualRooms[this.CurrentRoomId]; List Is = R.GetItemsForXY(X, Y); if (Is.Count > 0) { foreach (RoomItem I in Is) { ItemsData U = I.GetBaseItem(); RoomsData sR = RoomsData.Rooms[this.CurrentRoomId]; FurniInteractor Inter = new FurniInteractor(this, U, I, sR, R); Inter.WalkOnFurni(); } } else { FurniInteractor Inter = new FurniInteractor(this); Inter.WalkWithoutFurni(GetRoom()); } } internal void Greet() { // you need to correct this, this must be send to all room! ServerMessage Message = new ServerMessage("Ga"); Message.AddInt(this.VirtualId); StaticGame.SendPacketToAllRoom(this, Message); } internal void SendAlert(string Message) { ServerMessage SendAlert = new ServerMessage("BK"); SendAlert.AddString(Message); this.SendMessage(SendAlert); } internal void SendMODAlert(string Message) { ServerMessage SendAlert = new ServerMessage("BK"); SendAlert.AddString(Message); this.SendMessage(SendAlert); } internal void SendMoreInfoAlert(string Message, string Url) { ServerMessage SendAlert = new ServerMessage("BK"); SendAlert.AddStringWithChar(Message, 2); SendAlert.AddString(Url); this.SendMessage(SendAlert); } internal void SendMegaAlert(string Message) { ServerMessage SendAlert = new ServerMessage("Lh"); SendAlert.AddStringWithBreak("Mensaje del Hotel Manager:"); SendAlert.AddStringWithBreak(Message); this.SendMessage(SendAlert); } internal void UnlockAchievement(int AchId, string AchName, int AchLevel, int AchPointsAward, int AchPixelsAward, string AchCategory, int AwPoints = 0, int FacebookPoints = 0) { // FuPDIRmACH_AvatarTags1{2}RBRLHHSM{2}identity{2}{1} UserAchievement Us = new UserAchievement(); Dictionary U = Us.GetAchievements(this.Id); if (U.ContainsKey(AchId)) { UserAchievement u = U[AchId]; Us.UpdateAchievement(AchId, u.Level, u.ActualValue, AchLevel, AwPoints, this.Id); u.Level = AchLevel; u.ActualValue = 0; } else { Us.AddAchievement(AchId, AchLevel, AwPoints, this.Id); } ServerMessage Achievement = new ServerMessage("Fu"); Achievement.AddInt(AchId); // Achievement ID Achievement.AddInt(AchLevel); // Achievement Level string L = ""; if (AchLevel > 1) L = AchLevel.ToString(); Achievement.AddInt(182); // ? Achievement.AddStringWithBreak(AchName + L); // Achievement Name Achievement.AddInt(AchPointsAward); // Achievement Points Award Achievement.AddInt(AchPixelsAward); // Achievement Pixel Award Achievement.AddBoolean(false); // -- Achievement.AddInt(FacebookPoints); Achievement.AddInt(-1); Achievement.AddChar(2); Achievement.AddStringWithBreak(AchCategory); if (!HasBadge(AchName + L)) GiveBadge(AchName + L); this.SendMessage(Achievement); int cPixels = this.Pixels + AchPixelsAward; this.Pixels = cPixels; this.UpdatePixels(cPixels, AchPixelsAward, true); } internal void GetAchievementPanel() { /* FtRJKIACH_EmailVerification1{2}HPrHHIidentity{2}IPAIACH_Login1 */ ServerMessage Achiv = new ServerMessage("Ft"); List Ach = AchievementsData.Achievements; Achiv.AddInt(Ach.Count); // count archivements UserAchievement Us = new UserAchievement(); Dictionary U = Us.GetAchievements(this.Id); foreach (AchievementsData A in Ach) { int Level = 0; int ActualValue = 0; if (U.ContainsKey(A.AchId)) { UserAchievement u = U[A.AchId]; Level = u.Level; ActualValue = u.ActualValue; } int NextLevel = Level + 1; Achiv.AddInt(A.AchId); // Id Achiv.AddInt(NextLevel); // Next Level AnalyzeMessages Mess = new AnalyzeMessages(); if (Mess.CountAllForASplit(A.Levels) > 2 && Level != A.TotalLevels && A.TotalLevels != 1) Achiv.AddStringWithBreak(A.Name.ToString() + NextLevel.ToString()); // badge else if (A.TotalLevels == Level && A.TotalLevels != 1) Achiv.AddStringWithBreak(A.Name.ToString() + A.TotalLevels.ToString()); // badge else Achiv.AddStringWithBreak(A.Name); // badge if (Level > 0) { Achiv.AddInt(int.Parse(A.Levels[Level - 1])); // Need for next level Achiv.AddInt(int.Parse(A.LevelsRewards[Level - 1])); // Next Nevel Reward (Pixels) } else { Achiv.AddInt(int.Parse(A.Levels[0])); // Need for next level Achiv.AddInt(int.Parse(A.LevelsRewards[0])); // Next Nevel Reward (Pixels) } Achiv.AddInt(0); // ? Achiv.AddInt(ActualValue); // How Many I Have? Achiv.AddBoolean(false); // I have one of this? Achiv.AddStringWithBreak(A.Category); // category Achiv.AddInt(A.TotalLevels); // total levels } /* Achiv.AddInt(3); // Id Achiv.AddInt(2); // Next Nivel Achiv.AddStringWithBreak("ACH_Login1"); // badge Achiv.AddInt(20); // Need for next level Achiv.AddInt(10); // Next Nevel Reward (Pixels) Achiv.AddInt(0); // ? Achiv.AddInt(0); // Have Achiv.AddBoolean(false); // Block Progress? Achiv.AddStringWithBreak("identity"); // category Achiv.AddInt(10); // total levels*/ this.SendMessage(Achiv); } internal void Ping() { this.LastConnect = DateTime.Now; } internal bool HavePowersOnThisRoom(int RoomId) { foreach (RoomRights R in RoomRights.Rights) { if (R.RoomId == RoomId) { if (R.UserId == this.Id) return true; else if (this.Rank >= 8) return true; else continue; } else continue; } return false; } } }