Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Destruir Items desde Panel GM

Iniciado por Swarlog, Jul 25, 2025, 11:34 PM

Tema anterior - Siguiente tema

Swarlog

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;
 		}