Arcturus-Community/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionPetBreedingNest.java

205 lines
7.1 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);
}
}