╔═══════════════════════════════════════════════════════════════════════════╗ ║ ║ ║ ███████╗███╗ ███╗ █████╗ ██████╗ ████████╗ ║ ║ ██╔════╝████╗ ████║██╔══██╗██╔══██╗╚══██╔══╝ ║ ║ █████╗ ██╔████╔██║███████║██████╔╝ ██║ ║ ║ ██╔══╝ ██║╚██╔╝██║██╔══██║██╔══██╗ ██║ ║ ║ ███████╗██║ ╚═╝ ██║██║ ██║██║ ██║ ██║ ║ ║ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ║ ║ ║ ╠═══════════════════════════════════════════════════════════════════════════╣ ║  Emulator / Nitro-V3 / Nitro-V3-Render ║ ║  Updater by Remco — epicnabbo.nl ║ ╠═══════════════════════════════════════════════════════════════════════════╣ ║ Branch: main (2 detected) │ 14:47 ║ ╚═══════════════════════════════════════════════════════════════════════════╝   UPDATE  1) 🚀 Quick Update — branch: main 2) ⚡ Full Update (choose branch) 3) ⚙ Emulator Only 4) ⚙ Nitro-V3 Client Only 5) ⚙ Renderer Only 6) ⚙ Configs Only  TOOLS  7) 🔀 Switch Branch 8) 🗄 Database 9) 🛡 Backup / Restore 10) 🔧 Services 11) 📊 Status 12) ♥ Health Check 13) 🧹 Clean 14) 👁 Logs 15) ⚙ Config  ADVANCED  16) 🖥 Git Log 17) 🌐 Compare Branches 18) ⏱ Cron Scheduler 0) Exit Select [0-18]: Update: Full 1) Dev 2) main (current) 3) Custom Branch [1-3]: Branch: main Mode: Full ➜ Start update? [Y/n] ➜ Site: https://epicnabbo.nl | Branch: main | Mode: full [2026-07-07 14:48:01] [INFO] Site: https://epicnabbo.nl | Branch: main | Mode: full ➜ Log: /var/www/atom-nexst/storage/logs/update-20260707-144745.log [2026-07-07 14:48:01] [INFO] Log: /var/www/atom-nexst/storage/logs/update-20260707-144745.log  Step 1/8 — System Diagnostics  ✔ All commands available [2026-07-07 14:48:01] [OK] All commands available ✔ All directories exist [2026-07-07 14:48:01] [OK] All directories exist ✔ 126GB disk available [2026-07-07 14:48:01] [OK] 126GB disk available ✔ Database connected [2026-07-07 14:48:01] [OK] Database connected  Step 2/8 — Update & Build Emulator  No local changes to save Your branch is up to date with 'origin/main'. Updating 4bdf3de6..1a05d0ed Fast-forward .github/dependabot.yml | 20 ++ .github/workflows/build-release.yml | 6 +- .github/workflows/ci.yml | 31 ++ .gitlab-ci.yml | 4 +- .../015_wired_furni_enable_registered.sql | 40 +++ Database Updates/016_wired_phase1_furni.sql | 34 ++ Database Updates/017_wired_chest_currency.sql | 28 ++ Database Updates/018_wired_chest_furni.sql | 30 ++ .../019_wired_transactions_scanner.sql | 28 ++ Database Updates/020_wired_place_remove_furni.sql | 16 + Database Updates/021_wired_contracts.sql | 24 ++ Database Updates/022_wired_quests.sql | 16 + Database Updates/023_fill_room_207_wiredlab.sql | 52 +++ Emulator/pom.xml | 89 +++-- Emulator/src/main/java/com/eu/habbo/Emulator.java | 54 +-- .../com/eu/habbo/core/ConfigurationManager.java | 7 +- .../main/java/com/eu/habbo/core/TextsManager.java | 2 +- .../habbo/core/consolecommands/ConsoleCommand.java | 8 +- .../main/java/com/eu/habbo/database/Database.java | 8 - .../habbo/habbohotel/achievements/Achievement.java | 8 +- .../achievements/AchievementManager.java | 27 +- .../habbohotel/achievements/TalentTrackLevel.java | 17 +- .../com/eu/habbo/habbohotel/bots/BotManager.java | 8 +- .../com/eu/habbo/habbohotel/bots/ButlerBot.java | 11 +- .../com/eu/habbo/habbohotel/bots/VisitorBot.java | 5 +- .../campaign/calendar/CalendarCampaign.java | 5 +- .../campaign/calendar/CalendarManager.java | 5 +- .../eu/habbo/habbohotel/catalog/CatalogItem.java | 14 +- .../habbo/habbohotel/catalog/CatalogManager.java | 175 +++++---- .../eu/habbo/habbohotel/catalog/CatalogPage.java | 24 +- .../catalog/layouts/FrontPageFeaturedLayout.java | 4 +- .../catalog/layouts/RoomBundleLayout.java | 29 +- .../catalog/marketplace/MarketPlace.java | 9 +- .../eu/habbo/habbohotel/commands/BotsCommand.java | 2 +- .../habbo/habbohotel/commands/CommandHandler.java | 23 +- .../commands/EmptyBotsInventoryCommand.java | 14 +- .../habbohotel/commands/EmptyInventoryCommand.java | 10 +- .../commands/EmptyPetsInventoryCommand.java | 14 +- .../eu/habbo/habbohotel/commands/EventCommand.java | 4 +- .../eu/habbo/habbohotel/commands/GiftCommand.java | 6 +- .../habbohotel/commands/MassBadgeCommand.java | 4 +- .../habbo/habbohotel/commands/MassGiftCommand.java | 4 +- .../habbo/habbohotel/commands/PetInfoCommand.java | 44 +-- .../commands/PromoteTargetOfferCommand.java | 6 +- .../habbo/habbohotel/commands/RedeemCommand.java | 31 +- .../habbohotel/commands/RoomBadgeCommand.java | 6 +- .../habbo/habbohotel/commands/UserInfoCommand.java | 14 +- .../habbo/habbohotel/crafting/CraftingAltar.java | 17 +- .../habbo/habbohotel/crafting/CraftingManager.java | 23 +- .../habbo/habbohotel/crafting/CraftingRecipe.java | 11 +- .../java/com/eu/habbo/habbohotel/games/Game.java | 8 +- .../com/eu/habbo/habbohotel/games/GameTeam.java | 10 +- .../games/battlebanzai/BattleBanzaiGame.java | 28 +- .../habbo/habbohotel/games/freeze/FreezeGame.java | 31 +- .../com/eu/habbo/habbohotel/games/tag/TagGame.java | 18 +- .../eu/habbo/habbohotel/guides/GuardianTicket.java | 6 +- .../eu/habbo/habbohotel/guides/GuideManager.java | 37 +- .../com/eu/habbo/habbohotel/guides/GuideTour.java | 8 +- .../eu/habbo/habbohotel/guilds/GuildManager.java | 66 ++-- .../habbohotel/guilds/forums/ForumThread.java | 26 +- .../guilds/forums/ForumThreadComment.java | 5 +- .../eu/habbo/habbohotel/hotelview/HallOfFame.java | 7 +- .../java/com/eu/habbo/habbohotel/items/Item.java | 10 +- .../com/eu/habbo/habbohotel/items/ItemManager.java | 257 ++++++++++++-- .../eu/habbo/habbohotel/items/YoutubeManager.java | 16 +- .../interactions/InteractionAreaHideControl.java | 7 +- .../items/interactions/InteractionBuildArea.java | 44 +-- .../interactions/InteractionCustomValues.java | 10 +- .../items/interactions/InteractionDice.java | 3 + .../InteractionDiceDisableControl.java | 16 + .../InteractionDoorkickDisableControl.java | 16 + .../InteractionEffectVendingMachineNoSides.java | 9 +- .../items/interactions/InteractionFireworks.java | 2 +- .../items/interactions/InteractionGift.java | 7 +- .../items/interactions/InteractionGuildFurni.java | 5 +- .../interactions/InteractionHideWiredControl.java | 16 + .../InteractionInformationTerminal.java | 5 +- .../items/interactions/InteractionLoveLock.java | 64 +++- .../items/interactions/InteractionMoodLight.java | 2 +- .../items/interactions/InteractionMultiHeight.java | 4 +- .../items/interactions/InteractionMuteArea.java | 26 +- .../InteractionNoSidesVendingMachine.java | 7 +- .../items/interactions/InteractionObstacle.java | 165 ++++++++- .../interactions/InteractionPressurePlate.java | 7 +- .../interactions/InteractionRentableSpace.java | 5 +- .../items/interactions/InteractionRoller.java | 6 +- .../items/interactions/InteractionRoomAds.java | 5 +- .../interactions/InteractionSnowboardSlope.java | 6 +- .../items/interactions/InteractionSwitch.java | 6 +- .../items/interactions/InteractionTeleport.java | 6 +- .../InteractionTileEffectProvider.java | 5 +- .../interactions/InteractionVendingMachine.java | 17 +- .../items/interactions/InteractionWater.java | 6 +- .../items/interactions/InteractionWaterItem.java | 4 +- .../battlebanzai/InteractionBattleBanzaiTile.java | 6 +- .../games/freeze/InteractionFreezeBlock.java | 4 +- .../games/freeze/InteractionFreezeTile.java | 6 +- .../totems/InteractionTotemPlanet.java | 4 +- .../items/interactions/wired/WiredComparison.java | 48 +++ .../wired/chest/ChestDepositSession.java | 29 ++ .../wired/chest/ChestFurniDepositHelper.java | 53 +++ .../wired/chest/ChestFurniPackets.java | 38 ++ .../wired/chest/ChestFurniStoredItem.java | 58 +++ .../wired/chest/ChestFurniWireUtil.java | 46 +++ .../interactions/wired/chest/ChestOpenHelper.java | 26 ++ .../interactions/wired/chest/ChestStorage.java | 391 +++++++++++++++++++++ .../wired/chest/ChestWiredCompare.java | 42 +++ .../wired/chest/ChestWiredCurrencyUtil.java | 51 +++ .../wired/chest/ChestWiredFurniUtil.java | 174 +++++++++ .../interactions/wired/chest/ContractTerm.java | 189 ++++++++++ .../wired/chest/InteractionWiredChest.java | 67 ++++ .../wired/chest/InteractionWiredChestCurrency.java | 86 +++++ .../wired/chest/InteractionWiredChestFurni.java | 84 +++++ .../wired/chest/InteractionWiredContract.java | 227 ++++++++++++ .../wired/chest/WiredTransactionExecutor.java | 201 +++++++++++ .../conditions/WiredConditionChestHasItemType.java | 150 ++++++++ .../conditions/WiredConditionChestHasItems.java | 142 ++++++++ .../WiredConditionCounterTimeMatches.java | 12 +- .../wired/conditions/WiredConditionFrozen.java | 196 +++++++++++ .../conditions/WiredConditionFurniHaveFurni.java | 16 +- .../conditions/WiredConditionFurniHaveHabbo.java | 18 +- .../conditions/WiredConditionFurniInRange.java | 316 +++++++++++++++++ .../conditions/WiredConditionFurniNotInRange.java | 310 ++++++++++++++++ .../conditions/WiredConditionFurniTypeMatch.java | 26 +- .../conditions/WiredConditionHabboHasMinItems.java | 174 +++++++++ .../conditions/WiredConditionHabboHasRights.java | 31 ++ .../conditions/WiredConditionHabboIsFemale.java | 31 ++ .../conditions/WiredConditionHabboIsMale.java | 32 ++ .../WiredConditionHabboLacksCredits.java | 168 +++++++++ .../WiredConditionHabboLacksDiamonds.java | 170 +++++++++ .../WiredConditionHabboLacksDuckets.java | 172 +++++++++ .../WiredConditionHabboNotHasRights.java | 31 ++ .../WiredConditionHabboNotOwnsFurni.java | 57 +++ .../conditions/WiredConditionHabboOwnsBadge.java | 37 ++ .../conditions/WiredConditionHabboOwnsFurni.java | 276 +++++++++++++++ .../conditions/WiredConditionHasAltitude.java | 12 +- .../wired/conditions/WiredConditionHasTag.java | 212 +++++++++++ .../conditions/WiredConditionHasVariable.java | 8 +- .../WiredConditionMatchStatePosition.java | 13 +- .../conditions/WiredConditionMottoContains.java | 210 +++++++++++ .../WiredConditionNoBattleBanzaiRunning.java | 95 +++++ .../wired/conditions/WiredConditionNotFrozen.java | 46 +++ .../WiredConditionNotFurniHaveFurni.java | 16 +- .../WiredConditionNotFurniHaveHabbo.java | 18 +- .../WiredConditionNotHabboOwnsBadge.java | 47 +++ .../wired/conditions/WiredConditionNotHasTag.java | 51 +++ .../conditions/WiredConditionNotSameHeight.java | 244 +++++++++++++ .../wired/conditions/WiredConditionSameHeight.java | 242 +++++++++++++ .../WiredConditionSelectionQuantity.java | 12 +- .../WiredConditionTriggerFurniAdjacentState.java | 248 +++++++++++++ .../conditions/WiredConditionTriggerOnFurni.java | 12 +- .../conditions/WiredConditionUserInRange.java | 240 +++++++++++++ .../conditions/WiredConditionUserNotInRange.java | 242 +++++++++++++ .../WiredConditionUserOnFurniWithState.java | 271 ++++++++++++++ .../WiredConditionVariableValueMatch.java | 12 +- .../wired/contract/InteractionWiredContract.java | 179 ++++++++++ .../contract/InteractionWiredContractPayment.java | 28 ++ .../contract/InteractionWiredContractReward.java | 28 ++ .../contract/InteractionWiredContractTrade.java | 28 ++ .../contract/InteractionWiredCustomContract.java | 28 ++ .../wired/effects/WiredEffectAddTag.java | 161 +++++++++ .../effects/WiredEffectAllUsersLeaveTeam.java | 141 ++++++++ .../wired/effects/WiredEffectBotDance.java | 170 +++++++++ .../wired/effects/WiredEffectBotFollowHabbo.java | 13 +- .../wired/effects/WiredEffectBotGiveHandItem.java | 13 +- .../wired/effects/WiredEffectBotTalkToHabbo.java | 13 +- .../wired/effects/WiredEffectBotTeleport.java | 14 +- .../wired/effects/WiredEffectBotWalkToFurni.java | 5 +- .../effects/WiredEffectCancelTransaction.java | 109 ++++++ .../effects/WiredEffectChangeFurniDirection.java | 16 +- .../effects/WiredEffectForwardUserToRoom.java | 198 +++++++++++ .../wired/effects/WiredEffectFreeze.java | 13 +- .../wired/effects/WiredEffectGiveAchievement.java | 165 +++++++++ .../wired/effects/WiredEffectGiveBadge.java | 169 +++++++++ .../wired/effects/WiredEffectGiveCredits.java | 156 ++++++++ .../effects/WiredEffectGiveCurrencyFromChest.java | 190 ++++++++++ .../wired/effects/WiredEffectGiveDiamonds.java | 158 +++++++++ .../wired/effects/WiredEffectGiveDuckets.java | 155 ++++++++ .../wired/effects/WiredEffectGiveExperience.java | 156 ++++++++ .../effects/WiredEffectGiveFurniFromChest.java | 192 ++++++++++ .../WiredEffectGiveHotelviewBonusRarePoints.java | 13 +- .../effects/WiredEffectGiveHotelviewHofPoints.java | 13 +- .../wired/effects/WiredEffectGiveLook.java | 170 +++++++++ .../wired/effects/WiredEffectGiveOrTakeFurni.java | 259 ++++++++++++++ .../wired/effects/WiredEffectGivePointsType.java | 198 +++++++++++ .../wired/effects/WiredEffectGiveRespect.java | 13 +- .../wired/effects/WiredEffectGiveReward.java | 13 +- .../wired/effects/WiredEffectGiveScore.java | 13 +- .../wired/effects/WiredEffectGiveVariable.java | 11 +- .../wired/effects/WiredEffectInitTransaction.java | 262 ++++++++++++++ .../wired/effects/WiredEffectJoinTeam.java | 13 +- .../wired/effects/WiredEffectKickHabbo.java | 13 +- .../interactions/wired/effects/WiredEffectLay.java | 202 +++++++++++ .../wired/effects/WiredEffectLeaveTeam.java | 13 +- .../interactions/wired/effects/WiredEffectLog.java | 157 +++++++++ .../wired/effects/WiredEffectMakeFastWalk.java | 165 +++++++++ .../wired/effects/WiredEffectMakeUserSay.java | 259 ++++++++++++++ .../wired/effects/WiredEffectMatchFurni.java | 11 +- .../wired/effects/WiredEffectMoveFurniAsGroup.java | 241 +++++++++++++ .../wired/effects/WiredEffectMoveFurniAway.java | 12 +- .../wired/effects/WiredEffectMoveFurniTo.java | 7 +- .../wired/effects/WiredEffectMoveFurniTowards.java | 25 +- .../wired/effects/WiredEffectMoveRotateFurni.java | 5 +- .../wired/effects/WiredEffectMoveRotateUser.java | 13 +- .../wired/effects/WiredEffectMoveUserTiles.java | 306 ++++++++++++++++ .../wired/effects/WiredEffectNegativeLog.java | 30 ++ .../effects/WiredEffectNegativeShowMessage.java | 30 ++ .../wired/effects/WiredEffectOpenHabboPages.java | 156 ++++++++ .../wired/effects/WiredEffectPlaceFurni.java | 214 +++++++++++ .../wired/effects/WiredEffectPlayYoutube.java | 158 +++++++++ .../wired/effects/WiredEffectQuickBopper.java | 164 +++++++++ .../wired/effects/WiredEffectRemoveBadge.java | 169 +++++++++ .../wired/effects/WiredEffectRemoveFurni.java | 227 ++++++++++++ .../wired/effects/WiredEffectRemoveTag.java | 161 +++++++++ .../wired/effects/WiredEffectRemoveVariable.java | 9 +- .../wired/effects/WiredEffectResetHighscores.java | 102 ++++++ .../wired/effects/WiredEffectResetTimers.java | 13 +- .../wired/effects/WiredEffectSayCommand.java | 161 +++++++++ .../wired/effects/WiredEffectSendSignal.java | 30 +- .../wired/effects/WiredEffectSetRollerSpeed.java | 126 +++++++ .../wired/effects/WiredEffectSetRoomAd.java | 178 ++++++++++ .../interactions/wired/effects/WiredEffectSit.java | 175 +++++++++ .../wired/effects/WiredEffectTeleport.java | 18 +- .../wired/effects/WiredEffectToggleFurni.java | 29 +- .../wired/effects/WiredEffectToggleMoodlight.java | 145 ++++++++ .../wired/effects/WiredEffectToggleRandom.java | 21 +- .../wired/effects/WiredEffectTriggerStacks.java | 33 +- .../wired/effects/WiredEffectUnfreeze.java | 13 +- .../wired/effects/WiredEffectUserFurniBase.java | 13 +- .../wired/effects/WiredEffectUserToFurni.java | 13 +- .../wired/effects/WiredEffectWalkToFurni.java | 266 ++++++++++++++ .../wired/effects/WiredEffectWhisper.java | 13 +- .../wired/extra/WiredExtraMovementCurve.java | 136 +++++++ .../interactions/wired/extra/WiredExtraOrEval.java | 12 +- .../interactions/wired/extra/WiredExtraQuest.java | 69 ++++ .../wired/extra/WiredExtraQuestBase.java | 129 +++++++ .../wired/extra/WiredExtraQuestChain.java | 71 ++++ .../wired/extra/WiredExtraTextOutputFurniName.java | 14 +- .../wired/extra/WiredExtraTextOutputVariable.java | 14 +- .../wired/extra/WiredExtraTimeUtilities.java | 136 +++++++ .../InteractionWiredMatchFurniSettings.java | 5 +- .../wired/selector/WiredEffectRemoteSelector.java | 199 +++++++++++ .../selector/WiredEffectScanChestFurniByType.java | 180 ++++++++++ .../selector/WiredEffectVariableSelectorBase.java | 9 +- .../wired/triggers/WiredTriggerAtSetTime.java | 13 +- .../wired/triggers/WiredTriggerAtTimeLong.java | 13 +- .../triggers/WiredTriggerBotReachedFurni.java | 25 +- .../wired/triggers/WiredTriggerClockCounter.java | 12 +- .../wired/triggers/WiredTriggerDiceRolled.java | 125 +++++++ .../triggers/WiredTriggerFurniStateToggled.java | 14 +- .../wired/triggers/WiredTriggerGameEnds.java | 13 +- .../wired/triggers/WiredTriggerGameStarts.java | 13 +- .../triggers/WiredTriggerHabboClicksFurni.java | 12 +- .../wired/triggers/WiredTriggerHabboIdles.java | 89 +++++ .../triggers/WiredTriggerHabboStartsDancing.java | 88 +++++ .../triggers/WiredTriggerHabboStopsDancing.java | 88 +++++ .../wired/triggers/WiredTriggerHabboUnidles.java | 88 +++++ .../triggers/WiredTriggerHabboWalkOffFurni.java | 12 +- .../triggers/WiredTriggerHabboWalkOnFurni.java | 12 +- .../wired/triggers/WiredTriggerPressKeybind.java | 120 +++++++ .../wired/triggers/WiredTriggerReceiveSignal.java | 16 +- .../wired/triggers/WiredTriggerRepeater.java | 13 +- .../wired/triggers/WiredTriggerRepeaterLong.java | 13 +- .../wired/triggers/WiredTriggerRepeaterShort.java | 13 +- .../triggers/WiredTriggerTransactionComplete.java | 87 +++++ .../triggers/WiredTriggerTransactionFail.java | 86 +++++ .../triggers/WiredTriggerUserGetsHandItem.java | 127 +++++++ .../triggers/WiredTriggerUsernameAsTrigger.java | 64 ++++ .../eu/habbo/habbohotel/messenger/Messenger.java | 29 +- .../eu/habbo/habbohotel/modtool/CfhCategory.java | 14 +- .../habbo/habbohotel/modtool/ModToolCategory.java | 12 +- .../habbo/habbohotel/modtool/ModToolManager.java | 81 ++--- .../habbo/habbohotel/modtool/ModToolRoomVisit.java | 8 +- .../habbo/habbohotel/modtool/ModToolSanctions.java | 13 +- .../eu/habbo/habbohotel/modtool/WordFilter.java | 38 +- .../habbohotel/navigation/NavigatorManager.java | 6 +- .../habbohotel/permissions/PermissionsManager.java | 33 +- .../com/eu/habbo/habbohotel/permissions/Rank.java | 16 +- .../java/com/eu/habbo/habbohotel/pets/Pet.java | 10 +- .../java/com/eu/habbo/habbohotel/pets/PetData.java | 30 +- .../com/eu/habbo/habbohotel/pets/PetManager.java | 62 ++-- .../habbo/habbohotel/pets/actions/ActionDip.java | 5 +- .../habbo/habbohotel/pets/actions/ActionPlay.java | 5 +- .../com/eu/habbo/habbohotel/polls/PollManager.java | 5 +- .../eu/habbo/habbohotel/polls/PollQuestion.java | 6 +- .../habbohotel/rooms/BuildersClubRoomSupport.java | 12 +- .../java/com/eu/habbo/habbohotel/rooms/Room.java | 164 ++++----- .../eu/habbo/habbohotel/rooms/RoomChatManager.java | 27 +- .../habbohotel/rooms/RoomConfInvisSupport.java | 7 +- .../habbo/habbohotel/rooms/RoomCycleManager.java | 59 ++-- .../habbohotel/rooms/RoomDiceDisableSupport.java | 47 +++ .../rooms/RoomDoorkickDisableSupport.java | 47 +++ .../habbohotel/rooms/RoomFurniVariableManager.java | 7 +- .../habbohotel/rooms/RoomHideWiredSupport.java | 47 +++ .../eu/habbo/habbohotel/rooms/RoomItemManager.java | 329 +++++++---------- .../com/eu/habbo/habbohotel/rooms/RoomLayout.java | 7 +- .../com/eu/habbo/habbohotel/rooms/RoomManager.java | 86 ++--- .../habbo/habbohotel/rooms/RoomRightsManager.java | 29 +- .../habbo/habbohotel/rooms/RoomRollerManager.java | 44 +-- .../habbo/habbohotel/rooms/RoomSpecialTypes.java | 178 +++++----- .../com/eu/habbo/habbohotel/rooms/RoomTile.java | 9 +- .../eu/habbo/habbohotel/rooms/RoomTileManager.java | 31 +- .../com/eu/habbo/habbohotel/rooms/RoomTrade.java | 13 +- .../habbo/habbohotel/rooms/RoomTradeManager.java | 10 +- .../eu/habbo/habbohotel/rooms/RoomTradeUser.java | 10 +- .../com/eu/habbo/habbohotel/rooms/RoomUnit.java | 101 +++--- .../eu/habbo/habbohotel/rooms/RoomUnitManager.java | 306 ++++++---------- .../habbohotel/rooms/RoomUserVariableManager.java | 7 +- .../habbohotel/rooms/RoomVariableManager.java | 3 +- .../com/eu/habbo/habbohotel/rooms/TraxManager.java | 4 +- .../java/com/eu/habbo/habbohotel/users/Habbo.java | 12 +- .../com/eu/habbo/habbohotel/users/HabboInfo.java | 22 +- .../eu/habbo/habbohotel/users/HabboInventory.java | 7 +- .../com/eu/habbo/habbohotel/users/HabboItem.java | 4 +- .../users/HabboNavigatorWindowSettings.java | 4 +- .../com/eu/habbo/habbohotel/users/HabboStats.java | 155 ++++++-- .../ClothingValidationManager.java | 15 +- .../users/inventory/BadgesComponent.java | 10 +- .../habbohotel/users/inventory/BotsComponent.java | 6 +- .../users/inventory/EffectsComponent.java | 10 +- .../habbohotel/users/inventory/ItemsComponent.java | 64 ++-- .../habbohotel/users/inventory/PetsComponent.java | 25 +- .../users/inventory/WardrobeComponent.java | 27 +- .../users/subscriptions/SubscriptionManager.java | 14 +- .../eu/habbo/habbohotel/wheel/WheelManager.java | 4 +- .../habbo/habbohotel/wired/WiredConditionType.java | 8 +- .../eu/habbo/habbohotel/wired/WiredEffectType.java | 23 +- .../eu/habbo/habbohotel/wired/WiredHandler.java | 27 +- .../habbo/habbohotel/wired/WiredTriggerType.java | 10 +- .../habbohotel/wired/core/RoomWiredStackIndex.java | 15 +- .../wired/core/WiredContextVariableSupport.java | 4 +- .../wired/core/WiredDerivedVariableBox.java | 24 ++ .../habbo/habbohotel/wired/core/WiredEngine.java | 19 +- .../eu/habbo/habbohotel/wired/core/WiredEvent.java | 14 + .../habbo/habbohotel/wired/core/WiredManager.java | 50 ++- .../wired/core/WiredMoveCarryHelper.java | 29 +- .../wired/core/WiredSelectionFilterSupport.java | 6 +- .../habbohotel/wired/core/WiredSourceUtil.java | 3 +- .../wired/core/WiredTextInputCaptureSupport.java | 4 +- .../wired/core/WiredTextPlaceholderUtil.java | 6 +- .../wired/core/WiredTriggerSourceUtil.java | 3 +- .../wired/core/WiredUserMovementHelper.java | 5 +- .../core/WiredVariableLevelSystemSupport.java | 78 +++- .../core/WiredVariableTextConnectorSupport.java | 4 +- .../highscores/WiredHighscoreMidnightUpdater.java | 4 +- .../habbohotel/wired/migrate/WiredEvents.java | 33 ++ .../java/com/eu/habbo/messages/PacketManager.java | 28 +- .../java/com/eu/habbo/messages/PacketNames.java | 5 + .../eu/habbo/messages/PacketRuntimeValidator.java | 76 ++++ .../eu/habbo/messages/RuntimeValidationIssue.java | 4 + .../eu/habbo/messages/RuntimeValidationReport.java | 40 +++ .../com/eu/habbo/messages/incoming/Incoming.java | 15 + .../catalog/BuildersClubPlaceRoomItemEvent.java | 2 +- .../catalog/BuildersClubPlaceWallItemEvent.java | 2 +- .../catalog/CatalogBuyItemAsGiftEvent.java | 16 +- .../incoming/catalog/CatalogBuyItemEvent.java | 14 +- .../incoming/catalog/CatalogSearchedItemEvent.java | 9 +- .../catalog/CatalogSelectClubGiftEvent.java | 8 +- .../incoming/catalog/recycler/RecycleEvent.java | 6 +- .../incoming/crafting/CraftingCraftItemEvent.java | 14 +- .../crafting/CraftingCraftSecretEvent.java | 9 +- .../RequestCraftingRecipesAvailableEvent.java | 4 +- .../floorplaneditor/FloorPlanEditorSaveEvent.java | 15 +- .../incoming/friends/RemoveFriendEvent.java | 6 +- .../messages/incoming/friends/SearchUserEvent.java | 6 +- .../messages/incoming/guilds/GuildDeleteEvent.java | 5 +- .../incoming/guilds/RequestGuildBuyRoomsEvent.java | 4 +- .../incoming/guilds/RequestOwnGuildsEvent.java | 6 +- .../guilds/forums/GuildForumListEvent.java | 16 +- .../incoming/handshake/SecureLoginEvent.java | 4 +- .../HousekeepingResetUserPasswordEvent.java | 6 +- .../inventory/RequestInventoryItemsDelete.java | 15 +- .../inventory/RequestInventoryItemsEvent.java | 42 +-- .../modtool/ModToolSanctionAlertEvent.java | 4 +- .../incoming/modtool/ModToolSanctionBanEvent.java | 4 +- .../incoming/modtool/ModToolSanctionMuteEvent.java | 4 +- .../modtool/ModToolSanctionTradeLockEvent.java | 4 +- .../navigator/GetCategoriesWithUserCountEvent.java | 19 + .../incoming/navigator/RequestDeleteRoomEvent.java | 4 +- .../navigator/RequestNewNavigatorDataEvent.java | 9 + .../navigator/RequestNewNavigatorRoomsEvent.java | 3 +- .../incoming/rooms/RoomRemoveAllRightsEvent.java | 20 +- .../incoming/rooms/items/AdvertisingSaveEvent.java | 6 +- .../incoming/rooms/items/ChestDepositEvent.java | 55 +++ .../rooms/items/ChestDepositFurniEvent.java | 98 ++++++ .../items/ChestDepositInventoryItemEvent.java | 35 ++ .../incoming/rooms/items/ChestOpenEvent.java | 28 ++ .../incoming/rooms/items/ChestRequestLogEvent.java | 29 ++ .../rooms/items/ChestSaveNotificationsEvent.java | 40 +++ .../rooms/items/ChestSaveSettingsEvent.java | 50 +++ .../rooms/items/ChestStartDepositEvent.java | 30 ++ .../rooms/items/ChestUpgradeCapacityEvent.java | 56 +++ .../rooms/items/ChestWithdrawAllFurniEvent.java | 68 ++++ .../incoming/rooms/items/ChestWithdrawEvent.java | 52 +++ .../rooms/items/ChestWithdrawFurniEvent.java | 74 ++++ .../rooms/items/MoodLightSaveSettingsEvent.java | 4 +- .../rooms/items/MoodLightSettingsEvent.java | 2 +- .../incoming/rooms/items/MoodLightTurnOnEvent.java | 2 +- .../incoming/rooms/items/PressKeybindEvent.java | 35 ++ .../incoming/rooms/items/RedeemClothingEvent.java | 4 +- .../rooms/items/SetStackHelperHeightEvent.java | 5 +- .../incoming/rooms/items/ToggleFloorItemEvent.java | 2 +- .../items/lovelock/LoveLockStartConfirmEvent.java | 66 ++-- .../incoming/rooms/users/RoomUserWalkEvent.java | 5 +- .../trading/TradeOfferMultipleItemsEvent.java | 6 +- .../com/eu/habbo/messages/outgoing/Outgoing.java | 6 + .../talenttrack/TalentTrackComposer.java | 7 +- .../outgoing/catalog/CatalogPageComposer.java | 4 +- .../outgoing/catalog/CatalogPagesListComposer.java | 11 +- .../outgoing/catalog/ClubGiftsComposer.java | 2 +- .../outgoing/catalog/PetBreedsComposer.java | 9 +- .../outgoing/catalog/RecyclerLogicComposer.java | 4 +- .../calendar/AdventCalendarDataComposer.java | 14 +- .../FloorPlanEditorBlockedTilesComposer.java | 5 +- .../messages/outgoing/friends/FriendsComposer.java | 7 +- .../outgoing/friends/RemoveFriendComposer.java | 12 +- .../outgoing/friends/RoomInviteErrorComposer.java | 22 +- .../outgoing/friends/UserSearchResultComposer.java | 12 +- .../generic/alerts/BubbleAlertComposer.java | 12 +- .../guardians/GuardianVotingRequestedComposer.java | 5 +- .../outgoing/guilds/GuildBuyRoomsComposer.java | 9 +- .../outgoing/guilds/GuildListComposer.java | 9 +- .../guilds/forums/GuildForumDataComposer.java | 8 +- .../outgoing/inventory/AddHabboItemComposer.java | 8 +- .../inventory/InventoryAchievementsComposer.java | 25 +- .../inventory/InventoryBadgesComposer.java | 6 +- .../outgoing/inventory/InventoryBotsComposer.java | 5 +- .../outgoing/inventory/InventoryItemsComposer.java | 26 +- .../outgoing/inventory/InventoryPetsComposer.java | 14 +- .../outgoing/modtool/CfhTopicsMessageComposer.java | 29 +- .../messages/outgoing/modtool/ModToolComposer.java | 21 +- .../modtool/ModToolSanctionInfoComposer.java | 6 +- .../outgoing/modtool/ModToolUserInfoComposer.java | 4 +- .../modtool/ModToolUserRoomVisitsComposer.java | 8 +- .../NewNavigatorCategoryUserCountComposer.java | 13 +- .../outgoing/rarevalues/RareValuesComposer.java | 15 +- .../outgoing/rooms/RoomBannedUsersComposer.java | 21 +- .../outgoing/rooms/UpdateStackHeightComposer.java | 10 +- .../outgoing/rooms/items/ChestDataComposer.java | 89 +++++ .../rooms/items/ChestFurniChunkComposer.java | 41 +++ .../rooms/items/ChestFurniDeltaComposer.java | 39 ++ .../outgoing/rooms/items/ChestLogComposer.java | 40 +++ .../outgoing/rooms/items/ChestOpenComposer.java | 28 ++ .../rooms/items/ConfInvisStateComposer.java | 9 +- .../rooms/items/FloorItemOnRollerComposer.java | 5 +- .../rooms/items/MoodLightDataComposer.java | 13 +- .../rooms/items/RoomFloorItemsComposer.java | 29 +- .../rooms/items/RoomWallItemsComposer.java | 28 +- .../jukebox/JukeBoxPlayListUpdatedComposer.java | 9 +- .../items/lovelock/LoveLockFurniStartComposer.java | 7 +- .../outgoing/rooms/pets/RoomPetComposer.java | 24 +- .../pets/breeding/PetBreedingResultComposer.java | 6 +- .../rooms/users/RoomUserStatusComposer.java | 11 +- .../rooms/users/RoomUsersGuildBadgesComposer.java | 24 +- .../outgoing/users/ClubGiftReceivedComposer.java | 9 +- .../outgoing/users/FavoriteRoomsCountComposer.java | 11 +- .../outgoing/users/ProfileFriendsComposer.java | 5 +- .../outgoing/users/UserClothesComposer.java | 20 +- .../com/eu/habbo/messages/rcon/ChangeUsername.java | 6 +- .../com/eu/habbo/messages/rcon/ImageAlertUser.java | 6 +- .../eu/habbo/messages/rcon/ImageHotelAlert.java | 4 +- .../main/java/com/eu/habbo/networking/Server.java | 5 +- .../eu/habbo/networking/gameserver/GameServer.java | 16 + .../gameserver/WebSocketChannelInitializer.java | 13 + .../gameserver/auth/AccountChangeEndpoints.java | 3 +- .../networking/gameserver/auth/AuthHttpUtil.java | 8 +- .../networking/gameserver/auth/PasswordHasher.java | 25 ++ .../gameserver/auth/SessionEndpoints.java | 3 +- .../gameserver/decoders/GameMessageHandler.java | 4 +- .../eu/habbo/networking/rconserver/RCONServer.java | 7 +- .../networking/rconserver/RCONServerHandler.java | 2 +- .../main/java/com/eu/habbo/plugin/HabboPlugin.java | 8 +- .../java/com/eu/habbo/plugin/PluginManager.java | 119 ++++--- .../eu/habbo/plugin/PluginRuntimeValidator.java | 69 ++++ .../furniture/wired/WiredStackExecutedEvent.java | 9 +- .../furniture/wired/WiredStackTriggeredEvent.java | 9 +- .../events/inventory/InventoryItemsAddedEvent.java | 7 +- .../events/rooms/RoomFloorItemsLoadEvent.java | 11 +- .../catalog/UserCatalogFurnitureBoughtEvent.java | 7 +- .../catalog/UserCatalogItemPurchasedEvent.java | 8 +- .../runnables/BattleBanzaiTilesFlicker.java | 7 +- .../threading/runnables/CannonKickAction.java | 5 +- .../threading/runnables/ClearRentedSpace.java | 6 +- .../com/eu/habbo/threading/runnables/OpenGift.java | 4 +- .../threading/runnables/QueryDeleteHabboItems.java | 12 +- .../threading/runnables/RandomDiceNumber.java | 7 + .../threading/runnables/RebugKickBallAction.java | 5 +- .../eu/habbo/threading/runnables/RoomTrashing.java | 8 +- .../freeze/FreezeHandleSnowballExplosion.java | 12 +- .../freeze/FreezeResetExplosionTiles.java | 7 +- .../runnables/teleport/TeleportActionFive.java | 6 +- .../java/com/eu/habbo/util/figure/FigureUtil.java | 12 +- .../eu/habbo/util/imager/badges/BadgeImager.java | 6 +- .../src/main/java/gnu/trove/map/hash/THashMap.java | 23 ++ .../habbo/EmulatorStartupConfigDefaultsTest.java | 36 ++ .../com/eu/habbo/EmulatorStartupConsoleTest.java | 2 +- .../commands/RedeemCommandValueGuardTest.java | 6 +- .../rooms/RoomTradeSafetyContractTest.java | 2 +- .../habbo/messages/PacketRuntimeValidatorTest.java | 70 ++++ .../crafting/CraftingCraftSecretContractTest.java | 2 +- .../gameserver/auth/PasswordHasherTest.java | 33 ++ .../rconserver/RCONServerHandlerContractTest.java | 2 +- .../habbo/plugin/PluginRuntimeValidatorTest.java | 102 ++++++ .../test/java/com/eu/habbo/util/HexUtilsTest.java | 38 ++ .../java/com/eu/habbo/util/SqlLikeEscaperTest.java | 32 ++ .../com/eu/habbo/util/figure/FigureUtilTest.java | 56 +++ .../eu/habbo/util/pathfinding/RotationTest.java | 32 ++ 507 files changed, 20763 insertions(+), 3073 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/ci.yml create mode 100644 Database Updates/015_wired_furni_enable_registered.sql create mode 100644 Database Updates/016_wired_phase1_furni.sql create mode 100644 Database Updates/017_wired_chest_currency.sql create mode 100644 Database Updates/018_wired_chest_furni.sql create mode 100644 Database Updates/019_wired_transactions_scanner.sql create mode 100644 Database Updates/020_wired_place_remove_furni.sql create mode 100644 Database Updates/021_wired_contracts.sql create mode 100644 Database Updates/022_wired_quests.sql create mode 100644 Database Updates/023_fill_room_207_wiredlab.sql create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionDiceDisableControl.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionDoorkickDisableControl.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionHideWiredControl.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/WiredComparison.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/ChestDepositSession.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/ChestFurniDepositHelper.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/ChestFurniPackets.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/ChestFurniStoredItem.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/ChestFurniWireUtil.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/ChestOpenHelper.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/ChestStorage.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/ChestWiredCompare.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/ChestWiredCurrencyUtil.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/ChestWiredFurniUtil.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/ContractTerm.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/InteractionWiredChest.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/InteractionWiredChestCurrency.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/InteractionWiredChestFurni.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/InteractionWiredContract.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/chest/WiredTransactionExecutor.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionChestHasItemType.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionChestHasItems.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionFrozen.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionFurniInRange.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionFurniNotInRange.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHabboHasMinItems.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHabboHasRights.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHabboIsFemale.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHabboIsMale.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHabboLacksCredits.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHabboLacksDiamonds.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHabboLacksDuckets.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHabboNotHasRights.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHabboNotOwnsFurni.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHabboOwnsBadge.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHabboOwnsFurni.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionHasTag.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionMottoContains.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionNoBattleBanzaiRunning.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionNotFrozen.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionNotHabboOwnsBadge.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionNotHasTag.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionNotSameHeight.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionSameHeight.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionTriggerFurniAdjacentState.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionUserInRange.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionUserNotInRange.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionUserOnFurniWithState.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/contract/InteractionWiredContract.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/contract/InteractionWiredContractPayment.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/contract/InteractionWiredContractReward.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/contract/InteractionWiredContractTrade.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/contract/InteractionWiredCustomContract.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectAddTag.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectAllUsersLeaveTeam.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectBotDance.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectCancelTransaction.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectForwardUserToRoom.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveAchievement.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveBadge.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveCredits.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveCurrencyFromChest.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveDiamonds.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveDuckets.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveExperience.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveFurniFromChest.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveLook.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGiveOrTakeFurni.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectGivePointsType.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectInitTransaction.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectLay.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectLog.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectMakeFastWalk.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectMakeUserSay.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectMoveFurniAsGroup.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectMoveUserTiles.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectNegativeLog.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectNegativeShowMessage.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectOpenHabboPages.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectPlaceFurni.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectPlayYoutube.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectQuickBopper.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectRemoveBadge.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectRemoveFurni.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectRemoveTag.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectResetHighscores.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectSayCommand.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectSetRollerSpeed.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectSetRoomAd.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectSit.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectToggleMoodlight.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectWalkToFurni.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraMovementCurve.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraQuest.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraQuestBase.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraQuestChain.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTimeUtilities.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectRemoteSelector.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectScanChestFurniByType.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/triggers/WiredTriggerDiceRolled.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/triggers/WiredTriggerHabboIdles.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/triggers/WiredTriggerHabboStartsDancing.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/triggers/WiredTriggerHabboStopsDancing.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/triggers/WiredTriggerHabboUnidles.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/triggers/WiredTriggerPressKeybind.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/triggers/WiredTriggerTransactionComplete.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/triggers/WiredTriggerTransactionFail.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/triggers/WiredTriggerUserGetsHandItem.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/triggers/WiredTriggerUsernameAsTrigger.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/rooms/RoomDiceDisableSupport.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/rooms/RoomDoorkickDisableSupport.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/rooms/RoomHideWiredSupport.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/wired/core/WiredDerivedVariableBox.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/PacketRuntimeValidator.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/RuntimeValidationIssue.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/RuntimeValidationReport.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/navigator/GetCategoriesWithUserCountEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestDepositEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestDepositFurniEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestDepositInventoryItemEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestOpenEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestRequestLogEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestSaveNotificationsEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestSaveSettingsEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestStartDepositEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestUpgradeCapacityEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestWithdrawAllFurniEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestWithdrawEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ChestWithdrawFurniEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PressKeybindEvent.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/ChestDataComposer.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/ChestFurniChunkComposer.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/ChestFurniDeltaComposer.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/ChestLogComposer.java create mode 100644 Emulator/src/main/java/com/eu/habbo/messages/outgoing/rooms/items/ChestOpenComposer.java create mode 100644 Emulator/src/main/java/com/eu/habbo/networking/gameserver/auth/PasswordHasher.java create mode 100644 Emulator/src/main/java/com/eu/habbo/plugin/PluginRuntimeValidator.java create mode 100644 Emulator/src/main/java/gnu/trove/map/hash/THashMap.java create mode 100644 Emulator/src/test/java/com/eu/habbo/EmulatorStartupConfigDefaultsTest.java create mode 100644 Emulator/src/test/java/com/eu/habbo/messages/PacketRuntimeValidatorTest.java create mode 100644 Emulator/src/test/java/com/eu/habbo/networking/gameserver/auth/PasswordHasherTest.java create mode 100644 Emulator/src/test/java/com/eu/habbo/plugin/PluginRuntimeValidatorTest.java create mode 100644 Emulator/src/test/java/com/eu/habbo/util/HexUtilsTest.java create mode 100644 Emulator/src/test/java/com/eu/habbo/util/SqlLikeEscaperTest.java create mode 100644 Emulator/src/test/java/com/eu/habbo/util/figure/FigureUtilTest.java create mode 100644 Emulator/src/test/java/com/eu/habbo/util/pathfinding/RotationTest.java [?25l ⠋ Backing up database... ⠙ Backing up database... ⠹ Backing up database... ⠸ Backing up database... ⠼ Backing up database... ⠴ Backing up database... ⠦ Backing up database... ⠧ Backing up database... ⠇ Backing up database... ⠏ Backing up database... ⠋ Backing up database... ⠙ Backing up database... ⠹ Backing up database... ⠸ Backing up database... ⠼ Backing up database... ⠴ Backing up database... [?12l[?25h ✔ Done ✔ Backup: 35M [2026-07-07 14:48:35] [OK] Backup: 35M ➜ SQL: 017_wired_chest_currency.sql [2026-07-07 14:48:35] [INFO] SQL: 017_wired_chest_currency.sql ➜ SQL: 022_wired_quests.sql [2026-07-07 14:48:35] [INFO] SQL: 022_wired_quests.sql ➜ SQL: 020_wired_place_remove_furni.sql [2026-07-07 14:48:35] [INFO] SQL: 020_wired_place_remove_furni.sql ➜ SQL: 019_wired_transactions_scanner.sql [2026-07-07 14:48:35] [INFO] SQL: 019_wired_transactions_scanner.sql ➜ SQL: 023_fill_room_207_wiredlab.sql [2026-07-07 14:48:35] [INFO] SQL: 023_fill_room_207_wiredlab.sql ➜ SQL: 018_wired_chest_furni.sql [2026-07-07 14:48:35] [INFO] SQL: 018_wired_chest_furni.sql ➜ SQL: 015_wired_furni_enable_registered.sql [2026-07-07 14:48:35] [INFO] SQL: 015_wired_furni_enable_registered.sql ➜ SQL: 016_wired_phase1_furni.sql [2026-07-07 14:48:35] [INFO] SQL: 016_wired_phase1_furni.sql ➜ SQL: 021_wired_contracts.sql [2026-07-07 14:48:35] [INFO] SQL: 021_wired_contracts.sql ✔ 9 SQL file(s) imported [2026-07-07 14:48:35] [OK] 9 SQL file(s) imported [?25l ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... ⠧ Building emulator... ⠇ Building emulator... ⠏ Building emulator... ⠋ Building emulator... ⠙ Building emulator... ⠹ Building emulator... ⠸ Building emulator... ⠼ Building emulator... ⠴ Building emulator... ⠦ Building emulator... WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release 14:48:59.220 WARN [main ] FurnidataReader | FurnidataReader: ignoring out-of-base file /tmp/junit-13697708161754052782/furnidata/core/../../secret.json 14:48:59.228 WARN [main ] FurnidataReader | FurnidataReader: /tmp/junit-7570398690166415207/FurnitureData.json is 292 bytes, over cap 8 — refusing 14:48:59.234 WARN [main ] FurnidataReader | FurnidataReader: /tmp/junit-17548853137162548178/furnidata/manifest.json is 1850 bytes, over cap 8 — refusing 14:48:59.960 INFO [main ] Version | HV000001: Hibernate Validator 9.1.2.Final [?12l[?25h ✔ Done ✔ Jar: Habbo-4.2.49-jar-with-dependencies.jar [2026-07-07 14:49:07] [OK] Jar: Habbo-4.2.49-jar-with-dependencies.jar ✔ Launch script updated [2026-07-07 14:49:07] [OK] Launch script updated  Step 3/8 — Update Nitro_Render_V3  No local changes to save Your branch is up to date with 'origin/main'. Updating ed90605..5909c9e Fast-forward .../api/src/asset/avatar/IAssetAvatarCanvas.ts | 7 + .../api/src/asset/avatar/IAssetAvatarGeometry.ts | 8 + packages/api/src/asset/avatar/index.ts | 2 + packages/api/src/asset/index.ts | 1 + .../api/src/nitro/avatar/IAvatarFigureContainer.ts | 10 +- packages/api/src/nitro/avatar/IAvatarImage.ts | 13 +- .../api/src/nitro/avatar/IAvatarRenderManager.ts | 4 +- .../src/nitro/avatar/actions/IActionDefinition.ts | 10 +- .../nitro/avatar/animation/IAnimationManager.ts | 4 +- .../nitro/avatar/animation/ISpriteDataContainer.ts | 6 +- .../src/nitro/avatar/structure/IFigurePartSet.ts | 2 +- .../api/src/nitro/avatar/structure/ISetType.ts | 6 +- .../src/nitro/avatar/structure/IStructureData.ts | 8 +- packages/api/src/nitro/room/IRoomCreator.ts | 6 +- packages/api/src/nitro/room/IRoomEngine.ts | 8 +- packages/api/src/nitro/room/IRoomEngineServices.ts | 10 +- .../api/src/nitro/room/IRoomObjectEventManager.ts | 2 +- .../nitro/room/object/data/type/HighScoreData.ts | 12 +- .../room/utils/IFurnitureStackingHeightMap.ts | 2 +- .../src/nitro/room/utils/ILegacyWallGeometry.ts | 14 +- .../api/src/nitro/room/utils/ITileObjectMap.ts | 8 +- packages/api/src/nitro/session/PetFigureData.ts | 50 +- .../src/nitro/session/enum/RoomTradingLevelEnum.ts | 4 +- packages/api/src/nitro/sound/IMusicController.ts | 18 +- packages/api/src/room/IRoomGeometry.ts | 12 +- packages/api/src/room/IRoomManagerListener.ts | 2 +- .../src/room/object/IRoomObjectModelController.ts | 10 +- packages/api/src/ui/enums/AvatarExpressionEnum.ts | 8 +- packages/avatar/src/AvatarFigureContainer.ts | 20 +- packages/avatar/src/AvatarImage.ts | 89 +- .../avatar/src/AvatarImageBodyPartContainer.ts | 24 +- packages/avatar/src/AvatarImagePartContainer.ts | 18 +- packages/avatar/src/AvatarRenderManager.ts | 8 +- packages/avatar/src/AvatarStructure.ts | 6 +- packages/avatar/src/EffectAssetDownloadManager.ts | 9 +- packages/avatar/src/FigureDataContainer.ts | 88 +- packages/avatar/src/PlaceHolderAvatarImage.ts | 4 +- packages/avatar/src/actions/ActionDefinition.ts | 26 +- packages/avatar/src/actions/AvatarActionManager.ts | 10 +- packages/avatar/src/alias/AssetAliasCollection.ts | 28 +- packages/avatar/src/animation/AddDataContainer.ts | 18 +- packages/avatar/src/animation/Animation.ts | 91 +- packages/avatar/src/animation/AnimationManager.ts | 6 +- .../src/animation/AvatarAnimationLayerData.ts | 36 +- .../avatar/src/animation/AvatarDataContainer.ts | 8 +- .../avatar/src/animation/DirectionDataContainer.ts | 4 +- .../avatar/src/animation/SpriteDataContainer.ts | 28 +- .../avatar/src/cache/AvatarImageActionCache.ts | 14 +- .../avatar/src/cache/AvatarImageBodyPartCache.ts | 36 +- packages/avatar/src/cache/AvatarImageCache.ts | 76 +- .../avatar/src/cache/AvatarImageDirectionCache.ts | 20 +- packages/avatar/src/cache/ImageData.ts | 4 +- packages/avatar/src/data/HabboAvatarGeometry.ts | 4 +- .../avatar/src/geometry/AvatarModelGeometry.ts | 104 +- packages/avatar/src/geometry/AvatarSet.ts | 22 +- packages/avatar/src/geometry/GeometryBodyPart.ts | 74 +- packages/avatar/src/geometry/GeometryItem.ts | 24 +- .../avatar/src/structure/AvatarAnimationData.ts | 10 +- packages/avatar/src/structure/AvatarCanvas.ts | 14 +- packages/avatar/src/structure/FigureSetData.ts | 16 +- packages/avatar/src/structure/PartSetsData.ts | 18 +- packages/avatar/src/structure/figure/FigurePart.ts | 2 +- .../avatar/src/structure/figure/FigurePartSet.ts | 4 +- packages/avatar/src/structure/figure/PartColor.ts | 4 +- packages/avatar/src/structure/figure/SetType.ts | 15 +- .../avatar/src/structure/parts/PartDefinition.ts | 4 +- packages/communication/src/NitroMessages.ts | 22 + .../src/messages/incoming/IncomingHeader.ts | 5 + .../incoming/room/furniture/ChestDataEvent.ts | 16 + .../room/furniture/ChestFurniChunkEvent.ts | 16 + .../room/furniture/ChestFurniDeltaEvent.ts | 16 + .../incoming/room/furniture/ChestLogEvent.ts | 16 + .../incoming/room/furniture/ChestOpenEvent.ts | 16 + .../src/messages/incoming/room/furniture/index.ts | 5 + .../src/messages/outgoing/OutgoingHeader.ts | 13 + .../outgoing/camera/RenderRoomMessageComposer.ts | 2 +- .../camera/RenderRoomThumbnailMessageComposer.ts | 4 +- .../OpenCampaignCalendarDoorAsStaffComposer.ts | 4 +- .../campaign/OpenCampaignCalendarDoorComposer.ts | 4 +- .../BuildersClubPlaceRoomItemMessageComposer.ts | 4 +- .../BuildersClubPlaceWallItemMessageComposer.ts | 4 +- .../catalog/GetCatalogPageExpirationComposer.ts | 4 +- .../outgoing/catalog/GetIsOfferGiftableComposer.ts | 4 +- .../catalog/GetNextTargetedOfferComposer.ts | 4 +- .../PurchaseBasicMembershipExtensionComposer.ts | 4 +- .../catalog/PurchaseRoomAdMessageComposer.ts | 4 +- .../catalog/PurchaseTargetedOfferComposer.ts | 4 +- .../PurchaseVipMembershipExtensionComposer.ts | 4 +- .../catalog/SetTargetedOfferStateComposer.ts | 4 +- .../catalog/ShopTargetedOfferViewedComposer.ts | 4 +- .../ForwardToACompetitionRoomMessageComposer.ts | 4 +- ...orwardToRandomCompetitionRoomMessageComposer.ts | 4 +- .../GetCurrentTimingCodeMessageComposer.ts | 4 +- .../GetIsUserPartOfCompetitionMessageComposer.ts | 4 +- .../competition/GetSecondsUntilMessageComposer.ts | 4 +- .../SubmitRoomToCompetitionMessageComposer.ts | 4 +- .../competition/VoteForRoomMessageComposer.ts | 4 +- .../messages/outgoing/crafting/CraftComposer.ts | 4 +- .../outgoing/crafting/CraftSecretComposer.ts | 4 +- .../crafting/GetCraftableProductsComposer.ts | 4 +- .../outgoing/crafting/GetCraftingRecipeComposer.ts | 4 +- .../GetCraftingRecipesAvailableComposer.ts | 4 +- .../arena/Game2LoadStageReadyMessageComposer.ts | 4 +- .../Game2GetAccountGameStatusMessageComposer.ts | 4 +- .../Game2RequestFullStatusUpdateMessageComposer.ts | 4 +- .../game/lobby/AcceptGameInviteMessageComposer.ts | 4 +- .../game/lobby/GameUnloadedMessageComposer.ts | 4 +- .../game/lobby/GetGameStatusMessageComposer.ts | 4 +- .../GetUserGameAchievementsMessageComposer.ts | 4 +- .../game/lobby/JoinQueueMessageComposer.ts | 4 +- .../game/lobby/LeaveQueueMessageComposer.ts | 4 +- .../ResetResolutionAchievementMessageComposer.ts | 4 +- .../Game2GetWeeklyFriendsLeaderboardComposer.ts | 4 +- .../score/Game2GetWeeklyLeaderboardComposer.ts | 4 +- .../game/score/GetWeeklyGameRewardComposer.ts | 4 +- .../score/GetWeeklyGameRewardWinnersComposer.ts | 4 +- ...PhoneNumberVerificationStatusMessageComposer.ts | 4 +- .../gifts/TryPhoneNumberMessageComposer.ts | 4 +- .../outgoing/gifts/VerifyCodeMessageComposer.ts | 4 +- .../groupforums/GetForumStatsMessageComposer.ts | 4 +- .../groupforums/GetForumsListMessageComposer.ts | 4 +- .../groupforums/GetMessagesMessageComposer.ts | 4 +- .../groupforums/GetThreadMessageComposer.ts | 4 +- .../groupforums/GetThreadsMessageComposer.ts | 4 +- .../groupforums/ModerateMessageMessageComposer.ts | 4 +- .../groupforums/ModerateThreadMessageComposer.ts | 4 +- .../groupforums/PostMessageMessageComposer.ts | 4 +- .../UpdateForumReadMarkerMessageComposer.ts | 8 +- .../UpdateForumSettingsMessageComposer.ts | 4 +- .../groupforums/UpdateThreadMessageComposer.ts | 4 +- .../CallForHelpFromForumMessageMessageComposer.ts | 4 +- .../CallForHelpFromForumThreadMessageComposer.ts | 4 +- .../help/CallForHelpFromSelfieMessageComposer.ts | 4 +- ...ChatReviewGuideDecidesOnOfferMessageComposer.ts | 4 +- .../help/ChatReviewGuideVoteMessageComposer.ts | 4 +- .../help/ChatReviewSessionCreateMessageComposer.ts | 4 +- .../outgoing/help/GetCfhStatusMessageComposer.ts | 4 +- .../outgoing/help/GetQuizQuestionsComposer.ts | 4 +- .../help/GuideSessionCreateMessageComposer.ts | 4 +- .../help/GuideSessionFeedbackMessageComposer.ts | 4 +- .../GuideSessionGuideDecidesMessageComposer.ts | 4 +- .../help/GuideSessionIsTypingMessageComposer.ts | 4 +- .../help/GuideSessionMessageMessageComposer.ts | 4 +- .../GuideSessionOnDutyUpdateMessageComposer.ts | 4 +- .../help/GuideSessionReportMessageComposer.ts | 4 +- .../outgoing/help/SearchFaqsMessageComposer.ts | 4 +- .../badges/GetIsBadgeRequestFulfilledComposer.ts | 4 +- .../CloseIssueDefaultActionMessageComposer.ts | 4 +- .../moderation/DefaultSanctionMessageComposer.ts | 8 +- .../moderation/GetRoomVisitsMessageComposer.ts | 4 +- .../outgoing/moderation/ModAlertMessageComposer.ts | 8 +- .../outgoing/moderation/ModBanMessageComposer.ts | 8 +- .../outgoing/moderation/ModKickMessageComposer.ts | 8 +- .../moderation/ModMessageMessageComposer.ts | 12 +- .../outgoing/moderation/ModMuteMessageComposer.ts | 8 +- .../moderation/ModToolPreferencesComposer.ts | 4 +- .../outgoing/moderation/ModToolSanctionComposer.ts | 4 +- .../moderation/ModTradingLockMessageComposer.ts | 8 +- .../moderation/ModeratorActionMessageComposer.ts | 8 +- .../MysteryBoxWaitingCanceledMessageComposer.ts | 4 +- .../navigator/CancelEventMessageComposer.ts | 4 +- .../CompetitionRoomsSearchMessageComposer.ts | 4 +- .../DeleteFavouriteRoomMessageComposer.ts | 4 +- .../outgoing/navigator/EditEventMessageComposer.ts | 4 +- .../ForwardToARandomPromotedRoomMessageComposer.ts | 4 +- .../navigator/ForwardToSomeRoomMessageComposer.ts | 4 +- .../navigator/GetOfficialRoomsMessageComposer.ts | 4 +- .../navigator/GuildBaseSearchMessageComposer.ts | 4 +- .../navigator/PopularRoomsSearchMessageComposer.ts | 4 +- .../outgoing/navigator/RateFlatMessageComposer.ts | 4 +- .../navigator/RoomAdEventTabAdClickedComposer.ts | 4 +- .../navigator/RoomAdSearchMessageComposer.ts | 4 +- .../navigator/RoomTextSearchMessageComposer.ts | 4 +- .../RoomsWithHighestScoreSearchMessageComposer.ts | 4 +- .../navigator/SetRoomSessionTagsMessageComposer.ts | 4 +- .../messages/outgoing/poll/PollRejectComposer.ts | 4 +- .../messages/outgoing/poll/PollStartComposer.ts | 4 +- .../outgoing/quest/AcceptQuestMessageComposer.ts | 4 +- .../outgoing/quest/ActivateQuestMessageComposer.ts | 4 +- .../GetCommunityGoalHallOfFameMessageComposer.ts | 4 +- .../outgoing/quest/GetDailyQuestMessageComposer.ts | 4 +- .../outgoing/quest/StartCampaignMessageComposer.ts | 4 +- .../messages/outgoing/room/PressKeybindComposer.ts | 23 + .../room/furniture/chest/ChestDepositComposer.ts | 25 + .../furniture/chest/ChestDepositFurniComposer.ts | 25 + .../chest/ChestDepositInventoryItemComposer.ts | 22 + .../room/furniture/chest/ChestOpenComposer.ts | 22 + .../furniture/chest/ChestRequestLogComposer.ts | 24 + .../chest/ChestSaveNotificationsComposer.ts | 24 + .../furniture/chest/ChestSaveSettingsComposer.ts | 24 + .../furniture/chest/ChestStartDepositComposer.ts | 22 + .../chest/ChestUpgradeCapacityComposer.ts | 24 + .../chest/ChestWithdrawAllFurniComposer.ts | 22 + .../room/furniture/chest/ChestWithdrawComposer.ts | 25 + .../furniture/chest/ChestWithdrawFurniComposer.ts | 25 + .../outgoing/room/furniture/chest/index.ts | 12 + .../dimmer/MoodlightSettingsSaveComposer.ts | 4 +- .../src/messages/outgoing/room/furniture/index.ts | 1 + .../FurnitureMannequinSaveLookComposer.ts | 4 +- .../room/furniture/presents/OpenPresentComposer.ts | 4 +- .../room/furniture/toner/ApplyTonerComposer.ts | 4 +- ...ControlYoutubeDisplayPlaybackMessageComposer.ts | 4 +- .../GetYoutubeDisplayStatusMessageComposer.ts | 4 +- .../SetYoutubeDisplayPlaylistMessageComposer.ts | 4 +- .../src/messages/outgoing/room/index.ts | 1 + .../RoomNetworkOpenConnectionMessageComposer.ts | 4 +- .../UpdateRoomCategoryAndTradeSettingsComposer.ts | 4 +- .../outgoing/sound/AddJukeboxDiskComposer.ts | 4 +- .../sound/GetOfficialSongIdMessageComposer.ts | 4 +- .../outgoing/sound/RemoveJukeboxDiskComposer.ts | 4 +- .../tracking/PerformanceLogMessageComposer.ts | 4 +- .../catalog/GiftWrappingConfigurationParser.ts | 16 +- .../messages/parser/catalog/TargetedOfferData.ts | 4 +- .../lobby/AchievementResolutionsMessageParser.ts | 6 +- .../game/lobby/GameAchievementsMessageParser.ts | 12 +- .../parser/game/lobby/GameListMessageParser.ts | 8 +- .../parser/game/lobby/LoadGameMessageParser.ts | 6 +- .../messages/parser/game/score/LeaderboardEntry.ts | 14 +- .../src/messages/parser/groupforums/ForumData.ts | 4 +- .../parser/groupforums/GuildForumThread.ts | 8 +- .../inventory/achievements/AchievementParser.ts | 6 +- .../inventory/achievements/AchievementsParser.ts | 10 +- .../achievements/AchievementsScoreParser.ts | 6 +- .../parser/inventory/avatareffect/AvatarEffect.ts | 24 +- .../parser/inventory/badges/BadgeAndPointLimit.ts | 8 +- .../inventory/badges/BadgePointLimitsParser.ts | 18 +- .../parser/inventory/pets/PetFigureDataParser.ts | 2 +- .../inventory/pets/PetReceivedMessageParser.ts | 6 +- .../inventory/trading/TradingListItemParser.ts | 6 +- .../parser/landingview/PromoArticleData.ts | 18 +- .../messages/parser/moderation/CfhChatlogData.ts | 12 +- .../messages/parser/moderation/ChatRecordData.ts | 4 +- .../parser/moderation/IssueDeletedMessageParser.ts | 4 +- .../parser/moderation/IssueInfoMessageParser.ts | 38 +- .../messages/parser/moderation/IssueMessageData.ts | 20 +- .../moderation/IssuePickFailedMessageParser.ts | 18 +- .../src/messages/parser/moderation/ModRoomData.ts | 12 +- .../ModeratorToolPreferencesMessageParser.ts | 10 +- .../messages/parser/moderation/PatternMatchData.ts | 8 +- .../parser/moderation/RoomModerationData.ts | 14 +- .../messages/parser/moderation/RoomVisitData.ts | 10 +- .../messages/parser/moderation/RoomVisitsData.ts | 16 +- .../utils/CategoriesWithVisitorCountData.ts | 14 +- .../parser/navigator/utils/CompetitionRoomsData.ts | 14 +- .../navigator/utils/GuestRoomSearchResultData.ts | 18 +- .../navigator/utils/OfficialRoomEntryData.ts | 28 +- .../parser/navigator/utils/RoomEventData.ts | 42 +- .../src/messages/parser/poll/PollContentsParser.ts | 18 +- .../src/messages/parser/poll/PollQuestion.ts | 8 +- .../src/messages/parser/quest/PrizeData.ts | 14 +- .../parser/quest/QuestDailyMessageParser.ts | 4 +- .../src/messages/parser/quest/QuestMessageData.ts | 24 +- .../messages/parser/room/data/RoomDataParser.ts | 8 +- .../room/furniture/ChestDataMessageParser.ts | 134 ++ .../room/furniture/ChestFurniChunkMessageParser.ts | 43 + .../room/furniture/ChestFurniDeltaMessageParser.ts | 46 + .../room/furniture/ChestFurniStoredItemParser.ts | 54 + .../parser/room/furniture/ChestLogMessageParser.ts | 52 + .../room/furniture/ChestOpenMessageParser.ts | 26 + .../src/messages/parser/room/furniture/index.ts | 6 + .../furniture/youtube/YoutubeDisplayPlaylist.ts | 8 +- .../messages/parser/room/unit/RoomUnitParser.ts | 46 +- .../messages/parser/room/unit/UserMessageData.ts | 168 +-- .../src/messages/parser/roomevents/Triggerable.ts | 4 +- .../parser/roomsettings/RoomSettingsData.ts | 4 +- .../src/messages/parser/sound/PlayListEntry.ts | 4 +- .../parser/sound/TraxSongInfoMessageParser.ts | 6 +- .../sound/UserSongDisksInventoryMessageParser.ts | 12 +- .../src/messages/parser/user/ScrKickbackData.ts | 20 +- .../UserClassificationMessageParser.ts | 16 +- .../events/src/room/RoomBackgroundColorEvent.ts | 6 +- .../events/src/room/RoomEngineDimmerStateEvent.ts | 4 +- .../src/room/RoomEngineObjectPlacedOnUserEvent.ts | 4 +- .../src/room/RoomEngineSamplePlaybackEvent.ts | 4 +- .../events/src/room/RoomObjectBadgeAssetEvent.ts | 4 +- .../events/src/room/RoomObjectFloorHoleEvent.ts | 4 +- .../src/room/RoomObjectHSLColorEnableEvent.ts | 12 +- .../src/room/RoomObjectHSLColorEnabledEvent.ts | 12 +- packages/events/src/room/RoomObjectMouseEvent.ts | 16 +- packages/events/src/room/RoomObjectMoveEvent.ts | 4 +- .../src/room/RoomObjectSamplePlaybackEvent.ts | 4 +- packages/events/src/room/RoomSpriteMouseEvent.ts | 8 +- .../src/session/RoomSessionErrorMessageEvent.ts | 6 +- .../session/RoomSessionPetCommandsUpdateEvent.ts | 4 +- .../src/session/RoomSessionPetInfoUpdateEvent.ts | 6 +- .../events/src/session/RoomSessionPollEvent.ts | 34 +- .../events/src/session/RoomSessionPresentEvent.ts | 4 +- .../src/session/RoomSessionPropertyUpdateEvent.ts | 4 +- .../events/src/session/RoomSessionQueueEvent.ts | 18 +- .../src/session/RoomSessionUserBadgesEvent.ts | 8 +- .../events/src/session/RoomSessionUserTagsEvent.ts | 6 +- .../events/src/session/RoomSessionVoteEvent.ts | 12 +- .../events/src/session/RoomSessionWordQuizEvent.ts | 30 +- .../src/session/SessionDataPreferencesEvent.ts | 4 +- packages/events/src/sound/NowPlayingEvent.ts | 4 +- packages/events/src/sound/PlayListStatusEvent.ts | 4 +- .../src/sound/SongDiskInventoryReceivedEvent.ts | 4 +- packages/events/src/sound/SongInfoReceivedEvent.ts | 6 +- packages/localization/src/BadgeBaseAndLevel.ts | 4 +- packages/localization/src/LocalizationManager.ts | 4 +- packages/room/src/RoomContentLoader.ts | 8 +- packages/room/src/RoomEngine.ts | 310 ++--- packages/room/src/RoomMessageHandler.ts | 26 +- packages/room/src/RoomObjectEventHandler.ts | 417 +++--- packages/room/src/RoomObjectLogicFactory.ts | 3 + packages/room/src/RoomObjectManager.ts | 8 +- .../room/src/RoomObjectVisualizationFactory.ts | 6 + packages/room/src/RoomPreviewer.ts | 20 +- .../room/src/__tests__/RoomContentLoader.test.ts | 43 + .../src/messages/ObjectTileCursorUpdateMessage.ts | 4 +- .../room/src/object/RoomPlaneBitmapMaskData.ts | 4 +- .../room/src/object/RoomPlaneBitmapMaskParser.ts | 22 +- packages/room/src/object/RoomPlaneData.ts | 142 +- packages/room/src/object/RoomPlaneMaskData.ts | 10 +- packages/room/src/object/RoomPlaneParser.ts | 1469 ++++++++++---------- packages/room/src/object/RoomWallData.ts | 118 +- packages/room/src/object/logic/RoomLogic.ts | 56 +- .../room/src/object/logic/RoomObjectLogicBase.ts | 6 +- .../object/logic/furniture/FurnitureScoreLogic.ts | 14 +- .../logic/furniture/FurnitureVoteCounterLogic.ts | 20 +- .../visualization/avatar/AvatarVisualization.ts | 30 +- .../src/object/visualization/data/AnimationData.ts | 18 +- .../object/visualization/data/AnimationFrame.ts | 8 +- .../visualization/data/AnimationFrameData.ts | 4 +- .../object/visualization/data/AnimationSizeData.ts | 4 +- .../visualization/data/AnimationStateData.ts | 22 +- .../src/object/visualization/data/PetSizeData.ts | 20 +- .../furniture/FurnitureAnimatedVisualization.ts | 4 +- .../FurnitureAnimatedVisualizationData.ts | 4 +- .../furniture/FurnitureParticleSystem.ts | 10 +- .../furniture/FurnitureParticleSystemEmitter.ts | 8 +- .../furniture/FurnitureParticleSystemParticle.ts | 4 +- .../furniture/FurniturePartyBeamerVisualization.ts | 26 +- .../furniture/FurnitureVisualization.ts | 2 +- .../furniture/IsometricImageFurniVisualization.ts | 8 +- .../object/visualization/pet/PetVisualization.ts | 21 +- .../visualization/pet/PetVisualizationData.ts | 4 +- .../object/visualization/room/PlaneDrawingData.ts | 38 +- .../src/object/visualization/room/RoomPlane.ts | 64 +- .../visualization/room/RoomPlaneRectangleMask.ts | 10 +- .../object/visualization/room/RoomVisualization.ts | 122 +- .../object/visualization/room/mask/PlaneMask.ts | 28 +- .../visualization/room/mask/PlaneMaskBitmap.ts | 12 +- .../visualization/room/mask/PlaneMaskManager.ts | 20 +- .../room/mask/PlaneMaskVisualization.ts | 10 +- .../object/visualization/room/utils/Randomizer.ts | 92 +- packages/room/src/renderer/RoomSpriteCanvas.ts | 28 +- .../room/src/renderer/cache/RoomObjectCache.ts | 22 +- .../room/src/renderer/cache/RoomObjectCacheItem.ts | 4 +- .../room/src/renderer/utils/ObjectMouseData.ts | 8 +- .../room/src/utils/FurnitureStackingHeightMap.ts | 40 +- packages/room/src/utils/LegacyWallGeometry.ts | 228 +-- packages/room/src/utils/RoomCamera.ts | 122 +- packages/room/src/utils/RoomData.ts | 12 +- packages/room/src/utils/RoomEnterEffect.ts | 12 +- packages/room/src/utils/RoomGeometry.ts | 310 ++--- packages/room/src/utils/RoomInstanceData.ts | 16 +- packages/room/src/utils/RoomRotatingEffect.ts | 14 +- packages/room/src/utils/RoomShakingEffect.ts | 14 +- packages/room/src/utils/TileObjectMap.ts | 52 +- packages/room/src/utils/isWiredChestFloorItem.ts | 11 + packages/session/src/RoomPetData.ts | 80 +- packages/session/src/RoomUserData.ts | 144 +- packages/session/src/badge/BadgeImageManager.ts | 4 +- packages/session/src/furniture/FurnitureData.ts | 4 +- packages/sound/src/common/SongDataEntry.ts | 4 +- packages/sound/src/music/MusicController.ts | 126 +- packages/utils/src/AdvancedMap.ts | 2 +- packages/utils/src/ColorConverter.ts | 66 +- packages/utils/src/FurniId.ts | 4 +- packages/utils/src/GamedataLoader.ts | 4 +- packages/utils/src/Matrix4x4.ts | 110 +- packages/utils/src/NumberBank.ts | 22 +- packages/utils/src/PointMath.ts | 12 +- packages/utils/src/Vector3d.ts | 20 +- packages/utils/src/motion/Callback.ts | 8 +- packages/utils/src/motion/Combo.ts | 6 +- packages/utils/src/motion/Dispose.ts | 8 +- packages/utils/src/motion/DropBounce.ts | 20 +- packages/utils/src/motion/Ease.ts | 12 +- packages/utils/src/motion/EaseOut.ts | 8 +- packages/utils/src/motion/EaseRate.ts | 6 +- packages/utils/src/motion/JumpBy.ts | 8 +- packages/utils/src/motion/Motion.ts | 12 +- packages/utils/src/motion/Motions.ts | 94 +- packages/utils/src/motion/MoveBy.ts | 4 +- packages/utils/src/motion/MoveTo.ts | 14 +- packages/utils/src/motion/Queue.ts | 12 +- packages/utils/src/motion/ResizeTo.ts | 14 +- packages/utils/src/motion/Wait.ts | 10 +- 390 files changed, 4804 insertions(+), 3856 deletions(-) create mode 100644 packages/api/src/asset/avatar/IAssetAvatarCanvas.ts create mode 100644 packages/api/src/asset/avatar/IAssetAvatarGeometry.ts create mode 100644 packages/api/src/asset/avatar/index.ts create mode 100644 packages/communication/src/messages/incoming/room/furniture/ChestDataEvent.ts create mode 100644 packages/communication/src/messages/incoming/room/furniture/ChestFurniChunkEvent.ts create mode 100644 packages/communication/src/messages/incoming/room/furniture/ChestFurniDeltaEvent.ts create mode 100644 packages/communication/src/messages/incoming/room/furniture/ChestLogEvent.ts create mode 100644 packages/communication/src/messages/incoming/room/furniture/ChestOpenEvent.ts create mode 100644 packages/communication/src/messages/outgoing/room/PressKeybindComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestDepositComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestDepositFurniComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestDepositInventoryItemComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestOpenComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestRequestLogComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestSaveNotificationsComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestSaveSettingsComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestStartDepositComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestUpgradeCapacityComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestWithdrawAllFurniComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestWithdrawComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/ChestWithdrawFurniComposer.ts create mode 100644 packages/communication/src/messages/outgoing/room/furniture/chest/index.ts create mode 100644 packages/communication/src/messages/parser/room/furniture/ChestDataMessageParser.ts create mode 100644 packages/communication/src/messages/parser/room/furniture/ChestFurniChunkMessageParser.ts create mode 100644 packages/communication/src/messages/parser/room/furniture/ChestFurniDeltaMessageParser.ts create mode 100644 packages/communication/src/messages/parser/room/furniture/ChestFurniStoredItemParser.ts create mode 100644 packages/communication/src/messages/parser/room/furniture/ChestLogMessageParser.ts create mode 100644 packages/communication/src/messages/parser/room/furniture/ChestOpenMessageParser.ts create mode 100644 packages/room/src/__tests__/RoomContentLoader.test.ts create mode 100644 packages/room/src/utils/isWiredChestFloorItem.ts [?25l ⠋ Installing deps... ⠙ Installing deps... yarn install v1.22.22 ⠹ Installing deps... [1/4] Resolving packages... ⠸ Installing deps... [2/4] Fetching packages... ⠼ Installing deps... [3/4] Linking dependencies... warning " > @vitest/coverage-v8@4.1.6" has incorrect peer dependency "vitest@4.1.6". warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. warning Workspaces can only be enabled in private projects. ⠴ Installing deps... ⠦ Installing deps... ⠧ Installing deps... ⠇ Installing deps... ⠏ Installing deps... ⠋ Installing deps... ⠙ Installing deps... ⠹ Installing deps... ⠸ Installing deps... ⠼ Installing deps... ⠴ Installing deps... [4/4] Building fresh packages... Done in 1.42s. [?12l[?25h ✔ Done ✔ Renderer dependencies installed [2026-07-07 14:49:34] [OK] Renderer dependencies installed  Step 4/8 — Update & Build Nitro-V3  Saved working directory and index state WIP on main: 8be4f0a Merge pull request #278 from duckietm/Dev Your branch is up to date with 'origin/main'. Updating 8be4f0a..dfb5366 Fast-forward .github/workflows/ci.yml | 30 + public/configuration/UITexts_en.json5.example | 73 + public/configuration/UITexts_it.json5.example | 73 + src/api/utils/localizeWithFallback.ts | 10 +- src/api/wired/WiredActionLayoutCode.ts | 26 + src/api/wired/WiredConditionLayoutCode.ts | 5 + src/api/wired/WiredTriggerLayoutCode.ts | 5 + .../images/chest/icon_chest_capacity_exceeds.png | Bin 0 -> 1750 bytes src/assets/images/chest/icon_chest_donation.png | Bin 0 -> 1750 bytes src/assets/images/chest/icon_chest_empty.png | Bin 0 -> 1470 bytes src/assets/images/chest/icon_chest_full.png | Bin 0 -> 1750 bytes src/assets/images/chest/icon_chest_withdraw.png | Bin 0 -> 1750 bytes .../chest/light_coins_chest_balance_high.png | Bin 0 -> 36521 bytes .../images/chest/light_coins_chest_balance_low.png | Bin 0 -> 36747 bytes .../chest/light_coins_chest_balance_medium.png | Bin 0 -> 36775 bytes .../chest/light_coins_chest_balance_zero.png | Bin 0 -> 37057 bytes .../images/chest/variant_furni_chest_empty.png | Bin 0 -> 11226 bytes src/assets/images/chest/wired_chests_bell_icon.png | Bin 0 -> 257 bytes src/assets/images/chest/wired_chests_gear_icon.png | Bin 0 -> 214 bytes src/components/MainView.tsx | 2 + .../views/admin/CatalogAdminOfferEditView.tsx | 28 +- .../views/admin/CatalogAdminPageEditView.tsx | 41 +- src/components/discord/DiscordSettingsView.tsx | 196 +++ .../friends/views/friends-bar/FriendsBarView.tsx | 4 +- .../mod-tools/views/chatlog/ChatlogView.tsx | 70 +- .../views/tickets/ModToolsMyIssuesTabView.tsx | 92 +- .../views/tickets/ModToolsOpenIssuesTabView.tsx | 78 +- .../views/tickets/ModToolsPickedIssuesTabView.tsx | 72 +- .../views/user/ModToolsUserRoomVisitsView.tsx | 74 +- src/components/navigator/NavigatorView.tsx | 2 + .../navigator/views/NavigatorDoorStateView.tsx | 2 +- .../navigator/views/NavigatorRoomInfoView.tsx | 6 +- .../navigator/views/NavigatorRoomLinkView.tsx | 10 +- .../search/NavigatorSearchResultItemInfoView.tsx | 2 + .../views/search/NavigatorSearchResultItemView.tsx | 2 + src/components/purse/PurseView.tsx | 26 +- src/components/room/widgets/RoomKeybindView.tsx | 54 + src/components/room/widgets/RoomWidgetsView.tsx | 4 + .../room/widgets/furniture/ChestButton.tsx | 41 + .../room/widgets/furniture/FurniChestGridItem.tsx | 65 + .../room/widgets/furniture/FurniChestSearchBar.tsx | 39 + .../widgets/furniture/FurnitureAreaHideView.tsx | 5 +- .../room/widgets/furniture/FurnitureChestView.tsx | 815 ++++++++++ .../widgets/furniture/FurnitureCraftingView.tsx | 6 +- .../furniture/FurnitureExternalImageView.tsx | 7 +- .../widgets/furniture/FurnitureFriendFurniView.tsx | 16 +- .../FurnitureMysteryTrophyOpenDialogView.tsx | 8 +- .../widgets/furniture/FurnitureWidgetsView.tsx | 4 + .../room/widgets/furniture/chestFurniGrouping.ts | 59 + .../FurniturePlaylistEditorWidgetView.tsx | 6 +- .../widgets/pet-package/PetPackageWidgetView.tsx | 8 +- .../RoomFilterWordsWidgetView.tsx | 8 +- .../views/RoomPromoteEditWidgetView.tsx | 4 +- .../wired/views/ChestFurniIconPreview.tsx | 50 + .../wired/views/WiredComparisonOperator.tsx | 64 + .../wired/views/WiredFurniSelectorView.tsx | 13 +- src/components/wired/views/WiredHandItemField.tsx | 16 +- .../views/actions/WiredActionAdjustClockView.tsx | 6 +- .../views/actions/WiredActionBotDanceView.tsx | 58 + .../actions/WiredActionBotGiveHandItemView.tsx | 9 +- .../actions/WiredActionBotTalkToAvatarView.tsx | 2 +- .../wired/views/actions/WiredActionBotTalkView.tsx | 2 +- .../actions/WiredActionCancelTransactionView.tsx | 16 + .../wired/views/actions/WiredActionFreezeView.tsx | 4 +- .../WiredActionGiveCurrencyFromChestView.tsx | 77 + .../actions/WiredActionGiveFurniFromChestView.tsx | 77 + .../actions/WiredActionGiveOrTakeFurniView.tsx | 78 + .../actions/WiredActionGivePointsTypeView.tsx | 63 + .../views/actions/WiredActionGiveRewardView.tsx | 2 +- .../WiredActionGiveScoreToPredefinedTeamView.tsx | 6 +- .../views/actions/WiredActionGiveScoreView.tsx | 6 +- .../views/actions/WiredActionGiveVariableView.tsx | 4 +- .../actions/WiredActionInitTransactionView.tsx | 20 + .../wired/views/actions/WiredActionLayoutView.tsx | 78 + .../actions/WiredActionMoveAndRotateFurniView.tsx | 8 +- .../actions/WiredActionMoveFurniAsGroupView.tsx | 67 + .../views/actions/WiredActionMoveFurniToView.tsx | 4 +- .../views/actions/WiredActionMuteUserView.tsx | 2 +- .../views/actions/WiredActionPlaceFurniView.tsx | 116 ++ .../views/actions/WiredActionPlayYoutubeView.tsx | 56 + .../views/actions/WiredActionQuickBopperView.tsx | 51 + .../views/actions/WiredActionRemoveFurniView.tsx | 69 + .../actions/WiredActionRemoveVariableView.tsx | 4 +- .../views/actions/WiredActionSendSignalView.tsx | 4 +- .../actions/WiredActionSetRollerSpeedView.tsx | 39 + .../views/actions/WiredActionSetRoomAdView.tsx | 65 + .../actions/WiredActionToggleFurniStateView.tsx | 4 +- .../WiredConditionActorIsWearingBadgeView.tsx | 4 +- .../WiredConditionActorIsWearingEffectView.tsx | 4 +- .../WiredConditionChestHasItemTypeView.tsx | 65 + .../conditions/WiredConditionChestHasItemsView.tsx | 50 + .../conditions/WiredConditionHasAltitudeView.tsx | 2 +- .../conditions/WiredConditionHasVariableView.tsx | 4 +- .../views/conditions/WiredConditionLayoutView.tsx | 15 + .../conditions/WiredConditionMatchDateView.tsx | 14 +- .../WiredConditionNoBattleBanzaiView.tsx | 22 + .../WiredConditionTimeElapsedLessView.tsx | 4 +- .../WiredConditionTimeElapsedMoreView.tsx | 4 +- ...WiredConditionTriggerFurniAdjacentStateView.tsx | 37 + .../WiredConditionUserCountInRoomView.tsx | 2 +- .../WiredConditionUserOnFurniWithStateView.tsx | 85 ++ .../WiredConditionUserPerformsActionView.tsx | 4 +- .../WiredConditionVariableValueMatchView.tsx | 8 +- .../wired/views/extras/WiredChestCurrencyView.tsx | 60 + .../wired/views/extras/WiredChestFurniView.tsx | 47 + .../views/extras/WiredContractPaymentView.tsx | 41 + .../wired/views/extras/WiredContractRewardView.tsx | 41 + .../wired/views/extras/WiredContractTermRow.tsx | 80 + .../wired/views/extras/WiredContractTradeView.tsx | 65 + .../wired/views/extras/WiredCustomContractView.tsx | 58 + .../views/extras/WiredExtraAnimationTimeView.tsx | 4 +- .../extras/WiredExtraFilterByVariableView.tsx | 8 +- .../views/extras/WiredExtraFilterFurniView.tsx | 4 +- .../views/extras/WiredExtraFilterUserView.tsx | 4 +- .../views/extras/WiredExtraFurniVariableView.tsx | 4 +- .../views/extras/WiredExtraMovementCurveView.tsx | 55 + .../wired/views/extras/WiredExtraOrEvalView.tsx | 2 +- .../views/extras/WiredExtraQuestChainView.tsx | 40 + .../wired/views/extras/WiredExtraQuestView.tsx | 39 + .../extras/WiredExtraTextOutputFurniNameView.tsx | 6 +- .../extras/WiredExtraTextOutputVariableView.tsx | 4 +- .../views/extras/WiredExtraTimeUtilitiesView.tsx | 55 + .../extras/WiredExtraVariableLevelUpSystemView.tsx | 22 +- .../wired/views/extras/contractTermWire.ts | 110 ++ .../selectors/WiredSelectorFurniAltitudeView.tsx | 4 +- .../views/selectors/WiredSelectorRemoteView.tsx | 52 + .../WiredSelectorScanChestFurniByType.tsx | 52 + .../selectors/WiredSelectorUsersByActionView.tsx | 4 +- .../selectors/WiredSelectorWithVariableView.tsx | 4 +- .../WiredTriggerAvatarWalksOffFurniView.tsx | 3 +- .../triggers/WiredTriggerAvatarWalksOnFurni.tsx | 3 +- .../triggers/WiredTriggerBotReachedStuffView.tsx | 3 +- .../views/triggers/WiredTriggerClickFurniView.tsx | 3 + .../views/triggers/WiredTriggerClickTileView.tsx | 3 +- .../views/triggers/WiredTriggerDiceRolledView.tsx | 49 + .../views/triggers/WiredTriggerExecuteOnceView.tsx | 11 +- .../WiredTriggerExecutePeriodicallyShortView.tsx | 4 +- .../WiredTriggerExecutePeriodicallyView.tsx | 6 +- .../views/triggers/WiredTriggerLayoutView.tsx | 15 + .../triggers/WiredTriggerPressKeybindView.tsx | 60 + .../triggers/WiredTriggerReceiveSignalView.tsx | 4 +- .../triggers/WiredTriggerScoreAchievedView.tsx | 4 +- .../WiredTriggerTransactionCompleteView.tsx | 9 + .../triggers/WiredTriggerTransactionFailView.tsx | 9 + .../triggers/WiredTriggerUserGetsHandItemView.tsx | 49 + .../WiredTriggerUserPerformsActionView.tsx | 4 +- .../triggers/WiredTriggerVariableChangedView.tsx | 2 +- src/css/WiredView.css | 19 + src/css/friends/FriendsView.css | 39 +- src/css/index.css | 1560 ++++++++++++++++++++ src/css/purse/PurseView.css | 4 +- src/css/room/InfoStand.css | 18 +- src/css/room/NavigatorRoomSettings.css | 26 +- src/css/widgets/FurnitureWidgets.css | 140 +- src/hooks/discord/useDiscordSettings.ts | 53 + src/hooks/index.ts | 1 + src/hooks/navigator/useNavigatorSearch.ts | 14 + src/hooks/navigator/useNavigatorStore.ts | 16 + .../furniture/useFurnitureFriendFurniWidget.ts | 27 +- tsconfig.json | 3 + 160 files changed, 6151 insertions(+), 417 deletions(-) create mode 100644 src/assets/images/chest/icon_chest_capacity_exceeds.png create mode 100644 src/assets/images/chest/icon_chest_donation.png create mode 100644 src/assets/images/chest/icon_chest_empty.png create mode 100644 src/assets/images/chest/icon_chest_full.png create mode 100644 src/assets/images/chest/icon_chest_withdraw.png create mode 100644 src/assets/images/chest/light_coins_chest_balance_high.png create mode 100644 src/assets/images/chest/light_coins_chest_balance_low.png create mode 100644 src/assets/images/chest/light_coins_chest_balance_medium.png create mode 100644 src/assets/images/chest/light_coins_chest_balance_zero.png create mode 100644 src/assets/images/chest/variant_furni_chest_empty.png create mode 100644 src/assets/images/chest/wired_chests_bell_icon.png create mode 100644 src/assets/images/chest/wired_chests_gear_icon.png create mode 100644 src/components/discord/DiscordSettingsView.tsx create mode 100644 src/components/room/widgets/RoomKeybindView.tsx create mode 100644 src/components/room/widgets/furniture/ChestButton.tsx create mode 100644 src/components/room/widgets/furniture/FurniChestGridItem.tsx create mode 100644 src/components/room/widgets/furniture/FurniChestSearchBar.tsx create mode 100644 src/components/room/widgets/furniture/FurnitureChestView.tsx create mode 100644 src/components/room/widgets/furniture/chestFurniGrouping.ts create mode 100644 src/components/wired/views/ChestFurniIconPreview.tsx create mode 100644 src/components/wired/views/WiredComparisonOperator.tsx create mode 100644 src/components/wired/views/actions/WiredActionBotDanceView.tsx create mode 100644 src/components/wired/views/actions/WiredActionCancelTransactionView.tsx create mode 100644 src/components/wired/views/actions/WiredActionGiveCurrencyFromChestView.tsx create mode 100644 src/components/wired/views/actions/WiredActionGiveFurniFromChestView.tsx create mode 100644 src/components/wired/views/actions/WiredActionGiveOrTakeFurniView.tsx create mode 100644 src/components/wired/views/actions/WiredActionGivePointsTypeView.tsx create mode 100644 src/components/wired/views/actions/WiredActionInitTransactionView.tsx create mode 100644 src/components/wired/views/actions/WiredActionMoveFurniAsGroupView.tsx create mode 100644 src/components/wired/views/actions/WiredActionPlaceFurniView.tsx create mode 100644 src/components/wired/views/actions/WiredActionPlayYoutubeView.tsx create mode 100644 src/components/wired/views/actions/WiredActionQuickBopperView.tsx create mode 100644 src/components/wired/views/actions/WiredActionRemoveFurniView.tsx create mode 100644 src/components/wired/views/actions/WiredActionSetRollerSpeedView.tsx create mode 100644 src/components/wired/views/actions/WiredActionSetRoomAdView.tsx create mode 100644 src/components/wired/views/conditions/WiredConditionChestHasItemTypeView.tsx create mode 100644 src/components/wired/views/conditions/WiredConditionChestHasItemsView.tsx create mode 100644 src/components/wired/views/conditions/WiredConditionNoBattleBanzaiView.tsx create mode 100644 src/components/wired/views/conditions/WiredConditionTriggerFurniAdjacentStateView.tsx create mode 100644 src/components/wired/views/conditions/WiredConditionUserOnFurniWithStateView.tsx create mode 100644 src/components/wired/views/extras/WiredChestCurrencyView.tsx create mode 100644 src/components/wired/views/extras/WiredChestFurniView.tsx create mode 100644 src/components/wired/views/extras/WiredContractPaymentView.tsx create mode 100644 src/components/wired/views/extras/WiredContractRewardView.tsx create mode 100644 src/components/wired/views/extras/WiredContractTermRow.tsx create mode 100644 src/components/wired/views/extras/WiredContractTradeView.tsx create mode 100644 src/components/wired/views/extras/WiredCustomContractView.tsx create mode 100644 src/components/wired/views/extras/WiredExtraMovementCurveView.tsx create mode 100644 src/components/wired/views/extras/WiredExtraQuestChainView.tsx create mode 100644 src/components/wired/views/extras/WiredExtraQuestView.tsx create mode 100644 src/components/wired/views/extras/WiredExtraTimeUtilitiesView.tsx create mode 100644 src/components/wired/views/extras/contractTermWire.ts create mode 100644 src/components/wired/views/selectors/WiredSelectorRemoteView.tsx create mode 100644 src/components/wired/views/selectors/WiredSelectorScanChestFurniByType.tsx create mode 100644 src/components/wired/views/triggers/WiredTriggerDiceRolledView.tsx create mode 100644 src/components/wired/views/triggers/WiredTriggerPressKeybindView.tsx create mode 100644 src/components/wired/views/triggers/WiredTriggerTransactionCompleteView.tsx create mode 100644 src/components/wired/views/triggers/WiredTriggerTransactionFailView.tsx create mode 100644 src/components/wired/views/triggers/WiredTriggerUserGetsHandItemView.tsx create mode 100644 src/hooks/discord/useDiscordSettings.ts [?25l ⠋ Installing deps... ⠙ Installing deps... yarn install v1.22.22 [1/4] Resolving packages... ⠹ Installing deps... [2/4] Fetching packages... ⠸ Installing deps... ⠼ Installing deps... ⠴ Installing deps... ⠦ Installing deps... [3/4] Linking dependencies... warning " > @emoji-mart/react@1.1.1" has incorrect peer dependency "react@^16.8 || ^17 || ^18". warning "react-player > dash-video-element > dashjs > @svta/cml-cmcd@2.3.2" has unmet peer dependency "@svta/cml-structured-field-values@1.1.3". warning "react-player > dash-video-element > dashjs > @svta/cml-cmcd@2.3.2" has unmet peer dependency "@svta/cml-utils@1.5.0". warning "react-player > dash-video-element > dashjs > @svta/cml-cmsd@1.0.6" has unmet peer dependency "@svta/cml-cta@1.0.6". warning "react-player > dash-video-element > dashjs > @svta/cml-cmsd@1.0.6" has unmet peer dependency "@svta/cml-structured-field-values@1.1.3". warning "react-player > dash-video-element > dashjs > @svta/cml-cmsd@1.0.6" has unmet peer dependency "@svta/cml-utils@1.5.0". warning "react-player > dash-video-element > dashjs > @svta/cml-dash@1.0.6" has unmet peer dependency "@svta/cml-utils@1.5.0". warning "react-player > dash-video-element > dashjs > @svta/cml-id3@1.0.6" has unmet peer dependency "@svta/cml-utils@1.5.0". warning "react-player > dash-video-element > dashjs > @svta/cml-request@1.0.12" has unmet peer dependency "@svta/cml-utils@1.5.0". warning "react-player > dash-video-element > dashjs > @svta/cml-xml@1.1.4" has unmet peer dependency "@svta/cml-utils@1.5.0". warning " > eslint-plugin-react@7.37.5" has incorrect peer dependency "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7". warning Workspaces can only be enabled in private projects. ⠧ Installing deps... ⠇ Installing deps... ⠏ Installing deps... ⠋ Installing deps... ⠙ Installing deps... ⠹ Installing deps... ⠸ Installing deps... ⠼ Installing deps... ⠴ Installing deps... ⠦ Installing deps... ⠧ Installing deps... ⠇ Installing deps... [4/4] Building fresh packages... ⠏ Installing deps... Done in 1.90s. [?12l[?25h ✔ Done [?25l ⠋ Building frontend... ⠙ Building frontend... ⠹ Building frontend... ⠸ Building frontend... ⠼ Building frontend... ⠴ Building frontend... ⠦ Building frontend... ⠧ Building frontend... ⠇ Building frontend... ⠏ Building frontend... ⠋ Building frontend... ⠙ Building frontend... ⠹ Building frontend... ⠸ Building frontend... ⠼ Building frontend... ⠴ Building frontend... ⠦ Building frontend... ⠧ Building frontend... ⠇ Building frontend... ⠏ Building frontend... ⠋ Building frontend... ⠙ Building frontend... ⠹ Building frontend... ⠸ Building frontend... ⠼ Building frontend... ⠴ Building frontend... ⠦ Building frontend... ⠧ Building frontend... ⠇ Building frontend... ⠏ Building frontend... ⠋ Building frontend... ⠙ Building frontend... ⠹ Building frontend... ⠸ Building frontend... ⠼ Building frontend... ⠴ Building frontend... ⠦ Building frontend... ⠧ Building frontend... ⠇ Building frontend... ✓ built in 3.10s Done in 3.99s. [?12l[?25h ✔ Done  Step 5/8 — Sync Configurations  ✔ 18 config file(s) synced [2026-07-07 14:50:16] [OK] 18 config file(s) synced ➜ Applying critical config URLs... [2026-07-07 14:50:16] [INFO] Applying critical config URLs... [OK] Fixed: renderer-config.json [OK] Fixed: renderer-config.json [OK] Fixed: ui-config.json [OK] Fixed: ui-config.json ✔ All config URLs synced [2026-07-07 14:50:16] [OK] All config URLs synced  Step 6/8 — Cleanup  yarn cache v1.22.22 success Cleared cache. Done in 1.16s. ✔ Cleanup done (0 logs removed) [2026-07-07 14:50:18] [OK] Cleanup done (0 logs removed)  Step 7/8 — Set Permissions  ✔ Permissions set [2026-07-07 14:50:18] [OK] Permissions set  Step 8/8 — Restart Services  ✔ emulator restarted [2026-07-07 14:50:18] [OK] emulator restarted ✔ Nginx reloaded [2026-07-07 14:50:18] [OK] Nginx reloaded OK ✔ Redis flushed [2026-07-07 14:50:18] [OK] Redis flushed ╔══════════════════════════════════════════════════════════════════╗ ║ ✔ UPDATE COMPLETED SUCCESSFULLY ║ ╠══════════════════════════════════════════════════════════════════╣ ║ Duration: 2m 33s ║ ║ Updates: Yes ║ ║ Nitro build: Yes ║ ║ Warnings: 0 ║ ║ Repos: Emulator Nitro_Render_V3 Nitro-V3 ║ ╚══════════════════════════════════════════════════════════════════╝ Press Enter to continue... ╔═══════════════════════════════════════════════════════════════════════════╗ ║ ║ ║ ███████╗███╗ ███╗ █████╗ ██████╗ ████████╗ ║ ║ ██╔════╝████╗ ████║██╔══██╗██╔══██╗╚══██╔══╝ ║ ║ █████╗ ██╔████╔██║███████║██████╔╝ ██║ ║ ║ ██╔══╝ ██║╚██╔╝██║██╔══██║██╔══██╗ ██║ ║ ║ ███████╗██║ ╚═╝ ██║██║ ██║██║ ██║ ██║ ║ ║ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ║ ║ ║ ╠═══════════════════════════════════════════════════════════════════════════╣ ║  Emulator / Nitro-V3 / Nitro-V3-Render ║ ║  Updater by Remco — epicnabbo.nl ║ ╠═══════════════════════════════════════════════════════════════════════════╣ ║ Branch: main (2 detected) │ 14:50 ║ ╚═══════════════════════════════════════════════════════════════════════════╝   UPDATE  1) 🚀 Quick Update — branch: main 2) ⚡ Full Update (choose branch) 3) ⚙ Emulator Only 4) ⚙ Nitro-V3 Client Only 5) ⚙ Renderer Only 6) ⚙ Configs Only  TOOLS  7) 🔀 Switch Branch 8) 🗄 Database 9) 🛡 Backup / Restore 10) 🔧 Services 11) 📊 Status 12) ♥ Health Check 13) 🧹 Clean 14) 👁 Logs 15) ⚙ Config  ADVANCED  16) 🖥 Git Log 17) 🌐 Compare Branches 18) ⏱ Cron Scheduler 0) Exit Select [0-18]: [?12l[?25h[?12l[?25h