Arcturus-Community/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPetBreedingNest.java
2019-05-26 21:15:26 +03:00

175 lines
6.9 KiB
Java

package com.eu.habbo.habbohotel.items.interactions;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.achievements.AchievementManager;
import com.eu.habbo.habbohotel.items.Item;
import com.eu.habbo.habbohotel.pets.Pet;
import com.eu.habbo.habbohotel.pets.PetManager;
import com.eu.habbo.habbohotel.pets.PetTasks;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomUnit;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.habbohotel.users.HabboItem;
import com.eu.habbo.messages.ServerMessage;
import com.eu.habbo.messages.outgoing.rooms.pets.PetPackageNameValidationComposer;
import com.eu.habbo.messages.outgoing.rooms.pets.breeding.PetBreedingCompleted;
import com.eu.habbo.messages.outgoing.rooms.pets.breeding.PetBreedingResultComposer;
import com.eu.habbo.threading.runnables.QueryDeleteHabboItem;
import java.sql.ResultSet;
import java.sql.SQLException;
public class InteractionPetBreedingNest extends HabboItem {
public Pet petOne = null;
public Pet petTwo = null;
public InteractionPetBreedingNest(ResultSet set, Item baseItem) throws SQLException {
super(set, baseItem);
}
public InteractionPetBreedingNest(int id, int userId, Item item, String extradata, int limitedStack, int limitedSells) {
super(id, userId, item, extradata, limitedStack, limitedSells);
}
@Override
public boolean canWalkOn(RoomUnit roomUnit, Room room, Object[] objects) {
return room.getPet(roomUnit) != null && !this.boxFull();
}
@Override
public boolean isWalkable() {
return true;
}
@Override
public void serializeExtradata(ServerMessage serverMessage) {
serverMessage.appendInt((this.isLimited() ? 256 : 0));
serverMessage.appendString(this.getExtradata());
super.serializeExtradata(serverMessage);
}
@Override
public void onWalk(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
}
@Override
public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
Pet pet = room.getPet(roomUnit);
if (pet != null) {
if (!this.boxFull()) {
this.addPet(pet);
if (this.boxFull()) {
Habbo ownerPetOne = room.getHabbo(this.petOne.getUserId());
Habbo ownerPetTwo = room.getHabbo(this.petTwo.getUserId());
if (ownerPetOne != null && ownerPetTwo != null && this.petOne.getPetData().getType() == this.petTwo.getPetData().getType() && this.petOne.getPetData().getOffspringType() != -1) {
ownerPetTwo.getClient().sendResponse(new PetBreedingResultComposer(this.getId(), this.petOne.getPetData().getOffspringType(), this.petOne, ownerPetOne.getHabboInfo().getUsername(), this.petTwo, ownerPetTwo.getHabboInfo().getUsername()));
this.setExtradata("1");
room.updateItem(this);
}
}
}
}
}
public boolean addPet(Pet pet) {
if (this.petOne == null) {
this.petOne = pet;
this.petOne.getRoomUnit().setCanWalk(false);
return true;
} else if (this.petTwo == null && this.petOne != pet) {
this.petTwo = pet;
this.petTwo.getRoomUnit().setCanWalk(false);
return true;
}
return false;
}
public boolean boxFull() {
return this.petOne != null && this.petTwo != null;
}
@Override
public void onWalkOff(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
if (this.petOne != null && this.petOne.getRoomUnit() == roomUnit) this.petOne = null;
if (this.petTwo != null && this.petTwo.getRoomUnit() == roomUnit) this.petTwo = null;
this.setExtradata("0");
room.updateItem(this);
}
@Override
public boolean allowWiredResetState() {
return false;
}
public void stopBreeding(Habbo habbo) {
this.setExtradata("0");
habbo.getHabboInfo().getCurrentRoom().updateItem(this);
if (this.petOne != null) {
habbo.getClient().sendResponse(new PetPackageNameValidationComposer(this.getId(), PetPackageNameValidationComposer.CLOSE_WIDGET, ""));
}
if (this.petTwo.getUserId() != habbo.getHabboInfo().getId()) {
Habbo owner = this.petTwo.getRoom().getHabbo(this.petTwo.getUserId());
if (owner != null) {
owner.getClient().sendResponse(new PetPackageNameValidationComposer(this.getId(), PetPackageNameValidationComposer.CLOSE_WIDGET, ""));
}
}
this.freePets();
}
private void freePets() {
if (this.petOne != null) {
this.petOne.getRoomUnit().setCanWalk(true);
this.petOne.setTask(PetTasks.FREE);
this.petOne = null;
}
if (this.petTwo != null) {
this.petTwo.getRoomUnit().setCanWalk(true);
this.petTwo.setTask(PetTasks.FREE);
this.petTwo = null;
}
}
public void breed(Habbo habbo, String name, int petOneId, int petTwoId) {
Emulator.getThreading().run(new QueryDeleteHabboItem(this.getId()));
this.setExtradata("2");
habbo.getHabboInfo().getCurrentRoom().updateItem(this);
HabboItem box = this;
Pet petOne = this.petOne;
Pet petTwo = this.petTwo;
Emulator.getThreading().run(new Runnable() {
@Override
public void run() {
Pet offspring = Emulator.getGameEnvironment().getPetManager().createPet(petOne.getPetData().getOffspringType(), (int) Math.min(Math.round(Math.max(1d, PetManager.getNormalDistributionForBreeding(petOne.getLevel(), petTwo.getLevel()).sample())), 20), name, habbo.getClient());
//habbo.getClient().sendResponse(new PetPackageNameValidationComposer(box.getId(), PetPackageNameValidationComposer.CLOSE_WIDGET, ""));
habbo.getHabboInfo().getCurrentRoom().placePet(offspring, box.getX(), box.getY(), box.getZ(), box.getRotation());
offspring.needsUpdate = true;
offspring.run();
InteractionPetBreedingNest.this.freePets();
habbo.getHabboInfo().getCurrentRoom().removeHabboItem(box);
habbo.getClient().sendResponse(new PetBreedingCompleted(offspring.getId(), Emulator.getGameEnvironment().getPetManager().getRarityForOffspring(offspring)));
if (box.getBaseItem().getName().startsWith("pet_breeding_")) {
String boxType = box.getBaseItem().getName().replace("pet_breeding_", "");
String achievement = boxType.substring(0, 1).toUpperCase() + boxType.substring(1) + "Breeder";
AchievementManager.progressAchievement(habbo, Emulator.getGameEnvironment().getAchievementManager().getAchievement(achievement));
}
}
}, 2000);
}
}