diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java index 03cc97bd8c..e482ddef51 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -435,6 +435,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3726,8 +3731,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3736,7 +3740,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9537,24 +9541,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13831,22 +13842,38 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList(boolean open) { - sendPacket(new ItemList(this, open)); - sendPacket(new ExQuestItemList(this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(this, open)); + sendPacket(new ExQuestItemList(this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 78bac08bd5..a8de480f56 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1426,17 +1426,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java index f66fe41530..bb0b7f59e9 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -437,6 +437,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3728,8 +3733,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3738,7 +3742,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9540,24 +9544,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13834,22 +13845,38 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList(boolean open) { - sendPacket(new ItemList(this, open)); - sendPacket(new ExQuestItemList(this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(this, open)); + sendPacket(new ExQuestItemList(this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 88cd0ebdf3..a3216c4005 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1432,17 +1432,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Player.java index a57371c3e3..290d2671bd 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -439,6 +439,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3730,8 +3735,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3740,7 +3744,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9542,24 +9546,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13837,22 +13848,38 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList(boolean open) { - sendPacket(new ItemList(this, open)); - sendPacket(new ExQuestItemList(this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(this, open)); + sendPacket(new ExQuestItemList(this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 88cd0ebdf3..a3216c4005 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1432,17 +1432,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Player.java index b924e9f2dc..1109a5a37c 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -443,6 +443,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3726,8 +3731,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3736,7 +3740,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9556,24 +9560,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13832,22 +13843,38 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList(boolean open) { - sendPacket(new ItemList(this, open)); - sendPacket(new ExQuestItemList(this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(this, open)); + sendPacket(new ExQuestItemList(this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index ed552364d9..dcdd36e7fe 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1432,17 +1432,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Player.java index a796bc6318..5b7cc79376 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -441,6 +441,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3742,8 +3747,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3752,7 +3756,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9581,24 +9585,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13874,24 +13885,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index a8ec81d6af..6b66ff741a 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1534,17 +1534,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Player.java index b05c24b25d..f9f2fd6aa2 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -442,6 +442,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3755,8 +3760,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3765,7 +3769,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9594,24 +9598,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13890,24 +13901,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 998fcb6f21..6d25e774ea 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1616,17 +1616,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Player.java index 07e5b341d1..874233e2ac 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -442,6 +442,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3756,8 +3761,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3766,7 +3770,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9595,24 +9599,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13896,24 +13907,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 998fcb6f21..6d25e774ea 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1616,17 +1616,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Player.java index 89c6707bf0..e8e9b59d11 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -454,6 +454,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3693,8 +3698,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3703,7 +3707,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9610,24 +9614,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13932,24 +13943,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 2710aaf2b6..b0d8159710 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1610,17 +1610,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Player.java index 7d1494e422..5c0b5adc72 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -451,6 +451,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3724,8 +3729,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3734,7 +3738,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9712,24 +9716,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -14048,24 +14059,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 2312258df6..256b0e101b 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1592,17 +1592,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Player.java index c0c21c858a..de37747025 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -464,6 +464,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3741,8 +3746,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3751,7 +3755,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9738,24 +9742,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -14086,24 +14097,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 2312258df6..256b0e101b 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1592,17 +1592,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/actor/Player.java index 5d51cd9ef7..8fa030944b 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -465,6 +465,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3762,8 +3767,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3772,7 +3776,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9788,24 +9792,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -14148,24 +14159,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 965207424a..7e30810439 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1603,17 +1603,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_10.1_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/actor/Player.java index 4e908ebf7d..9cc59df6de 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -465,6 +465,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3790,8 +3795,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3800,7 +3804,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9816,24 +9820,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -14176,24 +14187,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 965207424a..7e30810439 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1603,17 +1603,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java index 587bf5ca63..66a50dfb33 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -439,6 +439,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3705,8 +3710,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3715,7 +3719,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9441,24 +9445,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13648,25 +13659,38 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } - /** - * @param open - */ public void sendItemList(boolean open) { - sendPacket(new ItemList(this, open)); - sendPacket(new ExQuestItemList(this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(this, open)); + sendPacket(new ExQuestItemList(this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index cb5f70a595..b7e1813be7 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1434,17 +1434,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Player.java index 597279cedb..f6a5c2c789 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -439,6 +439,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3705,8 +3710,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3715,7 +3719,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9441,24 +9445,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13648,25 +13659,38 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } - /** - * @param open - */ public void sendItemList(boolean open) { - sendPacket(new ItemList(this, open)); - sendPacket(new ExQuestItemList(this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(this, open)); + sendPacket(new ExQuestItemList(this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index cb5f70a595..b7e1813be7 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1434,17 +1434,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Player.java index 5da72ca7c0..301dc946a7 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -437,6 +437,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3689,8 +3694,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3699,7 +3703,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9427,24 +9431,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13634,24 +13645,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 426820e765..a8afded375 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1536,17 +1536,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Player.java index 6b6b514d60..5aebac5261 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -446,6 +446,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3716,8 +3721,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3726,7 +3730,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9467,24 +9471,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13695,24 +13706,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 584c900aef..6f8d9bcbf9 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1618,17 +1618,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Player.java index e130b4826f..d59a1371b2 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -446,6 +446,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3716,8 +3721,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3726,7 +3730,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9467,24 +9471,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13695,24 +13706,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 584c900aef..6f8d9bcbf9 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1618,17 +1618,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Player.java index 3060251b1e..0586d9b60d 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -460,6 +460,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3643,8 +3648,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3653,7 +3657,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9421,24 +9425,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13705,24 +13716,40 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 28f1d07c13..9336f00f73 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1612,17 +1612,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java index 455b315d83..6b76fb2b71 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -434,6 +434,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3686,8 +3691,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3696,7 +3700,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9429,24 +9433,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13644,25 +13655,38 @@ public class Player extends Playable return _questZoneId; } - /** - * @param iu - */ public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } - /** - * @param open - */ public void sendItemList(boolean open) { - sendPacket(new ItemList(this, open)); - sendPacket(new ExQuestItemList(this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(this, open)); + sendPacket(new ExQuestItemList(this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index c3962abe78..e623491691 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1426,17 +1426,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Player.java index 3bbaf39dd7..88da9dc12d 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -470,6 +470,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3724,8 +3729,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3734,7 +3738,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9586,24 +9590,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -13976,21 +13987,40 @@ public class Player extends Playable return _questZoneId; } - public void sendInventoryUpdate(IClientOutgoingPacket iu) + public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Summon.java index 66c8c07051..9a0311e340 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -73,6 +73,7 @@ import org.l2jmobius.gameserver.network.serverpackets.pet.ExPetInfo; import org.l2jmobius.gameserver.network.serverpackets.pet.ExPetSkillList; import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete; import org.l2jmobius.gameserver.network.serverpackets.pet.PetInfo; +import org.l2jmobius.gameserver.network.serverpackets.pet.PetInventoryUpdate; import org.l2jmobius.gameserver.network.serverpackets.pet.PetItemList; import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate; import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; @@ -1145,12 +1146,12 @@ public abstract class Summon extends Playable return _summonPoints; } - public void sendInventoryUpdate(IClientOutgoingPacket iu) + public void sendInventoryUpdate(PetInventoryUpdate iu) { final Player owner = _owner; if (owner != null) { - owner.sendInventoryUpdate(iu); + owner.sendPacket(iu); if (getInventory() != null) { owner.sendPacket(new PetItemList(getInventory().getItems())); diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java index c01453ced4..0ac120329e 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java @@ -870,7 +870,7 @@ public class Pet extends Summon { final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(newItem); - sendInventoryUpdate(iu); + getOwner().sendInventoryUpdate(iu); } return newItem; @@ -1531,7 +1531,7 @@ public class Pet extends Summon controlItem.updateDatabase(); final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(controlItem); - sendInventoryUpdate(iu); + getOwner().sendInventoryUpdate(iu); } } else @@ -1677,9 +1677,9 @@ public class Pet extends Summon } } - final PetInventoryUpdate petUI = new PetInventoryUpdate(); - petUI.addItems(items); - sendInventoryUpdate(petUI); + final PetInventoryUpdate petIU = new PetInventoryUpdate(); + petIU.addItems(items); + sendInventoryUpdate(petIU); getStat().recalculateStats(true); if (abortAttack) { diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 87e8da66c4..60615ae5b8 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1720,17 +1720,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Player.java index 6ab2016751..41ef754de0 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -494,6 +494,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3766,8 +3771,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3776,7 +3780,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9653,24 +9657,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -14070,21 +14081,40 @@ public class Player extends Playable return _questZoneId; } - public void sendInventoryUpdate(IClientOutgoingPacket iu) + public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Summon.java index d44a3c6854..5b24c76217 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -73,6 +73,7 @@ import org.l2jmobius.gameserver.network.serverpackets.pet.ExPetInfo; import org.l2jmobius.gameserver.network.serverpackets.pet.ExPetSkillList; import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete; import org.l2jmobius.gameserver.network.serverpackets.pet.PetInfo; +import org.l2jmobius.gameserver.network.serverpackets.pet.PetInventoryUpdate; import org.l2jmobius.gameserver.network.serverpackets.pet.PetItemList; import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate; import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; @@ -1145,12 +1146,12 @@ public abstract class Summon extends Playable return _summonPoints; } - public void sendInventoryUpdate(IClientOutgoingPacket iu) + public void sendInventoryUpdate(PetInventoryUpdate iu) { final Player owner = _owner; if (owner != null) { - owner.sendInventoryUpdate(iu); + owner.sendPacket(iu); if (getInventory() != null) { owner.sendPacket(new PetItemList(getInventory().getItems())); diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java index 00d34669ee..11237890c1 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java @@ -870,7 +870,7 @@ public class Pet extends Summon { final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(newItem); - sendInventoryUpdate(iu); + getOwner().sendInventoryUpdate(iu); } return newItem; @@ -1531,7 +1531,7 @@ public class Pet extends Summon controlItem.updateDatabase(); final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(controlItem); - sendInventoryUpdate(iu); + getOwner().sendInventoryUpdate(iu); } } else @@ -1677,9 +1677,9 @@ public class Pet extends Summon } } - final PetInventoryUpdate petUI = new PetInventoryUpdate(); - petUI.addItems(items); - sendInventoryUpdate(petUI); + final PetInventoryUpdate petIU = new PetInventoryUpdate(); + petIU.addItems(items); + sendInventoryUpdate(petIU); getStat().recalculateStats(true); if (abortAttack) { diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 9ccf975242..e99de08d1f 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1729,17 +1729,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/Player.java index 71ccc59a27..5bf607e98c 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -498,6 +498,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3781,8 +3786,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3791,7 +3795,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9833,24 +9837,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -14250,21 +14261,40 @@ public class Player extends Playable return _questZoneId; } - public void sendInventoryUpdate(IClientOutgoingPacket iu) + public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/Summon.java index df08fa6034..00e3feb41d 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -73,6 +73,7 @@ import org.l2jmobius.gameserver.network.serverpackets.pet.ExPetInfo; import org.l2jmobius.gameserver.network.serverpackets.pet.ExPetSkillList; import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete; import org.l2jmobius.gameserver.network.serverpackets.pet.PetInfo; +import org.l2jmobius.gameserver.network.serverpackets.pet.PetInventoryUpdate; import org.l2jmobius.gameserver.network.serverpackets.pet.PetItemList; import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate; import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; @@ -1145,12 +1146,12 @@ public abstract class Summon extends Playable return _summonPoints; } - public void sendInventoryUpdate(IClientOutgoingPacket iu) + public void sendInventoryUpdate(PetInventoryUpdate iu) { final Player owner = _owner; if (owner != null) { - owner.sendInventoryUpdate(iu); + owner.sendPacket(iu); if (getInventory() != null) { owner.sendPacket(new PetItemList(getInventory().getItems())); diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java index 67d6bf6cde..853c319709 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java @@ -870,7 +870,7 @@ public class Pet extends Summon { final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(newItem); - sendInventoryUpdate(iu); + getOwner().sendInventoryUpdate(iu); } return newItem; @@ -1531,7 +1531,7 @@ public class Pet extends Summon controlItem.updateDatabase(); final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(controlItem); - sendInventoryUpdate(iu); + getOwner().sendInventoryUpdate(iu); } } else @@ -1677,9 +1677,9 @@ public class Pet extends Summon } } - final PetInventoryUpdate petUI = new PetInventoryUpdate(); - petUI.addItems(items); - sendInventoryUpdate(petUI); + final PetInventoryUpdate petIU = new PetInventoryUpdate(); + petIU.addItems(items); + sendInventoryUpdate(petIU); getStat().recalculateStats(true); if (abortAttack) { diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 9ccf975242..e99de08d1f 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1729,17 +1729,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } } diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Player.java index 2c24c92d09..1f7f7e9c4a 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -498,6 +498,11 @@ public class Player extends Playable private long _lastAccess; private long _uptime; + private final Set _inventoryUpdates = ConcurrentHashMap.newKeySet(1); + private ScheduledFuture _inventoryUpdateTask; + private ScheduledFuture _itemListTask; + private ScheduledFuture _skillListTask; + private boolean _subclassLock = false; protected int _baseClass; protected int _activeClass; @@ -3814,8 +3819,7 @@ public class Player extends Playable */ public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage) { - final PlayerInventory inv = _inventory; - if (!inv.validateCapacityByItemId(rewardId, count)) + if (!_inventory.validateCapacityByItemId(rewardId, count)) { if (sendMessage) { @@ -3824,7 +3828,7 @@ public class Player extends Playable return false; } - if (!inv.validateWeightByItemId(rewardId, count)) + if (!_inventory.validateWeightByItemId(rewardId, count)) { if (sendMessage) { @@ -9883,24 +9887,31 @@ public class Player extends Playable public void sendSkillList(int lastLearnedSkillId) { - boolean isDisabled = false; - final SkillList sl = new SkillList(); - for (Skill s : getSkillList()) + if (_skillListTask == null) { - if (_clan != null) + _skillListTask = ThreadPool.schedule(() -> { - isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); - } - - sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); + boolean isDisabled = false; + final SkillList skillList = new SkillList(); + for (Skill skill : getSkillList()) + { + if (_clan != null) + { + isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0); + } + + skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable()); + } + if (lastLearnedSkillId > 0) + { + skillList.setLastLearnedSkillId(lastLearnedSkillId); + } + + sendPacket(skillList); + sendPacket(new AcquireSkillList(this)); + _skillListTask = null; + }, 300); } - if (lastLearnedSkillId > 0) - { - sl.setLastLearnedSkillId(lastLearnedSkillId); - } - sendPacket(sl); - - sendPacket(new AcquireSkillList(this)); } /** @@ -14331,21 +14342,40 @@ public class Player extends Playable return _questZoneId; } - public void sendInventoryUpdate(IClientOutgoingPacket iu) + public void sendInventoryUpdate(InventoryUpdate iu) { - sendPacket(iu); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdates.add(iu); + if (_inventoryUpdateTask == null) + { + _inventoryUpdateTask = ThreadPool.schedule(() -> + { + for (InventoryUpdate packet : _inventoryUpdates) + { + sendPacket(packet); + _inventoryUpdates.remove(packet); + } + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _inventoryUpdateTask = null; + }, 300); + } } public void sendItemList() { - sendPacket(new ItemList(1, this)); - sendPacket(new ItemList(2, this)); - sendPacket(new ExQuestItemList(1, this)); - sendPacket(new ExQuestItemList(2, this)); - sendPacket(new ExAdenaInvenCount(this)); - sendPacket(new ExUserInfoInvenWeight(this)); + if (_itemListTask == null) + { + _itemListTask = ThreadPool.schedule(() -> + { + sendPacket(new ItemList(1, this)); + sendPacket(new ItemList(2, this)); + sendPacket(new ExQuestItemList(1, this)); + sendPacket(new ExQuestItemList(2, this)); + sendPacket(new ExAdenaInvenCount(this)); + sendPacket(new ExUserInfoInvenWeight(this)); + _itemListTask = null; + }, 300); + } } public Fishing getFishing() diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Summon.java index df08fa6034..00e3feb41d 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -73,6 +73,7 @@ import org.l2jmobius.gameserver.network.serverpackets.pet.ExPetInfo; import org.l2jmobius.gameserver.network.serverpackets.pet.ExPetSkillList; import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete; import org.l2jmobius.gameserver.network.serverpackets.pet.PetInfo; +import org.l2jmobius.gameserver.network.serverpackets.pet.PetInventoryUpdate; import org.l2jmobius.gameserver.network.serverpackets.pet.PetItemList; import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate; import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; @@ -1145,12 +1146,12 @@ public abstract class Summon extends Playable return _summonPoints; } - public void sendInventoryUpdate(IClientOutgoingPacket iu) + public void sendInventoryUpdate(PetInventoryUpdate iu) { final Player owner = _owner; if (owner != null) { - owner.sendInventoryUpdate(iu); + owner.sendPacket(iu); if (getInventory() != null) { owner.sendPacket(new PetItemList(getInventory().getItems())); diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java index 67d6bf6cde..853c319709 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/actor/instance/Pet.java @@ -870,7 +870,7 @@ public class Pet extends Summon { final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(newItem); - sendInventoryUpdate(iu); + getOwner().sendInventoryUpdate(iu); } return newItem; @@ -1531,7 +1531,7 @@ public class Pet extends Summon controlItem.updateDatabase(); final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(controlItem); - sendInventoryUpdate(iu); + getOwner().sendInventoryUpdate(iu); } } else @@ -1677,9 +1677,9 @@ public class Pet extends Summon } } - final PetInventoryUpdate petUI = new PetInventoryUpdate(); - petUI.addItems(items); - sendInventoryUpdate(petUI); + final PetInventoryUpdate petIU = new PetInventoryUpdate(); + petIU.addItems(items); + sendInventoryUpdate(petIU); getStat().recalculateStats(true); if (abortAttack) { diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 9ccf975242..e99de08d1f 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -1729,17 +1729,24 @@ public abstract class Inventory extends ItemContainer */ private void checkEquipTask() { - if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) + if (_skillItemTask == null) { - getOwner().getActingPlayer().setUsingSkillItem(true); - _skillItemTask = ThreadPool.schedule(() -> + final Creature owner = getOwner(); + if ((owner != null) && owner.isPlayer()) { - getOwner().getActingPlayer().setUsingSkillItem(false); - getOwner().getStat().recalculateStats(true); - getOwner().updateAbnormalVisualEffects(); - getOwner().getActingPlayer().sendSkillList(); - _skillItemTask = null; - }, 50); + final Player player = owner.getActingPlayer(); + if (player.hasEnteredWorld()) + { + _skillItemTask = ThreadPool.schedule(() -> + { + player.setUsingSkillItem(false); + player.getStat().recalculateStats(true); + player.updateAbnormalVisualEffects(); + player.sendSkillList(); + _skillItemTask = null; + }, 50); + } + } } } diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java index 3378827f34..a260b92df0 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/serverpackets/InventoryUpdate.java @@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate writeItems(packet); return true; } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof InventoryUpdate) + { + final InventoryUpdate iu = (InventoryUpdate) obj; + return getItems().equals(iu.getItems()); + } + return false; + } }