From 97f358f047eeb94e10e22b3da0111ec7d2f2ee63 Mon Sep 17 00:00:00 2001 From: Windyboy Date: Wed, 17 Aug 2022 14:07:39 +0800 Subject: [PATCH] Analyze pet packet structure correctly --- src/main/java/client/inventory/Pet.java | 68 +++++++++---------- src/main/java/constants/game/ExpTable.java | 2 +- .../scripting/AbstractPlayerInteraction.java | 2 +- .../server/quest/actions/PetSpeedAction.java | 2 +- .../requirements/MinTamenessRequirement.java | 4 +- src/main/java/tools/PacketCreator.java | 12 ++-- 6 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src/main/java/client/inventory/Pet.java b/src/main/java/client/inventory/Pet.java index 51cc1bec43..402d595903 100644 --- a/src/main/java/client/inventory/Pet.java +++ b/src/main/java/client/inventory/Pet.java @@ -45,21 +45,21 @@ import java.util.List; public class Pet extends Item { private String name; private int uniqueid; - private int closeness = 0; + private int tameness = 0; private byte level = 1; private int fullness = 100; private int Fh; private Point pos; private int stance; private boolean summoned; - private int petFlag = 0; + private int petAttribute = 0; - public enum PetFlag { + public enum PetAttribute { OWNER_SPEED(0x01); private final int i; - PetFlag(int i) { + PetAttribute(int i) { this.i = i; } @@ -83,11 +83,11 @@ public class Pet extends Item { try (ResultSet rs = ps.executeQuery()) { rs.next(); ret.setName(rs.getString("name")); - ret.setCloseness(Math.min(rs.getInt("closeness"), 30000)); + ret.setTameness(Math.min(rs.getInt("closeness"), 30000)); ret.setLevel((byte) Math.min(rs.getByte("level"), 30)); ret.setFullness(Math.min(rs.getInt("fullness"), 100)); ret.setSummoned(rs.getInt("summoned") == 1); - ret.setPetFlag(rs.getInt("flag")); + ret.setPetAttribute(rs.getInt("flag")); } return ret; } catch (SQLException e) { @@ -114,10 +114,10 @@ public class Pet extends Item { PreparedStatement ps = con.prepareStatement("UPDATE pets SET name = ?, level = ?, closeness = ?, fullness = ?, summoned = ?, flag = ? WHERE petid = ?")) { ps.setString(1, getName()); ps.setInt(2, getLevel()); - ps.setInt(3, getCloseness()); + ps.setInt(3, getTameness()); ps.setInt(4, getFullness()); ps.setInt(5, isSummoned() ? 1 : 0); - ps.setInt(6, getPetFlag()); + ps.setInt(6, getPetAttribute()); ps.setInt(7, getUniqueId()); ps.executeUpdate(); } catch (SQLException e) { @@ -139,14 +139,14 @@ public class Pet extends Item { } } - public static int createPet(int itemid, byte level, int closeness, int fullness) { + public static int createPet(int itemid, byte level, int tameness, int fullness) { try (Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO pets (petid, name, level, closeness, fullness, summoned, flag) VALUES (?, ?, ?, ?, ?, 0, 0)")) { int ret = CashIdGenerator.generateCashId(); ps.setInt(1, ret); ps.setString(2, ItemInformationProvider.getInstance().getName(itemid)); ps.setByte(3, level); - ps.setInt(4, closeness); + ps.setInt(4, tameness); ps.setInt(5, fullness); ps.executeUpdate(); return ret; @@ -172,19 +172,19 @@ public class Pet extends Item { this.uniqueid = id; } - public int getCloseness() { - return closeness; + public int getTameness() { + return tameness; } - public void setCloseness(int closeness) { - this.closeness = closeness; + public void setTameness(int tameness) { + this.tameness = tameness; } public byte getLevel() { return level; } - public void gainClosenessFullness(Character owner, int incCloseness, int incFullness, int type) { + public void gainClosenessFullness(Character owner, int incTameness, int incFullness, int type) { byte slot = owner.getPetIndex(this); boolean enjoyed; @@ -196,14 +196,14 @@ public class Pet extends Item { } fullness = newFullness; - if (incCloseness > 0 && closeness < 30000) { - int newCloseness = closeness + incCloseness; - if (newCloseness > 30000) { - newCloseness = 30000; + if (incTameness > 0 && tameness < 30000) { + int newTameness = tameness + incTameness; + if (newTameness > 30000) { + newTameness = 30000; } - closeness = newCloseness; - while (newCloseness >= ExpTable.getClosenessNeededForLevel(level)) { + tameness = newTameness; + while (newTameness >= ExpTable.getTamenessNeededForLevel(level)) { level += 1; owner.sendPacket(PacketCreator.showOwnPetLevelUp(slot)); owner.getMap().broadcastMessage(PacketCreator.showPetLevelUp(owner, slot)); @@ -212,13 +212,13 @@ public class Pet extends Item { enjoyed = true; } else { - int newCloseness = closeness - 1; - if (newCloseness < 0) { - newCloseness = 0; + int newTameness = tameness - 1; + if (newTameness < 0) { + newTameness = 0; } - closeness = newCloseness; - if (level > 1 && newCloseness < ExpTable.getClosenessNeededForLevel(level - 1)) { + tameness = newTameness; + if (level > 1 && newTameness < ExpTable.getTamenessNeededForLevel(level - 1)) { level -= 1; } @@ -278,16 +278,16 @@ public class Pet extends Item { this.summoned = yes; } - public int getPetFlag() { - return this.petFlag; + public int getPetAttribute() { + return this.petAttribute; } - private void setPetFlag(int flag) { - this.petFlag = flag; + private void setPetAttribute(int flag) { + this.petAttribute = flag; } - public void addPetFlag(Character owner, PetFlag flag) { - this.petFlag |= flag.getValue(); + public void addPetAttribute(Character owner, PetAttribute flag) { + this.petAttribute |= flag.getValue(); saveToDb(); Item petz = owner.getInventory(InventoryType.CASH).getItem(getPosition()); @@ -296,8 +296,8 @@ public class Pet extends Item { } } - public void removePetFlag(Character owner, PetFlag flag) { - this.petFlag &= 0xFFFFFFFF ^ flag.getValue(); + public void removePetAttribute(Character owner, PetAttribute flag) { + this.petAttribute &= 0xFFFFFFFF ^ flag.getValue(); saveToDb(); Item petz = owner.getInventory(InventoryType.CASH).getItem(getPosition()); diff --git a/src/main/java/constants/game/ExpTable.java b/src/main/java/constants/game/ExpTable.java index 561deb6e3c..441340ca98 100644 --- a/src/main/java/constants/game/ExpTable.java +++ b/src/main/java/constants/game/ExpTable.java @@ -31,7 +31,7 @@ public final class ExpTable { return level > 200 ? 2000000000 : exp[level]; } - public static int getClosenessNeededForLevel(int level) { + public static int getTamenessNeededForLevel(int level) { return pet[level]; } diff --git a/src/main/java/scripting/AbstractPlayerInteraction.java b/src/main/java/scripting/AbstractPlayerInteraction.java index f2db4abe10..86f008b5eb 100644 --- a/src/main/java/scripting/AbstractPlayerInteraction.java +++ b/src/main/java/scripting/AbstractPlayerInteraction.java @@ -588,7 +588,7 @@ public class AbstractPlayerInteraction { evolved.setSummoned(true); evolved.setName(from.getName().compareTo(ItemInformationProvider.getInstance().getName(from.getItemId())) != 0 ? from.getName() : ItemInformationProvider.getInstance().getName(id)); - evolved.setCloseness(from.getCloseness()); + evolved.setTameness(from.getTameness()); evolved.setFullness(from.getFullness()); evolved.setLevel(from.getLevel()); evolved.setExpiration(System.currentTimeMillis() + expires); diff --git a/src/main/java/server/quest/actions/PetSpeedAction.java b/src/main/java/server/quest/actions/PetSpeedAction.java index b90894eced..de0abd06bd 100644 --- a/src/main/java/server/quest/actions/PetSpeedAction.java +++ b/src/main/java/server/quest/actions/PetSpeedAction.java @@ -51,7 +51,7 @@ public class PetSpeedAction extends AbstractQuestAction { c.lockClient(); try { - pet.addPetFlag(c.getPlayer(), Pet.PetFlag.OWNER_SPEED); + pet.addPetAttribute(c.getPlayer(), Pet.PetAttribute.OWNER_SPEED); } finally { c.unlockClient(); } diff --git a/src/main/java/server/quest/requirements/MinTamenessRequirement.java b/src/main/java/server/quest/requirements/MinTamenessRequirement.java index 708e4451ca..dc5695041a 100644 --- a/src/main/java/server/quest/requirements/MinTamenessRequirement.java +++ b/src/main/java/server/quest/requirements/MinTamenessRequirement.java @@ -58,8 +58,8 @@ public class MinTamenessRequirement extends AbstractQuestRequirement { continue; } - if (pet.getCloseness() > curCloseness) { - curCloseness = pet.getCloseness(); + if (pet.getTameness() > curCloseness) { + curCloseness = pet.getTameness(); } } diff --git a/src/main/java/tools/PacketCreator.java b/src/main/java/tools/PacketCreator.java index 8da4dc3320..6df026de3d 100644 --- a/src/main/java/tools/PacketCreator.java +++ b/src/main/java/tools/PacketCreator.java @@ -382,13 +382,13 @@ public class PacketCreator { Pet pet = item.getPet(); p.writeFixedString(StringUtil.getRightPaddedStr(pet.getName(), '\0', 13)); p.writeByte(pet.getLevel()); - p.writeShort(pet.getCloseness()); + p.writeShort(pet.getTameness()); p.writeByte(pet.getFullness()); addExpirationTime(p, item.getExpiration()); - p.writeInt(pet.getPetFlag()); /* pet flags noticed by lrenex & Spoon */ - - p.writeBytes(new byte[]{(byte) 0x50, (byte) 0x46}); //wonder what this is - p.writeInt(0); + p.writeShort(pet.getPetAttribute()); // PetAttribute noticed by lrenex & Spoon + p.writeShort(0); // PetSkill + p.writeInt(18000); // RemainLife + p.writeShort(0); // attribute return; } if (equip == null) { @@ -2705,7 +2705,7 @@ public class PacketCreator { p.writeInt(pets[i].getItemId()); // petid p.writeString(pets[i].getName()); p.writeByte(pets[i].getLevel()); // pet level - p.writeShort(pets[i].getCloseness()); // pet closeness + p.writeShort(pets[i].getTameness()); // pet closeness p.writeByte(pets[i].getFullness()); // pet fullness p.writeShort(0); p.writeInt(inv != null ? inv.getItemId() : 0);