Сообщений: 1,759
Тем: 13
Зарегистрирован: May 2011
Репутация:
3,205
зачем писать целый класс, если можно обойтись парой строк кода в RequestBypassToServer?
Сообщений: 3,967
Тем: 90
Зарегистрирован: Nov 2010
Репутация:
15,337
linliss Написал:зачем писать целый класс, если можно обойтись парой строк кода в RequestBypassToServer? За тем, что порядок в больших проектах прежде всего!
Сообщений: 31
Тем: 3
Зарегистрирован: Sep 2011
Репутация:
0
10-10-2011, 10:16 AM
(Сообщение последний раз редактировалось: 10-10-2011, 10:49 AM Askord.)
Старенькая тема, ну да ладно.
Хочу прикрутить хендлер к EmuRT, сам хендлер стащил с ла2вт...
Весь код
Код: package handlers.bypasshandlers;
import com.l2dc.gameserver.handler.IBypassHandler;
import com.l2dc.gameserver.model.L2Multisell;
import com.l2dc.gameserver.model.actor.L2Character;
import com.l2dc.gameserver.model.actor.L2Npc;
import com.l2dc.gameserver.model.actor.instance.L2PcInstance;
public class Multisell implements IBypassHandler
{
private static final String[] COMMANDS =
{
"multisell",
"exc_multisell"
};
public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
{
if (!(target instanceof L2Npc))
return false;
if (!activeChar.validateBypass(command))
return false;
try
{
activeChar.setIsUsingAIOItemMultisell(false);
int listId;
if (command.startsWith(COMMANDS[0])) // multisell
{
listId = Integer.parseInt(command.substring(9).trim());
L2Multisell.getInstance().separateAndSend(listId, activeChar, ((L2Npc)target).getNpcId(), false, ((L2Npc)target).getCastle().getTaxRate());
}
else
{
listId = Integer.parseInt(command.substring(13).trim());
L2Multisell.getInstance().separateAndSend(listId, activeChar, ((L2Npc)target).getNpcId(), true, ((L2Npc)target).getCastle().getTaxRate());
}
return true;
}
catch (Exception e)
{
_log.info("Exception in " + getClass().getSimpleName());
}
return false;
}
public String[] getBypassList()
{
return COMMANDS;
}
}
Но беда в том, что он не хочет на EmuRT пахать ( Хотя такие обработчики как телепорт
Код: //custom_scripts.cfg
//custom/PVPCB/TeleportBBSManager.java
//bypass -h _bbsteleto 50192
//50192 id телепорта в custom_teleport
package custom.PVPCB;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javolution.text.TextBuilder;
import net.l2emuproject.L2DatabaseFactory;
import net.l2emuproject.gameserver.cache.HtmCache;
import net.l2emuproject.gameserver.communitybbs.CommunityBoard;
import net.l2emuproject.gameserver.communitybbs.IBBSHandler;
import net.l2emuproject.gameserver.communitybbs.Manager.BaseBBSManager;
import net.l2emuproject.gameserver.datatables.TeleportLocationTable;
import net.l2emuproject.gameserver.instancemanager.SiegeManager;
import net.l2emuproject.gameserver.instancemanager.TownManager;
import net.l2emuproject.gameserver.model.L2TeleportLocation;
import net.l2emuproject.gameserver.model.actor.instance.L2PcInstance;
import net.l2emuproject.gameserver.model.olympiad.Olympiad;
import net.l2emuproject.gameserver.network.SystemMessageId;
public class TeleportBBSManager extends BaseBBSManager implements IBBSHandler
{
@Override
public String getBoard()
{
return "101";
}
private static String[] _COMMANDS = { "tele", "teleto", "telesave", "teledel", "telegomy" };
@Override
public String[] getCommands()
{
return _COMMANDS;
}
public class CBteleport
{
public int TpId = 0; // Teport loc ID
public String TpName = ""; // Loc name
public int PlayerId = 0; // charID
public int xC = 0; // Location coords
public int yC = 0; //
public int zC = 0; //
}
@Override
public String handleCommand(L2PcInstance player, String command, String param)
{
if(command.equals("tele"))
{
showTp(player);
}
if(command.equals("telesave"))
{
String TpNameAdd = param;
AddTp(player, TpNameAdd);
showTp(player);
}
else if(command.equals("teledel"))
{
int TpNameDell = Integer.parseInt(param);
delTp(player, TpNameDell);
showTp(player);
}
else if(command.equals("telegomy"))
{
int TpToGo = Integer.parseInt(param);
goTp(player, TpToGo);
showTp(player);
}
if(command.equals("teleto"))
{
if(player != null)
{
if(player.isInCombat())
{
player.sendMessage("Телепортация в режиме боя запрещена.");
return null;
}
if(player.isSitting())
{
player.sendMessage("Телепортация сидя запрещена.");
return null;
}
if(player.isChaotic())
{
player.sendMessage("Телепортация в режиме PK запрещена.");
return null;
}
if(player.isInOlympiadMode() || Olympiad.getInstance().isRegistered(player) || player.getOlympiadGameId() != -1)
{
player.sendMessage("Данное действие запрещенно на олимпе.");
return null;
}
if(player.isInFunEvent())
{
player.sendMessage("Данное действие запрещенно во время Эвента.");
return null;
}
if(player.isInJail())
{
player.sendMessage("Данное действие запрещенно в Тюрьме.");
return null;
}
if(player.isInKarteiCube())
{
player.sendMessage("Данное действие запрещенно в KarteiCube.");
return null;
}
if(player.isInUndergroundColiseum())
{
player.sendMessage("Данное действие запрещенно в Underground Coliseum.");
return null;
}
if(player.isFlying())
{
player.sendMessage("Во время полёта телепортация запрещена.");
return null;
}
if(player.getInstanceId() > 0)
{
player.sendMessage("Телепорт из Инстанта запрещён.");
}
//#######
L2TeleportLocation clist = TeleportLocationTable.getInstance().getCustomTemplate(Integer.parseInt(param));
int price = clist.getPrice();
if(SiegeManager.getInstance().checkIfInZone(clist.getLocX(), clist.getLocY(), clist.getLocZ()))
{
player.sendMessage("Телепортация к осаждаемому замку запрещена.");
return null;
}
if(TownManager.getInstance().townHasCastleInSiege(clist.getLocX(), clist.getLocY(), clist.getLocZ()))
{
player.sendMessage("Телепортация в осаждаемый город запрещена.");
return null;
}
if(price > 0 && player.getAdena() < price)
{
player.sendMessage("Не хватает адены.");
return null;
}
if(price > 0)
player.destroyItemByItemId("BBSGK", 57, price, null, true);
player.teleToLocation(clist.getLocX(), clist.getLocY(), clist.getLocZ());
//player.sendMessage("#"+price);
}
}
return null;
}
private void showTp(L2PcInstance activeChar)
{
CBteleport tp;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement st = con.prepareStatement("SELECT * FROM comteleport WHERE charId=?;");
st.setLong(1, activeChar.getObjectId());
ResultSet rs = st.executeQuery();
TextBuilder html = new TextBuilder();
html.append("<table width=220>");
while(rs.next())
{
tp = new CBteleport();
tp.TpId = rs.getInt("TpId");
tp.TpName = rs.getString("name");
tp.PlayerId = rs.getInt("charId");
tp.xC = rs.getInt("xPos");
tp.yC = rs.getInt("yPos");
tp.zC = rs.getInt("zPos");
html.append("<tr>");
html.append("<td>");
html.append("<button value=\"" + tp.TpName + "\" action=\"bypass -h _bbstelegomy " + tp.TpId + "\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
html.append("</td>");
html.append("<td>");
html.append("<button value=\"Удалить\" action=\"bypass -h _bbsteledel " + tp.TpId + "\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
html.append("</td>");
html.append("</tr>");
}
html.append("</table>");
String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/50.htm");
content = content.replace("%tp%", html.toString());
separateAndSend(content, activeChar);
return;
}
catch(Exception e)
{}
finally
{
try
{
con.close();
}
catch(Exception e)
{}
}
}
private void goTp(L2PcInstance activeChar, int TpToGo)
{
int priceTp = 2000000;
if(activeChar.isDead() || activeChar.isAlikeDead() || activeChar.isCastingNow() || activeChar.isInCombat() || activeChar.isAttackingNow() || activeChar.isInOlympiadMode() || activeChar.isInJail() || activeChar.isFlying())
{
activeChar.sendMessage("Телепортация невозможна");
return;
}
if(priceTp > 0 && activeChar.getAdena() < priceTp)
{
activeChar.sendPacket(SystemMessageId.YOU_NOT_ENOUGH_ADENA);
return;
}
else
{
if(priceTp > 0)
{
activeChar.reduceAdena("Teleport", priceTp, activeChar, true);
}
CBteleport tp;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement st = con.prepareStatement("SELECT * FROM comteleport WHERE TpId=?;");
st.setInt(1, TpToGo);
ResultSet rs = st.executeQuery();
while(rs.next())
{
tp = new CBteleport();
tp.TpId = rs.getInt("TpId");
tp.TpName = rs.getString("name");
tp.PlayerId = rs.getInt("charId");
tp.xC = rs.getInt("xPos");
tp.yC = rs.getInt("yPos");
tp.zC = rs.getInt("zPos");
activeChar.teleToLocation(tp.xC, tp.yC, tp.zC);
}
}
catch(Exception e)
{}
finally
{
try
{
con.close();
}
catch(Exception e)
{}
}
}
}
private void delTp(L2PcInstance activeChar, int TpNameDell)
{
Connection conDel = null;
try
{
conDel = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement stDel = conDel.prepareStatement("DELETE FROM comteleport WHERE charId=? AND TpId=?;");
stDel.setInt(1, activeChar.getObjectId());
stDel.setInt(2, TpNameDell);
stDel.execute();
}
catch(Exception e)
{}
finally
{
try
{
conDel.close();
}
catch(Exception e)
{}
}
}
private void AddTp(L2PcInstance activeChar, String TpNameAdd)
{
if(activeChar.isDead() || activeChar.isAlikeDead() || activeChar.isCastingNow() || activeChar.isAttackingNow())
{
activeChar.sendMessage("Сохранить закладку в вашем состоянии нельзя");
return;
}
if(activeChar.isInCombat())
{
activeChar.sendMessage("Сохранить закладку в режиме боя нельзя");
return;
}
if(TpNameAdd.equals("") || TpNameAdd.equals(null))
{
activeChar.sendMessage("Вы не ввели Имя закладки");
return;
}
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement st = con.prepareStatement("SELECT COUNT(*) FROM comteleport WHERE charId=?;");
st.setLong(1, activeChar.getObjectId());
ResultSet rs = st.executeQuery();
rs.next();
if(rs.getInt(1) <= 9)
{
PreparedStatement st1 = con.prepareStatement("SELECT COUNT(*) FROM comteleport WHERE charId=? AND name=?;");
st1.setLong(1, activeChar.getObjectId());
st1.setString(2, TpNameAdd);
ResultSet rs1 = st1.executeQuery();
rs1.next();
if(rs1.getInt(1) == 0)
{
PreparedStatement stAdd = con.prepareStatement("INSERT INTO comteleport (charId,xPos,yPos,zPos,name) VALUES(?,?,?,?,?)");
stAdd.setInt(1, activeChar.getObjectId());
stAdd.setInt(2, activeChar.getX());
stAdd.setInt(3, activeChar.getY());
stAdd.setInt(4, activeChar.getZ());
stAdd.setString(5, TpNameAdd);
stAdd.execute();
}
else
{
PreparedStatement stAdd = con.prepareStatement("UPDATE comteleport SET xPos=?, yPos=?, zPos=? WHERE charId=? AND name=?;");
stAdd.setInt(1, activeChar.getObjectId());
stAdd.setInt(2, activeChar.getX());
stAdd.setInt(3, activeChar.getY());
stAdd.setInt(4, activeChar.getZ());
stAdd.setString(5, TpNameAdd);
stAdd.execute();
}
}
else
{
activeChar.sendMessage("Вы не можете сохранить более 10 закладок");
}
}
catch(Exception e)
{}
finally
{
try
{
con.close();
}
catch(Exception e)
{}
}
}
public static void main(String[] args)
{
CommunityBoard.getInstance().registerBBSHandler(new TeleportBBSManager());
}
@Override
public void parsecmd(String arg0, L2PcInstance arg1)
{}
@Override
public void parsewrite(String arg0, String arg1, String arg2, String arg3, String arg4, L2PcInstance arg5)
{}
}
Или просто класс-мастер работают...
Менял строчки кода на
Код: package custom.PVPCB;
import net.l2emuproject.gameserver.handler.IBypassHandler;
import net.l2emuproject.gameserver.model.L2Multisell;
import net.l2emuproject.gameserver.model.actor.L2Character;
import net.l2emuproject.gameserver.model.actor.L2Npc;
import net.l2emuproject.gameserver.model.actor.instance.L2PcInstance;
public class Multisell implements IBBSHandler
И последнюю строку на
Код: public class Multisell extends BaseBBSManager implements IBBSHandler
Но работоспособности так и не добился... объясните мне, нубу, что надо дописать/исправить, что этот обработчик подключить?( И реально ли мне вообще это сделать с минимальными знаниями Java и не большим желанием тратить некие крупные суммы?..
Ошибку кидает вечно одну...
Код: Error on: D:\Emu RT\gameserver\data\scripts\custom\PVPCB\Multisell.java.error.log
Line: -1 - Column: -1
compilation failed
Строчка 1, столбец 1...
Я, конечно, понимаю, что обработчики для разных сборок и по большому счету мультиселловский надо полностью переписывать, т.к. не сходится с телепортом... (что то по инструкции EmuRT), но можно ли с данным обработчиком что то сделать?
А то на la2vt 1.1.1 оживить комуннити сервер не удалось.
Добавлено через 32 минуты
Попробовал изменить обработчик, чтобы был похож на бафера, например (который тоже почему-то не работает, хотя и подключен)
Код: package custom.PVPCB;
import java.util.StringTokenizer;
import net.l2emuproject.gameserver.handler.IBypassHandler;
import net.l2emuproject.gameserver.model.L2Multisell;
import net.l2emuproject.gameserver.model.actor.L2Character;
import net.l2emuproject.gameserver.model.actor.L2Npc;
import net.l2emuproject.gameserver.model.actor.instance.L2PcInstance;
public class Multisell implements IBBSHandler
{
@Override
public String getBoard()
{
return "101";
}
private static String[] _COMMANDS = { "multisell", "multisell" };
@Override
public String[] getCommands()
{
return _COMMANDS;
}
@Override
public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
{
if (!(target instanceof L2Npc))
return false;
if (!activeChar.validateBypass(command))
return false;
try
{
activeChar.setIsUsingAIOItemMultisell(false);
int listId;
if (command.startsWith(COMMANDS[0])) // multisell
{
listId = Integer.parseInt(command.substring(9).trim());
L2Multisell.getInstance().separateAndSend(listId, activeChar, ((L2Npc)target).getNpcId(), false, ((L2Npc)target).getCastle().getTaxRate());
}
else
{
listId = Integer.parseInt(command.substring(13).trim());
L2Multisell.getInstance().separateAndSend(listId, activeChar, ((L2Npc)target).getNpcId(), true, ((L2Npc)target).getCastle().getTaxRate());
}
return true;
}
public static void main(String[] args)
{
CommunityBoard.getInstance().registerBBSHandler(new Multisell());
}
}
Ошибка осталась прежней....
Сообщений: 1,326
Тем: 10
Зарегистрирован: Apr 2010
Репутация:
2,078
Понимаете ли... в EmuRT нет BypassHandler-ов..
Сообщений: 31
Тем: 3
Зарегистрирован: Sep 2011
Репутация:
0
Но есть handle? Так? Или меня как всегда уносит далеко?)
Я запутался в общем, как всегда) Дабы не тратить много вашего времени (Все равно бесплатно пальцем не ткнете где что исправить) Скажите... что надо прописать в import ?
В одном хандлере нашел строчку
Код: public String [color=Red]handleCommand[/color](L2PcInstance activeChar, String command, String param)
В дефолтном мультиселловском от ла2вт подобная строка выглядит
Код: public boolean [color=Red]useBypass[/color](String command, L2PcInstance activeChar, L2Character target)
У меня ошибка типа такой?
Сообщений: 1,326
Тем: 10
Зарегистрирован: Apr 2010
Репутация:
2,078
Может вы сначала расскаже что же хотите получить в итоге?
Сообщений: 31
Тем: 3
Зарегистрирован: Sep 2011
Репутация:
0
В наличии шара коммунити заточенная под EmuRT) В ней работает все, кроме бафера и гмшопа) Посмотрев хтмлки от гмшопа, выяснил, что команда типа "action="bypass -h _bbsgmshop multisell 90090" не работает... в конечном итоге я, скачав сборку ла2вт, наткнулся на огромную папку с хендлерами и увидев там хендлер мультиселла сразу захотел воодушевить гмшоп в коммунити, чтобы воспринимал команды типа "action="bypass -h _bbsmultisell;90090", для этого решил подогнать данный обработчик и дело встало )
В данный момент, после всяческой корректировки данного хандлера имею такое
Код: package custom.PVPCB;
import net.l2emuproject.gameserver.handler.IBBSHandler;
import net.l2emuproject.gameserver.model.L2Multisell;
import net.l2emuproject.gameserver.model.actor.L2Character;
import net.l2emuproject.gameserver.model.actor.L2Npc;
import net.l2emuproject.gameserver.model.actor.instance.L2PcInstance;
public class Multisell implements IBBSHandler
{
@Override
public String getBoard()
{
return "101";
}
private static String[] _COMMANDS = { "multisell", "exc_multisell" };
@Override
public String[] getCommands()
{
return _COMMANDS;
}
@Override
public String handleCommand(L2PcInstance activeChar, String command, String param)
{
if (!(target instanceof L2Npc))
return false;
if (!activeChar.validatehandle(command))
return false;
try
{
activeChar.setIsUsingAIOItemMultisell(false);
int listId;
if (command.startsWith(COMMANDS[0])) // multisell
{
listId = Integer.parseInt(command.substring(9).trim());
L2Multisell.getInstance().separateAndSend(listId, activeChar, ((L2Npc)target).getNpcId(), false, ((L2Npc)target).getCastle().getTaxRate());
}
else
{
listId = Integer.parseInt(command.substring(13).trim());
L2Multisell.getInstance().separateAndSend(listId, activeChar, ((L2Npc)target).getNpcId(), true, ((L2Npc)target).getCastle().getTaxRate());
}
return true;
}
public static void main(String[] args)
{
CommunityBoard.getInstance().registerBBSHandler(new Multisell());
}
}
И вроде бы уже Bypaas сменил полностью на строчку с handleCommands, но ошибка до сих пор повторяется...
Что хочу получить в итоге... Чтобы ГМшоп в коммунити "проглатывал" команды multisell и открывал листы мультиселла )
Сообщений: 1,326
Тем: 10
Зарегистрирован: Apr 2010
Репутация:
2,078
А не рпботает он у вас по очень простой причине. У вас куплена поддержка расширенной CommunityBoard?
Если нет, или шарная сборка, то даже и не пытайтесь
А то что ошибочка, так откройте лог-файл и почитайте
Сообщений: 31
Тем: 3
Зарегистрирован: Sep 2011
Репутация:
0
10-10-2011, 11:51 AM
(Сообщение последний раз редактировалось: 10-10-2011, 12:50 PM Askord.)
Да) Сборка шарная) И коммунити тоже) Значит буду по старинке через нпц) А почему тогда работает телепорт и класс мастер? Это вроде как "не расширенная" коммунити?) И еще... Не подскажете какую нибудь шарную или бесплатную сборочку в которой практикуется коммунити? Можно даже рабочую (по квестам) на 20-40%) т.к сервер пока ставлю только для себя, возможно для пары друзей) И покупать реально рабочие сборки за 3-40к и более совсем не разумно) Пока практикуюсь... Может в будущем рискну на какой нибудь масштабный проэкт.
Добавлено через 58 минут
По поводу ошибки... Уже говорил: Ошибка постоянно одна и та же
Код: Error on: D:\Emu RT\gameserver\data\scripts\custom\PVPCB\Multisell.java.error.log
Line: -1 - Column: -1
compilation failed
Я так понимаю проблема в импортах.... Я где то что то написал с ошибкой, но не могу понять где (
Сообщений: 805
Тем: 21
Зарегистрирован: Apr 2008
Репутация:
1,605
Askord Написал:Да) Сборка шарная) И коммунити тоже) Значит буду по старинке через нпц) А почему тогда работает телепорт и класс мастер? Это вроде как "не расширенная" коммунити?) И еще... Не подскажете какую нибудь шарную или бесплатную сборочку в которой практикуется коммунити? Можно даже рабочую (по квестам) на 20-40%) т.к сервер пока ставлю только для себя, возможно для пары друзей) И покупать реально рабочие сборки за 3-40к и более совсем не разумно) Пока практикуюсь... Может в будущем рискну на какой нибудь масштабный проэкт.
Добавлено через 58 минут
По поводу ошибки... Уже говорил: Ошибка постоянно одна и та же
Код: Error on: D:\Emu RT\gameserver\data\scripts\custom\PVPCB\Multisell.java.error.log
Line: -1 - Column: -1
compilation failed
Я так понимаю проблема в импортах.... Я где то что то написал с ошибкой, но не могу понять где (
а слабо лог файл открыть? Multisell.java.error.log
|