Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: java/com/l2jserver/gameserver/network/clientpackets/RequestPetUseItem.java
- ===================================================================
- --- java/com/l2jserver/gameserver/network/clientpackets/RequestPetUseItem.java (revision 65)
- +++ java/com/l2jserver/gameserver/network/clientpackets/RequestPetUseItem.java (working copy)
- @@ -73,48 +73,41 @@
- return;
- }
- - if (Config.DEBUG)
- + // If the item has reuse time and it has not passed.
- + // Message from reuse delay must come from item.
- + final int reuseDelay = item.getReuseDelay();
- + if (reuseDelay > 0)
- {
- - _log.finest(activeChar.getObjectId() + ": pet use item " + _objectId);
- - }
- -
- - if (!item.isEquipped())
- - {
- - if (!item.getItem().checkCondition(pet, pet, true))
- + final long reuse = pet.getItemRemainingReuseTime(item.getObjectId());
- + if (reuse > 0)
- {
- return;
- }
- }
- - // check if the item matches the pet
- - if (item.isEquipable())
- + if (Config.DEBUG)
- {
- - // all pet items have condition
- - if (!item.getItem().isConditionAttached())
- - {
- - activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
- - return;
- - }
- - useItem(pet, item, activeChar);
- - return;
- + _log.finest(activeChar.getObjectId() + ": pet use item " + _objectId);
- }
- - final IItemHandler handler = ItemHandler.getInstance().getHandler(item.getEtcItem());
- - if (handler != null)
- + if (!item.isEquipped() && !item.getItem().checkCondition(pet, pet, true))
- {
- - useItem(pet, item, activeChar);
- + return;
- }
- - else
- - {
- - activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
- - }
- - return;
- +
- + useItem(pet, item, activeChar);
- }
- private void useItem(L2PetInstance pet, L2ItemInstance item, L2PcInstance activeChar)
- {
- if (item.isEquipable())
- {
- + if (!item.getItem().isConditionAttached())
- + {
- + activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
- + return;
- + }
- +
- if (item.isEquipped())
- {
- pet.getInventory().unEquipItemInSlot(item.getLocationSlot());
- @@ -132,11 +125,19 @@
- final IItemHandler handler = ItemHandler.getInstance().getHandler(item.getEtcItem());
- if (handler != null)
- {
- - handler.useItem(pet, item, false);
- - pet.updateAndBroadcastStatus(1);
- + if (handler.useItem(pet, item, false))
- + {
- + final int reuseDelay = item.getReuseDelay();
- + if (reuseDelay > 0)
- + {
- + activeChar.addTimeStampItem(item, reuseDelay);
- + }
- + pet.updateAndBroadcastStatus(1);
- + }
- }
- else
- {
- + activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
- _log.warning("No item handler registered for itemId: " + item.getItemId());
- }
- }
- Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 65)
- +++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy)
- @@ -14386,8 +14386,9 @@
- }
- }
- - private final FastMap<Integer, TimeStamp> _reuseTimeStampsItems = new FastMap<>();
- + private final Map<Integer, TimeStamp> _reuseTimeStampsItems = new FastMap<>();
- + @Override
- public void addTimeStampItem(L2ItemInstance item, long reuse)
- {
- _reuseTimeStampsItems.put(item.getObjectId(), new TimeStamp(item, reuse));
- @@ -14422,9 +14423,9 @@
- return 0;
- }
- - private final FastMap<Integer, TimeStamp> _reuseTimeStampsSkills = new FastMap<>();
- + private final Map<Integer, TimeStamp> _reuseTimeStampsSkills = new FastMap<>();
- - public FastMap<Integer, TimeStamp> getSkillReuseTimeStamps()
- + public Map<Integer, TimeStamp> getSkillReuseTimeStamps()
- {
- return _reuseTimeStampsSkills;
- }
- Index: java/com/l2jserver/gameserver/network/clientpackets/UseItem.java
- ===================================================================
- --- java/com/l2jserver/gameserver/network/clientpackets/UseItem.java (revision 65)
- +++ java/com/l2jserver/gameserver/network/clientpackets/UseItem.java (working copy)
- @@ -231,7 +231,8 @@
- {
- return; // no message
- }
- - else if (activeChar.isCombatFlagEquipped())
- +
- + if (activeChar.isCombatFlagEquipped())
- {
- return;
- }
- Index: java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java (revision 65)
- +++ java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java (working copy)
- @@ -18,11 +18,13 @@
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.util.List;
- +import java.util.Map;
- import java.util.concurrent.Future;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javolution.util.FastList;
- +import javolution.util.FastMap;
- import com.l2jserver.Config;
- import com.l2jserver.L2DatabaseFactory;
- @@ -44,6 +46,7 @@
- import com.l2jserver.gameserver.model.L2PetData;
- import com.l2jserver.gameserver.model.L2PetLevelData;
- import com.l2jserver.gameserver.model.L2World;
- +import com.l2jserver.gameserver.model.TimeStamp;
- import com.l2jserver.gameserver.model.actor.L2Character;
- import com.l2jserver.gameserver.model.actor.L2Summon;
- import com.l2jserver.gameserver.model.actor.stat.PetStat;
- @@ -83,6 +86,9 @@
- private static final String RESTORE_SKILL_SAVE = "SELECT petObjItemId,skill_id,skill_level,effect_count,effect_cur_time,buff_index FROM character_pet_skills_save WHERE petObjItemId=? ORDER BY buff_index ASC";
- private static final String DELETE_SKILL_SAVE = "DELETE FROM character_pet_skills_save WHERE petObjItemId=?";
- + private final Map<Integer, TimeStamp> _reuseTimeStampsSkills = new FastMap<>();
- + private final Map<Integer, TimeStamp> _reuseTimeStampsItems = new FastMap<>();
- +
- private int _curFed;
- private final PetInventory _inventory;
- private final int _controlObjectId;
- @@ -1470,7 +1476,44 @@
- return _data.getFood().contains(itemId);
- }
- + public Map<Integer, TimeStamp> getSkillReuseTimeStamps()
- + {
- + return _reuseTimeStampsSkills;
- + }
- +
- @Override
- + public void addTimeStamp(L2Skill skill, long reuse)
- + {
- + _reuseTimeStampsSkills.put(skill.getReuseHashCode(), new TimeStamp(skill, reuse));
- + }
- +
- + @Override
- + public long getSkillRemainingReuseTime(int skillReuseHashId)
- + {
- + if (_reuseTimeStampsSkills.isEmpty() || !_reuseTimeStampsSkills.containsKey(skillReuseHashId))
- + {
- + return -1;
- + }
- + return _reuseTimeStampsSkills.get(skillReuseHashId).getRemaining();
- + }
- +
- + @Override
- + public void addTimeStampItem(L2ItemInstance item, long reuse)
- + {
- + _reuseTimeStampsItems.put(item.getObjectId(), new TimeStamp(item, reuse));
- + }
- +
- + @Override
- + public long getItemRemainingReuseTime(int itemObjId)
- + {
- + if (_reuseTimeStampsItems.isEmpty() || !_reuseTimeStampsItems.containsKey(itemObjId))
- + {
- + return -1;
- + }
- + return _reuseTimeStampsItems.get(itemObjId).getRemaining();
- + }
- +
- + @Override
- public boolean isPet()
- {
- return true;
- Index: java/com/l2jserver/gameserver/model/actor/L2Character.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/actor/L2Character.java (revision 65)
- +++ java/com/l2jserver/gameserver/model/actor/L2Character.java (working copy)
- @@ -2304,15 +2304,42 @@
- }
- /**
- - * Index according to skill id the current timestamp of use.
- + * @param item
- + * @param reuse
- + */
- + public void addTimeStampItem(L2ItemInstance item, long reuse)
- + {
- + // Dummy
- + }
- +
- + /**
- + * @param itemObjId the item object Id
- + * @return the reuse time stamp
- + */
- + public long getItemRemainingReuseTime(int itemObjId)
- + {
- + return -1;
- + }
- +
- + /**
- + * Index according to skill id the current time stamp of use.
- * @param skill id
- * @param reuse delay
- */
- public void addTimeStamp(L2Skill skill, long reuse)
- {
- - /***/
- + // Dummy
- }
- -
- +
- + /**
- + * @param skillReuseHashId
- + * @return -1
- + */
- + public long getSkillRemainingReuseTime(int skillReuseHashId)
- + {
- + return -1;
- + }
- +
- public void startFusionSkill(L2Character target, L2Skill skill)
- {
- if (skill.getSkillType() != L2SkillType.FUSION)
- Index: dist/game/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java
- ===================================================================
- --- dist/game/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java (revision 415)
- +++ dist/game/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java (working copy)
- @@ -189,7 +189,7 @@
- if (itemSkill.getReuseDelay() > 0)
- {
- - activeChar.addTimeStamp(itemSkill, itemSkill.getReuseDelay());
- + playable.addTimeStamp(itemSkill, itemSkill.getReuseDelay());
- }
- }
- }
- @@ -202,66 +202,69 @@
- * @param item the item being used
- * @return {@code true} if the the item or skill to check is available, {@code false} otherwise
- */
- - private boolean checkReuse(L2PcInstance player, L2Skill skill, L2ItemInstance item)
- + private boolean checkReuse(L2Playable playable, L2Skill skill, L2ItemInstance item)
- {
- SystemMessage sm = null;
- - final long remainingTime = (skill != null) ? player.getSkillRemainingReuseTime(skill.getReuseHashCode()) : player.getItemRemainingReuseTime(item.getObjectId());
- + final long remainingTime = (skill != null) ? playable.getSkillRemainingReuseTime(skill.getReuseHashCode()) : playable.getItemRemainingReuseTime(item.getObjectId());
- final boolean isAvailable = remainingTime <= 0;
- - if (!isAvailable)
- + if (playable.isPlayer())
- {
- - final int hours = (int) (remainingTime / 3600000L);
- - final int minutes = (int) (remainingTime % 3600000L) / 60000;
- - final int seconds = (int) ((remainingTime / 1000) % 60);
- - if (hours > 0)
- + if (!isAvailable)
- {
- - sm = SystemMessage.getSystemMessage(SystemMessageId.S2_HOURS_S3_MINUTES_S4_SECONDS_REMAINING_FOR_REUSE_S1);
- - if ((skill == null) || skill.isStatic())
- + final int hours = (int) (remainingTime / 3600000L);
- + final int minutes = (int) (remainingTime % 3600000L) / 60000;
- + final int seconds = (int) ((remainingTime / 1000) % 60);
- + if (hours > 0)
- {
- - sm.addItemName(item);
- + sm = SystemMessage.getSystemMessage(SystemMessageId.S2_HOURS_S3_MINUTES_S4_SECONDS_REMAINING_FOR_REUSE_S1);
- + if ((skill == null) || skill.isStatic())
- + {
- + sm.addItemName(item);
- + }
- + else
- + {
- + sm.addSkillName(skill);
- + }
- + sm.addNumber(hours);
- + sm.addNumber(minutes);
- }
- - else
- + else if (minutes > 0)
- {
- - sm.addSkillName(skill);
- + sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MINUTES_S3_SECONDS_REMAINING_FOR_REUSE_S1);
- + if ((skill == null) || skill.isStatic())
- + {
- + sm.addItemName(item);
- + }
- + else
- + {
- + sm.addSkillName(skill);
- + }
- + sm.addNumber(minutes);
- }
- - sm.addNumber(hours);
- - sm.addNumber(minutes);
- - }
- - else if (minutes > 0)
- - {
- - sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MINUTES_S3_SECONDS_REMAINING_FOR_REUSE_S1);
- - if ((skill == null) || skill.isStatic())
- - {
- - sm.addItemName(item);
- - }
- else
- {
- - sm.addSkillName(skill);
- + sm = SystemMessage.getSystemMessage(SystemMessageId.S2_SECONDS_REMAINING_FOR_REUSE_S1);
- + if ((skill == null) || skill.isStatic())
- + {
- + sm.addItemName(item);
- + }
- + else
- + {
- + sm.addSkillName(skill);
- + }
- }
- - sm.addNumber(minutes);
- + sm.addNumber(seconds);
- }
- - else
- + else if (skill == null)
- {
- - sm = SystemMessage.getSystemMessage(SystemMessageId.S2_SECONDS_REMAINING_FOR_REUSE_S1);
- - if ((skill == null) || skill.isStatic())
- - {
- - sm.addItemName(item);
- - }
- - else
- - {
- - sm.addSkillName(skill);
- - }
- + sm = SystemMessage.getSystemMessage(SystemMessageId.S1_PREPARED_FOR_REUSE);
- + sm.addItemName(item);
- }
- - sm.addNumber(seconds);
- + if (sm != null)
- + {
- + playable.sendPacket(sm);
- + }
- }
- - else if (skill == null)
- - {
- - sm = SystemMessage.getSystemMessage(SystemMessageId.S1_PREPARED_FOR_REUSE);
- - sm.addItemName(item);
- - }
- - if (sm != null)
- - {
- - player.sendPacket(sm);
- - }
- return isAvailable;
- }
- }
- \ No newline at end of file
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement