Pet Core NPC Buffer?
Forum rules
READ NOW: L2j Forums Rules of Conduct
READ NOW: L2j Forums Rules of Conduct
- momo61
- Posts: 1648
- Joined: Fri Jun 06, 2008 2:05 pm
- Location: Europe
Pet Core NPC Buffer?
Hi guys,
I've been thinking of implementing a Pet buffing option on my core NPC buffer. Is that possible without modifying anything in the core ? Can I just change the HTML coding a bit ? Anyone here could tell me how to do that ?
thanks a lot,
momo61
I've been thinking of implementing a Pet buffing option on my core NPC buffer. Is that possible without modifying anything in the core ? Can I just change the HTML coding a bit ? Anyone here could tell me how to do that ?
thanks a lot,
momo61
- momo61
- Posts: 1648
- Joined: Fri Jun 06, 2008 2:05 pm
- Location: Europe
Re: Pet Core NPC Buffer?
anybody
? please

- Charus
- L2j Veteran
- Posts: 410
- Joined: Thu Feb 16, 2006 1:24 pm
Re: Pet Core NPC Buffer?
Core
DP
It isnt tested. Test it and give results.
Code: Select all
### Eclipse Workspace Patch 1.0#P L2jServerIndex: java/com/l2jserver/gameserver/model/actor/instance/L2NpcBufferInstance.java===================================================================--- java/com/l2jserver/gameserver/model/actor/instance/L2NpcBufferInstance.java (revision 3836)+++ java/com/l2jserver/gameserver/model/actor/instance/L2NpcBufferInstance.java (working copy)@@ -23,7 +23,9 @@ import com.l2jserver.gameserver.datatables.SkillTable; import com.l2jserver.gameserver.model.L2ItemInstance; import com.l2jserver.gameserver.model.L2Skill;+import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.L2Npc;+import com.l2jserver.gameserver.model.actor.L2Summon; import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.serverpackets.ActionFailed; import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;@@ -35,25 +37,27 @@ public class L2NpcBufferInstance extends L2Npc { static final Logger _log = Logger.getLogger(L2NpcBufferInstance.class.getName());- + private static TIntIntHashMap pageVal = new TIntIntHashMap();- ++ L2Character _target = null;+ public L2NpcBufferInstance(int objectId, L2NpcTemplate template) { super(objectId, template); }- + @Override public void showChatWindow(L2PcInstance playerInstance, int val) { if (playerInstance == null) return;- + String htmContent = HtmCache.getInstance().getHtm("data/html/mods/NpcBuffer.htm");- + if (val > 0) htmContent = HtmCache.getInstance().getHtm("data/html/mods/NpcBuffer-" + val + ".htm");- + if (htmContent != null) { NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(getObjectId());@@ -62,31 +66,46 @@ npcHtmlMessage.replace("%objectId%", String.valueOf(getObjectId())); playerInstance.sendPacket(npcHtmlMessage); }- + playerInstance.sendPacket(ActionFailed.STATIC_PACKET); }- + @Override public void onBypassFeedback(L2PcInstance player, String command) { // BypassValidation Exploit plug.- if (player == null || player.getLastFolkNPC() == null || player.getLastFolkNPC().getObjectId() != this.getObjectId())+ if (player == null || player.getLastFolkNPC() == null || player.getLastFolkNPC().getObjectId() != getObjectId()) return;- + int npcId = getNpcId();- + if (command.startsWith("Chat")) { int val = Integer.parseInt(command.substring(5));- + pageVal.put(player.getObjectId(), val);- + showChatWindow(player, val); }+ else if (command.startsWith("Target"))+ {+ String target = command.substring(7).trim();+ if (target.equalsIgnoreCase("Player"))+ _target = player;+ else if (target.equalsIgnoreCase("Pet"))+ {+ L2Summon pet = player.getPet();+ if (pet == null)+ player.sendPacket(new SystemMessage(SystemMessageId.PETS_ARE_NOT_AVAILABLE_AT_THIS_TIME));+ else+ _target = player.getPet();+ }+ showChatWindow(player, 0);+ } else if (command.startsWith("Buff")) { String[] buffGroupArray = command.substring(5).split(" ");- + for (String buffGroupList : buffGroupArray) { if (buffGroupList == null)@@ -94,56 +113,54 @@ _log.warning("NPC Buffer Warning: npcId = " + npcId + " has no buffGroup set in the bypass for the buff selected."); return; }- + int buffGroup = Integer.parseInt(buffGroupList);- + int[] npcBuffGroupInfo = NpcBufferTable.getInstance().getSkillInfo(npcId, buffGroup);- + if (npcBuffGroupInfo == null) { _log.warning("NPC Buffer Warning: npcId = " + npcId + " Location: " + getX() + ", " + getY() + ", " + getZ() + " Player: " + player.getName() + " has tried to use skill group (" + buffGroup + ") not assigned to the NPC Buffer!"); return; }- + int skillId = npcBuffGroupInfo[0]; int skillLevel = npcBuffGroupInfo[1]; int skillFeeId = npcBuffGroupInfo[2]; int skillFeeAmount = npcBuffGroupInfo[3];- + if (skillFeeId != 0) { L2ItemInstance itemInstance = player.getInventory().getItemByItemId(skillFeeId);- if (itemInstance == null || (!itemInstance.isStackable() && player.getInventory().getInventoryItemCount(skillFeeId, -1) < skillFeeAmount)) {- SystemMessage sm = new SystemMessage(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL);- player.sendPacket(sm);+ player.sendPacket(new SystemMessage(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL)); continue; }- + if (itemInstance.isStackable()) { if (!player.destroyItemByItemId("Npc Buffer", skillFeeId, skillFeeAmount, player.getTarget(), true)) {- SystemMessage sm = new SystemMessage(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL);- player.sendPacket(sm);+ player.sendPacket(new SystemMessage(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL)); continue; } } else { for (int i = 0; i < skillFeeAmount; ++i)- { player.destroyItemByItemId("Npc Buffer", skillFeeId, 1, player.getTarget(), true);- } } }- - L2Skill skill;- skill = SkillTable.getInstance().getInfo(skillId, skillLevel);- ++ L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel); if (skill != null)- skill.getEffects(player, player);+ {+ if (_target != null)+ skill.getEffects(player, _target);+ else+ player.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));+ } } showChatWindow(player, pageVal.get(player.getObjectId()));@@ -157,19 +174,14 @@ for (String healType : healArray) { if (healType.equalsIgnoreCase("HP"))- { player.setCurrentHp(player.getMaxHp());- } else if (healType.equalsIgnoreCase("MP"))- { player.setCurrentMp(player.getMaxMp());- } else if (healType.equalsIgnoreCase("CP"))- { player.setCurrentCp(player.getMaxCp());- } } }+ showChatWindow(player, 0); // 0 = main window } else if (command.startsWith("RemoveBuffs"))@@ -178,8 +190,6 @@ showChatWindow(player, 0); // 0 = main window } else- { super.onBypassFeedback(player, command);- } } }\ No newline at end of file
Code: Select all
### Eclipse Workspace Patch 1.0#P L2jDataIndex: data/html/mods/NpcBuffer.htm===================================================================--- data/html/mods/NpcBuffer.htm (revision 6906)+++ data/html/mods/NpcBuffer.htm (working copy)@@ -15,7 +15,9 @@ <button action="bypass -h npc_%objectId%_Chat 1" value="Dance" width=200 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br> <button action="bypass -h npc_%objectId%_Chat 2" value="Prophet" width=200 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br> <button action="bypass -h npc_%objectId%_Chat 3" value="Song" width=200 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>-<button action="bypass -h npc_%objectId%_Chat 4" value="Preset" width=200 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>+<button action="bypass -h npc_%objectId%_Chat 4" value="Preset" width=200 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br><br>+<button action="bypass -h npc_%objectId%_Target Player" value="Player" width=200 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>+<button action="bypass -h npc_%objectId%_Target Pet" value="Pet" width=200 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br> <img src="L2UI_CH3.herotower_deco" width=256 height=32><br> </center> </body>
It isnt tested. Test it and give results.
Last edited by Charus on Wed Jan 20, 2010 2:46 pm, edited 1 time in total.
- momo61
- Posts: 1648
- Joined: Fri Jun 06, 2008 2:05 pm
- Location: Europe
Re: Pet Core NPC Buffer?
I will test it tonight when I come home. I'd be glad if someone tested it with me. I'll give results as soon as i can.
- momo61
- Posts: 1648
- Joined: Fri Jun 06, 2008 2:05 pm
- Location: Europe
Re: Pet Core NPC Buffer?
charus ? this isnt compilable at all...
- Charus
- L2j Veteran
- Posts: 410
- Joined: Thu Feb 16, 2006 1:24 pm
Re: Pet Core NPC Buffer?
Try patch again. At least i dont see errors on code. Not sure if its working, but no errors at eclipse.
-
- Posts: 915
- Joined: Thu Sep 03, 2009 6:36 pm
- Location: Israel
- Contact:
Re: Pet Core NPC Buffer?
worksforme, thanks charus
- qwerty13
- Posts: 640
- Joined: Mon Feb 02, 2009 9:57 am
- Location: Europe
- Contact:
Re: Pet Core NPC Buffer?
try apply patch manually?
- janiii
- L2j Veteran
- Posts: 4269
- Joined: Wed May 28, 2008 3:15 pm
- Location: Slovakia
Re: Pet Core NPC Buffer?
delete the first 2 lines from the patch, same for dp patch:
Code: Select all
### Eclipse Workspace Patch 1.0#P L2jServer
DO NOT EVEN TRY TO MESS WITH ME!
forum flOOder dancing dEVILoper ♀
I don't give private support - PM will be ignored!
forum flOOder dancing dEVILoper ♀
I don't give private support - PM will be ignored!
- momo61
- Posts: 1648
- Joined: Fri Jun 06, 2008 2:05 pm
- Location: Europe
Re: Pet Core NPC Buffer?
that worked. report soon.
- momo61
- Posts: 1648
- Joined: Fri Jun 06, 2008 2:05 pm
- Location: Europe
Re: Pet Core NPC Buffer?
Okay here are my results:
If you press on the NPC Buffer and then choose buffs, the NPC buffer wont buff the player or the pet by default. It simply won't buff you until you pick: Player OR Pet.
my opinion: That's okay, but I personally think it should buff the player by default. Because, most players wont play summoner classes, and they will get annoyed to have to click on the Player button before they buff.
Also, there might be problems for people buffing in the olympiad. They might not recieve buffs if the NPC Buffer there doesnt have the "Player" option.
If you buff your pet with the NPC buffer, then you close the HTML window and you click again to get buffs for yourself, you must first choose "Player" to be able to buff, or else it will just buff your pet again. This is alright I guess
what do you guys think about this ? Could this get committed ?
If you press on the NPC Buffer and then choose buffs, the NPC buffer wont buff the player or the pet by default. It simply won't buff you until you pick: Player OR Pet.
my opinion: That's okay, but I personally think it should buff the player by default. Because, most players wont play summoner classes, and they will get annoyed to have to click on the Player button before they buff.
Also, there might be problems for people buffing in the olympiad. They might not recieve buffs if the NPC Buffer there doesnt have the "Player" option.
If you buff your pet with the NPC buffer, then you close the HTML window and you click again to get buffs for yourself, you must first choose "Player" to be able to buff, or else it will just buff your pet again. This is alright I guess

what do you guys think about this ? Could this get committed ?
-
- Posts: 51
- Joined: Sun Dec 06, 2009 10:28 pm
Re: Pet Core NPC Buffer?
I think it would be great if u setup two buffers, one with pet target and one with the player target... so the player dont got to switch the targets himself..
btw... does this also work for nightly pack?
yours
ADONES
btw... does this also work for nightly pack?
yours
ADONES
- Charus
- L2j Veteran
- Posts: 410
- Joined: Thu Feb 16, 2006 1:24 pm
Re: Pet Core NPC Buffer?
Code: Select all
Index: java/com/l2jserver/gameserver/model/actor/instance/L2NpcBufferInstance.java===================================================================--- java/com/l2jserver/gameserver/model/actor/instance/L2NpcBufferInstance.java (revision 3839)+++ java/com/l2jserver/gameserver/model/actor/instance/L2NpcBufferInstance.java (working copy)@@ -23,7 +23,9 @@ import com.l2jserver.gameserver.datatables.SkillTable; import com.l2jserver.gameserver.model.L2ItemInstance; import com.l2jserver.gameserver.model.L2Skill;+import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.L2Npc;+import com.l2jserver.gameserver.model.actor.L2Summon; import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.serverpackets.ActionFailed; import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;@@ -35,25 +37,27 @@ public class L2NpcBufferInstance extends L2Npc { static final Logger _log = Logger.getLogger(L2NpcBufferInstance.class.getName());- + private static TIntIntHashMap pageVal = new TIntIntHashMap();- ++ L2Character _target = null;+ public L2NpcBufferInstance(int objectId, L2NpcTemplate template) { super(objectId, template); }- + @Override public void showChatWindow(L2PcInstance playerInstance, int val) { if (playerInstance == null) return;- + String htmContent = HtmCache.getInstance().getHtm("data/html/mods/NpcBuffer.htm");- + if (val > 0) htmContent = HtmCache.getInstance().getHtm("data/html/mods/NpcBuffer-" + val + ".htm");- + if (htmContent != null) { NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(getObjectId());@@ -62,31 +66,46 @@ npcHtmlMessage.replace("%objectId%", String.valueOf(getObjectId())); playerInstance.sendPacket(npcHtmlMessage); }- + playerInstance.sendPacket(ActionFailed.STATIC_PACKET); }- + @Override public void onBypassFeedback(L2PcInstance player, String command) { // BypassValidation Exploit plug.- if (player == null || player.getLastFolkNPC() == null || player.getLastFolkNPC().getObjectId() != this.getObjectId())+ if (player == null || player.getLastFolkNPC() == null || player.getLastFolkNPC().getObjectId() != getObjectId()) return;- + int npcId = getNpcId();- + if (command.startsWith("Chat")) { int val = Integer.parseInt(command.substring(5));- + pageVal.put(player.getObjectId(), val);- + showChatWindow(player, val); }+ else if (command.startsWith("Target"))+ {+ String target = command.substring(7).trim();+ if (target.equalsIgnoreCase("Player"))+ _target = player;+ else if (target.equalsIgnoreCase("Pet"))+ {+ L2Summon pet = player.getPet();+ if (pet == null)+ player.sendPacket(new SystemMessage(SystemMessageId.PETS_ARE_NOT_AVAILABLE_AT_THIS_TIME));+ else+ _target = player.getPet();+ }+ showChatWindow(player, 0);+ } else if (command.startsWith("Buff")) { String[] buffGroupArray = command.substring(5).split(" ");- + for (String buffGroupList : buffGroupArray) { if (buffGroupList == null)@@ -94,56 +113,49 @@ _log.warning("NPC Buffer Warning: npcId = " + npcId + " has no buffGroup set in the bypass for the buff selected."); return; }- + int buffGroup = Integer.parseInt(buffGroupList);- + int[] npcBuffGroupInfo = NpcBufferTable.getInstance().getSkillInfo(npcId, buffGroup);- + if (npcBuffGroupInfo == null) { _log.warning("NPC Buffer Warning: npcId = " + npcId + " Location: " + getX() + ", " + getY() + ", " + getZ() + " Player: " + player.getName() + " has tried to use skill group (" + buffGroup + ") not assigned to the NPC Buffer!"); return; }- + int skillId = npcBuffGroupInfo[0]; int skillLevel = npcBuffGroupInfo[1]; int skillFeeId = npcBuffGroupInfo[2]; int skillFeeAmount = npcBuffGroupInfo[3];- + if (skillFeeId != 0) { L2ItemInstance itemInstance = player.getInventory().getItemByItemId(skillFeeId);- if (itemInstance == null || (!itemInstance.isStackable() && player.getInventory().getInventoryItemCount(skillFeeId, -1) < skillFeeAmount)) {- SystemMessage sm = new SystemMessage(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL);- player.sendPacket(sm);+ player.sendPacket(new SystemMessage(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL)); continue; }- + if (itemInstance.isStackable()) { if (!player.destroyItemByItemId("Npc Buffer", skillFeeId, skillFeeAmount, player.getTarget(), true)) {- SystemMessage sm = new SystemMessage(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL);- player.sendPacket(sm);+ player.sendPacket(new SystemMessage(SystemMessageId.THERE_ARE_NOT_ENOUGH_NECESSARY_ITEMS_TO_USE_THE_SKILL)); continue; } } else { for (int i = 0; i < skillFeeAmount; ++i)- { player.destroyItemByItemId("Npc Buffer", skillFeeId, 1, player.getTarget(), true);- } } }- - L2Skill skill;- skill = SkillTable.getInstance().getInfo(skillId, skillLevel);- ++ L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel); if (skill != null)- skill.getEffects(player, player);+ skill.getEffects(player, _target == null ? player : _target); } showChatWindow(player, pageVal.get(player.getObjectId()));@@ -157,19 +169,14 @@ for (String healType : healArray) { if (healType.equalsIgnoreCase("HP"))- { player.setCurrentHp(player.getMaxHp());- } else if (healType.equalsIgnoreCase("MP"))- { player.setCurrentMp(player.getMaxMp());- } else if (healType.equalsIgnoreCase("CP"))- { player.setCurrentCp(player.getMaxCp());- } } }+ showChatWindow(player, 0); // 0 = main window } else if (command.startsWith("RemoveBuffs"))@@ -178,8 +185,6 @@ showChatWindow(player, 0); // 0 = main window } else- { super.onBypassFeedback(player, command);- } } }\ No newline at end of file
- momo61
- Posts: 1648
- Joined: Fri Jun 06, 2008 2:05 pm
- Location: Europe
Re: Pet Core NPC Buffer?
will test.