From b44d9439aaeade151c786265df175fcd09813c10 Mon Sep 17 00:00:00 2001 From: Beny Date: Mon, 6 May 2019 05:23:51 +0100 Subject: [PATCH 1/2] Pets remove from room when Habbo leaves or if the setting is disabled --- .../com/eu/habbo/habbohotel/rooms/Room.java | 65 ++++++++++++++----- .../habbo/habbohotel/rooms/RoomManager.java | 4 -- 2 files changed, 49 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java b/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java index 4815d2cd..5b124022 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java @@ -1023,6 +1023,8 @@ public class Room implements Comparable, ISerialize, Runnable } this.games.clear(); + removeAllPets(ownerId); + synchronized (this.roomItems) { TIntObjectIterator iterator = this.roomItems.iterator(); @@ -1086,22 +1088,6 @@ public class Room implements Comparable, ISerialize, Runnable } } - TIntObjectIterator petIterator = this.currentPets.iterator(); - for (int i = this.currentPets.size(); i-- > 0; ) - { - try - { - petIterator.advance(); - petIterator.value().needsUpdate = true; - Emulator.getThreading().run(petIterator.value()); - } - catch (NoSuchElementException e) - { - Emulator.getLogging().logErrorLine(e); - break; - } - } - this.currentBots.clear(); this.currentPets.clear(); } catch (Exception e) @@ -2386,6 +2372,48 @@ public class Room implements Comparable, ISerialize, Runnable public void setAllowPets(boolean allowPets) { this.allowPets = allowPets; + if(!allowPets) { + removeAllPets(ownerId); + } + } + + public void removeAllPets() { + removeAllPets(-1); + } + + /** + * Removes all pets from the room except if the owner id is excludeUserId + * @param excludeUserId Habbo id to keep pets + */ + public void removeAllPets(int excludeUserId) { + ArrayList removedPets = new ArrayList<>(); + synchronized (this.currentPets) { + for (Pet pet : this.currentPets.valueCollection()) { + try { + if (pet.getUserId() != excludeUserId) { + pet.setRoom(null); + removedPets.add(pet); + this.sendComposer(new RoomUserRemoveComposer(pet.getRoomUnit()).compose()); + + Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(pet.getUserId()); + if (habbo != null) { + habbo.getInventory().getPetsComponent().addPet(pet); + habbo.getClient().sendResponse(new AddPetComposer(pet)); + } + } + + pet.needsUpdate = true; + pet.run(); + } catch (NoSuchElementException e) { + Emulator.getLogging().logErrorLine(e); + break; + } + } + } + + for (Pet pet : removedPets) { + this.currentPets.remove(pet.getId()); + } } public void setAllowPetsEat(boolean allowPetsEat) @@ -3201,6 +3229,11 @@ public class Room implements Comparable, ISerialize, Runnable trade.stopTrade(habbo); } + if (habbo.getHabboInfo().getId() != this.ownerId) + { + this.pickupPetsForHabbo(habbo); + } + this.updateDatabaseUserCount(); } diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java index 65c04443..bb77a5e1 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java @@ -1099,10 +1099,6 @@ public class RoomManager { habbo.getRoomUnit().setPathFinderRoom(null); - if (!room.isOwner(habbo)) - { - room.pickupPetsForHabbo(habbo); - } this.logExit(habbo); room.removeHabbo(habbo); From 74f4f0eb70ebb503fc37f27591f33eda4719c34a Mon Sep 17 00:00:00 2001 From: Beny Date: Mon, 6 May 2019 05:37:52 +0100 Subject: [PATCH 2/2] Fixed bugs with horse riding settings --- .../com/eu/habbo/habbohotel/commands/TestCommand.java | 2 +- .../rooms/pets/RequestPetInformationEvent.java | 2 +- .../outgoing/rooms/pets/PetInformationComposer.java | 11 +++++++---- .../rooms/pets/RoomPetHorseFigureComposer.java | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/TestCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/TestCommand.java index 34ef9372..5f3ffe0b 100644 --- a/src/main/java/com/eu/habbo/habbohotel/commands/TestCommand.java +++ b/src/main/java/com/eu/habbo/habbohotel/commands/TestCommand.java @@ -157,7 +157,7 @@ public class TestCommand extends Command ((MonsterplantPet) pet).setPubliclyBreedable(false); ((MonsterplantPet) pet).setCanBreed(true); gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new PetStatusUpdateComposer(pet).compose()); - gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new PetInformationComposer(pet, gameClient.getHabbo().getHabboInfo().getCurrentRoom()).compose()); + gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new PetInformationComposer(pet, gameClient.getHabbo().getHabboInfo().getCurrentRoom(), gameClient.getHabbo()).compose()); } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/pets/RequestPetInformationEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/pets/RequestPetInformationEvent.java index 74648373..11c71438 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/pets/RequestPetInformationEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/pets/RequestPetInformationEvent.java @@ -21,7 +21,7 @@ public class RequestPetInformationEvent extends MessageHandler if(pet != null) { - this.client.sendResponse(new PetInformationComposer(pet, room)); + this.client.sendResponse(new PetInformationComposer(pet, room, this.client.getHabbo())); } } } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/PetInformationComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/PetInformationComposer.java index 716c2783..a21f8948 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/PetInformationComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/PetInformationComposer.java @@ -3,6 +3,7 @@ package com.eu.habbo.messages.outgoing.rooms.pets; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.pets.*; import com.eu.habbo.habbohotel.rooms.Room; +import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.MessageComposer; import com.eu.habbo.messages.outgoing.Outgoing; @@ -11,11 +12,13 @@ public class PetInformationComposer extends MessageComposer { private final Pet pet; private final Room room; + private final Habbo requestingHabbo; - public PetInformationComposer(Pet pet, Room room) + public PetInformationComposer(Pet pet, Room room, Habbo requestingHabbo) { this.pet = pet; this.room = room; + this.requestingHabbo = requestingHabbo; } @Override @@ -54,10 +57,10 @@ public class PetInformationComposer extends MessageComposer this.response.appendString(this.room.getFurniOwnerName(this.pet.getUserId())); //Owner name this.response.appendInt(this.pet instanceof MonsterplantPet ? ((MonsterplantPet) this.pet).getRarity() : 0); - this.response.appendBoolean(this.pet instanceof RideablePet && ((RideablePet) this.pet).hasSaddle()); - this.response.appendBoolean(this.pet instanceof RideablePet && ((RideablePet) this.pet).getRider() != null); + this.response.appendBoolean(this.pet instanceof RideablePet && this.requestingHabbo != null && (((RideablePet) this.pet).getRider() == null || this.pet.getUserId() == this.requestingHabbo.getHabboInfo().getId()) && ((RideablePet) this.pet).hasSaddle()); // can ride + this.response.appendBoolean(this.pet instanceof RideablePet && ((RideablePet) this.pet).getRider() != null && this.requestingHabbo != null && ((RideablePet) this.pet).getRider().getHabboInfo().getId() == this.requestingHabbo.getHabboInfo().getId()); // is current user riding this.response.appendInt(0); - this.response.appendInt(this.pet instanceof RideablePet && ((RideablePet) this.pet).anyoneCanRide() ? 1 : 0); + this.response.appendInt(this.pet instanceof RideablePet && ((RideablePet) this.pet).anyoneCanRide() ? 1 : 0); // anyone can ride this.response.appendBoolean(this.pet instanceof MonsterplantPet && ((MonsterplantPet) this.pet).canBreed()); //State Grown this.response.appendBoolean(!(this.pet instanceof MonsterplantPet && ((MonsterplantPet) this.pet).isFullyGrown())); //unknown 1 this.response.appendBoolean(this.pet instanceof MonsterplantPet && ((MonsterplantPet) this.pet).isDead()); //Dead diff --git a/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/RoomPetHorseFigureComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/RoomPetHorseFigureComposer.java index a97c9afb..56922ef6 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/RoomPetHorseFigureComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/rooms/pets/RoomPetHorseFigureComposer.java @@ -51,7 +51,7 @@ public class RoomPetHorseFigureComposer extends MessageComposer this.response.appendInt(this.pet.getHairColor()); } this.response.appendBoolean(this.pet.hasSaddle()); - this.response.appendBoolean(this.pet.anyoneCanRide()); + this.response.appendBoolean(false); // this.pet.anyoneCanRide() return this.response; } }