Addition of InventoryUpdate, ItemList and SkillList tasks.
This commit is contained in:
@@ -498,6 +498,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;
|
||||
@@ -3781,8 +3786,7 @@ public class Player extends Playable
|
||||
*/
|
||||
public boolean exchangeItemsById(String process, WorldObject reference, int coinId, long cost, int rewardId, long count, boolean sendMessage)
|
||||
{
|
||||
final PlayerInventory inv = _inventory;
|
||||
if (!inv.validateCapacityByItemId(rewardId, count))
|
||||
if (!_inventory.validateCapacityByItemId(rewardId, count))
|
||||
{
|
||||
if (sendMessage)
|
||||
{
|
||||
@@ -3791,7 +3795,7 @@ public class Player extends Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!inv.validateWeightByItemId(rewardId, count))
|
||||
if (!_inventory.validateWeightByItemId(rewardId, count))
|
||||
{
|
||||
if (sendMessage)
|
||||
{
|
||||
@@ -9833,24 +9837,31 @@ public class Player extends Playable
|
||||
|
||||
public void sendSkillList(int lastLearnedSkillId)
|
||||
{
|
||||
boolean isDisabled = false;
|
||||
final SkillList sl = new SkillList();
|
||||
for (Skill s : getSkillList())
|
||||
if (_skillListTask == null)
|
||||
{
|
||||
if (_clan != null)
|
||||
_skillListTask = ThreadPool.schedule(() ->
|
||||
{
|
||||
isDisabled = s.isClanSkill() && (_clan.getReputationScore() < 0);
|
||||
}
|
||||
|
||||
sl.addSkill(s.getDisplayId(), s.getReuseDelayGroup(), s.getDisplayLevel(), s.getSubLevel(), s.isPassive(), isDisabled, s.isEnchantable());
|
||||
boolean isDisabled = false;
|
||||
final SkillList skillList = new SkillList();
|
||||
for (Skill skill : getSkillList())
|
||||
{
|
||||
if (_clan != null)
|
||||
{
|
||||
isDisabled = skill.isClanSkill() && (_clan.getReputationScore() < 0);
|
||||
}
|
||||
|
||||
skillList.addSkill(skill.getDisplayId(), skill.getReuseDelayGroup(), skill.getDisplayLevel(), skill.getSubLevel(), skill.isPassive(), isDisabled, skill.isEnchantable());
|
||||
}
|
||||
if (lastLearnedSkillId > 0)
|
||||
{
|
||||
skillList.setLastLearnedSkillId(lastLearnedSkillId);
|
||||
}
|
||||
|
||||
sendPacket(skillList);
|
||||
sendPacket(new AcquireSkillList(this));
|
||||
_skillListTask = null;
|
||||
}, 300);
|
||||
}
|
||||
if (lastLearnedSkillId > 0)
|
||||
{
|
||||
sl.setLastLearnedSkillId(lastLearnedSkillId);
|
||||
}
|
||||
sendPacket(sl);
|
||||
|
||||
sendPacket(new AcquireSkillList(this));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -14250,21 +14261,40 @@ public class Player extends Playable
|
||||
return _questZoneId;
|
||||
}
|
||||
|
||||
public void sendInventoryUpdate(IClientOutgoingPacket iu)
|
||||
public void sendInventoryUpdate(InventoryUpdate iu)
|
||||
{
|
||||
sendPacket(iu);
|
||||
sendPacket(new ExAdenaInvenCount(this));
|
||||
sendPacket(new ExUserInfoInvenWeight(this));
|
||||
_inventoryUpdates.add(iu);
|
||||
if (_inventoryUpdateTask == null)
|
||||
{
|
||||
_inventoryUpdateTask = ThreadPool.schedule(() ->
|
||||
{
|
||||
for (InventoryUpdate packet : _inventoryUpdates)
|
||||
{
|
||||
sendPacket(packet);
|
||||
_inventoryUpdates.remove(packet);
|
||||
}
|
||||
sendPacket(new ExAdenaInvenCount(this));
|
||||
sendPacket(new ExUserInfoInvenWeight(this));
|
||||
_inventoryUpdateTask = null;
|
||||
}, 300);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendItemList()
|
||||
{
|
||||
sendPacket(new ItemList(1, this));
|
||||
sendPacket(new ItemList(2, this));
|
||||
sendPacket(new ExQuestItemList(1, this));
|
||||
sendPacket(new ExQuestItemList(2, this));
|
||||
sendPacket(new ExAdenaInvenCount(this));
|
||||
sendPacket(new ExUserInfoInvenWeight(this));
|
||||
if (_itemListTask == null)
|
||||
{
|
||||
_itemListTask = ThreadPool.schedule(() ->
|
||||
{
|
||||
sendPacket(new ItemList(1, this));
|
||||
sendPacket(new ItemList(2, this));
|
||||
sendPacket(new ExQuestItemList(1, this));
|
||||
sendPacket(new ExQuestItemList(2, this));
|
||||
sendPacket(new ExAdenaInvenCount(this));
|
||||
sendPacket(new ExUserInfoInvenWeight(this));
|
||||
_itemListTask = null;
|
||||
}, 300);
|
||||
}
|
||||
}
|
||||
|
||||
public Fishing getFishing()
|
||||
|
@@ -73,6 +73,7 @@ import org.l2jmobius.gameserver.network.serverpackets.pet.ExPetInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pet.ExPetSkillList;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pet.PetDelete;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pet.PetInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pet.PetInventoryUpdate;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pet.PetItemList;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.pet.PetStatusUpdate;
|
||||
import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
|
||||
@@ -1145,12 +1146,12 @@ public abstract class Summon extends Playable
|
||||
return _summonPoints;
|
||||
}
|
||||
|
||||
public void sendInventoryUpdate(IClientOutgoingPacket iu)
|
||||
public void sendInventoryUpdate(PetInventoryUpdate iu)
|
||||
{
|
||||
final Player owner = _owner;
|
||||
if (owner != null)
|
||||
{
|
||||
owner.sendInventoryUpdate(iu);
|
||||
owner.sendPacket(iu);
|
||||
if (getInventory() != null)
|
||||
{
|
||||
owner.sendPacket(new PetItemList(getInventory().getItems()));
|
||||
|
@@ -870,7 +870,7 @@ public class Pet extends Summon
|
||||
{
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(newItem);
|
||||
sendInventoryUpdate(iu);
|
||||
getOwner().sendInventoryUpdate(iu);
|
||||
}
|
||||
|
||||
return newItem;
|
||||
@@ -1531,7 +1531,7 @@ public class Pet extends Summon
|
||||
controlItem.updateDatabase();
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(controlItem);
|
||||
sendInventoryUpdate(iu);
|
||||
getOwner().sendInventoryUpdate(iu);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1677,9 +1677,9 @@ public class Pet extends Summon
|
||||
}
|
||||
}
|
||||
|
||||
final PetInventoryUpdate petUI = new PetInventoryUpdate();
|
||||
petUI.addItems(items);
|
||||
sendInventoryUpdate(petUI);
|
||||
final PetInventoryUpdate petIU = new PetInventoryUpdate();
|
||||
petIU.addItems(items);
|
||||
sendInventoryUpdate(petIU);
|
||||
getStat().recalculateStats(true);
|
||||
if (abortAttack)
|
||||
{
|
||||
|
@@ -1729,17 +1729,24 @@ public abstract class Inventory extends ItemContainer
|
||||
*/
|
||||
private void checkEquipTask()
|
||||
{
|
||||
if ((_skillItemTask == null) && (getOwner() != null) && getOwner().isPlayer() && getOwner().getActingPlayer().hasEnteredWorld())
|
||||
if (_skillItemTask == null)
|
||||
{
|
||||
getOwner().getActingPlayer().setUsingSkillItem(true);
|
||||
_skillItemTask = ThreadPool.schedule(() ->
|
||||
final Creature owner = getOwner();
|
||||
if ((owner != null) && owner.isPlayer())
|
||||
{
|
||||
getOwner().getActingPlayer().setUsingSkillItem(false);
|
||||
getOwner().getStat().recalculateStats(true);
|
||||
getOwner().updateAbnormalVisualEffects();
|
||||
getOwner().getActingPlayer().sendSkillList();
|
||||
_skillItemTask = null;
|
||||
}, 50);
|
||||
final Player player = owner.getActingPlayer();
|
||||
if (player.hasEnteredWorld())
|
||||
{
|
||||
_skillItemTask = ThreadPool.schedule(() ->
|
||||
{
|
||||
player.setUsingSkillItem(false);
|
||||
player.getStat().recalculateStats(true);
|
||||
player.updateAbnormalVisualEffects();
|
||||
player.sendSkillList();
|
||||
_skillItemTask = null;
|
||||
}, 50);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user