Browse Source

in case of a server crash, pets don't lose their items but they have them when they're summoned next time

Sami 16 years ago
parent
commit
01d26abcd6

+ 1 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PetInstance.java

@@ -204,6 +204,7 @@ public class L2PetInstance extends L2Summon
            getStat().setLevel(template.level);
            getStat().setLevel(template.level);
 
 
 		_inventory = new PetInventory(this);
 		_inventory = new PetInventory(this);
+		_inventory.restore();
 
 
         int npcId = template.npcId;
         int npcId = template.npcId;
         _mountable = L2PetDataTable.isMountable(npcId);
         _mountable = L2PetDataTable.isMountable(npcId);

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/model/itemcontainer/Inventory.java

@@ -1362,7 +1362,7 @@ public abstract class Inventory extends ItemContainer
 	        con = L2DatabaseFactory.getInstance().getConnection();
 	        con = L2DatabaseFactory.getInstance().getConnection();
 	        PreparedStatement statement = con.prepareStatement(
 	        PreparedStatement statement = con.prepareStatement(
 	                "SELECT object_id, item_id, count, enchant_level, loc, loc_data, custom_type1, custom_type2, mana_left FROM items WHERE owner_id=? AND (loc=? OR loc=?) ");
 	                "SELECT object_id, item_id, count, enchant_level, loc, loc_data, custom_type1, custom_type2, mana_left FROM items WHERE owner_id=? AND (loc=? OR loc=?) ");
-	        statement.setInt(1, getOwner().getObjectId());
+	        statement.setInt(1, getOwnerId());
 	        statement.setString(2, getBaseLocation().name());
 	        statement.setString(2, getBaseLocation().name());
 	        statement.setString(3, getEquipLocation().name());
 	        statement.setString(3, getEquipLocation().name());
 	        ResultSet inv = statement.executeQuery();
 	        ResultSet inv = statement.executeQuery();
@@ -1370,7 +1370,7 @@ public abstract class Inventory extends ItemContainer
 	        L2ItemInstance item;
 	        L2ItemInstance item;
 	        while (inv.next())
 	        while (inv.next())
 	        {
 	        {
-	            item = L2ItemInstance.restoreFromDb(getOwner().getObjectId(), inv);
+	            item = L2ItemInstance.restoreFromDb(getOwnerId(), inv);
 	            if (item == null) continue;
 	            if (item == null) continue;
 	            
 	            
 	            if(getOwner() instanceof L2PcInstance)
 	            if(getOwner() instanceof L2PcInstance)

+ 16 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/itemcontainer/PetInventory.java

@@ -31,6 +31,22 @@ public class PetInventory extends Inventory
     {
     {
         return _owner;
         return _owner;
     }
     }
+	
+	@Override
+	public int getOwnerId()
+	{
+		// gets the L2PcInstance-owner's ID
+		int id;
+		try
+		{
+			id = _owner.getOwner().getObjectId();
+		}
+		catch (NullPointerException e) 
+		{
+			return 0;
+		}
+		return id;
+	}
 
 
 	@Override
 	@Override
 	protected ItemLocation getBaseLocation()
 	protected ItemLocation getBaseLocation()