[HELP] Item Buffer Buff Target?

Support for the latest build of L2J Server, get help here with installations, upgrades, problems.
Do not post bugs reports here, use viewforum.php?f=77 instead.
There is no support for other server builds than the official provided by l2jserver.com
Forum rules
READ NOW: L2j Forums Rules of Conduct
Post Reply
User avatar
DLV123
Posts: 57
Joined: Thu Jul 26, 2007 7:44 pm

[HELP] Item Buffer Buff Target?

Post by DLV123 »

If you want to receive support we need this info to help you properly.
» 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;    }}
Here is where id decides the target type:

Code: Select all

L2Character target = player;				if (targettype.equalsIgnoreCase("pet"))					target = player.getPet(); 				if (targettype.equalsIgnoreCase("player"))					target = player.getTarget(player);
Problem is when i use the targettype player i get an error on gameserver load that says:

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&#058; C:\L2J\SERVER\gameserver\data\scripts\handlers\MasterHandler.java. See MasterHandler.java.error.log for details. 
So i look in the log and it says:

Code: Select all

Error on: C:\L2J\SERVER\gameserver\data\scripts\handlers\MasterHandler.java.error.logLine: -1 - Column: -1 compilation failed
Which doesn't really help but i figured someone would ask to see it, so i just decided to post it.

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
User avatar
DLV123
Posts: 57
Joined: Thu Jul 26, 2007 7:44 pm

Re: [HELP] Item Buffer Buff Target?

Post by DLV123 »

bump... Really need help with this thanks
Post Reply