public static void WriteRoom(ServerPacket Packet, RoomData Data, RoomPromotion Promotion, bool NewNavigator = false) { Packet.WriteInteger(Data.Id); Packet.WriteString(Data.Name); Packet.WriteInteger(Data.OwnerId); Packet.WriteString(Data.OwnerName); Packet.WriteInteger(RoomAccessUtility.GetRoomAccessPacketNum(Data.Access)); Packet.WriteInteger(Data.UsersNow); Packet.WriteInteger(Data.UsersMax); Packet.WriteString(Data.Description); Packet.WriteInteger(Data.TradeSettings); Packet.WriteInteger(Data.Score); Packet.WriteInteger(0);//Top rated room rank. Packet.WriteInteger(Data.Category); Packet.WriteInteger(Data.Tags.Count); foreach (string tag in Data.Tags) { Packet.WriteString(tag); } int RoomType = 0; if (Data.Group != null) RoomType += 2; if (Data.Promotion != null) RoomType += 4; if (Data.Type == "private") RoomType += 8; if (Data.AllowPets == 1) RoomType += 16; FeaturedRoom Item = null; if (PlusEnvironment.GetGame().GetNavigator().TryGetFeaturedRoom(Data.Id, out Item)) { RoomType += 1; } Packet.WriteInteger(RoomType); if (Item != null) { Packet.WriteString(Item.Image); } if (Data.Group != null) { Packet.WriteInteger(Data.Group == null ? 0 : Data.Group.Id); Packet.WriteString(Data.Group == null ? "" : Data.Group.Name); Packet.WriteString(Data.Group == null ? "" : Data.Group.Badge); } if (Data.Promotion != null) { Packet.WriteString(Promotion != null ? Promotion.Name : ""); Packet.WriteString(Promotion != null ? Promotion.Description : ""); Packet.WriteInteger(Promotion != null ? Promotion.MinutesLeft : 0); } }
public ServerPacket UpdateUserOnRoller(RoomUser pUser, Point pNextCoord, int pRollerID, Double NextZ) { var mMessage = new ServerPacket(ServerPacketHeader.SlideObjectBundleMessageComposer); mMessage.WriteInteger(pUser.X); mMessage.WriteInteger(pUser.Y); mMessage.WriteInteger(pNextCoord.X); mMessage.WriteInteger(pNextCoord.Y); mMessage.WriteInteger(0); mMessage.WriteInteger(pRollerID); mMessage.WriteInteger(2); mMessage.WriteInteger(pUser.VirtualId); mMessage.WriteString(TextHandling.GetString(pUser.Z)); mMessage.WriteString(TextHandling.GetString(NextZ)); _room.GetGameMap().UpdateUserMovement(new Point(pUser.X, pUser.Y), new Point(pNextCoord.X, pNextCoord.Y), pUser); _room.GetGameMap().GameMap[pUser.X, pUser.Y] = 1; pUser.X = pNextCoord.X; pUser.Y = pNextCoord.Y; pUser.Z = NextZ; _room.GetGameMap().GameMap[pUser.X, pUser.Y] = 0; if (pUser != null && pUser.GetClient() != null && pUser.GetClient().GetHabbo() != null) { List<Item> Items = _room.GetGameMap().GetRoomItemForSquare(pNextCoord.X, pNextCoord.Y); foreach (Item IItem in Items.ToList()) { if (IItem == null) continue; this._room.GetWired().TriggerEvent(WiredBoxType.TriggerWalkOnFurni, pUser.GetClient().GetHabbo(), IItem); } Item Item = this._room.GetRoomItemHandler().GetItem(pRollerID); if (Item != null) { this._room.GetWired().TriggerEvent(WiredBoxType.TriggerWalkOffFurni, pUser.GetClient().GetHabbo(), Item); } } return mMessage; }
public ServerPacket UpdateItemOnRoller(Item pItem, Point NextCoord, int pRolledID, Double NextZ) { var mMessage = new ServerPacket(ServerPacketHeader.SlideObjectBundleMessageComposer); mMessage.WriteInteger(pItem.GetX); mMessage.WriteInteger(pItem.GetY); mMessage.WriteInteger(NextCoord.X); mMessage.WriteInteger(NextCoord.Y); mMessage.WriteInteger(1); mMessage.WriteInteger(pItem.Id); mMessage.WriteString(TextHandling.GetString(pItem.GetZ)); mMessage.WriteString(TextHandling.GetString(NextZ)); mMessage.WriteInteger(pRolledID); SetFloorItem(pItem, NextCoord.X, NextCoord.Y, NextZ); return mMessage; }
public bool Execute(params object[] Params) { if (Params == null || Params.Length == 0) return false; if (String.IsNullOrEmpty(this.StringData)) return false; string[] Stuff = this.StringData.Split('\t'); if (Stuff.Length != 2) return false;//This is important, incase a c**t scripts. string Username = Stuff[0]; RoomUser User = this.Instance.GetRoomUserManager().GetBotByName(Username); if (User == null) return false; string Figure = Stuff[1]; ServerPacket UserChangeComposer = new ServerPacket(ServerPacketHeader.UserChangeMessageComposer); UserChangeComposer.WriteInteger(User.VirtualId); UserChangeComposer.WriteString(Figure); UserChangeComposer.WriteString("M"); UserChangeComposer.WriteString(User.BotData.Motto); UserChangeComposer.WriteInteger(0); this.Instance.SendMessage(UserChangeComposer); User.BotData.Look = Figure; User.BotData.Gender = "M"; using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.RunQuery("UPDATE `bots` SET `look` = '" + User.BotData.Look + "', `gender` = '" + User.BotData.Gender + "' WHERE `id` = '" + User.BotData.Id + "' LIMIT 1"); } return true; }
public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet) { if (!Session.GetHabbo().InRoom) return; Room Room = Session.GetHabbo().CurrentRoom; if (Room == null) return; int BotId = Packet.PopInt(); int ActionId = Packet.PopInt(); string DataString = Packet.PopString(); if (ActionId < 1 || ActionId > 5) return; RoomUser Bot = null; if (!Room.GetRoomUserManager().TryGetBot(BotId, out Bot)) return; if ((Bot.BotData.ownerID != Session.GetHabbo().Id && !Session.GetHabbo().GetPermissions().HasRight("bot_edit_any_override"))) return; RoomBot RoomBot = Bot.BotData; if (RoomBot == null) return; /* 1 = Copy looks * 2 = Setup Speech * 3 = Relax * 4 = Dance * 5 = Change Name */ switch (ActionId) { #region Copy Looks (1) case 1: { ServerPacket UserChangeComposer = new ServerPacket(ServerPacketHeader.UserChangeMessageComposer); UserChangeComposer.WriteInteger(Bot.VirtualId); UserChangeComposer.WriteString(Session.GetHabbo().Look); UserChangeComposer.WriteString(Session.GetHabbo().Gender); UserChangeComposer.WriteString(Bot.BotData.Motto); UserChangeComposer.WriteInteger(0); Room.SendMessage(UserChangeComposer); //Change the defaults Bot.BotData.Look = Session.GetHabbo().Look; Bot.BotData.Gender = Session.GetHabbo().Gender; using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.RunQuery("UPDATE `bots` SET `look` = '" + Session.GetHabbo().Look + "', `gender` = '" + Session.GetHabbo().Gender + "' WHERE `id` = '" + Bot.BotData.Id + "' LIMIT 1"); } //Room.SendMessage(new UserChangeComposer(BotUser.GetClient(), true)); break; } #endregion #region Setup Speech (2) case 2: { string[] ConfigData = DataString.Split(new string[] { ";#;" }, StringSplitOptions.None); string[] SpeechData = ConfigData[0].Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); string AutomaticChat = Convert.ToString(ConfigData[1]); string SpeakingInterval = Convert.ToString(ConfigData[2]); string MixChat = Convert.ToString(ConfigData[3]); if (String.IsNullOrEmpty(SpeakingInterval) || Convert.ToInt32(SpeakingInterval) <= 0 || Convert.ToInt32(SpeakingInterval) < 7) SpeakingInterval = "7"; RoomBot.AutomaticChat = Convert.ToBoolean(AutomaticChat); RoomBot.SpeakingInterval = Convert.ToInt32(SpeakingInterval); RoomBot.MixSentences = Convert.ToBoolean(MixChat); using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.RunQuery("DELETE FROM `bots_speech` WHERE `bot_id` = '" + Bot.BotData.Id + "'"); } #region Save Data - TODO: MAKE METHODS FOR THIS. for (int i = 0; i <= SpeechData.Length - 1; i++) { using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery("INSERT INTO `bots_speech` (`bot_id`, `text`) VALUES (@id, @data)"); dbClient.AddParameter("id", BotId); dbClient.AddParameter("data", SpeechData[i]); dbClient.RunQuery(); dbClient.SetQuery("UPDATE `bots` SET `automatic_chat` = @AutomaticChat, `speaking_interval` = @SpeakingInterval, `mix_sentences` = @MixChat WHERE `id` = @id LIMIT 1"); dbClient.AddParameter("id", BotId); dbClient.AddParameter("AutomaticChat", AutomaticChat.ToLower()); dbClient.AddParameter("SpeakingInterval", Convert.ToInt32(SpeakingInterval)); dbClient.AddParameter("MixChat", PlusEnvironment.BoolToEnum(Convert.ToBoolean(MixChat))); dbClient.RunQuery(); } } #endregion #region Handle Speech RoomBot.RandomSpeech.Clear(); using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery("SELECT `text` FROM `bots_speech` WHERE `bot_id` = @id"); dbClient.AddParameter("id", BotId); DataTable BotSpeech = dbClient.getTable(); List<RandomSpeech> Speeches = new List<RandomSpeech>(); foreach (DataRow Speech in BotSpeech.Rows) { RoomBot.RandomSpeech.Add(new RandomSpeech(Convert.ToString(Speech["text"]), BotId)); } } #endregion break; } #endregion #region Relax (3) case 3: { if (Bot.BotData.WalkingMode == "stand") Bot.BotData.WalkingMode = "freeroam"; else Bot.BotData.WalkingMode = "stand"; using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.RunQuery("UPDATE `bots` SET `walk_mode` = '" + Bot.BotData.WalkingMode + "' WHERE `id` = '" + Bot.BotData.Id + "' LIMIT 1"); } break; } #endregion #region Dance (4) case 4: { if (Bot.BotData.DanceId > 0) Bot.BotData.DanceId = 0; else { Random RandomDance = new Random(); Bot.BotData.DanceId = RandomDance.Next(1, 4); } Room.SendMessage(new DanceComposer(Bot, Bot.BotData.DanceId)); break; } #endregion #region Change Name (5) case 5: { if (DataString.Length == 0) { Session.SendWhisper("Come on, atleast give the bot a name!"); return; } else if (DataString.Length >= 16) { Session.SendWhisper("Come on, the bot doesn't need a name that long!"); return; } if (DataString.Contains("<img src") || DataString.Contains("<font ") || DataString.Contains("</font>") || DataString.Contains("</a>") || DataString.Contains("<i>")) { Session.SendWhisper("No HTML, please :<"); return; } Bot.BotData.Name = DataString; using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery("UPDATE `bots` SET `name` = @name WHERE `id` = '" + Bot.BotData.Id + "' LIMIT 1"); dbClient.AddParameter("name", DataString); dbClient.RunQuery(); } Room.SendMessage(new UsersComposer(Bot)); break; } #endregion } }
public void Serialize(ServerPacket Message, GameClient Session) { Relationship Relationship = null; if(Session != null && Session.GetHabbo() != null && Session.GetHabbo().Relationships != null) Relationship = Session.GetHabbo().Relationships.FirstOrDefault(x => x.Value.UserId == Convert.ToInt32(UserId)).Value; int y = Relationship == null ? 0 : Relationship.Type; Message.WriteInteger(UserId); Message.WriteString(mUsername); Message.WriteInteger(1); Message.WriteBoolean(!mAppearOffline || Session.GetHabbo().GetPermissions().HasRight("mod_tool") ? IsOnline : false); Message.WriteBoolean(!mHideInroom || Session.GetHabbo().GetPermissions().HasRight("mod_tool") ? InRoom : false); Message.WriteString(IsOnline ? mLook : ""); Message.WriteInteger(0); // categoryid Message.WriteString(mMotto); Message.WriteString(string.Empty); // Facebook username Message.WriteString(string.Empty); Message.WriteBoolean(true); // Allows offline messaging Message.WriteBoolean(false); // ? Message.WriteBoolean(false); // Uses phone Message.WriteShort(y); }
public static void GenerateWallExtradata(Item Item, ServerPacket Message) { switch (Item.GetBaseItem().InteractionType) { default: Message.WriteString(Item.ExtraData); break; case InteractionType.POSTIT: Message.WriteString(Item.ExtraData.Split(' ')[0]); break; } }
public static void GenerateExtradata(Item Item, ServerPacket Message) { switch (Item.GetBaseItem().InteractionType) { default: Message.WriteInteger(1); Message.WriteInteger(0); Message.WriteString(Item.GetBaseItem().InteractionType != InteractionType.FOOTBALL_GATE ? Item.ExtraData : string.Empty); break; case InteractionType.GNOME_BOX: Message.WriteInteger(0); Message.WriteInteger(0); Message.WriteString(""); break; case InteractionType.PET_BREEDING_BOX: case InteractionType.PURCHASABLE_CLOTHING: Message.WriteInteger(0); Message.WriteInteger(0); Message.WriteString("0"); break; case InteractionType.STACKTOOL: Message.WriteInteger(0); Message.WriteInteger(0); Message.WriteString(""); break; case InteractionType.WALLPAPER: Message.WriteInteger(2); Message.WriteInteger(0); Message.WriteString(Item.ExtraData); break; case InteractionType.FLOOR: Message.WriteInteger(3); Message.WriteInteger(0); Message.WriteString(Item.ExtraData); break; case InteractionType.LANDSCAPE: Message.WriteInteger(4); Message.WriteInteger(0); Message.WriteString(Item.ExtraData); break; case InteractionType.GUILD_ITEM: case InteractionType.GUILD_GATE: case InteractionType.GUILD_FORUM: Group Group = null; if (!PlusEnvironment.GetGame().GetGroupManager().TryGetGroup(Item.GroupId, out Group)) { Message.WriteInteger(1); Message.WriteInteger(0); Message.WriteString(Item.ExtraData); } else { Message.WriteInteger(0); Message.WriteInteger(2); Message.WriteInteger(5); Message.WriteString(Item.ExtraData); Message.WriteString(Group.Id.ToString()); Message.WriteString(Group.Badge); Message.WriteString(PlusEnvironment.GetGame().GetGroupManager().GetGroupColour(Group.Colour1, true)); // Group Colour 1 Message.WriteString(PlusEnvironment.GetGame().GetGroupManager().GetGroupColour(Group.Colour2, false)); // Group Colour 2 } break; case InteractionType.BACKGROUND: Message.WriteInteger(0); Message.WriteInteger(1); if (!String.IsNullOrEmpty(Item.ExtraData)) { Message.WriteInteger(Item.ExtraData.Split(Convert.ToChar(9)).Length / 2); for (int i = 0; i <= Item.ExtraData.Split(Convert.ToChar(9)).Length - 1; i++) { Message.WriteString(Item.ExtraData.Split(Convert.ToChar(9))[i]); } } else { Message.WriteInteger(0); } break; case InteractionType.GIFT: { string[] ExtraData = Item.ExtraData.Split(Convert.ToChar(5)); if (ExtraData.Length != 7) { Message.WriteInteger(0); Message.WriteInteger(0); Message.WriteString(Item.ExtraData); } else { int Style = int.Parse(ExtraData[6]) * 1000 + int.Parse(ExtraData[6]); UserCache Purchaser = PlusEnvironment.GetGame().GetCacheManager().GenerateUser(Convert.ToInt32(ExtraData[2])); if (Purchaser == null) { Message.WriteInteger(0); Message.WriteInteger(0); Message.WriteString(Item.ExtraData); } else { Message.WriteInteger(Style); Message.WriteInteger(1); Message.WriteInteger(6); Message.WriteString("EXTRA_PARAM"); Message.WriteString(""); Message.WriteString("MESSAGE"); Message.WriteString(ExtraData[1]); Message.WriteString("PURCHASER_NAME"); Message.WriteString(Purchaser.Username); Message.WriteString("PURCHASER_FIGURE"); Message.WriteString(Purchaser.Look); Message.WriteString("PRODUCT_CODE"); Message.WriteString("A1 KUMIANKKA"); Message.WriteString("state"); Message.WriteString(Item.MagicRemove == true ? "1" : "0"); } } } break; case InteractionType.MANNEQUIN: Message.WriteInteger(0); Message.WriteInteger(1); Message.WriteInteger(3); if (Item.ExtraData.Contains(Convert.ToChar(5).ToString())) { string[] Stuff = Item.ExtraData.Split(Convert.ToChar(5)); Message.WriteString("GENDER"); Message.WriteString(Stuff[0]); Message.WriteString("FIGURE"); Message.WriteString(Stuff[1]); Message.WriteString("OUTFIT_NAME"); Message.WriteString(Stuff[2]); } else { Message.WriteString("GENDER"); Message.WriteString(""); Message.WriteString("FIGURE"); Message.WriteString(""); Message.WriteString("OUTFIT_NAME"); Message.WriteString(""); } break; case InteractionType.TONER: if (Item.RoomId != 0) { if (Item.GetRoom().TonerData == null) Item.GetRoom().TonerData = new TonerData(Item.Id); Message.WriteInteger(0); Message.WriteInteger(5); Message.WriteInteger(4); Message.WriteInteger(Item.GetRoom().TonerData.Enabled); Message.WriteInteger(Item.GetRoom().TonerData.Hue); Message.WriteInteger(Item.GetRoom().TonerData.Saturation); Message.WriteInteger(Item.GetRoom().TonerData.Lightness); } else { Message.WriteInteger(0); Message.WriteInteger(0); Message.WriteString(string.Empty); } break; case InteractionType.BADGE_DISPLAY: Message.WriteInteger(0); Message.WriteInteger(2); Message.WriteInteger(4); string[] BadgeData = Item.ExtraData.Split(Convert.ToChar(9)); if (Item.ExtraData.Contains(Convert.ToChar(9).ToString())) { Message.WriteString("0");//No idea Message.WriteString(BadgeData[0]);//Badge name Message.WriteString(BadgeData[1]);//Owner Message.WriteString(BadgeData[2]);//Date } else { Message.WriteString("0");//No idea Message.WriteString("DEV");//Badge name Message.WriteString("Sledmore");//Owner Message.WriteString("13-13-1337");//Date } break; case InteractionType.TELEVISION: Message.WriteInteger(0); Message.WriteInteger(1); Message.WriteInteger(1); Message.WriteString("THUMBNAIL_URL"); //Message.WriteString("http://img.youtube.com/vi/" + PlusEnvironment.GetGame().GetTelevisionManager().TelevisionList.OrderBy(x => Guid.NewGuid()).FirstOrDefault().YouTubeId + "/3.jpg"); Message.WriteString(""); break; case InteractionType.LOVELOCK: if (Item.ExtraData.Contains(Convert.ToChar(5).ToString())) { var EData = Item.ExtraData.Split((char)5); int I = 0; Message.WriteInteger(0); Message.WriteInteger(2); Message.WriteInteger(EData.Length); while (I < EData.Length) { Message.WriteString(EData[I]); I++; } } else { Message.WriteInteger(0); Message.WriteInteger(0); Message.WriteString("0"); } break; case InteractionType.MONSTERPLANT_SEED: Message.WriteInteger(0); Message.WriteInteger(1); Message.WriteInteger(1); Message.WriteString("rarity"); Message.WriteString("1");//Leve should be dynamic. break; } }