diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminCreateItem.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminCreateItem.java
index ca68a7d..97e477b 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminCreateItem.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminCreateItem.java
@@ -22,9 +22,13 @@ import java.util.StringTokenizer;
import com.l2jserver.gameserver.datatables.ItemTable;
import com.l2jserver.gameserver.handler.IAdminCommandHandler;
+import com.l2jserver.gameserver.handler.IItemHandler;
+import com.l2jserver.gameserver.handler.ItemHandler;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.L2Item;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.network.serverpackets.GMViewItemList;
/**
* This class handles following admin commands: - itemcreate = show menu - create_item <id> [num] = creates num items with respective id, if num is not specified, assumes 1.
@@ -38,7 +42,9 @@ public class AdminCreateItem implements IAdminCommandHandler
"admin_create_item",
"admin_create_coin",
"admin_give_item_target",
- "admin_give_item_to_all"
+ "admin_give_item_to_all",
+ "admin_delete_item",
+ "admin_use_item"
};
@Override
@@ -197,6 +203,87 @@ public class AdminCreateItem implements IAdminCommandHandler
}
activeChar.sendMessage(counter + " players rewarded with " + template.getName());
}
+ else if (command.startsWith("admin_delete_item"))
+ {
+ String val = command.substring(18);
+ StringTokenizer st = new StringTokenizer(val);
+ int idval = 0;
+ long numval = 0;
+ if (st.countTokens() == 2)
+ {
+ String id = st.nextToken();
+ idval = Integer.parseInt(id);
+ String num = st.nextToken();
+ numval = Long.parseLong(num);
+ }
+ else if (st.countTokens() == 1)
+ {
+ String id = st.nextToken();
+ idval = Integer.parseInt(id);
+ numval = 1;
+ }
+ L2ItemInstance item = (L2ItemInstance) L2World.getInstance().findObject(idval);
+ int ownerId = item.getOwnerId();
+ if (ownerId > 0)
+ {
+ L2PcInstance player = L2World.getInstance().getPlayer(ownerId);
+ if (player == null)
+ {
+ activeChar.sendMessage("Player is not online.");
+ return false;
+ }
+
+ if (numval == 0)
+ {
+ numval = item.getCount();
+ }
+
+ player.getInventory().destroyItem("AdminDelete", idval, numval, activeChar, null);
+ activeChar.sendPacket(new GMViewItemList(player));
+ activeChar.sendMessage("Item deleted.");
+ }
+ else
+ {
+ activeChar.sendMessage("Item doesn't have owner.");
+ return false;
+ }
+ }
+ else if (command.startsWith("admin_use_item"))
+ {
+ String val = command.substring(15);
+ int idval = Integer.parseInt(val);
+ L2ItemInstance item = (L2ItemInstance) L2World.getInstance().findObject(idval);
+ int ownerId = item.getOwnerId();
+ if (ownerId > 0)
+ {
+ L2PcInstance player = L2World.getInstance().getPlayer(ownerId);
+ if (player == null)
+ {
+ activeChar.sendMessage("Player is not online.");
+ return false;
+ }
+
+ // equip
+ if (item.isEquipable())
+ {
+ player.useEquippableItem(item, false);
+ }
+ else
+ {
+ final IItemHandler ih = ItemHandler.getInstance().getHandler(item.getEtcItem());
+ if (ih != null)
+ {
+ ih.useItem(player, item, false);
+ }
+ }
+ activeChar.sendPacket(new GMViewItemList(player));
+ }
+ else
+ {
+ activeChar.sendMessage("Item doesn't have owner.");
+ return false;
+ }
+ }
return true;
}
diff --git a/L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java b/L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
index b297080..6fea7d5 100644
--- a/L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
+++ b/L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
@@ -97,6 +97,8 @@ import com.l2jserver.gameserver.enums.ShortcutType;
import com.l2jserver.gameserver.enums.ShotType;
import com.l2jserver.gameserver.enums.Team;
import com.l2jserver.gameserver.enums.UserInfoType;
+import com.l2jserver.gameserver.handler.AdminCommandHandler;
+import com.l2jserver.gameserver.handler.IAdminCommandHandler;
import com.l2jserver.gameserver.handler.IItemHandler;
import com.l2jserver.gameserver.handler.ItemHandler;
import com.l2jserver.gameserver.idfactory.IdFactory;
@@ -334,6 +336,7 @@ import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
import com.l2jserver.gameserver.util.Broadcast;
import com.l2jserver.gameserver.util.FloodProtectors;
+import com.l2jserver.gameserver.util.GMAudit;
import com.l2jserver.gameserver.util.Util;
import com.l2jserver.util.EnumIntBitmask;
import com.l2jserver.util.Rnd;
@@ -14616,4 +14619,49 @@ public final class L2PcInstance extends L2Playable
{
return getVariables().getInt("visualFaceId", getAppearance().getFace());
}
+
+ /**
+ * @param fullCommand
+ */
+ public void useAdminCommand(String fullCommand)
+ {
+ final String command = fullCommand.split(" ")[0];
+
+ final IAdminCommandHandler ach = AdminCommandHandler.getInstance().getHandler(command);
+ if (ach == null)
+ {
+ if (isGM())
+ {
+ sendMessage("The command " + command.substring(6) + " does not exist!");
+ }
+
+ _log.warning("No handler registered for admin command '" + command + "'");
+ return;
+ }
+
+ if (!AdminTable.getInstance().hasAccess(command, getAccessLevel()))
+ {
+ sendMessage("You don't have the access rights to use this command!");
+ _log.warning("Character " + getName() + " tried to use admin command " + command + ", without proper access level!");
+ return;
+ }
+
+ if (AdminTable.getInstance().requireConfirm(command))
+ {
+ setAdminConfirmCmd(fullCommand);
+ ConfirmDlg dlg = new ConfirmDlg(SystemMessageId.S1);
+ dlg.addString("Are you sure you want execute command " + fullCommand.substring(6) + " ?");
+ addAction(PlayerAction.ADMIN_COMMAND);
+ sendPacket(dlg);
+ }
+ else
+ {
+ if (Config.GMAUDIT)
+ {
+ GMAudit.auditGMAction(getName() + " [" + getObjectId() + "]", fullCommand, (getTarget() != null ? getTarget().getName() : "no-target"));
+ }
+
+ ach.useAdminCommand(fullCommand, this);
+ }
+ }
}
diff --git a/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestBypassToServer.java b/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestBypassToServer.java
index f3d831d..d622f6f 100644
--- a/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestBypassToServer.java
+++ b/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestBypassToServer.java
@@ -24,12 +24,8 @@ import java.util.logging.Level;
import com.l2jserver.Config;
import com.l2jserver.gameserver.ai.CtrlIntention;
import com.l2jserver.gameserver.communitybbs.CommunityBoard;
-import com.l2jserver.gameserver.datatables.AdminTable;
import com.l2jserver.gameserver.enums.InstanceType;
-import com.l2jserver.gameserver.enums.PlayerAction;
-import com.l2jserver.gameserver.handler.AdminCommandHandler;
import com.l2jserver.gameserver.handler.BypassHandler;
-import com.l2jserver.gameserver.handler.IAdminCommandHandler;
import com.l2jserver.gameserver.handler.IBypassHandler;
import com.l2jserver.gameserver.model.L2Object;
import com.l2jserver.gameserver.model.L2World;
@@ -44,9 +40,7 @@ import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
import com.l2jserver.gameserver.network.communityserver.writepackets.RequestShowCommunityBoard;
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
-import com.l2jserver.gameserver.network.serverpackets.ConfirmDlg;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
-import com.l2jserver.gameserver.util.GMAudit;
import com.l2jserver.gameserver.util.Util;
/**
@@ -130,44 +124,7 @@ public final class RequestBypassToServer extends L2GameClientPacket
{
if (_command.startsWith("admin_"))
{
- String command = _command.split(" ")[0];
-
- IAdminCommandHandler ach = AdminCommandHandler.getInstance().getHandler(command);
-
- if (ach == null)
- {
- if (activeChar.isGM())
- {
- activeChar.sendMessage("The command " + command.substring(6) + " does not exist!");
- }
- _log.warning(activeChar + " requested not registered admin command '" + command + "'");
- return;
- }
-
- if (!AdminTable.getInstance().hasAccess(command, activeChar.getAccessLevel()))
- {
- activeChar.sendMessage("You don't have the access rights to use this command!");
- _log.warning("Character " + activeChar.getName() + " tried to use admin command " + command + ", without proper access level!");
- return;
- }
-
- if (AdminTable.getInstance().requireConfirm(command))
- {
- activeChar.setAdminConfirmCmd(_command);
- ConfirmDlg dlg = new ConfirmDlg(SystemMessageId.S1);
- dlg.addString("Are you sure you want execute command " + _command.substring(6) + " ?");
- activeChar.addAction(PlayerAction.ADMIN_COMMAND);
- activeChar.sendPacket(dlg);
- }
- else
- {
- if (Config.GMAUDIT)
- {
- GMAudit.auditGMAction(activeChar.getName() + " [" + activeChar.getObjectId() + "]", _command, (activeChar.getTarget() != null ? activeChar.getTarget().getName() : "no-target"));
- }
-
- ach.useAdminCommand(_command, activeChar);
- }
+ activeChar.useAdminCommand(_command);
}
else if (_command.equals("come_here") && activeChar.isGM())
{
diff --git a/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestDestroyItem.java b/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestDestroyItem.java
index 5544b43..f6f29fe 100644
--- a/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestDestroyItem.java
+++ b/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestDestroyItem.java
@@ -26,6 +26,8 @@ import com.l2jserver.Config;
import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.enums.PrivateStoreType;
import com.l2jserver.gameserver.instancemanager.CursedWeaponsManager;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.PcCondOverride;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
@@ -86,11 +88,25 @@ public final class RequestDestroyItem extends L2GameClientPacket
return;
}
- L2ItemInstance itemToRemove = activeChar.getInventory().getItemByObjectId(_objectId);
-
+ final L2ItemInstance itemToRemove = activeChar.getInventory().getItemByObjectId(_objectId);
// if we can't find the requested item, its actually a cheat
if (itemToRemove == null)
{
+ // gm can destroy other player items
+ if (activeChar.isGM())
+ {
+ final L2Object obj = L2World.getInstance().findObject(_objectId);
+ if (obj instanceof L2ItemInstance)
+ {
+ if (_count > ((L2ItemInstance) obj).getCount())
+ {
+ count = ((L2ItemInstance) obj).getCount();
+ }
+ activeChar.useAdminCommand("admin_delete_item " + _objectId + " " + count);
+ }
+ return;
+ }
+
activeChar.sendPacket(SystemMessageId.CANNOT_DISCARD_THIS_ITEM);
return;
}
diff --git a/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/UseItem.java b/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/UseItem.java
index d3535aa..4f51953 100644
--- a/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/UseItem.java
+++ b/L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/UseItem.java
@@ -25,11 +25,13 @@ import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.ai.CtrlEvent;
import com.l2jserver.gameserver.ai.CtrlIntention;
import com.l2jserver.gameserver.ai.NextAction;
-import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.enums.PrivateStoreType;
+import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.handler.IItemHandler;
import com.l2jserver.gameserver.handler.ItemHandler;
import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.PcCondOverride;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.effects.L2EffectType;
@@ -124,6 +126,16 @@ public final class UseItem extends L2GameClientPacket
final L2ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId);
if (item == null)
{
+ // gm can use other player item
+ if (activeChar.isGM())
+ {
+ L2Object obj = L2World.getInstance().findObject(_objectId);
+ if (obj instanceof L2ItemInstance)
+ {
+ activeChar.useAdminCommand("admin_use_item " + _objectId);
+ }
+ return;
+ }
return;
}