Explorar o código

BETA: Admin command improvements.
* Removing deprecated command save_modifications.
* Added set_hp, set_mp, set_cp, set_pvp_flag commands.
* Reworked admin edit char panel:
* [[Image(http://www.l2jserver.com/wp-content/uploads/2013/11/admin_edit_char.png)]]

Suggested by: sponer

Zoey76 %!s(int64=11) %!d(string=hai) anos
pai
achega
da1b3c030d

+ 4 - 1
L2J_DataPack_BETA/dist/game/config/adminCommands.xml

@@ -130,7 +130,6 @@
 	<admin command="admin_find_dualbox" accessLevel="7" />
 	<admin command="admin_strict_find_dualbox" accessLevel="7" />
 	<admin command="admin_tracert" accessLevel="7" />
-	<admin command="admin_save_modifications" accessLevel="7" />
 	<admin command="admin_rec" accessLevel="7" />
 	<admin command="admin_settitle" accessLevel="7" />
 	<admin command="admin_changename" accessLevel="7" />
@@ -140,6 +139,7 @@
 	<admin command="admin_setclass" accessLevel="7" />
 	<admin command="admin_setpk" accessLevel="7" />
 	<admin command="admin_setpvp" accessLevel="7" />
+	<admin command="admin_set_pvp_flag" accessLevel="7" />
 	<admin command="admin_fullfood" accessLevel="7" />
 	<admin command="admin_remove_clan_penalty" accessLevel="7" />
 	<admin command="admin_summon_info" accessLevel="7" />
@@ -148,6 +148,9 @@
 	<admin command="admin_show_pet_inv" accessLevel="7" />
 	<admin command="admin_partyinfo" accessLevel="7" />
 	<admin command="admin_setnoble" accessLevel="7" confirmDlg="true" />
+	<admin command="admin_set_hp" accessLevel="7" />
+	<admin command="admin_set_mp" accessLevel="7" />
+	<admin command="admin_set_cp" accessLevel="7" />
 
 	<!-- ADMIN EDIT NPC -->
 	<admin command="admin_edit_npc" accessLevel="7" />

+ 52 - 7
L2J_DataPack_BETA/dist/game/data/html/admin/charedit.htm

@@ -24,10 +24,55 @@
 <tr><td width=140><button value="Nobless" action="bypass -h admin_setnoble" height=21 width=65 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td><td><button value="Class" action="bypass -h admin_setclass" height=21 width=45 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td><td><button value="Sex" action="bypass -h admin_setsex" height=21 width=45 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td></tr>
 </table>
 <br>
-<table width=270>
-<tr><td width=50>Current HP:</td><td><edit var="hp" width=50></td><td width=50>PvP Flag:</td><td><edit var="pvpflag" width=50></td></tr>
-<tr><td width=50>Current MP:</td><td><edit var="mp" width=50></td><td width=50>PvP Kills:</td><td><edit var="pvpkills" width=50></td></tr>
-<tr><td width=50>Current CP:</td><td><edit var="cp" width=50></td><td width=50>PK Kills:</td><td><edit var="pkkills" width=50></td></tr>
-</table><br>
-<center><button value="Save Changes" action="bypass -h admin_save_modifications $hp $mp $cp $pvpflag $pvpkills $pkkills" width=130 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></center>
-</body></html>
+	<table width="270">
+		<tr>
+			<td width="10">HP:</td>
+			<td>
+				<edit var="hp" width="50">
+			</td>
+			<td>
+				<button value="" action="bypass -h admin_set_hp $hp" width="16" height="16" back="L2UI_CH3.shortcut_rotate_down" fore="L2UI_CH3.shortcut_rotate">
+			</td>
+			<td width=50>
+				PvP Flag:
+			</td>
+			<td>
+				<button value="" action="bypass -h admin_set_pvp_flag" width="16" height="16" back="L2UI_CH3.shortcut_rotate_down" fore="L2UI_CH3.shortcut_rotate">
+			</td>
+		</tr>
+		<tr>
+			<td width="10">MP:</td>
+			<td>
+				<edit var="mp" width="50">
+			</td>
+			<td>
+				<button value="" action="bypass -h admin_set_mp $mp" width="16" height="16" back="L2UI_CH3.shortcut_rotate_down" fore="L2UI_CH3.shortcut_rotate">
+			</td>
+			<td width="10">PvPs:</td>
+			<td>
+				<edit var="pvpkills" width="50">
+			</td>
+			<td>
+				<button value="" action="bypass -h admin_setpvp $pvpkills" width="16" height="16" back="L2UI_CH3.shortcut_rotate_down" fore="L2UI_CH3.shortcut_rotate">
+			</td>
+		</tr>
+		<tr>
+			<td width="10">CP:</td>
+			<td>
+				<edit var="cp" width="50">
+			</td>
+			<td>
+				<button value="" action="bypass -h admin_set_cp $cp" width="16" height="16" back="L2UI_CH3.shortcut_rotate_down" fore="L2UI_CH3.shortcut_rotate">
+			</td>
+			<td width="10">PKs:</td>
+			<td>
+				<edit var="pkkills" width="50">
+			</td>
+			<td>
+				<button value="" action="bypass -h admin_setpk $pkkills" width="16" height="16" back="L2UI_CH3.shortcut_rotate_down" fore="L2UI_CH3.shortcut_rotate">
+			</td>
+		</tr>
+	</table>
+	<br>
+</body>
+</html>

+ 84 - 99
L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEditChar.java

@@ -32,13 +32,14 @@ import java.util.logging.Logger;
 
 import com.l2jserver.Config;
 import com.l2jserver.L2DatabaseFactory;
-import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.communitybbs.Manager.RegionBBSManager;
 import com.l2jserver.gameserver.datatables.CharNameTable;
 import com.l2jserver.gameserver.datatables.ClassListData;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
@@ -47,7 +48,6 @@ import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
 import com.l2jserver.gameserver.network.communityserver.writepackets.WorldInfo;
-import com.l2jserver.gameserver.network.serverpackets.CharInfo;
 import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
 import com.l2jserver.gameserver.network.serverpackets.ExVoteSystemInfo;
 import com.l2jserver.gameserver.network.serverpackets.GMViewItemList;
@@ -55,7 +55,6 @@ import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.network.serverpackets.PartySmallWindowAll;
 import com.l2jserver.gameserver.network.serverpackets.PartySmallWindowDeleteAll;
 import com.l2jserver.gameserver.network.serverpackets.SetSummonRemainTime;
-import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.UserInfo;
 import com.l2jserver.gameserver.util.Comparators;
@@ -63,9 +62,7 @@ import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.StringUtil;
 
 /**
- * This class handles following admin commands: - edit_character - current_player - character_list - show_characters - find_character - find_ip - find_account - rec - nokarma - setkarma - settitle - changename - setsex - setclass - fullfood - save_modifications - setcolor - settcolor - setpk -
- * setpvp - remove_clan_penalty - summon_info - unsummon - summon_setlvl - show_pet_inv - partyinfo
- * @version $Revision: 1.3.2.1.2.10 $ $Date: 2005/04/11 10:06:06 $ Typo fix, rework for admin_tracert, gatherCharacterInfo and editCharacter by Zoey76 28/02/2011
+ * EditChar admin command implementation.
  */
 public class AdminEditChar implements IAdminCommandHandler
 {
@@ -87,7 +84,6 @@ public class AdminEditChar implements IAdminCommandHandler
 		"admin_find_dualbox", // list all the IPs with more than 1 char logged in (dualbox)
 		"admin_strict_find_dualbox",
 		"admin_tracert",
-		"admin_save_modifications", // consider it deprecated...
 		"admin_rec", // gives recommendation points
 		"admin_settitle", // changes char title
 		"admin_changename", // changes char name
@@ -97,6 +93,7 @@ public class AdminEditChar implements IAdminCommandHandler
 		"admin_setclass", // changes chars' classId
 		"admin_setpk", // changes PK count
 		"admin_setpvp", // changes PVP count
+		"admin_set_pvp_flag",
 		"admin_fullfood", // fulfills a pet's food bar
 		"admin_remove_clan_penalty", // removes clan penalties
 		"admin_summon_info", // displays an information window about target summon
@@ -104,7 +101,10 @@ public class AdminEditChar implements IAdminCommandHandler
 		"admin_summon_setlvl",
 		"admin_show_pet_inv",
 		"admin_partyinfo",
-		"admin_setnoble"
+		"admin_setnoble",
+		"admin_set_hp",
+		"admin_set_mp",
+		"admin_set_cp",
 	};
 	
 	@Override
@@ -318,19 +318,6 @@ public class AdminEditChar implements IAdminCommandHandler
 				activeChar.sendMessage("Usage: //setfame <new_fame_value>");
 			}
 		}
-		else if (command.startsWith("admin_save_modifications"))
-		{
-			try
-			{
-				String val = command.substring(24);
-				adminModifyCharacter(activeChar, val);
-			}
-			catch (StringIndexOutOfBoundsException e)
-			{ // Case of empty character name
-				activeChar.sendMessage("Error while modifying character.");
-				listCharacters(activeChar, 0);
-			}
-		}
 		else if (command.startsWith("admin_rec"))
 		{
 			try
@@ -757,13 +744,11 @@ public class AdminEditChar implements IAdminCommandHandler
 		}
 		else if (command.startsWith("admin_show_pet_inv"))
 		{
-			String val;
-			int objId;
 			L2Object target;
 			try
 			{
-				val = command.substring(19);
-				objId = Integer.parseInt(val);
+				String val = command.substring(19);
+				int objId = Integer.parseInt(val);
 				target = L2World.getInstance().getPet(objId);
 			}
 			catch (Exception e)
@@ -783,11 +768,10 @@ public class AdminEditChar implements IAdminCommandHandler
 		}
 		else if (command.startsWith("admin_partyinfo"))
 		{
-			String val;
 			L2Object target;
 			try
 			{
-				val = command.substring(16);
+				String val = command.substring(16);
 				target = L2World.getInstance().getPlayer(val);
 				if (target == null)
 				{
@@ -812,7 +796,7 @@ public class AdminEditChar implements IAdminCommandHandler
 			}
 			else
 			{
-				activeChar.sendMessage("Invalid target.");
+				activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
 			}
 			
 		}
@@ -838,6 +822,78 @@ public class AdminEditChar implements IAdminCommandHandler
 				player.sendMessage("GM changed your nobless status!");
 			}
 		}
+		else if (command.startsWith("admin_set_hp"))
+		{
+			final String[] data = command.split(" ");
+			try
+			{
+				final L2Object target = activeChar.getTarget();
+				if ((target == null) || !target.isCharacter())
+				{
+					activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
+					return false;
+				}
+				((L2Character) target).setCurrentHp(Double.parseDouble(data[1]));
+			}
+			catch (Exception e)
+			{
+				activeChar.sendMessage("Usage: //set_hp 1000");
+			}
+		}
+		else if (command.startsWith("admin_set_mp"))
+		{
+			final String[] data = command.split(" ");
+			try
+			{
+				final L2Object target = activeChar.getTarget();
+				if ((target == null) || !target.isCharacter())
+				{
+					activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
+					return false;
+				}
+				((L2Character) target).setCurrentMp(Double.parseDouble(data[1]));
+			}
+			catch (Exception e)
+			{
+				activeChar.sendMessage("Usage: //set_mp 1000");
+			}
+		}
+		else if (command.startsWith("admin_set_cp"))
+		{
+			final String[] data = command.split(" ");
+			try
+			{
+				final L2Object target = activeChar.getTarget();
+				if ((target == null) || !target.isCharacter())
+				{
+					activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
+					return false;
+				}
+				((L2Character) target).setCurrentCp(Double.parseDouble(data[1]));
+			}
+			catch (Exception e)
+			{
+				activeChar.sendMessage("Usage: //set_cp 1000");
+			}
+		}
+		else if (command.startsWith("admin_set_pvp_flag"))
+		{
+			try
+			{
+				final L2Object target = activeChar.getTarget();
+				if ((target == null) || !target.isPlayable())
+				{
+					activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
+					return false;
+				}
+				final L2Playable playable = ((L2Playable) target);
+				playable.updatePvPFlag(Math.abs(playable.getPvpFlag() - 1));
+			}
+			catch (Exception e)
+			{
+				activeChar.sendMessage("Usage: //set_pvp_flag");
+			}
+		}
 		return true;
 	}
 	
@@ -1034,77 +1090,6 @@ public class AdminEditChar implements IAdminCommandHandler
 		}
 	}
 	
-	private void adminModifyCharacter(L2PcInstance activeChar, String modifications)
-	{
-		L2Object target = activeChar.getTarget();
-		
-		if (!(target instanceof L2PcInstance))
-		{
-			return;
-		}
-		
-		L2PcInstance player = (L2PcInstance) target;
-		StringTokenizer st = new StringTokenizer(modifications);
-		
-		if (st.countTokens() != 6)
-		{
-			editCharacter(activeChar, null);
-			return;
-		}
-		
-		String hp = st.nextToken();
-		String mp = st.nextToken();
-		String cp = st.nextToken();
-		String pvpflag = st.nextToken();
-		String pvpkills = st.nextToken();
-		String pkkills = st.nextToken();
-		
-		int hpval = Integer.parseInt(hp);
-		int mpval = Integer.parseInt(mp);
-		int cpval = Integer.parseInt(cp);
-		int pvpflagval = Integer.parseInt(pvpflag);
-		int pvpkillsval = Integer.parseInt(pvpkills);
-		int pkkillsval = Integer.parseInt(pkkills);
-		
-		// Common character information
-		player.sendMessage("Admin has changed your stats." + "  HP: " + hpval + "  MP: " + mpval + "  CP: " + cpval + "  PvP Flag: " + pvpflagval + " PvP/PK " + pvpkillsval + "/" + pkkillsval);
-		player.setCurrentHp(hpval);
-		player.setCurrentMp(mpval);
-		player.setCurrentCp(cpval);
-		player.setPvpFlag(pvpflagval);
-		player.setPvpKills(pvpkillsval);
-		player.setPkKills(pkkillsval);
-		
-		// Save the changed parameters to the database.
-		player.storeMe();
-		
-		StatusUpdate su = new StatusUpdate(player);
-		su.addAttribute(StatusUpdate.CUR_HP, hpval);
-		su.addAttribute(StatusUpdate.MAX_HP, player.getMaxHp());
-		su.addAttribute(StatusUpdate.CUR_MP, mpval);
-		su.addAttribute(StatusUpdate.MAX_MP, player.getMaxMp());
-		su.addAttribute(StatusUpdate.CUR_CP, cpval);
-		su.addAttribute(StatusUpdate.MAX_CP, player.getMaxCp());
-		player.sendPacket(su);
-		
-		// Admin information
-		activeChar.sendMessage("Changed stats of " + player.getName() + "." + "  HP: " + hpval + "  MP: " + mpval + "  CP: " + cpval + "  PvP: " + pvpflagval + " / " + pvpkillsval);
-		
-		if (Config.DEBUG)
-		{
-			_log.fine("[GM]" + activeChar.getName() + " changed stats of " + player.getName() + ". " + " HP: " + hpval + " MP: " + mpval + " CP: " + cpval + " PvP: " + pvpflagval + " / " + pvpkillsval);
-		}
-		
-		showCharacterInfo(activeChar, null); // Back to start
-		
-		player.broadcastPacket(new CharInfo(player));
-		player.sendPacket(new UserInfo(player));
-		player.broadcastPacket(new ExBrExtraUserInfo(player));
-		player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
-		player.decayMe();
-		player.spawnMe(activeChar.getX(), activeChar.getY(), activeChar.getZ());
-	}
-	
 	private void editCharacter(L2PcInstance activeChar, String targetName)
 	{
 		L2Object target = null;