├── .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
--------------------------------------------------------------------------------