Styx Posted October 29, 2014 Posted October 29, 2014 (edited) Hello guys . I want to do this in in my Buffer npc who know how? Default : <a action="bypass -h npc_%objectId%_getbuff 1204 130"> To work like This : <a action="bypass -h npc_%objectId%_getbuff 1204 130;1003 130;1004 130"> if (actualCommand.equalsIgnoreCase("getbuff")) { if (buffid != 0 && !player.isDead()) { SkillTable.getInstance().getInfo(buffid, bufflevel).getEffects(this, player); broadcastPacket(new MagicSkillUse(this, player, buffid, bufflevel, 500, 0)); showChatWindow(player); } } I try some methods but i failed ... :| Project aCis. Edited October 29, 2014 by Styx
0 vampir Posted October 29, 2014 Posted October 29, 2014 I think it should be something like that: @Override public void onBypassFeedback(L2PcInstance player, String command) { StringTokenizer st = new StringTokenizer(command, " "); String actualCommand = st.nextToken(); if (actualCommand.equalsIgnoreCase("getbuff")) { String[] buffsArray = command.substring(actualCommand.length).trim().split(";"); for(String buffString : buffsArray) { String[] idLevelString = buffString.split(" "); int buffid = Integer.parseInt(idLevelString[0]); int bufflevel = idLevelString.length > 1 ? Integer.parseInt(idLevelString[1]) : 1; if (buffid != 0 && !player.isDead()) { SkillTable.getInstance().getInfo(buffid, bufflevel).getEffects(this, player); broadcastPacket(new MagicSkillUse(this, player, buffid, bufflevel, 500, 0)); } } showChatWindow(player); } else if (actualCommand.equalsIgnoreCase("restore")) { if (!player.isDead()) { player.setCurrentHp(player.getMaxHp()); broadcastPacket(new MagicSkillUse(this, player, 1258, 4, 500, 0)); showChatWindow(player); } } else if (actualCommand.equalsIgnoreCase("cancel")) { if (!player.isDead()) { player.stopAllEffects(); broadcastPacket(new MagicSkillUse(this, player, 1056, 12, 500, 0)); showChatWindow(player); } } else super.onBypassFeedback(player, command); }
0 vampir Posted October 29, 2014 Posted October 29, 2014 Hi Could you show me whats before the code you have pasted? I would like to see how buffid and bufflevel is taken from String, so i can find out best changes in code without guessing :)
0 Styx Posted October 29, 2014 Author Posted October 29, 2014 (edited) Hi Could you show me whats before the code you have pasted? I would like to see how buffid and bufflevel is taken from String, so i can find out best changes in code without guessing :) Thanks for help. /* * 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.model.actor.instance; import java.util.StringTokenizer; import net.sf.l2j.gameserver.ai.CtrlIntention; import net.sf.l2j.gameserver.datatables.SkillTable; import net.sf.l2j.gameserver.model.actor.L2Npc; import net.sf.l2j.gameserver.network.serverpackets.ActionFailed; import net.sf.l2j.gameserver.network.serverpackets.MoveToPawn; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse; import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate; public final class L2BufferInstance extends L2NpcInstance { public L2BufferInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public void onAction(L2PcInstance player) { // Set the target of the L2PcInstance player if (player.getTarget() != this) player.setTarget(this); else { // Check if the player is attackable (without a forced attack) and isn't dead if (isAutoAttackable(player) && !isAlikeDead()) { // Check the height difference, this max heigth difference might need some tweaking if (Math.abs(player.getZ() - getZ()) < 400) { // Set the L2PcInstance Intention to ATTACK player.getAI().setIntention(CtrlIntention.ATTACK, this); } else { // Send ActionFailed (target is out of attack range) to the L2PcInstance player player.sendPacket(ActionFailed.STATIC_PACKET); } } else if (!isAutoAttackable(player)) { // Calculate the distance between the L2PcInstance and the L2NpcInstance if (!canInteract(player)) { // Notify the L2PcInstance AI with INTERACT player.getAI().setIntention(CtrlIntention.INTERACT, this); } else { // Rotate the player to face the instance player.sendPacket(new MoveToPawn(player, this, L2Npc.INTERACTION_DISTANCE)); // Send ActionFailed to the player in order to avoid he stucks player.sendPacket(ActionFailed.STATIC_PACKET); // Send the freaking chat window showChatWindow(player); } } // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet player.sendPacket(ActionFailed.STATIC_PACKET); } } @Override public void onBypassFeedback(L2PcInstance player, String command) { StringTokenizer st = new StringTokenizer(command, " "); String actualCommand = st.nextToken(); int buffid = 0, bufflevel = 1; if (st.countTokens() == 2) { buffid = Integer.valueOf(st.nextToken()); bufflevel = Integer.valueOf(st.nextToken()); } else if (st.countTokens() == 1) buffid = Integer.valueOf(st.nextToken()); if (actualCommand.equalsIgnoreCase("getbuff")) { if (buffid != 0 && !player.isDead()) { SkillTable.getInstance().getInfo(buffid, bufflevel).getEffects(this, player); broadcastPacket(new MagicSkillUse(this, player, buffid, bufflevel, 500, 0)); showChatWindow(player); } } else if (actualCommand.equalsIgnoreCase("restore")) { if (!player.isDead()) { player.setCurrentHp(player.getMaxHp()); broadcastPacket(new MagicSkillUse(this, player, 1258, 4, 500, 0)); showChatWindow(player); } } else if (actualCommand.equalsIgnoreCase("cancel")) { if (!player.isDead()) { player.stopAllEffects(); broadcastPacket(new MagicSkillUse(this, player, 1056, 12, 500, 0)); showChatWindow(player); } } else super.onBypassFeedback(player, command); } @Override public void showChatWindow(L2PcInstance player) { // Send a Server->Client NpcHtmlMessage containing the text of the L2Npc to the L2PcInstance NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile("data/html/gold/buffer.htm"); html.replace("%objectId%", getObjectId()); player.sendPacket(html); // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet player.sendPacket(ActionFailed.STATIC_PACKET); } } Edited October 29, 2014 by Styx
0 Styx Posted October 29, 2014 Author Posted October 29, 2014 I think it should be something like that: @Override public void onBypassFeedback(L2PcInstance player, String command) { StringTokenizer st = new StringTokenizer(command, " "); String actualCommand = st.nextToken(); if (actualCommand.equalsIgnoreCase("getbuff")) { String[] buffsArray = command.substring(actualCommand.length).trim().split(";"); for(String buffString : buffsArray) { String[] idLevelString = buffString.split(" "); int buffid = Integer.parseInt(idLevelString[0]); int bufflevel = idLevelString.length > 1 ? Integer.parseInt(idLevelString[1]) : 1; if (buffid != 0 && !player.isDead()) { SkillTable.getInstance().getInfo(buffid, bufflevel).getEffects(this, player); broadcastPacket(new MagicSkillUse(this, player, buffid, bufflevel, 500, 0)); } } showChatWindow(player); } else if (actualCommand.equalsIgnoreCase("restore")) { if (!player.isDead()) { player.setCurrentHp(player.getMaxHp()); broadcastPacket(new MagicSkillUse(this, player, 1258, 4, 500, 0)); showChatWindow(player); } } else if (actualCommand.equalsIgnoreCase("cancel")) { if (!player.isDead()) { player.stopAllEffects(); broadcastPacket(new MagicSkillUse(this, player, 1056, 12, 500, 0)); showChatWindow(player); } } else super.onBypassFeedback(player, command); } I will check it now thanks for your time..
Question
Styx
Hello guys .
I want to do this in in my Buffer npc who know how?
Default :
<a action="bypass -h npc_%objectId%_getbuff 1204 130">
To work like This :
<a action="bypass -h npc_%objectId%_getbuff 1204 130;1003 130;1004 130">
I try some methods but i failed ... :|
Project aCis.
Edited by Styx5 answers to this question
Recommended Posts