Proper useEquippableItem ownership checks.

This commit is contained in:
MobiusDevelopment
2020-04-28 23:31:54 +00:00
parent c724adb5a0
commit 414cbb7773
34 changed files with 376 additions and 215 deletions

View File

@@ -89,6 +89,7 @@ import org.l2jmobius.gameserver.enums.HtmlActionScope;
import org.l2jmobius.gameserver.enums.IllegalActionPunishmentType;
import org.l2jmobius.gameserver.enums.InstanceType;
import org.l2jmobius.gameserver.enums.ItemGrade;
import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.enums.MountType;
import org.l2jmobius.gameserver.enums.NextActionType;
import org.l2jmobius.gameserver.enums.PartyDistributionType;
@@ -2198,6 +2199,25 @@ public class PlayerInstance extends Playable
public void useEquippableItem(ItemInstance item, boolean abortAttack)
{
// Check if the item is null.
if (item == null)
{
return;
}
// Check if the item is owned by this player.
if (item.getOwnerId() != getObjectId())
{
return;
}
// Check if the item is in the inventory.
final ItemLocation itemLocation = item.getItemLocation();
if ((itemLocation != ItemLocation.INVENTORY) && (itemLocation != ItemLocation.PAPERDOLL))
{
return;
}
// Equip or unEquip
ItemInstance[] items = null;
final boolean isEquiped = item.isEquipped();

View File

@@ -256,18 +256,8 @@ public class UseItem implements IClientIncomingPacket
}
else if (player.isAttackingNow())
{
ThreadPool.schedule(() ->
{
// Check if the item is still on inventory.
final ItemInstance equipItem = player.getInventory().getItemByObjectId(_objectId);
if (equipItem == null)
{
return;
}
// Equip or unEquip.
player.useEquippableItem(equipItem, false);
}, player.getAttackEndTime() - TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis()));
// Equip or unEquip.
ThreadPool.schedule(() -> player.useEquippableItem(item, false), player.getAttackEndTime() - TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis()));
}
else
{