├── .editorconfig ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── Changelog.txt ├── Communication ├── Abstractions │ ├── IGameClientFactory.cs │ ├── IGameServerOptions.cs │ ├── TcpGameServer.cs │ └── WebsocketGameServer.cs ├── Attributes │ └── NoAuthenticationRequiredAttribute.cs ├── Encryption │ ├── Crypto │ │ ├── Prng │ │ │ └── ARC4.cs │ │ └── RSA │ │ │ ├── DoCalculateionDelegate.cs │ │ │ ├── Pkcs1PadType.cs │ │ │ └── RSAKey.cs │ ├── HabboEncryptionV2.cs │ ├── KeyExchange │ │ └── DiffieHellman.cs │ └── Keys │ │ └── RSAKeys.cs ├── Flash │ ├── FlashClientFactory.cs │ ├── FlashGameClient.cs │ ├── FlashIncomingPacket.cs │ ├── FlashOutgoingPacket.cs │ ├── FlashPacketFactory.cs │ ├── FlashRevision.cs │ ├── FlashServer.cs │ ├── FlashServerConfiguration.cs │ ├── IFlashServer.cs │ ├── IGameServer.cs │ └── PlusMemoryStream.cs ├── Nitro │ └── NitroServer.cs ├── Packets │ ├── IPacketEvent.cs │ ├── IPacketManager.cs │ ├── IServerPacket.cs │ ├── Incoming │ │ ├── Advertisement │ │ │ ├── GetInterstitialMessageEvent.cs │ │ │ └── InterstitialShownEvent.cs │ │ ├── Avatar │ │ │ ├── ChangeUserNameEvent.cs │ │ │ ├── CheckUserNameEvent.cs │ │ │ ├── GetWardrobeEvent.cs │ │ │ └── SaveWardrobeOutfitEvent.cs │ │ ├── Camera │ │ │ ├── InitCameraEvent.cs │ │ │ ├── PhotoCompetitionEvent.cs │ │ │ ├── PublishPhotoEvent.cs │ │ │ ├── PurchasePhotoEvent.cs │ │ │ ├── RenderRoomEvent.cs │ │ │ └── RenderRoomThumbnailEvent.cs │ │ ├── Campaign │ │ │ ├── OpenCampaignCalendarDoorAsStaffEvent.cs │ │ │ └── OpenCampaignCalendarDoorEvent.cs │ │ ├── Catalog │ │ │ ├── BuildersClubPlaceRoomItemEvent.cs │ │ │ ├── BuildersClubPlaceWallItemEvent.cs │ │ │ ├── BuildersClubQueryFurniCountEvent.cs │ │ │ ├── CheckGnomeNameEvent.cs │ │ │ ├── CheckPetNameEvent.cs │ │ │ ├── GetBonusRareInfoEvent.cs │ │ │ ├── GetBundleDiscountRulesetEvent.cs │ │ │ ├── GetCatalogIndexEvent.cs │ │ │ ├── GetCatalogModeEvent.cs │ │ │ ├── GetCatalogPageEvent.cs │ │ │ ├── GetCatalogPageExpirationEvent.cs │ │ │ ├── GetCatalogPageWithEarliestExpiryEvent.cs │ │ │ ├── GetCatalogRoomPromotionEvent.cs │ │ │ ├── GetClubGiftInfoEvent.cs │ │ │ ├── GetClubOffersEvent.cs │ │ │ ├── GetDirectClubBuyAvailableEvent.cs │ │ │ ├── GetGiftWrappingConfigurationEvent.cs │ │ │ ├── GetGroupFurniConfigEvent.cs │ │ │ ├── GetHabboBasicMembershipExtendOfferEvent.cs │ │ │ ├── GetHabboClubExtendOfferEvent.cs │ │ │ ├── GetIsOfferGiftableEvent.cs │ │ │ ├── GetLimitedOfferAppearingNextEvent.cs │ │ │ ├── GetMarketplaceConfigurationEvent.cs │ │ │ ├── GetNextTargetedOfferEvent.cs │ │ │ ├── GetPromotableRoomsEvent.cs │ │ │ ├── GetSeasonalCalendarDailyOfferEvent.cs │ │ │ ├── GetSellablePetPalettesEvent.cs │ │ │ ├── MarkCatalogNewAdditionsPageOpenedEvent.cs │ │ │ ├── PurchaseBasicMembershipExtensionEvent.cs │ │ │ ├── PurchaseFromCatalogAsGiftEvent.cs │ │ │ ├── PurchaseFromCatalogEvent.cs │ │ │ ├── PurchaseRoomAdEvent.cs │ │ │ ├── PurchaseTargetedOfferEvent.cs │ │ │ ├── PurchaseVipMembershipExtensionEvent.cs │ │ │ ├── RedeemVoucherEvent.cs │ │ │ ├── SelectClubGiftEvent.cs │ │ │ ├── SetTargetedOfferStateEvent.cs │ │ │ └── ShopTargetedOfferViewedEvent.cs │ │ ├── ClientPacket.cs │ │ ├── ClientPacketHeader.cs │ │ ├── Competition │ │ │ ├── ForwardToACompetitionRoomEvent.cs │ │ │ ├── ForwardToASubmittableRoomEvent.cs │ │ │ ├── ForwardToRandomCompetitionRoomEvent.cs │ │ │ ├── GetCurrentTimingCodeEvent.cs │ │ │ ├── GetIsUserPartOfCompetitionEvent.cs │ │ │ ├── GetSecondsUntilEvent.cs │ │ │ ├── RoomCompetitionInitEvent.cs │ │ │ ├── SubmitRoomToCompetitionEvent.cs │ │ │ └── VoteForRoomEvent.cs │ │ ├── Crafting │ │ │ ├── CraftEvent.cs │ │ │ ├── CraftSecretEvent.cs │ │ │ ├── GetCraftableProductsEvent.cs │ │ │ ├── GetCraftingRecipeEvent.cs │ │ │ └── GetCraftingRecipesAvailableEvent.cs │ │ ├── FriendFurni │ │ │ └── FriendFurniConfirmLockEvent.cs │ │ ├── FriendList │ │ │ ├── AcceptFriendEvent.cs │ │ │ ├── DeclineFriendEvent.cs │ │ │ ├── FindNewFriendsEvent.cs │ │ │ ├── FollowFriendEvent.cs │ │ │ ├── FriendListUpdateEvent.cs │ │ │ ├── GetBuddyRequestsEvent.cs │ │ │ ├── HabboSearchEvent.cs │ │ │ ├── MessengerInitEvent.cs │ │ │ ├── RemoveFriendEvent.cs │ │ │ ├── RequestFriendEvent.cs │ │ │ ├── SendMsgEvent.cs │ │ │ ├── SendRoomInviteEvent.cs │ │ │ ├── SetRelationshipStatusEvent.cs │ │ │ └── VisitUserEvent.cs │ │ ├── Game │ │ │ ├── Arena │ │ │ │ ├── Game2ExitGameEvent.cs │ │ │ │ ├── Game2GameChatEvent.cs │ │ │ │ ├── Game2LoadStageReadyEvent.cs │ │ │ │ └── Game2PlayAgainEvent.cs │ │ │ ├── Directory │ │ │ │ ├── Game2CheckGameDirectoryStatusEvent.cs │ │ │ │ └── Game2GetAccountGameStatusEven.cs │ │ │ ├── Ingame │ │ │ │ └── Game2RequestFullStatusUpdateEvent.cs │ │ │ ├── InitializeGameCenterEvent.cs │ │ │ ├── Lobby │ │ │ │ ├── GetGameAchievementsEvent.cs │ │ │ │ ├── GetGameListEvent.cs │ │ │ │ └── JoinQueueEvent.cs │ │ │ └── Score │ │ │ │ └── Game2GetWeeklyLeaderboardEvent.cs │ │ ├── Groups │ │ │ ├── AcceptGroupMembershipEvent.cs │ │ │ ├── DeclineGroupMembershipEvent.cs │ │ │ ├── DeleteGroupEvent.cs │ │ │ ├── GetBadgeEditorPartsEvent.cs │ │ │ ├── GetGroupCreationWindowEvent.cs │ │ │ ├── GetGroupInfoEvent.cs │ │ │ ├── GetGroupMembersEvent.cs │ │ │ ├── GiveAdminRightsEvent.cs │ │ │ ├── JoinGroupEvent.cs │ │ │ ├── ManageGroupEvent.cs │ │ │ ├── PurchaseGroupEvent.cs │ │ │ ├── RemoveGroupFavouriteEvent.cs │ │ │ ├── RemoveGroupMemberEvent.cs │ │ │ ├── SetGroupFavouriteEvent.cs │ │ │ ├── TakeAdminRightsEvent.cs │ │ │ ├── UpdateGroupBadgeEvent.cs │ │ │ ├── UpdateGroupColoursEvent.cs │ │ │ ├── UpdateGroupIdentityEvent.cs │ │ │ └── UpdateGroupSettingsEvent.cs │ │ ├── Handshake │ │ │ ├── ClientHelloEvent.cs │ │ │ ├── DisconnectEvent.cs │ │ │ ├── GenerateSecretKeyEvent.cs │ │ │ ├── InfoRetrieveEvent.cs │ │ │ ├── InitDiffieHandshakeEvent.cs │ │ │ ├── PongEvent.cs │ │ │ ├── SSOTicketEvent.cs │ │ │ ├── UniqueIDEvent.cs │ │ │ └── VersionCheckEvent.cs │ │ ├── Help │ │ │ ├── GetSanctionStatusEvent.cs │ │ │ ├── OnBullyClickEvent.cs │ │ │ ├── SendBullyReportEvent.cs │ │ │ └── SubmitBullyReportEvent.cs │ │ ├── Inventory │ │ │ ├── Achievements │ │ │ │ └── GetAchievementsEvent.cs │ │ │ ├── AvatarEffects │ │ │ │ ├── AvatarEffectActivatedEvent.cs │ │ │ │ └── AvatarEffectSelectedEvent.cs │ │ │ ├── Badges │ │ │ │ ├── GetBadgesEvent.cs │ │ │ │ └── SetActivatedBadgesEvent.cs │ │ │ ├── Bots │ │ │ │ └── GetBotInventoryEvent.cs │ │ │ ├── Furni │ │ │ │ └── RequestFurniInventoryEvent.cs │ │ │ ├── Pets │ │ │ │ └── GetPetInventoryEvent.cs │ │ │ ├── Purse │ │ │ │ ├── GetCreditsInfoEvent.cs │ │ │ │ └── GetHabboClubWindowEvent.cs │ │ │ └── Trading │ │ │ │ ├── InitTradeEvent.cs │ │ │ │ ├── TradingAcceptEvent.cs │ │ │ │ ├── TradingCancelConfirmEvent.cs │ │ │ │ ├── TradingCancelEvent.cs │ │ │ │ ├── TradingConfirmEvent.cs │ │ │ │ ├── TradingModifyEvent.cs │ │ │ │ ├── TradingOfferItemEvent.cs │ │ │ │ ├── TradingOfferItemsEvent.cs │ │ │ │ └── TradingRemoveItemEvent.cs │ │ ├── LandingView │ │ │ ├── GetPromoArticlesEvent.cs │ │ │ └── RefreshCampaignEvent.cs │ │ ├── Marketplace │ │ │ ├── BuyOfferEvent.cs │ │ │ ├── CancelOfferEvent.cs │ │ │ ├── GetMarketplaceCanMakeOfferEvent.cs │ │ │ ├── GetMarketplaceItemStatsEvent.cs │ │ │ ├── GetOffersEvent.cs │ │ │ ├── GetOwnOffersEvent.cs │ │ │ ├── MakeOfferEvent.cs │ │ │ └── RedeemOfferCreditsEvent.cs │ │ ├── Moderation │ │ │ ├── CallForHelpPendingCallsDeletedEvent.cs │ │ │ ├── CloseIssueDefaultActionEvent.cs │ │ │ ├── CloseTicketEvent.cs │ │ │ ├── GetModeratorRoomChatlogEvent.cs │ │ │ ├── GetModeratorRoomInfoEvent.cs │ │ │ ├── GetModeratorTicketChatlogsEvent.cs │ │ │ ├── GetModeratorUserChatlogEvent.cs │ │ │ ├── GetModeratorUserInfoEvent.cs │ │ │ ├── GetModeratorUserRoomVisitsEvent.cs │ │ │ ├── ModerateRoomEvent.cs │ │ │ ├── ModerationBanEvent.cs │ │ │ ├── ModerationCautionEvent.cs │ │ │ ├── ModerationKickEvent.cs │ │ │ ├── ModerationMsgEvent.cs │ │ │ ├── ModerationMuteEvent.cs │ │ │ ├── ModerationTradeLockEvent.cs │ │ │ ├── ModeratorActionEvent.cs │ │ │ ├── OpenHelpToolEvent.cs │ │ │ ├── PickTicketEvent.cs │ │ │ ├── ReleaseTicketEvent.cs │ │ │ └── SubmitNewTicketEvent.cs │ │ ├── Navigator │ │ │ ├── AddFavouriteRoomEvent.cs │ │ │ ├── CanCreateRoomEvent.cs │ │ │ ├── CreateFlatEvent.cs │ │ │ ├── EditRoomPromotionEvent.cs │ │ │ ├── FindRandomFriendingRoomEvent.cs │ │ │ ├── GetEventCategoriesEvent.cs │ │ │ ├── GetGuestRoomEvent.cs │ │ │ ├── GetUserFlatCatsEvent.cs │ │ │ ├── GoToHotelViewEvent.cs │ │ │ ├── InitializeNewNavigatorEvent.cs │ │ │ ├── NavigatorSearchEvent.cs │ │ │ ├── RemoveFavouriteRoomEvent.cs │ │ │ └── UpdateNavigatorSettingsEvent.cs │ │ ├── Preferences │ │ │ ├── SetChatPreferenceEvent.cs │ │ │ ├── SetChatStylePreferenceEvent.cs │ │ │ └── SetUIFlagsEvent.cs │ │ ├── Quests │ │ │ ├── CancelQuestEvent.cs │ │ │ ├── GetCurrentQuestEvent.cs │ │ │ ├── GetDailyQuestEvent.cs │ │ │ ├── GetQuestListEvent.cs │ │ │ └── StartQuestEvent.cs │ │ ├── Recycler │ │ │ ├── GetRecyclerRewardsEvent.cs │ │ │ ├── GetRecyclerStatusEvent.cs │ │ │ └── RecyclerRecycleEvent.cs │ │ ├── Rooms │ │ │ ├── AI │ │ │ │ ├── Bots │ │ │ │ │ ├── OpenBotActionEvent.cs │ │ │ │ │ ├── PickUpBotEvent.cs │ │ │ │ │ ├── PlaceBotEvent.cs │ │ │ │ │ └── SaveBotActionEvent.cs │ │ │ │ └── Pets │ │ │ │ │ ├── GetPetInformationEvent.cs │ │ │ │ │ ├── GetPetTrainingPanelEvent.cs │ │ │ │ │ ├── Horse │ │ │ │ │ ├── ApplyHorseEffectEvent.cs │ │ │ │ │ ├── ModifyWhoCanRideHorseEvent.cs │ │ │ │ │ ├── RemoveSaddleFromHorseEvent.cs │ │ │ │ │ └── RideHorseEvent.cs │ │ │ │ │ ├── PickUpPetEvent.cs │ │ │ │ │ ├── PlacePetEvent.cs │ │ │ │ │ └── RespectPetEvent.cs │ │ │ ├── Action │ │ │ │ ├── AmbassadorAlertEvent.cs │ │ │ │ ├── AssignRightsEvent.cs │ │ │ │ ├── BanUserEvent.cs │ │ │ │ ├── GiveHandItemEvent.cs │ │ │ │ ├── GiveRoomScoreEvent.cs │ │ │ │ ├── IgnoreUserEvent.cs │ │ │ │ ├── KickUserEvent.cs │ │ │ │ ├── LetUserInEvent.cs │ │ │ │ ├── MuteUserEvent.cs │ │ │ │ ├── RemoveAllRightsEvent.cs │ │ │ │ ├── RemoveMyRightsEvent.cs │ │ │ │ ├── RemoveRightsEvent.cs │ │ │ │ └── UnIgnoreUserEvent.cs │ │ │ ├── Avatar │ │ │ │ ├── ActionEvent.cs │ │ │ │ ├── ApplySignEvent.cs │ │ │ │ ├── ChangeMottoEvent.cs │ │ │ │ ├── DanceEvent.cs │ │ │ │ ├── DropHandItemEvent.cs │ │ │ │ ├── LookToEvent.cs │ │ │ │ └── SitEvent.cs │ │ │ ├── Chat │ │ │ │ ├── CancelTypingEvent.cs │ │ │ │ ├── ChatEvent.cs │ │ │ │ ├── ShoutEvent.cs │ │ │ │ ├── StartTypingEvent.cs │ │ │ │ └── WhisperEvent.cs │ │ │ ├── Connection │ │ │ │ ├── GoToFlatEvent.cs │ │ │ │ └── OpenFlatConnectionEvent.cs │ │ │ ├── Engine │ │ │ │ ├── ApplyDecorationEvent.cs │ │ │ │ ├── GetFurnitureAliasesEvent.cs │ │ │ │ ├── GetRoomEntryDataEvent.cs │ │ │ │ ├── MoveAvatarEvent.cs │ │ │ │ ├── MoveObjectEvent.cs │ │ │ │ ├── MoveWallItemEvent.cs │ │ │ │ ├── PickupObjectEvent.cs │ │ │ │ ├── PlaceObjectEvent.cs │ │ │ │ ├── UseFurnitureEvent.cs │ │ │ │ └── UseWallItemEvent.cs │ │ │ ├── FloorPlan │ │ │ │ ├── FloorPlanEditorRoomPropertiesEvent.cs │ │ │ │ ├── InitializeFloorPlanSessionEvent.cs │ │ │ │ └── SaveFloorPlanModelEvent.cs │ │ │ ├── Furni │ │ │ │ ├── CreditFurniRedeemEvent.cs │ │ │ │ ├── DiceOffEvent.cs │ │ │ │ ├── GetGroupFurniSettingsEvent.cs │ │ │ │ ├── Moodlight │ │ │ │ │ ├── GetMoodlightConfigEvent.cs │ │ │ │ │ ├── MoodlightUpdateEvent.cs │ │ │ │ │ └── ToggleMoodlightEvent.cs │ │ │ │ ├── OneWayGateEvent.cs │ │ │ │ ├── OpenGiftEvent.cs │ │ │ │ ├── RentableSpaces │ │ │ │ │ └── GetRentableSpaceEvent.cs │ │ │ │ ├── SaveBrandingItemEvent.cs │ │ │ │ ├── SetMannequinFigureEvent.cs │ │ │ │ ├── SetMannequinNameEvent.cs │ │ │ │ ├── SetTonerEvent.cs │ │ │ │ ├── Stickys │ │ │ │ │ ├── AddStickyNoteEvent.cs │ │ │ │ │ ├── DeleteStickyNoteEvent.cs │ │ │ │ │ ├── GetStickyNoteEvent.cs │ │ │ │ │ └── UpdateStickyNoteEvent.cs │ │ │ │ ├── ThrowDiceEvent.cs │ │ │ │ ├── UpdateMagicTileEvent.cs │ │ │ │ ├── UseSellableClothingEvent.cs │ │ │ │ ├── Wired │ │ │ │ │ ├── SaveWiredConditionConfigEvent.cs │ │ │ │ │ ├── SaveWiredConfigEvent.cs │ │ │ │ │ ├── SaveWiredEffectConfigEvent.cs │ │ │ │ │ └── SaveWiredTriggerConfigEvent.cs │ │ │ │ └── YouTubeTelevisions │ │ │ │ │ ├── GetYouTubeTelevisionEvent.cs │ │ │ │ │ ├── ToggleYouTubeVideoEvent.cs │ │ │ │ │ ├── YouTubeGetNextVideo.cs │ │ │ │ │ └── YouTubeVideoInformationEvent.cs │ │ │ ├── Polls │ │ │ │ └── PollStartEvent.cs │ │ │ ├── RoomPacketEvent.cs │ │ │ └── Settings │ │ │ │ ├── DeleteRoomEvent.cs │ │ │ │ ├── GetRoomBannedUsersEvent.cs │ │ │ │ ├── GetRoomFilterListEvent.cs │ │ │ │ ├── GetRoomRightsEvent.cs │ │ │ │ ├── GetRoomSettingsEvent.cs │ │ │ │ ├── ModifyRoomFilterListEvent.cs │ │ │ │ ├── SaveEnforcedCategorySettingsEvent.cs │ │ │ │ ├── SaveRoomSettingsEvent.cs │ │ │ │ ├── ToggleMuteToolEvent.cs │ │ │ │ └── UnbanUserFromRoomEvent.cs │ │ ├── Sound │ │ │ ├── GetSongInfoEvent.cs │ │ │ └── SetSoundSettingsEvent.cs │ │ ├── Talents │ │ │ └── GetTalentTrackEvent.cs │ │ ├── Tracking │ │ │ ├── EventTrackerEvent.cs │ │ │ ├── LatencyTestEvent.cs │ │ │ └── MemoryPerformanceEvent.cs │ │ └── Users │ │ │ ├── GetHabboGroupBadgesEvent.cs │ │ │ ├── GetIgnoredUsersEvent.cs │ │ │ ├── GetRelationshipsEvent.cs │ │ │ ├── GetSelectedBadgesEvent.cs │ │ │ ├── GetUserTagsEvent.cs │ │ │ ├── OpenPlayerProfileEvent.cs │ │ │ ├── RespectUserEvent.cs │ │ │ ├── ScrGetUserInfoEvent.cs │ │ │ ├── SetMessengerInviteStatusEvent.cs │ │ │ ├── SetRelationshipEvent.cs │ │ │ ├── SetUserFocusPreferenceEvent.cs │ │ │ └── UpdateFigureDataEvent.cs │ ├── Outgoing │ │ ├── Avatar │ │ │ └── WardrobeComposer.cs │ │ ├── BuildersClub │ │ │ ├── BCBorrowedItemsComposer.cs │ │ │ └── BuildersClubMembershipComposer.cs │ │ ├── Catalog │ │ │ ├── CatalogIndexComposer.cs │ │ │ ├── CatalogItemDiscountComposer.cs │ │ │ ├── CatalogOfferComposer.cs │ │ │ ├── CatalogPageComposer.cs │ │ │ ├── CatalogUpdatedComposer.cs │ │ │ ├── CheckGnomeNameComposer.cs │ │ │ ├── CheckPetNameComposer.cs │ │ │ ├── ClubGiftsComposer.cs │ │ │ ├── GetCatalogRoomPromotionComposer.cs │ │ │ ├── GiftWrappingConfigurationComposer.cs │ │ │ ├── GiftWrappingErrorComposer.cs │ │ │ ├── GroupFurniConfigComposer.cs │ │ │ ├── MarketplaceConfigurationComposer.cs │ │ │ ├── PresentDeliverErrorComposer.cs │ │ │ ├── PromotableRoomsComposer.cs │ │ │ ├── PurchaseErrorComposer.cs │ │ │ ├── PurchaseOKComposer.cs │ │ │ ├── RecyclerRewardsComposer.cs │ │ │ ├── SellablePetBreedsComposer.cs │ │ │ ├── VoucherRedeemErrorComposer.cs │ │ │ └── VoucherRedeemOkComposer.cs │ │ ├── FriendList │ │ │ ├── BuddyListComposer.cs │ │ │ ├── BuddyRequestsComposer.cs │ │ │ ├── FindFriendsProcessResultComposer.cs │ │ │ ├── FollowFriendFailedComposer.cs │ │ │ ├── FriendListUpdateComposer.cs │ │ │ ├── FriendNotificationComposer.cs │ │ │ ├── HabboSearchResultComposer.cs │ │ │ ├── InstantMessageErrorComposer.cs │ │ │ ├── MessengerErrorComposer.cs │ │ │ ├── MessengerInitComposer.cs │ │ │ ├── NewBuddyRequestComposer.cs │ │ │ ├── NewConsoleMessageComposer.cs │ │ │ └── RoomInviteComposer.cs │ │ ├── Game │ │ │ ├── Game2WeeklyLeaderboardComposer.cs │ │ │ ├── Game3WeeklyLeaderboardComposer.cs │ │ │ ├── GameAccountStatusComposer.cs │ │ │ ├── GameAchievementListComposer.cs │ │ │ ├── GameListComposer.cs │ │ │ ├── JoinQueueComposer.cs │ │ │ ├── LoadGameComposer.cs │ │ │ └── PlayableGamesComposer.cs │ │ ├── Groups │ │ │ ├── BadgeEditorPartsComposer.cs │ │ │ ├── GroupCreationWindowComposer.cs │ │ │ ├── GroupFurniSettingsComposer.cs │ │ │ ├── GroupInfoComposer.cs │ │ │ ├── GroupMemberUpdatedComposer.cs │ │ │ ├── GroupMembersComposer.cs │ │ │ ├── GroupMembershipRequestedComposer.cs │ │ │ ├── ManageGroupComposer.cs │ │ │ ├── NewGroupInfoComposer.cs │ │ │ ├── RefreshFavouriteGroupComposer.cs │ │ │ ├── UnknownGroupComposer.cs │ │ │ └── UpdateFavouriteGroupComposer.cs │ │ ├── Handshake │ │ │ ├── AuthenticationOKComposer.cs │ │ │ ├── AvailabilityStatusComposer.cs │ │ │ ├── GenericErrorComposer.cs │ │ │ ├── InitCryptoComposer.cs │ │ │ ├── PongComposer.cs │ │ │ ├── SecretKeyComposer.cs │ │ │ ├── SetUniqueIdComposer.cs │ │ │ ├── UserObjectComposer.cs │ │ │ ├── UserPerksComposer.cs │ │ │ └── UserRightsComposer.cs │ │ ├── Help │ │ │ ├── SanctionStatusComposer.cs │ │ │ ├── SendBullyReportComposer.cs │ │ │ └── SubmitBullyReportComposer.cs │ │ ├── Inventory │ │ │ ├── Achievements │ │ │ │ ├── AchievementProgressedComposer.cs │ │ │ │ ├── AchievementScoreComposer.cs │ │ │ │ ├── AchievementUnlockedComposer.cs │ │ │ │ ├── AchievementsComposer.cs │ │ │ │ └── BadgeDefinitionsComposer.cs │ │ │ ├── AvatarEffects │ │ │ │ ├── AvatarEffectActivatedComposer.cs │ │ │ │ ├── AvatarEffectAddedComposer.cs │ │ │ │ ├── AvatarEffectExpiredComposer.cs │ │ │ │ ├── AvatarEffectsComposer.cs │ │ │ │ └── FigureSetIdsComposer.cs │ │ │ ├── Badges │ │ │ │ └── BadgesComposer.cs │ │ │ ├── Bots │ │ │ │ └── BotInventoryComposer.cs │ │ │ ├── Furni │ │ │ │ ├── FurniListAddComposer.cs │ │ │ │ ├── FurniListComposer.cs │ │ │ │ ├── FurniListNotificationComposer.cs │ │ │ │ ├── FurniListRemoveComposer.cs │ │ │ │ └── FurniListUpdateComposer.cs │ │ │ ├── Pets │ │ │ │ └── PetInventoryComposer.cs │ │ │ ├── Purse │ │ │ │ ├── ActivityPointsComposer.cs │ │ │ │ ├── CreditBalanceComposer.cs │ │ │ │ └── HabboActivityPointNotificationComposer.cs │ │ │ └── Trading │ │ │ │ ├── TradingAcceptComposer.cs │ │ │ │ ├── TradingClosedComposer.cs │ │ │ │ ├── TradingCompleteComposer.cs │ │ │ │ ├── TradingConfirmedComposer.cs │ │ │ │ ├── TradingErrorComposer.cs │ │ │ │ ├── TradingFinishComposer.cs │ │ │ │ ├── TradingStartComposer.cs │ │ │ │ └── TradingUpdateComposer.cs │ │ ├── LandingView │ │ │ ├── CampaignComposer.cs │ │ │ ├── ConcurrentUsersGoalProgressComposer.cs │ │ │ └── PromoArticlesComposer.cs │ │ ├── Marketplace │ │ │ ├── MarketPlaceOffersComposer.cs │ │ │ ├── MarketPlaceOwnOffersComposer.cs │ │ │ ├── MarketplaceCanMakeOfferResultComposer.cs │ │ │ ├── MarketplaceCancelOfferResultComposer.cs │ │ │ ├── MarketplaceItemStatsComposer.cs │ │ │ └── MarketplaceMakeOfferResultComposer.cs │ │ ├── Misc │ │ │ ├── LatencyTestComposer.cs │ │ │ └── VideoOffersRewardsComposer.cs │ │ ├── Moderation │ │ │ ├── BroadcastMessageAlertComposer.cs │ │ │ ├── CallForHelpPendingCallsComposer.cs │ │ │ ├── CfhTopicsInitComposer.cs │ │ │ ├── ModeratorInitComposer.cs │ │ │ ├── ModeratorRoomChatlogComposer.cs │ │ │ ├── ModeratorRoomInfoComposer.cs │ │ │ ├── ModeratorSupportTicketComposer.cs │ │ │ ├── ModeratorSupportTicketResponseComposer.cs │ │ │ ├── ModeratorTicketChatlogComposer.cs │ │ │ ├── ModeratorUserChatlogComposer.cs │ │ │ ├── ModeratorUserInfoComposer.cs │ │ │ ├── ModeratorUserRoomVisitsComposer.cs │ │ │ ├── MutedComposer.cs │ │ │ └── OpenHelpToolComposer.cs │ │ ├── Navigator │ │ │ ├── CanCreateRoomComposer.cs │ │ │ ├── DoorbellComposer.cs │ │ │ ├── FavouritesComposer.cs │ │ │ ├── FlatAccessDeniedComposer.cs │ │ │ ├── FlatCreatedComposer.cs │ │ │ ├── GetGuestRoomResultComposer.cs │ │ │ ├── NavigatorFlatCatsComposer.cs │ │ │ ├── NavigatorSettingsComposer.cs │ │ │ ├── New │ │ │ │ ├── NavigatorCollapsedCategoriesComposer.cs │ │ │ │ ├── NavigatorLiftedRoomsComposer.cs │ │ │ │ ├── NavigatorMetaDataParserComposer.cs │ │ │ │ ├── NavigatorPreferencesComposer.cs │ │ │ │ └── NavigatorSearchResultSetComposer.cs │ │ │ ├── PopularRoomTagsResultComposer.cs │ │ │ ├── RoomInfoUpdatedComposer.cs │ │ │ ├── RoomRatingComposer.cs │ │ │ ├── UpdateFavouriteRoomComposer.cs │ │ │ └── UserFlatCatsComposer.cs │ │ ├── Notifications │ │ │ └── MOTDNotificationComposer.cs │ │ ├── Pets │ │ │ ├── PetBreedingComposer.cs │ │ │ └── RespectPetNotificationComposer.cs │ │ ├── Quests │ │ │ ├── QuestAbortedComposer.cs │ │ │ ├── QuestCompletedComposer.cs │ │ │ ├── QuestCompletedCompser.cs │ │ │ ├── QuestListComposer.cs │ │ │ └── QuestStartedComposer.cs │ │ ├── Rooms │ │ │ ├── AI │ │ │ │ ├── Bots │ │ │ │ │ └── OpenBotActionComposer.cs │ │ │ │ └── Pets │ │ │ │ │ ├── AddExperiencePointsComposer.cs │ │ │ │ │ ├── PetHorseFigureInformationComposer.cs │ │ │ │ │ ├── PetInformationComposer.cs │ │ │ │ │ └── PetTrainingPanelComposer.cs │ │ │ ├── Action │ │ │ │ └── IgnoreStatusComposer.cs │ │ │ ├── Avatar │ │ │ │ ├── ActionComposer.cs │ │ │ │ ├── AvatarAspectUpdateComposer.cs │ │ │ │ ├── AvatarEffectComposer.cs │ │ │ │ ├── CarryObjectComposer.cs │ │ │ │ ├── DanceComposer.cs │ │ │ │ └── SleepComposer.cs │ │ │ ├── Chat │ │ │ │ ├── ChatComposer.cs │ │ │ │ ├── FloodControlComposer.cs │ │ │ │ ├── ShoutComposer.cs │ │ │ │ ├── UserTypingComposer.cs │ │ │ │ └── WhisperComposer.cs │ │ │ ├── Engine │ │ │ │ ├── FloorHeightMapComposer.cs │ │ │ │ ├── FurnitureAliasesComposer.cs │ │ │ │ ├── HeightMapComposer.cs │ │ │ │ ├── ItemAddComposer.cs │ │ │ │ ├── ItemRemoveComposer.cs │ │ │ │ ├── ItemUpdateComposer.cs │ │ │ │ ├── ItemsComposer.cs │ │ │ │ ├── ObjectAddComposer.cs │ │ │ │ ├── ObjectRemoveComposer.cs │ │ │ │ ├── ObjectUpdateComposer.cs │ │ │ │ ├── ObjectsComposer.cs │ │ │ │ ├── RoomEngineSerializers.cs │ │ │ │ ├── RoomEntryInfoComposer.cs │ │ │ │ ├── RoomEventComposer.cs │ │ │ │ ├── RoomPropertyComposer.cs │ │ │ │ ├── RoomVisualizationSettingsComposer.cs │ │ │ │ ├── SlideObjectBundleComposer.cs │ │ │ │ ├── UserChangeComposer.cs │ │ │ │ ├── UserNameChangeComposer.cs │ │ │ │ ├── UserRemoveComposer.cs │ │ │ │ ├── UserUpdateComposer.cs │ │ │ │ └── UsersComposer.cs │ │ │ ├── FloorPlan │ │ │ │ ├── FloorPlanFloorMapComposer.cs │ │ │ │ └── FloorPlanSendDoorComposer.cs │ │ │ ├── Freeze │ │ │ │ └── UpdateFreezeLivesComposer.cs │ │ │ ├── Furni │ │ │ │ ├── GnomeBoxComposer.cs │ │ │ │ ├── LoveLocks │ │ │ │ │ ├── LoveLockDialogueCloseComposer.cs │ │ │ │ │ ├── LoveLockDialogueComposer.cs │ │ │ │ │ └── LoveLockDialogueSetLockedComposer.cs │ │ │ │ ├── Moodlight │ │ │ │ │ └── MoodlightConfigComposer.cs │ │ │ │ ├── OpenGiftComposer.cs │ │ │ │ ├── RentableSpaces │ │ │ │ │ └── RentableSpaceComposer.cs │ │ │ │ ├── Stickys │ │ │ │ │ └── StickyNoteComposer.cs │ │ │ │ ├── UpdateMagicTileComposer.cs │ │ │ │ ├── Wired │ │ │ │ │ ├── HideWiredConfigComposer.cs │ │ │ │ │ ├── WiredConditionConfigComposer.cs │ │ │ │ │ ├── WiredEffectConfigComposer.cs │ │ │ │ │ └── WiredTriggerConfigComposer.cs │ │ │ │ └── YouTubeTelevisions │ │ │ │ │ ├── GetYouTubePlaylistComposer.cs │ │ │ │ │ └── GetYouTubeVideoComposer.cs │ │ │ ├── Notifications │ │ │ │ ├── RoomErrorNotifComposer.cs │ │ │ │ └── RoomNotificationComposer.cs │ │ │ ├── Permissions │ │ │ │ ├── YouAreControllerComposer.cs │ │ │ │ ├── YouAreNotControllerComposer.cs │ │ │ │ └── YouAreOwnerComposer.cs │ │ │ ├── Polls │ │ │ │ ├── PollContentsComposer.cs │ │ │ │ ├── PollOfferComposer.cs │ │ │ │ └── Questions │ │ │ │ │ └── QuestionParserComposer.cs │ │ │ ├── Session │ │ │ │ ├── CantConnectComposer.cs │ │ │ │ ├── CloseConnectionComposer.cs │ │ │ │ ├── FlatAccessibleComposer.cs │ │ │ │ ├── OpenConnectionComposer.cs │ │ │ │ ├── RoomForwardComposer.cs │ │ │ │ └── RoomReadyComposer.cs │ │ │ └── Settings │ │ │ │ ├── FlatControllerAddedComposer.cs │ │ │ │ ├── FlatControllerRemovedComposer.cs │ │ │ │ ├── GetRoomBannedUsersComposer.cs │ │ │ │ ├── GetRoomFilterListComposer.cs │ │ │ │ ├── RoomMuteSettingsComposer.cs │ │ │ │ ├── RoomRightsListComposer.cs │ │ │ │ ├── RoomSettingsDataComposer.cs │ │ │ │ ├── RoomSettingsSavedComposer.cs │ │ │ │ └── UnbanUserFromRoomComposer.cs │ │ ├── ServerPacketHeader.cs │ │ ├── Sound │ │ │ ├── SoundSettingsComposer.cs │ │ │ └── TraxSongInfoComposer.cs │ │ ├── Talents │ │ │ └── TalentTrackComposer.cs │ │ └── Users │ │ │ ├── GetRelationshipsComposer.cs │ │ │ ├── HabboGroupBadgesComposer.cs │ │ │ ├── HabboUserBadgesComposer.cs │ │ │ ├── IgnoredUsersComposer.cs │ │ │ ├── NameChangeUpdateComposer.cs │ │ │ ├── ProfileInformationComposer.cs │ │ │ ├── RespectNotificationComposer.cs │ │ │ ├── ScrSendUserInfoComposer.cs │ │ │ ├── UpdateUsernameComposer.cs │ │ │ └── UserTagsComposer.cs │ └── PacketManager.cs ├── RCON │ ├── Commands │ │ ├── CommandManager.cs │ │ ├── Hotel │ │ │ ├── ReloadBansCommand.cs │ │ │ ├── ReloadCatalogCommand.cs │ │ │ ├── ReloadFilterCommand.cs │ │ │ ├── ReloadItemsCommand.cs │ │ │ ├── ReloadNavigatorCommand.cs │ │ │ ├── ReloadQuestsCommand.cs │ │ │ ├── ReloadRanksCommand.cs │ │ │ ├── ReloadServerSettingsCommand.cs │ │ │ └── ReloadVouchersCommand.cs │ │ ├── ICommandManager.cs │ │ ├── IRCONCommand.cs │ │ └── User │ │ │ ├── AlertUserCommand.cs │ │ │ ├── DisconnectUserCommand.cs │ │ │ ├── GiveUserBadgeCommand.cs │ │ │ ├── GiveUserCurrencyCommand.cs │ │ │ ├── ProgressUserAchievementCommand.cs │ │ │ ├── ReloadUserCurrencyCommand.cs │ │ │ ├── ReloadUserMottoCommand.cs │ │ │ ├── ReloadUserRankCommand.cs │ │ │ ├── ReloadUserVIPRankCommand.cs │ │ │ ├── SyncUserCurrencyCommand.cs │ │ │ ├── TakeUserBadgeCommand.cs │ │ │ └── TakeUserCurrencyCommand.cs │ ├── IRconSocket.cs │ ├── RCONConnection.cs │ ├── RCONSocket.cs │ └── RconConfiguration.cs └── Revisions │ ├── IRevisionsCache.cs │ ├── Revision.cs │ └── RevisionsCache.cs ├── Config ├── config.json ├── figuredata.xml └── nlog.config ├── Core ├── ConsoleCommands.cs ├── ExceptionLogger.cs ├── FigureData │ ├── FigureDataManager.cs │ ├── IFigureDataManager.cs │ └── Types │ │ ├── Color.cs │ │ ├── FigureSet.cs │ │ ├── Palette.cs │ │ ├── Part.cs │ │ ├── Set.cs │ │ ├── SetType.cs │ │ └── SetTypeUtility.cs ├── IServerStatusUpdater.cs ├── IStartable.cs ├── Language │ ├── ILanguageManager.cs │ └── LanguageManager.cs ├── ServerStatusUpdater.cs └── Settings │ ├── ISettingsManager.cs │ └── SettingsManager.cs ├── Database ├── Adapter │ ├── NormalQueryReactor.cs │ └── QueryAdapter.cs ├── Database.cs ├── DatabaseConfiguration.cs ├── DatabaseConnection.cs ├── IDatabase.cs └── Interfaces │ ├── IDatabaseClient.cs │ ├── IQueryAdapter.cs │ └── IRegularQueryAdapter.cs ├── HabboHotel ├── Achievements │ ├── Achievement.cs │ ├── AchievementLevel.cs │ ├── AchievementLevelFactory.cs │ ├── AchievementManager.cs │ ├── IAchievementLevelFactory.cs │ ├── IAchievementManager.cs │ └── UserAchievement.cs ├── Ambassadors │ ├── AmbassadorsManager.cs │ └── IAmbassadorsManager.cs ├── Badges │ ├── BadgeDefinition.cs │ ├── BadgeManager.cs │ └── IBadgeManager.cs ├── Bots │ ├── BotManager.cs │ └── IBotManager.cs ├── Cache │ ├── CacheManager.cs │ ├── ICacheManager.cs │ ├── Process │ │ ├── IProcessComponent.cs │ │ └── ProcessComponent.cs │ └── Type │ │ └── CachedUser.cs ├── Catalog │ ├── CatalogBot.cs │ ├── CatalogDeal.cs │ ├── CatalogItem.cs │ ├── CatalogManager.cs │ ├── CatalogPage.cs │ ├── CatalogPromotion.cs │ ├── Clothing │ │ ├── ClothingItem.cs │ │ ├── ClothingManager.cs │ │ └── IClothingManager.cs │ ├── ICatalogManager.cs │ ├── Marketplace │ │ ├── IMarketplaceManager.cs │ │ ├── MarketOffer.cs │ │ └── MarketplaceManager.cs │ ├── Pets │ │ ├── IPetRaceManager.cs │ │ ├── PetRace.cs │ │ └── PetRaceManager.cs │ ├── Utilities │ │ ├── BotUtility.cs │ │ ├── ItemUtility.cs │ │ └── PetUtility.cs │ └── Vouchers │ │ ├── IVoucherManager.cs │ │ ├── Voucher.cs │ │ ├── VoucherManager.cs │ │ ├── VoucherType.cs │ │ └── VoucherUtility.cs ├── Friends │ ├── IMessengerDataLoader.cs │ ├── MessengerDataLoader.cs │ └── MessengerEventSynchronizer.cs ├── Game.cs ├── GameClients │ ├── GameClient.cs │ ├── GameClientExtensions.cs │ ├── GameClientManager.cs │ ├── IGameClient.cs │ ├── IGameClientManager.cs │ ├── IIncomingPacket.cs │ ├── IOutgoingPacket.cs │ ├── IPacketFactory.cs │ ├── TcpSessionProxy.cs │ └── WsSessionProxy.cs ├── Games │ ├── GameData.cs │ ├── GameDataManager.cs │ └── IGameDataManager.cs ├── Groups │ ├── BadgePartUtility.cs │ ├── Group.cs │ ├── GroupBadgeParts.cs │ ├── GroupColours.cs │ ├── GroupManager.cs │ ├── GroupMember.cs │ ├── GroupType.cs │ └── IGroupManager.cs ├── IGame.cs ├── Items │ ├── Data │ │ ├── Moodlight │ │ │ ├── MoodlightData.cs │ │ │ └── MoodlightPreset.cs │ │ └── Toner │ │ │ └── TonerData.cs │ ├── DataFormat │ │ ├── CrackableDataFormat.cs │ │ ├── EmptyDataFormat.cs │ │ ├── FurniDataStructure.cs │ │ ├── FurniObjectData.cs │ │ ├── HighScoreData.cs │ │ ├── HighscoreDataFormat.cs │ │ ├── IFurniObjectData.cs │ │ ├── IntArrayDataFormat.cs │ │ ├── IntDataFormat.cs │ │ ├── LegacyDataFormat.cs │ │ ├── ListListDataFormat.cs │ │ ├── MapDataFormat.cs │ │ ├── StringArrayDataFormat.cs │ │ └── VoteResultDataFormat.cs │ ├── IItemDataManager.cs │ ├── IItemFactory.cs │ ├── InteractionType.cs │ ├── InteractionTypes.cs │ ├── Interactor │ │ ├── IFurniInteractor.cs │ │ ├── InteractorAlert.cs │ │ ├── InteractorBanzaiScoreCounter.cs │ │ ├── InteractorBanzaiTimer.cs │ │ ├── InteractorCannon.cs │ │ ├── InteractorCounter.cs │ │ ├── InteractorDice.cs │ │ ├── InteractorFreezeTile.cs │ │ ├── InteractorFreezeTimer.cs │ │ ├── InteractorGate.cs │ │ ├── InteractorGenericSwitch.cs │ │ ├── InteractorHabboWheel.cs │ │ ├── InteractorHopper.cs │ │ ├── InteractorLoveLock.cs │ │ ├── InteractorLoveShuffler.cs │ │ ├── InteractorMannequin.cs │ │ ├── InteractorOneWayGate.cs │ │ ├── InteractorPuzzleBox.cs │ │ ├── InteractorScoreCounter.cs │ │ ├── InteractorScoreboard.cs │ │ ├── InteractorSpinningBottle.cs │ │ ├── InteractorSwitch.cs │ │ ├── InteractorTeleport.cs │ │ ├── InteractorVendor.cs │ │ └── InteractorWired.cs │ ├── Item.cs │ ├── ItemBehaviourUtility.cs │ ├── ItemDataManager.cs │ ├── ItemDefinition.cs │ ├── ItemFactory.cs │ ├── ItemHopperFinder.cs │ ├── ItemLoader.cs │ ├── ItemTeleporterFinder.cs │ ├── Televisions │ │ ├── ITelevisionManager.cs │ │ ├── TelevisionItem.cs │ │ └── TelevisionManager.cs │ └── Wired │ │ ├── Boxes │ │ ├── Add-ons │ │ │ └── AddonRandomEffectBox.cs │ │ ├── Conditions │ │ │ ├── ActorHasHandItemBox.cs │ │ │ ├── ActorIsInTeamBox.cs │ │ │ ├── FurniDoesntMatchStateAndPositionBox.cs │ │ │ ├── FurniHasFurniBox.cs │ │ │ ├── FurniHasNoFurniBox.cs │ │ │ ├── FurniHasNoUsersBox.cs │ │ │ ├── FurniHasUsersBox.cs │ │ │ ├── FurniMatchStateAndPositionBox.cs │ │ │ ├── IsGroupMemberBox.cs │ │ │ ├── IsNotGroupMemberBox.cs │ │ │ ├── IsNotWearingBadgeBox.cs │ │ │ ├── IsNotWearingFXBox.cs │ │ │ ├── IsWearingBadgeBox.cs │ │ │ ├── IsWearingFXBox.cs │ │ │ ├── TriggererNotOnFurniBox.cs │ │ │ ├── TriggererOnFurniBox.cs │ │ │ ├── UserCountDoesntInRoomBox.cs │ │ │ └── UserCountInRoomBox.cs │ │ ├── Effects │ │ │ ├── AddActorToTeamBox.cs │ │ │ ├── BotChangesClothesBox.cs │ │ │ ├── BotCommunicatesToAllBox.cs │ │ │ ├── BotFollowsUserBox.cs │ │ │ ├── BotGivesHandItemBox.cs │ │ │ ├── BotMovesToFurniBox.cs │ │ │ ├── ExecuteWiredStacksBox.cs │ │ │ ├── GiveRewardBox.cs │ │ │ ├── GiveUserBadgeBox.cs │ │ │ ├── KickUserBox.cs │ │ │ ├── MatchPositionBox.cs │ │ │ ├── MoveAndRotateBox.cs │ │ │ ├── MoveFurniToUserBox.cs │ │ │ ├── MuteTriggererBox.cs │ │ │ ├── RegenerateMapsBox.cs │ │ │ ├── RemoveActorFromTeamBox.cs │ │ │ ├── SetRollerSpeedBox.cs │ │ │ ├── ShowMessageBox.cs │ │ │ ├── TeleportBotToFurniBox.cs │ │ │ ├── TeleportUserBox.cs │ │ │ └── ToggleFurniBox.cs │ │ └── Triggers │ │ │ ├── GameEndsBox.cs │ │ │ ├── GameStartsBox.cs │ │ │ ├── RepeaterBox.cs │ │ │ ├── RoomEnterBox.cs │ │ │ ├── StateChangesBox.cs │ │ │ ├── UserFurniCollision.cs │ │ │ ├── UserSaysBox.cs │ │ │ ├── UserSaysCommandBox.cs │ │ │ ├── UserWalksOffBox.cs │ │ │ └── UserWalksOnBox.cs │ │ ├── IWiredCycle.cs │ │ ├── IWiredItem.cs │ │ ├── WiredBoxType.cs │ │ └── WiredBoxTypeUtility.cs ├── LandingView │ ├── ILandingViewManager.cs │ ├── LandingViewManager.cs │ └── Promotions │ │ └── Promotion.cs ├── Moderation │ ├── BanLoginCheckTask.cs │ ├── BanTypeUtility.cs │ ├── IModerationManager.cs │ ├── ModerationBan.cs │ ├── ModerationBanType.cs │ ├── ModerationManager.cs │ ├── ModerationPresetActionMessages.cs │ ├── ModerationPresetActions.cs │ └── ModerationTicket.cs ├── Navigator │ ├── FeaturedRoom.cs │ ├── INavigatorManager.cs │ ├── NavigatorCategoryType.cs │ ├── NavigatorCategoryTypeUtility.cs │ ├── NavigatorHandler.cs │ ├── NavigatorManager.cs │ ├── NavigatorSearchAllowance.cs │ ├── NavigatorSearchAllowanceUtility.cs │ ├── NavigatorViewMode.cs │ ├── NavigatorViewModeUtility.cs │ ├── SearchResultList.cs │ └── TopLevelItem.cs ├── Permissions │ ├── IPermissionManager.cs │ ├── Permission.cs │ ├── PermissionCommand.cs │ ├── PermissionGroup.cs │ └── PermissionManager.cs ├── Quests │ ├── IQuestManager.cs │ ├── Quest.cs │ ├── QuestManager.cs │ ├── QuestType.cs │ └── QuestTypeUtillity.cs ├── Rewards │ ├── IRewardManager.cs │ ├── Reward.cs │ ├── RewardManager.cs │ ├── RewardType.cs │ └── RewardTypeUtility.cs ├── Rooms │ ├── AI │ │ ├── BotAI.cs │ │ ├── BotAIType.cs │ │ ├── Pet.cs │ │ ├── PetDatabaseUpdateState.cs │ │ ├── Responses │ │ │ └── BotResponse.cs │ │ ├── RoomBot.cs │ │ ├── Speech │ │ │ └── RandomSpeech.cs │ │ └── Types │ │ │ ├── BartenderBot.cs │ │ │ ├── GenericBot.cs │ │ │ └── PetBot.cs │ ├── ByteToItemEffectEnum.cs │ ├── Chat │ │ ├── ChatManager.cs │ │ ├── Commands │ │ │ ├── Administrator │ │ │ │ ├── BubbleCommand.cs │ │ │ │ ├── CarryCommand.cs │ │ │ │ ├── DeleteGroupCommand.cs │ │ │ │ ├── HALCommand.cs │ │ │ │ └── UpdateCommand.cs │ │ │ ├── CommandManager.cs │ │ │ ├── Events │ │ │ │ └── EventAlertCommand.cs │ │ │ ├── IChatCommand.cs │ │ │ ├── ICommandBase.cs │ │ │ ├── ICommandManager.cs │ │ │ ├── ITargetChatCommand.cs │ │ │ ├── Moderator │ │ │ │ ├── AlertCommand.cs │ │ │ │ ├── BanCommand.cs │ │ │ │ ├── DisableForcedFXCommand.cs │ │ │ │ ├── DisconnectCommand.cs │ │ │ │ ├── FlagUserCommand.cs │ │ │ │ ├── Fun │ │ │ │ │ ├── AllAroundMeCommand.cs │ │ │ │ │ ├── AllEyesOnMeCommand.cs │ │ │ │ │ ├── CoordsCommand.cs │ │ │ │ │ ├── FastwalkCommand.cs │ │ │ │ │ ├── ForceSitCommand.cs │ │ │ │ │ ├── FreezeCommand.cs │ │ │ │ │ ├── MakeSayCommand.cs │ │ │ │ │ ├── MassDanceCommand.cs │ │ │ │ │ ├── MassEnableCommand.cs │ │ │ │ │ ├── OverrideCommand.cs │ │ │ │ │ ├── SummonCommand.cs │ │ │ │ │ ├── SuperFastwalkCommand.cs │ │ │ │ │ ├── SuperPullCommand.cs │ │ │ │ │ ├── TeleportCommand.cs │ │ │ │ │ └── UnFreezeCommand.cs │ │ │ │ ├── GOTOCommand.cs │ │ │ │ ├── GiveBadgeCommand.cs │ │ │ │ ├── GiveCommand.cs │ │ │ │ ├── HotelAlertCommand.cs │ │ │ │ ├── IPBanCommand.cs │ │ │ │ ├── IgnoreWhispersCommand.cs │ │ │ │ ├── KickCommand.cs │ │ │ │ ├── MIPCommand.cs │ │ │ │ ├── MassBadgeCommand.cs │ │ │ │ ├── MuteCommand.cs │ │ │ │ ├── RoomAlertCommand.cs │ │ │ │ ├── RoomBadgeCommand.cs │ │ │ │ ├── RoomKickCommand.cs │ │ │ │ ├── RoomMuteCommand.cs │ │ │ │ ├── RoomUnmuteCommand.cs │ │ │ │ ├── StaffAlertCommand.cs │ │ │ │ ├── TradeBanCommand.cs │ │ │ │ ├── UnmuteCommand.cs │ │ │ │ └── UserInfoCommand.cs │ │ │ └── User │ │ │ │ ├── ConvertCreditsCommand.cs │ │ │ │ ├── DNDCommand.cs │ │ │ │ ├── DisableDiagonalCommand.cs │ │ │ │ ├── DisableGiftsCommand.cs │ │ │ │ ├── DisableMimicCommand.cs │ │ │ │ ├── DisableWhispersCommand.cs │ │ │ │ ├── EjectAllCommand.cs │ │ │ │ ├── EmptyItems.cs │ │ │ │ ├── FlagMeCommand.cs │ │ │ │ ├── Fun │ │ │ │ ├── DanceCommand.cs │ │ │ │ ├── EnableCommand.cs │ │ │ │ ├── FacelessCommand.cs │ │ │ │ ├── FollowCommand.cs │ │ │ │ ├── MimicCommand.cs │ │ │ │ ├── MoonwalkCommand.cs │ │ │ │ ├── PetCommand.cs │ │ │ │ ├── PullCommand.cs │ │ │ │ ├── PushCommand.cs │ │ │ │ └── SuperPushCommand.cs │ │ │ │ ├── InfoCommand.cs │ │ │ │ ├── KickBotsCommand.cs │ │ │ │ ├── KickPetsCommand.cs │ │ │ │ ├── LayCommand.cs │ │ │ │ ├── MuteBotsCommand.cs │ │ │ │ ├── MutePetsCommand.cs │ │ │ │ ├── PickAllCommand.cs │ │ │ │ ├── RegenMaps.cs │ │ │ │ ├── RoomCommand.cs │ │ │ │ ├── SellRoomCommand.cs │ │ │ │ ├── SetMaxCommand.cs │ │ │ │ ├── SetSpeedCommand.cs │ │ │ │ ├── SitCommand.cs │ │ │ │ ├── StandCommand.cs │ │ │ │ ├── StatsCommand.cs │ │ │ │ └── UnloadCommand.cs │ │ ├── Emotions │ │ │ ├── ChatEmotions.cs │ │ │ ├── ChatEmotionsManager.cs │ │ │ └── IChatEmotionsManager.cs │ │ ├── Filter │ │ │ ├── IWordFilterManager.cs │ │ │ ├── WordFilter.cs │ │ │ └── WordFilterManager.cs │ │ ├── IChatManager.cs │ │ ├── Logs │ │ │ ├── ChatlogEntry.cs │ │ │ ├── ChatlogManager.cs │ │ │ └── IChatlogManager.cs │ │ ├── Pets │ │ │ ├── Commands │ │ │ │ ├── IPetCommandManager.cs │ │ │ │ ├── PetCommand.cs │ │ │ │ └── PetCommandManager.cs │ │ │ └── Locale │ │ │ │ ├── IPetLocale.cs │ │ │ │ └── PetLocale.cs │ │ └── Styles │ │ │ ├── ChatStyle.cs │ │ │ ├── ChatStyleManager.cs │ │ │ └── IChatStyleManager.cs │ ├── DynamicRoomModel.cs │ ├── GameMap.cs │ ├── Games │ │ ├── Banzai │ │ │ └── BattleBanzai.cs │ │ ├── Football │ │ │ └── Soccer.cs │ │ ├── Freeze │ │ │ ├── Freeze.cs │ │ │ └── FreezePowerUp.cs │ │ ├── GameItemHandler.cs │ │ ├── GameManager.cs │ │ └── Teams │ │ │ ├── Team.cs │ │ │ └── TeamManager.cs │ ├── IRoomManager.cs │ ├── Instance │ │ ├── BansComponent.cs │ │ ├── FilterComponent.cs │ │ ├── TradingComponent.cs │ │ └── WiredComponent.cs │ ├── ItemEffectType.cs │ ├── PathFinding │ │ ├── MinHeap.cs │ │ ├── PathFinder.cs │ │ ├── PathFinderNode.cs │ │ ├── Rotation.cs │ │ ├── ThreeDCoord.cs │ │ ├── Vector2D.cs │ │ └── Vector3D.cs │ ├── Room.cs │ ├── RoomAccess.cs │ ├── RoomAccessUtility.cs │ ├── RoomAppender.cs │ ├── RoomData.cs │ ├── RoomFactory.cs │ ├── RoomItemHandling.cs │ ├── RoomManager.cs │ ├── RoomModel.cs │ ├── RoomPromotion.cs │ ├── RoomUser.cs │ ├── RoomUserManager.cs │ ├── SquareState.cs │ └── Trading │ │ ├── Trade.cs │ │ └── TradeUser.cs ├── Subscriptions │ ├── ISubscriptionManager.cs │ ├── SubscriptionData.cs │ └── SubscriptionManager.cs ├── Talents │ ├── ITalentTrackManager.cs │ ├── TalentTrackLevel.cs │ ├── TalentTrackManager.cs │ ├── TalentTrackSubLevel.cs │ └── TalentType.cs └── Users │ ├── Authentication │ ├── AuthenticationError.cs │ ├── Authenticator.cs │ ├── HabboEventArgs.cs │ ├── IAuthenticationTask.cs │ ├── IAuthenticator.cs │ ├── IncorrectLoginException.cs │ └── Tasks │ │ └── DisconnectCurrentOnlineHabboTask.cs │ ├── Badges │ └── Badge.cs │ ├── Calendar │ └── CalendarComponent.cs │ ├── Clothing │ ├── ClothingComponent.cs │ ├── Parts │ │ └── ClothingParts.cs │ └── WardrobeLoader.cs │ ├── Effects │ ├── AvatarEffect.cs │ ├── AvatarEffectFactory.cs │ └── EffectsComponent.cs │ ├── Habbo.cs │ ├── HabboStats.cs │ ├── HabboStatsService.cs │ ├── IHabboStatsService.cs │ ├── Ignores │ ├── IIgnoredUsersService.cs │ ├── IgnoreStatusUpdatedEventArgs.cs │ ├── IgnoredUsersService.cs │ ├── IgnoresComponent.cs │ ├── IgnoresEventSynchronizer.cs │ └── IgnoresUserDataLoadingTask.cs │ ├── Inventory │ ├── Badges │ │ └── BadgesInventoryComponent.cs │ ├── Bots │ │ ├── Bot.cs │ │ ├── BotInventoryComponent.cs │ │ ├── BotLoader.cs │ │ └── IBotLoader.cs │ ├── Furniture │ │ └── FurnitureInventoryComponent.cs │ ├── InventoryComponent.cs │ ├── LoadUserInventoryTask.cs │ └── Pets │ │ ├── IPetLoader.cs │ │ ├── PetLoader.cs │ │ └── PetsInventoryComponent.cs │ ├── Messenger │ ├── BuddyModificationType.cs │ ├── FriendBar │ │ ├── FriendBarState.cs │ │ └── FriendBarStateUtility.cs │ ├── FriendRequestError.cs │ ├── FriendRequestModificationType.cs │ ├── FriendRequestModifiedEventArgs.cs │ ├── FriendStatusUpdatedEventArgs.cs │ ├── HabboMessenger.cs │ ├── HabboMessengerOld.cs │ ├── ISearchResultFactory.cs │ ├── LoadUserMessengerTask.cs │ ├── MessageError.cs │ ├── MessengerBuddiesModifiedEventArgs.cs │ ├── MessengerBuddy.cs │ ├── MessengerBuddyModifiedEventArgs.cs │ ├── MessengerEventTypes.cs │ ├── MessengerEventTypesUtility.cs │ ├── MessengerMessageErrors.cs │ ├── MessengerMessageErrorsUtility.cs │ ├── MessengerMessageEventArgs.cs │ ├── MessengerRequest.cs │ ├── SearchResult.cs │ └── SearchResultFactory.cs │ ├── Navigator │ ├── LoadUserNavigatorPreferencesTask.cs │ ├── NavigatorPreferences.cs │ └── SavedSearches │ │ └── SavedSearch.cs │ ├── Permissions │ ├── LoadUserPermissionsTask.cs │ └── PermissionComponent.cs │ ├── Process │ └── ProcessComponent.cs │ └── UserData │ ├── IUserDataFactory.cs │ ├── IUserDataLoadingTask.cs │ ├── LoadStatisticsLoginTask.cs │ └── UserDataFactory.cs ├── IPlusEnvironment.cs ├── PluginExample ├── PluginExample.cs ├── PluginExample.csproj └── PluginExampleDefinition.cs ├── Plugins ├── IPlugin.cs ├── IPluginDefinition.cs ├── IPluginsCache.cs ├── PluginLoadContext.cs └── PluginsCache.cs ├── Plus Emulator.csproj ├── Plus Emulator.sln ├── Plus Emulator.sln.DotSettings ├── PlusEnvironment.cs ├── Program.cs ├── README.md ├── Resources ├── README.txt ├── RELEASE NOTES.txt ├── Revisions │ ├── 1.6.6.json │ └── example.json ├── SQLs │ ├── Original Database.sql │ └── Updates │ │ ├── 10_UserDataToBooleans.sql │ │ ├── 11_ChangeCatalogPagesEnumToBit.sql │ │ ├── 12_ChangeIntToBoolRoomData.sql │ │ ├── 13_DeletePrimaryKeyAuthTicket.sql │ │ ├── 1_UpdateRoomEntryTable.sql │ │ ├── 2_AddMissingRoomColumns.sql │ │ ├── 3_RefactorMessenger.sql │ │ ├── 4_IgnoredUsersTable.sql │ │ ├── 5_RenameUserStatsTable.sql │ │ ├── 6_AddIsAmbassadorUsersColums.sql │ │ ├── 7_AddAmbassadorsLogs.sql │ │ ├── 8_AddBubbleIDToUsersTable.sql │ │ └── 9_ChangeRoomDataToBooleans.sql └── libs │ ├── AStar.dll │ └── HabboEncryption.dll ├── Utilities ├── ConvertExtensions.cs ├── Converter.cs ├── DependencyInjection │ ├── ScopedAttribute.cs │ └── SingletonAttribute.cs ├── Enclosure │ ├── Algorithm │ │ └── FieldUpdate.cs │ ├── GameField.cs │ └── PointField.cs ├── HabboEncoding.cs ├── Randomizer.cs ├── StringCharFilter.cs ├── TextHandling.cs └── UnixTimestamp.cs └── icon.ico /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /Communication/Abstractions/IGameClientFactory.cs: -------------------------------------------------------------------------------- 1 | using Plus.Utilities.DependencyInjection; 2 | 3 | namespace Plus.Communication.Abstractions; 4 | 5 | [Singleton] 6 | public interface IGameClientFactory 7 | { 8 | } -------------------------------------------------------------------------------- /Communication/Abstractions/IGameServerOptions.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.Abstractions; 2 | 3 | public interface IGameServerOptions 4 | { 5 | string Name { get; } 6 | string Hostname { get; } 7 | int Port { get; } 8 | } -------------------------------------------------------------------------------- /Communication/Attributes/NoAuthenticationRequiredAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.Attributes; 2 | 3 | /// 4 | /// Indicate current packet the session doesn't need be logged-in. 5 | /// 6 | public class NoAuthenticationRequiredAttribute : Attribute 7 | { 8 | } -------------------------------------------------------------------------------- /Communication/Encryption/Crypto/RSA/DoCalculateionDelegate.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.Encryption.Crypto.RSA; 2 | 3 | public delegate BigInteger DoCalculateionDelegate(BigInteger m); -------------------------------------------------------------------------------- /Communication/Encryption/Crypto/RSA/Pkcs1PadType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.Encryption.Crypto.RSA; 2 | 3 | public enum Pkcs1PadType 4 | { 5 | FullByte = 1, 6 | RandomByte = 2 7 | } -------------------------------------------------------------------------------- /Communication/Encryption/Keys/RSAKeys.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.Encryption.Keys; 2 | 3 | public class RsaKeys 4 | { 5 | public string D = 6 | "3E9B5FB29D07A1E97E9C2088BC5E3D2E5BDE33E3FD9A4EBD21D8A117E70DDC2796A6197A6D2371C3555F1532117FD7B5BA18107F4759B1ABDD1D49AD88B051221E14045BA0CF694117AD2CF6285C4622CC0CF3A9311C6F56B42E9B5CB82AFF2456223BC5C3B04CB397DD82693B9A30831E180257F5FBCA7968B462181ADE211B"; 7 | public string E = "3"; 8 | public string N = 9 | "5DE90F8BEB8B72DE3DEA30CD1A8D5BC589CD4DD5FC67761BB2C4F1A3DA94CA3B61F92637A3B52AA5000E9FCB1A3FC390972418BEEB068A81CBABEE844D0879B467F4826F50D91E61B8EB9D8D5BA149073E2DEFD79DF6B023FD3DE358777350D3A8E43A18F6D5B7BD513A11C1961AA95461B32D0B95D03C07449E59F02AAB7E93"; 10 | } -------------------------------------------------------------------------------- /Communication/Flash/FlashPacketFactory.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.IO; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Flash; 5 | 6 | public class FlashPacketFactory : IPacketFactory 7 | { 8 | public IIncomingPacket CreateIncomingPacket(Memory buffer) => new FlashIncomingPacket { Buffer = buffer }; 9 | 10 | public IOutgoingPacket CreateOutgoingPacket(RecyclableMemoryStream stream) => new FlashOutgoingPacket(stream); 11 | } -------------------------------------------------------------------------------- /Communication/Flash/FlashRevision.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.Flash; 2 | 3 | public class FlashRevision 4 | { 5 | public string Revision { get; set; } = string.Empty; 6 | public Dictionary HeaderMapping { get; set; } = new(); 7 | } -------------------------------------------------------------------------------- /Communication/Flash/FlashServer.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Options; 2 | using Plus.Communication.Abstractions; 3 | using Plus.Communication.Packets; 4 | 5 | namespace Plus.Communication.Flash; 6 | 7 | public class FlashServer : TcpGameServer, IFlashServer 8 | { 9 | public FlashServer(IOptions options, FlashClientFactory flashClientFactory, IPacketManager packetManager) : base(options, flashClientFactory, packetManager) 10 | { 11 | } 12 | } -------------------------------------------------------------------------------- /Communication/Flash/FlashServerConfiguration.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Abstractions; 2 | 3 | namespace Plus.Communication.Flash; 4 | 5 | public class FlashServerConfiguration : IGameServerOptions 6 | { 7 | public string Name => "Flash"; 8 | public string Hostname { get; set; } 9 | public int Port { get; set; } 10 | } -------------------------------------------------------------------------------- /Communication/Flash/IFlashServer.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.Flash; 2 | 3 | public interface IFlashServer : IGameServer 4 | { 5 | 6 | } -------------------------------------------------------------------------------- /Communication/Flash/IGameServer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Flash; 4 | 5 | public interface IGameServer 6 | { 7 | bool Start(); 8 | bool Stop(); 9 | 10 | Task PacketReceived(GameClient client, uint messageId, IIncomingPacket packet); 11 | } -------------------------------------------------------------------------------- /Communication/Flash/PlusMemoryStream.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.IO; 2 | 3 | namespace Plus.Communication.Flash; 4 | 5 | public static class PlusMemoryStream 6 | { 7 | public static readonly RecyclableMemoryStreamManager Manager = new(); 8 | 9 | public static RecyclableMemoryStream GetStream() => (Manager.GetStream() as RecyclableMemoryStream)!; 10 | public static RecyclableMemoryStream GetStream(ReadOnlySpan buffer) => (Manager.GetStream(buffer) as RecyclableMemoryStream)!; 11 | } -------------------------------------------------------------------------------- /Communication/Packets/IPacketEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | using Plus.Utilities.DependencyInjection; 3 | 4 | namespace Plus.Communication.Packets; 5 | 6 | [Singleton] 7 | public interface IPacketEvent 8 | { 9 | Task Parse(GameClient session, IIncomingPacket packet); 10 | } -------------------------------------------------------------------------------- /Communication/Packets/IPacketManager.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets; 4 | 5 | public interface IPacketManager 6 | { 7 | Task TryExecutePacket(GameClient session, uint messageId, IIncomingPacket packet); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/IServerPacket.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets; 4 | 5 | public interface IServerPacket 6 | { 7 | uint MessageId { get; } 8 | void Compose(IOutgoingPacket packet); 9 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Advertisement/GetInterstitialMessageEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Advertisement; 4 | 5 | internal class GetInterstitialMessageEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Advertisement/InterstitialShownEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Advertisement; 4 | 5 | internal class InterstitialShownEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Camera/InitCameraEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Camera; 4 | 5 | internal class InitCameraEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Camera/PhotoCompetitionEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Camera; 4 | 5 | internal class PhotoCompetitionEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Camera/PublishPhotoEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Camera; 4 | 5 | internal class PublishPhotoEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Camera/PurchasePhotoEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Camera; 4 | 5 | internal class PurchasePhotoEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Camera/RenderRoomEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Camera; 4 | 5 | internal class RenderRoomEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Camera/RenderRoomThumbnailEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Camera; 4 | 5 | internal class RenderRoomThumbnailEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Campaign/OpenCampaignCalendarDoorAsStaffEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Campaign; 4 | 5 | internal class OpenCampaignCalendarDoorAsStaffEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Campaign/OpenCampaignCalendarDoorEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Campaign; 4 | 5 | internal class OpenCampaignCalendarDoorEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/BuildersClubPlaceRoomItemEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class BuildersClubPlaceRoomItemEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/BuildersClubPlaceWallItemEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class BuildersClubPlaceWallItemEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/BuildersClubQueryFurniCountEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class BuildersClubQueryFurniCountEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetBonusRareInfoEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class GetBonusRareInfoEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetBundleDiscountRulesetEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class GetBundleDiscountRulesetEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetCatalogPageExpirationEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | internal class GetCatalogPageExpirationEvent : IPacketEvent 5 | { 6 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 7 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetCatalogPageWithEarliestExpiryEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class GetCatalogPageWithEarliestExpiryEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetCatalogRoomPromotionEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Catalog; 2 | using Plus.HabboHotel.GameClients; 3 | using Plus.HabboHotel.Rooms; 4 | 5 | namespace Plus.Communication.Packets.Incoming.Catalog; 6 | 7 | internal class GetCatalogRoomPromotionEvent : IPacketEvent 8 | { 9 | public Task Parse(GameClient session, IIncomingPacket packet) 10 | { 11 | var rooms = RoomFactory.GetRoomsDataByOwnerSortByName(session.GetHabbo().Id); 12 | session.Send(new GetCatalogRoomPromotionComposer(rooms)); 13 | return Task.CompletedTask; 14 | } 15 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetClubGiftInfoEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Catalog; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Catalog; 5 | 6 | internal class GetClubGiftInfoEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new ClubGiftsComposer()); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetDirectClubBuyAvailableEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class GetDirectClubBuyAvailableEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetGiftWrappingConfigurationEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Catalog; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Catalog; 5 | 6 | public class GetGiftWrappingConfigurationEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new GiftWrappingConfigurationComposer()); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetHabboBasicMembershipExtendOfferEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class GetHabboBasicMembershipExtendOfferEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetHabboClubExtendOfferEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class GetHabboClubExtendOfferEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetIsOfferGiftableEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class GetIsOfferGiftableEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetLimitedOfferAppearingNextEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class GetLimitedOfferAppearingNextEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetMarketplaceConfigurationEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Catalog; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Catalog; 5 | 6 | public class GetMarketplaceConfigurationEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new MarketplaceConfigurationComposer()); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetNextTargetedOfferEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class GetNextTargetedOfferEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/GetSeasonalCalendarDailyOfferEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class GetSeasonalCalendarDailyOfferEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/MarkCatalogNewAdditionsPageOpenedEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class MarkCatalogNewAdditionsPageOpenedEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/PurchaseBasicMembershipExtensionEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class PurchaseBasicMembershipExtensionEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/PurchaseTargetedOfferEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class PurchaseTargetedOfferEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/PurchaseVipMembershipExtensionEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class PurchaseVipMembershipExtensionEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } 9 | -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/SelectClubGiftEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class SelectClubGiftEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/SetTargetedOfferStateEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class SetTargetedOfferStateEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } 9 | -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Catalog/ShopTargetedOfferViewedEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Catalog; 4 | 5 | internal class ShopTargetedOfferViewedEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } 9 | -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Competition/ForwardToACompetitionRoomEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Competition; 4 | 5 | internal class ForwardToACompetitionRoomEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Competition/ForwardToASubmittableRoomEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Competition; 4 | 5 | internal class ForwardToASubmittableRoomEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Competition/ForwardToRandomCompetitionRoomEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Competition; 4 | 5 | internal class ForwardToRandomCompetitionRoomEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Competition/GetCurrentTimingCodeEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Competition; 4 | 5 | internal class GetCurrentTimingCodeEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Competition/GetIsUserPartOfCompetitionEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Competition; 4 | 5 | internal class GetIsUserPartOfCompetitionEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Competition/GetSecondsUntilEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Competition; 4 | 5 | internal class GetSecondsUntilEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Competition/RoomCompetitionInitEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Competition; 4 | 5 | internal class RoomCompetitionInitEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Competition/SubmitRoomToCompetitionEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Competition; 4 | 5 | internal class SubmitRoomToCompetitionEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Competition/VoteForRoomEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Competition; 4 | 5 | internal class VoteForRoomEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Crafting/CraftEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Crafting; 4 | 5 | internal class CraftEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Crafting/CraftSecretEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Crafting; 4 | 5 | internal class CraftSecretEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } 9 | -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Crafting/GetCraftableProductsEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Crafting; 4 | 5 | internal class GetCraftableProductsEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Crafting/GetCraftingRecipeEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Crafting; 4 | 5 | internal class GetCraftingRecipeEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } 9 | -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Crafting/GetCraftingRecipesAvailableEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Crafting; 4 | 5 | internal class GetCraftingRecipesAvailableEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } 9 | -------------------------------------------------------------------------------- /Communication/Packets/Incoming/FriendList/FriendListUpdateEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.FriendList; 4 | 5 | internal class FriendListUpdateEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => Task.CompletedTask; 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/FriendList/GetBuddyRequestsEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.FriendList; 2 | using Plus.HabboHotel.GameClients; 3 | using Plus.HabboHotel.Users.Messenger; 4 | 5 | namespace Plus.Communication.Packets.Incoming.FriendList; 6 | 7 | internal class GetFriendRequestsEvent : IPacketEvent 8 | { 9 | public Task Parse(GameClient session, IIncomingPacket packet) 10 | { 11 | ICollection requests = session.GetHabbo().Messenger.Requests.Values.ToList(); 12 | session.Send(new BuddyRequestsComposer(requests)); 13 | return Task.CompletedTask; 14 | } 15 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/FriendList/SetRelationshipStatusEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.FriendList; 4 | 5 | internal class SetRelationshipStatusEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/FriendList/VisitUserEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.FriendList; 4 | 5 | internal class VisitUserEvent 6 | { 7 | public Task Parse(GameClient session) => throw new NotImplementedException(); 8 | } 9 | -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Game/Arena/Game2ExitGameEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Game.Arena; 4 | 5 | internal class Game2ExitGameEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Game/Arena/Game2GameChatEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Game.Arena; 4 | 5 | internal class Game2GameChatEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Game/Arena/Game2LoadStageReadyEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Game.Arena; 4 | 5 | internal class Game2LoadStageReadyEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Game/Arena/Game2PlayAgainEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Game.Arena; 4 | 5 | internal class Game2PlayAgainEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Game/Directory/Game2CheckGameDirectoryStatusEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Game.Directory; 4 | 5 | internal class Game2CheckGameDirectoryStatusEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Game/Directory/Game2GetAccountGameStatusEven.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Game.Directory; 4 | 5 | internal class Game2GetAccountGameStatusEven : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Game/Ingame/Game2RequestFullStatusUpdateEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Game.Ingame; 4 | 5 | internal class Game2RequestFullStatusUpdateEvent 6 | { 7 | public Task Parse(GameClient session) => throw new NotImplementedException(); 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Game/InitializeGameCenterEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Game; 4 | 5 | internal class InitializeGameCenterEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => Task.CompletedTask; 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Game/Lobby/GetGameListEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Game; 2 | using Plus.HabboHotel.GameClients; 3 | using Plus.HabboHotel.Games; 4 | 5 | namespace Plus.Communication.Packets.Incoming.Game.Lobby; 6 | 7 | internal class GetGameListEvent : IPacketEvent 8 | { 9 | private readonly IGameDataManager _gameDataManager; 10 | 11 | public GetGameListEvent(IGameDataManager gameDataManager) 12 | { 13 | _gameDataManager = gameDataManager; 14 | } 15 | 16 | public Task Parse(GameClient session, IIncomingPacket packet) 17 | { 18 | session.Send(new GameListComposer(_gameDataManager.GameData)); 19 | return Task.CompletedTask; 20 | } 21 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Groups/GetGroupCreationWindowEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Groups; 2 | using Plus.HabboHotel.GameClients; 3 | using Plus.HabboHotel.Rooms; 4 | 5 | namespace Plus.Communication.Packets.Incoming.Groups; 6 | 7 | internal class GetGroupCreationWindowEvent : IPacketEvent 8 | { 9 | public Task Parse(GameClient session, IIncomingPacket packet) 10 | { 11 | var rooms = RoomFactory.GetRoomsDataByOwnerSortByName(session.GetHabbo().Id).Where(x => x.Group == null).ToList(); 12 | session.Send(new GroupCreationWindowComposer(rooms)); 13 | return Task.CompletedTask; 14 | } 15 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Handshake/DisconnectEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Handshake; 4 | 5 | internal class DisconnectEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) 8 | { 9 | session.Disconnect(); 10 | return Task.CompletedTask; 11 | } 12 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Handshake/InfoRetrieveEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Handshake; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Handshake; 5 | 6 | public class InfoRetrieveEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new UserObjectComposer(session.GetHabbo())); 11 | session.Send(new UserPerksComposer()); 12 | return Task.CompletedTask; 13 | } 14 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Handshake/InitDiffieHandshakeEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Attributes; 2 | using Plus.Communication.Encryption; 3 | using Plus.Communication.Packets.Outgoing.Handshake; 4 | using Plus.HabboHotel.GameClients; 5 | 6 | namespace Plus.Communication.Packets.Incoming.Handshake; 7 | 8 | [NoAuthenticationRequired] 9 | public class InitDiffieHandshakeEvent : IPacketEvent 10 | { 11 | public Task Parse(GameClient session, IIncomingPacket packet) 12 | { 13 | session.Send(new InitCryptoComposer(HabboEncryptionV2.GetRsaDiffieHellmanPrimeKey(), HabboEncryptionV2.GetRsaDiffieHellmanGeneratorKey())); 14 | return Task.CompletedTask; 15 | } 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Handshake/PongEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Attributes; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Handshake; 5 | 6 | [NoAuthenticationRequired] 7 | internal class PongEvent : IPacketEvent 8 | { 9 | public Task Parse(GameClient session, IIncomingPacket packet) 10 | { 11 | session.PingCount = 0; 12 | return Task.CompletedTask; 13 | } 14 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Handshake/VersionCheckEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Attributes; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Handshake; 5 | 6 | [NoAuthenticationRequired] 7 | internal class VersionCheckEvent : IPacketEvent 8 | { 9 | public Task Parse(GameClient session, IIncomingPacket packet) 10 | { 11 | var clientId = packet.ReadInt(); 12 | var gordanPath = packet.ReadString(); 13 | var externalVariables = packet.ReadString(); 14 | return Task.CompletedTask; 15 | } 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Help/GetSanctionStatusEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Help; 4 | 5 | internal class GetSanctionStatusEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) 8 | { 9 | //Session.SendMessage(new SanctionStatusComposer()); 10 | return Task.CompletedTask; 11 | } 12 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Help/OnBullyClickEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Help; 4 | 5 | internal class OnBullyClickEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) 8 | { 9 | //I am a very boring packet. 10 | return Task.CompletedTask; 11 | } 12 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Help/SendBullyReportEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Help; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Help; 5 | 6 | internal class SendBullyReportEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new SendBullyReportComposer()); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Inventory/Badges/GetBadgesEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Inventory.Badges; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Inventory.Badges; 5 | 6 | internal class GetBadgesEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new BadgesComposer(session.GetHabbo().Id, session.GetHabbo().Inventory.Badges.Badges)); 11 | return Task.CompletedTask; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Inventory/Bots/GetBotInventoryEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Inventory.Bots; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Inventory.Bots; 5 | 6 | internal class GetBotInventoryEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | if (session.GetHabbo().Inventory == null) 11 | return Task.CompletedTask; 12 | var bots = session.GetHabbo().Inventory.Bots.Bots.Values.ToList(); 13 | session.Send(new BotInventoryComposer(bots)); 14 | return Task.CompletedTask; 15 | } 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Inventory/Pets/GetPetInventoryEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Inventory.Pets; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Inventory.Pets; 5 | 6 | internal class GetPetInventoryEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | if (session.GetHabbo().Inventory == null) 11 | return Task.CompletedTask; 12 | var pets = session.GetHabbo().Inventory.Pets.Pets.Values.ToList(); 13 | session.Send(new PetInventoryComposer(pets)); 14 | return Task.CompletedTask; 15 | } 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Inventory/Purse/GetCreditsInfoEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Inventory.Purse; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Inventory.Purse; 5 | 6 | internal class GetCreditsInfoEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new CreditBalanceComposer(session.GetHabbo().Credits)); 11 | session.Send(new ActivityPointsComposer(session.GetHabbo().Duckets, session.GetHabbo().Diamonds, session.GetHabbo().GotwPoints)); 12 | return Task.CompletedTask; 13 | } 14 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Inventory/Purse/GetHabboClubWindowEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Inventory.Purse; 4 | 5 | internal class GetHabboClubWindowEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) 8 | { 9 | // Session.SendNotification("Habbo Club is free for all members, enjoy!"); 10 | return Task.CompletedTask; 11 | } 12 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Marketplace/GetMarketplaceCanMakeOfferEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Marketplace; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Marketplace; 5 | 6 | internal class GetMarketplaceCanMakeOfferEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | var errorCode = session.GetHabbo().TradingLockExpiry > 0 ? 6 : 1; 11 | session.Send(new MarketplaceCanMakeOfferResultComposer(errorCode)); 12 | return Task.CompletedTask; 13 | } 14 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Marketplace/GetOwnOffersEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Marketplace; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Marketplace; 5 | 6 | internal class GetOwnOffersEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new MarketPlaceOwnOffersComposer(session.GetHabbo().Id)); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Moderation/CloseIssueDefaultActionEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Moderation; 4 | 5 | internal class CloseIssueDefaultActionEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) 8 | { 9 | return Task.CompletedTask; 10 | } 11 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Moderation/OpenHelpToolEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Moderation; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Moderation; 5 | 6 | internal class OpenHelpToolEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new OpenHelpToolComposer()); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Navigator/CanCreateRoomEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Navigator; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Navigator; 5 | 6 | internal class CanCreateRoomEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new CanCreateRoomComposer(false, 150)); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Navigator/GoToHotelViewEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Incoming.Rooms; 2 | using Plus.HabboHotel.GameClients; 3 | using Plus.HabboHotel.Rooms; 4 | 5 | namespace Plus.Communication.Packets.Incoming.Navigator; 6 | 7 | internal class GoToHotelViewEvent : RoomPacketEvent 8 | { 9 | public override Task Parse(Room room, GameClient session, IIncomingPacket packet) 10 | { 11 | room.GetRoomUserManager()?.RemoveUserFromRoom(session, true); 12 | return Task.CompletedTask; 13 | } 14 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Preferences/SetChatStylePreferenceEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Preferences; 4 | 5 | internal class SetChatStylePreferenceEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) 8 | { 9 | var chatBubbleId = packet.ReadInt(); 10 | 11 | session.GetHabbo().CustomBubbleId = chatBubbleId; 12 | session.GetHabbo().SaveChatBubble(chatBubbleId.ToString()); 13 | 14 | return Task.CompletedTask; 15 | } 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Quests/GetQuestListEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | using Plus.HabboHotel.Quests; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Quests; 5 | 6 | public class GetQuestListEvent : IPacketEvent 7 | { 8 | private readonly IQuestManager _questManager; 9 | 10 | public GetQuestListEvent(IQuestManager questManager) 11 | { 12 | _questManager = questManager; 13 | } 14 | 15 | public Task Parse(GameClient session, IIncomingPacket packet) 16 | { 17 | _questManager.GetList(session, null); 18 | return Task.CompletedTask; 19 | } 20 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Recycler/GetRecyclerRewardsEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Catalog; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Recycler; 5 | 6 | public class GetRecyclerPrizesEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new RecyclerRewardsComposer()); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Recycler/GetRecyclerStatusEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Recycler; 4 | 5 | internal class GetRecyclerStatusEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } 9 | -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Recycler/RecyclerRecycleEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Recycler; 4 | 5 | internal class RecyclerRecycleEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => throw new NotImplementedException(); 8 | } 9 | -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/Avatar/DropHandItemEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | using Plus.HabboHotel.Rooms; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Rooms.Avatar; 5 | 6 | internal class DropHandItemEvent : RoomPacketEvent 7 | { 8 | public override Task Parse(Room room, GameClient session, IIncomingPacket packet) 9 | { 10 | var user = room.GetRoomUserManager().GetRoomUserByHabbo(session.GetHabbo().Id); 11 | if (user == null) 12 | return Task.CompletedTask; 13 | if (user.CarryItemId > 0 && user.CarryTimer > 0) 14 | user.CarryItem(0); 15 | return Task.CompletedTask; 16 | } 17 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/Connection/GoToFlatEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Rooms.Session; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Rooms.Connection; 5 | 6 | internal class GoToFlatEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | if (!session.GetHabbo().InRoom) 11 | return Task.CompletedTask; 12 | if (!session.GetHabbo().EnterRoom(session.GetHabbo().CurrentRoom)) 13 | session.Send(new CloseConnectionComposer()); 14 | return Task.CompletedTask; 15 | } 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/Connection/OpenFlatConnectionEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Rooms.Connection; 4 | 5 | public class OpenFlatConnectionEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) 8 | { 9 | var roomId = packet.ReadUInt(); 10 | var password = packet.ReadString(); 11 | session.GetHabbo().PrepareRoom(roomId, password); 12 | return Task.CompletedTask; 13 | } 14 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/Engine/GetFurnitureAliasesEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Rooms.Engine; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Rooms.Engine; 5 | 6 | internal class GetFurnitureAliasesEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new FurnitureAliasesComposer()); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/FloorPlan/InitializeFloorPlanSessionEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Rooms.FloorPlan; 4 | 5 | internal class InitializeFloorPlanSessionEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) 8 | { 9 | //Session.SendNotif("WARNING - THIS TOOL IS IN BETA, IT COULD CORRUPT YOUR ROOM IF YOU CONFIGURE THE MAP WRONG OR DISCONNECT YOU."); 10 | return Task.CompletedTask; 11 | } 12 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/Furni/RentableSpaces/GetRentableSpaceEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Rooms.Furni.RentableSpaces; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Rooms.Furni.RentableSpaces; 5 | 6 | internal class GetRentableSpaceEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | packet.ReadInt(); //unknown 11 | session.Send(new RentableSpaceComposer()); 12 | return Task.CompletedTask; 13 | } 14 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/Furni/Wired/SaveWiredConditionConfigEvent.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.Packets.Incoming.Rooms.Furni.Wired; 2 | 3 | internal class SaveWiredConditionConfigEvent : SaveWiredConfigEvent 4 | { 5 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/Furni/Wired/SaveWiredEffectConfigEvent.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.Packets.Incoming.Rooms.Furni.Wired; 2 | 3 | internal class SaveWiredEffectConfigEvent : SaveWiredConfigEvent 4 | { 5 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/Furni/Wired/SaveWiredTriggerConfigEvent.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.Packets.Incoming.Rooms.Furni.Wired; 2 | 3 | internal class SaveWiredTriggerConfigEvent : SaveWiredConfigEvent 4 | { 5 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/Furni/YouTubeTelevisions/ToggleYouTubeVideoEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Rooms.Furni.YouTubeTelevisions; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Rooms.Furni.YouTubeTelevisions; 5 | 6 | internal class ToggleYouTubeVideoEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | var itemId = packet.ReadInt(); //Item Id 11 | var videoId = packet.ReadString(); //Video ID 12 | session.Send(new GetYouTubeVideoComposer(itemId, videoId)); 13 | return Task.CompletedTask; 14 | } 15 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/Polls/PollStartEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Rooms.Polls; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Rooms.Polls; 5 | 6 | internal class PollStartEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new PollContentsComposer()); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Rooms/RoomPacketEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | using Plus.HabboHotel.Rooms; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Rooms; 5 | public abstract class RoomPacketEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) 8 | { 9 | var room = session.GetHabbo().CurrentRoom; 10 | if (room == null) return Task.CompletedTask; 11 | return Parse(room, session, packet); 12 | } 13 | 14 | public abstract Task Parse(Room room, GameClient session, IIncomingPacket packet); 15 | } 16 | -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Sound/GetSongInfoEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Sound; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Sound; 5 | 6 | internal class GetSongInfoEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new TraxSongInfoComposer()); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Tracking/EventTrackerEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Tracking; 4 | 5 | internal class EventTrackerEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => Task.CompletedTask; 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Tracking/LatencyTestEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Tracking; 4 | 5 | internal class LatencyTestEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) 8 | { 9 | //Session.SendMessage(new LatencyTestComposer(Packet.PopInt())); 10 | return Task.CompletedTask; 11 | } 12 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Tracking/MemoryPerformanceEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Incoming.Tracking; 4 | 5 | internal class MemoryPerformanceEvent : IPacketEvent 6 | { 7 | public Task Parse(GameClient session, IIncomingPacket packet) => Task.CompletedTask; 8 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Users/GetUserTagsEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Users; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Users; 5 | 6 | internal class GetUserTagsEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | var userId = packet.ReadInt(); 11 | session.Send(new UserTagsComposer(userId)); 12 | return Task.CompletedTask; 13 | } 14 | } -------------------------------------------------------------------------------- /Communication/Packets/Incoming/Users/ScrGetUserInfoEvent.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Outgoing.Users; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.Communication.Packets.Incoming.Users; 5 | 6 | internal class ScrGetUserInfoEvent : IPacketEvent 7 | { 8 | public Task Parse(GameClient session, IIncomingPacket packet) 9 | { 10 | session.Send(new ScrSendUserInfoComposer()); 11 | return Task.CompletedTask; 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/BuildersClub/BCBorrowedItemsComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.BuildersClub; 4 | 5 | public class BcBorrowedItemsComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.BcBorrowedItemsComposer; 8 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(0); 9 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/BuildersClub/BuildersClubMembershipComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.BuildersClub; 4 | 5 | public class BuildersClubMembershipComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.BuildersClubMembershipComposer; 8 | public void Compose(IOutgoingPacket packet) 9 | { 10 | packet.WriteInteger(int.MaxValue); 11 | packet.WriteInteger(100); 12 | packet.WriteInteger(0); 13 | packet.WriteInteger(int.MaxValue); 14 | } 15 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Catalog/CatalogItemDiscountComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Catalog; 4 | 5 | public class CatalogItemDiscountComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.CatalogItemDiscountComposer; 8 | public void Compose(IOutgoingPacket packet) 9 | { 10 | packet.WriteInteger(100); //Most you can get. 11 | packet.WriteInteger(6); 12 | packet.WriteInteger(1); 13 | packet.WriteInteger(1); 14 | packet.WriteInteger(2); //Count 15 | { 16 | packet.WriteInteger(40); 17 | packet.WriteInteger(99); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Catalog/CatalogUpdatedComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Catalog; 4 | 5 | public class CatalogUpdatedComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.CatalogUpdatedComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) => packet.WriteBoolean(false); 10 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Catalog/GiftWrappingErrorComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Catalog; 4 | 5 | public class GiftWrappingErrorComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.GiftWrappingErrorComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // TODO @80O: Verify empty body? 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Catalog/PurchaseErrorComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Catalog; 4 | 5 | public class PurchaseErrorComposer : IServerPacket 6 | { 7 | private readonly int _errorCode; 8 | public uint MessageId => ServerPacketHeader.PurchaseErrorComposer; 9 | 10 | public PurchaseErrorComposer(int errorCode) 11 | { 12 | // TODO @80O: Convert to enum 13 | _errorCode = errorCode; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_errorCode); 17 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Catalog/RecyclerRewardsComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Catalog; 4 | 5 | // TODO @80O: Implement Recycler 6 | public class RecyclerRewardsComposer : IServerPacket 7 | { 8 | public uint MessageId => ServerPacketHeader.RecyclerRewardsComposer; 9 | 10 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(0); // Count of items 11 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Catalog/VoucherRedeemErrorComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Catalog; 4 | 5 | public class VoucherRedeemErrorComposer : IServerPacket 6 | { 7 | private readonly int _type; 8 | public uint MessageId => ServerPacketHeader.VoucherRedeemErrorComposer; 9 | 10 | public VoucherRedeemErrorComposer(int type) => _type = type; // TODO @80O: Extract enum with all errors 11 | 12 | public void Compose(IOutgoingPacket packet) => packet.WriteString(_type.ToString()); 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Catalog/VoucherRedeemOkComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Catalog; 4 | 5 | 6 | // TODO @80O: Implement 7 | public class VoucherRedeemOkComposer : IServerPacket 8 | { 9 | public uint MessageId => ServerPacketHeader.VoucherRedeemOkComposer; 10 | 11 | public void Compose(IOutgoingPacket packet) 12 | { 13 | packet.WriteString(""); //productName 14 | packet.WriteString(""); //productDescription 15 | } 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/FriendList/FindFriendsProcessResultComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.FriendList; 4 | 5 | public class FindFriendsProcessResultComposer : IServerPacket 6 | { 7 | private readonly bool _found; 8 | public uint MessageId => ServerPacketHeader.FindFriendsProcessResultComposer; 9 | 10 | public FindFriendsProcessResultComposer(bool found) 11 | { 12 | _found = found; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) 16 | { 17 | packet.WriteBoolean(_found); 18 | } 19 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/FriendList/FollowFriendFailedComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.FriendList; 4 | 5 | public class FollowFriendFailedComposer : IServerPacket 6 | { 7 | private readonly int _errorCode; 8 | public uint MessageId => ServerPacketHeader.FollowFriendFailedComposer; 9 | 10 | public FollowFriendFailedComposer(int errorCode) 11 | { 12 | _errorCode = errorCode; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_errorCode); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/FriendList/MessengerErrorComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.FriendList; 4 | 5 | public class MessengerErrorComposer : IServerPacket 6 | { 7 | private readonly int _errorCode1; 8 | private readonly int _errorCode2; 9 | 10 | public uint MessageId => ServerPacketHeader.MessengerErrorComposer; 11 | 12 | public MessengerErrorComposer(int errorCode1, int errorCode2) 13 | { 14 | _errorCode1 = errorCode1; 15 | _errorCode2 = errorCode2; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteInteger(_errorCode1); 21 | packet.WriteInteger(_errorCode2); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/FriendList/MessengerInitComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.FriendList; 4 | 5 | public class MessengerInitComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.MessengerInitComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | packet.WriteInteger(Convert.ToInt32(PlusEnvironment.SettingsManager.TryGetValue("messenger.buddy_limit"))); //Friends max. 12 | packet.WriteInteger(300); 13 | packet.WriteInteger(800); 14 | packet.WriteInteger(0); // category count 15 | } 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/FriendList/RoomInviteComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.FriendList; 4 | 5 | public class RoomInviteComposer : IServerPacket 6 | { 7 | private readonly int _senderId; 8 | private readonly string _text; 9 | 10 | public uint MessageId => ServerPacketHeader.RoomInviteComposer; 11 | 12 | public RoomInviteComposer(int senderId, string text) 13 | { 14 | _senderId = senderId; 15 | _text = text; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteInteger(_senderId); 21 | packet.WriteString(_text); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Game/GameAccountStatusComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Game; 4 | 5 | // TODO @80O: Implement 6 | public class GameAccountStatusComposer : IServerPacket 7 | { 8 | private readonly int _gameId; 9 | public uint MessageId => ServerPacketHeader.GameAccountStatusComposer; 10 | 11 | public GameAccountStatusComposer(int gameId) 12 | { 13 | _gameId = gameId; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) 17 | { 18 | packet.WriteInteger(_gameId); 19 | packet.WriteInteger(-1); // Games Left 20 | packet.WriteInteger(0); //Was 16? 21 | } 22 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Game/JoinQueueComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Game; 4 | 5 | public class JoinQueueComposer : IServerPacket 6 | { 7 | private readonly int _gameId; 8 | public uint MessageId => ServerPacketHeader.JoinQueueComposer; 9 | 10 | public JoinQueueComposer(int gameId) 11 | { 12 | _gameId = gameId; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_gameId); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Game/PlayableGamesComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Game; 4 | 5 | public class PlayableGamesComposer : IServerPacket 6 | { 7 | private readonly int _gameId; 8 | 9 | public PlayableGamesComposer(int gameId) 10 | { 11 | _gameId = gameId; 12 | } 13 | 14 | public uint MessageId => ServerPacketHeader.PlayableGamesComposer; 15 | 16 | public void Compose(IOutgoingPacket packet) 17 | { 18 | packet.WriteInteger(_gameId); 19 | packet.WriteInteger(0); 20 | } 21 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Groups/NewGroupInfoComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Groups; 4 | 5 | public class NewGroupInfoComposer : IServerPacket 6 | { 7 | private readonly uint _roomId; 8 | private readonly int _groupId; 9 | 10 | public uint MessageId => ServerPacketHeader.NewGroupInfoComposer; 11 | 12 | public NewGroupInfoComposer(uint roomId, int groupId) 13 | { 14 | _roomId = roomId; 15 | _groupId = groupId; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteUInteger(_roomId); 21 | packet.WriteInteger(_groupId); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Groups/RefreshFavouriteGroupComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Groups; 4 | 5 | public class RefreshFavouriteGroupComposer : IServerPacket 6 | { 7 | private readonly int _id; 8 | public uint MessageId => ServerPacketHeader.RefreshFavouriteGroupComposer; 9 | 10 | public RefreshFavouriteGroupComposer(int id) 11 | { 12 | _id = id; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_id); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Groups/UnknownGroupComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Groups; 4 | 5 | public class UnknownGroupComposer : IServerPacket 6 | { 7 | private readonly int _groupId; 8 | private readonly int _habboId; 9 | 10 | public uint MessageId => ServerPacketHeader.UnknownGroupComposer; 11 | 12 | public UnknownGroupComposer(int groupId, int habboId) 13 | { 14 | _groupId = groupId; 15 | _habboId = habboId; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteInteger(_groupId); 21 | packet.WriteInteger(_habboId); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Handshake/AuthenticationOKComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Handshake; 4 | 5 | public class AuthenticationOkComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.AuthenticationOkComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // Empty Body 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Handshake/AvailabilityStatusComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Handshake; 4 | 5 | public class AvailabilityStatusComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.AvailabilityStatusComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // TODO @80O: Pass variables via constructor. 12 | packet.WriteBoolean(true); 13 | packet.WriteBoolean(false); 14 | packet.WriteBoolean(true); 15 | } 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Handshake/GenericErrorComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Handshake; 4 | 5 | public class GenericErrorComposer : IServerPacket 6 | { 7 | private readonly int _errorId; 8 | public uint MessageId => ServerPacketHeader.GenericErrorComposer; 9 | 10 | public GenericErrorComposer(int errorId) 11 | { 12 | // TODO @80O: Introduce enum with error values 13 | _errorId = errorId; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) 17 | { 18 | packet.WriteInteger(_errorId); 19 | } 20 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Handshake/InitCryptoComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Handshake; 4 | 5 | public class InitCryptoComposer : IServerPacket 6 | { 7 | private readonly string _prime; 8 | private readonly string _generator; 9 | public uint MessageId => ServerPacketHeader.InitCryptoComposer; 10 | 11 | public InitCryptoComposer(string prime, string generator) 12 | { 13 | _prime = prime; 14 | _generator = generator; 15 | } 16 | 17 | public void Compose(IOutgoingPacket packet) 18 | { 19 | packet.WriteString(_prime); 20 | packet.WriteString(_generator); 21 | } 22 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Handshake/PongComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Handshake; 4 | 5 | public class PongComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.PongComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // Empty Body 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Handshake/SecretKeyComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Handshake; 4 | 5 | public class SecretKeyComposer : IServerPacket 6 | { 7 | private readonly string _publicKey; 8 | public uint MessageId => ServerPacketHeader.SecretKeyComposer; 9 | 10 | public SecretKeyComposer(string publicKey) 11 | { 12 | _publicKey = publicKey; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteString(_publicKey); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Handshake/SetUniqueIdComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Handshake; 4 | 5 | public class SetUniqueIdComposer : IServerPacket 6 | { 7 | private readonly string _id; 8 | public uint MessageId => ServerPacketHeader.SetUniqueIdComposer; 9 | 10 | public SetUniqueIdComposer(string id) 11 | { 12 | _id = id; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteString(_id); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Help/SendBullyReportComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Help; 4 | 5 | // TODO @80O: Implement 6 | public class SendBullyReportComposer : IServerPacket 7 | { 8 | public uint MessageId => ServerPacketHeader.SendBullyReportComposer; 9 | 10 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(0); //0-3, sends 0 on Habbo for this purpose. 11 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Help/SubmitBullyReportComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Help; 4 | 5 | public class SubmitBullyReportComposer : IServerPacket 6 | { 7 | private readonly int _result; 8 | public uint MessageId => ServerPacketHeader.SubmitBullyReportComposer; 9 | 10 | public SubmitBullyReportComposer(int result) 11 | { 12 | _result = result; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_result); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Inventory/Achievements/AchievementScoreComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Inventory.Achievements; 4 | 5 | public class AchievementScoreComposer : IServerPacket 6 | { 7 | private readonly int _score; 8 | public uint MessageId => ServerPacketHeader.AchievementScoreComposer; 9 | 10 | public AchievementScoreComposer(int score) 11 | { 12 | _score = score; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_score); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Inventory/AvatarEffects/AvatarEffectExpiredComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | using Plus.HabboHotel.Users.Effects; 3 | 4 | namespace Plus.Communication.Packets.Outgoing.Inventory.AvatarEffects; 5 | 6 | public class AvatarEffectExpiredComposer : IServerPacket 7 | { 8 | private readonly AvatarEffect _effect; 9 | public uint MessageId => ServerPacketHeader.AvatarEffectExpiredComposer; 10 | 11 | public AvatarEffectExpiredComposer(AvatarEffect effect) 12 | { 13 | _effect = effect; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_effect.SpriteId); 17 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Inventory/Furni/FurniListRemoveComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Inventory.Furni; 4 | 5 | public class FurniListRemoveComposer : IServerPacket 6 | { 7 | private readonly uint _id; 8 | public uint MessageId => ServerPacketHeader.FurniListRemoveComposer; 9 | 10 | public FurniListRemoveComposer(uint id) 11 | { 12 | _id = id; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) 16 | { 17 | packet.WriteUInteger(_id); 18 | } 19 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Inventory/Furni/FurniListUpdateComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Inventory.Furni; 4 | 5 | public class FurniListUpdateComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.FurniListUpdateComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // Empty Body 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Inventory/Purse/CreditBalanceComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Inventory.Purse; 4 | 5 | public class CreditBalanceComposer : IServerPacket 6 | { 7 | private readonly int _creditsBalance; 8 | public uint MessageId => ServerPacketHeader.CreditBalanceComposer; 9 | 10 | public CreditBalanceComposer(int creditsBalance) 11 | { 12 | _creditsBalance = creditsBalance; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteString($"{_creditsBalance}.0"); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Inventory/Trading/TradingAcceptComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Inventory.Trading; 4 | 5 | public class TradingAcceptComposer : IServerPacket 6 | { 7 | private readonly int _userId; 8 | private readonly bool _accept; 9 | public uint MessageId => ServerPacketHeader.TradingAcceptComposer; 10 | 11 | public TradingAcceptComposer(int userId, bool accept) 12 | { 13 | _userId = userId; 14 | _accept = accept; 15 | } 16 | 17 | public void Compose(IOutgoingPacket packet) 18 | { 19 | packet.WriteInteger(_userId); 20 | packet.WriteInteger(_accept ? 1 : 0); 21 | } 22 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Inventory/Trading/TradingClosedComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Inventory.Trading; 4 | 5 | public class TradingClosedComposer : IServerPacket 6 | { 7 | private readonly int _userId; 8 | public uint MessageId => ServerPacketHeader.TradingClosedComposer; 9 | 10 | public TradingClosedComposer(int userId) 11 | { 12 | _userId = userId; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) 16 | { 17 | packet.WriteInteger(_userId); 18 | packet.WriteInteger(0); 19 | } 20 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Inventory/Trading/TradingCompleteComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Inventory.Trading; 4 | 5 | public class TradingCompleteComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.TradingCompleteComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // Empty Body 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Inventory/Trading/TradingErrorComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Inventory.Trading; 4 | 5 | public class TradingErrorComposer : IServerPacket 6 | { 7 | private readonly int _error; 8 | private readonly string _username; 9 | public uint MessageId => ServerPacketHeader.TradingErrorComposer; 10 | 11 | public TradingErrorComposer(int error, string username) 12 | { 13 | _error = error; 14 | _username = username; 15 | } 16 | 17 | public void Compose(IOutgoingPacket packet) 18 | { 19 | packet.WriteInteger(_error); 20 | packet.WriteString(_username); 21 | } 22 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Inventory/Trading/TradingFinishComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Inventory.Trading; 4 | 5 | public class TradingFinishComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.TradingFinishComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // Empty Body 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Marketplace/MarketplaceCanMakeOfferResultComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Marketplace; 4 | 5 | public class MarketplaceCanMakeOfferResultComposer : IServerPacket 6 | { 7 | private readonly int _result; 8 | public uint MessageId => ServerPacketHeader.MarketplaceCanMakeOfferResultComposer; 9 | 10 | public MarketplaceCanMakeOfferResultComposer(int result) 11 | { 12 | _result = result; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) 16 | { 17 | packet.WriteInteger(_result); 18 | packet.WriteInteger(0); 19 | } 20 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Marketplace/MarketplaceMakeOfferResultComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Marketplace; 4 | 5 | public class MarketplaceMakeOfferResultComposer : IServerPacket 6 | { 7 | private readonly int _success; 8 | public uint MessageId => ServerPacketHeader.MarketplaceMakeOfferResultComposer; 9 | 10 | public MarketplaceMakeOfferResultComposer(int success) 11 | { 12 | _success = success; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_success); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Misc/LatencyTestComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Misc; 4 | 5 | public class LatencyTestComposer : IServerPacket 6 | { 7 | private readonly int _testResponse; 8 | public uint MessageId => ServerPacketHeader.LatencyResponseComposer; 9 | 10 | public LatencyTestComposer(int testResponse) 11 | { 12 | _testResponse = testResponse; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_testResponse); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Moderation/BroadcastMessageAlertComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Moderation; 4 | 5 | public class BroadcastMessageAlertComposer : IServerPacket 6 | { 7 | private readonly string _message; 8 | private readonly string _url; 9 | public uint MessageId => ServerPacketHeader.BroadcastMessageAlertComposer; 10 | 11 | public BroadcastMessageAlertComposer(string message, string url = "") 12 | { 13 | _message = message; 14 | _url = url; 15 | } 16 | 17 | public void Compose(IOutgoingPacket packet) 18 | { 19 | packet.WriteString(_message); 20 | packet.WriteString(_url); 21 | } 22 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Moderation/ModeratorSupportTicketResponseComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Moderation; 4 | 5 | public class ModeratorSupportTicketResponseComposer : IServerPacket 6 | { 7 | private readonly int _result; 8 | public uint MessageId => ServerPacketHeader.ModeratorSupportTicketResponseComposer; 9 | 10 | public ModeratorSupportTicketResponseComposer(int result) 11 | { 12 | _result = result; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) 16 | { 17 | packet.WriteInteger(_result); 18 | packet.WriteString(""); 19 | } 20 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Moderation/MutedComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Moderation; 4 | 5 | public class MutedComposer : IServerPacket 6 | { 7 | private readonly double _timeMuted; 8 | 9 | public uint MessageId => ServerPacketHeader.MutedComposer; 10 | 11 | public MutedComposer(double timeMuted) 12 | { 13 | _timeMuted = timeMuted; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(Convert.ToInt32(_timeMuted)); 17 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Moderation/OpenHelpToolComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Moderation; 4 | 5 | public class OpenHelpToolComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.OpenHelpToolComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(0); 10 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Navigator/DoorbellComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Navigator; 4 | 5 | public class DoorbellComposer : IServerPacket 6 | { 7 | private readonly string _username; 8 | 9 | public uint MessageId => ServerPacketHeader.DoorbellComposer; 10 | 11 | public DoorbellComposer(string username) 12 | { 13 | _username = username; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) => packet.WriteString(_username); 17 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Navigator/FlatAccessDeniedComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Navigator; 4 | 5 | public class FlatAccessDeniedComposer : IServerPacket 6 | { 7 | private readonly string _username; 8 | public uint MessageId => ServerPacketHeader.FlatAccessDeniedComposer; 9 | 10 | public FlatAccessDeniedComposer(string username) 11 | { 12 | _username = username; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteString(_username); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Navigator/FlatCreatedComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Navigator; 4 | 5 | public class FlatCreatedComposer : IServerPacket 6 | { 7 | private readonly uint _roomId; 8 | private readonly string _roomName; 9 | 10 | public uint MessageId => ServerPacketHeader.FlatCreatedComposer; 11 | 12 | public FlatCreatedComposer(uint roomId, string roomName) 13 | { 14 | _roomId = roomId; 15 | _roomName = roomName; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteUInteger(_roomId); 21 | packet.WriteString(_roomName); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Navigator/NavigatorSettingsComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Navigator; 4 | 5 | public class NavigatorSettingsComposer : IServerPacket 6 | { 7 | private readonly uint _homeroom; 8 | public uint MessageId => ServerPacketHeader.NavigatorSettingsComposer; 9 | 10 | public NavigatorSettingsComposer(uint homeroom) 11 | { 12 | _homeroom = homeroom; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) 16 | { 17 | packet.WriteUInteger(_homeroom); 18 | packet.WriteUInteger(_homeroom); 19 | } 20 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Navigator/New/NavigatorCollapsedCategoriesComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Navigator.New; 4 | 5 | // TODO @80O: Implement 6 | public class NavigatorCollapsedCategoriesComposer : IServerPacket 7 | { 8 | public uint MessageId => ServerPacketHeader.NavigatorCollapsedCategoriesComposer; 9 | 10 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(0); 11 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Navigator/RoomInfoUpdatedComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Navigator; 4 | 5 | public class RoomInfoUpdatedComposer : IServerPacket 6 | { 7 | private readonly uint _roomId; 8 | 9 | public uint MessageId => ServerPacketHeader.RoomInfoUpdatedComposer; 10 | 11 | public RoomInfoUpdatedComposer(uint roomId) 12 | { 13 | _roomId = roomId; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) 17 | { 18 | packet.WriteUInteger(_roomId); 19 | } 20 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Navigator/RoomRatingComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Navigator; 4 | 5 | public class RoomRatingComposer : IServerPacket 6 | { 7 | private readonly int _score; 8 | private readonly bool _canVote; 9 | 10 | public uint MessageId => ServerPacketHeader.RoomRatingComposer; 11 | 12 | public RoomRatingComposer(int score, bool canVote) 13 | { 14 | _score = score; 15 | _canVote = canVote; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteInteger(_score); 21 | packet.WriteBoolean(_canVote); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Navigator/UpdateFavouriteRoomComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Navigator; 4 | 5 | public class UpdateFavouriteRoomComposer : IServerPacket 6 | { 7 | private readonly uint _roomId; 8 | private readonly bool _added; 9 | 10 | public uint MessageId => ServerPacketHeader.UpdateFavouriteRoomComposer; 11 | 12 | public UpdateFavouriteRoomComposer(uint roomId, bool added) 13 | { 14 | _roomId = roomId; 15 | _added = added; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteUInteger(_roomId); 21 | packet.WriteBoolean(_added); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Notifications/MOTDNotificationComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Notifications; 4 | 5 | public class MotdNotificationComposer : IServerPacket 6 | { 7 | private readonly string _message; 8 | 9 | public uint MessageId => ServerPacketHeader.MotdNotificationComposer; 10 | 11 | public MotdNotificationComposer(string message) 12 | { 13 | _message = message; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) 17 | { 18 | packet.WriteInteger(1); 19 | packet.WriteString(_message); 20 | } 21 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Quests/QuestAbortedComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Quests; 4 | 5 | public class QuestAbortedComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.QuestAbortedComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) => packet.WriteBoolean(false); 10 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Quests/QuestCompletedCompser.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Quests; 4 | 5 | public class QuestCompletedCompser : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.QuestCompletedComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // Empty Body 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Action/IgnoreStatusComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Action; 4 | 5 | public class IgnoreStatusComposer : IServerPacket 6 | { 7 | private readonly int _status; 8 | private readonly string _username; 9 | public uint MessageId => ServerPacketHeader.IgnoreStatusComposer; 10 | 11 | public IgnoreStatusComposer(int status, string username) 12 | { 13 | _status = status; 14 | _username = username; 15 | } 16 | 17 | public void Compose(IOutgoingPacket packet) 18 | { 19 | packet.WriteInteger(_status); 20 | packet.WriteString(_username); 21 | } 22 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Avatar/ActionComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Avatar; 4 | 5 | public class ActionComposer : IServerPacket 6 | { 7 | private readonly int _virtualId; 8 | private readonly int _action; 9 | public uint MessageId => ServerPacketHeader.ActionComposer; 10 | 11 | public ActionComposer(int virtualId, int action) 12 | { 13 | _virtualId = virtualId; 14 | _action = action; 15 | } 16 | 17 | public void Compose(IOutgoingPacket packet) 18 | { 19 | packet.WriteInteger(_virtualId); 20 | packet.WriteInteger(_action); 21 | } 22 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Avatar/CarryObjectComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Avatar; 4 | 5 | public class CarryObjectComposer : IServerPacket 6 | { 7 | private readonly int _virtualId; 8 | private readonly int _itemId; 9 | 10 | public uint MessageId => ServerPacketHeader.CarryObjectComposer; 11 | 12 | public CarryObjectComposer(int virtualId, int itemId) 13 | { 14 | _virtualId = virtualId; 15 | _itemId = itemId; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteInteger(_virtualId); 21 | packet.WriteInteger(_itemId); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Avatar/DanceComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | using Plus.HabboHotel.Rooms; 3 | 4 | namespace Plus.Communication.Packets.Outgoing.Rooms.Avatar; 5 | 6 | public class DanceComposer : IServerPacket 7 | { 8 | private readonly RoomUser _avatar; 9 | private readonly int _dance; 10 | 11 | public uint MessageId => ServerPacketHeader.DanceComposer; 12 | 13 | public DanceComposer(RoomUser avatar, int dance) 14 | { 15 | _avatar = avatar; 16 | _dance = dance; 17 | } 18 | 19 | public void Compose(IOutgoingPacket packet) 20 | { 21 | packet.WriteInteger(_avatar.VirtualId); 22 | packet.WriteInteger(_dance); 23 | } 24 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Chat/FloodControlComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Chat; 4 | 5 | public class FloodControlComposer : IServerPacket 6 | { 7 | private readonly int _floodTime; 8 | 9 | public uint MessageId => ServerPacketHeader.FloodControlComposer; 10 | 11 | public FloodControlComposer(int floodTime) 12 | { 13 | _floodTime = floodTime; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_floodTime); 17 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Chat/UserTypingComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Chat; 4 | 5 | public class UserTypingComposer : IServerPacket 6 | { 7 | private readonly int _virtualId; 8 | private readonly bool _typing; 9 | 10 | public uint MessageId => ServerPacketHeader.UserTypingComposer; 11 | 12 | public UserTypingComposer(int virtualId, bool typing) 13 | { 14 | _virtualId = virtualId; 15 | _typing = typing; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteInteger(_virtualId); 21 | packet.WriteInteger(_typing ? 1 : 0); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Engine/FurnitureAliasesComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Engine; 4 | 5 | // TODO @80O: Implement 6 | public class FurnitureAliasesComposer : IServerPacket 7 | { 8 | public uint MessageId => ServerPacketHeader.FurnitureAliasesComposer; 9 | 10 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(0); 11 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Engine/ObjectAddComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | using Plus.HabboHotel.Items; 3 | 4 | namespace Plus.Communication.Packets.Outgoing.Rooms.Engine; 5 | 6 | public class ObjectAddComposer : IServerPacket 7 | { 8 | private readonly Item _item; 9 | public uint MessageId => ServerPacketHeader.ObjectAddComposer; 10 | 11 | public ObjectAddComposer(Item item) 12 | { 13 | _item = item; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) 17 | { 18 | packet.Serialize(_item); 19 | packet.WriteString(_item.Username); 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Engine/ObjectUpdateComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | using Plus.HabboHotel.Items; 3 | 4 | namespace Plus.Communication.Packets.Outgoing.Rooms.Engine; 5 | 6 | public class ObjectUpdateComposer : IServerPacket 7 | { 8 | private readonly Item _item; 9 | public uint MessageId => ServerPacketHeader.ObjectUpdateComposer; 10 | 11 | public ObjectUpdateComposer(Item item) => _item = item; 12 | 13 | public void Compose(IOutgoingPacket packet) => packet.Serialize(_item); 14 | } 15 | -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Engine/RoomEntryInfoComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Engine; 4 | 5 | public class RoomEntryInfoComposer : IServerPacket 6 | { 7 | private readonly uint _roomId; 8 | private readonly bool _isOwner; 9 | 10 | public uint MessageId => ServerPacketHeader.RoomEntryInfoComposer; 11 | 12 | public RoomEntryInfoComposer(uint roomId, bool isOwner) 13 | { 14 | _roomId = roomId; 15 | _isOwner = isOwner; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteUInteger(_roomId); 21 | packet.WriteBoolean(_isOwner); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Engine/RoomPropertyComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Engine; 4 | 5 | public class RoomPropertyComposer : IServerPacket 6 | { 7 | private readonly string _name; 8 | private readonly string _value; 9 | 10 | public uint MessageId => ServerPacketHeader.RoomPropertyComposer; 11 | 12 | public RoomPropertyComposer(string name, string value) 13 | { 14 | _name = name; 15 | _value = value; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteString(_name); 21 | packet.WriteString(_value); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Engine/UserRemoveComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Engine; 4 | 5 | public class UserRemoveComposer : IServerPacket 6 | { 7 | private readonly int _id; 8 | 9 | public uint MessageId => ServerPacketHeader.UserRemoveComposer; 10 | 11 | public UserRemoveComposer(int id) 12 | { 13 | _id = id; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) => packet.WriteString(_id.ToString()); 17 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Furni/GnomeBoxComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Furni; 4 | 5 | public class GnomeBoxComposer : IServerPacket 6 | { 7 | private readonly uint _itemId; 8 | public uint MessageId => ServerPacketHeader.GnomeBoxComposer; 9 | 10 | public GnomeBoxComposer(uint itemId) 11 | { 12 | _itemId = itemId; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteUInteger(_itemId); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Furni/LoveLocks/LoveLockDialogueCloseComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Furni.LoveLocks; 4 | 5 | public class LoveLockDialogueCloseComposer : IServerPacket 6 | { 7 | private readonly uint _itemId; 8 | public uint MessageId => ServerPacketHeader.LoveLockDialogueCloseComposer; 9 | 10 | public LoveLockDialogueCloseComposer(uint itemId) 11 | { 12 | _itemId = itemId; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteUInteger(_itemId); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Furni/LoveLocks/LoveLockDialogueComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Furni.LoveLocks; 4 | 5 | public class LoveLockDialogueComposer : IServerPacket 6 | { 7 | private readonly uint _itemId; 8 | 9 | public uint MessageId => ServerPacketHeader.LoveLockDialogueComposer; 10 | 11 | public LoveLockDialogueComposer(uint itemId) 12 | { 13 | _itemId = itemId; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) 17 | { 18 | packet.WriteUInteger(_itemId); 19 | packet.WriteBoolean(true); 20 | } 21 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Furni/LoveLocks/LoveLockDialogueSetLockedComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Furni.LoveLocks; 4 | 5 | public class LoveLockDialogueSetLockedComposer : IServerPacket 6 | { 7 | private readonly uint _itemId; 8 | public uint MessageId => ServerPacketHeader.LoveLockDialogueSetLockedComposer; 9 | 10 | public LoveLockDialogueSetLockedComposer(uint itemId) 11 | { 12 | _itemId = itemId; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteUInteger(_itemId); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Furni/UpdateMagicTileComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Furni; 4 | 5 | public class UpdateMagicTileComposer : IServerPacket 6 | { 7 | private readonly uint _itemId; 8 | private readonly int _height; 9 | 10 | public uint MessageId => ServerPacketHeader.UpdateMagicTileComposer; 11 | 12 | public UpdateMagicTileComposer(uint itemId, int height) 13 | { 14 | _itemId = itemId; 15 | _height = height; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteUInteger(_itemId); 21 | packet.WriteInteger(_height); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Furni/Wired/HideWiredConfigComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Furni.Wired; 4 | 5 | public class HideWiredConfigComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.HideWiredConfigComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // Empty Body 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Notifications/RoomErrorNotifComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Notifications; 4 | 5 | public class RoomErrorNotifComposer : IServerPacket 6 | { 7 | private readonly int _error; 8 | public uint MessageId => ServerPacketHeader.RoomErrorNotifComposer; 9 | 10 | public RoomErrorNotifComposer(int error) 11 | { 12 | _error = error; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_error); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Permissions/YouAreControllerComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Permissions; 4 | 5 | public class YouAreControllerComposer : IServerPacket 6 | { 7 | private readonly int _setting; 8 | public uint MessageId => ServerPacketHeader.YouAreControllerComposer; 9 | 10 | public YouAreControllerComposer(int setting) 11 | { 12 | _setting = setting; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_setting); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Permissions/YouAreNotControllerComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Permissions; 4 | 5 | public class YouAreNotControllerComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.YouAreNotControllerComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // Empty Body 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Permissions/YouAreOwnerComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Permissions; 4 | 5 | public class YouAreOwnerComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.YouAreOwnerComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // Empty Body 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Polls/PollOfferComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Polls; 4 | 5 | public class PollOfferComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.PollOfferComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | packet.WriteInteger(111141); //Room Id 12 | packet.WriteString("CLIENT_NPS"); 13 | packet.WriteString("Customer Satisfaction Poll"); 14 | packet.WriteString("Give us your opinion!"); 15 | } 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Session/CantConnectComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Session; 4 | 5 | public class CantConnectComposer : IServerPacket 6 | { 7 | private readonly int _error; 8 | public uint MessageId => ServerPacketHeader.CantConnectComposer; 9 | 10 | 11 | // TODO @80O: Extract list of all error values and move to enum. 12 | public CantConnectComposer(int error) 13 | { 14 | _error = error; 15 | } 16 | 17 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(_error); 18 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Session/CloseConnectionComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Session; 4 | 5 | public class CloseConnectionComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.CloseConnectionComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // Empty Body 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Session/FlatAccessibleComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Session; 4 | 5 | public class FlatAccessibleComposer : IServerPacket 6 | { 7 | private readonly string _username; 8 | 9 | public uint MessageId => ServerPacketHeader.FlatAccessibleComposer; 10 | 11 | public FlatAccessibleComposer(string username) 12 | { 13 | _username = username; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) => packet.WriteString(_username); 17 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Session/OpenConnectionComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Session; 4 | 5 | public class OpenConnectionComposer : IServerPacket 6 | { 7 | public uint MessageId => ServerPacketHeader.OpenConnectionComposer; 8 | 9 | public void Compose(IOutgoingPacket packet) 10 | { 11 | // Empty Body 12 | } 13 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Session/RoomForwardComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Session; 4 | 5 | public class RoomForwardComposer : IServerPacket 6 | { 7 | private readonly uint _roomId; 8 | public uint MessageId => ServerPacketHeader.RoomForwardComposer; 9 | 10 | public RoomForwardComposer(uint roomId) 11 | { 12 | _roomId = roomId; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) => packet.WriteUInteger(_roomId); 16 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Session/RoomReadyComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Session; 4 | 5 | public class RoomReadyComposer : IServerPacket 6 | { 7 | private readonly uint _roomId; 8 | private readonly string _model; 9 | 10 | public uint MessageId => ServerPacketHeader.RoomReadyComposer; 11 | 12 | public RoomReadyComposer(uint roomId, string model) 13 | { 14 | _roomId = roomId; 15 | _model = model; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteString(_model); 21 | packet.WriteUInteger(_roomId); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Settings/RoomMuteSettingsComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Settings; 4 | 5 | public class RoomMuteSettingsComposer : IServerPacket 6 | { 7 | private readonly bool _status; 8 | 9 | public uint MessageId => ServerPacketHeader.RoomMuteSettingsComposer; 10 | 11 | public RoomMuteSettingsComposer(bool status) 12 | { 13 | _status = status; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) 17 | { 18 | packet.WriteBoolean(_status); 19 | } 20 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Settings/RoomSettingsSavedComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Settings; 4 | 5 | public class RoomSettingsSavedComposer : IServerPacket 6 | { 7 | private readonly uint _roomId; 8 | 9 | public uint MessageId => ServerPacketHeader.RoomSettingsSavedComposer; 10 | 11 | public RoomSettingsSavedComposer(uint roomId) 12 | { 13 | _roomId = roomId; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) 17 | { 18 | packet.WriteUInteger(_roomId); 19 | } 20 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Rooms/Settings/UnbanUserFromRoomComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Rooms.Settings; 4 | 5 | public class UnbanUserFromRoomComposer : IServerPacket 6 | { 7 | private readonly int _roomId; 8 | private readonly int _userId; 9 | 10 | public uint MessageId => ServerPacketHeader.UnbanUserFromRoomComposer; 11 | 12 | public UnbanUserFromRoomComposer(int roomId, int userId) 13 | { 14 | _roomId = roomId; 15 | _userId = userId; 16 | } 17 | 18 | public void Compose(IOutgoingPacket packet) 19 | { 20 | packet.WriteInteger(_roomId); 21 | packet.WriteInteger(_userId); 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Sound/TraxSongInfoComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Sound; 4 | 5 | // TODO @80O: Implement 6 | public class TraxSongInfoComposer : IServerPacket 7 | { 8 | public uint MessageId => ServerPacketHeader.TraxSongInfoComposer; 9 | 10 | public void Compose(IOutgoingPacket packet) => packet.WriteInteger(0); //Count; 11 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Users/RespectNotificationComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Users; 4 | 5 | public class RespectNotificationComposer : IServerPacket 6 | { 7 | private readonly int _userId; 8 | private readonly int _respect; 9 | public uint MessageId => ServerPacketHeader.RespectNotificationComposer; 10 | 11 | public RespectNotificationComposer(int userId, int respect) 12 | { 13 | _userId = userId; 14 | _respect = respect; 15 | } 16 | 17 | public void Compose(IOutgoingPacket packet) 18 | { 19 | packet.WriteInteger(_userId); 20 | packet.WriteInteger(_respect); 21 | } 22 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Users/UpdateUsernameComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Users; 4 | 5 | public class UpdateUsernameComposer : IServerPacket 6 | { 7 | private readonly string _username; 8 | 9 | public uint MessageId => ServerPacketHeader.UpdateUsernameComposer; 10 | 11 | public UpdateUsernameComposer(string username) 12 | { 13 | _username = username; 14 | } 15 | 16 | public void Compose(IOutgoingPacket packet) 17 | { 18 | packet.WriteInteger(0); 19 | packet.WriteString(_username); 20 | packet.WriteInteger(0); 21 | } 22 | } -------------------------------------------------------------------------------- /Communication/Packets/Outgoing/Users/UserTagsComposer.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.Communication.Packets.Outgoing.Users; 4 | 5 | public class UserTagsComposer : IServerPacket 6 | { 7 | private readonly int _userId; 8 | public uint MessageId => ServerPacketHeader.UserTagsComposer; 9 | 10 | public UserTagsComposer(int userId) 11 | { 12 | _userId = userId; 13 | } 14 | 15 | public void Compose(IOutgoingPacket packet) 16 | { 17 | packet.WriteInteger(_userId); 18 | packet.WriteInteger(0); //Count of the tags. 19 | { 20 | //Append a string. 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /Communication/RCON/Commands/Hotel/ReloadServerSettingsCommand.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.RCON.Commands.Hotel; 2 | 3 | internal class ReloadServerSettingsCommand : IRconCommand 4 | { 5 | public string Description => "This command is used to reload the server settings."; 6 | 7 | public string Key => "reload_server_settings"; 8 | public string Parameters => ""; 9 | 10 | public Task TryExecute(string[] parameters) 11 | { 12 | PlusEnvironment.SettingsManager.Reload(); 13 | return Task.FromResult(true); 14 | } 15 | } -------------------------------------------------------------------------------- /Communication/RCON/Commands/ICommandManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.RCON.Commands; 2 | 3 | public interface ICommandManager 4 | { 5 | /// 6 | /// Request the text to parse and check for commands that need to be executed. 7 | /// 8 | /// A string of data split by char(1), the first part being the command and the second part being the parameters. 9 | /// True if parsed or false if not. 10 | bool Parse(string data); 11 | } -------------------------------------------------------------------------------- /Communication/RCON/Commands/IRCONCommand.cs: -------------------------------------------------------------------------------- 1 | using Plus.Utilities.DependencyInjection; 2 | 3 | namespace Plus.Communication.RCON.Commands; 4 | 5 | [Singleton] 6 | public interface IRconCommand 7 | { 8 | string Key { get; } 9 | string Parameters { get; } 10 | string Description { get; } 11 | Task TryExecute(string[] parameters); 12 | } -------------------------------------------------------------------------------- /Communication/RCON/IRconSocket.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.RCON.Commands; 2 | 3 | namespace Plus.Communication.RCON; 4 | 5 | public interface IRconSocket 6 | { 7 | void Init(string host, int port, IEnumerable allowedConnections); 8 | ICommandManager GetCommands(); 9 | } -------------------------------------------------------------------------------- /Communication/RCON/RconConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.RCON; 2 | 3 | public class RconConfiguration 4 | { 5 | public string Hostname { get; set; } 6 | public int Port { get; set; } 7 | public IEnumerable AllowedAddresses { get; set; } 8 | } -------------------------------------------------------------------------------- /Communication/Revisions/IRevisionsCache.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Communication.Revisions; 2 | 3 | public interface IRevisionsCache 4 | { 5 | IReadOnlyDictionary Revisions { get; set; } 6 | Revision InternalRevision { get; } 7 | } -------------------------------------------------------------------------------- /Communication/Revisions/Revision.cs: -------------------------------------------------------------------------------- 1 | using System.Text.Json.Serialization; 2 | 3 | namespace Plus.Communication.Revisions; 4 | 5 | public class Revision 6 | { 7 | public string Name { get; set; } 8 | public IReadOnlyDictionary IncomingHeaders { get; set; } 9 | [JsonIgnore] 10 | public IReadOnlyDictionary IncomingIdToInternalIdMapping { get; set; } 11 | public IReadOnlyDictionary OutgoingHeaders { get; set; } 12 | [JsonIgnore] 13 | public IReadOnlyDictionary InternalIdToOutgoingIdMapping { get; set; } 14 | } -------------------------------------------------------------------------------- /Config/nlog.config: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Core/FigureData/IFigureDataManager.cs: -------------------------------------------------------------------------------- 1 | using Plus.Core.FigureData.Types; 2 | using Plus.HabboHotel.Users.Clothing.Parts; 3 | 4 | namespace Plus.Core.FigureData; 5 | 6 | public interface IFigureDataManager 7 | { 8 | public const string DefaultFigure = "sh-3338-93.ea-1406-62.hr-831-49.ha-3331-92.hd-180-7.ch-3334-93-1408.lg-3337-92.ca-1813-62"; 9 | 10 | void Init(); 11 | string ProcessFigure(string figure, string gender, ICollection clothingParts, bool hasHabboClub); 12 | Palette GetPalette(int colorId); 13 | bool TryGetPalette(int palletId, out Palette palette); 14 | int GetRandomColor(int palletId); 15 | public string FilterFigure(string figure); 16 | } -------------------------------------------------------------------------------- /Core/FigureData/Types/Color.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Core.FigureData.Types; 2 | 3 | public class Color 4 | { 5 | public Color(int id, int index, int clubLevel, bool selectable, string value) 6 | { 7 | Id = id; 8 | Index = index; 9 | ClubLevel = clubLevel; 10 | Selectable = selectable; 11 | Value = value; 12 | } 13 | 14 | public int Id { get; set; } 15 | public int Index { get; set; } 16 | public int ClubLevel { get; set; } 17 | public bool Selectable { get; set; } 18 | public string Value { get; set; } 19 | } -------------------------------------------------------------------------------- /Core/FigureData/Types/FigureSet.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Core.FigureData.Types; 2 | 3 | internal class FigureSet 4 | { 5 | public FigureSet(SetType type, int palletId) 6 | { 7 | Type = type; 8 | PalletId = palletId; 9 | Sets = new(); 10 | } 11 | 12 | public SetType Type { get; set; } 13 | public int PalletId { get; set; } 14 | public Dictionary Sets { get; set; } 15 | } -------------------------------------------------------------------------------- /Core/FigureData/Types/Palette.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Core.FigureData.Types; 2 | 3 | public class Palette 4 | { 5 | public Palette(int id) 6 | { 7 | Id = id; 8 | Colors = new(); 9 | } 10 | 11 | public int Id { get; set; } 12 | public Dictionary Colors { get; set; } 13 | } -------------------------------------------------------------------------------- /Core/FigureData/Types/Part.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Core.FigureData.Types; 2 | 3 | internal class Part 4 | { 5 | public Part(int id, SetType setType, bool colorable, int index, int colorIndex) 6 | { 7 | Id = id; 8 | SetType = setType; 9 | Colorable = colorable; 10 | Index = index; 11 | ColorIndex = colorIndex; 12 | } 13 | 14 | public int Id { get; set; } 15 | public SetType SetType { get; set; } 16 | public bool Colorable { get; set; } 17 | public int Index { get; set; } 18 | public int ColorIndex { get; set; } 19 | } -------------------------------------------------------------------------------- /Core/FigureData/Types/SetType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Core.FigureData.Types; 2 | 3 | public enum SetType 4 | { 5 | Hr, 6 | Hd, 7 | Ch, 8 | Lg, 9 | Sh, 10 | Ha, 11 | He, 12 | Ea, 13 | Fa, 14 | Ca, 15 | Wa, 16 | Cc, 17 | Cp 18 | } -------------------------------------------------------------------------------- /Core/IServerStatusUpdater.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Core; 2 | 3 | public interface IServerStatusUpdater 4 | { 5 | void Dispose(); 6 | void Init(); 7 | void OnTick(object obj); 8 | } -------------------------------------------------------------------------------- /Core/IStartable.cs: -------------------------------------------------------------------------------- 1 | using Plus.Utilities.DependencyInjection; 2 | 3 | namespace Plus.Core; 4 | 5 | [Singleton] 6 | public interface IStartable 7 | { 8 | Task Start(); 9 | } -------------------------------------------------------------------------------- /Core/Language/ILanguageManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Core.Language; 2 | 3 | public interface ILanguageManager 4 | { 5 | string TryGetValue(string value); 6 | Task Reload(); 7 | } -------------------------------------------------------------------------------- /Core/Settings/ISettingsManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Core.Settings; 2 | 3 | public interface ISettingsManager 4 | { 5 | string TryGetValue(string value); 6 | Task Reload(); 7 | } -------------------------------------------------------------------------------- /Database/Adapter/NormalQueryReactor.cs: -------------------------------------------------------------------------------- 1 | using Plus.Database.Interfaces; 2 | 3 | namespace Plus.Database.Adapter; 4 | 5 | public class NormalQueryReactor : QueryAdapter, IQueryAdapter 6 | { 7 | public NormalQueryReactor(IDatabaseClient client) 8 | : base(client) 9 | { 10 | Command = client.CreateNewCommand(); 11 | } 12 | 13 | public void Dispose() 14 | { 15 | Command.Dispose(); 16 | Client.Dispose(); 17 | GC.SuppressFinalize(this); 18 | } 19 | } -------------------------------------------------------------------------------- /Database/DatabaseConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Database; 2 | 3 | public class DatabaseConfiguration 4 | { 5 | public string Hostname { get; set; } 6 | public string Name { get; set; } 7 | public string Username { get; set; } 8 | public string Password { get; set; } 9 | public uint Port { get; set; } 10 | public uint MinimumPoolSize { get; set; } 11 | public uint MaximumPoolSize { get; set; } 12 | } -------------------------------------------------------------------------------- /Database/IDatabase.cs: -------------------------------------------------------------------------------- 1 | using System.Data; 2 | using Plus.Database.Interfaces; 3 | 4 | namespace Plus.Database; 5 | 6 | public interface IDatabase 7 | { 8 | bool IsConnected(); 9 | [Obsolete] 10 | IQueryAdapter GetQueryReactor(); 11 | IDbConnection Connection(); 12 | } -------------------------------------------------------------------------------- /Database/Interfaces/IDatabaseClient.cs: -------------------------------------------------------------------------------- 1 | using MySqlConnector; 2 | 3 | namespace Plus.Database.Interfaces; 4 | 5 | public interface IDatabaseClient : IDisposable 6 | { 7 | void Connect(); 8 | void Disconnect(); 9 | IQueryAdapter GetQueryReactor(); 10 | MySqlCommand CreateNewCommand(); 11 | } -------------------------------------------------------------------------------- /Database/Interfaces/IQueryAdapter.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Database.Interfaces; 2 | 3 | public interface IQueryAdapter : IRegularQueryAdapter, IDisposable 4 | { 5 | long InsertQuery(); 6 | void RunQuery(); 7 | } -------------------------------------------------------------------------------- /Database/Interfaces/IRegularQueryAdapter.cs: -------------------------------------------------------------------------------- 1 | using System.Data; 2 | 3 | namespace Plus.Database.Interfaces; 4 | 5 | public interface IRegularQueryAdapter 6 | { 7 | void AddParameter(string name, object query); 8 | bool FindsResult(); 9 | int GetInteger(); 10 | DataRow GetRow(); 11 | string GetString(); 12 | DataTable GetTable(); 13 | void RunQuery(string query); 14 | void SetQuery(string query); 15 | } -------------------------------------------------------------------------------- /HabboHotel/Achievements/Achievement.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Achievements; 2 | 3 | public class Achievement 4 | { 5 | 6 | public int Id { get; set; } 7 | 8 | public string? Category { get; set; } 9 | 10 | public string? GroupName { get; set; } 11 | 12 | public int RewardPixels { get; set; } 13 | 14 | public int RewardPoints { get; set; } 15 | 16 | public int ProgressNeeded { get; set; } 17 | 18 | public int GameId { get; set; } 19 | 20 | public int Level { get; set; } 21 | 22 | public Dictionary Levels { get; set; } = new(); 23 | 24 | public void AddLevel(AchievementLevel level) => Levels.Add(level.Level, level); 25 | } -------------------------------------------------------------------------------- /HabboHotel/Achievements/AchievementLevel.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Achievements; 2 | 3 | public struct AchievementLevel 4 | { 5 | public int Level { get; } 6 | public int Requirement { get; } 7 | public int RewardPixels { get; } 8 | public int RewardPoints { get; } 9 | 10 | public AchievementLevel(int level, int rewardPixels, int rewardPoints, int requirement) 11 | { 12 | Level = level; 13 | RewardPixels = rewardPixels; 14 | RewardPoints = rewardPoints; 15 | Requirement = requirement; 16 | } 17 | } -------------------------------------------------------------------------------- /HabboHotel/Achievements/IAchievementLevelFactory.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Achievements; 2 | 3 | public interface IAchievementLevelFactory 4 | { 5 | Task> GetAchievementLevels(); 6 | } -------------------------------------------------------------------------------- /HabboHotel/Achievements/IAchievementManager.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.HabboHotel.Achievements; 4 | 5 | public interface IAchievementManager 6 | { 7 | Dictionary Achievements { get; } 8 | Task Init(); 9 | bool ProgressAchievement(GameClient session, string group, int progress, bool fromBeginning = false); 10 | ICollection GetGameAchievements(int gameId); 11 | } -------------------------------------------------------------------------------- /HabboHotel/Achievements/UserAchievement.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Achievements; 2 | 3 | public class UserAchievement 4 | { 5 | public UserAchievement(string achievementGroup, int level, int progress) 6 | { 7 | AchievementGroup = achievementGroup; 8 | Level = level; 9 | Progress = progress; 10 | } 11 | 12 | public string AchievementGroup { get; } 13 | public int Level { get; set; } 14 | public int Progress { get; set; } 15 | } -------------------------------------------------------------------------------- /HabboHotel/Ambassadors/IAmbassadorsManager.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Users; 2 | 3 | namespace Plus.HabboHotel.Ambassadors; 4 | 5 | public interface IAmbassadorsManager 6 | { 7 | Task Warn(Habbo ambassador, Habbo target, string message); 8 | } -------------------------------------------------------------------------------- /HabboHotel/Badges/BadgeDefinition.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Badges; 2 | 3 | public class BadgeDefinition 4 | { 5 | public string Code { get; init; } = string.Empty; 6 | public string RequiredRight { get; init; } = string.Empty; 7 | } -------------------------------------------------------------------------------- /HabboHotel/Badges/IBadgeManager.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Users; 2 | using Plus.HabboHotel.Users.Badges; 3 | 4 | namespace Plus.HabboHotel.Badges; 5 | 6 | public interface IBadgeManager 7 | { 8 | Task Init(); 9 | Task GiveBadge(Habbo habbo, string code); 10 | Task RemoveBadge(Habbo habbo, string badge); 11 | Task> LoadBadgesForHabbo(int userId); 12 | IReadOnlyDictionary Badges { get; } 13 | } -------------------------------------------------------------------------------- /HabboHotel/Bots/IBotManager.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Rooms.AI; 2 | using Plus.HabboHotel.Rooms.AI.Responses; 3 | 4 | namespace Plus.HabboHotel.Bots; 5 | 6 | public interface IBotManager 7 | { 8 | void Init(); 9 | BotResponse? GetResponse(BotAiType type, string message); 10 | } -------------------------------------------------------------------------------- /HabboHotel/Cache/ICacheManager.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Cache.Type; 2 | 3 | namespace Plus.HabboHotel.Cache; 4 | 5 | public interface ICacheManager 6 | { 7 | bool ContainsUser(int id); 8 | CachedUser? GenerateUser(int id); 9 | bool TryRemoveUser(int id, out CachedUser cachedUser); 10 | bool TryGetUser(int id, out CachedUser cachedUser); 11 | ICollection GetUserCache(); 12 | void Init(); 13 | } -------------------------------------------------------------------------------- /HabboHotel/Cache/Process/IProcessComponent.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Cache.Process; 2 | 3 | public interface IProcessComponent 4 | { 5 | /// 6 | /// Initializes the ProcessComponent. 7 | /// 8 | void Init(); 9 | 10 | /// 11 | /// Called for each time the timer ticks. 12 | /// 13 | /// 14 | void Run(object state); 15 | 16 | /// 17 | /// Stops the timer and disposes everything. 18 | /// 19 | void Dispose(); 20 | } -------------------------------------------------------------------------------- /HabboHotel/Cache/Type/CachedUser.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Cache.Type; 2 | 3 | public class CachedUser 4 | { 5 | public int Id { get; init; } 6 | public string Username { get; init; } = string.Empty; 7 | public string Motto { get; init; } = string.Empty; 8 | public string Look { get; init; } = string.Empty; 9 | public DateTime AddedTime { get; set; } = DateTime.UtcNow; 10 | 11 | public bool IsExpired => (DateTime.UtcNow - AddedTime).TotalMinutes >= 30; 12 | } -------------------------------------------------------------------------------- /HabboHotel/Catalog/CatalogBot.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Catalog; 2 | 3 | public class CatalogBot 4 | { 5 | public uint Id { get; set; } 6 | public string? Figure { get; set; } 7 | public string? Gender { get; set; } 8 | public string? Motto { get; set; } 9 | public string? Name { get; set; } 10 | public string? AiType { get; set; } 11 | } -------------------------------------------------------------------------------- /HabboHotel/Catalog/CatalogDeal.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Catalog; 2 | 3 | public class CatalogDeal 4 | { 5 | public int Id { get; set; } 6 | public string? Items { get; set; } 7 | public List ItemDataList { get; set; } = new(); 8 | public string? Name { get; set; } 9 | public int RoomId { get; set; } 10 | } -------------------------------------------------------------------------------- /HabboHotel/Catalog/CatalogPromotion.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Catalog; 2 | 3 | public class CatalogPromotion 4 | { 5 | public int Id { get; set; } 6 | public string? Title { get; set; } 7 | public string? Image { get; set; } 8 | public int Unknown { get; set; } 9 | public string? PageLink { get; set; } 10 | public int ParentId { get; set; } 11 | } -------------------------------------------------------------------------------- /HabboHotel/Catalog/Clothing/ClothingItem.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Catalog.Clothing; 2 | 3 | public class ClothingItem 4 | { 5 | public ClothingItem(int id, string name, string partIds) 6 | { 7 | Id = id; 8 | ClothingName = name; 9 | PartIds = partIds.Split(",").Select(int.Parse).ToList(); 10 | } 11 | 12 | public int Id { get; } 13 | public string ClothingName { get; } 14 | public List PartIds { get; } 15 | } -------------------------------------------------------------------------------- /HabboHotel/Catalog/Clothing/IClothingManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Catalog.Clothing; 2 | 3 | public interface IClothingManager 4 | { 5 | ICollection GetClothingAllParts { get; } 6 | void Init(); 7 | bool TryGetClothing(int itemId, out ClothingItem clothing); 8 | } -------------------------------------------------------------------------------- /HabboHotel/Catalog/Pets/IPetRaceManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Catalog.Pets; 2 | 3 | public interface IPetRaceManager 4 | { 5 | void Init(); 6 | List GetRacesForRaceId(int raceId); 7 | } -------------------------------------------------------------------------------- /HabboHotel/Catalog/Vouchers/IVoucherManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Catalog.Vouchers; 2 | 3 | public interface IVoucherManager 4 | { 5 | void Init(); 6 | bool TryGetVoucher(string code, out Voucher voucher); 7 | } -------------------------------------------------------------------------------- /HabboHotel/Catalog/Vouchers/VoucherType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Catalog.Vouchers; 2 | 3 | public enum VoucherType 4 | { 5 | Credit, 6 | Ducket 7 | } -------------------------------------------------------------------------------- /HabboHotel/GameClients/IIncomingPacket.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.GameClients; 2 | 3 | public interface IIncomingPacket 4 | { 5 | int MessageId { get; set; } 6 | Memory Buffer { get; } 7 | byte ReadByte(); 8 | short ReadShort(); 9 | int ReadInt(); 10 | uint ReadUInt(); 11 | bool ReadBool(); 12 | string ReadString(); 13 | bool HasDataRemaining(); 14 | byte[] ReadFixedValue(); 15 | void ReadBytes(Span destination); 16 | } -------------------------------------------------------------------------------- /HabboHotel/GameClients/IOutgoingPacket.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.GameClients; 2 | 3 | public interface IOutgoingPacket 4 | { 5 | int MessageId { get; set; } 6 | ReadOnlyMemory Buffer { get; } 7 | void WriteByte(byte value); 8 | void WriteShort(short value); 9 | void WriteInt(int value); 10 | void WriteInteger(int value); 11 | void WriteUInt(uint value); 12 | void WriteUInteger(uint value); 13 | void WriteBool(bool value); 14 | void WriteBoolean(bool value); 15 | void WriteString(string value); 16 | void WriteDouble(double value); 17 | } -------------------------------------------------------------------------------- /HabboHotel/GameClients/IPacketFactory.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.IO; 2 | using Plus.Utilities.DependencyInjection; 3 | 4 | namespace Plus.HabboHotel.GameClients; 5 | 6 | [Singleton] 7 | public interface IPacketFactory 8 | { 9 | IIncomingPacket CreateIncomingPacket(Memory buffer); 10 | IOutgoingPacket CreateOutgoingPacket(RecyclableMemoryStream stream); 11 | } -------------------------------------------------------------------------------- /HabboHotel/Games/IGameDataManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Games; 2 | 3 | public interface IGameDataManager 4 | { 5 | ICollection GameData { get; } 6 | void Init(); 7 | bool TryGetGame(int gameId, out GameData data); 8 | int GetCount(); 9 | } -------------------------------------------------------------------------------- /HabboHotel/Groups/BadgePartUtility.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Groups; 2 | 3 | public static class BadgePartUtility 4 | { 5 | public static string WorkBadgeParts(bool isBase, string partId, string colour, string position) 6 | { 7 | var parts = isBase ? "b" : "s"; 8 | partId = int.Parse(partId) < 10 ? $"0{partId}" : partId; 9 | colour = int.Parse(colour) < 10 ? $"0{colour}" : colour; 10 | parts += partId + colour + position; 11 | if (!isBase && (parts == "s00000" || parts == "s000000")) return string.Empty; 12 | return parts; 13 | } 14 | } -------------------------------------------------------------------------------- /HabboHotel/Groups/GroupBadgeParts.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Groups; 2 | 3 | public class GroupBadgeParts 4 | { 5 | public GroupBadgeParts(int id, string assetOne, string assetTwo) 6 | { 7 | Id = id; 8 | AssetOne = assetOne; 9 | AssetTwo = assetTwo; 10 | } 11 | 12 | public int Id { get; } 13 | public string AssetOne { get; } 14 | public string AssetTwo { get; } 15 | } -------------------------------------------------------------------------------- /HabboHotel/Groups/GroupColours.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Groups; 2 | 3 | public class GroupColours 4 | { 5 | public GroupColours(int id, string colour) 6 | { 7 | Id = id; 8 | Colour = colour; 9 | } 10 | 11 | public int Id { get; } 12 | public string Colour { get; } 13 | } -------------------------------------------------------------------------------- /HabboHotel/Groups/GroupMember.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Groups; 2 | 3 | public class GroupMember 4 | { 5 | public GroupMember(int id, string username, string look) 6 | { 7 | Id = id; 8 | Username = username; 9 | Look = look; 10 | } 11 | 12 | public int Id { get; set; } 13 | public string Username { get; set; } 14 | public string Look { get; set; } 15 | } -------------------------------------------------------------------------------- /HabboHotel/Groups/GroupType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Groups; 2 | 3 | public enum GroupType 4 | { 5 | Open = 0, 6 | Locked = 1, 7 | Private = 2 8 | } -------------------------------------------------------------------------------- /HabboHotel/Items/Data/Moodlight/MoodlightPreset.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items.Data.Moodlight; 2 | 3 | public class MoodlightPreset 4 | { 5 | public bool BackgroundOnly; 6 | public string ColorCode; 7 | public int ColorIntensity; 8 | 9 | public MoodlightPreset(string colorCode, int colorIntensity, bool backgroundOnly) 10 | { 11 | ColorCode = colorCode; 12 | ColorIntensity = colorIntensity; 13 | BackgroundOnly = backgroundOnly; 14 | } 15 | } -------------------------------------------------------------------------------- /HabboHotel/Items/DataFormat/EmptyDataFormat.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items.DataFormat; 2 | 3 | public class EmptyDataFormat : FurniObjectData 4 | { 5 | public override FurniDataStructure StructureType => FurniDataStructure.Empty; 6 | 7 | public override string Serialize() => string.Empty; 8 | 9 | public override void Store(string data) 10 | { 11 | } 12 | } -------------------------------------------------------------------------------- /HabboHotel/Items/DataFormat/FurniDataStructure.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items.DataFormat; 2 | 3 | public enum FurniDataStructure 4 | { 5 | Legacy = 0, //s 6 | Map = 1, //count -> s - s 7 | StringArray = 2, //count -> s 8 | VoteResult = 3, //s i 9 | Empty = 4, // 10 | IntArray = 5, //count -> i 11 | HighScore = 6, // 12 | Crackable = 7, //sii 13 | 14 | ListList = 100, // used for custom parameters 15 | /// Format is 16 | /// [ [ 1, 2, 3, etc], 17 | /// [ 1, 2, 3, etc], 18 | /// [ 1, 2, 3, etc] 19 | /// ] 20 | /// 21 | Int = 101 22 | } -------------------------------------------------------------------------------- /HabboHotel/Items/DataFormat/HighScoreData.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items.DataFormat; 2 | 3 | public class HighScoreData 4 | { 5 | public int Score; 6 | public List Users = new(0); 7 | } -------------------------------------------------------------------------------- /HabboHotel/Items/DataFormat/HighscoreDataFormat.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items.DataFormat; 2 | 3 | public class HighscoreDataFormat : FurniObjectData 4 | { 5 | public string State = string.Empty; 6 | public uint ScoreType; 7 | public uint ClearType; 8 | 9 | public override FurniDataStructure StructureType => FurniDataStructure.HighScore; 10 | 11 | public override string Serialize() 12 | { 13 | throw new NotImplementedException(); 14 | } 15 | 16 | public override void Store(string data) 17 | { 18 | throw new NotImplementedException(); 19 | } 20 | } -------------------------------------------------------------------------------- /HabboHotel/Items/DataFormat/IFurniObjectData.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items.DataFormat; 2 | 3 | public interface IFurniObjectData 4 | { 5 | FurniDataStructure StructureType { get; } 6 | void Store(string data); 7 | string Serialize(); 8 | } -------------------------------------------------------------------------------- /HabboHotel/Items/DataFormat/IntDataFormat.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items.DataFormat; 2 | 3 | public class IntDataFormat : FurniObjectData 4 | { 5 | private int _data; 6 | 7 | public int Data 8 | { 9 | get => _data; 10 | set 11 | { 12 | _data = value; 13 | RaiseDataUpdated(); 14 | } 15 | } 16 | 17 | public override FurniDataStructure StructureType => FurniDataStructure.Int; 18 | 19 | public override string Serialize() => _data.ToString(); 20 | 21 | public override void Store(string data) => int.TryParse(data, out _data); 22 | } -------------------------------------------------------------------------------- /HabboHotel/Items/DataFormat/LegacyDataFormat.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items.DataFormat; 2 | 3 | public class LegacyDataFormat : FurniObjectData 4 | { 5 | private string _data = string.Empty; 6 | 7 | public string Data 8 | { 9 | get => _data; 10 | set 11 | { 12 | _data = value; 13 | RaiseDataUpdated(); 14 | } 15 | } 16 | 17 | public override FurniDataStructure StructureType => FurniDataStructure.Legacy; 18 | 19 | public override string Serialize() => Data; 20 | 21 | public override void Store(string data) => Data = data; 22 | } -------------------------------------------------------------------------------- /HabboHotel/Items/IItemDataManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items; 2 | 3 | public interface IItemDataManager 4 | { 5 | void Init(); 6 | ItemDefinition GetItemByName(string name); 7 | Dictionary Gifts { get; } // 8 | Dictionary Items { get; } 9 | } -------------------------------------------------------------------------------- /HabboHotel/Items/Interactor/IFurniInteractor.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | using Plus.HabboHotel.Rooms; 3 | using Plus.HabboHotel.Rooms.PathFinding; 4 | 5 | namespace Plus.HabboHotel.Items.Interactor; 6 | 7 | public interface IFurniInteractor 8 | { 9 | void OnPlace(GameClient session, Item item) { } 10 | void OnMove(GameClient session, ThreeDCoord from, ThreeDCoord to) { } 11 | void OnRemove(GameClient session, Item item) { } 12 | void OnTrigger(GameClient session, Item item, int request, bool hasRights) { } 13 | void OnWiredTrigger(Item item) { } 14 | void OnWalkOn(RoomUser user) { } 15 | void OnWalkOff(RoomUser user) { } 16 | } -------------------------------------------------------------------------------- /HabboHotel/Items/Televisions/ITelevisionManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items.Televisions; 2 | 3 | public interface ITelevisionManager 4 | { 5 | ICollection TelevisionList { get; } 6 | Dictionary Televisions { get; } 7 | void Init(); 8 | bool TryGet(int itemId, out TelevisionItem televisionItem); 9 | } -------------------------------------------------------------------------------- /HabboHotel/Items/Televisions/TelevisionItem.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items.Televisions; 2 | 3 | public class TelevisionItem 4 | { 5 | public TelevisionItem(int id, string youTubeId, string title, string description, bool enabled) 6 | { 7 | Id = id; 8 | YouTubeId = youTubeId; 9 | Title = title; 10 | Description = description; 11 | Enabled = enabled; 12 | } 13 | 14 | public int Id { get; } 15 | 16 | public string YouTubeId { get; } 17 | 18 | 19 | public string Title { get; } 20 | 21 | public string Description { get; } 22 | 23 | public bool Enabled { get; } 24 | } -------------------------------------------------------------------------------- /HabboHotel/Items/Wired/IWiredCycle.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Items.Wired; 2 | 3 | internal interface IWiredCycle 4 | { 5 | int Delay { get; set; } 6 | int TickCount { get; set; } 7 | bool OnCycle(); 8 | } -------------------------------------------------------------------------------- /HabboHotel/Items/Wired/IWiredItem.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Concurrent; 2 | using Plus.HabboHotel.GameClients; 3 | using Plus.HabboHotel.Rooms; 4 | 5 | namespace Plus.HabboHotel.Items.Wired; 6 | 7 | public interface IWiredItem 8 | { 9 | Room Instance { get; set; } 10 | Item Item { get; set; } 11 | WiredBoxType Type { get; } 12 | ConcurrentDictionary SetItems { get; set; } 13 | string StringData { get; set; } 14 | bool BoolData { get; set; } 15 | string ItemsData { get; set; } 16 | void HandleSave(IIncomingPacket packet); 17 | bool Execute(params object[] @params); 18 | } -------------------------------------------------------------------------------- /HabboHotel/LandingView/ILandingViewManager.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.LandingView.Promotions; 2 | 3 | namespace Plus.HabboHotel.LandingView; 4 | 5 | public interface ILandingViewManager 6 | { 7 | Task Reload(); 8 | ICollection GetPromotionItems(); 9 | } -------------------------------------------------------------------------------- /HabboHotel/LandingView/Promotions/Promotion.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.LandingView.Promotions; 2 | 3 | public class Promotion 4 | { 5 | public int Id { get; set; } 6 | public string Title { get; set; } 7 | public string Text { get; set; } 8 | public string ButtonText { get; set; } 9 | public int ButtonType { get; set; } 10 | public string ButtonLink { get; set; } 11 | public string ImageLink { get; set; } 12 | } -------------------------------------------------------------------------------- /HabboHotel/Moderation/ModerationBanType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Moderation; 2 | 3 | public enum ModerationBanType 4 | { 5 | Ip, 6 | Machine, 7 | Username 8 | } -------------------------------------------------------------------------------- /HabboHotel/Navigator/FeaturedRoom.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Navigator; 2 | 3 | public class FeaturedRoom 4 | { 5 | public FeaturedRoom(int roomId, string caption, string description, string images) 6 | { 7 | RoomId = roomId; 8 | Caption = caption; 9 | Description = description; 10 | Image = images; 11 | } 12 | 13 | public int RoomId { get; } 14 | public string Caption { get; } 15 | public string Description { get; } 16 | public string Image { get; } 17 | } -------------------------------------------------------------------------------- /HabboHotel/Navigator/NavigatorCategoryType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Navigator; 2 | 3 | public enum NavigatorCategoryType 4 | { 5 | Category, 6 | Featured, 7 | Popular, 8 | Recommended, 9 | Query, 10 | MyRooms, 11 | MyFavourites, 12 | MyGroups, 13 | MyHistory, 14 | MyFriendsRooms, 15 | MyFrequentHistory, 16 | TopPromotions, 17 | PromotionCategory, 18 | MyRights 19 | } -------------------------------------------------------------------------------- /HabboHotel/Navigator/NavigatorSearchAllowance.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Navigator; 2 | 3 | public enum NavigatorSearchAllowance 4 | { 5 | Nothing, 6 | ShowMore, 7 | GoBack 8 | } -------------------------------------------------------------------------------- /HabboHotel/Navigator/NavigatorViewMode.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Navigator; 2 | 3 | public enum NavigatorViewMode 4 | { 5 | Regular, 6 | Thumbnail 7 | } -------------------------------------------------------------------------------- /HabboHotel/Navigator/NavigatorViewModeUtility.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Navigator; 2 | 3 | public static class NavigatorViewModeUtility 4 | { 5 | public static NavigatorViewMode GetViewModeByString(string mode) 6 | { 7 | switch (mode.ToUpper()) 8 | { 9 | default: 10 | case "REGULAR": 11 | return NavigatorViewMode.Regular; 12 | case "THUMBNAIL": 13 | return NavigatorViewMode.Thumbnail; 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /HabboHotel/Navigator/TopLevelItem.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Navigator; 2 | 3 | public class TopLevelItem 4 | { 5 | public TopLevelItem(int id, string searchCode, string filter, string localization) 6 | { 7 | Id = id; 8 | SearchCode = searchCode; 9 | Filter = filter; 10 | Localization = localization; 11 | } 12 | 13 | public int Id { get; set; } 14 | 15 | public string SearchCode { get; set; } 16 | 17 | public string Filter { get; set; } 18 | 19 | public string Localization { get; set; } 20 | } -------------------------------------------------------------------------------- /HabboHotel/Permissions/IPermissionManager.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Users; 2 | 3 | namespace Plus.HabboHotel.Permissions; 4 | 5 | public interface IPermissionManager 6 | { 7 | void Init(); 8 | bool TryGetGroup(int id, out PermissionGroup group); 9 | List GetPermissionsForPlayer(Habbo player); 10 | List GetCommandsForPlayer(Habbo player); 11 | } -------------------------------------------------------------------------------- /HabboHotel/Permissions/Permission.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Permissions; 2 | 3 | internal class Permission 4 | { 5 | public Permission(int id, string name, string description) 6 | { 7 | Id = id; 8 | PermissionName = name; 9 | Description = description; 10 | } 11 | 12 | public int Id { get; set; } 13 | public string PermissionName { get; set; } 14 | public string Description { get; set; } 15 | } -------------------------------------------------------------------------------- /HabboHotel/Permissions/PermissionCommand.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Permissions; 2 | 3 | internal class PermissionCommand 4 | { 5 | public PermissionCommand(string command, int groupId, int subscriptionId) 6 | { 7 | Command = command; 8 | GroupId = groupId; 9 | SubscriptionId = subscriptionId; 10 | } 11 | 12 | public string Command { get; } 13 | public int GroupId { get; } 14 | public int SubscriptionId { get; } 15 | } -------------------------------------------------------------------------------- /HabboHotel/Permissions/PermissionGroup.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Permissions; 2 | 3 | public class PermissionGroup 4 | { 5 | public PermissionGroup(string name, string description, string badge) 6 | { 7 | Name = name; 8 | Description = description; 9 | Badge = badge; 10 | } 11 | 12 | public string Name { get; set; } 13 | public string Description { get; set; } 14 | public string Badge { get; set; } 15 | } -------------------------------------------------------------------------------- /HabboHotel/Quests/IQuestManager.cs: -------------------------------------------------------------------------------- 1 | using Plus.Communication.Packets.Incoming; 2 | using Plus.HabboHotel.GameClients; 3 | 4 | namespace Plus.HabboHotel.Quests; 5 | 6 | public interface IQuestManager 7 | { 8 | void Init(); 9 | Quest GetQuest(int id); 10 | int GetAmountOfQuestsInCategory(string category); 11 | void ProgressUserQuest(GameClient session, QuestType type, int data = 0); 12 | Quest GetNextQuestInSeries(string category, int number); 13 | void GetList(GameClient session, ClientPacket message); 14 | void QuestReminder(GameClient session, int questId); 15 | } -------------------------------------------------------------------------------- /HabboHotel/Rewards/IRewardManager.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.HabboHotel.Rewards; 4 | 5 | public interface IRewardManager 6 | { 7 | void Init(); 8 | Task CheckRewards(GameClient session); 9 | } -------------------------------------------------------------------------------- /HabboHotel/Rewards/RewardType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rewards; 2 | 3 | public enum RewardType 4 | { 5 | Badge, 6 | Credits, 7 | Duckets, 8 | Diamonds, 9 | None 10 | } -------------------------------------------------------------------------------- /HabboHotel/Rewards/RewardTypeUtility.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rewards; 2 | 3 | public static class RewardTypeUtility 4 | { 5 | public static RewardType GetType(string type) 6 | { 7 | switch (type.ToLower()) 8 | { 9 | case "badge": 10 | return RewardType.Badge; 11 | case "credits": 12 | return RewardType.Credits; 13 | case "duckets": 14 | return RewardType.Duckets; 15 | case "diamonds": 16 | return RewardType.Diamonds; 17 | default: 18 | case "none": 19 | return RewardType.None; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/AI/BotAIType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.AI; 2 | 3 | public enum BotAiType 4 | { 5 | Pet, 6 | Generic, 7 | Bartender 8 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/AI/PetDatabaseUpdateState.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.AI; 2 | 3 | public enum PetDatabaseUpdateState 4 | { 5 | Updated, 6 | NeedsUpdate, 7 | NeedsInsert 8 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/AI/Speech/RandomSpeech.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.AI.Speech; 2 | 3 | public class RandomSpeech 4 | { 5 | public int BotId; 6 | public string Message; 7 | 8 | public RandomSpeech(string message, int botId) 9 | { 10 | BotId = botId; 11 | Message = message; 12 | } 13 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Commands/IChatCommand.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.HabboHotel.Rooms.Chat.Commands; 4 | 5 | public interface IChatCommand : ICommandBase 6 | { 7 | void Execute(GameClient session, Room room, string[] parameters); 8 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Commands/ICommandBase.cs: -------------------------------------------------------------------------------- 1 | using Plus.Utilities.DependencyInjection; 2 | 3 | namespace Plus.HabboHotel.Rooms.Chat.Commands; 4 | 5 | [Singleton] 6 | public interface ICommandBase 7 | { 8 | string Key { get; } 9 | string PermissionRequired { get; } 10 | string Parameters { get; } 11 | string Description { get; } 12 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Emotions/ChatEmotions.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Chat.Emotions; 2 | 3 | public enum ChatEmotions 4 | { 5 | Smile, 6 | Angry, 7 | Sad, 8 | Shocked, 9 | None 10 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Emotions/IChatEmotionsManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Chat.Emotions; 2 | 3 | public interface IChatEmotionsManager 4 | { 5 | /// 6 | /// Searches the provided text for any emotions that need to be applied and returns the packet number. 7 | /// 8 | /// The text to search through 9 | /// 10 | int GetEmotionsForText(string text); 11 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Filter/IWordFilterManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Chat.Filter; 2 | 3 | public interface IWordFilterManager 4 | { 5 | void Init(); 6 | string CheckMessage(string message); 7 | bool CheckBannedWords(string message); 8 | bool IsFiltered(string message); 9 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Filter/WordFilter.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Chat.Filter; 2 | 3 | internal sealed class WordFilter 4 | { 5 | public WordFilter(string word, string replacement, bool strict, bool bannable) 6 | { 7 | Word = word; 8 | Replacement = replacement; 9 | IsStrict = strict; 10 | IsBannable = bannable; 11 | } 12 | 13 | public string Word { get; } 14 | 15 | public string Replacement { get; } 16 | 17 | public bool IsStrict { get; } 18 | 19 | public bool IsBannable { get; } 20 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Logs/IChatlogManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Chat.Logs; 2 | 3 | public interface IChatlogManager 4 | { 5 | void StoreChatlog(ChatlogEntry entry); 6 | void FlushAndSave(); 7 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Pets/Commands/IPetCommandManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Chat.Pets.Commands; 2 | 3 | public interface IPetCommandManager 4 | { 5 | void Init(); 6 | int TryInvoke(string input); 7 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Pets/Commands/PetCommand.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Chat.Pets.Commands; 2 | 3 | public class PetCommand 4 | { 5 | public int Id; 6 | public string Input; 7 | 8 | public PetCommand(int commandId, string commandInput) 9 | { 10 | Id = commandId; 11 | Input = commandInput; 12 | } 13 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Pets/Locale/IPetLocale.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Chat.Pets.Locale; 2 | 3 | public interface IPetLocale 4 | { 5 | void Init(); 6 | string[] GetValue(string key); 7 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Styles/ChatStyle.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Chat.Styles; 2 | 3 | public sealed class ChatStyle 4 | { 5 | public ChatStyle(int id, string name, string requiredRight) 6 | { 7 | Id = id; 8 | Name = name; 9 | RequiredRight = requiredRight; 10 | } 11 | 12 | public int Id { get; set; } 13 | 14 | public string Name { get; set; } 15 | 16 | public string RequiredRight { get; set; } 17 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Chat/Styles/IChatStyleManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Chat.Styles; 2 | 3 | public interface IChatStyleManager 4 | { 5 | void Init(); 6 | bool TryGetStyle(int id, out ChatStyle style); 7 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Games/Freeze/FreezePowerUp.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Games.Freeze; 2 | 3 | public enum FreezePowerUp 4 | { 5 | None = 0, 6 | BlueArrow = 1, 7 | GreenArrow = 2, 8 | Shield = 3, 9 | Heart = 4, 10 | OrangeSnowball = 5, 11 | Snowballs = 6 12 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Games/Teams/Team.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.Games.Teams; 2 | 3 | public enum Team 4 | { 5 | None = 0, 6 | Red = 1, 7 | Green = 2, 8 | Blue = 3, 9 | Yellow = 4 10 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/ItemEffectType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms; 2 | 3 | public enum ItemEffectType 4 | { 5 | None, 6 | Swim, 7 | SwimLow, 8 | SwimHalloween, 9 | Iceskates, 10 | Normalskates 11 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/PathFinding/Vector3D.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms.PathFinding; 2 | 3 | internal sealed class Vector3D 4 | { 5 | public Vector3D() { } 6 | 7 | public Vector3D(int x, int y, double z) 8 | { 9 | X = x; 10 | Y = y; 11 | Z = z; 12 | } 13 | 14 | public int X { get; set; } 15 | 16 | public int Y { get; set; } 17 | 18 | public double Z { get; set; } 19 | 20 | public Vector2D ToVector2D() => new(X, Y); 21 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/RoomAccess.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms; 2 | 3 | public enum RoomAccess 4 | { 5 | Open, 6 | Doorbell, 7 | Password, 8 | Invisible 9 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/SquareState.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Rooms; 2 | 3 | public enum SquareState 4 | { 5 | Open = 0, 6 | Blocked = 1, 7 | Seat = 2, 8 | Pool = 3, 9 | Vip = 4 10 | } -------------------------------------------------------------------------------- /HabboHotel/Rooms/Trading/TradeUser.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Users.Inventory.Furniture; 2 | 3 | namespace Plus.HabboHotel.Rooms.Trading; 4 | 5 | public sealed class TradeUser 6 | { 7 | public TradeUser(RoomUser user) 8 | { 9 | RoomUser = user; 10 | HasAccepted = false; 11 | OfferedItems = new(); 12 | } 13 | 14 | public RoomUser RoomUser { get; } 15 | 16 | public bool HasAccepted { get; set; } 17 | 18 | public Dictionary OfferedItems { get; set; } 19 | } -------------------------------------------------------------------------------- /HabboHotel/Subscriptions/ISubscriptionManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Subscriptions; 2 | 3 | public interface ISubscriptionManager 4 | { 5 | void Init(); 6 | bool TryGetSubscriptionData(int id, out SubscriptionData data); 7 | } -------------------------------------------------------------------------------- /HabboHotel/Subscriptions/SubscriptionData.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Subscriptions; 2 | 3 | public class SubscriptionData 4 | { 5 | public SubscriptionData(int id, string name, string badge, int credits, int duckets, int respects) 6 | { 7 | Id = id; 8 | Name = name; 9 | Badge = badge; 10 | Credits = credits; 11 | Duckets = duckets; 12 | Respects = respects; 13 | } 14 | 15 | public int Id { get; } 16 | public string Name { get; } 17 | public string Badge { get; } 18 | public int Credits { get; } 19 | public int Duckets { get; } 20 | public int Respects { get; } 21 | } -------------------------------------------------------------------------------- /HabboHotel/Talents/ITalentTrackManager.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Talents; 2 | 3 | public interface ITalentTrackManager 4 | { 5 | void Init(); 6 | ICollection GetLevels(); 7 | } -------------------------------------------------------------------------------- /HabboHotel/Talents/TalentTrackSubLevel.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Talents; 2 | 3 | public class TalentTrackSubLevel 4 | { 5 | public TalentTrackSubLevel(int level, string badge, int requiredProgress) 6 | { 7 | Level = level; 8 | Badge = badge; 9 | RequiredProgress = requiredProgress; 10 | } 11 | 12 | public int Level { get; set; } 13 | public string Badge { get; set; } 14 | public int RequiredProgress { get; set; } 15 | } -------------------------------------------------------------------------------- /HabboHotel/Talents/TalentType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Talents; 2 | 3 | public enum TalentType 4 | { 5 | Helper, 6 | Citizenship 7 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Authentication/AuthenticationError.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Authentication; 2 | 3 | public enum AuthenticationError 4 | { 5 | EmptySSO, 6 | InvalidSSO, 7 | NoAccountFound, 8 | LoginProhibited 9 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Authentication/HabboEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Authentication; 2 | 3 | public class HabboEventArgs : EventArgs 4 | { 5 | public Habbo Habbo { get; } 6 | 7 | public HabboEventArgs(Habbo habbo) 8 | { 9 | Habbo = habbo; 10 | } 11 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Authentication/IAuthenticator.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.HabboHotel.Users.Authentication; 4 | 5 | public interface IAuthenticator 6 | { 7 | /// 8 | /// Authenticate a by SSO ticket. 9 | /// 10 | /// 11 | /// 12 | /// 13 | Task AuthenticateUsingSSO(GameClient session, string sso); 14 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Authentication/IncorrectLoginException.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Authentication; 2 | 3 | [Serializable] 4 | public class IncorrectLoginException : Exception 5 | { 6 | public IncorrectLoginException(string reason) : base(reason) { } 7 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Authentication/Tasks/DisconnectCurrentOnlineHabboTask.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.GameClients; 2 | 3 | namespace Plus.HabboHotel.Users.Authentication.Tasks; 4 | 5 | public class DisconnectCurrentOnlineHabboTask : IAuthenticationTask 6 | { 7 | private readonly IGameClientManager _gameClientManager; 8 | 9 | public DisconnectCurrentOnlineHabboTask(IGameClientManager gameClientManager) 10 | { 11 | _gameClientManager = gameClientManager; 12 | } 13 | 14 | public Task CanLogin(int userId) 15 | { 16 | var existingSession = _gameClientManager.GetClientByUserId(userId); 17 | existingSession?.Disconnect(); 18 | return Task.FromResult(true); 19 | } 20 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Badges/Badge.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Badges; 2 | 3 | public class Badge 4 | { 5 | public string Code; 6 | public int Slot; 7 | 8 | public Badge(string code, int slot) 9 | { 10 | Code = code; 11 | Slot = slot; 12 | } 13 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Clothing/Parts/ClothingParts.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Clothing.Parts; 2 | 3 | public sealed class ClothingParts 4 | { 5 | public ClothingParts(int id, int partId, string part) 6 | { 7 | Id = id; 8 | PartId = partId; 9 | Part = part; 10 | } 11 | 12 | public int Id { get; set; } 13 | 14 | public int PartId { get; set; } 15 | 16 | public string Part { get; set; } 17 | } -------------------------------------------------------------------------------- /HabboHotel/Users/IHabboStatsService.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users; 2 | 3 | public interface IHabboStatsService 4 | { 5 | Task LoadHabboStats(int userId); 6 | Task UpdateDailyRespectsAndTimestamp(int userId, int dailyRespects, string respectsTimestamp); 7 | } 8 | -------------------------------------------------------------------------------- /HabboHotel/Users/Ignores/IIgnoredUsersService.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Ignores; 2 | 3 | public interface IIgnoredUsersService 4 | { 5 | Task> GetIgnoredUsersByName(IReadOnlyCollection userIds); 6 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Ignores/IgnoreStatusUpdatedEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Ignores; 2 | 3 | public class IgnoreStatusUpdatedEventArgs : EventArgs 4 | { 5 | public IgnoreStatusUpdatedEventArgs(int userId) 6 | { 7 | UserId = userId; 8 | } 9 | public int UserId { get; } 10 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Ignores/IgnoredUsersService.cs: -------------------------------------------------------------------------------- 1 | using Dapper; 2 | using Plus.Database; 3 | 4 | namespace Plus.HabboHotel.Users.Ignores; 5 | 6 | internal class IgnoredUsersService : IIgnoredUsersService 7 | { 8 | private readonly IDatabase _database; 9 | 10 | public IgnoredUsersService(IDatabase database) 11 | { 12 | _database = database; 13 | } 14 | 15 | public async Task> GetIgnoredUsersByName(IReadOnlyCollection userIds) 16 | { 17 | if (!userIds.Any()) return new(); 18 | using var connection = _database.Connection(); 19 | return (await connection.QueryAsync("SELECT username FROM users WHERE id in @userIds", new { userIds })).ToList(); 20 | } 21 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Inventory/Bots/Bot.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Inventory.Bots; 2 | 3 | public class Bot 4 | { 5 | public Bot(int id, int ownerId, string name, string motto, string figure, string gender) 6 | { 7 | Id = id; 8 | OwnerId = ownerId; 9 | Name = name; 10 | Motto = motto; 11 | Figure = figure; 12 | Gender = gender; 13 | } 14 | 15 | public int Id { get; set; } 16 | 17 | public int OwnerId { get; set; } 18 | 19 | public string Name { get; set; } 20 | 21 | public string Motto { get; set; } 22 | 23 | public string Figure { get; set; } 24 | 25 | public string Gender { get; set; } 26 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Inventory/Bots/BotInventoryComponent.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Concurrent; 2 | 3 | namespace Plus.HabboHotel.Users.Inventory.Bots; 4 | 5 | public class BotInventoryComponent 6 | { 7 | private ConcurrentDictionary _bots; 8 | 9 | public IReadOnlyDictionary Bots => _bots; 10 | 11 | public BotInventoryComponent(List bots) 12 | { 13 | _bots = new(bots.ToDictionary(bot => bot.Id)); 14 | } 15 | 16 | public bool AddBot(Bot bot) => _bots.TryAdd(bot.Id, bot); 17 | 18 | public bool RemoveBot(int botId) => _bots.TryRemove(botId, out _); 19 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Inventory/Bots/IBotLoader.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Inventory.Bots; 2 | 3 | internal interface IBotLoader 4 | { 5 | List GetBotsForUser(int userId); 6 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Inventory/InventoryComponent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Users.Inventory.Badges; 2 | using Plus.HabboHotel.Users.Inventory.Bots; 3 | using Plus.HabboHotel.Users.Inventory.Furniture; 4 | using Plus.HabboHotel.Users.Inventory.Pets; 5 | 6 | namespace Plus.HabboHotel.Users.Inventory; 7 | 8 | public class InventoryComponent 9 | { 10 | public BadgesInventoryComponent Badges { get; init; } 11 | public FurnitureInventoryComponent Furniture { get; init; } 12 | public PetsInventoryComponent Pets { get; init; } 13 | public BotInventoryComponent Bots { get; init; } 14 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Inventory/Pets/IPetLoader.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Rooms.AI; 2 | 3 | namespace Plus.HabboHotel.Users.Inventory.Pets; 4 | 5 | internal interface IPetLoader 6 | { 7 | List GetPetsForUser(int userId); 8 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Inventory/Pets/PetsInventoryComponent.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Rooms.AI; 2 | using System.Collections.Concurrent; 3 | 4 | namespace Plus.HabboHotel.Users.Inventory.Pets; 5 | 6 | public class PetsInventoryComponent 7 | { 8 | private ConcurrentDictionary _pets; 9 | 10 | public IReadOnlyDictionary Pets => _pets; 11 | 12 | public PetsInventoryComponent(List pets) 13 | { 14 | _pets = new(pets.ToDictionary(pet => pet.PetId)); 15 | } 16 | 17 | public bool AddPet(Pet pet) => _pets.TryAdd(pet.PetId, pet); 18 | 19 | public bool RemovePet(int petId) => _pets.TryRemove(petId, out _); 20 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/BuddyModificationType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public enum BuddyModificationType 4 | { 5 | Added = 1, 6 | Updated = 0, 7 | Removed = -1 8 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/FriendBar/FriendBarState.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger.FriendBar; 2 | 3 | public enum FriendBarState 4 | { 5 | Open, 6 | Closed 7 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/FriendRequestError.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public enum FriendRequestError 4 | { 5 | NoFriendRequest, 6 | AlreadyOutstandingFriendRequest 7 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/FriendRequestModificationType.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public enum FriendRequestModificationType 4 | { 5 | Received, 6 | Sent, 7 | Accepted, 8 | Declined 9 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/FriendRequestModifiedEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public class FriendRequestModifiedEventArgs : EventArgs 4 | { 5 | public FriendRequestModificationType FriendRequestModificationType { get; } 6 | public MessengerRequest Request { get; } 7 | 8 | public FriendRequestModifiedEventArgs(FriendRequestModificationType friendRequestModificationType, MessengerRequest request) 9 | { 10 | FriendRequestModificationType = friendRequestModificationType; 11 | Request = request; 12 | } 13 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/FriendStatusUpdatedEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public class FriendStatusUpdatedEventArgs : EventArgs 4 | { 5 | public MessengerBuddy Friend { get; } 6 | public MessengerEventTypes EventType { get; } 7 | public string Value { get; } 8 | 9 | public FriendStatusUpdatedEventArgs(MessengerBuddy friend, MessengerEventTypes eventType, string value) 10 | { 11 | Friend = friend; 12 | EventType = eventType; 13 | Value = value; 14 | } 15 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/ISearchResultFactory.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public interface ISearchResultFactory 4 | { 5 | List GetSearchResult(string query); 6 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/MessageError.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public enum MessageError 4 | { 5 | NotAFriend, 6 | EmptyMessage, 7 | Flooding 8 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/MessengerBuddiesModifiedEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public class MessengerBuddiesModifiedEventArgs : EventArgs 4 | { 5 | public Dictionary Changes { get; } 6 | public MessengerBuddiesModifiedEventArgs(Dictionary changes) 7 | { 8 | Changes = changes; 9 | } 10 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/MessengerBuddyModifiedEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public class MessengerBuddyModifiedEventArgs : EventArgs 4 | { 5 | public BuddyModificationType BuddyModificationType { get; } 6 | public MessengerBuddy Buddy { get; } 7 | 8 | public MessengerBuddyModifiedEventArgs(BuddyModificationType buddyModificationType, MessengerBuddy buddy) 9 | { 10 | BuddyModificationType = buddyModificationType; 11 | Buddy = buddy; 12 | } 13 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/MessengerEventTypes.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public enum MessengerEventTypes 4 | { 5 | EventStarted, 6 | AchievementUnlocked, 7 | QuestCompleted, 8 | PlayingGame, 9 | FinishedGame, 10 | GameInvite 11 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/MessengerMessageErrors.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public enum MessengerMessageErrors 4 | { 5 | FriendMuted, 6 | YourMuted, 7 | FriendOffline, 8 | NotFriends, 9 | FriendBusy, 10 | OfflineFailed 11 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/MessengerMessageEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public class MessengerMessageEventArgs : EventArgs 4 | { 5 | public MessengerBuddy Friend { get; } 6 | public string Message { get; } 7 | 8 | public MessengerMessageEventArgs(MessengerBuddy friend, string message) 9 | { 10 | Friend = friend; 11 | Message = message; 12 | } 13 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/MessengerRequest.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public class MessengerRequest 4 | { 5 | public int ToId { get; set; } 6 | 7 | public int FromId { get; set; } 8 | public string Username { get; set; } = string.Empty; 9 | public string Figure { get; set; } = string.Empty; 10 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Messenger/SearchResult.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Messenger; 2 | 3 | public struct SearchResult 4 | { 5 | public int UserId; 6 | public string Username; 7 | public string Motto; 8 | public string Figure; 9 | public string LastOnline; 10 | 11 | public SearchResult(int userId, string username, string motto, string figure, string lastOnline) 12 | { 13 | UserId = userId; 14 | Username = username; 15 | Motto = motto; 16 | Figure = figure; 17 | LastOnline = lastOnline; 18 | } 19 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Navigator/LoadUserNavigatorPreferencesTask.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Navigator; 2 | using Plus.HabboHotel.Users.UserData; 3 | 4 | namespace Plus.HabboHotel.Users.Navigator; 5 | 6 | internal class LoadUserNavigatorPreferencesTask : IUserDataLoadingTask 7 | { 8 | private readonly INavigatorManager _navigatorManager; 9 | 10 | public LoadUserNavigatorPreferencesTask(INavigatorManager navigatorManager) 11 | { 12 | _navigatorManager = navigatorManager; 13 | } 14 | 15 | public async Task Load(Habbo habbo) => habbo.NavigatorPreferences = new(new(await _navigatorManager.LoadUserNavigatorPreferences(habbo.Id))); 16 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Navigator/NavigatorPreferences.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Users.Navigator.SavedSearches; 2 | using System.Collections.Concurrent; 3 | 4 | namespace Plus.HabboHotel.Users.Navigator; 5 | 6 | public class NavigatorPreferences 7 | { 8 | 9 | private readonly ConcurrentDictionary _savedSearches; 10 | 11 | public NavigatorPreferences(ConcurrentDictionary savedSearches) 12 | { 13 | _savedSearches = savedSearches; 14 | } 15 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Navigator/SavedSearches/SavedSearch.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.HabboHotel.Users.Navigator.SavedSearches; 2 | 3 | public class SavedSearch 4 | { 5 | public SavedSearch(int id, string filter, string search) 6 | { 7 | Id = id; 8 | Filter = filter; 9 | Search = search; 10 | } 11 | 12 | public int Id { get; set; } 13 | 14 | public string Filter { get; set; } 15 | 16 | public string Search { get; set; } 17 | } -------------------------------------------------------------------------------- /HabboHotel/Users/Permissions/LoadUserPermissionsTask.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Permissions; 2 | using Plus.HabboHotel.Users.UserData; 3 | 4 | namespace Plus.HabboHotel.Users.Permissions; 5 | 6 | internal class LoadUserPermissionsTask : IUserDataLoadingTask 7 | { 8 | private readonly IPermissionManager _permissionManager; 9 | 10 | public LoadUserPermissionsTask(IPermissionManager permissionManager) 11 | { 12 | _permissionManager = permissionManager; 13 | } 14 | 15 | public Task Load(Habbo habbo) 16 | { 17 | habbo.Permissions = new(_permissionManager.GetPermissionsForPlayer(habbo), _permissionManager.GetCommandsForPlayer(habbo)); 18 | return Task.CompletedTask; 19 | } 20 | } -------------------------------------------------------------------------------- /HabboHotel/Users/UserData/IUserDataFactory.cs: -------------------------------------------------------------------------------- 1 | using Plus.HabboHotel.Users.Badges; 2 | 3 | namespace Plus.HabboHotel.Users.UserData; 4 | 5 | public interface IUserDataFactory 6 | { 7 | Task Create(int userId); 8 | Task GetUsernameForHabboById(int userId); 9 | Task HabboExists(int userId); 10 | Task HabboExists(string username); 11 | Task GetUserDataByIdAsync(int userId); 12 | Task> GetEquippedBadgesForUserAsync(int userId); 13 | } 14 | -------------------------------------------------------------------------------- /HabboHotel/Users/UserData/IUserDataLoadingTask.cs: -------------------------------------------------------------------------------- 1 | using Plus.Utilities.DependencyInjection; 2 | 3 | namespace Plus.HabboHotel.Users.UserData; 4 | 5 | [Singleton] 6 | public interface IUserDataLoadingTask 7 | { 8 | /// 9 | /// Decorate the Habbo object. 10 | /// UserId as well as username is guaranteed to be set. 11 | /// 12 | /// 13 | /// 14 | Task Load(Habbo habbo); 15 | } -------------------------------------------------------------------------------- /IPlusEnvironment.cs: -------------------------------------------------------------------------------- 1 | namespace Plus; 2 | 3 | public interface IPlusEnvironment 4 | { 5 | Task Start(); 6 | } -------------------------------------------------------------------------------- /PluginExample/PluginExample.cs: -------------------------------------------------------------------------------- 1 | using Plus.Plugins; 2 | 3 | namespace PluginExample; 4 | 5 | public class PluginExample : IPlugin 6 | { 7 | public void Start() 8 | { 9 | Console.WriteLine("This plugin has been started :)"); 10 | } 11 | } -------------------------------------------------------------------------------- /PluginExample/PluginExample.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net7.0 5 | enable 6 | enable 7 | 8 | 9 | 10 | 11 | $(PLUS_EMULATOR_HOME)\Plus Emulator.dll 12 | false 13 | all 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /PluginExample/PluginExampleDefinition.cs: -------------------------------------------------------------------------------- 1 | using Plus.Plugins; 2 | 3 | namespace PluginExample; 4 | 5 | public class PluginExampleDefinition : IPluginDefinition 6 | { 7 | public string Name => "Example Plugin"; 8 | public string Author => "The General"; 9 | public Version Version => new(1, 0, 0); 10 | public Type PluginClass => typeof(PluginExample); 11 | } -------------------------------------------------------------------------------- /Plugins/IPlugin.cs: -------------------------------------------------------------------------------- 1 | using Plus.Utilities.DependencyInjection; 2 | 3 | namespace Plus.Plugins; 4 | 5 | [Singleton] 6 | public interface IPlugin 7 | { 8 | void Start(); 9 | } -------------------------------------------------------------------------------- /Plugins/IPluginDefinition.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.DependencyInjection; 2 | 3 | namespace Plus.Plugins; 4 | 5 | public interface IPluginDefinition 6 | { 7 | string Name { get; } 8 | string Author { get; } 9 | Version Version { get; } 10 | 11 | void ConfigureServices(IServiceCollection serviceCollection) { } 12 | void OnServicesConfigured() { } 13 | void OnServiceProviderBuild(IServiceProvider serviceProvider) { } 14 | 15 | Type PluginClass { get; } 16 | } -------------------------------------------------------------------------------- /Plugins/IPluginsCache.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Plugins; 2 | 3 | public interface IPluginsCache 4 | { 5 | 6 | } -------------------------------------------------------------------------------- /Plugins/PluginsCache.cs: -------------------------------------------------------------------------------- 1 | using Plus.Core; 2 | 3 | namespace Plus.Plugins; 4 | 5 | public class PluginsCache : IPluginsCache, IStartable 6 | { 7 | public IReadOnlyDictionary Plugins => _plugins; 8 | private readonly Dictionary _plugins; 9 | public PluginsCache(IEnumerable pluginDefinitions, IEnumerable plugins) 10 | { 11 | _plugins = pluginDefinitions.ToDictionary(kvp => kvp, kvp => plugins.First(p => p.GetType() == kvp.PluginClass)); 12 | } 13 | 14 | public Task Start() 15 | { 16 | foreach (var (_, plugin) in _plugins) 17 | Task.Run(plugin.Start); 18 | return Task.CompletedTask; 19 | } 20 | } -------------------------------------------------------------------------------- /Plus Emulator.sln.DotSettings: -------------------------------------------------------------------------------- 1 |  2 | True -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PlusEMU++ 2 | Community continuation of PlusEMU By Sledmore (et al) 3 | 4 | Focus is mostly on improving the code quality & emulator architecture so that implemented new features will be easy. 5 | 6 | Want to join the discussion? Head over to http://arcturus.pw 7 | -------------------------------------------------------------------------------- /Resources/README.txt: -------------------------------------------------------------------------------- 1 | Hi, 2 | 3 | Before running all of the SQLs, please make sure you read this. 4 | 5 | SQLs.sql 6 | - The first two queries may error, if they do just delete those and run the rest. Be warned that this query will drop your 'server_locale' and 'server_settings' table and replace them with the new data. 7 | 8 | Behaviour Changes.sql 9 | - If you're running the database from the first release, you should be fine to run this! This will update your exchangeable items to a new interaction type and give them a behaviour data. It will also do the same for pets. 10 | - If you're running a different database, make sure that these IDs match, or make the changes to the furni manually. 11 | 12 | -------------------------------------------------------------------------------- /Resources/RELEASE NOTES.txt: -------------------------------------------------------------------------------- 1 | Thanks for downloading PlusEMU. 2 | 3 | If you're starting a hotel from scratch please run 'Original Database', no other SQL files are needed to be ran. 4 | 5 | For other downloads you can visit our website at https://projectplus.io/ alternatively visit https://devbest.com 6 | 7 | - For future releases please visit https://devbest.com/threads/81595/ 8 | - To follow the development please visit https://devbest.com/threads/81566/ 9 | - For help and support please visit https://devbest.com/threads/81596/ -------------------------------------------------------------------------------- /Resources/SQLs/Updates/11_ChangeCatalogPagesEnumToBit.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `catalog_pages` DROP `visible`; 2 | ALTER TABLE `catalog_pages` ADD `visible` bit(1) NOT NULL DEFAULT b'1'; 3 | ALTER TABLE `catalog_pages` DROP `enabled`; 4 | ALTER TABLE `catalog_pages` ADD `enabled` bit(1) NOT NULL DEFAULT b'1'; -------------------------------------------------------------------------------- /Resources/SQLs/Updates/13_DeletePrimaryKeyAuthTicket.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `users` 2 | DROP PRIMARY KEY, 3 | ADD PRIMARY KEY (`id`) -------------------------------------------------------------------------------- /Resources/SQLs/Updates/1_UpdateRoomEntryTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `user_roomvisits` 2 | DROP COLUMN `minute`, 3 | DROP COLUMN `hour`; -------------------------------------------------------------------------------- /Resources/SQLs/Updates/2_AddMissingRoomColumns.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `rooms` 2 | ADD `sale_price` INT(5) NOT NULL DEFAULT '0' AFTER `spush_enabled`, 3 | ADD `lay_enabled` ENUM('0','1') NOT NULL DEFAULT '0' AFTER `sale_price`; -------------------------------------------------------------------------------- /Resources/SQLs/Updates/3_RefactorMessenger.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `messenger_friendships` DROP `id`; 2 | ALTER TABLE `messenger_friendships` ADD PRIMARY KEY(`user_one_id`, `user_two_id`); 3 | INSERT INTO `messenger_friendships` (`user_one_id`, `user_two_id`) SELECT `user_two_id`, `user_one_id` FROM `messenger_friendships`; 4 | ALTER TABLE `messenger_friendships` ADD `relationship` INT(1) NOT NULL DEFAULT '0' AFTER `user_two_id`; 5 | UPDATE `messenger_friendships` INNER JOIN `user_relationships` ON `messenger_friendships`.`user_one_id` = `user_relationships`.`user_id` AND `messenger_friendships`.`user_two_id` = `user_relationships`.`target` SET `messenger_friendships`.`relationship` = `type`; 6 | DROP TABLE ` user_relationships `; -------------------------------------------------------------------------------- /Resources/SQLs/Updates/4_IgnoredUsersTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `user_ignores` DROP `id`; 2 | ALTER TABLE `user_ignores` ADD PRIMARY KEY(`user_id`, `ignore_id`); -------------------------------------------------------------------------------- /Resources/SQLs/Updates/5_RenameUserStatsTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE user_stats 2 | RENAME TO user_statistics; -------------------------------------------------------------------------------- /Resources/SQLs/Updates/6_AddIsAmbassadorUsersColums.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `users` ADD `is_ambassador` BOOLEAN NOT NULL DEFAULT FALSE AFTER `allow_mimic`; -------------------------------------------------------------------------------- /Resources/SQLs/Updates/7_AddAmbassadorsLogs.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `ambassador_logs` ( 2 | `id` int(11) NOT NULL AUTO_INCREMENT, 3 | `user_id` int(11), 4 | `target` varchar(50) NOT NULL DEFAULT '', 5 | `sanctions_type` text NOT NULL, 6 | `timestamp` double NOT NULL DEFAULT '0', 7 | PRIMARY KEY (`id`), 8 | UNIQUE KEY `id` (`id`) USING BTREE 9 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -------------------------------------------------------------------------------- /Resources/SQLs/Updates/8_AddBubbleIDToUsersTable.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `users` ADD COLUMN `bubble_id` TINYINT NOT NULL DEFAULT '0' AFTER `is_ambassador`; -------------------------------------------------------------------------------- /Resources/SQLs/Updates/9_ChangeRoomDataToBooleans.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `rooms` CHANGE `allow_pets` `allow_pets` BOOLEAN NOT NULL DEFAULT FALSE, 2 | CHANGE `allow_pets_eat` `allow_pets_eat` BOOLEAN NOT NULL DEFAULT FALSE, 3 | CHANGE `room_blocking_disabled` `room_blocking_disabled` BOOLEAN NOT NULL DEFAULT FALSE, 4 | CHANGE `allow_hidewall` `allow_hidewall` BOOLEAN NOT NULL DEFAULT FALSE; -------------------------------------------------------------------------------- /Resources/libs/AStar.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/80O/PlusEMU/178de069f3732fb7ecb6bdbf41968701fbf228e5/Resources/libs/AStar.dll -------------------------------------------------------------------------------- /Resources/libs/HabboEncryption.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/80O/PlusEMU/178de069f3732fb7ecb6bdbf41968701fbf228e5/Resources/libs/HabboEncryption.dll -------------------------------------------------------------------------------- /Utilities/ConvertExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Utilities; 2 | 3 | public static class ConvertExtensions 4 | { 5 | public static string ToStringEnumValue(bool value) => value ? "1" : "0"; 6 | 7 | public static bool EnumToBool(string value) => value == "1"; 8 | 9 | public static int ToInt32(this bool value) => value ? 1 : 0; 10 | } -------------------------------------------------------------------------------- /Utilities/Converter.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Utilities; 2 | 3 | public static class Converter 4 | { 5 | public static string BytesToHexString(byte[] bytes) => BitConverter.ToString(bytes).Replace("-", string.Empty); 6 | 7 | public static byte[] HexStringToBytes(string characters) 8 | { 9 | var length = characters.Length; 10 | var bytes = new byte[length / 2]; 11 | for (var i = 0; i < length; i += 2) bytes[i / 2] = Convert.ToByte(characters.Substring(i, 2), 16); 12 | return bytes; 13 | } 14 | } -------------------------------------------------------------------------------- /Utilities/DependencyInjection/ScopedAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Utilities.DependencyInjection; 2 | 3 | public class ScopedAttribute : Attribute 4 | { 5 | } -------------------------------------------------------------------------------- /Utilities/DependencyInjection/SingletonAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Utilities.DependencyInjection; 2 | 3 | public class SingletonAttribute : Attribute 4 | { 5 | } -------------------------------------------------------------------------------- /Utilities/Enclosure/Algorithm/FieldUpdate.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Utilities.Enclosure.Algorithm; 2 | 3 | public class FieldUpdate 4 | { 5 | public FieldUpdate(int x, int y, byte value) 6 | { 7 | X = x; 8 | Y = y; 9 | Value = value; 10 | } 11 | 12 | public byte Value { get; } 13 | public int Y { get; } 14 | public int X { get; } 15 | } -------------------------------------------------------------------------------- /Utilities/Randomizer.cs: -------------------------------------------------------------------------------- 1 | namespace Plus.Utilities; 2 | 3 | public static class Randomizer 4 | { 5 | public static byte NextByte() => (byte)Random.Shared.Next(0, 255); 6 | 7 | public static byte NextByte(int max) 8 | { 9 | max = Math.Min(max, 255); 10 | return (byte)Random.Shared.Next(0, max); 11 | } 12 | 13 | public static byte NextByte(int min, int max) 14 | { 15 | max = Math.Min(max, 255); 16 | return (byte)Random.Shared.Next(Math.Min(min, max), max); 17 | } 18 | 19 | public static void NextBytes(byte[] toparse) => Random.Shared.NextBytes(toparse); 20 | } -------------------------------------------------------------------------------- /Utilities/TextHandling.cs: -------------------------------------------------------------------------------- 1 | using System.Globalization; 2 | 3 | namespace Plus.Utilities; 4 | 5 | public static class TextHandling 6 | { 7 | public static string GetString(double k) => k.ToString(CultureInfo.InvariantCulture); 8 | } -------------------------------------------------------------------------------- /icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/80O/PlusEMU/178de069f3732fb7ecb6bdbf41968701fbf228e5/icon.ico --------------------------------------------------------------------------------