Add saddle removing

This commit is contained in:
Alejandro 2020-02-04 23:04:41 +02:00
parent fbdf56f22f
commit a668cb9802
8 changed files with 85 additions and 5 deletions

View File

@ -0,0 +1,2 @@
ALTER TABLE `users_pets`
ADD COLUMN `saddle_item_id` int(11) NULL;

View File

@ -17,6 +17,7 @@ public class HorsePet extends RideablePet {
this.hairStyle = set.getInt("hair_style");
this.hasSaddle(set.getString("saddle").equalsIgnoreCase("1"));
this.setAnyoneCanRide(set.getString("ride").equalsIgnoreCase("1"));
this.setSaddleItemId(set.getInt("saddle_item_id"));
}
public HorsePet(int type, int race, String color, String name, int userId) {
@ -30,12 +31,13 @@ public class HorsePet extends RideablePet {
@Override
public void run() {
if (this.needsUpdate) {
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE users_pets SET hair_style = ?, hair_color = ?, saddle = ?, ride = ? WHERE id = ?")) {
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE users_pets SET hair_style = ?, hair_color = ?, saddle = ?, ride = ?, saddle_item_id = ? WHERE id = ?")) {
statement.setInt(1, this.hairStyle);
statement.setInt(2, this.hairColor);
statement.setString(3, this.hasSaddle() ? "1" : "0");
statement.setString(4, this.anyoneCanRide() ? "1" : "0");
statement.setInt(5, super.getId());
statement.setInt(5, this.getSaddleItemId());
statement.setInt(6, super.getId());
statement.execute();
} catch (SQLException e) {
Emulator.getLogging().logSQLException(e);

View File

@ -10,6 +10,7 @@ public class RideablePet extends Pet {
private Habbo rider;
private boolean hasSaddle;
private boolean anyoneCanRide;
private int saddleItemId;
public RideablePet(ResultSet set) throws SQLException {
super(set);
@ -44,4 +45,12 @@ public class RideablePet extends Pet {
public void setRider(Habbo rider) {
this.rider = rider;
}
public int getSaddleItemId() {
return saddleItemId;
}
public void setSaddleItemId(int saddleItemId) {
this.saddleItemId = saddleItemId;
}
}

View File

@ -542,9 +542,10 @@ public class PacketManager {
this.registerHandler(Incoming.PetPickupEvent, PetPickupEvent.class);
this.registerHandler(Incoming.ScratchPetEvent, ScratchPetEvent.class);
this.registerHandler(Incoming.RequestPetTrainingPanelEvent, RequestPetTrainingPanelEvent.class);
this.registerHandler(Incoming.HorseUseItemEvent, PetUseItemEvent.class);
this.registerHandler(Incoming.PetUseItemEvent, PetUseItemEvent.class);
this.registerHandler(Incoming.HorseRideSettingsEvent, PetRideSettingsEvent.class);
this.registerHandler(Incoming.HorseRideEvent, PetRideEvent.class);
this.registerHandler(Incoming.HorseRemoveSaddleEvent, HorseRemoveSaddleEvent.class);
this.registerHandler(Incoming.ToggleMonsterplantBreedableEvent, ToggleMonsterplantBreedableEvent.class);
this.registerHandler(Incoming.CompostMonsterplantEvent, CompostMonsterplantEvent.class);
this.registerHandler(Incoming.BreedMonsterplantsEvent, BreedMonsterplantsEvent.class);

View File

@ -372,7 +372,7 @@ public class PacketManager_1006 {
this.registerHandler(Incoming.PetPickupEvent, PetPickupEvent.class);
this.registerHandler(Incoming.ScratchPetEvent, ScratchPetEvent.class);
this.registerHandler(Incoming.RequestPetTrainingPanelEvent, RequestPetTrainingPanelEvent.class);
this.registerHandler(Incoming.HorseUseItemEvent, PetUseItemEvent.class);
this.registerHandler(Incoming.PetUseItemEvent, PetUseItemEvent.class);
this.registerHandler(Incoming.HorseRideSettingsEvent, PetRideSettingsEvent.class);
this.registerHandler(Incoming.HorseRideEvent, PetRideEvent.class);
}

View File

@ -64,7 +64,8 @@ public class Incoming {
public static final int SearchRoomsFriendsNowEvent = 1786;
public static final int SetStackHelperHeightEvent = 3839;
public static final int RedeemVoucherEvent = 339;
public static final int HorseUseItemEvent = 1328;
public static final int PetUseItemEvent = 1328;
public static final int HorseRemoveSaddleEvent = 186;
public static final int BuyItemEvent = 1603;
public static final int AdvertisingSaveEvent = 3608;
public static final int RequestPetTrainingPanelEvent = 2161;

View File

@ -0,0 +1,64 @@
package com.eu.habbo.messages.incoming.rooms.pets;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.items.Item;
import com.eu.habbo.habbohotel.pets.HorsePet;
import com.eu.habbo.habbohotel.pets.Pet;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.users.HabboItem;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.inventory.AddHabboItemComposer;
import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
import com.eu.habbo.messages.outgoing.rooms.pets.RoomPetHorseFigureComposer;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class HorseRemoveSaddleEvent extends MessageHandler {
@Override
public void handle() throws Exception {
Room room = this.client.getHabbo().getHabboInfo().getCurrentRoom();
Pet pet = room.getPet(this.packet.readInt());
if (pet == null || !(pet instanceof HorsePet)) return;
HorsePet horse = (HorsePet) pet;
if (!horse.hasSaddle()) return;
int saddleItemId = horse.getSaddleItemId();
if (saddleItemId == 0) { // backwards compatibility: horses could be missing the saddle item ID
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT id FROM items_base WHERE item_name LIKE 'horse_saddle%' LIMIT 1")) {
try (ResultSet set = statement.executeQuery()) {
if (set.next()) {
saddleItemId = set.getInt("id");
} else {
Emulator.getLogging().logErrorLine("There is no viable fallback saddle item for old horses with no saddle item ID. Horse pet ID: " + horse.getId());
return;
}
}
} catch (SQLException e) {
Emulator.getLogging().logSQLException(e);
}
}
Item saddleItem = Emulator.getGameEnvironment().getItemManager().getItem(saddleItemId);
if (saddleItem == null) return;
horse.hasSaddle(false);
horse.needsUpdate = true;
Emulator.getThreading().run(pet);
this.client.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomPetHorseFigureComposer(horse).compose());
HabboItem saddle = Emulator.getGameEnvironment().getItemManager().createItem(this.client.getHabbo().getHabboInfo().getId(), saddleItem, 0, 0, "");
this.client.getHabbo().getInventory().getItemsComponent().addItem(saddle);
this.client.sendResponse(new AddHabboItemComposer(saddle));
this.client.sendResponse(new InventoryRefreshComposer());
}
}

View File

@ -75,6 +75,7 @@ public class PetUseItemEvent extends MessageHandler {
((HorsePet) pet).needsUpdate = true;
} else if (item.getBaseItem().getName().toLowerCase().startsWith("horse_saddle")) {
((HorsePet) pet).hasSaddle(true);
((HorsePet) pet).setSaddleItemId(item.getBaseItem().getId());
((HorsePet) pet).needsUpdate = true;
}