Addition of InventoryUpdate, ItemList and SkillList tasks.

This commit is contained in:
MobiusDevelopment
2022-06-22 22:27:59 +00:00
parent d3330617bd
commit 7934724757
77 changed files with 1954 additions and 912 deletions
@@ -435,6 +435,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3736,7 +3740,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9536,25 +9540,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13831,22 +13842,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList(boolean open) public void sendItemList(boolean open)
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(this, open)); sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this)); sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1426,19 +1426,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -437,6 +437,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3738,7 +3742,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9539,25 +9543,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13834,22 +13845,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList(boolean open) public void sendItemList(boolean open)
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(this, open)); sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this)); sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1432,19 +1432,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -439,6 +439,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3740,7 +3744,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9541,25 +9545,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13837,22 +13848,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList(boolean open) public void sendItemList(boolean open)
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(this, open)); sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this)); sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1432,19 +1432,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -443,6 +443,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3736,7 +3740,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9555,25 +9559,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13832,22 +13843,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList(boolean open) public void sendItemList(boolean open)
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(this, open)); sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this)); sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1432,19 +1432,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -441,6 +441,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3752,7 +3756,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9580,25 +9584,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13874,17 +13885,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -13892,6 +13916,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1534,19 +1534,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -442,6 +442,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3765,7 +3769,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9593,25 +9597,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13890,17 +13901,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -13908,6 +13932,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1616,19 +1616,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -442,6 +442,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3766,7 +3770,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9594,25 +9598,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13896,17 +13907,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -13914,6 +13938,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1616,19 +1616,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -454,6 +454,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3703,7 +3707,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9609,25 +9613,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13932,17 +13943,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -13950,6 +13974,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1610,19 +1610,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -451,6 +451,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3734,7 +3738,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9711,25 +9715,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -14048,17 +14059,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -14066,6 +14090,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1592,19 +1592,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -464,6 +464,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3751,7 +3755,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9737,25 +9741,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -14086,17 +14097,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -14104,6 +14128,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1592,19 +1592,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -465,6 +465,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3772,7 +3776,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9787,25 +9791,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -14148,17 +14159,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -14166,6 +14190,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1603,19 +1603,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -465,6 +465,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3800,7 +3804,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9815,25 +9819,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -14176,17 +14187,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -14194,6 +14218,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1603,19 +1603,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -439,6 +439,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3715,7 +3719,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9440,25 +9444,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13648,25 +13659,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
/**
* @param open
*/
public void sendItemList(boolean open) public void sendItemList(boolean open)
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(this, open)); sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this)); sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1434,19 +1434,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -439,6 +439,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3715,7 +3719,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9440,25 +9444,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13648,25 +13659,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
/**
* @param open
*/
public void sendItemList(boolean open) public void sendItemList(boolean open)
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(this, open)); sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this)); sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1434,19 +1434,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -437,6 +437,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3699,7 +3703,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9426,25 +9430,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13634,17 +13645,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -13652,6 +13676,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1536,19 +1536,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -446,6 +446,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3726,7 +3730,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9466,25 +9470,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13695,17 +13706,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -13713,6 +13737,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1618,19 +1618,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -446,6 +446,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3726,7 +3730,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9466,25 +9470,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13695,17 +13706,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -13713,6 +13737,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1618,19 +1618,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -460,6 +460,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3653,7 +3657,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9420,25 +9424,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13705,17 +13716,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -13723,6 +13747,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1612,19 +1612,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -434,6 +434,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3696,7 +3700,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9428,25 +9432,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13644,25 +13655,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
/**
* @param open
*/
public void sendItemList(boolean open) public void sendItemList(boolean open)
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(this, open)); sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this)); sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1426,19 +1426,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -470,6 +470,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3734,7 +3738,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9585,25 +9589,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -13976,14 +13987,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -13991,6 +14018,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -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.ExPetSkillList;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete; import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetInfo; 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.PetItemList;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate;
import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
@@ -1145,12 +1146,12 @@ public abstract class Summon extends Playable
return _summonPoints; return _summonPoints;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(PetInventoryUpdate iu)
{ {
final Player owner = _owner; final Player owner = _owner;
if (owner != null) if (owner != null)
{ {
owner.sendInventoryUpdate(iu); owner.sendPacket(iu);
if (getInventory() != null) if (getInventory() != null)
{ {
owner.sendPacket(new PetItemList(getInventory().getItems())); owner.sendPacket(new PetItemList(getInventory().getItems()));
@@ -870,7 +870,7 @@ public class Pet extends Summon
{ {
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(newItem); iu.addModifiedItem(newItem);
sendInventoryUpdate(iu); getOwner().sendInventoryUpdate(iu);
} }
return newItem; return newItem;
@@ -1531,7 +1531,7 @@ public class Pet extends Summon
controlItem.updateDatabase(); controlItem.updateDatabase();
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(controlItem); iu.addModifiedItem(controlItem);
sendInventoryUpdate(iu); getOwner().sendInventoryUpdate(iu);
} }
} }
else else
@@ -1677,9 +1677,9 @@ public class Pet extends Summon
} }
} }
final PetInventoryUpdate petUI = new PetInventoryUpdate(); final PetInventoryUpdate petIU = new PetInventoryUpdate();
petUI.addItems(items); petIU.addItems(items);
sendInventoryUpdate(petUI); sendInventoryUpdate(petIU);
getStat().recalculateStats(true); getStat().recalculateStats(true);
if (abortAttack) if (abortAttack)
{ {
@@ -1720,19 +1720,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -494,6 +494,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3776,7 +3780,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9652,25 +9656,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -14070,14 +14081,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -14085,6 +14112,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -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.ExPetSkillList;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete; import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetInfo; 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.PetItemList;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate;
import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
@@ -1145,12 +1146,12 @@ public abstract class Summon extends Playable
return _summonPoints; return _summonPoints;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(PetInventoryUpdate iu)
{ {
final Player owner = _owner; final Player owner = _owner;
if (owner != null) if (owner != null)
{ {
owner.sendInventoryUpdate(iu); owner.sendPacket(iu);
if (getInventory() != null) if (getInventory() != null)
{ {
owner.sendPacket(new PetItemList(getInventory().getItems())); owner.sendPacket(new PetItemList(getInventory().getItems()));
@@ -870,7 +870,7 @@ public class Pet extends Summon
{ {
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(newItem); iu.addModifiedItem(newItem);
sendInventoryUpdate(iu); getOwner().sendInventoryUpdate(iu);
} }
return newItem; return newItem;
@@ -1531,7 +1531,7 @@ public class Pet extends Summon
controlItem.updateDatabase(); controlItem.updateDatabase();
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(controlItem); iu.addModifiedItem(controlItem);
sendInventoryUpdate(iu); getOwner().sendInventoryUpdate(iu);
} }
} }
else else
@@ -1677,9 +1677,9 @@ public class Pet extends Summon
} }
} }
final PetInventoryUpdate petUI = new PetInventoryUpdate(); final PetInventoryUpdate petIU = new PetInventoryUpdate();
petUI.addItems(items); petIU.addItems(items);
sendInventoryUpdate(petUI); sendInventoryUpdate(petIU);
getStat().recalculateStats(true); getStat().recalculateStats(true);
if (abortAttack) if (abortAttack)
{ {
@@ -1729,19 +1729,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -498,6 +498,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3791,7 +3795,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9832,25 +9836,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -14250,14 +14261,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -14265,6 +14292,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -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.ExPetSkillList;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete; import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetInfo; 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.PetItemList;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate;
import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
@@ -1145,12 +1146,12 @@ public abstract class Summon extends Playable
return _summonPoints; return _summonPoints;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(PetInventoryUpdate iu)
{ {
final Player owner = _owner; final Player owner = _owner;
if (owner != null) if (owner != null)
{ {
owner.sendInventoryUpdate(iu); owner.sendPacket(iu);
if (getInventory() != null) if (getInventory() != null)
{ {
owner.sendPacket(new PetItemList(getInventory().getItems())); owner.sendPacket(new PetItemList(getInventory().getItems()));
@@ -870,7 +870,7 @@ public class Pet extends Summon
{ {
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(newItem); iu.addModifiedItem(newItem);
sendInventoryUpdate(iu); getOwner().sendInventoryUpdate(iu);
} }
return newItem; return newItem;
@@ -1531,7 +1531,7 @@ public class Pet extends Summon
controlItem.updateDatabase(); controlItem.updateDatabase();
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(controlItem); iu.addModifiedItem(controlItem);
sendInventoryUpdate(iu); getOwner().sendInventoryUpdate(iu);
} }
} }
else else
@@ -1677,9 +1677,9 @@ public class Pet extends Summon
} }
} }
final PetInventoryUpdate petUI = new PetInventoryUpdate(); final PetInventoryUpdate petIU = new PetInventoryUpdate();
petUI.addItems(items); petIU.addItems(items);
sendInventoryUpdate(petUI); sendInventoryUpdate(petIU);
getStat().recalculateStats(true); getStat().recalculateStats(true);
if (abortAttack) if (abortAttack)
{ {
@@ -1729,19 +1729,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }
@@ -498,6 +498,11 @@ public class Player extends Playable
private long _lastAccess; private long _lastAccess;
private long _uptime; private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false; private boolean _subclassLock = false;
protected int _baseClass; protected int _baseClass;
protected int _activeClass; 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) public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{ {
final PlayerInventory inv = _inventory; if (!_inventory.validateCapacityByItemId(rewardId, count))
if (!inv.validateCapacityByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -3824,7 +3828,7 @@ public class Player extends Playable
return false; return false;
} }
if (!inv.validateWeightByItemId(rewardId, count)) if (!_inventory.validateWeightByItemId(rewardId, count))
{ {
if (sendMessage) if (sendMessage)
{ {
@@ -9882,25 +9886,32 @@ public class Player extends Playable
} }
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{
if (_skillListTask == null)
{
_skillListTask = ThreadPool.schedule(() ->
{ {
boolean isDisabled = false; boolean isDisabled = false;
final SkillList sl = new SkillList(); final SkillList skillList = new SkillList();
for (Skill s : getSkillList()) for (Skill skill : getSkillList())
{ {
if (_clan != null) if (_clan != null)
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
} }
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
} }
if (lastLearnedSkillId > 0) if (lastLearnedSkillId > 0)
{ {
sl.setLastLearnedSkillId(lastLearnedSkillId); skillList.setLastLearnedSkillId(lastLearnedSkillId);
} }
sendPacket(sl);
sendPacket(skillList);
sendPacket(new AcquireSkillList(this)); sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
} }
/** /**
@@ -14331,14 +14342,30 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{ {
sendPacket(new ItemList(1, this)); sendPacket(new ItemList(1, this));
sendPacket(new ItemList(2, this)); sendPacket(new ItemList(2, this));
@@ -14346,6 +14373,9 @@ public class Player extends Playable
sendPacket(new ExQuestItemList(2, this)); sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -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.ExPetSkillList;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete; import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetInfo; 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.PetItemList;
import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate; import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate;
import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
@@ -1145,12 +1146,12 @@ public abstract class Summon extends Playable
return _summonPoints; return _summonPoints;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(PetInventoryUpdate iu)
{ {
final Player owner = _owner; final Player owner = _owner;
if (owner != null) if (owner != null)
{ {
owner.sendInventoryUpdate(iu); owner.sendPacket(iu);
if (getInventory() != null) if (getInventory() != null)
{ {
owner.sendPacket(new PetItemList(getInventory().getItems())); owner.sendPacket(new PetItemList(getInventory().getItems()));
@@ -870,7 +870,7 @@ public class Pet extends Summon
{ {
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(newItem); iu.addModifiedItem(newItem);
sendInventoryUpdate(iu); getOwner().sendInventoryUpdate(iu);
} }
return newItem; return newItem;
@@ -1531,7 +1531,7 @@ public class Pet extends Summon
controlItem.updateDatabase(); controlItem.updateDatabase();
final InventoryUpdate iu = new InventoryUpdate(); final InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(controlItem); iu.addModifiedItem(controlItem);
sendInventoryUpdate(iu); getOwner().sendInventoryUpdate(iu);
} }
} }
else else
@@ -1677,9 +1677,9 @@ public class Pet extends Summon
} }
} }
final PetInventoryUpdate petUI = new PetInventoryUpdate(); final PetInventoryUpdate petIU = new PetInventoryUpdate();
petUI.addItems(items); petIU.addItems(items);
sendInventoryUpdate(petUI); sendInventoryUpdate(petIU);
getStat().recalculateStats(true); getStat().recalculateStats(true);
if (abortAttack) if (abortAttack)
{ {
@@ -1729,19 +1729,26 @@ public abstract class Inventory extends ItemContainer
*/ */
private void checkEquipTask() private void checkEquipTask()
{ {
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld()) if (_skillItemTask == null)
{
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{ {
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() -> _skillItemTask = ThreadPool.schedule(() ->
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); player.setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true); player.getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects(); player.updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList(); player.sendSkillList();
_skillItemTask = null; _skillItemTask = null;
}, 50); }, 50);
} }
} }
}
}
/** /**
* @return the mask of wore item * @return the mask of wore item
@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet); writeItems(packet);
return true; return true;
} }
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
} }