You've already forked Arcturus-Morningstar-Extended
mirror of
https://github.com/duckietm/Arcturus-Morningstar-Extended.git
synced 2026-06-19 15:06:19 +00:00
a0910d822c
Regressions found by an adversarial review of this branch's own diff: - RoomCycleManager: stop holding the currentBots/currentPets monitor across the whole bot/pet tick — snapshot under the lock then cycle off-lock. The previous fix blocked place/pickup and room dispose for the full tick and inverted lock order vs roomUnitLock->currentBots (latent deadlock for any future cycle code touching roomUnitLock). - HabboInfo: complete the currencyLock invariant — getCurrencies() now returns a snapshot under the lock (UserInfoCommand iterated the live Trove map off-lock, the exact rehash corruption the lock guards); canBuy() uses the lock-guarded getCredits()/getCurrencyAmount(); run() reads credits under the lock for save. - RoomSpecialTypes: synchronize the by-id pet getters (getNest/getPetDrink/ getPetFood/getPetToy/getPetTree) to match their now-synchronized mutators. - AuthHttpUtil.isTrustedProxy: exact-match trusted IPs; only treat an entry as a range when it ends with "."/":" so "10.0.0.1" can't also trust "10.0.0.12". Pre-existing logic bugs found by the deep subsystem analysis: - RoomUsersComposer: the bulk (room-entry) branch wrote the guild id twice; the second field must be the 1/-1 group-membership flag (matches the single branch) — every user showed a wrong group indicator on room entry. - BotManager.pickUpBot: room owners (and ACC_PLACEFURNI) couldn't pick up bots placed in their own room — added the room-owner clause that placeBot has. - PetPickupEvent: compared user id to pet.getId() instead of pet.getUserId(), so a pet owner who isn't the room owner couldn't pick up their own pet. - RoomRightsManager.refreshRightsForHabbo: in guild rooms, explicit room_rights were stripped (overwritten by guild level NONE); now takes the stronger of explicit rights and guild level. - RoomRequestBannedUsersEvent: `!hasRights || !ACC_ANYROOMOWNER` required BOTH, denying legitimate owners the banned-users list — corrected to `&&`. - InteractionPetBreedingNest.breed: a crafted packet on a not-full nest deleted the nest furni then NPE'd (furni loss); guard petOne/petTwo/room before the destructive delete; ConfirmPetBreedingEvent null-checks the room. - WiredEffectTeleport/UserFurniBase: appended item id instead of sprite id in the incompatible-triggers list (cosmetic wired-dialog mismatch) — matched the ~10 other effects' getBaseItem().getSpriteId() convention.