ncsSpawN 45 Опубликовано 29 марта, 2016 (изменено) Итак как обещал скидываю баг среднего уровня.Работает вроде как на всех основах lucera 1.7 а также на euro-pvp.Суть бага.На многих серверах за взятие профы дается приз (адена, фа, или книги гигантов и т.д.).Задача.Будем брать:1. первую профу на 1 лвл2. вторую профу на 20 лвл3. третью профу на 40 лвлДействия:И так создаем к примеру светлого эльфа (мага) на евро пвп х1200После того как мы зашли в игру, видим что у нас уже 20 лвл.Пишем в чат:.classmaster 26нам даст первую профу Визарда, после пишем в чат.classmaster 27нам даст вторую профу СС'а, и это все на 20 лвл.Качаемся до 40 лвл и опять пишем в чат.classmaster 103и получаем третью профу на 40 лвл.Таким способом можно брать саб затем брать третью профу и удалять саб а затем по новой по кругу.Так можно бесконечно дюпать приз на серверах у которых стоит приз за взятие третей профы.В скором времени может ещё по интересней скину что-то.Багов очень куча)Специально для forummaxi.ruСпасибо!Как и обещал фикс.Добавлена проверка по лвл и для самого байпаса.Добавлена шифрация байпаса в самом html.Добавлен проверочный код при юзе байпаса или войс на выбор профы. package handlers.voice; import javolution.text.TextBuilder; import ru.catssoftware.Config; import ru.catssoftware.gameserver.communitybbs.CommunityBoard; import ru.catssoftware.gameserver.communitybbs.IBBSHandler; import ru.catssoftware.gameserver.datatables.CharTemplateTable; import ru.catssoftware.gameserver.datatables.ItemTable; import ru.catssoftware.gameserver.handler.IVoicedCommandHandler; import ru.catssoftware.gameserver.handler.VoicedCommandHandler; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.gameserver.model.base.ClassId; import ru.catssoftware.gameserver.model.olympiad.Olympiad; import ru.catssoftware.gameserver.network.SystemMessageId; import ru.catssoftware.gameserver.network.serverpackets.NpcHtmlMessage; import ru.catssoftware.gameserver.network.serverpackets.SystemMessage; import java.util.HashMap; import ru.catssoftware.tools.random.Rnd; public class ClassMaster implements IVoicedCommandHandler,IBBSHandler { private static final String NOT_ALLOWED = "<html><body><center><br><br><br><font color=\"006600\">Class Master Manager:</font></center><br><br><br><center>Not allowed now</center></body></html>"; private static final HashMap<L2PcInstance,Integer> codes = new HashMap<L2PcInstance,Integer>(); public ClassMaster() { VoicedCommandHandler.getInstance()._classMasterHandler = this; } @Override public String getDescription(String command) { return "Вызов диалога классмастера"; } @Override public String[] getVoicedCommandList() { return new String[] {"classmaster", "cm"}; } @Override public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target) { NpcHtmlMessage msg = new NpcHtmlMessage(activeChar.getObjectId()); msg.setHtml(process(activeChar, target,false)); activeChar.sendPacket(msg); return false; } public String process(L2PcInstance player, String args, boolean isBBS) { if (player._event!=null || Olympiad.getInstance().isRegistered(player) || Olympiad.getInstance().isRegisteredInComp(player)) { return NOT_ALLOWED; } String[] argums; try { argums = args.split("_"); } catch(Exception e) { argums = null; } if(argums.length != 2 || (argums[0]==null || argums[1]==null || argums[0].length()==0 || argums[1].length()==0)) { int code = 0; code = Rnd.get(1000000, 9999999); codes.put(player, code); TextBuilder sb = new TextBuilder(); sb.append("<html><body><center><br><br><br><font color=\"006600\">Class Master Manager:</font><br>"); ClassId classId = player.getClassId(); int level = player.getLevel(); int jobLevel = classId.level(); int newJobLevel = jobLevel + 1; if ((((level >= 20 && jobLevel == 0) || (level >= 40 && jobLevel == 1) || (level >= 76 && jobLevel == 2)) && Config.CLASS_MASTER_SETTINGS.isAllowed(newJobLevel))) { if (((level >= 20 && jobLevel == 0) || (level >= 40 && jobLevel == 1) || (level >= 76 && jobLevel == 2)) && Config.CLASS_MASTER_SETTINGS.isAllowed(newJobLevel)) { sb.append("Выберите профессию:<br>"); for (ClassId child : ClassId.values()) { if (child.childOf(classId) && child.level() == newJobLevel) sb.append("<br><a action=\"bypass -h " +(isBBS?"_bbschange_class ":"voice_classmaster ") + (child.getId()) +"_"+code+ "\"> " + CharTemplateTable.getClassNameById(child.getId()) + "</a>"); } if (Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel) != null && !Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).isEmpty()) { player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS); sb.append("<br><br>Необходимый итем:"); sb.append("<center><table width=270>"); for (Integer _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keySet()) { int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId); sb.append("<tr><td><font color=\"LEVEL\">" + _count + "</font> " + ItemTable.getInstance().getTemplate(_itemId).getName() + "</td></tr>"); } sb.append("</table></center>"); } } sb.append("<br>"); } else { switch (jobLevel) { case 0: if (Config.CLASS_MASTER_SETTINGS.isAllowed(1)) sb.append("Call me after <font color=\"LEVEL\">20</font> level.<br>"); else if (Config.CLASS_MASTER_SETTINGS.isAllowed(2)) sb.append("Call me after 1st class transfer.<br>"); else if (Config.CLASS_MASTER_SETTINGS.isAllowed(3)) sb.append("Call me after 2nd class transfer.<br>"); else sb.append("You can't change your profession.<br>"); break; case 1: if (Config.CLASS_MASTER_SETTINGS.isAllowed(2)) sb.append("Call me after <font color=\"LEVEL\">40</font> level.<br>"); else if (Config.CLASS_MASTER_SETTINGS.isAllowed(3)) sb.append("Call me after 2nd class transfer.<br>"); else sb.append("You can't change your profession.<br>"); break; case 2: if (Config.CLASS_MASTER_SETTINGS.isAllowed(3)) sb.append("Call me after <font color=\"LEVEL\">76</font> level.<br>"); else sb.append("You can't change your profession.<br>"); break; case 3: sb.append("You reach top class.<br>"); break; } sb.append("<br>"); } sb.append("</center></body></html>"); return sb.toString(); } else { int code = 0; if(argums.length != 2 || (argums[0]==null || argums[1]==null || argums[0].length()==0 || argums[1].length()==0)) { return NOT_ALLOWED; } int val = 0; int val2 = 0; try { val = Integer.parseInt(argums[0]); val2 = Integer.parseInt(argums[1]); } catch(NumberFormatException e) { return NOT_ALLOWED; } if(codes.containsKey(player)) { code = codes.get(player); } else { code = Rnd.get(1000000, 9999999); codes.put(player, code); } if(code != val2 || code == 0 || val2 == 0) { return NOT_ALLOWED; } ClassId classId = player.getClassId(); ClassId newClassId = ClassId.values()[val]; int level = player.getLevel(); int jobLevel = classId.level(); int newJobLevel = newClassId.level(); if (!Config.CLASS_MASTER_SETTINGS.isAllowed(newJobLevel)) return NOT_ALLOWED;; if (!newClassId.childOf(classId)) return NOT_ALLOWED;; if (newJobLevel != jobLevel + 1) return NOT_ALLOWED;; if (level < 20 && newJobLevel > 1) return NOT_ALLOWED;; if (level < 40 && newJobLevel > 2) return NOT_ALLOWED;; if (level < 76 && newJobLevel > 3) return NOT_ALLOWED;; // Weight/Inventory check if(!Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).isEmpty()) { if (player.getWeightPenalty() >= 3 || (player.getInventoryLimit() * 0.8 <= player.getInventory().getSize())) { player.sendPacket(new SystemMessage(SystemMessageId.INVENTORY_LESS_THAN_80_PERCENT)); return NOT_ALLOWED; } } if ((level < 20 && jobLevel == 0) || (level < 40 && jobLevel == 1) || (level < 76 && jobLevel == 2)) { return NOT_ALLOWED; } TextBuilder sbb = new TextBuilder(); sbb.append("<html><body><center><br><br><br><font color=\"006600\">Class Master Manager:</font><br>"); sbb.append("<br><br>Необходимый итем:"); sbb.append("<center><table width=270>"); for (Integer _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keySet()) { int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId); if (player.getInventory().getInventoryItemCount(_itemId, -1) < _count) { player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS); sbb.append("<tr><td><font color=\"LEVEL\">" + _count + "</font> " + ItemTable.getInstance().getTemplate(_itemId).getName() + "</td></tr>"); sbb.append("</table></center>"); sbb.append("<br>"); sbb.append("</center></body></html>"); return sbb.toString(); } } for (Integer _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keySet()) { int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId); player.destroyItemByItemId("ClassMaster", _itemId, _count, player, true); } for (Integer _itemId : Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).keySet()) { int _count = Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).get(_itemId); player.addItem("ClassMaster", _itemId, _count, player, true); } changeClass(player, val); player.rewardSkills(); if (newJobLevel == 3) player.sendPacket(SystemMessageId.THIRD_CLASS_TRANSFER); else player.sendPacket(SystemMessageId.CLASS_TRANSFER); TextBuilder sb = new TextBuilder(); sb.append("<html><body>"); sb.append("<br><br><center>"); sb.append("Поздравляю, Вы получили класс: <font color=\"LEVEL\">" + CharTemplateTable.getClassNameById(player.getClassId().getId()) + "</font>."); sb.append("</center></body></html>"); player.refreshOverloaded(); player.refreshExpertisePenalty(); player.broadcastFullInfo(); return sb.toString(); } } private void changeClass(L2PcInstance player, int val) { player.setClassId(val); if (player.isSubClassActive()) player.getSubClasses().get(player.getClassIndex()).setClassId(player.getActiveClass()); else player.setBaseClass(player.getActiveClass()); player.broadcastUserInfo(); player.broadcastClassIcon(); } @Override public String[] getCommands() { return new String [] {"change_class"}; } @Override public String handleCommand(L2PcInstance activeChar, String command, String args) { return process(activeChar,args,true); } public static void main(String [] args) { if(Config.SPAWN_CLASS_MASTER) { ClassMaster cm = new ClassMaster(); VoicedCommandHandler.getInstance().registerVoicedCommandHandler(cm); CommunityBoard.getInstance().registerBBSHandler(cm); } } } Изменено 9 июня, 2016 пользователем ncsSpawN 15 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pe6eHoK 23 Опубликовано 29 марта, 2016 Вот эту шляпу мне 1 парнишка зафиксил) вы от куда ваще это взяли ?) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Ziga 35 Опубликовано 29 марта, 2016 Вот эту шляпу мне 1 парнишка зафиксил) вы от куда ваще это взяли ?) от меня ) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MrDozoR 73 Опубликовано 29 марта, 2016 Вот эту шляпу мне 1 парнишка зафиксил) вы от куда ваще это взяли ?) не важно откуда он это взял.... узнал сам или же рассказали.... главное то что человек поделился со всеми этими данными, а дальше уже решайте сами что с этим делать - пользоваться самому либо же фиксить у себя.... Огромное спасибо ТСу за инфу! 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ncsSpawN 45 Опубликовано 29 марта, 2016 Вот эту шляпу мне 1 парнишка зафиксил) вы от куда ваще это взяли ?)Один из клиентов предоставил логи. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
L0rD1K 286 Опубликовано 29 марта, 2016 Спасибо) Сегодня попробую, аж интересно стало) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ncsSpawN 45 Опубликовано 29 марта, 2016 Спасибо) Сегодня попробую, аж интересно стало)Не за что. Позже скину фикс в этой теме) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
L0rD1K 286 Опубликовано 29 марта, 2016 Не за что. Позже скину фикс в этой теме) Скилы как я понял не даёт ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ncsSpawN 45 Опубликовано 29 марта, 2016 Скилы как я понял не даёт ?Если стоит автолеарнскил, то даются при взятии соответствующего лвл. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
wasterwood 278 Опубликовано 29 марта, 2016 На евро проверил, работает, только не дает итемы. походу их там нету Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
L0rD1K 286 Опубликовано 29 марта, 2016 Надо искать другой сервер для теста. т.к. на евро не даёт ничего) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
L0rD1K 286 Опубликовано 29 марта, 2016 (изменено) Надо попробовать емериал, они вроде на одной сборке Или на рейтах поменьше Изменено 29 марта, 2016 пользователем L0rD1K Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ncsSpawN 45 Опубликовано 29 марта, 2016 Надо искать другой сервер для теста. т.к. на евро не даёт ничего)Призы в основном делают на х100 серверах Не знаю что дают на euro-pvp x100 Мне там точно в лень качаться ) 1 профу можно взять и на 1 лвл вроде как, только нужна оплата 1000 аден Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
L0rD1K 286 Опубликовано 29 марта, 2016 Призы в основном делают на х100 серверах Не знаю что дают на euro-pvp x100 Мне там точно в лень качаться ) 1 профу можно взять и на 1 лвл вроде как, только нужна оплата 1000 аден я сейчас вот зашёл на их епохейдж, проверю) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
L0rD1K 286 Опубликовано 29 марта, 2016 не...не берёт 2 профу на 20 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ncsSpawN 45 Опубликовано 29 марта, 2016 не...не берёт 2 профу на 20а что пишет ? может недостаточно денег ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
L0rD1K 286 Опубликовано 29 марта, 2016 (изменено) а что пишет ? может недостаточно денег ? Not allowed now Да, походу не хватает, т.к. пишет в чате что недостаточно предметов Изменено 29 марта, 2016 пользователем L0rD1K Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ncsSpawN 45 Опубликовано 29 марта, 2016 Not allowed now Да, походу не хватает, т.к. пишет в чате что недостаточно предметов Ну вот)) если стандарт то скорее всего на второй профе нужно 10000 аден Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
L0rD1K 286 Опубликовано 29 марта, 2016 Ну вот)) если стандарт то скорее всего на второй профе нужно 10000 аден Cейчас клянчону у кого-то чирик)) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Lightning 177 Опубликовано 29 марта, 2016 Прощай один из самых легких багов (((( Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
L0rD1K 286 Опубликовано 29 марта, 2016 ахахах ещё короче знаете как я только что применил?)) сдал аку с 20лв ))) КЛ тут в шоке))))))) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
farozarava 14 Опубликовано 29 марта, 2016 ахахах ещё короче знаете как я только что применил?)) сдал аку с 20лв ))) КЛ тут в шоке))))))) можно зарабатывать:DD Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 29 марта, 2016 как такое в 2016 может работать? если в сборках л2ж тот же ла2бейс стоит проверка на лвл level >= 20 && jobLevel == 0 ) || (level >= 40 && jobLevel == 1 ) || (level >= 76 && jobLevel == 2 это вообще бред, команду либо специально такой сделали либо допустили ошибкувеселый баг на х100 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ncsSpawN 45 Опубликовано 29 марта, 2016 (изменено) как такое в 2016 может работать? если в сборках л2ж тот же ла2бейс стоит проверка на лвл level >= 20 && jobLevel == 0 ) || (level >= 40 && jobLevel == 1 ) || (level >= 76 && jobLevel == 2 это вообще бред, команду либо специально такой сделали либо допустили ошибку веселый баг на х100 стоит проверка на вывод html но не на байпас ) он же и войс И это не одни из багов которые работают по сей день в 2016 году ))) Меня уже не чего не удивляет если честно =) Изменено 29 марта, 2016 пользователем ncsSpawN 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
L0rD1K 286 Опубликовано 29 марта, 2016 как такое в 2016 может работать? если в сборках л2ж тот же ла2бейс стоит проверка на лвл level >= 20 && jobLevel == 0 ) || (level >= 40 && jobLevel == 1 ) || (level >= 76 && jobLevel == 2 это вообще бред, команду либо специально такой сделали либо допустили ошибку веселый баг на х100 На епохе вообще шикарно) Бабки платят за аку)) на каждого чара по 5мин)) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты