Help With Some Custom Code?
Posted: Sun Sep 06, 2009 3:17 am
If you want to receive support we need this info to help you properly.
» Find Revision
L2J Revision Number:
L2JDP Revision Number:
Well I installed a buffer item onto my server from a custom mod posted. At the moment the item can only buff yourself (the player who has the flute can only buff himself). I wish to make it so that the player can buff any player as long as he has him targeted. Here is my code as is:
Im Not sure how i would go about doing this What I have atm is this
However that code doesnt work and still only buffs the player with the flute even if you have another player targeted. Ive been trying to get this working for a few weeks so it would be very much appreciated if you could help me - Thanks! 
» Find Revision
L2J Revision Number:
L2JDP Revision Number:
Well I installed a buffer item onto my server from a custom mod posted. At the moment the item can only buff yourself (the player who has the flute can only buff himself). I wish to make it so that the player can buff any player as long as he has him targeted. Here is my code as is:
Code: Select all
package com.l2emu.gameserver.handler.buffercommandhandlers; import java.util.StringTokenizer; import javolution.text.TextBuilder;import javolution.util.FastList;import javolution.util.FastMap;import com.l2emu.Config;import com.l2emu.gameserver.datatables.BufferSkillsTable;import com.l2emu.gameserver.datatables.CharSchemesTable;import com.l2emu.gameserver.datatables.SkillTable;import com.l2emu.gameserver.handler.IBufferCommandHandler;import com.l2emu.gameserver.model.actor.L2Character;import com.l2emu.gameserver.model.L2Skill;import com.l2emu.gameserver.model.olympiad.Olympiad;import com.l2emu.gameserver.model.actor.instance.L2PcInstance;import com.l2emu.gameserver.network.serverpackets.NpcHtmlMessage; /** * <b><font size=3>NPC Buffer instance handler</font></b><br> * <br> * This class contains some methods that can be sorted by different types and functions:<br><br> * * - Methods that overrides to superclass' (L2FolkInstance): * <li>onAction * <li>onBypassFeedback * <li>onActionShift * <br><br> * * - Methods to show html windows: * <li>showGiveBuffsWindow * <li>showManageSchemeWindow * <li>showEditSchemeWindow * <br></br> * * - Methods to get and build info (Strings, future html content) from character schemes, state, etc. * <li>getPlayerSchemeListFrame: Returns a table with player's schemes names * <li>getGroupSkillListFrame: Returns a table with skills available in the skill_group * <li>getPlayerSkillListFrame: Returns a table with skills already in player's scheme (scheme_key) * * <br> * <br> * @author House */ public class BufferCommands implements IBufferCommandHandler { private static final String PARENT_DIR = "data/html/mods/buffer/"; private static final String[] BUFFER_COMMANDS = { "item_menu", "item_support", "item_givebuffs", "item_editscheme", "item_skill", "item_skillselect", "item_skillunselect", "item_manageschemes", "item_createscheme", "item_deletescheme", "item_clearscheme", "item_heal", "item_debuff" }; public boolean useBufferCommand(String command, L2PcInstance player) { // initial menu StringTokenizer st = new StringTokenizer(command, " "); st.nextToken(); if (command.startsWith("item_menu")) { NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(PARENT_DIR+"menu.htm"); sendHtmlMessage(player, html); } // handles giving effects {support player, support pet, givebuffs} else if (command.startsWith("item_support")) { String targettype = st.nextToken(); showGiveBuffsWindow(player, targettype); } else if (command.startsWith("item_givebuffs")) { if(player.isInOlympiadMode() || Olympiad.getInstance().isRegistered(player)){ TextBuilder tb = new TextBuilder(); tb.append("<html><title>Buffer</title>"); tb.append("<body> Buffing at Olympiad is not allowed! </body></html>"); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setHtml(tb.toString()); sendHtmlMessage(player, html); } else { String targettype = st.nextToken(); String scheme_key = st.nextToken(); int cost = Integer.parseInt(st.nextToken()); if (cost == 0 || cost <= player.getInventory().getAdena()) { L2Character target = player; if (targettype.equalsIgnoreCase("pet")) target = player.getPet(); //NEEDS HANDELING if (targettype.equalsIgnoreCase("playertarget")) target = player.getActingPlayer(); if (target != null) { for (L2Skill sk : CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key)) { sk.getEffects(player, target); } player.reduceAdena("NPC Buffer", cost, null, true); } else { player.sendMessage("Incorrect Pet"); // go to main menu NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(PARENT_DIR+"menu.htm"); sendHtmlMessage(player, html); } } else { player.sendMessage("Not enough adena"); showGiveBuffsWindow(player, targettype); } } } // handles edit schemes {skillselect, skillunselect} else if (command.startsWith("item_editscheme")) { String skill_group = st.nextToken(); String scheme_key = null; try { scheme_key = st.nextToken(); } catch (Exception e) { // ignored... } showEditSchemeWindow(player, skill_group, scheme_key); } else if (command.startsWith("item_skill")) { String skill_group = st.nextToken(); String scheme_key = st.nextToken(); int skill_id = Integer.parseInt(st.nextToken()); int level = BufferSkillsTable.getInstance().getSkillLevelById(skill_id); if (command.startsWith("item_skillselect") && !scheme_key.equalsIgnoreCase("unselected")) { if (CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).size()< Config.NPCBUFFER_MAX_SKILLS) CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).add(SkillTable.getInstance().getInfo(skill_id, level)); else player.sendMessage("This scheme has reached maximun amount of buffs."); } else if (command.startsWith("item_skillunselect")) { CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).remove(SkillTable.getInstance().getInfo(skill_id, level)); } showEditSchemeWindow(player, skill_group, scheme_key); } // manage schemes {create, delete, clear} else if (command.startsWith("item_manageschemes")) { showManageSchemeWindow(player); } // handles creation else if (command.startsWith("item_createscheme")) { String name = null; String name2 = null; try { name = st.nextToken(); try { name2 = st.nextToken(); } catch (Exception e){} } catch (Exception e){} if (name == null || name.length() > 14 || name2 != null) { player.sendMessage("Error: Scheme's name must contain up to 14 chars without any spaces"); showManageSchemeWindow(player); } else if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) != null && CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).size() == Config.NPCBUFFER_MAX_SCHEMES) { player.sendMessage("Error: Maximun schemes amount reached, please delete one before creating a new one"); showManageSchemeWindow(player); } else if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) != null && CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).containsKey(name)) { player.sendMessage("Error: Duplicate entry. Please use another name"); showManageSchemeWindow(player); } else { if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) == null) CharSchemesTable.getInstance().getSchemesTable().put(player.getObjectId(), new FastMap<String, FastList<L2Skill>>(Config.NPCBUFFER_MAX_SCHEMES+1)); CharSchemesTable.getInstance().setScheme(player.getObjectId(), name.trim(), new FastList<L2Skill>(Config.NPCBUFFER_MAX_SKILLS+1)); showManageSchemeWindow(player); } } // handles deletion else if (command.startsWith("item_deletescheme")) { String name = st.nextToken(); if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) != null && CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).containsKey(name)) { CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).remove(name); showManageSchemeWindow(player); } } // handles cleanning else if (command.startsWith("item_clearscheme")) { String name = st.nextToken(); if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) != null && CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).containsKey(name)) { CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).get(name).clear(); showManageSchemeWindow(player); } } else if (command.startsWith("item_heal")) { player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp()); player.setCurrentCp(player.getMaxCp()); showMenu(player); } else if (command.startsWith("item_debuff")) { player.stopAllEffects(); showMenu(player); } return true; } private void sendHtmlMessage(L2PcInstance player, NpcHtmlMessage html) { player.sendPacket(html); } /** * Sends an html packet to player with Give Buffs menu info for player and pet, * depending on targettype parameter {player, pet} * * @param player * @param targettype */ private void showGiveBuffsWindow(L2PcInstance player, String targettype) { TextBuilder tb = new TextBuilder(); tb.append("<html><title>LII Kingdom</title>"); tb.append("<body>"); tb.append("<table width=230 align=center valign=top>"); tb.append("<tr>"); tb.append("<td align=left><font color=\"a9df94\">Magic Flute: Buff Menu</font></td>"); tb.append("</tr>"); tb.append("</table>"); tb.append("<img src=\"L2UI_CH3.ChatWnd.Chatting_system\" width=\"275\" height=\"3\"><br><body>"); tb.append("<body> Here are your defined schemes, just click on one to receive its effects<br>"); FastMap<String, FastList<L2Skill>> map = CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()); if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) == null || CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).isEmpty()) tb.append("You have not defined any valid scheme, please go to Manage scheme and create at least one."); else { int cost; tb.append("<table>"); for (FastMap.Entry<String, FastList<L2Skill>> e = map.head(), end = map.tail(); (e = e.getNext()) != end;) { cost = getFee(e.getValue()); tb.append("<tr><td width=\"90\"><a action=\"bypass -h item_givebuffs "+targettype+" "+e.getKey()+" "+String.valueOf(cost)+"\">"+e.getKey()+"</a></td><td>Fee: "+String.valueOf(cost)+"</td></tr>"); } tb.append("</table>"); } tb.append("<br><br><a action=\"bypass -h item_menu\">Back</a>"); tb.append("</body></html>"); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setHtml(tb.toString()); sendHtmlMessage(player, html); } /** * Sends an html packet to player with Manage scheme menu info. This allows player * to create/delete/clear schemes * * @param player */ private void showManageSchemeWindow(L2PcInstance player) { TextBuilder tb = new TextBuilder(); tb.append("<html><title>LII Kingdom</title>"); tb.append("<body><table width=230 align=center valign=top>"); tb.append("<tr><td align=left><font color=a9df94>Magic Flute: Manage Schemes</font></td></tr></table>"); tb.append("<img src=L2UI_CH3.ChatWnd.Chatting_system width=275 height=3><br>"); tb.append("<body><br>"); if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) == null || CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).isEmpty()) { tb.append("<font color=\"LEVEL\">You have not created a scheme. Before you can buff yourself you must first create a scheme.</font><br>"); } else { tb.append("Here is a list of your schemes. To delete one just click on drop button. To create, fill name box and press create. " +"Each scheme must have different name. Name must have up to 14 chars. Spaces (\" \") are not allowed. DO NOT click on Create until you have filled quick box<br>"); tb.append("<table>"); for (FastMap.Entry<String, FastList<L2Skill>> e = CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).head(), end = CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).tail(); (e = e.getNext()) != end;) { tb.append("<tr><td width=\"140\">"+e.getKey()+" ("+String.valueOf(CharSchemesTable.getInstance().getScheme(player.getObjectId(), e.getKey()).size())+" skill(s))</td>"); tb.append("<td width=\"75\"><button value=\"Clear\" action=\"bypass -h item_clearscheme "+e.getKey()+"\" width=75 height=24 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"); tb.append("<td width=\"75\"><button value=\"Drop\" action=\"bypass -h item_deletescheme "+e.getKey()+"\" width=75 height=24 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"); } } tb.append("<br><table width=240>"); tb.append("<tr><td><edit var=\"name\" width=120 height=15></td><td><button value=\"Create\" action=\"bypass -h item_createscheme $name\" width=75 height=24 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"); tb.append("</table>"); tb.append("<br><font color=\"LEVEL\">Max schemes per player: "+String.valueOf(Config.NPCBUFFER_MAX_SCHEMES)+"</font>"); tb.append("<br><br>"); tb.append("<button action=\"bypass -h item_menu\" value=\"Back\"width=75 height=24 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"); tb.append("</body></html>"); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setHtml(tb.toString()); sendHtmlMessage(player, html); } /** * This sends an html packet to player with Edit Scheme Menu info. This allows player to edit * each created scheme (add/delete skills) * * @param player * @param skill_group * @param scheme_key */ private void showEditSchemeWindow(L2PcInstance player, String skill_group, String scheme_key) { NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(PARENT_DIR+"schememenu.htm"); html.replace("%typesframe%", getTypesFrame(scheme_key)); if (skill_group.equalsIgnoreCase("unselected")) { html.replace("%schemelistframe%", getPlayerSchemeListFrame(player, skill_group, scheme_key)); html.replace("%skilllistframe%", getGroupSkillListFrame(player, null, null)); html.replace("%myschemeframe%", getPlayerSkillListFrame(player, null, null)); } else { html.replace("%schemelistframe%", getPlayerSchemeListFrame(player, skill_group, scheme_key)); html.replace("%skilllistframe%", getGroupSkillListFrame(player, skill_group, scheme_key)); html.replace("%myschemeframe%", getPlayerSkillListFrame(player, skill_group, scheme_key)); } sendHtmlMessage(player, html); } private void showMenu(L2PcInstance player) { NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(PARENT_DIR+"menu.htm"); sendHtmlMessage(player, html); } /** * Returns a table with info about player's scheme list.<br> * If player scheme list is null, it returns a warning message */ private String getPlayerSchemeListFrame(L2PcInstance player, String skill_group, String scheme_key) { if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) == null || CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).isEmpty()) return "Please create at least one scheme"; else { if (skill_group == null) skill_group = "def"; if (scheme_key == null) scheme_key = "def"; TextBuilder tb = new TextBuilder(); tb.append("<table>"); int count = 0; for (FastMap.Entry<String, FastList<L2Skill>> e = CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).head(), end = CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).tail(); (e = e.getNext()) != end;) { if (count == 0) tb.append("<tr>"); tb.append("<td width=\"90\"><a action=\"bypass -h item_editscheme "+skill_group+" "+ e.getKey()+"\">"+e.getKey()+"</a></td>"); if (count == 3) { tb.append("</tr>"); count = 0; } count++; } if (!tb.toString().endsWith("</tr>")) tb.append("</tr>"); tb.append("</table>"); return tb.toString(); } } /** * * @param player * @param skill_group * @param scheme_key * @return a table with info about skills stored in each skill_group */ private String getGroupSkillListFrame(L2PcInstance player, String skill_group, String scheme_key) { if (skill_group == null || skill_group == "unselected") return " Please, select a valid group of skills"; else if (scheme_key == null || scheme_key == "unselected") return " Please, select a valid scheme"; TextBuilder tb = new TextBuilder(); tb.append("<table>"); int count = 0; for (L2Skill sk : BufferSkillsTable.getInstance().getSkillsByType(skill_group)) { if (CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key) != null && !CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).isEmpty() && CharSchemesTable.getInstance().getSchemeContainsSkill(player.getObjectId(),scheme_key, sk.getId())) { continue; } if (count == 0) tb.append("<tr>"); tb.append("<td width=\"100\"><a action=\"bypass -h item_skillselect "+skill_group+" "+scheme_key+" "+String.valueOf(sk.getId())+"\">"+sk.getName()+" ("+String.valueOf(sk.getLevel())+")</a></td>"); if (count == 3) { tb.append("</tr>"); count = -1; } count++; } if (!tb.toString().endsWith("</tr>")) tb.append("</tr>"); tb.append("</table>"); return tb.toString(); } /** * * @param player * @param skill_group * @param scheme_key * @return a table with info about selected skills */ private String getPlayerSkillListFrame(L2PcInstance player, String skill_group, String scheme_key) { if (skill_group == null || skill_group=="unselected") return "<br>Please, select a valid group of skills"; else if (scheme_key == null || scheme_key=="unselected") return "<br>Please, select a valid scheme"; if (CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key) == null) return "Please choose your Scheme"; if (CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).isEmpty()) return "Empty Scheme"; TextBuilder tb = new TextBuilder(); tb.append("Scheme: "+scheme_key+"<br>"); tb.append("<table>"); int count = 0; for (L2Skill sk : CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key)) { if (count == 0) tb.append("<tr>"); tb.append("<td><a action=\"bypass -h item_skillunselect "+skill_group+" "+scheme_key+" "+String.valueOf(sk.getId())+"\">"+sk.getName()+"</a></td>"); count++; if (count == 3) { tb.append("</tr>"); count = 0; } } if (!tb.toString().endsWith("<tr>")) tb.append("<tr>"); tb.append("</table>"); return tb.toString(); } /** * * @param scheme_key * @return an string with skill_groups table. */ private String getTypesFrame(String scheme_key) { TextBuilder tb = new TextBuilder(); tb.append("<table>"); int count = 0; if (scheme_key == null) scheme_key = "unselected"; for (String s : BufferSkillsTable.getInstance().getSkillsTypeList()) { if (count == 0) tb.append("<tr>"); tb.append("<td width=\"90\"><a action=\"bypass -h item_editscheme "+s+" "+scheme_key+"\">"+s+"</a></td>"); if (count == 2) { tb.append("</tr>"); count = -1; } count++; } if (!tb.toString().endsWith("</tr>")) tb.append("</tr>"); tb.append("</table>"); return tb.toString(); } /** * * @param list * @return fee for all skills contained in list. */ private int getFee(FastList<L2Skill> list) { int fee = 0; if (Config.NPCBUFFER_STATIC_BUFF_COST >= 0) return (list.size()* Config.NPCBUFFER_STATIC_BUFF_COST); else { for (L2Skill sk : list) { fee += BufferSkillsTable.getInstance().getSkillFee(sk.getId()); } return fee; } } /** * @see net.sf.l2j.gameserver.handler.IBufferCommandHandler#getBufferCommandList() */ public String[] getBufferCommandList() { return BUFFER_COMMANDS; }}
Code: Select all
//NEEDS HANDELING if (targettype.equalsIgnoreCase("playertarget")) target = player.getActingPlayer();
