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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); player.getInventory().unEquipItemInSlot(item.getLocationSlot());

View File

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

View File

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

View File

@@ -140,28 +140,44 @@ public class RequestDropItem implements IClientIncomingPacket
return; return;
} }
// Cannot discard item that the skill is consuming.
if (player.isCastingNow()) if (player.isCastingNow())
{ {
final SkillUseHolder skill = player.getCurrentSkill(); final SkillUseHolder skill = player.getCurrentSkill();
if ((skill != null) && (skill.getSkill().getItemConsumeId() == item.getId()) // if (skill != null)
&& ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getSkill().getItemConsumeCount()) < _count)) {
// 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); player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return; 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()) if (player.isCastingSimultaneouslyNow())
{ {
final Skill skill = player.getLastSimultaneousSkillCast(); final Skill skill = player.getLastSimultaneousSkillCast();
if ((skill != null) && (skill.getItemConsumeId() == item.getId()) // if (skill != null)
&& ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getItemConsumeCount()) < _count)) {
// 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); player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return; return;
} }
// Do not drop items when casting known skills to avoid exploits.
if (player.getKnownSkill(skill.getId()) != null)
{
return;
}
}
} }
if ((Item.TYPE2_QUEST == item.getItem().getType2()) && !player.canOverrideCond(PlayerCondOverride.DROP_ALL_ITEMS)) if ((Item.TYPE2_QUEST == item.getItem().getType2()) && !player.canOverrideCond(PlayerCondOverride.DROP_ALL_ITEMS))

View File

@@ -140,28 +140,44 @@ public class RequestDropItem implements IClientIncomingPacket
return; return;
} }
// Cannot discard item that the skill is consuming.
if (player.isCastingNow()) if (player.isCastingNow())
{ {
final SkillUseHolder skill = player.getCurrentSkill(); final SkillUseHolder skill = player.getCurrentSkill();
if ((skill != null) && (skill.getSkill().getItemConsumeId() == item.getId()) // if (skill != null)
&& ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getSkill().getItemConsumeCount()) < _count)) {
// 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); player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return; 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()) if (player.isCastingSimultaneouslyNow())
{ {
final Skill skill = player.getLastSimultaneousSkillCast(); final Skill skill = player.getLastSimultaneousSkillCast();
if ((skill != null) && (skill.getItemConsumeId() == item.getId()) // if (skill != null)
&& ((player.getInventory().getInventoryItemCount(item.getId(), -1) - skill.getItemConsumeCount()) < _count)) {
// 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); player.sendPacket(SystemMessageId.THIS_ITEM_CANNOT_BE_DISCARDED);
return; return;
} }
// Do not drop items when casting known skills to avoid exploits.
if (player.getKnownSkill(skill.getId()) != null)
{
return;
}
}
} }
if ((Item.TYPE2_QUEST == item.getItem().getType2()) && !player.canOverrideCond(PlayerCondOverride.DROP_ALL_ITEMS)) if ((Item.TYPE2_QUEST == item.getItem().getType2()) && !player.canOverrideCond(PlayerCondOverride.DROP_ALL_ITEMS))

View File

@@ -22,11 +22,14 @@ import org.l2jmobius.gameserver.data.xml.impl.AdminData;
import org.l2jmobius.gameserver.enums.PrivateStoreType; import org.l2jmobius.gameserver.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); 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.enums.PrivateStoreType;
import org.l2jmobius.gameserver.model.PlayerCondOverride; import org.l2jmobius.gameserver.model.PlayerCondOverride;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance; import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.ActionType; import org.l2jmobius.gameserver.model.items.type.ActionType;
import org.l2jmobius.gameserver.model.items.type.EtcItemType; 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.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -168,6 +171,24 @@ public class RequestDropItem implements IClientIncomingPacket
return; 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()) if (item.isEquipped())
{ {
player.getInventory().unEquipItemInSlot(item.getLocationSlot()); player.getInventory().unEquipItemInSlot(item.getLocationSlot());