WhiteFace Posted June 30, 2009 Posted June 30, 2009 Hello all,Here little addition to the multisell security. Each multisell template now have automatically generated during bypass parsing list of valid NPC IDs. Later in MultisellChoose packet current target checked and NPC ID searched in list. Also checking interaction distance. NPC list cleared on //reload multisell, so if you change html and remove multisell somewhere - do //reload multisell after //reload html. No more "mammons everywhere and everytime", no more "by anything you want everywhere from GM Shop" (if exist on server). DP Part: Index: data/scripts/custom/5001_NewbieCoupons/__init__.py =================================================================== --- data/scripts/custom/5001_NewbieCoupons/__init__.py (revision 6340) +++ data/scripts/custom/5001_NewbieCoupons/__init__.py (working copy) @@ -68,12 +68,12 @@ return "30598-6.htm" #you're not eligible to get a coupon (level caps, pkkills or didnt change class yet) elif event == "newbie_show_weapon" : if 6 <= level <= 39 and not pkkills and occupation_level == 0 : - L2Multisell.getInstance().separateAndSend(WEAPON_MULTISELL, player, False, 0.0); + L2Multisell.getInstance().separateAndSend(WEAPON_MULTISELL, player, npc.getNpcId(), False, 0.0); else : return "30598-7.htm" #you're not eligible to use warehouse elif event == "newbie_show_armor" : if 6 <= level <= 39 and not pkkills and occupation_level > 0 : - L2Multisell.getInstance().separateAndSend(ACCESORIES_MULTISELL, player, False, 0.0); + L2Multisell.getInstance().separateAndSend(ACCESORIES_MULTISELL, player, npc.getNpcId(), False, 0.0); else : return "30598-8.htm" #you're not eligible to use warehouse the code: Index: java/net/sf/l2j/gameserver/network/clientpackets/MultiSellChoose.java =================================================================== --- java/net/sf/l2j/gameserver/network/clientpackets/MultiSellChoose.java (revision 3236) +++ java/net/sf/l2j/gameserver/network/clientpackets/MultiSellChoose.java (working copy) @@ -23,6 +23,7 @@ import net.sf.l2j.gameserver.model.L2Augmentation; import net.sf.l2j.gameserver.model.L2ItemInstance; import net.sf.l2j.gameserver.model.L2Multisell; +import net.sf.l2j.gameserver.model.L2Object; import net.sf.l2j.gameserver.model.L2Multisell.MultiSellEntry; import net.sf.l2j.gameserver.model.L2Multisell.MultiSellIngredient; import net.sf.l2j.gameserver.model.L2Multisell.MultiSellListContainer; @@ -39,6 +40,8 @@ import net.sf.l2j.gameserver.templates.item.L2Item; import net.sf.l2j.gameserver.templates.item.L2Weapon; +import static net.sf.l2j.gameserver.model.actor.L2Npc.INTERACTION_DISTANCE; + public class MultiSellChoose extends L2GameClientPacket { private static final String _C__A7_MULTISELLCHOOSE = "[C] A7 MultiSellChoose"; @@ -109,7 +112,14 @@ MultiSellListContainer list = L2Multisell.getInstance().getList(_listId); if (list == null) return; - + + L2Object target = player.getTarget(); + if (!player.isGM() && (target == null + || !(target instanceof L2Npc) + || !list.checkNpcId(((L2Npc)target).getNpcId()) + || !player.isInsideRadius(target, INTERACTION_DISTANCE, true, false))) + return; + for (MultiSellEntry entry : list.getEntries()) { if (entry.getEntryId() == _entryId) Index: java/net/sf/l2j/gameserver/model/actor/instance/L2BlacksmithInstance.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/instance/L2BlacksmithInstance.java (revision 3236) +++ java/net/sf/l2j/gameserver/model/actor/instance/L2BlacksmithInstance.java (working copy) @@ -34,7 +34,7 @@ if (command.startsWith("multisell")) { int listId = Integer.parseInt(command.substring(9).trim()); - L2Multisell.getInstance().separateAndSend(listId, player, false, getCastle().getTaxRate()); + L2Multisell.getInstance().separateAndSend(listId, player, getNpcId(), false, getCastle().getTaxRate()); } super.onBypassFeedback(player,command); } Index: java/net/sf/l2j/gameserver/model/actor/instance/L2MerchantInstance.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/instance/L2MerchantInstance.java (revision 3236) +++ java/net/sf/l2j/gameserver/model/actor/instance/L2MerchantInstance.java (working copy) @@ -183,14 +183,14 @@ if (st.countTokens() < 1) return; int val = Integer.parseInt(st.nextToken()); - L2Multisell.getInstance().separateAndSend(val, player, false, getCastle().getTaxRate()); + L2Multisell.getInstance().separateAndSend(val, player, getNpcId(), false, getCastle().getTaxRate()); } else if (actualCommand.equalsIgnoreCase("Exc_Multisell")) { if (st.countTokens() < 1) return; int val = Integer.parseInt(st.nextToken()); - L2Multisell.getInstance().separateAndSend(val, player, true, getCastle().getTaxRate()); + L2Multisell.getInstance().separateAndSend(val, player, getNpcId(), true, getCastle().getTaxRate()); } else { Index: java/net/sf/l2j/gameserver/model/actor/instance/L2OlympiadManagerInstance.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/instance/L2OlympiadManagerInstance.java (revision 3236) +++ java/net/sf/l2j/gameserver/model/actor/instance/L2OlympiadManagerInstance.java (working copy) @@ -137,10 +137,10 @@ } break; case 7: - L2Multisell.getInstance().separateAndSend(102, player, false, getCastle().getTaxRate()); + L2Multisell.getInstance().separateAndSend(102, player, getNpcId(), false, getCastle().getTaxRate()); break; case 9: - L2Multisell.getInstance().separateAndSend(103, player, false, getCastle().getTaxRate()); + L2Multisell.getInstance().separateAndSend(103, player, getNpcId(), false, getCastle().getTaxRate()); break; case 8: int point = Olympiad.getInstance().getNoblePoints(player.getObjectId()); Index: java/net/sf/l2j/gameserver/model/actor/L2Npc.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/L2Npc.java (revision 3236) +++ java/net/sf/l2j/gameserver/model/actor/L2Npc.java (working copy) @@ -1206,11 +1206,13 @@ } else if (command.startsWith("multisell")) { - L2Multisell.getInstance().separateAndSend(Integer.parseInt(command.substring(9).trim()), player, false, getCastle().getTaxRate()); + int listId = Integer.parseInt(command.substring(9).trim()); + L2Multisell.getInstance().separateAndSend(listId, player, getNpcId(), false, getCastle().getTaxRate()); } else if (command.startsWith("exc_multisell")) { - L2Multisell.getInstance().separateAndSend(Integer.parseInt(command.substring(13).trim()), player, true, getCastle().getTaxRate()); + int listId = Integer.parseInt(command.substring(13).trim()); + L2Multisell.getInstance().separateAndSend(listId, player, getNpcId(), true, getCastle().getTaxRate()); } else if (command.startsWith("Augment")) { Index: java/net/sf/l2j/gameserver/model/L2Multisell.java =================================================================== --- java/net/sf/l2j/gameserver/model/L2Multisell.java (revision 3236) +++ java/net/sf/l2j/gameserver/model/L2Multisell.java (working copy) @@ -101,7 +101,7 @@ * * @see net.sf.l2j.gameserver.serverpackets.ServerBasePacket#runImpl() */ - private MultiSellListContainer generateMultiSell(int listId, boolean inventoryOnly, L2PcInstance player, double taxRate) + private MultiSellListContainer generateMultiSell(int listId, boolean inventoryOnly, L2PcInstance player, int npcId, double taxRate) { MultiSellListContainer listTemplate = L2Multisell.getInstance().getList(listId); MultiSellListContainer list = new MultiSellListContainer(); @@ -109,6 +109,8 @@ return list; list = L2Multisell.getInstance().new MultiSellListContainer(); list.setListId(listId); + if (npcId != 0 && !listTemplate.checkNpcId(npcId)) + listTemplate.addNpcId(npcId); if (inventoryOnly) { @@ -261,9 +263,9 @@ return newEntry; } - public void separateAndSend(int listId, L2PcInstance player, boolean inventoryOnly, double taxRate) + public void separateAndSend(int listId, L2PcInstance player, int npcId, boolean inventoryOnly, double taxRate) { - MultiSellListContainer list = generateMultiSell(listId, inventoryOnly, player, taxRate); + MultiSellListContainer list = generateMultiSell(listId, inventoryOnly, player, npcId, taxRate); MultiSellListContainer temp = new MultiSellListContainer(); int page = 1; @@ -551,6 +553,7 @@ private int _listId; private boolean _applyTaxes = false; private boolean _maintainEnchantment = false; + private List<Integer> _npcIds; List<MultiSellEntry> _entriesC; @@ -577,6 +580,11 @@ _maintainEnchantment = maintainEnchantment; } + public void addNpcId(int objId) + { + _npcIds.add(objId); + } + /** * @return Returns the listId. */ @@ -595,6 +603,21 @@ return _maintainEnchantment; } + public boolean checkNpcId(int npcId) + { + if (_npcIds == null) + { + synchronized (this) + { + if (_npcIds == null) + _npcIds = new FastList<Integer>(); + } + return false; + } + + return _npcIds.contains(npcId); + } + public void addEntry(MultiSellEntry e) { _entriesC.add(e); credits:_DS_ Enjoy IF YOU FIND ANY ERRORS PLEASE POST HERE THANKS Quote
xardas Posted July 9, 2009 Posted July 9, 2009 man pls ..... from all the people here no one told me where the .... can i find those java files .... where i have to add all those things ... someone told me that in the core files ... where si that :| .... i have eclips to edit java files but , again , where are those files???????? ..pls help me i se here only java share. Quote
Łighto™ Posted July 9, 2009 Posted July 9, 2009 Check this guide ~> http://www.maxcheaters.com/forum/index.php?topic=44325.0 It might help you. All you need to do is learn how to compile and some basics about java and then you will be able to apply the patches to your core About the last one check here ~> http://www.l2jserver.com/wiki/How_to_Apply_a_Patch Quote
CrazyDeagle Posted February 15, 2010 Posted February 15, 2010 Nice code thanks you More protection :D i like it Quote
Αντώνης Posted April 26, 2010 Posted April 26, 2010 Useful. Keep it up man, keep going on java shares :P VERY USEFUL 2010 shares about multisell ... Quote
+cs.tribal Posted April 27, 2010 Posted April 27, 2010 Good! I'll use it to be safe! I hope i wont have any problems! Quote
wakowako Posted April 27, 2010 Posted April 27, 2010 Lol this is already implemented in l2j.. stop spaming and check the thread date. Quote
PwnedTheGod™ Posted April 27, 2010 Posted April 27, 2010 Isn't possible with Flood Protector???I think it's easier than do all this... Anyways good job,keep sharin'!!! Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.