All pastes #47647 Raw Edit

Something

public java v1 · immutable
#47647 ·published 2006-03-31 00:01 UTC
rendered paste body
/* * This program 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 2, or (at your option) * any later version. * * This program 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * * http://www.gnu.org/copyleft/gpl.html */package net.sf.l2j.gameserver.handler.admincommandhandlers;import java.util.StringTokenizer;import java.util.logging.Logger;import net.sf.l2j.Config;import net.sf.l2j.gameserver.SkillTable;import net.sf.l2j.gameserver.SkillTreeTable;import net.sf.l2j.gameserver.handler.IAdminCommandHandler;import net.sf.l2j.gameserver.model.GMAudit;import net.sf.l2j.gameserver.model.L2Object;import net.sf.l2j.gameserver.model.L2Skill;import net.sf.l2j.gameserver.model.L2SkillLearn;import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;import net.sf.l2j.gameserver.serverpackets.ActionFailed;import net.sf.l2j.gameserver.serverpackets.MagicSkillUser;import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;import net.sf.l2j.gameserver.serverpackets.SystemMessage;/** * This class handles following admin commands: * - show_skills * - remove_skills * - skill_list * - skill_index * - add_skill * - remove_skill * - get_skills * - reset_skills * - give_all_skills *  * @version $Revision: 1.2.4.7 $ $Date: 2005/04/11 10:06:02 $ */public class AdminSkill implements IAdminCommandHandler {	private static Logger _log = Logger.getLogger(AdminSkill.class.getName());		private static String[] _adminCommands = {			"admin_show_skills",			"admin_remove_skills",			"admin_skill_list",			"admin_skill_index",			"admin_add_skill",			"admin_remove_skill",			"admin_get_skills",			"admin_reset_skills",			"admin_give_all_skills"			};	private static final int REQUIRED_LEVEL = Config.GM_CHAR_EDIT;	private static final int REQUIRED_LEVEL2 = Config.GM_CHAR_EDIT_OTHER;		private static L2Skill[] adminSkills;	public boolean useAdminCommand(String command, L2PcInstance activeChar) {        if (!Config.ALT_PRIVILEGES_ADMIN)            if (!(checkLevel(activeChar.getAccessLevel()) && activeChar.isGM())) return false;				String target = (activeChar.getTarget() != null?activeChar.getTarget().getName():"no-target");        GMAudit.auditGMAction(activeChar.getName(), command, target, "");        if (command.equals("admin_show_skills"))		{			showSkillsPage(activeChar);		}        else if (command.startsWith("admin_remove_skills"))		{        	try {        		String val = command.substring(20);        		removeSkillsPage(activeChar, Integer.parseInt(val));        	}			catch (StringIndexOutOfBoundsException e)			{ }		}		else if (command.startsWith("admin_skill_list"))		{			AdminHelpPage.showHelpPage(activeChar, "skills.htm");		}		else if (command.startsWith("admin_skill_index"))		{            try            {    			String val = command.substring(18);    			AdminHelpPage.showHelpPage(activeChar, "skills/" + val + ".htm");            }            catch (StringIndexOutOfBoundsException e)            { }		}		else if (command.startsWith("admin_add_skill"))		{			try			{				String val = command.substring(15); 			    if (activeChar == activeChar.getTarget() || activeChar.getAccessLevel() >= REQUIRED_LEVEL2)				adminAddSkill(activeChar, val);			}			catch (StringIndexOutOfBoundsException e)			{	//Case of empty character name				SystemMessage sm = new SystemMessage(614);				sm.addString("Error while adding skill.");				activeChar.sendPacket(sm);			}					}		else if (command.startsWith("admin_remove_skill"))		{			try			{				String id = command.substring(19);				int idval = Integer.parseInt(id);			     if (activeChar == activeChar.getTarget() || activeChar.getAccessLevel() >= REQUIRED_LEVEL2)				adminRemoveSkill(activeChar, idval);			}			catch (StringIndexOutOfBoundsException e)			{	//Case of empty character name				SystemMessage sm = new SystemMessage(614);				sm.addString("Error while removing skill.");				activeChar.sendPacket(sm);			}					}		else if (command.equals("admin_get_skills"))		{			adminGetSkills(activeChar);		}		else if (command.equals("admin_reset_skills"))		{		     if (activeChar == activeChar.getTarget() || activeChar.getAccessLevel() >= REQUIRED_LEVEL2)			adminResetSkills(activeChar);		}        else if (command.equals("admin_give_all_skills"))        {	  if (activeChar == activeChar.getTarget() || activeChar.getAccessLevel() >= REQUIRED_LEVEL2)            adminGiveAllSkills(activeChar);        }				return true;	}		/**     * This function will give all the skills that the gm target can have at its level     * to the traget     * @param activeChar: the gm char     */    private void adminGiveAllSkills(L2PcInstance activeChar)    {        L2Object target = activeChar.getTarget();        L2PcInstance player = null;        if (target instanceof L2PcInstance) {            player = (L2PcInstance)target;        } else {                        SystemMessage sm = new SystemMessage(614);            sm.addString("Incorrect target.");            activeChar.sendPacket(sm);            return;        }        boolean countUnlearnable = true;        int unLearnable = 0;        int skillCounter = 0;        L2SkillLearn[] skills = SkillTreeTable.getInstance().getAvailableSkills(player, player.getClassId());        while(skills.length > unLearnable)        {            for (L2SkillLearn s : skills)            {                L2Skill sk = SkillTable.getInstance().getInfo(s.getId(), s.getLevel());                if (sk == null || !sk.getCanLearn(player.getClassId()))                {                	if(countUnlearnable)                		unLearnable++;                    continue;                }                if(player.getSkillLevel(sk.getId()) == -1)                {                    skillCounter++;                }                player.addSkill(sk);            }            countUnlearnable = false;            skills = SkillTreeTable.getInstance().getAvailableSkills(player, player.getClassId());        }        //Notify player and admin        player.sendMessage("A GM gave you " + skillCounter + " skills.");        activeChar.sendMessage("You gave " + skillCounter + " skills to " + player.getName());    }    public String[] getAdminCommandList() {		return _adminCommands;	}		private boolean checkLevel(int level) {		return (level >= REQUIRED_LEVEL);	}		//ok	private void removeSkillsPage(L2PcInstance activeChar, int page)	{		L2Object target = activeChar.getTarget();		L2PcInstance player = null;		if (target instanceof L2PcInstance) {			player = (L2PcInstance)target;		} else {			SystemMessage sm = new SystemMessage(614);			sm.addString("Incorrect target.");			activeChar.sendPacket(sm);			return;		}				L2Skill[] skills = player.getAllSkills();						int MaxSkillsPerPage = 10;		int MaxPages = skills.length / MaxSkillsPerPage;		if (skills.length > MaxSkillsPerPage * MaxPages)			MaxPages++;				if (page>MaxPages)			page = MaxPages;				int SkillsStart = MaxSkillsPerPage*page;		int SkillsEnd = skills.length;		if (SkillsEnd - SkillsStart > MaxSkillsPerPage)		    SkillsEnd = SkillsStart + MaxSkillsPerPage;				NpcHtmlMessage adminReply = new NpcHtmlMessage(5);				StringBuffer replyMSG = new StringBuffer("<html><body>");		replyMSG.append("<table width=260><tr>");		replyMSG.append("<td width=40><button value=\"Main\" action=\"bypass -h admin_admin\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>");		replyMSG.append("<td width=180><center>Character Selection Menu</center></td>");		replyMSG.append("<td width=40><button value=\"Back\" action=\"bypass -h admin_show_skills\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>");		replyMSG.append("</tr></table>");		replyMSG.append("<br><br>");		replyMSG.append("<center>Editing <font color=\"LEVEL\">" + player.getName() + "</font></center>");		replyMSG.append("<br><table width=270><tr><td>Lv: " + player.getLevel() + " " + player.getTemplate().className + "</td></tr></table>");		replyMSG.append("<br><table width=270><tr><td>Note: Dont forget that modifying players skills can</td></tr>");		replyMSG.append("<tr><td>ruin the game...</td></tr></table>");		replyMSG.append("<br><center>Click on the skill you wish to remove:</center>");		replyMSG.append("<br>");		for (int x=0; x<MaxPages; x++)		{			int pagenr = x + 1;			replyMSG.append("<center><a action=\"bypass -h admin_remove_skills " + x + "\">Page " + pagenr + "</a></center>");			}			replyMSG.append("<br><table width=270>");				replyMSG.append("<tr><td width=80>Name:</td><td width=60>Level:</td><td width=40>Id:</td></tr>");				for (int i = SkillsStart; i < SkillsEnd; i++)		{			replyMSG.append("<tr><td width=80><a action=\"bypass -h admin_remove_skill "+skills[i].getId()+"\">"+skills[i].getName()+"</a></td><td width=60>"+skills[i].getLevel()+"</td><td width=40>"+skills[i].getId()+"</td></tr>");		}		replyMSG.append("</table>");		replyMSG.append("<br><center><table>");		replyMSG.append("Remove custom skill:");		replyMSG.append("<tr><td>Id: </td>");		replyMSG.append("<td><edit var=\"id_to_remove\" width=110></td></tr>");		replyMSG.append("</table></center>");				replyMSG.append("<center><button value=\"Remove skill\" action=\"bypass -h admin_remove_skill $id_to_remove\" width=110 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></center>");		replyMSG.append("<br><center><button value=\"Back\" action=\"bypass -h admin_current_player\" width=40 height=15></center>");		replyMSG.append("</body></html>");				adminReply.setHtml(replyMSG.toString());		activeChar.sendPacket(adminReply);	}		//ok	private void showSkillsPage(L2PcInstance activeChar)	{		L2Object target = activeChar.getTarget();		L2PcInstance player = null;		if (target instanceof L2PcInstance) {			player = (L2PcInstance)target;		} else {			SystemMessage sm = new SystemMessage(614);			sm.addString("Incorrect target.");			activeChar.sendPacket(sm);			return;		}				NpcHtmlMessage adminReply = new NpcHtmlMessage(5);				StringBuffer replyMSG = new StringBuffer("<html><body>");		replyMSG.append("<table width=260><tr>");		replyMSG.append("<td width=40><button value=\"Main\" action=\"bypass -h admin_admin\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>");		replyMSG.append("<td width=180><center>Character Selection Menu</center></td>");		replyMSG.append("<td width=40><button value=\"Back\" action=\"bypass -h admin_current_player\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>");		replyMSG.append("</tr></table>");		replyMSG.append("<br><br>");        replyMSG.append("<center>Editing <font color=\"LEVEL\">" + player.getName() + "</font></center>");		replyMSG.append("<br><table width=270><tr><td>Lv: " + player.getLevel() + " " + player.getTemplate().className + "</td></tr></table>");		replyMSG.append("<br><table width=270><tr><td>Note: Dont forget that modifying players skills can</td></tr>");		replyMSG.append("<tr><td>ruin the game...</td></tr></table>");		replyMSG.append("<br><center><table>");		replyMSG.append("<tr><td><button value=\"Add skills\" action=\"bypass -h admin_skill_list\" width=70 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>");		replyMSG.append("<td><button value=\"Get skills\" action=\"bypass -h admin_get_skills\" width=70 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>");					replyMSG.append("<tr><td><button value=\"Delete skills\" action=\"bypass -h admin_remove_skills 0\" width=70 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>");		replyMSG.append("<td><button value=\"Reset skills\" action=\"bypass -h admin_reset_skills\" width=70 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>");        replyMSG.append("<tr><td><button value=\"Give All Skills\" action=\"bypass -h admin_give_all_skills\" width=70 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>");		replyMSG.append("</table></center>");				replyMSG.append("</body></html>");				adminReply.setHtml(replyMSG.toString());		activeChar.sendPacket(adminReply);	}		private void adminGetSkills(L2PcInstance activeChar)	{		L2Object target = activeChar.getTarget();		L2PcInstance player = null;		if (target instanceof L2PcInstance) {			player = (L2PcInstance)target;		} else {						SystemMessage sm = new SystemMessage(614);			sm.addString("Incorrect target.");			activeChar.sendPacket(sm);			return;		}		if (player.getName().equals(activeChar.getName()))		{			SystemMessage sm = new SystemMessage(614);			sm.addString("There is no point in doing it on your character...");			player.sendPacket(sm);		}		else		{			L2Skill[] skills = player.getAllSkills();			adminSkills = activeChar.getAllSkills();			for (int i=0;i<adminSkills.length;i++)			{				activeChar.removeSkill(adminSkills[i]);			}			for (int i=0;i<skills.length;i++)			{				activeChar.addSkill(skills[i]);			}			SystemMessage smA = new SystemMessage(614);			smA.addString("You now have all the skills of  "+player.getName()+".");			activeChar.sendPacket(smA);		}		showSkillsPage(activeChar);	}		private void adminResetSkills(L2PcInstance activeChar)	{		L2Object target = activeChar.getTarget();		L2PcInstance player = null;		if (target instanceof L2PcInstance) {			player = (L2PcInstance)target;		} else {			SystemMessage sm = new SystemMessage(614);			sm.addString("Incorrect target.");			activeChar.sendPacket(sm);			return;		}		if (adminSkills==null)		{			SystemMessage smA = new SystemMessage(614);			smA.addString("You must first get the skills of someone to do this.");			activeChar.sendPacket(smA);		}		else		{			L2Skill[] skills = player.getAllSkills();			for (int i=0;i<skills.length;i++)			{				player.removeSkill(skills[i]);			}			for (int i=0;i<activeChar.getAllSkills().length;i++)			{				player.addSkill(activeChar.getAllSkills()[i]);			}			for (int i=0;i<skills.length;i++)			{				activeChar.removeSkill(skills[i]);			}			for (int i=0;i<adminSkills.length;i++)			{				activeChar.addSkill(adminSkills[i]);			}			SystemMessage sm = new SystemMessage(614);			sm.addString("[GM]"+activeChar.getName()+" has updated your skills.");			player.sendPacket(sm);			SystemMessage smA = new SystemMessage(614);			smA.addString("You now have all your skills back.");			activeChar.sendPacket(smA);			adminSkills=null;		}		showSkillsPage(activeChar);	}		private void adminAddSkill(L2PcInstance activeChar, String val)	{		L2Object target = activeChar.getTarget();		L2PcInstance player = null;		if (target instanceof L2PcInstance) {			player = (L2PcInstance)target;		} else {			SystemMessage sm = new SystemMessage(614);			sm.addString("Incorrect target.");			activeChar.sendPacket(sm);			return;		}		StringTokenizer st = new StringTokenizer(val);		if (st.countTokens()!=2)		{			showSkillsPage(activeChar);		}		else		{		String id = st.nextToken();		String level = st.nextToken();				int idval = Integer.parseInt(id);		int levelval = Integer.parseInt(level);				L2Skill skill = SkillTable.getInstance().getInfo(idval,levelval);						if (skill != null)		{			SystemMessage sm = new SystemMessage(614);			sm.addString("Admin gave you the skill "+skill.getName()+".");			player.sendPacket(sm);						player.addSkill(skill);						//Admin information				SystemMessage smA = new SystemMessage(614);			smA.addString("You gave the skill "+skill.getName()+" to "+player.getName()+".");						activeChar.sendPacket(smA);			if (Config.DEBUG)				_log.fine("[GM]"+activeChar.getName()+"gave the skill "+skill.getName()+						" to "+player.getName()+".");		}		else		{			SystemMessage smA = new SystemMessage(614);			smA.addString("Error: there is no such skill.");		}				showSkillsPage(activeChar); //Back to start		}	}		private void adminRemoveSkill(L2PcInstance activeChar, int idval)	{		L2Object target = activeChar.getTarget();		L2PcInstance player = null;		if (target instanceof L2PcInstance) {			player = (L2PcInstance)target;		} else {			SystemMessage sm = new SystemMessage(614);			sm.addString("Incorrect target.");			activeChar.sendPacket(sm);			return;		}						L2Skill skill = SkillTable.getInstance().getInfo(idval,player.getSkillLevel(idval));						if (skill != null)		{		SystemMessage sm = new SystemMessage(614);		sm.addString("Admin removed the skill "+skill.getName()+".");		player.sendPacket(sm);						player.removeSkill(skill);				//Admin information			SystemMessage smA = new SystemMessage(614);		smA.addString("You removed the skill "+skill.getName()+" from "+player.getName()+".");				activeChar.sendPacket(smA);		if (Config.DEBUG)			_log.fine("[GM]"+activeChar.getName()+"removed the skill "+skill.getName()+					" from "+player.getName()+".");		}		else		{			SystemMessage smA = new SystemMessage(614);			smA.addString("Error: there is no such skill.");		}		removeSkillsPage(activeChar, 0); //Back to start		}	public void showSkill(L2PcInstance activeChar, String val)	{				int skillid = Integer.parseInt(val);		L2Skill skill = SkillTable.getInstance().getInfo(skillid, 1);		if (skill != null)		{			if (skill.getTargetType() == L2Skill.SkillTargetType.TARGET_SELF)			{				activeChar.setTarget(activeChar);						MagicSkillUser msk = new MagicSkillUser(activeChar, skillid, 1, skill.getSkillTime() , skill.getReuseDelay());				activeChar.broadcastPacket(msk);				if (Config.DEBUG) _log.fine("showing self skill, id: "+skill.getId()+" named: "+skill.getName());			}			else if (skill.getTargetType() == L2Skill.SkillTargetType.TARGET_ONE)			{				if (Config.DEBUG) _log.fine("showing ATTACK skill, id: "+skill.getId()+" named: "+skill.getName());							}		}		else		{			if (Config.DEBUG) _log.fine("no such skill id: "+skillid);			ActionFailed af = new ActionFailed();			activeChar.broadcastPacket(af);		}	}}