» Find Revision
L2J Revision Number:3349
L2JDP Revision Number:6455
Ok Well I need help with my item buffer. I found a patch on the old forum: http://www.l2jserver.com/old-forum/thre ... adid=33319
So i applied it and it works had to fix a few problems but nothing major, anyway I wanna make a command in the buffer where if the targettype is target the players target if it is an l2pcinstance will be buffed.
Here is the Buffcommands.java
Code: Select all
package handlers.buffercommandhandlers; import java.util.StringTokenizer; import javolution.text.TextBuilder;import javolution.util.FastList;import javolution.util.FastMap;import net.sf.l2j.Config;import net.sf.l2j.gameserver.datatables.BufferSkillsTable;import net.sf.l2j.gameserver.datatables.CharSchemesTable;import net.sf.l2j.gameserver.datatables.SkillTable;import net.sf.l2j.gameserver.handler.IBufferCommandHandler;import net.sf.l2j.gameserver.model.L2Skill.SkillTargetType;import net.sf.l2j.gameserver.model.actor.L2Character;import net.sf.l2j.gameserver.model.L2Skill;import net.sf.l2j.gameserver.model.olympiad.Olympiad;import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;import net.sf.l2j.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(); if (targettype.equalsIgnoreCase("player")) target = player.getTarget(player); 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
L2Character target = player; if (targettype.equalsIgnoreCase("pet")) target = player.getPet(); if (targettype.equalsIgnoreCase("player")) target = player.getTarget(player);
Code: Select all
Loading Server Scripts----------1. ERROR in C:\L2J\SERVER\gameserver\data\scripts\handlers\buffercommandhandlers\BufferCommands.java (at line 108) target = player.getTarget(); ^^^^^^^^^^^^^^^^^^Type mismatch: cannot convert from L2Object to L2Character----------1 problem (1 error)Type mismatch: cannot convert from net.sf.l2j.gameserver.model.L2Object to net.sf.l2j.gameserver.model.actor.L2CharacterFailed executing script: C:\L2J\SERVER\gameserver\data\scripts\handlers\MasterHandler.java. See MasterHandler.java.error.log for details.
Code: Select all
Error on: C:\L2J\SERVER\gameserver\data\scripts\handlers\MasterHandler.java.error.logLine: -1 - Column: -1 compilation failed
Anyway Ive talked to a few people about it and they have all been really helpful, but everything they have told me to try hasn't worked. If someone could please show me how accomplish buffing a players party members through the target type command that would be excellent.
Thanks,
DLV123