Jump to content
Sign in to follow this  
pvpgate

Community Board (alt+b) High Five

Recommended Posts

Всем привет, не нашел ничего подходящего (если что тыкните в тему плз). Ищу CB (alt+b ) для хроник High Five, сборка lostworld (может под овер подойдет, не знаю). Пойдет любая, под себя переделаю, к сожалению опыта программирования на джаве не хватает что бы написать с нуля, но с чужой разберусь. Буду очень благодарен за любые примеры.

Конкретно интересует бафер, шоп, телепорт

Edited by pvpgate

Share this post


Link to post
Share on other sites

Это какую же ты КБ хош накрапать, что тебе понадобился опыт с жабой??? Баф\шоп\телепорт  HTML знание вроде как хватит...  ))))

Share this post


Link to post
Share on other sites

Это какую же ты КБ хош накрапать, что тебе понадобился опыт с жабой??? Баф\шоп\телепорт  HTML знание вроде как хватит...  ))))

а сервер как будет обрабатывать байпассы из html?

Share this post


Link to post
Share on other sites

Любую можно скачать в шаре. Что сложного? 

Share this post


Link to post
Share on other sites

Всем привет, не нашел ничего подходящего (если что тыкните в тему плз). Ищу CB (alt+b ) для хроник High Five, сборка lostworld (может под овер подойдет, не знаю). Пойдет любая, под себя переделаю, к сожалению опыта программирования на джаве не хватает что бы написать с нуля, но с чужой разберусь. Буду очень благодарен за любые примеры.

Конкретно интересует бафер, шоп, телепорт

Скачать шару L2CCCP или Open-Team и вытащить всё что нужно

Share this post


Link to post
Share on other sites

а сервер как будет обрабатывать байпассы из html?

А подвязать в html существующий в сборке байпасс без знания жабы никак???? 

Share this post


Link to post
Share on other sites

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 реакции. 

Есть варианты?

Edited by Виктор_Андрашко

Share this post


Link to post
Share on other sites

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 реакции. 

Есть варианты?

В конфигах мультиселл добавил в разрешенные? 

Share this post


Link to post
Share on other sites

Сложность не в самом htm теле КБ. А в ее реализации. Чтоб работали мультиселлы и бафер.

никакой сложности. 2 строчки буквально чтоб "работало" нужно написать и всё.

Share this post


Link to post
Share on other sites

В конфигах мультиселл добавил в разрешенные? 

в конфигах чего? Если КБ, то конфигов на него нет как таковых. Только включен ли, и стартовая страница.

 

никакой сложности. 2 строчки буквально чтоб "работало" нужно написать и всё.

Вот об этих двух строчках я и спрашивал. Был бы рабочий КБ выложен, можно было бы сравнить какие строчки и куда дописывать. Ну или если вы расскажете.

Share this post


Link to post
Share on other sites

Вот как у меня реализован мультисел для КБ (помимо этого у меня еще куча функций, но думаю они Вам не нужны):

		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);
		}

Ничего сложного. 

  • Upvote 1

Share this post


Link to post
Share on other sites

Вот как у меня реализован мультисел для КБ (помимо этого у меня еще куча функций, но думаю они Вам не нужны):

		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.

Edited by Виктор_Андрашко

Share this post


Link to post
Share on other sites

Ну мне интересно ее как у вас реализован телепорт и бафер. Хотя по поводу первого у меня уже есть кое какие соображения.

НО!!!

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);
		}
Edited by zGosu
  • Upvote 1

Share this post


Link to post
Share on other sites

 

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>

 

 

Если проверка таргета реализована не в мультиселле то где? Кстати самописные мультиселлы приписывал левым нпц, то все работало. Этот же мультиселл пишу в КБ - открывается но не продает.

Share this post


Link to post
Share on other sites

Именно, что показывает предметы, но при нажатии купить - ничего.

В самом коде мультиселла привязки по таргету нету, та и я пробовал левые самописные пихать. Результат всегда один.

<?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

Edited by zGosu
  • Upvote 2

Share this post


Link to post
Share on other sites

В MultisellData.java проверку на таргет NPC снимать надо, а не в xml файле. У тебя этот файл называется MultiSellHolder

Это сурсы я так понял? Ладно тыкаю спасибку, много помог, хороший человек. Пойду посплю и насвежак попытаюсь найти как отвязать и скомпилю по новой.

Share this post


Link to post
Share on other sites

Ну мне интересно ее как у вас реализован телепорт и бафер. Хотя по поводу первого у меня уже есть кое какие соображения.

НО!!!

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" вроде, найдешь вообщем. Пожалуйста
Edited by Khrome

Share this post


Link to post
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...