Do not drop items when casting known skills to avoid exploits.

This commit is contained in:
MobiusDevelopment 2020-05-06 13:13:11 +00:00
parent a50424f6ed
commit e1bccf5b39
19 changed files with 395 additions and 26 deletions

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import java.util.logging.Logger;
import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.instance.ItemInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@ -55,17 +56,27 @@ public class RequestDropItem extends ClientBasePacket
_log.warning("tried to drop an item that is not in the inventory ?!?:" + objectId);
return;
}
final int oldCount = oldItem.getCount();
ItemInstance dropedItem = null;
if (oldCount < count)
{
return;
}
if ((activeChar.getDistance(x, y) > 150.0) || (Math.abs(z - activeChar.getZ()) > 50))
{
activeChar.sendPacket(new SystemMessage(SystemMessage.CANNOT_DISCARD_DISTANCE_TOO_FAR));
return;
}
// Do not drop items when casting known skills to avoid exploits.
final Skill skill = activeChar.getSkill();
if ((skill != null) && activeChar.isSkillDisabled(skill.getId()) && (activeChar.getSkillLevel(skill.getId()) > 0))
{
return;
}
if (oldItem.isEquipped())
{
dropedItem = activeChar.getInventory().dropItem(objectId, count);
@ -82,6 +93,7 @@ public class RequestDropItem extends ClientBasePacket
dropedItem.setY(y);
dropedItem.setZ(z);
dropedItem.setOnTheGround(true);
final DropItem di = new DropItem(dropedItem, activeChar.getObjectId());
activeChar.sendPacket(di);
activeChar.addKnownObjectWithoutCreate(dropedItem);
@ -89,6 +101,7 @@ public class RequestDropItem extends ClientBasePacket
{
player.addKnownObjectWithoutCreate(dropedItem);
}
final InventoryUpdate iu = new InventoryUpdate();
if (oldCount == dropedItem.getCount())
{
@ -99,6 +112,7 @@ public class RequestDropItem extends ClientBasePacket
iu.addModifiedItem(oldItem);
}
activeChar.sendPacket(iu);
final SystemMessage sm = new SystemMessage(SystemMessage.YOU_DROPPED_S1);
sm.addItemName(dropedItem.getItemId());
activeChar.sendPacket(sm);

View File

@ -165,15 +165,23 @@ public class RequestDropItem extends GameClientPacket
return;
}
// Cannot discard item that the skill is consuming.
if (player.isCastingNow())
{
final SkillDat skillDat = player.getCurrentSkill();
if ((skillDat != null) && (skillDat.getSkill().getItemConsumeId() == item.getItemId()) //
&& ((player.getInventory().getInventoryItemCount(item.getItemId(), -1) - skillDat.getSkill().getItemConsume()) < _count))
final SkillDat skill = player.getCurrentSkill();
if (skill != null)
{
player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return;
// Cannot discard item that the skill is consuming.
if ((skill.getSkill().getItemConsumeId() == item.getItemId()) && ((player.getInventory().getInventoryItemCount(item.getItemId(), -1) - skill.getSkill().getItemConsume()) < _count))
{
player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.getKnownSkill(skill.getSkillId()) != null)
{
return;
}
}
}

View File

@ -140,27 +140,43 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Cannot discard item that the skill is consuming.
if (player.isCastingNow())
{
final SkillUseHolder skill = player.getCurrentSkill();
if ((skill != null) && (skill.getSkill().getItemConsumeId() == item.getId()) //
&& ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getSkill().getItemConsumeCount()) < _count))
if (skill != null)
{
player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return;
// Cannot discard item that the skill is consuming.
if ((skill.getSkill().getItemConsumeId() == item.getId()) && ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getSkill().getItemConsumeCount()) < _count))
{
player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.getKnownSkill(skill.getSkillId()) != null)
{
return;
}
}
}
// Cannot discard item that the skill is consuming.
if (player.isCastingSimultaneouslyNow())
{
final Skill skill = player.getLastSimultaneousSkillCast();
if ((skill != null) && (skill.getItemConsumeId() == item.getId()) //
&& ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getItemConsumeCount()) < _count))
if (skill != null)
{
player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return;
// Cannot discard item that the skill is consuming.
if ((skill.getItemConsumeId() == item.getId()) && ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getItemConsumeCount()) < _count))
{
player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.getKnownSkill(skill.getId()) != null)
{
return;
}
}
}

View File

@ -140,27 +140,43 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Cannot discard item that the skill is consuming.
if (player.isCastingNow())
{
final SkillUseHolder skill = player.getCurrentSkill();
if ((skill != null) && (skill.getSkill().getItemConsumeId() == item.getId()) //
&& ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getSkill().getItemConsumeCount()) < _count))
if (skill != null)
{
player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return;
// Cannot discard item that the skill is consuming.
if ((skill.getSkill().getItemConsumeId() == item.getId()) && ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getSkill().getItemConsumeCount()) < _count))
{
player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.getKnownSkill(skill.getSkillId()) != null)
{
return;
}
}
}
// Cannot discard item that the skill is consuming.
if (player.isCastingSimultaneouslyNow())
{
final Skill skill = player.getLastSimultaneousSkillCast();
if ((skill != null) && (skill.getItemConsumeId() == item.getId()) //
&& ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getItemConsumeCount()) < _count))
if (skill != null)
{
player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return;
// Cannot discard item that the skill is consuming.
if ((skill.getItemConsumeId() == item.getId()) && ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getItemConsumeCount()) < _count))
{
player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.getKnownSkill(skill.getId()) != null)
{
return;
}
}
}

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.skills.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId;
@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return;
}
// Do not drop items when casting known skills to avoid exploits.
if (player.isCastingNow())
{
for (SkillCaster skillCaster : player.getSkillCasters())
{
final Skill skill = skillCaster.getSkill();
if ((skill != null) && (player.getKnownSkill(skill.getId()) != null))
{
return;
}
}
}
final SkillUseHolder skill = player.getQueuedSkill();
if ((skill != null) && (player.getKnownSkill(skill.getSkillId()) != null))
{
return;
}
if (item.isEquipped())
{
player.getInventory().unEquipItemInSlot(item.getLocationSlot());