From 7fef24fa85d7494fe938148c9dc2b0a2522b95a7 Mon Sep 17 00:00:00 2001 From: brenoepic <59066707+brenoepics@users.noreply.github.com> Date: Mon, 11 Apr 2022 20:21:11 -0300 Subject: [PATCH] Trampoline interaction --- .../habbo/habbohotel/items/ItemManager.java | 1 + .../pets/InteractionPetTrampoline.java | 102 ++++++++++++++++++ .../com/eu/habbo/habbohotel/pets/Pet.java | 8 +- .../com/eu/habbo/habbohotel/pets/PetData.java | 16 +-- .../eu/habbo/habbohotel/pets/PetManager.java | 4 +- .../habbohotel/pets/actions/ActionHang.java | 2 +- .../habbohotel/pets/actions/ActionJump.java | 10 +- .../pets/actions/ActionRingOfFire.java | 2 +- .../habbohotel/pets/actions/ActionRoll.java | 2 +- .../habbohotel/pets/actions/ActionSwing.java | 2 +- .../com/eu/habbo/habbohotel/rooms/Room.java | 4 + 11 files changed, 131 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/eu/habbo/habbohotel/items/interactions/pets/InteractionPetTrampoline.java diff --git a/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java b/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java index 17b3c05c..0e492e59 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java @@ -134,6 +134,7 @@ public class ItemManager { this.interactionsList.add(new ItemInteraction("pet_food", InteractionPetFood.class)); this.interactionsList.add(new ItemInteraction("pet_toy", InteractionPetToy.class)); this.interactionsList.add(new ItemInteraction("pet_tree", InteractionPetTree.class)); + this.interactionsList.add(new ItemInteraction("pet_trampoline", InteractionPetTrampoline.class)); this.interactionsList.add(new ItemInteraction("breeding_nest", InteractionPetBreedingNest.class)); this.interactionsList.add(new ItemInteraction("obstacle", InteractionObstacle.class)); this.interactionsList.add(new ItemInteraction("monsterplant_seed", InteractionMonsterPlantSeed.class)); diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/pets/InteractionPetTrampoline.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/pets/InteractionPetTrampoline.java new file mode 100644 index 00000000..9b21744d --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/pets/InteractionPetTrampoline.java @@ -0,0 +1,102 @@ +package com.eu.habbo.habbohotel.items.interactions.pets; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.gameclients.GameClient; +import com.eu.habbo.habbohotel.items.Item; +import com.eu.habbo.habbohotel.items.interactions.InteractionDefault; +import com.eu.habbo.habbohotel.pets.Pet; +import com.eu.habbo.habbohotel.pets.PetTasks; +import com.eu.habbo.habbohotel.rooms.*; +import com.eu.habbo.habbohotel.users.HabboItem; +import com.eu.habbo.threading.runnables.PetClearPosture; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class InteractionPetTrampoline extends InteractionDefault { + public InteractionPetTrampoline(ResultSet set, Item baseItem) throws SQLException { + super(set, baseItem); + this.setExtradata("0"); + } + + public InteractionPetTrampoline(int id, int userId, Item item, String extradata, int limitedStack, int limitedSells) { + super(id, userId, item, extradata, limitedStack, limitedSells); + this.setExtradata("0"); + } + + @Override + public void onClick(GameClient client, Room room, Object[] objects) {} + + @Override + public void onMove(Room room, RoomTile oldLocation, RoomTile newLocation) { + this.setExtradata("0"); + room.updateItem(this); + + for (Pet pet : room.getPetsAt(oldLocation)) { + pet.getRoomUnit().removeStatus(RoomUnitStatus.JUMP); + pet.packetUpdate = true; + } + } + + @Override + public void onPickUp(Room room) { + this.setExtradata("0"); + + for (Pet pet : room.getPetsOnItem(this)) { + pet.getRoomUnit().removeStatus(RoomUnitStatus.JUMP); + pet.packetUpdate = true; + } + } + + @Override + public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception { + super.onWalkOn(roomUnit, room, objects); + + Pet pet = room.getPet(roomUnit); + + if (pet != null && pet.getPetData().haveToyItem(this.getBaseItem()) && this.getOccupyingTiles(room.getLayout()).contains(pet.getRoomUnit().getGoal())) { + if (pet.getEnergy() <= 35) { + return; + } + + pet.clearPosture(); + pet.setTask(PetTasks.JUMP); + pet.getRoomUnit().setStatus(RoomUnitStatus.JUMP, ""); + Emulator.getThreading().run(() -> { + new PetClearPosture(pet, RoomUnitStatus.JUMP, null, false); + pet.getRoomUnit().setGoalLocation(room.getRandomWalkableTile()); + this.setExtradata("0"); + room.updateItemState(this); + }, 4000); + pet.addHappyness(25); + + this.setExtradata("1"); + room.updateItemState(this); + } + } + + @Override + public void onWalkOff(RoomUnit roomUnit, Room room, Object[] objects) throws Exception { + super.onWalkOff(roomUnit, room, objects); + + Pet pet = room.getPet(roomUnit); + + if (pet != null) { + this.setExtradata("0"); + room.updateItem(this); + pet.getRoomUnit().removeStatus(RoomUnitStatus.JUMP); + pet.packetUpdate = true; + } + } + + @Override + public boolean canWalkOn(RoomUnit roomUnit, Room room, Object[] objects) { + Pet pet = room.getPet(roomUnit); + return roomUnit.getRoomUnitType() == RoomUnitType.PET && pet != null && pet.getPetData().haveToyItem(this.getBaseItem()); + } + + @Override + public boolean allowWiredResetState() { + return false; + } +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/pets/Pet.java b/src/main/java/com/eu/habbo/habbohotel/pets/Pet.java index 70147f37..2ddfac92 100644 --- a/src/main/java/com/eu/habbo/habbohotel/pets/Pet.java +++ b/src/main/java/com/eu/habbo/habbohotel/pets/Pet.java @@ -389,9 +389,7 @@ public class Pet implements ISerialize, Runnable { keys.put(RoomUnitStatus.GESTURE, this.roomUnit.getStatus(RoomUnitStatus.GESTURE)); if (this.task == null) { - boolean isDead = false; - if (this.roomUnit.hasStatus(RoomUnitStatus.RIP)) - isDead = true; + boolean isDead = this.roomUnit.hasStatus(RoomUnitStatus.RIP); this.roomUnit.clearStatus(); @@ -505,8 +503,8 @@ public class Pet implements ISerialize, Runnable { return false; } - public boolean findTree(PetTasks task) { - HabboItem item = this.petData.randomTreeItem(this.room.getRoomSpecialTypes().getItemsOfType(InteractionPetTree.class)); + public boolean findPetItem(PetTasks task, Class type) { + HabboItem item = this.petData.randomToyHabboItem(this.room.getRoomSpecialTypes().getItemsOfType(type)); if (item != null) { this.roomUnit.setCanWalk(true); diff --git a/src/main/java/com/eu/habbo/habbohotel/pets/PetData.java b/src/main/java/com/eu/habbo/habbohotel/pets/PetData.java index 592358f0..dabbf764 100644 --- a/src/main/java/com/eu/habbo/habbohotel/pets/PetData.java +++ b/src/main/java/com/eu/habbo/habbohotel/pets/PetData.java @@ -230,18 +230,18 @@ public class PetData implements Comparable { return null; } - public HabboItem randomTreeItem(THashSet trees) { - List treeList = new ArrayList<>(); + public HabboItem randomToyHabboItem(THashSet items) { + List itemList = new ArrayList<>(); - for (HabboItem tree : trees) { - if (this.haveToyItem(tree)) { - treeList.add(tree); + for (HabboItem item : items) { + if (this.haveToyItem(item)) { + itemList.add(item); } } - if (!treeList.isEmpty()) { - Collections.shuffle(treeList); - return treeList.get(0); + if (!itemList.isEmpty()) { + Collections.shuffle(itemList); + return itemList.get(0); } return null; diff --git a/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java b/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java index a9764e0d..f1da909d 100644 --- a/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java @@ -208,7 +208,7 @@ public class PetManager { PetData.generalFoodItems.add(baseItem); else if (baseItem.getInteractionType().getType() == InteractionPetDrink.class) PetData.generalDrinkItems.add(baseItem); - else if (baseItem.getInteractionType().getType() == InteractionPetToy.class || baseItem.getInteractionType().getType() == InteractionPetTree.class) + else if (baseItem.getInteractionType().getType() == InteractionPetToy.class || baseItem.getInteractionType().getType() == InteractionPetTree.class || baseItem.getInteractionType().getType() == InteractionPetTrampoline.class) PetData.generalToyItems.add(baseItem); } else { PetData data = this.getPetData(set.getInt("pet_id")); @@ -220,7 +220,7 @@ public class PetManager { data.addFoodItem(baseItem); else if (baseItem.getInteractionType().getType() == InteractionPetDrink.class) data.addDrinkItem(baseItem); - else if (baseItem.getInteractionType().getType() == InteractionPetToy.class || baseItem.getInteractionType().getType() == InteractionPetTree.class) + else if (baseItem.getInteractionType().getType() == InteractionPetToy.class || baseItem.getInteractionType().getType() == InteractionPetTree.class || baseItem.getInteractionType().getType() == InteractionPetTrampoline.class) data.addToyItem(baseItem); } } diff --git a/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionHang.java b/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionHang.java index f78b4642..0d610ee5 100644 --- a/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionHang.java +++ b/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionHang.java @@ -18,7 +18,7 @@ public class ActionHang extends PetAction { @Override public boolean apply(Pet pet, Habbo habbo, String[] data) { - boolean findTree = pet.findTree(PetTasks.HANG); + boolean findTree = pet.findPetItem(PetTasks.HANG, InteractionPetTree.class); if (!findTree && pet.getPetData().getToyItems().stream().noneMatch(item -> item.getInteractionType().getType() == InteractionPetTree.class)) { pet.getRoomUnit().setCanWalk(false); pet.getRoomUnit().setStatus(RoomUnitStatus.HANG, pet.getRoomUnit().getCurrentLocation().getStackHeight() + ""); diff --git a/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionJump.java b/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionJump.java index 151ef22a..05042f21 100644 --- a/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionJump.java +++ b/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionJump.java @@ -1,25 +1,29 @@ package com.eu.habbo.habbohotel.pets.actions; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetTrampoline; +import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetTree; import com.eu.habbo.habbohotel.pets.Pet; import com.eu.habbo.habbohotel.pets.PetAction; import com.eu.habbo.habbohotel.pets.PetTasks; import com.eu.habbo.habbohotel.pets.PetVocalsType; import com.eu.habbo.habbohotel.rooms.RoomUnitStatus; import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.threading.runnables.PetClearPosture; public class ActionJump extends PetAction { public ActionJump() { - super(PetTasks.JUMP, true); + super(null, false); this.minimumActionDuration = 2000; - this.statusToSet.add(RoomUnitStatus.JUMP); } @Override public boolean apply(Pet pet, Habbo habbo, String[] data) { - pet.clearPosture(); + if(pet.findPetItem(PetTasks.JUMP, InteractionPetTrampoline.class)) return true; + pet.clearPosture(); + pet.setTask(PetTasks.JUMP); Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.JUMP, null, false), this.minimumActionDuration); if (pet.getHappyness() > 60) diff --git a/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionRingOfFire.java b/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionRingOfFire.java index c22531de..fcaaee3f 100644 --- a/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionRingOfFire.java +++ b/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionRingOfFire.java @@ -18,7 +18,7 @@ public class ActionRingOfFire extends PetAction { @Override public boolean apply(Pet pet, Habbo habbo, String[] data) { - boolean findTree = pet.findTree(PetTasks.RING_OF_FIRE); + boolean findTree = pet.findPetItem(PetTasks.RING_OF_FIRE, InteractionPetTree.class); if (!findTree && pet.getPetData().getToyItems().stream().noneMatch(item -> item.getInteractionType().getType() == InteractionPetTree.class)) { pet.getRoomUnit().setCanWalk(false); pet.getRoomUnit().setStatus(RoomUnitStatus.RINGOFFIRE, pet.getRoomUnit().getCurrentLocation().getStackHeight() + ""); diff --git a/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionRoll.java b/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionRoll.java index 3f8dc9af..8a757d5f 100644 --- a/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionRoll.java +++ b/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionRoll.java @@ -18,7 +18,7 @@ public class ActionRoll extends PetAction { @Override public boolean apply(Pet pet, Habbo habbo, String[] data) { - boolean findTree = pet.findTree(PetTasks.ROLL); + boolean findTree = pet.findPetItem(PetTasks.ROLL, InteractionPetTree.class); if (!findTree && pet.getPetData().getToyItems().stream().noneMatch(item -> item.getInteractionType().getType() == InteractionPetTree.class)) { pet.getRoomUnit().setCanWalk(false); pet.getRoomUnit().setStatus(RoomUnitStatus.ROLL, pet.getRoomUnit().getCurrentLocation().getStackHeight() + ""); diff --git a/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionSwing.java b/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionSwing.java index 487156ec..3ca54d83 100644 --- a/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionSwing.java +++ b/src/main/java/com/eu/habbo/habbohotel/pets/actions/ActionSwing.java @@ -18,7 +18,7 @@ public class ActionSwing extends PetAction { @Override public boolean apply(Pet pet, Habbo habbo, String[] data) { - boolean findTree = pet.findTree(PetTasks.SWING); + boolean findTree = pet.findPetItem(PetTasks.SWING, InteractionPetTree.class); if (!findTree && pet.getPetData().getToyItems().stream().noneMatch(item -> item.getInteractionType().getType() == InteractionPetTree.class)) { pet.getRoomUnit().setCanWalk(false); pet.getRoomUnit().setStatus(RoomUnitStatus.SWING, pet.getRoomUnit().getCurrentLocation().getStackHeight() + ""); 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 8036e661..b49765c1 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java @@ -2394,6 +2394,8 @@ public class Room implements Comparable, ISerialize, Runnable { this.roomSpecialTypes.addPetToy((InteractionPetToy) item); } else if (item instanceof InteractionPetTree) { this.roomSpecialTypes.addUndefined(item); + } else if (item instanceof InteractionPetTrampoline) { + this.roomSpecialTypes.addUndefined(item); } else if (item instanceof InteractionMoodLight) { this.roomSpecialTypes.addUndefined(item); } else if (item instanceof InteractionPyramid) { @@ -2548,6 +2550,8 @@ public class Room implements Comparable, ISerialize, Runnable { this.roomSpecialTypes.removePetToy((InteractionPetToy) item); } else if (item instanceof InteractionPetTree) { this.roomSpecialTypes.removeUndefined(item); + } else if (item instanceof InteractionPetTrampoline) { + this.roomSpecialTypes.removeUndefined(item); } else if (item instanceof InteractionMoodLight) { this.roomSpecialTypes.removeUndefined(item); } else if (item instanceof InteractionPyramid) {