pvpgate 11 Опубликовано 10 марта, 2017 (изменено) Всем привет, не нашел ничего подходящего (если что тыкните в тему плз). Ищу CB (alt+b ) для хроник High Five, сборка lostworld (может под овер подойдет, не знаю). Пойдет любая, под себя переделаю, к сожалению опыта программирования на джаве не хватает что бы написать с нуля, но с чужой разберусь. Буду очень благодарен за любые примеры. Конкретно интересует бафер, шоп, телепорт Изменено 10 марта, 2017 пользователем pvpgate Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Drosel 3 Опубликовано 10 марта, 2017 Это какую же ты КБ хош накрапать, что тебе понадобился опыт с жабой??? Баф\шоп\телепорт HTML знание вроде как хватит... )))) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
mrDuck 5 Опубликовано 10 марта, 2017 Это какую же ты КБ хош накрапать, что тебе понадобился опыт с жабой??? Баф\шоп\телепорт HTML знание вроде как хватит... )))) а сервер как будет обрабатывать байпассы из html? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 10 марта, 2017 Любую можно скачать в шаре. Что сложного? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CalypsoToolz 451 Опубликовано 10 марта, 2017 Всем привет, не нашел ничего подходящего (если что тыкните в тему плз). Ищу CB (alt+b ) для хроник High Five, сборка lostworld (может под овер подойдет, не знаю). Пойдет любая, под себя переделаю, к сожалению опыта программирования на джаве не хватает что бы написать с нуля, но с чужой разберусь. Буду очень благодарен за любые примеры. Конкретно интересует бафер, шоп, телепорт Скачать шару L2CCCP или Open-Team и вытащить всё что нужно Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Drosel 3 Опубликовано 10 марта, 2017 а сервер как будет обрабатывать байпассы из html? А подвязать в html существующий в сборке байпасс без знания жабы никак???? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Виктор_Андрашко 0 Опубликовано 10 марта, 2017 Любую можно скачать в шаре. Что сложного? Сложность не в самом htm теле КБ. А в ее реализации. Чтоб работали мультиселлы и бафер. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Виктор_Андрашко 0 Опубликовано 10 марта, 2017 (изменено) package handler.bbs; import java.lang.reflect.Method;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.StringTokenizer;import org.apache.commons.lang3.tuple.Pair;import org.mmocore.commons.dbutils.DbUtils;import org.mmocore.gameserver.Config;import org.mmocore.gameserver.data.htm.HtmCache;import org.mmocore.gameserver.data.xml.holder.MultiSellHolder;import org.mmocore.gameserver.database.DatabaseFactory;import org.mmocore.gameserver.handler.bbs.BbsHandlerHolder;import org.mmocore.gameserver.handler.bypass.BypassHolder;import org.mmocore.gameserver.model.Player;import org.mmocore.gameserver.network.l2.s2c.ShowBoard;import org.mmocore.gameserver.tables.ClanTable;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class CommunityBoard extends ScriptBbsHandler{private static final Logger _log = LoggerFactory.getLogger(CommunityBoard.class);@@overridepublic String[] getBypassCommands(){return new String[] { "_bbshome", "_bbslink", "_bbsmultisell", "_bbspage", "_bbsscripts" };}@@overridepublic void onBypassCommand(Player player, String bypass){StringTokenizer st = new StringTokenizer(bypass, "_");String cmd = st.nextToken();String html = "";if("bbshome".equals(cmd)){StringTokenizer p = new StringTokenizer(Config.BBS_DEFAULT, "_");String dafault = p.nextToken();if(dafault.equals(cmd)){html = HtmCache.getInstance().getHtml("scripts/services/community/bbs_top.htm", player);int favCount = 0;Connection con = null;PreparedStatement statement = null;ResultSet rset = null;try{con = DatabaseFactory.getInstance().getConnection();statement = con.prepareStatement("SELECT count(*) as cnt FROM `bbs_favorites` WHERE `object_id` = ?");statement.setInt(1, player.getObjectId());rset = statement.executeQuery();if(rset.next())favCount = rset.getInt("cnt");}catch(Exception e){}finally{DbUtils.closeQuietly(con, statement, rset);}html = html.replace("", String.valueOf(favCount));html = html.replace("", String.valueOf(ClanTable.getInstance().getClans().length));html = html.replace("", String.valueOf(BbsHandlerHolder.getInstance().getIntProperty("col_count")));}else{onBypassCommand(player, Config.BBS_DEFAULT);return;}}else if("bbslink".equals(cmd))html = HtmCache.getInstance().getHtml("scripts/services/community/bbs_homepage.htm", player);else if(bypass.startsWith("_bbspage")){//Example: "bypass _bbspage:index".String[] b = bypass.split(":");String page = b[1];html = HtmCache.getInstance().getHtml("scripts/services/community/pages/" + page + ".htm", player);if (html == null)return;}else if(bypass.startsWith("_bbsmultisell")){//Example: "_bbsmultisell:10000;_bbspage:index" or "_bbsmultisell:10000;_bbshome" or "_bbsmultisell:10000"...StringTokenizer st2 = new StringTokenizer(bypass, ";");String[] mBypass = st2.nextToken().split(":");String pBypass = st2.hasMoreTokens() ? st2.nextToken() : null;if(pBypass != null)onBypassCommand(player, pBypass);int listId = Integer.parseInt(mBypass[1]);MultiSellHolder.getInstance().SeparateAndSend(listId, player, -1, 0);return;}else if(bypass.startsWith("_bbsscripts")){//Example: "_bbsscripts:events.GvG.GvG:addGroup;_bbspage:index" or "_bbsscripts:events.GvG.GvG:addGroup;_bbshome" or "_bbsscripts:events.GvG.GvG:addGroup".../*StringTokenizer st2 = new StringTokenizer(bypass, ";");String sBypass = st2.nextToken().substring(12);String pBypass = st2.hasMoreTokens() ? st2.nextToken() : null;if(pBypass != null)onBypassCommand(player, pBypass);String[] word = sBypass.split("\\s+");String[] args = sBypass.substring(word[0].length()).trim().split("\\s+");String[] path = word[0].split(":");if(path.length != 2)return;Scripts.getInstance().callScripts(player, path[0], path[1], word.length == 1 ? new Object[] {} : new Object[] { args });return;*/_log.error("Trying to call script bypass: " + bypass + " " + player);}else if(bypass.startsWith("_bbshtmbypass")){StringTokenizer st2 = new StringTokenizer(bypass, ";");String command = st2.nextToken().substring(14);String pBypass = st2.hasMoreTokens() ? st2.nextToken() : null;if(pBypass != null)onBypassCommand(player, pBypass);String word = command.split("\\s+")[0];Pair b = BypassHolder.getInstance().getBypass(word);if(b != null)try{b.getValue().invoke(b.getKey(), player, null, command.substring(word.length()).trim().split("\\s+"));}catch(Exception e){_log.error("Exception: " + e, e);}return;}ShowBoard.separateAndSend(html, player);}@@overridepublic void onWriteCommand(Player player, String bypass, String arg1, String arg2, String arg3, String arg4, String arg5){}} приписал в кб кнопочку <button value="TEST" action="bypass _bbsmultisell:5004;". Кнопка есть, мультиселл вызывает правильный, но при попытке купить - 0 реакции. Есть варианты? Изменено 10 марта, 2017 пользователем Виктор_Андрашко Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Drosel 3 Опубликовано 10 марта, 2017 package handler.bbs; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.StringTokenizer; import org.apache.commons.lang3.tuple.Pair; import org.mmocore.commons.dbutils.DbUtils; import org.mmocore.gameserver.Config; import org.mmocore.gameserver.data.htm.HtmCache; import org.mmocore.gameserver.data.xml.holder.MultiSellHolder; import org.mmocore.gameserver.database.DatabaseFactory; import org.mmocore.gameserver.handler.bbs.BbsHandlerHolder; import org.mmocore.gameserver.handler.bypass.BypassHolder; import org.mmocore.gameserver.model.Player; import org.mmocore.gameserver.network.l2.s2c.ShowBoard; import org.mmocore.gameserver.tables.ClanTable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CommunityBoard extends ScriptBbsHandler { private static final Logger _log = LoggerFactory.getLogger(CommunityBoard.class); @@override public String[] getBypassCommands() { return new String[] { "_bbshome", "_bbslink", "_bbsmultisell", "_bbspage", "_bbsscripts" }; } @@override public void onBypassCommand(Player player, String bypass) { StringTokenizer st = new StringTokenizer(bypass, "_"); String cmd = st.nextToken(); String html = ""; if("bbshome".equals(cmd)) { StringTokenizer p = new StringTokenizer(Config.BBS_DEFAULT, "_"); String dafault = p.nextToken(); if(dafault.equals(cmd)) { html = HtmCache.getInstance().getHtml("scripts/services/community/bbs_top.htm", player); int favCount = 0; Connection con = null; PreparedStatement statement = null; ResultSet rset = null; try { con = DatabaseFactory.getInstance().getConnection(); statement = con.prepareStatement("SELECT count(*) as cnt FROM `bbs_favorites` WHERE `object_id` = ?"); statement.setInt(1, player.getObjectId()); rset = statement.executeQuery(); if(rset.next()) favCount = rset.getInt("cnt"); } catch(Exception e) {} finally { DbUtils.closeQuietly(con, statement, rset); } html = html.replace("", String.valueOf(favCount)); html = html.replace("", String.valueOf(ClanTable.getInstance().getClans().length)); html = html.replace("", String.valueOf(BbsHandlerHolder.getInstance().getIntProperty("col_count"))); } else { onBypassCommand(player, Config.BBS_DEFAULT); return; } } else if("bbslink".equals(cmd)) html = HtmCache.getInstance().getHtml("scripts/services/community/bbs_homepage.htm", player); else if(bypass.startsWith("_bbspage")) { //Example: "bypass _bbspage:index". String[] b = bypass.split(":"); String page = b[1]; html = HtmCache.getInstance().getHtml("scripts/services/community/pages/" + page + ".htm", player); if (html == null) return; } else if(bypass.startsWith("_bbsmultisell")) { //Example: "_bbsmultisell:10000;_bbspage:index" or "_bbsmultisell:10000;_bbshome" or "_bbsmultisell:10000"... StringTokenizer st2 = new StringTokenizer(bypass, ";"); String[] mBypass = st2.nextToken().split(":"); String pBypass = st2.hasMoreTokens() ? st2.nextToken() : null; if(pBypass != null) onBypassCommand(player, pBypass); int listId = Integer.parseInt(mBypass[1]); MultiSellHolder.getInstance().SeparateAndSend(listId, player, -1, 0); return; } else if(bypass.startsWith("_bbsscripts")) { //Example: "_bbsscripts:events.GvG.GvG:addGroup;_bbspage:index" or "_bbsscripts:events.GvG.GvG:addGroup;_bbshome" or "_bbsscripts:events.GvG.GvG:addGroup"... /*StringTokenizer st2 = new StringTokenizer(bypass, ";"); String sBypass = st2.nextToken().substring(12); String pBypass = st2.hasMoreTokens() ? st2.nextToken() : null; if(pBypass != null) onBypassCommand(player, pBypass); String[] word = sBypass.split("\\s+"); String[] args = sBypass.substring(word[0].length()).trim().split("\\s+"); String[] path = word[0].split(":"); if(path.length != 2) return; Scripts.getInstance().callScripts(player, path[0], path[1], word.length == 1 ? new Object[] {} : new Object[] { args }); return;*/ _log.error("Trying to call script bypass: " + bypass + " " + player); } else if(bypass.startsWith("_bbshtmbypass")) { StringTokenizer st2 = new StringTokenizer(bypass, ";"); String command = st2.nextToken().substring(14); String pBypass = st2.hasMoreTokens() ? st2.nextToken() : null; if(pBypass != null) onBypassCommand(player, pBypass); String word = command.split("\\s+")[0]; Pair b = BypassHolder.getInstance().getBypass(word); if(b != null) try { b.getValue().invoke(b.getKey(), player, null, command.substring(word.length()).trim().split("\\s+")); } catch(Exception e) { _log.error("Exception: " + e, e); } return; } ShowBoard.separateAndSend(html, player); } @@override public void onWriteCommand(Player player, String bypass, String arg1, String arg2, String arg3, String arg4, String arg5) {} } приписал в кб кнопочку <button value="TEST" action="bypass _bbsmultisell:5004;". Кнопка есть, мультиселл вызывает правильный, но при попытке купить - 0 реакции. Есть варианты? В конфигах мультиселл добавил в разрешенные? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 10 марта, 2017 Сложность не в самом htm теле КБ. А в ее реализации. Чтоб работали мультиселлы и бафер. никакой сложности. 2 строчки буквально чтоб "работало" нужно написать и всё. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Виктор_Андрашко 0 Опубликовано 10 марта, 2017 В конфигах мультиселл добавил в разрешенные? в конфигах чего? Если КБ, то конфигов на него нет как таковых. Только включен ли, и стартовая страница. никакой сложности. 2 строчки буквально чтоб "работало" нужно написать и всё. Вот об этих двух строчках я и спрашивал. Был бы рабочий КБ выложен, можно было бы сравнить какие строчки и куда дописывать. Ну или если вы расскажете. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 10 марта, 2017 Вот как у меня реализован мультисел для КБ (помимо этого у меня еще куча функций, но думаю они Вам не нужны): if (command.startsWith("_bbsmultisell;")) { if (!canUse(activeChar, true, true, true, true, true, true, true, true, true, false, true, false, false)) { return false; } final StringTokenizer st = new StringTokenizer(command, ";"); st.nextToken(); int listId = 228; parseCommunityBoardCommand("_bbstop;" + st.nextToken(), activeChar); try { listId = Integer.parseInt(st.nextToken()); } catch (final Exception e) { activeChar.sendMessage("Ohh Cheat dont work? You have a problem now!"); Util.handleIllegalPlayerAction(activeChar, "Client " + client.toString() + " Failed: [Community Board] No found ID!", Config.DEFAULT_PUNISH); } MultisellData.getInstance().separateAndSend(listId, activeChar, null, false); } Если отсеять "защиту", то будет выглядеть так: if (command.startsWith("_bbsmultisell;")) { final StringTokenizer st = new StringTokenizer(command, ";"); st.nextToken(); int listId = Integer.parseInt(st.nextToken()); MultisellData.getInstance().separateAndSend(listId, activeChar, null, false); } Ничего сложного. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Виктор_Андрашко 0 Опубликовано 10 марта, 2017 (изменено) Вот как у меня реализован мультисел для КБ (помимо этого у меня еще куча функций, но думаю они Вам не нужны): if (command.startsWith("_bbsmultisell;")) { final StringTokenizer st = new StringTokenizer(command, ";"); st.nextToken(); int listId = Integer.parseInt(st.nextToken()); MultisellData.getInstance().separateAndSend(listId, activeChar, null, false); } Ничего сложного. Ну мне интересно ее как у вас реализован телепорт и бафер. Хотя по поводу первого у меня уже есть кое какие соображения. НО!!! else if(bypass.startsWith("_bbsmultisell")) { StringTokenizer st2 = new StringTokenizer(bypass, ";"); String[] mBypass = st2.nextToken().split(":"); String pBypass = st2.hasMoreTokens() ? st2.nextToken() : null; if(pBypass != null) onBypassCommand(player, pBypass); int listId = Integer.parseInt(mBypass[1]); MultiSellHolder.getInstance().SeparateAndSend(listId, player, -1, 0); return; } то у меня реализован. Выше я выкладывал кнопочку, которая вызывает мультиселл, только в нем купить ничего нельзя. Он открывается и только. А в реализации функций не так много различий. Мне просто интересно, почему у меня вначале сразу два оператора и if и else. Изменено 10 марта, 2017 пользователем Виктор_Андрашко Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 10 марта, 2017 (изменено) Ну мне интересно ее как у вас реализован телепорт и бафер. Хотя по поводу первого у меня уже есть кое какие соображения. НО!!! else if(bypass.startsWith("_bbsmultisell")) { StringTokenizer st2 = new StringTokenizer(bypass, ";"); String[] mBypass = st2.nextToken().split(":"); String pBypass = st2.hasMoreTokens() ? st2.nextToken() : null; if(pBypass != null) onBypassCommand(player, pBypass); int listId = Integer.parseInt(mBypass[1]); MultiSellHolder.getInstance().SeparateAndSend(listId, player, -1, 0); return; } то у меня реализован. Выше я выкладывал кнопочку, которая вызывает мультиселл, только в нем купить ничего нельзя. Он открывается и только. А в реализации функций не так много различий. Мне просто интересно, почему у меня вначале сразу два оператора и if и else. else if - скорей всего выше у Вас еще зарезервированные команды. Не покупается - предметы не выводятся или при нажатии кнопки "Купить" ничего не происходит? Если при нажатии кнопки ничего не происходит, то скорей всего стоит проверка на таргет NPC. Его нужно убрать, если у Вас реализована защита в самом мультиселе: <?xml version="1.0" encoding="UTF-8"?> <list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/multisell.xsd"> <npcs> <npc>31555</npc> <!-- Abercrombie --> </npcs> <item> <!-- Golden Ram Coin --> <ingredient count="1" id="7251" /> <!-- Booty - Gray Pouch --> <production count="1" id="7725" /> </item> <item> <!-- Golden Ram Coin --> <ingredient count="10" id="7251" /> <!-- Dimensional Diamond --> <production count="1" id="7562" /> </item> </list> Иначе прописывать список мультиселов, которые можно использовать без NPC. Баффер, Телепорт и т.п. реализованы в других фалах, но вызываются так же как и мультисел: if (command.startsWith("_bbs_buff")) { BuffBoard.getInstance().parsecmd(command, activeChar); } if (command.startsWith("_bbsteleport;")) { TeleportBoard.getInstance().parsecmd(command, activeChar); } if (command.startsWith("_bbsscript;")) { ScriptBoard.getInstance().parsecmd(command, activeChar); } if (command.startsWith("_bbsclassmaster;")) { ClassManagerBoard.getInstance().parsecmd(command, activeChar); } Изменено 10 марта, 2017 пользователем zGosu 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Виктор_Андрашко 0 Опубликовано 10 марта, 2017 else if - скорей всего выше у Вас еще зарезервированные команды. Не покупается - предметы не выводятся или при нажатии кнопки "Купить" ничего не происходит? Если при нажатии кнопки ничего не происходит, то скорей всего стоит проверка на таргет NPC. Его нужно убрать, если у Вас реализована защита в самом мультиселе: <?xml version="1.0" encoding="UTF-8"?> <list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/multisell.xsd"> <npcs> <npc>31555</npc> <!-- Abercrombie --> </npcs> <item> <!-- Golden Ram Coin --> <ingredient count="1" id="7251" /> <!-- Booty - Gray Pouch --> <production count="1" id="7725" /> </item> <item> <!-- Golden Ram Coin --> <ingredient count="10" id="7251" /> <!-- Dimensional Diamond --> <production count="1" id="7562" /> </item> </list> Иначе прописывать список мультиселов, которые можно использовать без NPC. Баффер, Телепорт и т.п. реализованы в других фалах, но вызываются так же как и мультисел: if (command.startsWith("_bbs_buff")) { BuffBoard.getInstance().parsecmd(command, activeChar); } if (command.startsWith("_bbsteleport;")) { TeleportBoard.getInstance().parsecmd(command, activeChar); } if (command.startsWith("_bbsscript;")) { ScriptBoard.getInstance().parsecmd(command, activeChar); } if (command.startsWith("_bbsclassmaster;")) { ClassManagerBoard.getInstance().parsecmd(command, activeChar); } Именно, что показывает предметы, но при нажатии купить - ничего. В самом коде мультиселла привязки по таргету нету, та и я пробовал левые самописные пихать. Результат всегда один. <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE list SYSTEM "multisell.dtd"> <!-- Trader Galladucci (Luxury Shop) Weapons --> <list> <config showall="true" notax="true" keepenchanted="false" /> <item> <production id="78" count="1"/> <ingredient id="57" count="6680500"/> </item> Если проверка таргета реализована не в мультиселле то где? Кстати самописные мультиселлы приписывал левым нпц, то все работало. Этот же мультиселл пишу в КБ - открывается но не продает. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 10 марта, 2017 (изменено) Именно, что показывает предметы, но при нажатии купить - ничего. В самом коде мультиселла привязки по таргету нету, та и я пробовал левые самописные пихать. Результат всегда один. <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE list SYSTEM "multisell.dtd"> <!-- Trader Galladucci (Luxury Shop) Weapons --> <list> <config showall="true" notax="true" keepenchanted="false" /> <item> <production id="78" count="1"/> <ingredient id="57" count="6680500"/> </item> Если проверка таргета реализована не в мультиселле то где? Кстати самописные мультиселлы приписывал левым нпц, то все работало. Этот же мультиселл пишу в КБ - открывается но не продает. В MultisellData.java проверку на таргет NPC снимать надо, а не в xml файле. У тебя этот файл называется MultiSellHolder Изменено 10 марта, 2017 пользователем zGosu 2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Виктор_Андрашко 0 Опубликовано 10 марта, 2017 В MultisellData.java проверку на таргет NPC снимать надо, а не в xml файле. У тебя этот файл называется MultiSellHolder Это сурсы я так понял? Ладно тыкаю спасибку, много помог, хороший человек. Пойду посплю и насвежак попытаюсь найти как отвязать и скомпилю по новой. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Khrome 276 Опубликовано 11 марта, 2017 (изменено) Ну мне интересно ее как у вас реализован телепорт и бафер. Хотя по поводу первого у меня уже есть кое какие соображения. НО!!! else if(bypass.startsWith("_bbsmultisell")) { StringTokenizer st2 = new StringTokenizer(bypass, ";"); String[] mBypass = st2.nextToken().split(":"); String pBypass = st2.hasMoreTokens() ? st2.nextToken() : null; if(pBypass != null) onBypassCommand(player, pBypass); int listId = Integer.parseInt(mBypass[1]); MultiSellHolder.getInstance().SeparateAndSend(listId, player, -1, 0); return; } то у меня реализован. Выше я выкладывал кнопочку, которая вызывает мультиселл, только в нем купить ничего нельзя. Он открывается и только. А в реализации функций не так много различий. Мне просто интересно, почему у меня вначале сразу два оператора и if и else.посмотри парсер мультиселлов и все сразу станет понятно где включать надо, в самом мульте bbsallow="true" вроде, найдешь вообщем. Пожалуйста Изменено 11 марта, 2017 пользователем Khrome Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты