mirror of
https://git.krews.org/morningstar/Arcturus-Community.git
synced 2024-11-23 15:20:52 +01:00
Merge branch 'fix-pets-finally' into 'fix-pets-finally'
Code cleanup + InteractionPetToy + InteractionPetDrink See merge request morningstar/Arcturus-Community!534
This commit is contained in:
commit
281a611cc7
@ -134,6 +134,7 @@ public class ItemManager {
|
|||||||
this.interactionsList.add(new ItemInteraction("pet_food", InteractionPetFood.class));
|
this.interactionsList.add(new ItemInteraction("pet_food", InteractionPetFood.class));
|
||||||
this.interactionsList.add(new ItemInteraction("pet_toy", InteractionPetToy.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_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("breeding_nest", InteractionPetBreedingNest.class));
|
||||||
this.interactionsList.add(new ItemInteraction("obstacle", InteractionObstacle.class));
|
this.interactionsList.add(new ItemInteraction("obstacle", InteractionObstacle.class));
|
||||||
this.interactionsList.add(new ItemInteraction("monsterplant_seed", InteractionMonsterPlantSeed.class));
|
this.interactionsList.add(new ItemInteraction("monsterplant_seed", InteractionMonsterPlantSeed.class));
|
||||||
|
@ -2,21 +2,27 @@ package com.eu.habbo.habbohotel.items.interactions.pets;
|
|||||||
|
|
||||||
import com.eu.habbo.Emulator;
|
import com.eu.habbo.Emulator;
|
||||||
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
||||||
|
import com.eu.habbo.habbohotel.gameclients.GameClient;
|
||||||
import com.eu.habbo.habbohotel.items.Item;
|
import com.eu.habbo.habbohotel.items.Item;
|
||||||
import com.eu.habbo.habbohotel.items.interactions.InteractionDefault;
|
import com.eu.habbo.habbohotel.items.interactions.InteractionDefault;
|
||||||
import com.eu.habbo.habbohotel.pets.Pet;
|
import com.eu.habbo.habbohotel.pets.Pet;
|
||||||
import com.eu.habbo.habbohotel.pets.PetTasks;
|
import com.eu.habbo.habbohotel.pets.PetTasks;
|
||||||
import com.eu.habbo.habbohotel.rooms.Room;
|
import com.eu.habbo.habbohotel.rooms.*;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomUnit;
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomUnitStatus;
|
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomUserRotation;
|
|
||||||
import com.eu.habbo.messages.outgoing.rooms.users.RoomUserStatusComposer;
|
|
||||||
import com.eu.habbo.threading.runnables.PetClearPosture;
|
import com.eu.habbo.threading.runnables.PetClearPosture;
|
||||||
|
import com.eu.habbo.threading.runnables.RoomUnitWalkToLocation;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class InteractionPetDrink extends InteractionDefault {
|
public class InteractionPetDrink extends InteractionDefault {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(InteractionPetDrink.class);
|
||||||
|
|
||||||
|
|
||||||
public InteractionPetDrink(ResultSet set, Item baseItem) throws SQLException {
|
public InteractionPetDrink(ResultSet set, Item baseItem) throws SQLException {
|
||||||
super(set, baseItem);
|
super(set, baseItem);
|
||||||
}
|
}
|
||||||
@ -25,28 +31,64 @@ public class InteractionPetDrink extends InteractionDefault {
|
|||||||
super(id, userId, item, extradata, limitedStack, limitedSells);
|
super(id, userId, item, extradata, limitedStack, limitedSells);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canToggle(Habbo habbo, Room room) {
|
||||||
|
return RoomLayout.tilesAdjecent(room.getLayout().getTile(this.getX(), this.getY()), habbo.getRoomUnit().getCurrentLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(GameClient client, Room room, Object[] objects) throws Exception {
|
||||||
|
if (client == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!this.canToggle(client.getHabbo(), room)) {
|
||||||
|
RoomTile closestTile = null;
|
||||||
|
for (RoomTile tile : room.getLayout().getTilesAround(room.getLayout().getTile(this.getX(), this.getY()))) {
|
||||||
|
if (tile.isWalkable() && (closestTile == null || closestTile.distance(client.getHabbo().getRoomUnit().getCurrentLocation()) > tile.distance(client.getHabbo().getRoomUnit().getCurrentLocation()))) {
|
||||||
|
closestTile = tile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (closestTile != null && !closestTile.equals(client.getHabbo().getRoomUnit().getCurrentLocation())) {
|
||||||
|
List<Runnable> onSuccess = new ArrayList<>();
|
||||||
|
onSuccess.add(() -> {
|
||||||
|
this.change(room, this.getBaseItem().getStateCount() - 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
client.getHabbo().getRoomUnit().setGoalLocation(closestTile);
|
||||||
|
Emulator.getThreading().run(new RoomUnitWalkToLocation(client.getHabbo().getRoomUnit(), closestTile, room, onSuccess, new ArrayList<>()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
|
public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
|
||||||
super.onWalkOn(roomUnit, room, objects);
|
super.onWalkOn(roomUnit, room, objects);
|
||||||
|
|
||||||
|
if (this.getExtradata() == null || this.getExtradata().isEmpty())
|
||||||
|
this.setExtradata("0");
|
||||||
|
|
||||||
Pet pet = room.getPet(roomUnit);
|
Pet pet = room.getPet(roomUnit);
|
||||||
|
|
||||||
if (pet != null) {
|
if (pet != null && pet.getPetData().haveDrinkItem(this) && pet.levelThirst >= 35) {
|
||||||
if (pet.getPetData().haveDrinkItem(this)) {
|
pet.clearPosture();
|
||||||
if (pet.levelThirst >= 35) {
|
pet.getRoomUnit().setGoalLocation(room.getLayout().getTile(this.getX(), this.getY()));
|
||||||
pet.setTask(PetTasks.EAT);
|
pet.getRoomUnit().setRotation(RoomUserRotation.values()[this.getRotation()]);
|
||||||
pet.getRoomUnit().setGoalLocation(room.getLayout().getTile(this.getX(), this.getY()));
|
pet.getRoomUnit().clearStatus();
|
||||||
pet.getRoomUnit().setRotation(RoomUserRotation.values()[this.getRotation()]);
|
pet.getRoomUnit().setStatus(RoomUnitStatus.EAT, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
||||||
pet.getRoomUnit().clearStatus();
|
pet.packetUpdate = true;
|
||||||
pet.getRoomUnit().removeStatus(RoomUnitStatus.MOVE);
|
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.EAT, "0");
|
Emulator.getThreading().run(() -> {
|
||||||
pet.addThirst(-75);
|
pet.addThirst(-75);
|
||||||
room.sendComposer(new RoomUserStatusComposer(roomUnit).compose());
|
this.change(room, -1);
|
||||||
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.EAT, null, true), 500);
|
pet.getRoomUnit().clearStatus();
|
||||||
|
new PetClearPosture(pet, RoomUnitStatus.EAT, null, true);
|
||||||
|
pet.packetUpdate = true;
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
AchievementManager.progressAchievement(Emulator.getGameEnvironment().getHabboManager().getHabbo(pet.getUserId()), Emulator.getGameEnvironment().getAchievementManager().getAchievement("PetFeeding"), 75);
|
||||||
|
|
||||||
AchievementManager.progressAchievement(Emulator.getGameEnvironment().getHabboManager().getHabbo(pet.getUserId()), Emulator.getGameEnvironment().getAchievementManager().getAchievement("PetFeeding"), 75);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,4 +96,32 @@ public class InteractionPetDrink extends InteractionDefault {
|
|||||||
public boolean allowWiredResetState() {
|
public boolean allowWiredResetState() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void change(Room room, int amount) {
|
||||||
|
int state = 0;
|
||||||
|
|
||||||
|
if (this.getExtradata() == null || this.getExtradata().isEmpty()) {
|
||||||
|
this.setExtradata("0");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
state = Integer.parseInt(this.getExtradata());
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOGGER.error("Caught exception", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
state += amount;
|
||||||
|
if (state > this.getBaseItem().getStateCount() - 1) {
|
||||||
|
state = this.getBaseItem().getStateCount() - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state < 0) {
|
||||||
|
state = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setExtradata(state + "");
|
||||||
|
this.needsUpdate(true);
|
||||||
|
room.updateItemState(this);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,12 @@
|
|||||||
package com.eu.habbo.habbohotel.items.interactions.pets;
|
package com.eu.habbo.habbohotel.items.interactions.pets;
|
||||||
|
|
||||||
import com.eu.habbo.Emulator;
|
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.Item;
|
||||||
import com.eu.habbo.habbohotel.items.interactions.InteractionDefault;
|
import com.eu.habbo.habbohotel.items.interactions.InteractionDefault;
|
||||||
import com.eu.habbo.habbohotel.pets.Pet;
|
import com.eu.habbo.habbohotel.pets.Pet;
|
||||||
import com.eu.habbo.habbohotel.pets.PetTasks;
|
import com.eu.habbo.habbohotel.pets.PetTasks;
|
||||||
import com.eu.habbo.habbohotel.rooms.Room;
|
import com.eu.habbo.habbohotel.rooms.*;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomUnit;
|
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomUnitStatus;
|
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomUserRotation;
|
|
||||||
import com.eu.habbo.habbohotel.users.HabboItem;
|
import com.eu.habbo.habbohotel.users.HabboItem;
|
||||||
import com.eu.habbo.threading.runnables.PetClearPosture;
|
import com.eu.habbo.threading.runnables.PetClearPosture;
|
||||||
|
|
||||||
@ -26,13 +24,35 @@ public class InteractionPetToy extends InteractionDefault {
|
|||||||
this.setExtradata("0");
|
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().clearStatus();
|
||||||
|
pet.packetUpdate = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onPickUp(Room room) {
|
||||||
|
this.setExtradata("0");
|
||||||
|
|
||||||
|
for (Pet pet : room.getPetsOnItem(this)) {
|
||||||
|
pet.getRoomUnit().clearStatus();
|
||||||
|
pet.packetUpdate = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
|
public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
|
||||||
super.onWalkOn(roomUnit, room, objects);
|
super.onWalkOn(roomUnit, room, objects);
|
||||||
|
|
||||||
Pet pet = room.getPet(roomUnit);
|
Pet pet = room.getPet(roomUnit);
|
||||||
|
|
||||||
if (pet != null) {
|
if (pet != null && pet.getPetData().haveToyItem(this.getBaseItem()) && this.getOccupyingTiles(room.getLayout()).contains(pet.getRoomUnit().getGoal())) {
|
||||||
if (pet.getEnergy() <= 35) {
|
if (pet.getEnergy() <= 35) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -41,15 +61,16 @@ public class InteractionPetToy extends InteractionDefault {
|
|||||||
pet.getRoomUnit().setGoalLocation(room.getLayout().getTile(this.getX(), this.getY()));
|
pet.getRoomUnit().setGoalLocation(room.getLayout().getTile(this.getX(), this.getY()));
|
||||||
pet.getRoomUnit().setRotation(RoomUserRotation.values()[this.getRotation()]);
|
pet.getRoomUnit().setRotation(RoomUserRotation.values()[this.getRotation()]);
|
||||||
pet.getRoomUnit().clearStatus();
|
pet.getRoomUnit().clearStatus();
|
||||||
pet.getRoomUnit().removeStatus(RoomUnitStatus.MOVE);
|
pet.getRoomUnit().setStatus(RoomUnitStatus.PLAY, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.PLAY, "0");
|
|
||||||
pet.packetUpdate = true;
|
pet.packetUpdate = true;
|
||||||
HabboItem item = this;
|
HabboItem item = this;
|
||||||
Emulator.getThreading().run(() -> {
|
Emulator.getThreading().run(() -> {
|
||||||
pet.addHappyness(25);
|
pet.addHappyness(25);
|
||||||
item.setExtradata("0");
|
item.setExtradata("0");
|
||||||
room.updateItem(item);
|
room.updateItem(item);
|
||||||
|
pet.getRoomUnit().clearStatus();
|
||||||
new PetClearPosture(pet, RoomUnitStatus.PLAY, null, true).run();
|
new PetClearPosture(pet, RoomUnitStatus.PLAY, null, true).run();
|
||||||
|
pet.packetUpdate = true;
|
||||||
}, 2500 + (Emulator.getRandom().nextInt(20) * 500));
|
}, 2500 + (Emulator.getRandom().nextInt(20) * 500));
|
||||||
this.setExtradata("1");
|
this.setExtradata("1");
|
||||||
room.updateItemState(this);
|
room.updateItemState(this);
|
||||||
@ -64,10 +85,18 @@ public class InteractionPetToy extends InteractionDefault {
|
|||||||
|
|
||||||
if (pet != null) {
|
if (pet != null) {
|
||||||
this.setExtradata("0");
|
this.setExtradata("0");
|
||||||
room.updateItemState(this);
|
room.updateItem(this);
|
||||||
|
pet.getRoomUnit().clearStatus();
|
||||||
|
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
|
@Override
|
||||||
public boolean allowWiredResetState() {
|
public boolean allowWiredResetState() {
|
||||||
return false;
|
return false;
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -28,7 +28,6 @@ public class InteractionPetTree extends InteractionDefault {
|
|||||||
public void onMove(Room room, RoomTile oldLocation, RoomTile newLocation) {
|
public void onMove(Room room, RoomTile oldLocation, RoomTile newLocation) {
|
||||||
for (Pet pet : room.getPetsAt(oldLocation)) {
|
for (Pet pet : room.getPetsAt(oldLocation)) {
|
||||||
pet.getRoomUnit().clearStatus();
|
pet.getRoomUnit().clearStatus();
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.RELAX, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
|
||||||
pet.packetUpdate = true;
|
pet.packetUpdate = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -36,7 +35,6 @@ public class InteractionPetTree extends InteractionDefault {
|
|||||||
public void onPickUp(Room room) {
|
public void onPickUp(Room room) {
|
||||||
for (Pet pet : room.getPetsOnItem(this)) {
|
for (Pet pet : room.getPetsOnItem(this)) {
|
||||||
pet.getRoomUnit().clearStatus();
|
pet.getRoomUnit().clearStatus();
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.RELAX, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
|
||||||
pet.packetUpdate = true;
|
pet.packetUpdate = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -65,10 +63,10 @@ public class InteractionPetTree extends InteractionDefault {
|
|||||||
pet.addHappyness(25);
|
pet.addHappyness(25);
|
||||||
pet.getRoomUnit().clearStatus();
|
pet.getRoomUnit().clearStatus();
|
||||||
new PetClearPosture(pet, finalTask, null, true);
|
new PetClearPosture(pet, finalTask, null, true);
|
||||||
if (this.getRoomId() == room.getId() && this.getOccupyingTiles(room.getLayout()).contains(pet.getRoomUnit().getCurrentLocation())) {
|
if (this.getOccupyingTiles(room.getLayout()).contains(pet.getRoomUnit().getCurrentLocation())) {
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.HANG, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
pet.getRoomUnit().setStatus(RoomUnitStatus.HANG, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
||||||
} else {
|
} else {
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.RELAX, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
pet.clearPosture();
|
||||||
}
|
}
|
||||||
pet.getRoomUnit().setCanWalk(true);
|
pet.getRoomUnit().setCanWalk(true);
|
||||||
pet.packetUpdate = true;
|
pet.packetUpdate = true;
|
||||||
@ -90,7 +88,6 @@ public class InteractionPetTree extends InteractionDefault {
|
|||||||
|
|
||||||
if (pet != null) {
|
if (pet != null) {
|
||||||
pet.getRoomUnit().clearStatus();
|
pet.getRoomUnit().clearStatus();
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.RELAX, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
|
||||||
pet.packetUpdate = true;
|
pet.packetUpdate = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.eu.habbo.habbohotel.pets;
|
|||||||
|
|
||||||
import com.eu.habbo.Emulator;
|
import com.eu.habbo.Emulator;
|
||||||
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
import com.eu.habbo.habbohotel.achievements.AchievementManager;
|
||||||
|
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetTree;
|
||||||
import com.eu.habbo.habbohotel.rooms.*;
|
import com.eu.habbo.habbohotel.rooms.*;
|
||||||
import com.eu.habbo.habbohotel.users.Habbo;
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
import com.eu.habbo.habbohotel.users.HabboItem;
|
import com.eu.habbo.habbohotel.users.HabboItem;
|
||||||
@ -18,9 +19,7 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.Calendar;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.TimeZone;
|
|
||||||
|
|
||||||
public class Pet implements ISerialize, Runnable {
|
public class Pet implements ISerialize, Runnable {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(Pet.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(Pet.class);
|
||||||
@ -390,9 +389,7 @@ public class Pet implements ISerialize, Runnable {
|
|||||||
keys.put(RoomUnitStatus.GESTURE, this.roomUnit.getStatus(RoomUnitStatus.GESTURE));
|
keys.put(RoomUnitStatus.GESTURE, this.roomUnit.getStatus(RoomUnitStatus.GESTURE));
|
||||||
|
|
||||||
if (this.task == null) {
|
if (this.task == null) {
|
||||||
boolean isDead = false;
|
boolean isDead = this.roomUnit.hasStatus(RoomUnitStatus.RIP);
|
||||||
if (this.roomUnit.hasStatus(RoomUnitStatus.RIP))
|
|
||||||
isDead = true;
|
|
||||||
|
|
||||||
this.roomUnit.clearStatus();
|
this.roomUnit.clearStatus();
|
||||||
|
|
||||||
@ -461,12 +458,19 @@ public class Pet implements ISerialize, Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void drink() {
|
public boolean drink() {
|
||||||
HabboItem item = this.petData.randomDrinkItem(this.room.getRoomSpecialTypes().getPetDrinks());
|
HabboItem item = this.petData.randomDrinkItem(this.room.getRoomSpecialTypes().getPetDrinks());
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
this.roomUnit.setCanWalk(true);
|
this.roomUnit.setCanWalk(true);
|
||||||
this.roomUnit.setGoalLocation(this.room.getLayout().getTile(item.getX(), item.getY()));
|
if (this.getRoomUnit().getCurrentLocation().distance(this.room.getLayout().getTile(item.getX(), item.getY())) == 0) {
|
||||||
|
try {
|
||||||
|
item.onWalkOn(this.getRoomUnit(), this.getRoom(), null);
|
||||||
|
} catch (Exception ignored) {}
|
||||||
|
} else {
|
||||||
|
this.roomUnit.setGoalLocation(this.room.getLayout().getTile(item.getX(), item.getY()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return item != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -481,16 +485,41 @@ public class Pet implements ISerialize, Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void findToy() {
|
public boolean findToy() {
|
||||||
HabboItem item = this.petData.randomToyItem(this.room.getRoomSpecialTypes().getPetToys());
|
HabboItem item = this.petData.randomToyItem(this.room.getRoomSpecialTypes().getPetToys());
|
||||||
{
|
{
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
this.roomUnit.setCanWalk(true);
|
this.roomUnit.setCanWalk(true);
|
||||||
|
if (this.getRoomUnit().getCurrentLocation().distance(this.room.getLayout().getTile(item.getX(), item.getY())) == 0) {
|
||||||
|
try {
|
||||||
|
item.onWalkOn(this.getRoomUnit(), this.getRoom(), null);
|
||||||
|
} catch (Exception ignored) {}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
this.roomUnit.setGoalLocation(this.room.getLayout().getTile(item.getX(), item.getY()));
|
this.roomUnit.setGoalLocation(this.room.getLayout().getTile(item.getX(), item.getY()));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean findPetItem(PetTasks task, Class<? extends HabboItem> type) {
|
||||||
|
HabboItem item = this.petData.randomToyHabboItem(this.room.getRoomSpecialTypes().getItemsOfType(type));
|
||||||
|
|
||||||
|
if (item != null) {
|
||||||
|
this.roomUnit.setCanWalk(true);
|
||||||
|
this.setTask(task);
|
||||||
|
if (this.getRoomUnit().getCurrentLocation().distance(this.room.getLayout().getTile(item.getX(), item.getY())) == 0) {
|
||||||
|
try {
|
||||||
|
item.onWalkOn(this.getRoomUnit(), this.getRoom(), null);
|
||||||
|
} catch (Exception ignored) {}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
this.roomUnit.setGoalLocation(this.room.getLayout().getTile(item.getX(), item.getY()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public void randomHappyAction() {
|
public void randomHappyAction() {
|
||||||
if (this.petData.actionsHappy.length > 0) {
|
if (this.petData.actionsHappy.length > 0) {
|
||||||
|
@ -2,10 +2,7 @@ package com.eu.habbo.habbohotel.pets;
|
|||||||
|
|
||||||
import com.eu.habbo.Emulator;
|
import com.eu.habbo.Emulator;
|
||||||
import com.eu.habbo.habbohotel.items.Item;
|
import com.eu.habbo.habbohotel.items.Item;
|
||||||
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionNest;
|
import com.eu.habbo.habbohotel.items.interactions.pets.*;
|
||||||
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetDrink;
|
|
||||||
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetFood;
|
|
||||||
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetToy;
|
|
||||||
import com.eu.habbo.habbohotel.users.HabboItem;
|
import com.eu.habbo.habbohotel.users.HabboItem;
|
||||||
import gnu.trove.map.hash.THashMap;
|
import gnu.trove.map.hash.THashMap;
|
||||||
import gnu.trove.set.hash.THashSet;
|
import gnu.trove.set.hash.THashSet;
|
||||||
@ -233,6 +230,22 @@ public class PetData implements Comparable<PetData> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HabboItem randomToyHabboItem(THashSet<HabboItem> items) {
|
||||||
|
List<HabboItem> itemList = new ArrayList<>();
|
||||||
|
|
||||||
|
for (HabboItem item : items) {
|
||||||
|
if (this.haveToyItem(item)) {
|
||||||
|
itemList.add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!itemList.isEmpty()) {
|
||||||
|
Collections.shuffle(itemList);
|
||||||
|
return itemList.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public PetVocal randomVocal(PetVocalsType type) {
|
public PetVocal randomVocal(PetVocalsType type) {
|
||||||
//TODO: Remove this useless copying.
|
//TODO: Remove this useless copying.
|
||||||
|
@ -208,7 +208,7 @@ public class PetManager {
|
|||||||
PetData.generalFoodItems.add(baseItem);
|
PetData.generalFoodItems.add(baseItem);
|
||||||
else if (baseItem.getInteractionType().getType() == InteractionPetDrink.class)
|
else if (baseItem.getInteractionType().getType() == InteractionPetDrink.class)
|
||||||
PetData.generalDrinkItems.add(baseItem);
|
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);
|
PetData.generalToyItems.add(baseItem);
|
||||||
} else {
|
} else {
|
||||||
PetData data = this.getPetData(set.getInt("pet_id"));
|
PetData data = this.getPetData(set.getInt("pet_id"));
|
||||||
@ -220,7 +220,7 @@ public class PetManager {
|
|||||||
data.addFoodItem(baseItem);
|
data.addFoodItem(baseItem);
|
||||||
else if (baseItem.getInteractionType().getType() == InteractionPetDrink.class)
|
else if (baseItem.getInteractionType().getType() == InteractionPetDrink.class)
|
||||||
data.addDrinkItem(baseItem);
|
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);
|
data.addToyItem(baseItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,9 @@ public class ActionCroak extends PetAction {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.CROAK, "0");
|
pet.getRoomUnit().setStatus(RoomUnitStatus.CROAK, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
||||||
|
|
||||||
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.CROAK, null, false), 2000);
|
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.CROAK, null, false), this.minimumActionDuration);
|
||||||
|
|
||||||
if (pet.getHappyness() > 70)
|
if (pet.getHappyness() > 70)
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_HAPPY));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_HAPPY));
|
||||||
|
@ -14,6 +14,7 @@ public class ActionDown extends PetAction {
|
|||||||
this.statusToRemove.add(RoomUnitStatus.BEG);
|
this.statusToRemove.add(RoomUnitStatus.BEG);
|
||||||
this.statusToRemove.add(RoomUnitStatus.MOVE);
|
this.statusToRemove.add(RoomUnitStatus.MOVE);
|
||||||
this.statusToRemove.add(RoomUnitStatus.DEAD);
|
this.statusToRemove.add(RoomUnitStatus.DEAD);
|
||||||
|
this.minimumActionDuration = 4000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -25,7 +26,7 @@ public class ActionDown extends PetAction {
|
|||||||
Emulator.getThreading().run(() -> {
|
Emulator.getThreading().run(() -> {
|
||||||
pet.getRoomUnit().cmdLay = false;
|
pet.getRoomUnit().cmdLay = false;
|
||||||
pet.clearPosture();
|
pet.clearPosture();
|
||||||
}, 4000);
|
}, this.minimumActionDuration);
|
||||||
|
|
||||||
if (pet.getHappyness() > 50)
|
if (pet.getHappyness() > 50)
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.PLAYFUL));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.PLAYFUL));
|
||||||
|
@ -12,17 +12,17 @@ public class ActionDrink extends PetAction {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
if (pet.getLevelThirst() > 40) {
|
|
||||||
pet.drink();
|
if (pet.levelThirst < 35 || !pet.drink()) {
|
||||||
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (pet.getLevelThirst() > 65)
|
if (pet.getLevelThirst() > 65)
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.THIRSTY));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.THIRSTY));
|
||||||
|
else pet.say(pet.getPetData().randomVocal(PetVocalsType.DRINKING));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ public class ActionEat extends PetAction {
|
|||||||
//Eat
|
//Eat
|
||||||
if (pet.getLevelHunger() > 40) {
|
if (pet.getLevelHunger() > 40) {
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.HUNGRY));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.HUNGRY));
|
||||||
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.EAT, null, false), 500);
|
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.EAT, null, false), this.minimumActionDuration);
|
||||||
pet.eat();
|
pet.eat();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -5,7 +5,6 @@ import com.eu.habbo.habbohotel.pets.Pet;
|
|||||||
import com.eu.habbo.habbohotel.pets.PetAction;
|
import com.eu.habbo.habbohotel.pets.PetAction;
|
||||||
import com.eu.habbo.habbohotel.pets.PetTasks;
|
import com.eu.habbo.habbohotel.pets.PetTasks;
|
||||||
import com.eu.habbo.habbohotel.pets.PetVocalsType;
|
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.Habbo;
|
||||||
import com.eu.habbo.threading.runnables.PetFollowHabbo;
|
import com.eu.habbo.threading.runnables.PetFollowHabbo;
|
||||||
|
|
||||||
|
@ -1,70 +1,38 @@
|
|||||||
package com.eu.habbo.habbohotel.pets.actions;
|
package com.eu.habbo.habbohotel.pets.actions;
|
||||||
|
|
||||||
|
import com.eu.habbo.Emulator;
|
||||||
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetTree;
|
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetTree;
|
||||||
import com.eu.habbo.habbohotel.pets.Pet;
|
import com.eu.habbo.habbohotel.pets.Pet;
|
||||||
import com.eu.habbo.habbohotel.pets.PetAction;
|
import com.eu.habbo.habbohotel.pets.PetAction;
|
||||||
import com.eu.habbo.habbohotel.pets.PetTasks;
|
import com.eu.habbo.habbohotel.pets.PetTasks;
|
||||||
import com.eu.habbo.habbohotel.pets.PetVocalsType;
|
import com.eu.habbo.habbohotel.pets.PetVocalsType;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomTile;
|
import com.eu.habbo.habbohotel.rooms.RoomUnitStatus;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomTileState;
|
|
||||||
import com.eu.habbo.habbohotel.users.Habbo;
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
import com.eu.habbo.habbohotel.users.HabboItem;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class ActionHang extends PetAction {
|
public class ActionHang extends PetAction {
|
||||||
public ActionHang() {
|
public ActionHang() {
|
||||||
super(null, true);
|
super(null, true);
|
||||||
|
this.minimumActionDuration = 4000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
if (pet.getHappyness() < 50) {
|
|
||||||
|
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() + "");
|
||||||
|
|
||||||
|
Emulator.getThreading().run(() -> {
|
||||||
|
pet.getRoomUnit().setCanWalk(true);
|
||||||
|
pet.clearPosture();
|
||||||
|
}, minimumActionDuration);
|
||||||
|
} else if (!findTree) {
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
||||||
return false;
|
return false;
|
||||||
} else {
|
|
||||||
|
|
||||||
Set<HabboItem> petTrees = pet.getRoom().getRoomSpecialTypes().getItemsOfType(InteractionPetTree.class);
|
|
||||||
|
|
||||||
if (petTrees == null || petTrees.isEmpty()) {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ArrayList<RoomTile> tileList = new ArrayList<>();
|
|
||||||
|
|
||||||
for (HabboItem petTree : petTrees) {
|
|
||||||
if (petTree == null || petTree.getRoomId() != pet.getRoom().getId()) continue;
|
|
||||||
tileList.addAll(petTree.getOccupyingTiles(pet.getRoom().getLayout()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tileList.isEmpty()) {
|
|
||||||
Collections.shuffle(tileList);
|
|
||||||
RoomTile goal = tileList.get(0);
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
|
||||||
|
|
||||||
if (goal == null || goal.state == RoomTileState.BLOCKED) {
|
|
||||||
goal = pet.getRoomUnit().getClosestTile(tileList);
|
|
||||||
}
|
|
||||||
pet.setTask(PetTasks.HANG);
|
|
||||||
if (goal.distance(pet.getRoomUnit().getCurrentLocation()) == 0) {
|
|
||||||
HabboItem tree = pet.getRoom().getItemsAt(goal).stream().filter(habboItem -> habboItem instanceof InteractionPetTree).findAny().orElse(null);
|
|
||||||
if (tree != null) {
|
|
||||||
try {
|
|
||||||
tree.onWalkOn(pet.getRoomUnit(), pet.getRoom(), null);
|
|
||||||
} catch (Exception ignored) {}
|
|
||||||
} else {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else pet.getRoomUnit().setGoalLocation(goal);
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,26 +1,30 @@
|
|||||||
package com.eu.habbo.habbohotel.pets.actions;
|
package com.eu.habbo.habbohotel.pets.actions;
|
||||||
|
|
||||||
import com.eu.habbo.Emulator;
|
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.Pet;
|
||||||
import com.eu.habbo.habbohotel.pets.PetAction;
|
import com.eu.habbo.habbohotel.pets.PetAction;
|
||||||
import com.eu.habbo.habbohotel.pets.PetTasks;
|
import com.eu.habbo.habbohotel.pets.PetTasks;
|
||||||
import com.eu.habbo.habbohotel.pets.PetVocalsType;
|
import com.eu.habbo.habbohotel.pets.PetVocalsType;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomUnitStatus;
|
import com.eu.habbo.habbohotel.rooms.RoomUnitStatus;
|
||||||
import com.eu.habbo.habbohotel.users.Habbo;
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
|
import com.eu.habbo.habbohotel.users.HabboItem;
|
||||||
import com.eu.habbo.threading.runnables.PetClearPosture;
|
import com.eu.habbo.threading.runnables.PetClearPosture;
|
||||||
|
|
||||||
public class ActionJump extends PetAction {
|
public class ActionJump extends PetAction {
|
||||||
public ActionJump() {
|
public ActionJump() {
|
||||||
super(PetTasks.JUMP, true);
|
super(null, false);
|
||||||
this.minimumActionDuration = 2000;
|
this.minimumActionDuration = 2000;
|
||||||
this.statusToSet.add(RoomUnitStatus.JUMP);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
pet.clearPosture();
|
if(pet.findPetItem(PetTasks.JUMP, InteractionPetTrampoline.class)) return true;
|
||||||
|
|
||||||
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.JUMP, null, false), 2000);
|
pet.clearPosture();
|
||||||
|
pet.setTask(PetTasks.JUMP);
|
||||||
|
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.JUMP, null, false), this.minimumActionDuration);
|
||||||
|
|
||||||
if (pet.getHappyness() > 60)
|
if (pet.getHappyness() > 60)
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.PLAYFUL));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.PLAYFUL));
|
||||||
|
@ -14,7 +14,6 @@ public class ActionNest extends PetAction {
|
|||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
if (pet.getEnergy() < 65) {
|
if (pet.getEnergy() < 65) {
|
||||||
pet.findNest();
|
pet.findNest();
|
||||||
|
|
||||||
if (pet.getEnergy() < 30)
|
if (pet.getEnergy() < 30)
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.TIRED));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.TIRED));
|
||||||
|
|
||||||
|
@ -7,19 +7,19 @@ import com.eu.habbo.habbohotel.users.Habbo;
|
|||||||
|
|
||||||
public class ActionPlay extends PetAction {
|
public class ActionPlay extends PetAction {
|
||||||
public ActionPlay() {
|
public ActionPlay() {
|
||||||
super(null, false);
|
super(null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
//Play
|
|
||||||
//TODO Implement playing for pets. For example; go to ball, toy etc.
|
boolean findToy = pet.findToy();
|
||||||
if (pet.getHappyness() > 75)
|
if (!findToy) {
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.PLAYFUL));
|
|
||||||
else {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,7 +18,7 @@ public class ActionPlayDead extends PetAction {
|
|||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
pet.clearPosture();
|
pet.clearPosture();
|
||||||
|
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.DEAD, pet.getRoom().getStackHeight(pet.getRoomUnit().getX(), pet.getRoomUnit().getY(), false) + "");
|
pet.getRoomUnit().setStatus(RoomUnitStatus.DEAD, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
||||||
|
|
||||||
if (pet.getHappyness() > 50)
|
if (pet.getHappyness() > 50)
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.PLAYFUL));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.PLAYFUL));
|
||||||
|
@ -21,7 +21,7 @@ public class ActionRelax extends PetAction {
|
|||||||
else
|
else
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
||||||
|
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.RELAX, "0");
|
pet.getRoomUnit().setStatus(RoomUnitStatus.RELAX, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,70 +1,38 @@
|
|||||||
package com.eu.habbo.habbohotel.pets.actions;
|
package com.eu.habbo.habbohotel.pets.actions;
|
||||||
|
|
||||||
|
import com.eu.habbo.Emulator;
|
||||||
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetTree;
|
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetTree;
|
||||||
import com.eu.habbo.habbohotel.pets.Pet;
|
import com.eu.habbo.habbohotel.pets.Pet;
|
||||||
import com.eu.habbo.habbohotel.pets.PetAction;
|
import com.eu.habbo.habbohotel.pets.PetAction;
|
||||||
import com.eu.habbo.habbohotel.pets.PetTasks;
|
import com.eu.habbo.habbohotel.pets.PetTasks;
|
||||||
import com.eu.habbo.habbohotel.pets.PetVocalsType;
|
import com.eu.habbo.habbohotel.pets.PetVocalsType;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomTile;
|
import com.eu.habbo.habbohotel.rooms.RoomUnitStatus;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomTileState;
|
|
||||||
import com.eu.habbo.habbohotel.users.Habbo;
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
import com.eu.habbo.habbohotel.users.HabboItem;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class ActionRingOfFire extends PetAction {
|
public class ActionRingOfFire extends PetAction {
|
||||||
public ActionRingOfFire() {
|
public ActionRingOfFire() {
|
||||||
super(null, true);
|
super(null, true);
|
||||||
|
this.minimumActionDuration = 4000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
if (pet.getHappyness() < 50) {
|
|
||||||
|
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() + "");
|
||||||
|
|
||||||
|
Emulator.getThreading().run(() -> {
|
||||||
|
pet.getRoomUnit().setCanWalk(true);
|
||||||
|
pet.clearPosture();
|
||||||
|
}, minimumActionDuration);
|
||||||
|
} else if (!findTree) {
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
||||||
return false;
|
return false;
|
||||||
} else {
|
|
||||||
|
|
||||||
Set<HabboItem> petTrees = pet.getRoom().getRoomSpecialTypes().getItemsOfType(InteractionPetTree.class);
|
|
||||||
|
|
||||||
if (petTrees == null || petTrees.isEmpty()) {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ArrayList<RoomTile> tileList = new ArrayList<>();
|
|
||||||
|
|
||||||
for (HabboItem petTree : petTrees) {
|
|
||||||
if (petTree == null || petTree.getRoomId() != pet.getRoom().getId()) continue;
|
|
||||||
tileList.addAll(petTree.getOccupyingTiles(pet.getRoom().getLayout()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tileList.isEmpty()) {
|
|
||||||
Collections.shuffle(tileList);
|
|
||||||
RoomTile goal = tileList.get(0);
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
|
||||||
|
|
||||||
if (goal == null || goal.state == RoomTileState.BLOCKED) {
|
|
||||||
goal = pet.getRoomUnit().getClosestTile(tileList);
|
|
||||||
}
|
|
||||||
pet.setTask(PetTasks.RING_OF_FIRE);
|
|
||||||
if (goal.distance(pet.getRoomUnit().getCurrentLocation()) == 0) {
|
|
||||||
HabboItem tree = pet.getRoom().getItemsAt(goal).stream().filter(habboItem -> habboItem instanceof InteractionPetTree).findAny().orElse(null);
|
|
||||||
if (tree != null) {
|
|
||||||
try {
|
|
||||||
tree.onWalkOn(pet.getRoomUnit(), pet.getRoom(), null);
|
|
||||||
} catch (Exception ignored) {}
|
|
||||||
} else {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else pet.getRoomUnit().setGoalLocation(goal);
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,78 +6,33 @@ import com.eu.habbo.habbohotel.pets.Pet;
|
|||||||
import com.eu.habbo.habbohotel.pets.PetAction;
|
import com.eu.habbo.habbohotel.pets.PetAction;
|
||||||
import com.eu.habbo.habbohotel.pets.PetTasks;
|
import com.eu.habbo.habbohotel.pets.PetTasks;
|
||||||
import com.eu.habbo.habbohotel.pets.PetVocalsType;
|
import com.eu.habbo.habbohotel.pets.PetVocalsType;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomTile;
|
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomTileState;
|
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomUnitStatus;
|
import com.eu.habbo.habbohotel.rooms.RoomUnitStatus;
|
||||||
import com.eu.habbo.habbohotel.users.Habbo;
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
import com.eu.habbo.habbohotel.users.HabboItem;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class ActionRoll extends PetAction {
|
public class ActionRoll extends PetAction {
|
||||||
public ActionRoll() {
|
public ActionRoll() {
|
||||||
super(null, true);
|
super(null, true);
|
||||||
|
this.minimumActionDuration = 4000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
if (pet.getHappyness() < 50) {
|
|
||||||
|
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() + "");
|
||||||
|
|
||||||
|
Emulator.getThreading().run(() -> {
|
||||||
|
pet.getRoomUnit().setCanWalk(true);
|
||||||
|
pet.clearPosture();
|
||||||
|
}, minimumActionDuration);
|
||||||
|
} else if (!findTree) {
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
||||||
return false;
|
return false;
|
||||||
} else {
|
|
||||||
|
|
||||||
Set<HabboItem> petTrees = pet.getRoom().getRoomSpecialTypes().getItemsOfType(InteractionPetTree.class);
|
|
||||||
|
|
||||||
if (petTrees == null || petTrees.isEmpty()) {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ArrayList<RoomTile> tileList = new ArrayList<>();
|
|
||||||
|
|
||||||
for (HabboItem petTree : petTrees) {
|
|
||||||
if (petTree == null || !pet.getPetData().haveToyItem(petTree.getBaseItem())) continue;
|
|
||||||
tileList.addAll(petTree.getOccupyingTiles(pet.getRoom().getLayout()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tileList.isEmpty()) {
|
|
||||||
Collections.shuffle(tileList);
|
|
||||||
RoomTile goal = tileList.get(0);
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
|
||||||
|
|
||||||
if (goal == null || goal.state == RoomTileState.BLOCKED) {
|
|
||||||
goal = pet.getRoomUnit().getClosestTile(tileList);
|
|
||||||
}
|
|
||||||
pet.setTask(PetTasks.ROLL);
|
|
||||||
if (goal.distance(pet.getRoomUnit().getCurrentLocation()) == 0) {
|
|
||||||
HabboItem tree = pet.getRoom().getItemsAt(goal).stream().filter(habboItem -> habboItem instanceof InteractionPetTree).findAny().orElse(null);
|
|
||||||
if (tree != null) {
|
|
||||||
try {
|
|
||||||
tree.onWalkOn(pet.getRoomUnit(), pet.getRoom(), null);
|
|
||||||
} catch (Exception ignored) {}
|
|
||||||
} else {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else pet.getRoomUnit().setGoalLocation(goal);
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
if (pet.getPetData().getToyItems().stream().noneMatch(item -> item.getInteractionType().getType() == InteractionPetTree.class)) {
|
|
||||||
pet.getRoomUnit().setCanWalk(false);
|
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.ROLL, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
|
||||||
|
|
||||||
Emulator.getThreading().run(() -> {
|
|
||||||
pet.getRoomUnit().setCanWalk(true);
|
|
||||||
pet.clearPosture();
|
|
||||||
}, 4000);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -15,8 +15,8 @@ public class ActionSilent extends PetAction {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
pet.setMuted(true);
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.MUTED));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.MUTED));
|
||||||
|
pet.setMuted(true);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ public class ActionSit extends PetAction {
|
|||||||
this.statusToRemove.add(RoomUnitStatus.MOVE);
|
this.statusToRemove.add(RoomUnitStatus.MOVE);
|
||||||
this.statusToRemove.add(RoomUnitStatus.LAY);
|
this.statusToRemove.add(RoomUnitStatus.LAY);
|
||||||
this.statusToRemove.add(RoomUnitStatus.DEAD);
|
this.statusToRemove.add(RoomUnitStatus.DEAD);
|
||||||
|
this.minimumActionDuration = 4000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -26,7 +27,7 @@ public class ActionSit extends PetAction {
|
|||||||
Emulator.getThreading().run(() -> {
|
Emulator.getThreading().run(() -> {
|
||||||
pet.getRoomUnit().cmdSit = false;
|
pet.getRoomUnit().cmdSit = false;
|
||||||
pet.clearPosture();
|
pet.clearPosture();
|
||||||
}, 4000);
|
}, this.minimumActionDuration);
|
||||||
|
|
||||||
if (pet.getHappyness() > 75)
|
if (pet.getHappyness() > 75)
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.PLAYFUL));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.PLAYFUL));
|
||||||
|
@ -1,70 +1,38 @@
|
|||||||
package com.eu.habbo.habbohotel.pets.actions;
|
package com.eu.habbo.habbohotel.pets.actions;
|
||||||
|
|
||||||
|
import com.eu.habbo.Emulator;
|
||||||
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetTree;
|
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetTree;
|
||||||
import com.eu.habbo.habbohotel.pets.Pet;
|
import com.eu.habbo.habbohotel.pets.Pet;
|
||||||
import com.eu.habbo.habbohotel.pets.PetAction;
|
import com.eu.habbo.habbohotel.pets.PetAction;
|
||||||
import com.eu.habbo.habbohotel.pets.PetTasks;
|
import com.eu.habbo.habbohotel.pets.PetTasks;
|
||||||
import com.eu.habbo.habbohotel.pets.PetVocalsType;
|
import com.eu.habbo.habbohotel.pets.PetVocalsType;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomTile;
|
import com.eu.habbo.habbohotel.rooms.RoomUnitStatus;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomTileState;
|
|
||||||
import com.eu.habbo.habbohotel.users.Habbo;
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
import com.eu.habbo.habbohotel.users.HabboItem;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class ActionSwing extends PetAction {
|
public class ActionSwing extends PetAction {
|
||||||
public ActionSwing() {
|
public ActionSwing() {
|
||||||
super(null, true);
|
super(null, true);
|
||||||
|
this.minimumActionDuration = 4000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
if (pet.getHappyness() < 50) {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
Set<HabboItem> petTrees = pet.getRoom().getRoomSpecialTypes().getItemsOfType(InteractionPetTree.class);
|
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() + "");
|
||||||
|
|
||||||
if (petTrees == null || petTrees.isEmpty()) {
|
Emulator.getThreading().run(() -> {
|
||||||
|
pet.getRoomUnit().setCanWalk(true);
|
||||||
|
pet.clearPosture();
|
||||||
|
}, minimumActionDuration);
|
||||||
|
} else if (!findTree) {
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<RoomTile> tileList = new ArrayList<>();
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
||||||
|
return true;
|
||||||
for (HabboItem petTree : petTrees) {
|
|
||||||
if (petTree == null || petTree.getRoomId() != pet.getRoom().getId()) continue;
|
|
||||||
tileList.addAll(petTree.getOccupyingTiles(pet.getRoom().getLayout()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tileList.isEmpty()) {
|
|
||||||
Collections.shuffle(tileList);
|
|
||||||
RoomTile goal = tileList.get(0);
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
|
||||||
|
|
||||||
if (goal == null || goal.state == RoomTileState.BLOCKED) {
|
|
||||||
goal = pet.getRoomUnit().getClosestTile(tileList);
|
|
||||||
}
|
|
||||||
pet.setTask(PetTasks.SWING);
|
|
||||||
if (goal.distance(pet.getRoomUnit().getCurrentLocation()) == 0) {
|
|
||||||
HabboItem tree = pet.getRoom().getItemsAt(goal).stream().filter(habboItem -> habboItem instanceof InteractionPetTree).findAny().orElse(null);
|
|
||||||
if (tree != null) {
|
|
||||||
try {
|
|
||||||
tree.onWalkOn(pet.getRoomUnit(), pet.getRoom(), null);
|
|
||||||
} catch (Exception ignored) {}
|
|
||||||
} else {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else pet.getRoomUnit().setGoalLocation(goal);
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,10 +18,6 @@ public class ActionTorch extends PetAction {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
if (pet.getHappyness() < 30) {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.EAT, null, false), this.minimumActionDuration);
|
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.EAT, null, false), this.minimumActionDuration);
|
||||||
return true;
|
return true;
|
||||||
|
@ -21,14 +21,9 @@ public class ActionWagTail extends PetAction {
|
|||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
pet.clearPosture();
|
pet.clearPosture();
|
||||||
|
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.WAG_TAIL, null, false), this.minimumActionDuration);
|
||||||
|
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
||||||
|
return true;
|
||||||
|
|
||||||
if (pet.getHappyness() > 40) {
|
|
||||||
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.WAG_TAIL, null, false), this.minimumActionDuration);
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.GENERIC_NEUTRAL));
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
pet.say(pet.getPetData().randomVocal(PetVocalsType.DISOBEY));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,18 +13,14 @@ public class ActionWave extends PetAction {
|
|||||||
super(PetTasks.WAVE, false);
|
super(PetTasks.WAVE, false);
|
||||||
|
|
||||||
this.statusToSet.add(RoomUnitStatus.WAVE);
|
this.statusToSet.add(RoomUnitStatus.WAVE);
|
||||||
|
this.minimumActionDuration = 2000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
public boolean apply(Pet pet, Habbo habbo, String[] data) {
|
||||||
//WAV
|
pet.getRoomUnit().setStatus(RoomUnitStatus.WAVE, pet.getRoomUnit().getCurrentLocation().getStackHeight() + "");
|
||||||
if (pet.getHappyness() > 65) {
|
|
||||||
pet.getRoomUnit().setStatus(RoomUnitStatus.WAVE, "0");
|
|
||||||
|
|
||||||
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.WAVE, null, false), 2000);
|
Emulator.getThreading().run(new PetClearPosture(pet, RoomUnitStatus.WAVE, null, false), this.minimumActionDuration);
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2390,8 +2390,12 @@ public class Room implements Comparable<Room>, ISerialize, Runnable {
|
|||||||
this.roomSpecialTypes.addPetDrink((InteractionPetDrink) item);
|
this.roomSpecialTypes.addPetDrink((InteractionPetDrink) item);
|
||||||
} else if (item instanceof InteractionPetFood) {
|
} else if (item instanceof InteractionPetFood) {
|
||||||
this.roomSpecialTypes.addPetFood((InteractionPetFood) item);
|
this.roomSpecialTypes.addPetFood((InteractionPetFood) item);
|
||||||
|
} else if (item instanceof InteractionPetToy) {
|
||||||
|
this.roomSpecialTypes.addPetToy((InteractionPetToy) item);
|
||||||
} else if (item instanceof InteractionPetTree) {
|
} else if (item instanceof InteractionPetTree) {
|
||||||
this.roomSpecialTypes.addUndefined(item);
|
this.roomSpecialTypes.addUndefined(item);
|
||||||
|
} else if (item instanceof InteractionPetTrampoline) {
|
||||||
|
this.roomSpecialTypes.addUndefined(item);
|
||||||
} else if (item instanceof InteractionMoodLight) {
|
} else if (item instanceof InteractionMoodLight) {
|
||||||
this.roomSpecialTypes.addUndefined(item);
|
this.roomSpecialTypes.addUndefined(item);
|
||||||
} else if (item instanceof InteractionPyramid) {
|
} else if (item instanceof InteractionPyramid) {
|
||||||
@ -2542,8 +2546,12 @@ public class Room implements Comparable<Room>, ISerialize, Runnable {
|
|||||||
this.roomSpecialTypes.removePetDrink((InteractionPetDrink) item);
|
this.roomSpecialTypes.removePetDrink((InteractionPetDrink) item);
|
||||||
} else if (item instanceof InteractionPetFood) {
|
} else if (item instanceof InteractionPetFood) {
|
||||||
this.roomSpecialTypes.removePetFood((InteractionPetFood) item);
|
this.roomSpecialTypes.removePetFood((InteractionPetFood) item);
|
||||||
|
} else if (item instanceof InteractionPetToy) {
|
||||||
|
this.roomSpecialTypes.removePetToy((InteractionPetToy) item);
|
||||||
} else if (item instanceof InteractionPetTree) {
|
} else if (item instanceof InteractionPetTree) {
|
||||||
this.roomSpecialTypes.removeUndefined(item);
|
this.roomSpecialTypes.removeUndefined(item);
|
||||||
|
} else if (item instanceof InteractionPetTrampoline) {
|
||||||
|
this.roomSpecialTypes.removeUndefined(item);
|
||||||
} else if (item instanceof InteractionMoodLight) {
|
} else if (item instanceof InteractionMoodLight) {
|
||||||
this.roomSpecialTypes.removeUndefined(item);
|
this.roomSpecialTypes.removeUndefined(item);
|
||||||
} else if (item instanceof InteractionPyramid) {
|
} else if (item instanceof InteractionPyramid) {
|
||||||
|
Loading…
Reference in New Issue
Block a user