internal static ServerMessage Compose(GameClient Session, List<Achievement> Achievements) { ServerMessage Message = new ServerMessage(436); //436 Message.AppendInt32(Achievements.Count); foreach (Achievement Achievement in Achievements) { UserAchievement UserData = Session.GetHabbo().GetAchievementData(Achievement.GroupName); int TargetLevel = (UserData != null ? UserData.Level + 1 : 1); int TotalLevels = Achievement.Levels.Count; if (TargetLevel > TotalLevels) { TargetLevel = TotalLevels; } AchievementLevel TargetLevelData = Achievement.Levels[TargetLevel]; Message.AppendUInt(Achievement.Id); // Unknown (ID?) Message.AppendInt32(TargetLevel); // Target level Message.AppendStringWithBreak(Achievement.GroupName + TargetLevel); // Target name/desc/badge Message.AppendInt32(TargetLevelData.Requirement); // Progress req/target Message.AppendInt32(TargetLevelData.RewardPixels); // Pixel reward Message.AppendInt32(TargetLevelData.RewardPoints); // Unknown(??) Message.AppendInt32(UserData != null ? UserData.Progress : 0); // Current progress Message.AppendBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AppendStringWithBreak(Achievement.Category); // Category Message.AppendInt32(TotalLevels); // Total amount of levels } return Message; }
internal static ServerMessage Compose(List<Achievement> Achievements) { ServerMessage Message = new ServerMessage(627); //627 Message.AppendInt32(Achievements.Count); foreach (Achievement Achievement in Achievements) { string DisplayName = Achievement.GroupName; if (DisplayName.StartsWith("ACH_")) { DisplayName = DisplayName.Substring(4); } Message.AppendStringWithBreak(DisplayName); Message.AppendInt32(Achievement.Levels.Count); foreach (AchievementLevel Level in Achievement.Levels.Values) { Message.AppendInt32(Level.Level); Message.AppendInt32(Level.Requirement); } } return Message; }
internal void Serialize(ref ServerMessage message) { foreach (ChatMessage chatMessage in listOfMessages) { chatMessage.Serialize(ref message); } }
internal static ServerMessage SerializeTopic(HelpTopic Topic) { ServerMessage Top = new ServerMessage(520); Top.AppendUInt(Topic.TopicId); Top.AppendStringWithBreak(Topic.Body); return Top; }
internal static ServerMessage SerializeSearchResults(string Query) { DataTable Results = null; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == Pici.Storage.Database.DatabaseType.MySQL) dbClient.setQuery("SELECT id,title FROM help_topics WHERE title LIKE @query OR body LIKE @query LIMIT 25"); else dbClient.setQuery("SELECT TOP 25 id,title FROM help_topics WHERE title LIKE @query OR body LIKE @query"); dbClient.addParameter("query", Query + "%"); Results = dbClient.getTable(); } // HII[KBCan I pay to be unbanned? ServerMessage Search = new ServerMessage(521); if (Results == null) { Search.AppendBoolean(false); return Search; } Search.AppendInt32(Results.Rows.Count); foreach (DataRow Row in Results.Rows) { Search.AppendUInt(Convert.ToUInt32(Row["id"])); Search.AppendStringWithBreak((string)Row["title"]); } return Search; }
internal Trade(UInt32 UserOneId, UInt32 UserTwoId, UInt32 RoomId) { this.oneId = UserOneId; this.twoId = UserTwoId; this.Users = new TradeUser[2]; this.Users[0] = new TradeUser(UserOneId, RoomId); this.Users[1] = new TradeUser(UserTwoId, RoomId); this.TradeStage = 1; this.RoomId = RoomId; foreach (TradeUser User in Users) { if (!User.GetRoomUser().Statusses.ContainsKey("trd")) { User.GetRoomUser().AddStatus("trd", ""); User.GetRoomUser().UpdateNeeded = true; } } ServerMessage Message = new ServerMessage(104); Message.AppendUInt(UserOneId); Message.AppendBoolean(true); Message.AppendUInt(UserTwoId); Message.AppendBoolean(true); SendMessageToUsers(Message); }
internal void DeliverInstantMessage(string message, uint convoID) { ServerMessage InstantMessage = new ServerMessage(134); InstantMessage.AppendUInt(convoID); InstantMessage.AppendString(message); GetClient().SendMessage(InstantMessage); }
internal void Serialize(ServerMessage Request) { // BDhqu@UMeth0d1322033860 Request.AppendUInt(FromUser); Request.AppendStringWithBreak(mUsername); Request.AppendStringWithBreak(FromUser.ToString()); }
internal void Serialize(ref ServerMessage packet) { packet.AppendInt32(timeSpoken.Hour); packet.AppendInt32(timeSpoken.Minute); packet.AppendUInt(userID); packet.AppendStringWithBreak(username); packet.AppendStringWithBreak(message); }
internal static ServerMessage SerializeUpdate(MessengerBuddy friend) { ServerMessage reply = new ServerMessage(13); reply.AppendInt32(0); reply.AppendInt32(1); reply.AppendInt32(0); friend.Serialize(reply); reply.AppendBoolean(false); return reply; }
internal void Serialize(ServerMessage Message) { Message.AppendInt32(BackgroundImage); Message.AppendInt32(ForegroundImage); Message.AppendInt32(Items.Count); foreach (KeyValuePair<int, int> Item in Items) { Message.AppendInt32(Item.Key); Message.AppendInt32(Item.Value); } }
internal static ServerMessage Compose(int PlaylistCapacity, List<SongInstance> Playlist) { ServerMessage Message = new ServerMessage(334); Message.AppendInt32(PlaylistCapacity); Message.AppendInt32(Playlist.Count); foreach (SongInstance Song in Playlist) { Message.AppendUInt(Song.DiskItem.itemID); Message.AppendUInt(Song.SongData.Id); } return Message; }
internal void MoveBall(RoomItem item, GameClient mover, int newX, int newY) { if (item == null || mover == null) return; if (!room.GetGameMap().itemCanBePlacedHere(newX, newY)) return; Point oldRoomCoord = item.Coordinate; bool itemIsOnGameItem = GameItemOverlaps(item); Double NewZ = room.GetGameMap().Model.SqFloorHeight[newX, newY]; ServerMessage Message = new ServerMessage(95); Message.AppendUInt(item.Id); Message.AppendInt32(3508); Message.AppendInt32(item.Coordinate.X); Message.AppendInt32(item.Coordinate.Y); Message.AppendInt32(newX); Message.AppendInt32(newY); Message.AppendInt32(4); Message.AppendStringWithBreak(NewZ.ToString()); Message.AppendStringWithBreak("H11"); Message.AppendInt32(-1); Message.AppendInt32(0); room.SendMessage(Message); ServerMessage mMessage = new ServerMessage(); mMessage.Init(230); // Cf mMessage.AppendInt32(item.Coordinate.X); mMessage.AppendInt32(item.Coordinate.Y); mMessage.AppendInt32(newX); mMessage.AppendInt32(newY); mMessage.AppendInt32(1); mMessage.AppendUInt(item.Id); mMessage.AppendStringWithBreak(item.GetZ.ToString().Replace(',', '.')); mMessage.AppendStringWithBreak(NewZ.ToString().Replace(',', '.')); mMessage.AppendInt32(0); room.SendMessage(mMessage); if (oldRoomCoord.X == newX && oldRoomCoord.Y == newY) return; room.GetRoomItemHandler().SetFloorItem(mover, item, newX, newY, item.Rot, false, false, false, false); if (!itemIsOnGameItem) HandleFootballGameItems(new Point(newX, newY), room.GetRoomUserManager().GetRoomUserByHabbo(mover.GetHabbo().Id)); }
internal static ServerMessage Compose(Achievement Achievement, int Level, int PointReward, int PixelReward) { ServerMessage Message = new ServerMessage(437); Message.AppendUInt(Achievement.Id); // Achievement ID Message.AppendInt32(Level); // Achieved level Message.AppendInt32(144); // Unknown. Random useless number. Message.AppendStringWithBreak(Achievement.GroupName + Level); // Achieved name Message.AppendInt32(PointReward); // Point reward Message.AppendInt32(PixelReward); // Pixel reward Message.AppendInt32(0); // Unknown. Message.AppendInt32(10); // Unknown. Message.AppendInt32(21); // Unknown. (Extra reward?) Message.AppendStringWithBreak(Level > 1 ? Achievement.GroupName + (Level - 1) : string.Empty); Message.AppendStringWithBreak(Achievement.Category); return Message; }
internal static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) { ServerMessage Message = new ServerMessage(913); Message.AppendUInt(Achievement.Id); // Unknown (ID?) Message.AppendInt32(TargetLevel); // Target level Message.AppendStringWithBreak(Achievement.GroupName + TargetLevel); // Target name/desc/badge Message.AppendInt32(TargetLevelData.Requirement); // Progress req/target Message.AppendInt32(TargetLevelData.RewardPixels); // Pixel reward Message.AppendInt32(TargetLevelData.RewardPoints); // Unknown(??) Message.AppendInt32(UserData != null ? UserData.Progress : 0); // Current progress Message.AppendBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AppendStringWithBreak(Achievement.Category); // Category Message.AppendInt32(TotalLevels); // Total amount of levels return Message; }
public static ServerMessage Compose(List<SongData> Songs) { ServerMessage Message = new ServerMessage(300); Message.AppendInt32(Songs.Count); foreach (SongData Song in Songs) { Message.AppendUInt(Song.Id); Message.AppendStringWithBreak(Song.Name); Message.AppendStringWithBreak(Song.Data); Message.AppendInt32(Song.LengthMiliseconds); Message.AppendStringWithBreak(Song.Artist); } return Message; }
internal void SerializeFloor(ServerMessage Message, Boolean Inventory) { Message.AppendUInt(Id); Message.AppendStringWithBreak(mBaseItem.Type.ToString().ToUpper()); Message.AppendUInt(Id); Message.AppendInt32(GetBaseItem().SpriteId); Message.AppendInt32(1); Message.AppendStringWithBreak(ExtraData); Message.AppendBoolean(GetBaseItem().AllowRecycle); Message.AppendBoolean(GetBaseItem().AllowTrade); Message.AppendBoolean(GetBaseItem().AllowInventoryStack); Message.AppendBoolean(Marketplace.CanSellItem(this)); Message.AppendInt32(-1); Message.AppendStringWithBreak(""); Message.AppendInt32(0); }
public bool Handle(RoomUser user, Team team, RoomItem item) { if (user != null && !user.IsBot && user.GetClient() != null) { ServerMessage servermsg = new ServerMessage(); servermsg.Init(25); servermsg.AppendInt32(user.VirtualId); servermsg.AppendStringWithBreak(message); servermsg.AppendBoolean(false); user.GetClient().SendMessage(servermsg); handler.OnEvent(itemID); return true; } return false; }
internal void Searialize(ServerMessage reply) { reply.AppendUInt(userID); reply.AppendStringWithBreak(username); reply.AppendStringWithBreak(motto); bool Online = (PiciEnvironment.GetGame().GetClientManager().GetClient(userID) != null); reply.AppendBoolean(Online); reply.AppendBoolean(false); reply.AppendStringWithBreak(string.Empty); reply.AppendBoolean(false); reply.AppendStringWithBreak(look); reply.AppendStringWithBreak(last_online); reply.AppendStringWithBreak(string.Empty); }
internal ServerMessage Serialize(GameClient Session) { ServerMessage Message = new ServerMessage(370); Message.AppendStringWithBreak(Session.GetHabbo().Id + ""); Message.AppendStringWithBreak(Session.GetHabbo().Username); Message.AppendStringWithBreak(RoomId + ""); Message.AppendInt32(Category); Message.AppendStringWithBreak(Name); Message.AppendStringWithBreak(Description); Message.AppendStringWithBreak(StartTime); Message.AppendInt32(Tags.Count); foreach (string Tag in Tags.ToArray()) { Message.AppendStringWithBreak(Tag); } return Message; }
internal void Serialize(ServerMessage Message) { try { Message.AppendUInt(Id); Message.AppendStringWithBreak(Name); Message.AppendInt32(CreditsCost); if (CrystalCost > 0) { Message.AppendInt32(CrystalCost); Message.AppendInt32(4); // Hearts } else { Message.AppendInt32(PixelsCost); Message.AppendInt32(0); // Page Type; 0 = nothing, 1 = Snowflakes, 2 = hearts, 3 = ? } Message.AppendInt32(1); Message.AppendStringWithBreak(GetBaseItem().Type.ToString()); Message.AppendInt32(GetBaseItem().SpriteId); if (Name.Contains("wallpaper_single") || Name.Contains("floor_single") || Name.Contains("landscape_single")) { string[] Analyze = Name.Split('_'); Message.AppendStringWithBreak(Analyze[2]); } else if (this.songID > 0 && GetBaseItem().InteractionType == InteractionType.musicdisc) { Message.AppendStringWithBreak(songID.ToString()); } else { Message.AppendStringWithBreak(string.Empty); } Message.AppendInt32(Amount); Message.AppendInt32(-1); Message.AppendInt32(0); } catch { Console.WriteLine("Unable to load furniture item " + Id + ": " + Name); } }
internal static void TryRedeemVoucher(GameClient Session, string Code) { if (!IsValidCode(Code)) { ServerMessage Error = new ServerMessage(213); Error.AppendRawInt32(1); Session.SendMessage(Error); return; } int Value = GetVoucherValue(Code); TryDeleteVoucher(Code); Session.GetHabbo().Credits += Value; Session.GetHabbo().UpdateCreditsBalance(); Session.SendMessage(new ServerMessage(212)); }
internal static ServerMessage Compose(uint SongId, int PlaylistItemNumber, int SyncTimestampMs) { ServerMessage Message = new ServerMessage(327); if (SongId == 0) { Message.AppendInt32(-1); Message.AppendInt32(-1); Message.AppendInt32(-1); Message.AppendInt32(-1); Message.AppendInt32(0); } else { Message.AppendUInt(SongId); Message.AppendInt32(PlaylistItemNumber); Message.AppendUInt(SongId); Message.AppendInt32(0); Message.AppendInt32(SyncTimestampMs); } return Message; }
internal void Serialize(ServerMessage Message) { if (!Category) { Message.AppendInt32(Id); Message.AppendStringWithBreak((Type == 1) ? Caption : RoomData.Name); Message.AppendStringWithBreak(RoomData.Description); Message.AppendInt32(Type); Message.AppendStringWithBreak(Caption); Message.AppendStringWithBreak((ImageType == PublicImageType.EXTERNAL) ? Image : string.Empty); Message.AppendInt32(ParentId); Message.AppendInt32(RoomData.UsersNow); Message.AppendInt32(3); Message.AppendStringWithBreak((ImageType == PublicImageType.INTERNAL) ? Image : string.Empty); Message.AppendInt32(0); Message.AppendInt32(0); Message.AppendStringWithBreak(RoomData.CCTs); Message.AppendInt32(RoomData.UsersMax); Message.AppendUInt(RoomId); } else if (Category) { Message.AppendInt32(Id); Message.AppendStringWithBreak(Caption); Message.AppendStringWithBreak(string.Empty); Message.AppendBoolean(true); Message.AppendStringWithBreak(string.Empty); Message.AppendStringWithBreak(Image); Message.AppendBoolean(false); Message.AppendBoolean(false); Message.AppendInt32(4); Message.AppendBoolean(false); } }
public void Invoke(GameClient Session, ClientMessage Request) { ServerMessage InitCrypto = new ServerMessage(MessageComposerIds.InitCryptoMessageComposer); InitCrypto.Append(default(int)); }
internal ServerMessage SerializeRequests() { ServerMessage reply = new ServerMessage(314); reply.AppendInt32(requests.Count); reply.AppendInt32(requests.Count); foreach (MessengerRequest request in requests.Values) { request.Serialize(reply); } return reply; }
public FusedPacket(ServerMessage content, string requirements) { this.content = content; this.requirements = requirements; }
internal ServerMessage SerializeFriends() { ServerMessage reply = new ServerMessage(12); reply.AppendInt32(600); reply.AppendInt32(200); reply.AppendInt32(600); reply.AppendInt32(900); reply.AppendBoolean(false); reply.AppendInt32(friends.Count); foreach (MessengerBuddy friend in friends.Values) { friend.Serialize(reply); } return reply; }
internal bool RequestBuddy(string UserQuery) { uint userID; bool hasFQDisabled; GameClient client = PiciEnvironment.GetGame().GetClientManager().GetClientByUsername(UserQuery); if (client == null) { DataRow Row = null; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT id,block_newfriends FROM users WHERE username = @query"); dbClient.addParameter("query", UserQuery.ToLower()); Row = dbClient.getRow(); } if (Row == null) return false; userID = Convert.ToUInt32(Row["id"]); hasFQDisabled = PiciEnvironment.EnumToBool(Row["block_newfriends"].ToString()); } else { userID = client.GetHabbo().Id; hasFQDisabled = client.GetHabbo().HasFriendRequestsDisabled; } if (hasFQDisabled) { GetClient().GetMessageHandler().GetResponse().Init(260); GetClient().GetMessageHandler().GetResponse().AppendInt32(39); GetClient().GetMessageHandler().GetResponse().AppendInt32(3); GetClient().GetMessageHandler().SendResponse(); return true; } uint ToId = userID; if (RequestExists(ToId)) { return true; } using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == DatabaseType.MSSQL) { dbClient.runFastQuery("DELETE FROM messenger_requests WHERE sender = " + userID + " AND receiver = " + ToId); dbClient.runFastQuery("INSERT INTO messenger_requests (sender,receiver) VALUES (" + this.UserId + "," + ToId + ")"); } else { dbClient.runFastQuery("REPLACE INTO messenger_requests (sender,receiver) VALUES (" + this.UserId + "," + ToId + ")"); } } GameClient ToUser = PiciEnvironment.GetGame().GetClientManager().GetClientByUserID(ToId); if (ToUser == null || ToUser.GetHabbo() == null) { return true; } MessengerRequest Request = new MessengerRequest(ToId, UserId, PiciEnvironment.GetGame().GetClientManager().GetNameById(UserId)); ToUser.GetHabbo().GetMessenger().OnNewRequest(UserId); ServerMessage NewFriendNotif = new ServerMessage(132); Request.Serialize(NewFriendNotif); ToUser.SendMessage(NewFriendNotif); requests.Add(ToId, Request); return true; }
internal ServerMessage PerformSearch(string query) { List<SearchResult> results = SearchResultFactory.GetSearchResult(query); List<SearchResult> existingFriends = new List<SearchResult>(); List<SearchResult> othersUsers = new List<SearchResult>(); foreach (SearchResult result in results) { if (FriendshipExists(result.userID)) existingFriends.Add(result); else othersUsers.Add(result); } ServerMessage reply = new ServerMessage(435); reply.AppendInt32(existingFriends.Count); foreach (SearchResult result in existingFriends) { result.Searialize(reply); } reply.AppendInt32(othersUsers.Count); foreach (SearchResult result in othersUsers) { result.Searialize(reply); } return reply; }
internal void appendResponse(ServerMessage message) { Appends(message.GetBytes()); }
internal void DeliverInstantMessageError(int ErrorId, UInt32 ConversationId) { /* 3 = Your friend is muted and cannot reply. 4 = Your message was not sent because you are muted. 5 = Your friend is not online. 6 = Receiver is not your friend anymore. 7 = Your friend is busy. 8 = Your friend is wanking*/ ServerMessage reply = new ServerMessage(261); reply.AppendInt32(ErrorId); reply.AppendUInt(ConversationId); GetClient().SendMessage(reply); }
internal void UpdateBadges() { Session.GetHabbo().GetBadgeComponent().ResetSlots(); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("UPDATE user_badges SET badge_slot = 0 WHERE user_id = " + Session.GetHabbo().Id); } if (Request.RemainingLength > 0) { while (Request.RemainingLength > 0) { int Slot = Request.PopWiredInt32(); string Badge = Request.PopFixedString(); if (Badge.Length == 0) { continue; } if (!Session.GetHabbo().GetBadgeComponent().HasBadge(Badge) || Slot < 1 || Slot > 5) { return; } Session.GetHabbo().GetBadgeComponent().GetBadge(Badge).Slot = Slot; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("UPDATE user_badges SET badge_slot = " + Slot + " WHERE badge_id = @badge AND user_id = " + Session.GetHabbo().Id + ""); dbClient.addParameter("badge", Badge); dbClient.runQuery(); } } PiciEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.PROFILE_BADGE); } ServerMessage Message = new ServerMessage(228); Message.AppendUInt(Session.GetHabbo().Id); Message.AppendInt32(Session.GetHabbo().GetBadgeComponent().EquippedCount); foreach (Badge Badge in Session.GetHabbo().GetBadgeComponent().BadgeList.Values) { if (Badge.Slot <= 0) { continue; } Message.AppendInt32(Badge.Slot); Message.AppendString(Badge.Code); } if (Session.GetHabbo().InRoom&& PiciEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId) != null) { PiciEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId).SendMessage(Message); } else { Session.SendMessage(Message); } }
//private delegate void RequestHandler(); //private Dictionary<uint, RequestHandler> RequestHandlers; public GameClientMessageHandler(GameClient Session) { this.Session = Session; //this.RequestHandlers = new Dictionary<uint, RequestHandler>(); this.Response = new ServerMessage(0); }
internal void ChangeLook() { if (Session.GetHabbo().MutantPenalty) { Session.SendNotif("Because of a penalty or restriction on your account, you are not allowed to change your look."); return; } string Gender = Request.PopFixedString().ToUpper(); string Look = PiciEnvironment.FilterInjectionChars(Request.PopFixedString()); if (!AntiMutant.ValidateLook(Look, Gender)) { return; } PiciEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.PROFILE_CHANGE_LOOK); Session.GetHabbo().Look = PiciEnvironment.FilterFigure(Look); Session.GetHabbo().Gender = Gender.ToLower(); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("UPDATE users SET look = @look, gender = @gender WHERE id = " + Session.GetHabbo().Id); dbClient.addParameter("look", Look); dbClient.addParameter("gender", Gender); dbClient.runQuery(); } PiciEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(Session, "ACH_AvatarLooks", 1); Session.GetMessageHandler().GetResponse().Init(266); Session.GetMessageHandler().GetResponse().AppendInt32(-1); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Session.GetHabbo().Look); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Session.GetHabbo().Gender.ToLower()); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Session.GetHabbo().Motto); Session.GetMessageHandler().SendResponse(); if (Session.GetHabbo().InRoom) { Room Room = Session.GetHabbo().CurrentRoom; if (Room == null) { return; } RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id); if (User == null) { return; } ServerMessage RoomUpdate = new ServerMessage(266); RoomUpdate.AppendInt32(User.VirtualId); RoomUpdate.AppendStringWithBreak(Session.GetHabbo().Look); RoomUpdate.AppendStringWithBreak(Session.GetHabbo().Gender.ToLower()); RoomUpdate.AppendStringWithBreak(Session.GetHabbo().Motto); Room.SendMessage(RoomUpdate); } }