Addition of InventoryUpdate, ItemList and SkillList tasks.

This commit is contained in:
MobiusDevelopment
2022-06-22 22:27:59 +00:00
parent d3330617bd
commit 7934724757
77 changed files with 1954 additions and 912 deletions

View File

@@ -434,6 +434,11 @@ public class Player extends Playable
private long _lastAccess;
private long _uptime;
private final Set<InventoryUpdate> _inventoryUpdates = ConcurrentHashMap.newKeySet(1);
private ScheduledFuture<?> _inventoryUpdateTask;
private ScheduledFuture<?> _itemListTask;
private ScheduledFuture<?> _skillListTask;
private boolean _subclassLock = false;
protected int _baseClass;
protected int _activeClass;
@@ -3686,8 +3691,7 @@ public class Player extends Playable
*/
public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
{
final PlayerInventory inv = _inventory;
if (!inv.validateCapacityByItemId(rewardId, count))
if (!_inventory.validateCapacityByItemId(rewardId, count))
{
if (sendMessage)
{
@@ -3696,7 +3700,7 @@ public class Player extends Playable
return false;
}
if (!inv.validateWeightByItemId(rewardId, count))
if (!_inventory.validateWeightByItemId(rewardId, count))
{
if (sendMessage)
{
@@ -9429,24 +9433,31 @@ public class Player extends Playable
public void sendSkillList(int lastLearnedSkillId)
{
boolean isDisabled = false;
final SkillList sl = new SkillList();
for (Skill s : getSkillList())
if (_skillListTask == null)
{
if (_clan != null)
_skillListTask = ThreadPool.schedule(() ->
{
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0);
}
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable());
boolean isDisabled = false;
final SkillList skillList = new SkillList();
for (Skill skill : getSkillList())
{
if (_clan != null)
{
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
}
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
}
if (lastLearnedSkillId > 0)
{
skillList.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(skillList);
sendPacket(new AcquireSkillList(this));
_skillListTask = null;
}, 300);
}
if (lastLearnedSkillId > 0)
{
sl.setLastLearnedSkillId(lastLearnedSkillId);
}
sendPacket(sl);
sendPacket(new AcquireSkillList(this));
}
/**
@@ -13644,25 +13655,38 @@ public class Player extends Playable
return _questZoneId;
}
/**
* @param iu
*/
public void sendInventoryUpdate(InventoryUpdate iu)
{
sendPacket(iu);
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdates.add(iu);
if (_inventoryUpdateTask == null)
{
_inventoryUpdateTask = ThreadPool.schedule(() ->
{
for (InventoryUpdate packet : _inventoryUpdates)
{
sendPacket(packet);
_inventoryUpdates.remove(packet);
}
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_inventoryUpdateTask = null;
}, 300);
}
}
/**
* @param open
*/
public void sendItemList(boolean open)
{
sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
if (_itemListTask == null)
{
_itemListTask = ThreadPool.schedule(() ->
{
sendPacket(new ItemList(this, open));
sendPacket(new ExQuestItemList(this));
sendPacket(new ExAdenaInvenCount(this));
sendPacket(new ExUserInfoInvenWeight(this));
_itemListTask = null;
}, 300);
}
}
public Fishing getFishing()

View File

@@ -1426,17 +1426,24 @@ public abstract class Inventory extends ItemContainer
*/
private void checkEquipTask()
{
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld())
if (_skillItemTask == null)
{
getOwner().getActingPlayer().setUsingSkillItem(true);
_skillItemTask = ThreadPool.schedule(() ->
final Creature owner = getOwner();
if ((owner != null) && owner.isPlayer())
{
getOwner().getActingPlayer().setUsingSkillItem(false);
getOwner().getStat().recalculateStats(true);
getOwner().updateAbnormalVisualEffects();
getOwner().getActingPlayer().sendSkillList();
_skillItemTask = null;
}, 50);
final Player player = owner.getActingPlayer();
if (player.hasEnteredWorld())
{
_skillItemTask = ThreadPool.schedule(() ->
{
player.setUsingSkillItem(false);
player.getStat().recalculateStats(true);
player.updateAbnormalVisualEffects();
player.sendSkillList();
_skillItemTask = null;
}, 50);
}
}
}
}

View File

@@ -49,4 +49,15 @@ public class InventoryUpdate extends AbstractInventoryUpdate
writeItems(packet);
return true;
}
@Override
public boolean equals(Object obj)
{
if (obj instanceof InventoryUpdate)
{
final InventoryUpdate iu = (InventoryUpdate) obj;
return getItems().equals(iu.getItems());
}
return false;
}
}