diff --git a/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java b/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java index 888fa8f..3f210dd 100644 --- a/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java +++ b/Server/src/main/content/global/skill/summoning/familiar/FamiliarManager.java @@ -128,7 +128,12 @@ public final class FamiliarManager { } if (currentPet != -1) { int last = this.petDetails.get(currentPet).size() - 1; - PetDetails details = this.petDetails.get(currentPet).get(last); + PetDetails details; + if (last < 0) { //missing data in save due to historical bug (see GL !2077) + details = new PetDetails(0); + } else { + details = this.petDetails.get(currentPet).get(last); + } Pets pets = Pets.forId(currentPet); familiar = new Pet(player, details, currentPet, pets.getNpcId(currentPet)); } else if (familiarData.containsKey("familiar")) { @@ -414,6 +419,9 @@ public final class FamiliarManager { * @param details The new pet details. */ public void addDetails(int itemId, PetDetails details) { + if (petDetails.get(itemId) == null) { + petDetails.put(itemId, new ArrayList<>()); + } petDetails.get(itemId).add(details); } diff --git a/Server/src/main/content/global/skill/summoning/pet/Pet.java b/Server/src/main/content/global/skill/summoning/pet/Pet.java index bb83f16..99048c1 100644 --- a/Server/src/main/content/global/skill/summoning/pet/Pet.java +++ b/Server/src/main/content/global/skill/summoning/pet/Pet.java @@ -129,8 +129,8 @@ public final class Pet extends Familiar { if (pet.isKitten(itemId)) { owner.incrementAttribute("/save:stats_manager:cats_raised"); } - owner.getFamiliarManager().removeDetails(getItemId()); owner.getFamiliarManager().addDetails(newItemId, details); + owner.getFamiliarManager().removeDetails(getItemId()); owner.getFamiliarManager().morphPet(new Item(newItemId), false, location, details.getHunger(), 0); owner.getPacketDispatch().sendMessage("Your pet has grown larger."); }