|
@@ -59,7 +59,6 @@ import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
|
|
import com.l2jserver.gameserver.model.items.type.L2EtcItemType;
|
|
import com.l2jserver.gameserver.model.items.type.L2EtcItemType;
|
|
import com.l2jserver.gameserver.model.skills.L2Skill;
|
|
import com.l2jserver.gameserver.model.skills.L2Skill;
|
|
import com.l2jserver.gameserver.model.stats.Env;
|
|
import com.l2jserver.gameserver.model.stats.Env;
|
|
-import com.l2jserver.gameserver.model.stats.Stats;
|
|
|
|
import com.l2jserver.gameserver.network.SystemMessageId;
|
|
import com.l2jserver.gameserver.network.SystemMessageId;
|
|
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
|
|
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
|
|
import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
|
|
import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
|
|
@@ -101,7 +100,9 @@ public class L2PetInstance extends L2Summon
|
|
public final L2PetLevelData getPetLevelData()
|
|
public final L2PetLevelData getPetLevelData()
|
|
{
|
|
{
|
|
if (_leveldata == null)
|
|
if (_leveldata == null)
|
|
|
|
+ {
|
|
_leveldata = PetDataTable.getInstance().getPetLevelData(getTemplate().getNpcId(), getStat().getLevel());
|
|
_leveldata = PetDataTable.getInstance().getPetLevelData(getTemplate().getNpcId(), getStat().getLevel());
|
|
|
|
+ }
|
|
|
|
|
|
return _leveldata;
|
|
return _leveldata;
|
|
}
|
|
}
|
|
@@ -109,7 +110,9 @@ public class L2PetInstance extends L2Summon
|
|
public final L2PetData getPetData()
|
|
public final L2PetData getPetData()
|
|
{
|
|
{
|
|
if (_data == null)
|
|
if (_data == null)
|
|
|
|
+ {
|
|
_data = PetDataTable.getInstance().getPetData(getTemplate().getNpcId());
|
|
_data = PetDataTable.getInstance().getPetData(getTemplate().getNpcId());
|
|
|
|
+ }
|
|
|
|
|
|
return _data;
|
|
return _data;
|
|
}
|
|
}
|
|
@@ -134,7 +137,7 @@ public class L2PetInstance extends L2Summon
|
|
{
|
|
{
|
|
try
|
|
try
|
|
{
|
|
{
|
|
- if (getOwner() == null || getOwner().getPet() == null || getOwner().getPet().getObjectId() != getObjectId())
|
|
|
|
|
|
+ if ((getOwner() == null) || (getOwner().getPet() == null) || (getOwner().getPet().getObjectId() != getObjectId()))
|
|
{
|
|
{
|
|
stopFeed();
|
|
stopFeed();
|
|
return;
|
|
return;
|
|
@@ -157,7 +160,7 @@ public class L2PetInstance extends L2Summon
|
|
if (getCurrentFed() == 0)
|
|
if (getCurrentFed() == 0)
|
|
{
|
|
{
|
|
// Owl Monk remove PK
|
|
// Owl Monk remove PK
|
|
- if (getTemplate().getNpcId() == 16050 && getOwner() != null)
|
|
|
|
|
|
+ if ((getTemplate().getNpcId() == 16050) && (getOwner() != null))
|
|
{
|
|
{
|
|
getOwner().setPkKills(Math.max(0, getOwner().getPkKills() - Rnd.get(1, 6)));
|
|
getOwner().setPkKills(Math.max(0, getOwner().getPkKills() - Rnd.get(1, 6)));
|
|
}
|
|
}
|
|
@@ -165,7 +168,9 @@ public class L2PetInstance extends L2Summon
|
|
deleteMe(getOwner());
|
|
deleteMe(getOwner());
|
|
}
|
|
}
|
|
else if (isHungry())
|
|
else if (isHungry())
|
|
|
|
+ {
|
|
sendPacket(SystemMessageId.THERE_NOT_MUCH_TIME_REMAINING_UNTIL_HELPER_LEAVES);
|
|
sendPacket(SystemMessageId.THERE_NOT_MUCH_TIME_REMAINING_UNTIL_HELPER_LEAVES);
|
|
|
|
+ }
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
L2ItemInstance food = null;
|
|
L2ItemInstance food = null;
|
|
@@ -173,7 +178,9 @@ public class L2PetInstance extends L2Summon
|
|
{
|
|
{
|
|
food = getInventory().getItemByItemId(id);
|
|
food = getInventory().getItemByItemId(id);
|
|
if (food != null)
|
|
if (food != null)
|
|
|
|
+ {
|
|
break;
|
|
break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
if (isRunning() && isHungry())
|
|
if (isRunning() && isHungry())
|
|
{
|
|
{
|
|
@@ -183,7 +190,7 @@ public class L2PetInstance extends L2Summon
|
|
{
|
|
{
|
|
setRunning();
|
|
setRunning();
|
|
}
|
|
}
|
|
- if (food != null && isHungry())
|
|
|
|
|
|
+ if ((food != null) && isHungry())
|
|
{
|
|
{
|
|
IItemHandler handler = ItemHandler.getInstance().getHandler(food.getEtcItem());
|
|
IItemHandler handler = ItemHandler.getInstance().getHandler(food.getEtcItem());
|
|
if (handler != null)
|
|
if (handler != null)
|
|
@@ -237,7 +244,9 @@ public class L2PetInstance extends L2Summon
|
|
{
|
|
{
|
|
// if pet is attacking
|
|
// if pet is attacking
|
|
if (isAttackingNow())
|
|
if (isAttackingNow())
|
|
|
|
+ {
|
|
return getPetLevelData().getPetFeedBattle();
|
|
return getPetLevelData().getPetFeedBattle();
|
|
|
|
+ }
|
|
return getPetLevelData().getPetFeedNormal();
|
|
return getPetLevelData().getPetFeedNormal();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -245,8 +254,10 @@ public class L2PetInstance extends L2Summon
|
|
public synchronized static L2PetInstance spawnPet(L2NpcTemplate template, L2PcInstance owner, L2ItemInstance control)
|
|
public synchronized static L2PetInstance spawnPet(L2NpcTemplate template, L2PcInstance owner, L2ItemInstance control)
|
|
{
|
|
{
|
|
if (L2World.getInstance().getPet(owner.getObjectId()) != null)
|
|
if (L2World.getInstance().getPet(owner.getObjectId()) != null)
|
|
|
|
+ {
|
|
return null; // owner has a pet listed in world
|
|
return null; // owner has a pet listed in world
|
|
-
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
L2PetInstance pet = restore(control, template, owner);
|
|
L2PetInstance pet = restore(control, template, owner);
|
|
// add the pet instance to world
|
|
// add the pet instance to world
|
|
if (pet != null)
|
|
if (pet != null)
|
|
@@ -347,8 +358,12 @@ public class L2PetInstance extends L2Summon
|
|
public L2ItemInstance getActiveWeaponInstance()
|
|
public L2ItemInstance getActiveWeaponInstance()
|
|
{
|
|
{
|
|
for (L2ItemInstance item : getInventory().getItems())
|
|
for (L2ItemInstance item : getInventory().getItems())
|
|
- if (item.getLocation() == L2ItemInstance.ItemLocation.PET_EQUIP && item.getItem().getBodyPart() == L2Item.SLOT_R_HAND)
|
|
|
|
|
|
+ {
|
|
|
|
+ if ((item.getLocation() == L2ItemInstance.ItemLocation.PET_EQUIP) && (item.getItem().getBodyPart() == L2Item.SLOT_R_HAND))
|
|
|
|
+ {
|
|
return item;
|
|
return item;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
@@ -362,7 +377,9 @@ public class L2PetInstance extends L2Summon
|
|
L2ItemInstance weapon = getActiveWeaponInstance();
|
|
L2ItemInstance weapon = getActiveWeaponInstance();
|
|
|
|
|
|
if (weapon == null)
|
|
if (weapon == null)
|
|
|
|
+ {
|
|
return null;
|
|
return null;
|
|
|
|
+ }
|
|
|
|
|
|
return (L2Weapon) weapon.getItem();
|
|
return (L2Weapon) weapon.getItem();
|
|
}
|
|
}
|
|
@@ -404,7 +421,9 @@ public class L2PetInstance extends L2Summon
|
|
if (item == null)
|
|
if (item == null)
|
|
{
|
|
{
|
|
if (sendMessage)
|
|
if (sendMessage)
|
|
|
|
+ {
|
|
sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS);
|
|
sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS);
|
|
|
|
+ }
|
|
|
|
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
@@ -450,7 +469,9 @@ public class L2PetInstance extends L2Summon
|
|
if (item == null)
|
|
if (item == null)
|
|
{
|
|
{
|
|
if (sendMessage)
|
|
if (sendMessage)
|
|
|
|
+ {
|
|
sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS);
|
|
sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS);
|
|
|
|
+ }
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -484,12 +505,16 @@ public class L2PetInstance extends L2Summon
|
|
{
|
|
{
|
|
boolean follow = getFollowStatus();
|
|
boolean follow = getFollowStatus();
|
|
if (isDead())
|
|
if (isDead())
|
|
|
|
+ {
|
|
return;
|
|
return;
|
|
|
|
+ }
|
|
getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
|
|
getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
|
|
StopMove sm = new StopMove(getObjectId(), getX(), getY(), getZ(), getHeading());
|
|
StopMove sm = new StopMove(getObjectId(), getX(), getY(), getZ(), getHeading());
|
|
|
|
|
|
if (Config.DEBUG)
|
|
if (Config.DEBUG)
|
|
|
|
+ {
|
|
_logPet.fine("Pet pickup pos: " + object.getX() + " " + object.getY() + " " + object.getZ());
|
|
_logPet.fine("Pet pickup pos: " + object.getX() + " " + object.getY() + " " + object.getZ());
|
|
|
|
+ }
|
|
|
|
|
|
broadcastPacket(sm);
|
|
broadcastPacket(sm);
|
|
|
|
|
|
@@ -537,7 +562,7 @@ public class L2PetInstance extends L2Summon
|
|
sendPacket(SystemMessageId.UNABLE_TO_PLACE_ITEM_YOUR_PET_IS_TOO_ENCUMBERED);
|
|
sendPacket(SystemMessageId.UNABLE_TO_PLACE_ITEM_YOUR_PET_IS_TOO_ENCUMBERED);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- if (target.getOwnerId() != 0 && target.getOwnerId() != getOwner().getObjectId() && !getOwner().isInLooterParty(target.getOwnerId()))
|
|
|
|
|
|
+ if ((target.getOwnerId() != 0) && (target.getOwnerId() != getOwner().getObjectId()) && !getOwner().isInLooterParty(target.getOwnerId()))
|
|
{
|
|
{
|
|
sendPacket(ActionFailed.STATIC_PACKET);
|
|
sendPacket(ActionFailed.STATIC_PACKET);
|
|
|
|
|
|
@@ -563,17 +588,25 @@ public class L2PetInstance extends L2Summon
|
|
|
|
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- if (target.getItemLootShedule() != null && (target.getOwnerId() == getOwner().getObjectId() || getOwner().isInLooterParty(target.getOwnerId())))
|
|
|
|
|
|
+ if ((target.getItemLootShedule() != null) && ((target.getOwnerId() == getOwner().getObjectId()) || getOwner().isInLooterParty(target.getOwnerId())))
|
|
|
|
+ {
|
|
target.resetOwnerTimer();
|
|
target.resetOwnerTimer();
|
|
|
|
+ }
|
|
|
|
|
|
// If owner is in party and it isnt finders keepers, distribute the item instead of stealing it -.-
|
|
// If owner is in party and it isnt finders keepers, distribute the item instead of stealing it -.-
|
|
- if (getOwner().isInParty() && getOwner().getParty().getLootDistribution() != L2Party.ITEM_LOOTER)
|
|
|
|
|
|
+ if (getOwner().isInParty() && (getOwner().getParty().getLootDistribution() != L2Party.ITEM_LOOTER))
|
|
|
|
+ {
|
|
getOwner().getParty().distributeItem(getOwner(), target);
|
|
getOwner().getParty().distributeItem(getOwner(), target);
|
|
|
|
+ }
|
|
else
|
|
else
|
|
|
|
+ {
|
|
target.pickupMe(this);
|
|
target.pickupMe(this);
|
|
|
|
+ }
|
|
|
|
|
|
- if (Config.SAVE_DROPPED_ITEM) // item must be removed from ItemsOnGroundManager if is active
|
|
|
|
|
|
+ if (Config.SAVE_DROPPED_ITEM)
|
|
|
|
+ {
|
|
ItemsOnGroundManager.getInstance().removeObject(target);
|
|
ItemsOnGroundManager.getInstance().removeObject(target);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
// Herbs
|
|
// Herbs
|
|
@@ -581,9 +614,13 @@ public class L2PetInstance extends L2Summon
|
|
{
|
|
{
|
|
IItemHandler handler = ItemHandler.getInstance().getHandler(target.getEtcItem());
|
|
IItemHandler handler = ItemHandler.getInstance().getHandler(target.getEtcItem());
|
|
if (handler == null)
|
|
if (handler == null)
|
|
|
|
+ {
|
|
_log.fine("No item handler registered for item ID " + target.getItemId() + ".");
|
|
_log.fine("No item handler registered for item ID " + target.getItemId() + ".");
|
|
|
|
+ }
|
|
else
|
|
else
|
|
|
|
+ {
|
|
handler.useItem(this, target, false);
|
|
handler.useItem(this, target, false);
|
|
|
|
+ }
|
|
|
|
|
|
ItemTable.getInstance().destroyItem("Consume", target, getOwner(), null);
|
|
ItemTable.getInstance().destroyItem("Consume", target, getOwner(), null);
|
|
|
|
|
|
@@ -626,7 +663,9 @@ public class L2PetInstance extends L2Summon
|
|
getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
|
|
getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
|
|
|
|
|
|
if (follow)
|
|
if (follow)
|
|
|
|
+ {
|
|
followOwner();
|
|
followOwner();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -642,13 +681,15 @@ public class L2PetInstance extends L2Summon
|
|
public boolean doDie(L2Character killer)
|
|
public boolean doDie(L2Character killer)
|
|
{
|
|
{
|
|
if (!super.doDie(killer, true))
|
|
if (!super.doDie(killer, true))
|
|
|
|
+ {
|
|
return false;
|
|
return false;
|
|
|
|
+ }
|
|
stopFeed();
|
|
stopFeed();
|
|
sendPacket(SystemMessageId.MAKE_SURE_YOU_RESSURECT_YOUR_PET_WITHIN_24_HOURS);
|
|
sendPacket(SystemMessageId.MAKE_SURE_YOU_RESSURECT_YOUR_PET_WITHIN_24_HOURS);
|
|
DecayTaskManager.getInstance().addDecayTask(this, PET_DECAY_DELAY);
|
|
DecayTaskManager.getInstance().addDecayTask(this, PET_DECAY_DELAY);
|
|
// do not decrease exp if is in duel, arena
|
|
// do not decrease exp if is in duel, arena
|
|
L2PcInstance owner = getOwner();
|
|
L2PcInstance owner = getOwner();
|
|
- if (owner != null && !owner.isInDuel() && (!isInsideZone(ZONE_PVP) || isInsideZone(ZONE_SIEGE)))
|
|
|
|
|
|
+ if ((owner != null) && !owner.isInDuel() && (!isInsideZone(ZONE_PVP) || isInsideZone(ZONE_SIEGE)))
|
|
{
|
|
{
|
|
deathPenalty();
|
|
deathPenalty();
|
|
}
|
|
}
|
|
@@ -666,7 +707,9 @@ public class L2PetInstance extends L2Summon
|
|
DecayTaskManager.getInstance().cancelDecayTask(this);
|
|
DecayTaskManager.getInstance().cancelDecayTask(this);
|
|
startFeed();
|
|
startFeed();
|
|
if (!isHungry())
|
|
if (!isHungry())
|
|
|
|
+ {
|
|
setRunning();
|
|
setRunning();
|
|
|
|
+ }
|
|
getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE, null);
|
|
getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE, null);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -696,14 +739,20 @@ public class L2PetInstance extends L2Summon
|
|
L2ItemInstance newItem = getInventory().transferItem(process, objectId, count, target, actor, reference);
|
|
L2ItemInstance newItem = getInventory().transferItem(process, objectId, count, target, actor, reference);
|
|
|
|
|
|
if (newItem == null)
|
|
if (newItem == null)
|
|
|
|
+ {
|
|
return null;
|
|
return null;
|
|
|
|
+ }
|
|
|
|
|
|
// Send inventory update packet
|
|
// Send inventory update packet
|
|
PetInventoryUpdate petIU = new PetInventoryUpdate();
|
|
PetInventoryUpdate petIU = new PetInventoryUpdate();
|
|
- if (oldItem.getCount() > 0 && oldItem != newItem)
|
|
|
|
|
|
+ if ((oldItem.getCount() > 0) && (oldItem != newItem))
|
|
|
|
+ {
|
|
petIU.addModifiedItem(oldItem);
|
|
petIU.addModifiedItem(oldItem);
|
|
|
|
+ }
|
|
else
|
|
else
|
|
|
|
+ {
|
|
petIU.addRemovedItem(oldItem);
|
|
petIU.addRemovedItem(oldItem);
|
|
|
|
+ }
|
|
sendPacket(petIU);
|
|
sendPacket(petIU);
|
|
|
|
|
|
// Send target update packet
|
|
// Send target update packet
|
|
@@ -713,7 +762,7 @@ public class L2PetInstance extends L2Summon
|
|
iu.addNewItem(newItem);
|
|
iu.addNewItem(newItem);
|
|
sendPacket(iu);
|
|
sendPacket(iu);
|
|
}
|
|
}
|
|
- else if (playerOldItem != null && newItem.isStackable())
|
|
|
|
|
|
+ else if ((playerOldItem != null) && newItem.isStackable())
|
|
{
|
|
{
|
|
InventoryUpdate iu = new InventoryUpdate();
|
|
InventoryUpdate iu = new InventoryUpdate();
|
|
iu.addModifiedItem(newItem);
|
|
iu.addModifiedItem(newItem);
|
|
@@ -753,7 +802,9 @@ public class L2PetInstance extends L2Summon
|
|
}
|
|
}
|
|
|
|
|
|
if (removedItem == null)
|
|
if (removedItem == null)
|
|
|
|
+ {
|
|
_log.warning("Couldn't destroy pet control item for " + owner + " pet: " + this + " evolve: " + evolve);
|
|
_log.warning("Couldn't destroy pet control item for " + owner + " pet: " + this + " evolve: " + evolve);
|
|
|
|
+ }
|
|
else
|
|
else
|
|
{
|
|
{
|
|
InventoryUpdate iu = new InventoryUpdate();
|
|
InventoryUpdate iu = new InventoryUpdate();
|
|
@@ -810,7 +861,9 @@ public class L2PetInstance extends L2Summon
|
|
if (dropit != null)
|
|
if (dropit != null)
|
|
{
|
|
{
|
|
if (protect)
|
|
if (protect)
|
|
|
|
+ {
|
|
dropit.getDropProtection().protect(getOwner());
|
|
dropit.getDropProtection().protect(getOwner());
|
|
|
|
+ }
|
|
_logPet.finer("Item id to drop: " + dropit.getItemId() + " amount: " + dropit.getCount());
|
|
_logPet.finer("Item id to drop: " + dropit.getItemId() + " amount: " + dropit.getCount());
|
|
dropit.dropMe(this, getX(), getY(), getZ() + 100);
|
|
dropit.dropMe(this, getX(), getY(), getZ() + 100);
|
|
}
|
|
}
|
|
@@ -830,7 +883,7 @@ public class L2PetInstance extends L2Summon
|
|
|
|
|
|
private static L2PetInstance restore(L2ItemInstance control, L2NpcTemplate template, L2PcInstance owner)
|
|
private static L2PetInstance restore(L2ItemInstance control, L2NpcTemplate template, L2PcInstance owner)
|
|
{
|
|
{
|
|
- try (Connection con = L2DatabaseFactory.getInstance().getConnection())
|
|
|
|
|
|
+ try (Connection con = L2DatabaseFactory.getInstance().getConnection())
|
|
{
|
|
{
|
|
L2PetInstance pet;
|
|
L2PetInstance pet;
|
|
PreparedStatement statement = con.prepareStatement("SELECT item_obj_id, name, level, curHp, curMp, exp, sp, fed FROM pets WHERE item_obj_id=?");
|
|
PreparedStatement statement = con.prepareStatement("SELECT item_obj_id, name, level, curHp, curMp, exp, sp, fed FROM pets WHERE item_obj_id=?");
|
|
@@ -840,9 +893,13 @@ public class L2PetInstance extends L2Summon
|
|
if (!rset.next())
|
|
if (!rset.next())
|
|
{
|
|
{
|
|
if (template.isType("L2BabyPet"))
|
|
if (template.isType("L2BabyPet"))
|
|
|
|
+ {
|
|
pet = new L2BabyPetInstance(id, template, owner, control);
|
|
pet = new L2BabyPetInstance(id, template, owner, control);
|
|
|
|
+ }
|
|
else
|
|
else
|
|
|
|
+ {
|
|
pet = new L2PetInstance(id, template, owner, control);
|
|
pet = new L2PetInstance(id, template, owner, control);
|
|
|
|
+ }
|
|
|
|
|
|
rset.close();
|
|
rset.close();
|
|
statement.close();
|
|
statement.close();
|
|
@@ -850,9 +907,13 @@ public class L2PetInstance extends L2Summon
|
|
}
|
|
}
|
|
|
|
|
|
if (template.isType("L2BabyPet"))
|
|
if (template.isType("L2BabyPet"))
|
|
|
|
+ {
|
|
pet = new L2BabyPetInstance(id, template, owner, control, rset.getByte("level"));
|
|
pet = new L2BabyPetInstance(id, template, owner, control, rset.getByte("level"));
|
|
|
|
+ }
|
|
else
|
|
else
|
|
|
|
+ {
|
|
pet = new L2PetInstance(id, template, owner, control, rset.getByte("level"));
|
|
pet = new L2PetInstance(id, template, owner, control, rset.getByte("level"));
|
|
|
|
+ }
|
|
|
|
|
|
pet._respawned = true;
|
|
pet._respawned = true;
|
|
pet.setName(rset.getString("name"));
|
|
pet.setName(rset.getString("name"));
|
|
@@ -861,8 +922,10 @@ public class L2PetInstance extends L2Summon
|
|
L2PetLevelData info = PetDataTable.getInstance().getPetLevelData(pet.getNpcId(), pet.getLevel());
|
|
L2PetLevelData info = PetDataTable.getInstance().getPetLevelData(pet.getNpcId(), pet.getLevel());
|
|
// DS: update experience based by level
|
|
// DS: update experience based by level
|
|
// Avoiding pet delevels due to exp per level values changed.
|
|
// Avoiding pet delevels due to exp per level values changed.
|
|
- if (info != null && exp < info.getPetMaxExp())
|
|
|
|
|
|
+ if ((info != null) && (exp < info.getPetMaxExp()))
|
|
|
|
+ {
|
|
exp = info.getPetMaxExp();
|
|
exp = info.getPetMaxExp();
|
|
|
|
+ }
|
|
|
|
|
|
pet.getStat().setExp(exp);
|
|
pet.getStat().setExp(exp);
|
|
pet.getStat().setSp(rset.getInt("sp"));
|
|
pet.getStat().setSp(rset.getInt("sp"));
|
|
@@ -900,12 +963,14 @@ public class L2PetInstance extends L2Summon
|
|
{
|
|
{
|
|
super.stopSkillEffects(skillId);
|
|
super.stopSkillEffects(skillId);
|
|
List<SummonEffect> effects = SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId());
|
|
List<SummonEffect> effects = SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId());
|
|
- if (effects != null && !effects.isEmpty())
|
|
|
|
|
|
+ if ((effects != null) && !effects.isEmpty())
|
|
{
|
|
{
|
|
for (SummonEffect effect : effects)
|
|
for (SummonEffect effect : effects)
|
|
{
|
|
{
|
|
if (effect.getSkill().getId() == skillId)
|
|
if (effect.getSkill().getId() == skillId)
|
|
|
|
+ {
|
|
SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).remove(effect);
|
|
SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).remove(effect);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -920,13 +985,19 @@ public class L2PetInstance extends L2Summon
|
|
}
|
|
}
|
|
|
|
|
|
if (!Config.RESTORE_PET_ON_RECONNECT)
|
|
if (!Config.RESTORE_PET_ON_RECONNECT)
|
|
|
|
+ {
|
|
_restoreSummon = false;
|
|
_restoreSummon = false;
|
|
|
|
+ }
|
|
|
|
|
|
String req;
|
|
String req;
|
|
if (!isRespawned())
|
|
if (!isRespawned())
|
|
|
|
+ {
|
|
req = "INSERT INTO pets (name,level,curHp,curMp,exp,sp,fed,ownerId,restore,item_obj_id) " + "VALUES (?,?,?,?,?,?,?,?,?,?)";
|
|
req = "INSERT INTO pets (name,level,curHp,curMp,exp,sp,fed,ownerId,restore,item_obj_id) " + "VALUES (?,?,?,?,?,?,?,?,?,?)";
|
|
|
|
+ }
|
|
else
|
|
else
|
|
|
|
+ {
|
|
req = "UPDATE pets SET name=?,level=?,curHp=?,curMp=?,exp=?,sp=?,fed=?,ownerId=?,restore=? " + "WHERE item_obj_id = ?";
|
|
req = "UPDATE pets SET name=?,level=?,curHp=?,curMp=?,exp=?,sp=?,fed=?,ownerId=?,restore=? " + "WHERE item_obj_id = ?";
|
|
|
|
+ }
|
|
|
|
|
|
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
|
|
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
|
|
{
|
|
{
|
|
@@ -947,9 +1018,13 @@ public class L2PetInstance extends L2Summon
|
|
_respawned = true;
|
|
_respawned = true;
|
|
|
|
|
|
if (_restoreSummon)
|
|
if (_restoreSummon)
|
|
|
|
+ {
|
|
CharSummonTable.getInstance().getPets().put(getOwner().getObjectId(), getControlObjectId());
|
|
CharSummonTable.getInstance().getPets().put(getOwner().getObjectId(), getControlObjectId());
|
|
|
|
+ }
|
|
else
|
|
else
|
|
|
|
+ {
|
|
CharSummonTable.getInstance().getPets().remove(getOwner().getObjectId());
|
|
CharSummonTable.getInstance().getPets().remove(getOwner().getObjectId());
|
|
|
|
+ }
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
catch (Exception e)
|
|
{
|
|
{
|
|
@@ -957,7 +1032,7 @@ public class L2PetInstance extends L2Summon
|
|
}
|
|
}
|
|
|
|
|
|
L2ItemInstance itemInst = getControlItem();
|
|
L2ItemInstance itemInst = getControlItem();
|
|
- if (itemInst != null && itemInst.getEnchantLevel() != getStat().getLevel())
|
|
|
|
|
|
+ if ((itemInst != null) && (itemInst.getEnchantLevel() != getStat().getLevel()))
|
|
{
|
|
{
|
|
itemInst.setEnchantLevel(getStat().getLevel());
|
|
itemInst.setEnchantLevel(getStat().getLevel());
|
|
itemInst.updateDatabase();
|
|
itemInst.updateDatabase();
|
|
@@ -968,11 +1043,15 @@ public class L2PetInstance extends L2Summon
|
|
public void storeEffect(boolean storeEffects)
|
|
public void storeEffect(boolean storeEffects)
|
|
{
|
|
{
|
|
if (!Config.SUMMON_STORE_SKILL_COOLTIME)
|
|
if (!Config.SUMMON_STORE_SKILL_COOLTIME)
|
|
|
|
+ {
|
|
return;
|
|
return;
|
|
|
|
+ }
|
|
|
|
|
|
// Clear list for overwrite
|
|
// Clear list for overwrite
|
|
if (SummonEffectsTable.getInstance().getPetEffects().contains(getControlObjectId()))
|
|
if (SummonEffectsTable.getInstance().getPetEffects().contains(getControlObjectId()))
|
|
|
|
+ {
|
|
SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).clear();
|
|
SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).clear();
|
|
|
|
+ }
|
|
|
|
|
|
try (Connection con = L2DatabaseFactory.getInstance().getConnection();
|
|
try (Connection con = L2DatabaseFactory.getInstance().getConnection();
|
|
PreparedStatement ps1 = con.prepareStatement(DELETE_SKILL_SAVE);
|
|
PreparedStatement ps1 = con.prepareStatement(DELETE_SKILL_SAVE);
|
|
@@ -992,7 +1071,9 @@ public class L2PetInstance extends L2Summon
|
|
for (L2Effect effect : getAllEffects())
|
|
for (L2Effect effect : getAllEffects())
|
|
{
|
|
{
|
|
if (effect == null)
|
|
if (effect == null)
|
|
|
|
+ {
|
|
continue;
|
|
continue;
|
|
|
|
+ }
|
|
|
|
|
|
switch (effect.getEffectType())
|
|
switch (effect.getEffectType())
|
|
{
|
|
{
|
|
@@ -1005,7 +1086,9 @@ public class L2PetInstance extends L2Summon
|
|
|
|
|
|
L2Skill skill = effect.getSkill();
|
|
L2Skill skill = effect.getSkill();
|
|
if (storedSkills.contains(skill.getReuseHashCode()))
|
|
if (storedSkills.contains(skill.getReuseHashCode()))
|
|
|
|
+ {
|
|
continue;
|
|
continue;
|
|
|
|
+ }
|
|
|
|
|
|
storedSkills.add(skill.getReuseHashCode());
|
|
storedSkills.add(skill.getReuseHashCode());
|
|
|
|
|
|
@@ -1020,7 +1103,9 @@ public class L2PetInstance extends L2Summon
|
|
ps2.execute();
|
|
ps2.execute();
|
|
|
|
|
|
if (!SummonEffectsTable.getInstance().getPetEffects().contains(getControlObjectId()))
|
|
if (!SummonEffectsTable.getInstance().getPetEffects().contains(getControlObjectId()))
|
|
|
|
+ {
|
|
SummonEffectsTable.getInstance().getPetEffects().put(getControlObjectId(), new FastList<SummonEffect>());
|
|
SummonEffectsTable.getInstance().getPetEffects().put(getControlObjectId(), new FastList<SummonEffect>());
|
|
|
|
+ }
|
|
|
|
|
|
SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).add(SummonEffectsTable.getInstance().new SummonEffect(skill, effect.getCount(), effect.getTime()));
|
|
SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).add(SummonEffectsTable.getInstance().new SummonEffect(skill, effect.getCount(), effect.getTime()));
|
|
}
|
|
}
|
|
@@ -1053,12 +1138,16 @@ public class L2PetInstance extends L2Summon
|
|
|
|
|
|
final L2Skill skill = SkillTable.getInstance().getInfo(rset.getInt("skill_id"), rset.getInt("skill_level"));
|
|
final L2Skill skill = SkillTable.getInstance().getInfo(rset.getInt("skill_id"), rset.getInt("skill_level"));
|
|
if (skill == null)
|
|
if (skill == null)
|
|
|
|
+ {
|
|
continue;
|
|
continue;
|
|
|
|
+ }
|
|
|
|
|
|
if (skill.hasEffects())
|
|
if (skill.hasEffects())
|
|
{
|
|
{
|
|
if (!SummonEffectsTable.getInstance().getPetEffects().contains(getControlObjectId()))
|
|
if (!SummonEffectsTable.getInstance().getPetEffects().contains(getControlObjectId()))
|
|
|
|
+ {
|
|
SummonEffectsTable.getInstance().getPetEffects().put(getControlObjectId(), new FastList<SummonEffect>());
|
|
SummonEffectsTable.getInstance().getPetEffects().put(getControlObjectId(), new FastList<SummonEffect>());
|
|
|
|
+ }
|
|
|
|
|
|
SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).add(SummonEffectsTable.getInstance().new SummonEffect(skill, effectCount, effectCurTime));
|
|
SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).add(SummonEffectsTable.getInstance().new SummonEffect(skill, effectCount, effectCurTime));
|
|
}
|
|
}
|
|
@@ -1076,7 +1165,9 @@ public class L2PetInstance extends L2Summon
|
|
finally
|
|
finally
|
|
{
|
|
{
|
|
if (SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()) == null)
|
|
if (SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()) == null)
|
|
|
|
+ {
|
|
return;
|
|
return;
|
|
|
|
+ }
|
|
|
|
|
|
for (SummonEffect se : SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()))
|
|
for (SummonEffect se : SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()))
|
|
{
|
|
{
|
|
@@ -1106,7 +1197,9 @@ public class L2PetInstance extends L2Summon
|
|
_feedTask.cancel(false);
|
|
_feedTask.cancel(false);
|
|
_feedTask = null;
|
|
_feedTask = null;
|
|
if (Config.DEBUG)
|
|
if (Config.DEBUG)
|
|
|
|
+ {
|
|
_logPet.fine("Pet [#" + getObjectId() + "] feed task stop");
|
|
_logPet.fine("Pet [#" + getObjectId() + "] feed task stop");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1115,7 +1208,7 @@ public class L2PetInstance extends L2Summon
|
|
// stop feeding task if its active
|
|
// stop feeding task if its active
|
|
|
|
|
|
stopFeed();
|
|
stopFeed();
|
|
- if (!isDead() && getOwner().getPet() == this)
|
|
|
|
|
|
+ if (!isDead() && (getOwner().getPet() == this))
|
|
{
|
|
{
|
|
_feedTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new FeedTask(), 10000, 10000);
|
|
_feedTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new FeedTask(), 10000, 10000);
|
|
}
|
|
}
|
|
@@ -1131,7 +1224,9 @@ public class L2PetInstance extends L2Summon
|
|
if (!isDead())
|
|
if (!isDead())
|
|
{
|
|
{
|
|
if (getInventory() != null)
|
|
if (getInventory() != null)
|
|
|
|
+ {
|
|
getInventory().deleteMe();
|
|
getInventory().deleteMe();
|
|
|
|
+ }
|
|
L2World.getInstance().removePet(owner.getObjectId());
|
|
L2World.getInstance().removePet(owner.getObjectId());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1146,7 +1241,7 @@ public class L2PetInstance extends L2Summon
|
|
if (_expBeforeDeath > 0)
|
|
if (_expBeforeDeath > 0)
|
|
{
|
|
{
|
|
// Restore the specified % of lost experience.
|
|
// Restore the specified % of lost experience.
|
|
- getStat().addExp(Math.round((_expBeforeDeath - getStat().getExp()) * restorePercent / 100));
|
|
|
|
|
|
+ getStat().addExp(Math.round(((_expBeforeDeath - getStat().getExp()) * restorePercent) / 100));
|
|
_expBeforeDeath = 0;
|
|
_expBeforeDeath = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1156,10 +1251,10 @@ public class L2PetInstance extends L2Summon
|
|
// TODO Need Correct Penalty
|
|
// TODO Need Correct Penalty
|
|
|
|
|
|
int lvl = getStat().getLevel();
|
|
int lvl = getStat().getLevel();
|
|
- double percentLost = -0.07 * lvl + 6.5;
|
|
|
|
|
|
+ double percentLost = (-0.07 * lvl) + 6.5;
|
|
|
|
|
|
// Calculate the Experience loss
|
|
// Calculate the Experience loss
|
|
- long lostExp = Math.round((getStat().getExpForLevel(lvl + 1) - getStat().getExpForLevel(lvl)) * percentLost / 100);
|
|
|
|
|
|
+ long lostExp = Math.round(((getStat().getExpForLevel(lvl + 1) - getStat().getExpForLevel(lvl)) * percentLost) / 100);
|
|
|
|
|
|
// Get the Experience before applying penalty
|
|
// Get the Experience before applying penalty
|
|
_expBeforeDeath = getStat().getExp();
|
|
_expBeforeDeath = getStat().getExp();
|
|
@@ -1171,10 +1266,14 @@ public class L2PetInstance extends L2Summon
|
|
@Override
|
|
@Override
|
|
public void addExpAndSp(long addToExp, int addToSp)
|
|
public void addExpAndSp(long addToExp, int addToSp)
|
|
{
|
|
{
|
|
- if (getNpcId() == 12564) // SinEater
|
|
|
|
|
|
+ if (getNpcId() == 12564)
|
|
|
|
+ {
|
|
getStat().addExpAndSp(Math.round(addToExp * Config.SINEATER_XP_RATE), addToSp);
|
|
getStat().addExpAndSp(Math.round(addToExp * Config.SINEATER_XP_RATE), addToSp);
|
|
|
|
+ }
|
|
else
|
|
else
|
|
|
|
+ {
|
|
getStat().addExpAndSp(Math.round(addToExp * Config.PET_XP_RATE), addToSp);
|
|
getStat().addExpAndSp(Math.round(addToExp * Config.PET_XP_RATE), addToSp);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -1222,10 +1321,12 @@ public class L2PetInstance extends L2Summon
|
|
public final int getSkillLevel(int skillId)
|
|
public final int getSkillLevel(int skillId)
|
|
{
|
|
{
|
|
if (getKnownSkill(skillId) == null)
|
|
if (getKnownSkill(skillId) == null)
|
|
|
|
+ {
|
|
return -1;
|
|
return -1;
|
|
|
|
+ }
|
|
|
|
|
|
final int lvl = getLevel();
|
|
final int lvl = getLevel();
|
|
- return lvl > 70 ? 7 + (lvl - 70) / 5 : lvl / 10;
|
|
|
|
|
|
+ return lvl > 70 ? 7 + ((lvl - 70) / 5) : lvl / 10;
|
|
}
|
|
}
|
|
|
|
|
|
public void updateRefOwner(L2PcInstance owner)
|
|
public void updateRefOwner(L2PcInstance owner)
|
|
@@ -1249,7 +1350,7 @@ public class L2PetInstance extends L2Summon
|
|
{
|
|
{
|
|
long weightproc = (((getCurrentLoad() - getBonusWeightPenalty()) * 1000) / maxLoad);
|
|
long weightproc = (((getCurrentLoad() - getBonusWeightPenalty()) * 1000) / maxLoad);
|
|
int newWeightPenalty;
|
|
int newWeightPenalty;
|
|
- if (weightproc < 500 || getOwner().getDietMode())
|
|
|
|
|
|
+ if ((weightproc < 500) || getOwner().getDietMode())
|
|
{
|
|
{
|
|
newWeightPenalty = 0;
|
|
newWeightPenalty = 0;
|
|
}
|
|
}
|
|
@@ -1305,7 +1406,9 @@ public class L2PetInstance extends L2Summon
|
|
{
|
|
{
|
|
L2ItemInstance weapon = getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
|
|
L2ItemInstance weapon = getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
|
|
if (weapon != null)
|
|
if (weapon != null)
|
|
|
|
+ {
|
|
return weapon.getItemId();
|
|
return weapon.getItemId();
|
|
|
|
+ }
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1314,7 +1417,9 @@ public class L2PetInstance extends L2Summon
|
|
{
|
|
{
|
|
L2ItemInstance weapon = getInventory().getPaperdollItem(Inventory.PAPERDOLL_CHEST);
|
|
L2ItemInstance weapon = getInventory().getPaperdollItem(Inventory.PAPERDOLL_CHEST);
|
|
if (weapon != null)
|
|
if (weapon != null)
|
|
|
|
+ {
|
|
return weapon.getItemId();
|
|
return weapon.getItemId();
|
|
|
|
+ }
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1322,7 +1427,9 @@ public class L2PetInstance extends L2Summon
|
|
{
|
|
{
|
|
L2ItemInstance weapon = getInventory().getPaperdollItem(Inventory.PAPERDOLL_NECK);
|
|
L2ItemInstance weapon = getInventory().getPaperdollItem(Inventory.PAPERDOLL_NECK);
|
|
if (weapon != null)
|
|
if (weapon != null)
|
|
|
|
+ {
|
|
return weapon.getItemId();
|
|
return weapon.getItemId();
|
|
|
|
+ }
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1361,17 +1468,9 @@ public class L2PetInstance extends L2Summon
|
|
super.setName(name);
|
|
super.setName(name);
|
|
}
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
|
- protected void broadcastModifiedStats(List<Stats> stats)
|
|
|
|
- {
|
|
|
|
- // check for initialization
|
|
|
|
- if (getInstanceType() == InstanceType.L2PetInstance)
|
|
|
|
- super.broadcastModifiedStats(stats);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
public boolean canEatFoodId(int itemId)
|
|
public boolean canEatFoodId(int itemId)
|
|
{
|
|
{
|
|
- return _data.getFood().contains(Integer.valueOf(itemId));
|
|
|
|
|
|
+ return _data.getFood().contains(itemId);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|