From bf85eecfd9008510bb6cba0bdd0c0e37bb01d1e1 Mon Sep 17 00:00:00 2001
From: Rumen Nikiforov <unafraid89@gmail.com>
Date: Fri, 12 Apr 2013 00:22:13 +0000
Subject: [PATCH] BETA: Adding new admin command !//scan [range] displays all
 NPCs around you giving u ability to move to the NPC or delete it. 	*
 Reviewed by: FBIagent, MELERIX

---
 .../dist/game/config/adminCommands.xml        |   6 +-
 .../dist/game/data/html/admin/main_menu.htm   |   2 +
 .../dist/game/data/html/admin/scan.htm        |  23 ++++
 L2J_DataPack_BETA/dist/game/data/scripts.cfg  |   1 +
 .../admincommandhandlers/AdminScan.js         | 116 ++++++++++++++++++
 .../dist/game/data/xsd/adminCommands.xsd      |   2 +
 6 files changed, 149 insertions(+), 1 deletion(-)
 create mode 100644 L2J_DataPack_BETA/dist/game/data/html/admin/scan.htm
 create mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminScan.js

diff --git a/L2J_DataPack_BETA/dist/game/config/adminCommands.xml b/L2J_DataPack_BETA/dist/game/config/adminCommands.xml
index 0b728439fa..ded1cd56db 100644
--- a/L2J_DataPack_BETA/dist/game/config/adminCommands.xml
+++ b/L2J_DataPack_BETA/dist/game/config/adminCommands.xml
@@ -3,7 +3,7 @@
 	<!-- ADMIN COND EXCEPTIONS -->
 	<admin command="admin_exceptions" accessLevel="7" />
 	<admin command="admin_set_exception" accessLevel="7" confirmDlg="true" />
-	
+
 	<!-- ADMIN ADMIN -->
 	<admin command="admin_admin" accessLevel="7" />
 	<admin command="admin_admin1" accessLevel="7" />
@@ -632,6 +632,10 @@
 	<admin command="admin_zone_visual" accessLevel="7" />
 	<admin command="admin_zone_visual_clear" accessLevel="7" />
 
+	<!-- ADMIN SCAN -->
+	<admin command="admin_scan" accessLevel="7" />
+	<admin command="admin_deleteNpcByObjectId" accessLevel="7" confirmDlg="true" />
+
 	<!-- VOICE COMMANDS -->
 	<admin command="banchat" accessLevel="7" />
 	<admin command="debug" accessLevel="7" />
diff --git a/L2J_DataPack_BETA/dist/game/data/html/admin/main_menu.htm b/L2J_DataPack_BETA/dist/game/data/html/admin/main_menu.htm
index 30be03f44b..f2e9da57a5 100644
--- a/L2J_DataPack_BETA/dist/game/data/html/admin/main_menu.htm
+++ b/L2J_DataPack_BETA/dist/game/data/html/admin/main_menu.htm
@@ -26,6 +26,8 @@
 <td><button value="ListSpwn" action="bypass -h admin_list_spawns $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
 <td><button value="goPosition" action="bypass -h admin_list_positions $qbox 1" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
 <td><button value="goSpawn" action="bypass -h admin_list_spawns $qbox 1" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
+</tr><tr>
+<td><button value="Scan" action="bypass -h admin_scan $qbox" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
 </tr>
 </table>
 <br>
diff --git a/L2J_DataPack_BETA/dist/game/data/html/admin/scan.htm b/L2J_DataPack_BETA/dist/game/data/html/admin/scan.htm
new file mode 100644
index 0000000000..cf1387fb89
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/html/admin/scan.htm
@@ -0,0 +1,23 @@
+<html><title>L2J Main Admin Menu</title><body>
+<center>
+<table width=270 border=0 bgcolor="444444">
+<tr>
+<td><button value="Main" action="bypass -h admin_admin" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
+<td><button value="Char" action="bypass -h admin_admin6" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
+<td><button value="Game" action="bypass -h admin_admin2" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
+<td><button value="GM" action="bypass -h admin_admin7" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
+</tr>
+</table><br>
+<table width=270>
+<tr>
+<td width="54">Id</td>
+<td width="54">Name</td>
+<td width="54">Dist</td>
+<td width="54">Delete</td>
+<td width="54">Goto</td>
+</tr>
+%data%
+</table>
+</center>
+</body>
+</html>
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts.cfg b/L2J_DataPack_BETA/dist/game/data/scripts.cfg
index 9d2c8a6428..361772c7fb 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts.cfg
+++ b/L2J_DataPack_BETA/dist/game/data/scripts.cfg
@@ -7,6 +7,7 @@
 
 # Load Handlers
 handlers/MasterHandler.java
+handlers/admincommandhandlers/AdminScan.js
 
 # AI Section
 
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminScan.js b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminScan.js
new file mode 100644
index 0000000000..60c1a0ffdc
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminScan.js
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+importPackage(java.util);
+importPackage(java.lang);
+importPackage(com.l2jserver.gameserver.cache);
+importPackage(com.l2jserver.gameserver.datatables);
+importPackage(com.l2jserver.gameserver.handler);
+importPackage(com.l2jserver.gameserver.instancemanager);
+importPackage(com.l2jserver.gameserver.model);
+importPackage(com.l2jserver.gameserver.model.actor);
+importPackage(com.l2jserver.gameserver.model.actor.instance);
+importPackage(com.l2jserver.gameserver.network.serverpackets);
+importPackage(com.l2jserver.gameserver.util);
+
+/**
+ * @author UnAfraid
+ */
+AdminCommandHandler.getInstance().registerHandler(new JavaAdapter(IAdminCommandHandler,
+{
+	// Override useAdminCommand() method.
+	useAdminCommand : function(command, player)
+	{
+		var st = new StringTokenizer(command, " ");
+		if (st.hasMoreTokens())
+		{
+			var cmd = st.nextToken();
+			if (cmd == 'admin_scan')
+			{
+				var radius = 500;
+				if (st.hasMoreTokens())
+				{
+					var obj = st.nextToken();
+					if (Util.isDigit(obj))
+					{
+						radius = obj;
+					}
+				}
+				
+				var htm = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/admin/scan.htm");
+				var sb = new StringBuilder();
+				var it = player.getKnownList().getKnownCharactersInRadius(radius).iterator();
+				while (it.hasNext())
+				{
+					var character = it.next();
+					if (character instanceof L2Npc)
+					{
+						sb.append("<tr>");
+						sb.append("<td width=\"54\">" + character.getNpcId() + "</td>");
+						sb.append("<td width=\"54\">" + character.getName() + "</td>");
+						sb.append("<td width=\"54\">" + Math.round(Util.calculateDistance(player, character, false)) + "</td>");
+						sb.append("<td width=\"54\"><a action=\"bypass -h admin_deleteNpcByObjectId " + character.getObjectId() + "\"><font color=\"LEVEL\">Delete</font></a></td>");
+						sb.append("<td width=\"54\"><a action=\"bypass -h admin_move_to " + character.getX() + " " + character.getY() + " " + character.getZ() + "\"><font color=\"LEVEL\">Go to</font></a></td>");
+						sb.append("</tr>");
+					}
+				}
+				htm = htm.replaceAll("%data%", sb.toString());
+				player.sendPacket(new NpcHtmlMessage(0, htm));
+			}
+			else if (cmd = 'admin_deleteNpcByObjectId' && st.hasMoreTokens())
+			{
+				var objectId = st.nextToken();
+				if (Util.isDigit(objectId))
+				{
+					var it = player.getKnownList().getKnownCharacters().iterator();
+					while (it.hasNext())
+					{
+						var character = it.next();
+						if ((character instanceof L2Npc) && (character.getObjectId() == objectId))
+						{
+							character.deleteMe();
+							var spawn = character.getSpawn();
+							if (spawn != null)
+							{
+								spawn.stopRespawn();
+								
+								if (RaidBossSpawnManager.getInstance().isDefined(spawn.getNpcid()))
+								{
+									RaidBossSpawnManager.getInstance().deleteSpawn(spawn, true);
+								}
+								else
+								{
+									SpawnTable.getInstance().deleteSpawn(spawn, true);
+								}
+							}
+							player.sendMessage(character.getName() + " have been deleted.");
+							this.useAdminCommand("admin_scan", player);
+						}
+					}
+				}
+			}
+		}
+		return true;
+	},
+	
+	// Override getAdminCommandList() method.
+	getAdminCommandList : function()
+	{
+		return new Array("admin_scan", "admin_deleteNpcByObjectId");
+	}
+}));
\ No newline at end of file
diff --git a/L2J_DataPack_BETA/dist/game/data/xsd/adminCommands.xsd b/L2J_DataPack_BETA/dist/game/data/xsd/adminCommands.xsd
index 8bf1852ca4..a1ac8fac4e 100644
--- a/L2J_DataPack_BETA/dist/game/data/xsd/adminCommands.xsd
+++ b/L2J_DataPack_BETA/dist/game/data/xsd/adminCommands.xsd
@@ -500,6 +500,8 @@
 									<xs:enumeration value="admin_zone_reload" />
 									<xs:enumeration value="admin_zone_visual_clear" />
 									<xs:enumeration value="admin_zone_visual" />
+									<xs:enumeration value="admin_scan" />
+									<xs:enumeration value="admin_deleteNpcByObjectId" />
 									<xs:enumeration value="banchat" />
 									<xs:enumeration value="debug" />
 									<xs:enumeration value="recall" />
-- 
GitLab