Analyze pet packet structure correctly
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -58,8 +58,8 @@ public class MinTamenessRequirement extends AbstractQuestRequirement {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pet.getCloseness() > curCloseness) {
|
||||
curCloseness = pet.getCloseness();
|
||||
if (pet.getTameness() > curCloseness) {
|
||||
curCloseness = pet.getTameness();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user