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)
{ {
@@ -9537,24 +9541,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13831,22 +13842,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList(boolean open) public void sendItemList(boolean open)
{ {
sendPacket(new ItemList(this, open)); if (_itemListTask == null)
sendPacket(new ExQuestItemList(this)); {
sendPacket(new ExAdenaInvenCount(this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExUserInfoInvenWeight(this)); {
sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1426,17 +1426,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9540,24 +9544,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13834,22 +13845,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList(boolean open) public void sendItemList(boolean open)
{ {
sendPacket(new ItemList(this, open)); if (_itemListTask == null)
sendPacket(new ExQuestItemList(this)); {
sendPacket(new ExAdenaInvenCount(this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExUserInfoInvenWeight(this)); {
sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1432,17 +1432,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9542,24 +9546,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13837,22 +13848,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList(boolean open) public void sendItemList(boolean open)
{ {
sendPacket(new ItemList(this, open)); if (_itemListTask == null)
sendPacket(new ExQuestItemList(this)); {
sendPacket(new ExAdenaInvenCount(this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExUserInfoInvenWeight(this)); {
sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1432,17 +1432,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9556,24 +9560,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13832,22 +13843,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList(boolean open) public void sendItemList(boolean open)
{ {
sendPacket(new ItemList(this, open)); if (_itemListTask == null)
sendPacket(new ExQuestItemList(this)); {
sendPacket(new ExAdenaInvenCount(this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExUserInfoInvenWeight(this)); {
sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1432,17 +1432,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9581,24 +9585,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13874,24 +13885,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1534,17 +1534,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9594,24 +9598,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13890,24 +13901,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1616,17 +1616,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9595,24 +9599,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13896,24 +13907,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1616,17 +1616,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9610,24 +9614,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13932,24 +13943,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1610,17 +1610,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9712,24 +9716,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -14048,24 +14059,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1592,17 +1592,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9738,24 +9742,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -14086,24 +14097,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1592,17 +1592,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9788,24 +9792,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -14148,24 +14159,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1603,17 +1603,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9816,24 +9820,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -14176,24 +14187,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1603,17 +1603,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9441,24 +9445,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13648,25 +13659,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
/**
* @param open
*/
public void sendItemList(boolean open) public void sendItemList(boolean open)
{ {
sendPacket(new ItemList(this, open)); if (_itemListTask == null)
sendPacket(new ExQuestItemList(this)); {
sendPacket(new ExAdenaInvenCount(this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExUserInfoInvenWeight(this)); {
sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1434,17 +1434,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9441,24 +9445,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13648,25 +13659,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
/**
* @param open
*/
public void sendItemList(boolean open) public void sendItemList(boolean open)
{ {
sendPacket(new ItemList(this, open)); if (_itemListTask == null)
sendPacket(new ExQuestItemList(this)); {
sendPacket(new ExAdenaInvenCount(this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExUserInfoInvenWeight(this)); {
sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1434,17 +1434,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9427,24 +9431,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13634,24 +13645,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1536,17 +1536,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9467,24 +9471,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13695,24 +13706,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1618,17 +1618,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9467,24 +9471,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13695,24 +13706,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1618,17 +1618,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9421,24 +9425,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13705,24 +13716,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1612,17 +1612,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9429,24 +9433,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13644,25 +13655,38 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
/**
* @param open
*/
public void sendItemList(boolean open) public void sendItemList(boolean open)
{ {
sendPacket(new ItemList(this, open)); if (_itemListTask == null)
sendPacket(new ExQuestItemList(this)); {
sendPacket(new ExAdenaInvenCount(this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExUserInfoInvenWeight(this)); {
sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() public Fishing getFishing()
@@ -1426,17 +1426,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9586,24 +9590,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -13976,21 +13987,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() 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,17 +1720,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9653,24 +9657,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -14070,21 +14081,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() 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,17 +1729,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9833,24 +9837,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -14250,21 +14261,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() 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,17 +1729,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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)
{ {
@@ -9883,24 +9887,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId) public void sendSkillList(int lastLearnedSkillId)
{ {
boolean isDisabled = false; if (_skillListTask == null)
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
{ {
if (_clan != null) _skillListTask = ThreadPool.schedule(() ->
{ {
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0); boolean isDisabled = false;
} final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable()); {
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
} }
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
} }
/** /**
@@ -14331,21 +14342,40 @@ public class Player extends Playable
return _questZoneId; return _questZoneId;
} }
public void sendInventoryUpdate(IClientOutgoingPacket iu) public void sendInventoryUpdate(InventoryUpdate iu)
{ {
sendPacket(iu); _inventoryUpdates.add(iu);
sendPacket(new ExAdenaInvenCount(this)); if (_inventoryUpdateTask == null)
sendPacket(new ExUserInfoInvenWeight(this)); {
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
} }
public void sendItemList() public void sendItemList()
{ {
sendPacket(new ItemList(1, this)); if (_itemListTask == null)
sendPacket(new ItemList(2, this)); {
sendPacket(new ExQuestItemList(1, this)); _itemListTask = ThreadPool.schedule(() ->
sendPacket(new ExQuestItemList(2, this)); {
sendPacket(new ExAdenaInvenCount(this)); sendPacket(new ItemList(1, this));
sendPacket(new ExUserInfoInvenWeight(this)); sendPacket(new ItemList(2, this));
sendPacket(new ExQuestItemList(1, this));
sendPacket(new ExQuestItemList(2, this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
} }
public Fishing getFishing() 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,17 +1729,24 @@ 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)
{ {
getOwner().getActingPlayer().setUsingSkillItem(true); final Creature owner = getOwner();
_skillItemTask = ThreadPool.schedule(() -> if ((owner != null) && owner.isPlayer())
{ {
getOwner().getActingPlayer().setUsingSkillItem(false); final Player player = owner.getActingPlayer();
getOwner().getStat().recalculateStats(true); if (player.hasEnteredWorld())
getOwner().updateAbnormalVisualEffects(); {
getOwner().getActingPlayer().sendSkillList(); _skillItemTask = ThreadPool.schedule(() ->
_skillItemTask = null; {
}, 50); player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
} }
} }
@@ -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;
}
} }