Addition of InventoryUpdate, ItemList and SkillList tasks.
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+55
-28
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+57
-30
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+57
-30
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+55
-31
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+55
-31
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+57
-30
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+57
-30
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+57
-30
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+57
-30
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+55
-31
@@ -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()
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+58
-28
@@ -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()
|
||||||
|
|||||||
+3
-2
@@ -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()));
|
||||||
|
|||||||
+5
-5
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+58
-28
@@ -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()
|
||||||
|
|||||||
+3
-2
@@ -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()));
|
||||||
|
|||||||
+5
-5
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+58
-28
@@ -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()
|
||||||
|
|||||||
+3
-2
@@ -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()));
|
||||||
|
|||||||
+5
-5
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+58
-28
@@ -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()
|
||||||
|
|||||||
+3
-2
@@ -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()));
|
||||||
|
|||||||
+5
-5
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
+16
-9
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user