11.08.2012, 15:43
|
#1
|
Пользователь
Регистрация: 29.11.2010
Возраст: 54
Сообщений: 25
Отблагодарили 8 раз(а)
Рейтинг мнений:
|
CommunityBoard прикрутить TELEPORT
Доброго все здравия.
Ребята подскажите как правильно прикрутить теле порт.
сборка Исходы "fw-tm.ru 2.1"
Суть в следующем присобачил в комунке теле порт. при нажатии на теле порт в выбранную локацию в консоли пишет
PHP код:
[15:19:36] WARN Direct access to bypass: _bbsteleport 144179 25574 -2180 5000 Player: ADM
код байпас HTML
PHP код:
<tr><td><center><button action="bypass _bbsteleport 146086 26302 -2195 5000" value="Weapons and Armor Shop" width=180 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></center></td></tr>
code TeleportCommunity. java
Свернуть ↑
PHP код:
package services.community;
import l2p.gameserver.database.DatabaseFactory; import l2p.commons.dbutils.DbUtils; import l2p.gameserver.Config; import l2p.gameserver.data.htm.HtmCache; import l2p.gameserver.data.xml.holder.ResidenceHolder; import l2p.gameserver.handler.bbs.CommunityBoardManager; import l2p.gameserver.handler.bbs.ICommunityBoardHandler; import l2p.gameserver.model.Player; import l2p.gameserver.model.Zone.ZoneType; import l2p.gameserver.model.base.TeamType; import l2p.gameserver.model.entity.Reflection; import l2p.gameserver.model.entity.olympiad.Olympiad; import l2p.gameserver.model.entity.residence.Castle; import l2p.gameserver.scripts.Functions; import l2p.gameserver.scripts.ScriptFile; import l2p.gameserver.serverpackets.ShowBoard; import l2p.gameserver.serverpackets.components.SystemMsg; import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.StringTokenizer;
/** * @author STIGMATED * @date 19.11.2011 * @time 22:04:15 */ public class TeleporterCommunity implements ScriptFile, ICommunityBoardHandler { private static final Logger _log = Logger.getLogger(TeleporterCommunity.class);
public static final String[] COMMANDS = new String[] { "_bbstp", "_bbstpdelete", "_bbstpsave", "_bbstpteleport", "_bbstpteleport0" // телепорт для закладок игроков };
@Override public String[] getBypassCommands() { return COMMANDS; }
@Override public void onBypassCommand(final Player player, final String bypass) { _log.info("haha0"); final StringTokenizer st = new StringTokenizer(bypass, " "); final String cmd = st.nextToken();
if(COMMANDS[0].equalsIgnoreCase(cmd)) listBookmarks(player); else if(COMMANDS[1].equalsIgnoreCase(cmd)) // _bbstpdelete { _log.info("haha1"); final int id = Integer.parseInt(st.nextToken()); deleteBookmark(player, id); listBookmarks(player); } else if(COMMANDS[2].equalsIgnoreCase(cmd)) // _bbstpsave { _log.info("haha2"); String name = null; try { name = st.nextToken(); } catch(final Exception e) { listBookmarks(player); return; } addBookmark(player, name.trim()); listBookmarks(player); } else if(COMMANDS[3].equalsIgnoreCase(cmd)) // _bbstpteleport { _log.info("haha3"); final int x = Integer.parseInt(st.nextToken()); final int y = Integer.parseInt(st.nextToken()); final int z = Integer.parseInt(st.nextToken()); final int price = Integer.parseInt(st.nextToken()); teleport(player, x, y, z, price); listBookmarks(player); } else if(COMMANDS[4].equalsIgnoreCase(cmd)) // _bbstpteleport0 {_log.info("haha4"); final int x = Integer.parseInt(st.nextToken()); final int y = Integer.parseInt(st.nextToken()); final int z = Integer.parseInt(st.nextToken()); teleport(player, x, y, z, -1); listBookmarks(player); } }
private final void teleport(final Player player, final int x, final int y, final int z, final int price) { if(player.isDead() || player.isAlikeDead() || player.isFlying() || player.isTerritoryFlagEquipped() || player.isInZone(ZoneType.no_escape) || player.isInObserverMode()) { _log.info("haha-Bad"); player.sendMessage("Телепортация невозможна"); return; }
if(!Config.COMMUNITY_BOARD_TELEPORT_FIGHT) if(player.isInCombat() || player.isAttackingNow() || player.isCastingNow()) { player.sendMessage("Телепортация невозможна"); return; }
// На оли тп нельзя) после регистрации тоже if(player.isInOlympiadMode() || player.getOlympiadGame() != null || Olympiad.isRegisteredInComp(player) || player.getTeam() != TeamType.NONE) return;
if(price > 0 && player.getAdena() < price) { player.sendPacket(SystemMsg.YOU_DO_NOT_HAVE_ENOUGH_ADENA); return; }
// проверяем пользовательские телепорты if(price == -1) if(Functions.getItemCount(player, Config.COMMUNITY_BOARD_TELEPORT_ITEM) < Config.COMMUNITY_BOARD_TELEPORT_PRICE) { player.sendPacket(SystemMsg.INCORRECT_ITEM_COUNT); return; }
// Можно ли телепортироваться в города, где идет осада if(!Config.COMMUNITY_BOARD_TELEPORT_IN_SIEGE_TOWN) { // Нельзя телепортироваться в города, где идет осада final Castle castle = ResidenceHolder.getInstance().getResidenceByCoord(Castle.class, x, y, z, player.getReflection()); if(castle != null && castle.getSiegeEvent().isInProgress()) { player.sendPacket(SystemMsg.YOU_CANNOT_TELEPORT_TO_A_VILLAGE_THAT_IS_IN_A_SIEGE); return; } }
if(price > 0) player.reduceAdena(price, false); else if(price == -1) Functions.removeItem(player, Config.COMMUNITY_BOARD_TELEPORT_ITEM, Config.COMMUNITY_BOARD_TELEPORT_PRICE); player.teleToLocation(x, y, z); }
private final void listBookmarks(final Player player) { Connection con = null; PreparedStatement statement = null; ResultSet rs = null; try { con = DatabaseFactory.getInstance().getConnection(); statement = con.prepareStatement("SELECT * FROM bbs_teleport WHERE charId=?"); statement.setLong(1, player.getObjectId()); rs = statement.executeQuery(); final StringBuilder html = new StringBuilder(200); html.append("<table width=220>"); while (rs.next()) { html.append("<tr><td><button value=\"").append(rs.getString("name")).append("\" action=\"bypass _bbstpteleport0 ").append(rs.getInt("x")).append(" ").append(rs.getInt("y")).append(" ").append(rs.getInt("z")).append("\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"); html.append("<td><button value=\"Удалить\" action=\"bypass _bbstpdelete ").append(rs.getInt("id")).append("\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"); } html.append("</table>");
String tpl = HtmCache.getInstance().getNotNull("scripts/services/community/pages/teleport.htm", player); tpl = tpl.replace("%tp%", html.toString()); ShowBoard.separateAndSend(tpl, player); } catch(final Exception e) { _log.error("Failed get teleport list", e); } finally { DbUtils.closeQuietly(con, statement, rs); } }
private final void deleteBookmark(final Player player, final int id) { Connection con = null; PreparedStatement statement = null; try { con = DatabaseFactory.getInstance().getConnection(); statement = con.prepareStatement("DELETE FROM bbs_teleport WHERE charId=? AND id=?"); statement.setInt(1, player.getObjectId()); statement.setInt(2, id); statement.execute(); } catch(final Exception e) { _log.error("Failed delete bookmark for DB", e); } finally { DbUtils.closeQuietly(con); } }
private final void addBookmark(final Player player, final String bName) { if(player.isDead() || player.isAlikeDead() || player.isCastingNow() || player.isAttackingNow() || player.isInObserverMode()) { player.sendMessage("Сохранить закладку в вашем состоянии нельзя"); return; }
if(player.isInCombat()) { player.sendMessage("Сохранить закладку в режиме боя нельзя"); return; }
if(Config.COMMUNITY_BOARD_TELEPORT_ADDITIONAL_RULES) if(player.isInZone(ZoneType.SIEGE) || player.isInZone(ZoneType.RESIDENCE) || player.isInZone(ZoneType.battle_zone) || player.isInZone(ZoneType.epic) || player.isInZone(ZoneType.no_restart) || player.isInZone(ZoneType.no_summon) || player.isInZone(ZoneType.no_escape)) { player.sendMessage("Сохранить закладку в вашем состоянии нельзя"); return; }
if(StringUtils.isEmpty(bName)) { player.sendMessage("Вы не ввели Имя закладки"); return; }
Connection con = null; PreparedStatement statement = null; ResultSet rs = null; try { con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT COUNT(*) FROM bbs_teleport WHERE charId=?"); statement.setLong(1, player.getObjectId()); rs = statement.executeQuery(); rs.next(); if(rs.getInt(1) <= Config.COMMUNITY_BOARD_TELEPORT_COUNT - 1) { statement = con.prepareStatement("SELECT COUNT(*) FROM bbs_teleport WHERE charId=? AND name=?"); statement.setLong(1, player.getObjectId()); statement.setString(2, bName); rs = statement.executeQuery(); rs.next(); if(rs.getInt(1) == 0) { statement = con.prepareStatement("INSERT INTO bbs_teleport (`charId`,`x`,`y`,`z`,`name`) VALUES(?,?,?,?,?)"); statement.setInt(1, player.getObjectId()); statement.setInt(2, player.getX()); statement.setInt(3, player.getY()); statement.setInt(4, player.getZ()); statement.setString(5, bName); statement.execute(); } else { statement = con.prepareStatement("UPDATE bbs_teleport SET `x`=?, `y`=?, `z`=? WHERE `charId`=? AND `name`=?"); statement.setInt(1, player.getObjectId()); statement.setInt(2, player.getX()); statement.setInt(3, player.getY()); statement.setInt(4, player.getZ()); statement.setString(5, bName); statement.execute(); } } else player.sendMessage("Вы не можете сохранить более 10 закладок");
} catch(final Exception e) { _log.error("Failed add bookmark for DB", e); } finally { DbUtils.closeQuietly(con, statement, rs); } }
@Override public void onWriteCommand(final Player player, final String bypass, final String arg1, final String arg2, final String arg3, final String arg4, final String arg5) {}
@Override public void onLoad() { if(Config.COMMUNITYBOARD_ENABLED) { _log.info("CommunityBoard: Teleporter service loaded."); CommunityBoardManager.getInstance().registerHandler(this); } }
@Override public void onReload() { if(Config.COMMUNITYBOARD_ENABLED) CommunityBoardManager.getInstance().removeHandler(this); }
@Override public void onShutdown() {} }
Свернуть ↑Развернуть ↓
Огромная просьба помогите наведите на мысль пожалуйста.
Пытался изменить доступ на публичный результата не дало
|
|
|