Пользователь
Регистрация: 21.10.2011
Возраст: 31
Сообщений: 46
Отблагодарили 0 раз(а)
Рейтинг мнений:
|
Re: Community Board
CommunityBoard.java
Код:
package l2p.gameserver.communitybbs;
import java.util.HashMap;
import java.util.StringTokenizer;
import l2p.Config;
import l2p.gameserver.TradeController;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.communitybbs.Manager.BuffBBSManager;
import l2p.gameserver.communitybbs.Manager.ClanBBSManager;
import l2p.gameserver.communitybbs.Manager.ClassBBSManager;
import l2p.gameserver.communitybbs.Manager.EnchantBBSManager;
import l2p.gameserver.communitybbs.Manager.FailBBSManager;
import l2p.gameserver.communitybbs.Manager.FriendsBBSManager;
import l2p.gameserver.communitybbs.Manager.PostBBSManager;
import l2p.gameserver.communitybbs.Manager.RegionBBSManager;
import l2p.gameserver.communitybbs.Manager.SmsBBSManager;
import l2p.gameserver.communitybbs.Manager.StatBBSManager;
import l2p.gameserver.communitybbs.Manager.TeleportBBSManager;
import l2p.gameserver.communitybbs.Manager.TopBBSManager;
import l2p.gameserver.communitybbs.Manager.TopicBBSManager;
import l2p.gameserver.model.L2Clan;
import l2p.gameserver.model.L2Multisell;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.entity.olympiad.Olympiad;
import l2p.gameserver.model.items.L2ItemInstance;
import l2p.gameserver.network.L2GameClient;
import l2p.gameserver.serverpackets.ExBuySellList;
import l2p.gameserver.serverpackets.L2GameServerPacket;
import l2p.gameserver.serverpackets.ShowBoard;
import l2p.gameserver.serverpackets.SkillList;
import l2p.gameserver.serverpackets.SocialAction;
import l2p.gameserver.tables.ItemTable;
import l2p.gameserver.templates.L2Item;
public class CommunityBoard
{
private static CommunityBoard _instance;
private static int MONEY_ID = 4357;
public static final String PVPCB_FILE = "./config/pvpcommunityboard.properties";
public static CommunityBoard getInstance()
{
if(_instance == null)
_instance = new CommunityBoard();
return _instance;
}
public void handleCommands(L2GameClient client, String command)
{
L2Player activeChar = client.getActiveChar();
if(activeChar == null)
return;
if(!Config.ALLOW_COMMUNITYBOARD)
{
activeChar.sendPacket(Msg.THE_COMMUNITY_SERVER_IS_CURRENTLY_OFFLINE);
return;
}
if(!Config.ALLOW_PVPCB_ABNORMAL)
{
if(activeChar.isDead() || activeChar.isAlikeDead() || activeChar.isCastingNow() || activeChar.isInCombat() || activeChar.isAttackingNow() || activeChar.isInOlympiadMode() || activeChar.isInVehicle() || activeChar.isFlying() || activeChar.isInFlyingTransform())
{
FailBBSManager.getInstance().parsecmd(command, activeChar);
return;
}
}
if(command.startsWith("_bbsclan"))
ClanBBSManager.getInstance().parsecmd(command, activeChar);
else if(command.startsWith("_bbsmemo"))
TopicBBSManager.getInstance().parsecmd(command, activeChar);
else if(command.startsWith("_bbstopics"))
TopicBBSManager.getInstance().parsecmd(command, activeChar);
else if(command.startsWith("_bbsposts"))
PostBBSManager.getInstance().parsecmd(command, activeChar);
else if(command.startsWith("_bbstop"))
TopBBSManager.getInstance().parsecmd(command, activeChar);
else if(command.startsWith("_bbshome"))
TopBBSManager.getInstance().parsecmd(command, activeChar);
else if(command.startsWith("_bbsloc"))
RegionBBSManager.getInstance().parsecmd(command, activeChar);
else if(command.startsWith("_friend") || command.startsWith("_block"))
FriendsBBSManager.getInstance().parsecmd(command, activeChar);
else if(command.startsWith("_bbsgetfav"))
ShowBoard.separateAndSend("<html><body><br><br><center>Закладки пока не реализованы.</center><br><br></body></html>", activeChar);
else if(command.startsWith("_mail"))
ShowBoard.separateAndSend("<html><body><br><br><center>Почта пока не реализована.</center><br><br></body></html>", activeChar);
else if(command.startsWith("_bbsteleport;"))
if(!Config.ALLOW_PVPCB_TELEPORT)
{
FailBBSManager.getInstance().parsecmd(command, activeChar);
return;
}
else
{
TeleportBBSManager.getInstance().parsecmd(command, activeChar);
}
else if(command.startsWith("_bbsechant"))
if(!Config.ALLOW_PVPCB_ECHANT)
{
FailBBSManager.getInstance().parsecmd(command, activeChar);
return;
}
else
{
EnchantBBSManager.getInstance().parsecmd(command, activeChar);
}
else if(command.startsWith("_bbsclass"))
if(!Config.ALLOW_PVPCB_CLASSMASTER)
{
FailBBSManager.getInstance().parsecmd(command, activeChar);
return;
}
else
{
ClassBBSManager.getInstance().parsecmd(command, activeChar);
}
else if(command.startsWith("_bbssms;"))
SmsBBSManager.getInstance().parsecmd(command, activeChar);
else if(command.startsWith("_bbsbuff;"))
BuffBBSManager.getInstance().parsecmd(command, activeChar);
else if(command.startsWith("_bbsstat;"))
StatBBSManager.getInstance().parsecmd(command, activeChar);
else if(command.startsWith("_bbsmultisell;"))
{
StringTokenizer st = new StringTokenizer(command, ";");
st.nextToken();
TopBBSManager.getInstance().parsecmd("_bbstop;" + st.nextToken(), activeChar);
L2Multisell.getInstance().SeparateAndSend(Integer.parseInt(st.nextToken()), activeChar, 0);
}
else if(command.startsWith("_bbssell;"))
{
TradeController.NpcTradeList list = TradeController.getInstance().getBuyList(-1);
activeChar.sendPacket(new L2GameServerPacket[] { new ExBuySellList(list, activeChar, 0) });
}
else if(command.startsWith("_bbsscripts;"))
{
StringTokenizer st = new StringTokenizer(command, ";");
st.nextToken();
TopBBSManager.getInstance().parsecmd("_bbstop;" + st.nextToken(), activeChar);
String com = st.nextToken();
String[] word = com.split("\\s+");
String[] args = com.substring(word[0].length()).trim().split("\\s+");
String[] path = word[0].split(":");
if(path.length != 2)
{
System.out.println("Bad Script bypass!");
return;
}
HashMap<String, Object> variables = new HashMap<String, Object>();
variables.put("npc", null);
activeChar.callScripts(path[0], path[1], word.length == 1 ? new Object[] {} : new Object[] { args }, variables);
}
else if(command.startsWith("_bbsscripts_ret;"))
{
StringTokenizer st = new StringTokenizer(command, ";");
st.nextToken();
String page = st.nextToken();
String com = st.nextToken();
String[] word = com.split("\\s+");
String[] args = com.substring(word[0].length()).trim().split("\\s+");
String[] path = word[0].split(":");
if(path.length != 2)
{
System.out.println("Bad Script bypass!");
return;
}
HashMap<String, Object> variables = new HashMap<String, Object>();
variables.put("npc", null);
Object subcontent = activeChar.callScripts(path[0], path[1], word.length == 1 ? new Object[] {} : new Object[] { args }, variables);
TopBBSManager.getInstance().showTopPage(activeChar, page, String.valueOf(subcontent), path[0]);
}
else if(command.startsWith("_bbssps;"))
{
int price = 1;
L2Item item = ItemTable.getInstance().getTemplate(4357);
L2ItemInstance pay = activeChar.getInventory().getItemByItemId(item.getItemId());
if(pay != null && pay.getCount() >= price)
{
activeChar.getInventory().destroyItem(pay, (long) price, true);
activeChar.setSp(activeChar.getSp() + 10000000);
activeChar.sendMessage("Вы получили 10kk SP");
activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 16));
activeChar.broadcastUserInfo(true);
}
else
{
activeChar.sendMessage("У Вас нет денег, мне очень жаль.");
}
}
else if(command.startsWith("_bbsspa;"))
{
int price = 100000000;
L2Item item = ItemTable.getInstance().getTemplate(57);
L2ItemInstance pay = activeChar.getInventory().getItemByItemId(item.getItemId());
if(pay != null && pay.getCount() >= price)
{
activeChar.getInventory().destroyItem(pay, (long) price, true);
activeChar.setSp(activeChar.getSp() + 10000000);
activeChar.sendMessage("Вы получили 10kk SP");
activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 16));
activeChar.broadcastUserInfo(true);
}
else
{
activeChar.sendMessage("У Вас нет денег, мне очень жаль.");
}
}
else if(command.startsWith("_bbsnobles;"))
{
if(!activeChar.isNoble())
{
if(!checkCondition(activeChar, 30))
return;
if(activeChar.getSubLevel() < 75)
{
activeChar.sendMessage("Чтобы стать дворянином вы должны прокачать сабкласс до 75-го уровня");
return;
}
L2Item item = ItemTable.getInstance().getTemplate(MONEY_ID);
L2ItemInstance pay = activeChar.getInventory().getItemByItemId(item.getItemId());
if(pay != null && pay.getCount() >= 30)
{
activeChar.getInventory().destroyItem(pay, 30, true);
Olympiad.addNoble(activeChar);
activeChar.setNoble(true);
activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), SocialAction.VICTORY));
activeChar.updatePledgeClass();
activeChar.updateNobleSkills();
activeChar.sendPacket(new SkillList(activeChar));
activeChar.broadcastUserInfo(true);
}
else
{
activeChar.sendMessage("У Вас нет денег, мне очень жаль.");
}
}
else
{
activeChar.sendMessage("Вам это вовсе ненужно!");
}
}
else
ShowBoard.separateAndSend("<html><body><br><br><center>Функция: " + command + " пока не реализована</center><br><br></body></html>", activeChar);
}
public static boolean checkCondition(L2Player activeChar, int CoinCount)
{
synchronized (activeChar)
{
L2ItemInstance Coin = activeChar.getInventory().getItemByItemId(MONEY_ID);
if(activeChar.isSitting())
return false;
if(Coin.getCount() < CoinCount)
{
activeChar.sendMessage("У Вас нет денег, мне очень жаль.");
return false;
}
return true;
}
}
public void handleWriteCommands(L2GameClient client, String url, String arg1, String arg2, String arg3, String arg4, String arg5)
{
L2Player activeChar = client.getActiveChar();
if(activeChar == null)
return;
if(!Config.ALLOW_COMMUNITYBOARD)
{
activeChar.sendPacket(Msg.THE_COMMUNITY_SERVER_IS_CURRENTLY_OFFLINE);
return;
}
if(url.equals("Topic"))
TopicBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);
else if(url.equals("Post"))
PostBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);
else if(url.equals("Region"))
RegionBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);
else if(url.equals("Notice"))
{
if(arg4.length() > L2Clan.NOTICE_MAX_LENGHT)
{
ShowBoard.separateAndSend("<html><body><br><br><center>Вы ввели слишком длинное сообщение, оно будет сохранено не полностью.</center><br><br></body></html>", activeChar);
return;
}
ClanBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);
}
else
ShowBoard.separateAndSend("<html><body><br><br><center>Функция: " + url + " пока не реализована</center><br><br></body></html>", activeChar);
}
}
А TeleportBBSManager.java Я чёт не нашел! Где именно он лежит в Проекте?
Нашел =)
Код:
package l2p.gameserver.communitybbs.Manager;
import java.sql.ResultSet;
import java.util.StringTokenizer;
import java.util.logging.Logger;
import javolution.text.TextBuilder;
import l2p.database.DatabaseUtils;
import l2p.database.FiltredPreparedStatement;
import l2p.database.L2DatabaseFactory;
import l2p.database.ThreadConnection;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.instancemanager.TownManager;
import l2p.gameserver.instancemanager.ZoneManager;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.L2Zone;
import l2p.gameserver.model.L2Zone.ZoneType;
import l2p.gameserver.model.entity.residence.Castle;
import l2p.gameserver.serverpackets.ShowBoard;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.util.Files;
public class TeleportBBSManager extends BaseBBSManager
{
private static Logger _log = Logger.getLogger(TeleportBBSManager.class.getName());
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; //
}
private static TeleportBBSManager _Instance = null;
public static TeleportBBSManager getInstance()
{
if(_Instance == null)
_Instance = new TeleportBBSManager();
return _Instance;
}
public String points[][];
public void parsecmd(String command, L2Player player)
{
if(command.equals("_bbsteleport;"))
{
showTp(player);
}
else if(command.startsWith("_bbsteleport;delete;"))
{
StringTokenizer stDell = new StringTokenizer(command, ";");
stDell.nextToken();
stDell.nextToken();
int TpNameDell = Integer.parseInt(stDell.nextToken());
delTp(player, TpNameDell);
showTp(player);
}
else if(command.startsWith("_bbsteleport;save; "))
{
StringTokenizer stAdd = new StringTokenizer(command, ";");
stAdd.nextToken();
stAdd.nextToken();
String TpNameAdd = stAdd.nextToken();
AddTp(player, TpNameAdd);
showTp(player);
}
else if(command.startsWith("_bbsteleport;teleport;"))
{
StringTokenizer stGoTp = new StringTokenizer(command, " ");
stGoTp.nextToken();
int xTp = Integer.parseInt(stGoTp.nextToken());
int yTp = Integer.parseInt(stGoTp.nextToken());
int zTp = Integer.parseInt(stGoTp.nextToken());
int priceTp = Integer.parseInt(stGoTp.nextToken());
goTp(player, xTp, yTp, zTp, priceTp);
showTp(player);
}
else
{
ShowBoard.separateAndSend("<html><body><br><br><center>Функция: " + command + " пока не реализована</center><br><br></body></html>", player);
}
}
private void goTp(L2Player player, int xTp, int yTp, int zTp, int priceTp)
{
if(player.isDead() || player.isAlikeDead() || player.isCastingNow() || player.isInCombat() || player.isAttackingNow() || player.isInOlympiadMode() || player.isFlying() || player.isTerritoryFlagEquipped() || player.isInZone(ZoneType.no_escape) || player.isInZone(ZoneType.Siege))
{
player.sendMessage("Телепортация невозможна");
return;
}
if(priceTp > 0 && player.getAdena() < priceTp)
{
player.sendPacket(new SystemMessage(SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ADENA));
return;
}
// Нельзя телепортироваться в города, где идет осада
// Узнаем, идет ли осада в ближайшем замке к точке телепортации
Castle castle = TownManager.getInstance().getClosestTown(xTp, yTp).getCastle();
if(castle != null && castle.getSiege().isInProgress())
{
// Определяем, в город ли телепортируется чар
boolean teleToTown = false;
int townId = 0;
for(L2Zone town : ZoneManager.getInstance().getZoneByType(ZoneType.Town))
if(town.checkIfInZone(xTp, yTp))
{
teleToTown = true;
townId = town.getIndex();
break;
}
if(teleToTown && townId == castle.getTown())
{
player.sendPacket(Msg.YOU_CANNOT_TELEPORT_TO_A_VILLAGE_THAT_IS_IN_A_SIEGE);
return;
}
}
else
{
if(priceTp > 0)
{
player.reduceAdena((long) priceTp, false);
}
player.teleToLocation(xTp, yTp, zTp);
}
}
private void showTp(L2Player player)
{
CBteleport tp;
ThreadConnection con = null;
FiltredPreparedStatement statement = null;
ResultSet rs = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT * FROM comteleport WHERE charId=?;");
statement.setLong(1, player.getObjectId());
rs = statement.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 _bbsteleport;teleport; " + tp.xC + " " + tp.yC + " " + tp.zC + " " + 100000 + "\" 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 _bbsteleport;delete;" + 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 = Files.read("data/html/CommunityBoardPVP/50.htm", player);
content = content.replace("%tp%", html.toString());
separateAndSend(content, player);
return;
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
DatabaseUtils.closeDatabaseCSR(con, statement, rs);
}
}
private void delTp(L2Player player, int TpNameDell)
{
ThreadConnection conDel = null;
FiltredPreparedStatement statementDel = null;
try
{
conDel = L2DatabaseFactory.getInstance().getConnection();
statementDel = conDel.prepareStatement("DELETE FROM comteleport WHERE charId=? AND TpId=?;");
statementDel.setInt(1, player.getObjectId());
statementDel.setInt(2, TpNameDell);
statementDel.execute();
}
catch(Exception e)
{
_log.warning("data error on Delete Teleport: " + e);
e.printStackTrace();
}
finally
{
DatabaseUtils.closeConnection(conDel);
}
}
private void AddTp(L2Player player, String TpNameAdd)
{
if(player.isDead() || player.isAlikeDead() || player.isCastingNow() || player.isAttackingNow())
{
player.sendMessage("Сохранить закладку в вашем состоянии нельзя");
return;
}
if(player.isInCombat())
{
player.sendMessage("Сохранить закладку в режиме боя нельзя");
return;
}
if(TpNameAdd.equals("") || TpNameAdd.equals(null))
{
player.sendMessage("Вы не ввели �мя закладки");
return;
}
ThreadConnection con = null;
FiltredPreparedStatement statement = null;
ResultSet rs = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT COUNT(*) FROM comteleport WHERE charId=?;");
statement.setLong(1, player.getObjectId());
rs = statement.executeQuery();
rs.next();
if(rs.getInt(1) <= 9)
{
statement = con.prepareStatement("SELECT COUNT(*) FROM comteleport WHERE charId=? AND name=?;");
statement.setLong(1, player.getObjectId());
statement.setString(2, TpNameAdd);
rs = statement.executeQuery();
rs.next();
if(rs.getInt(1) == 0)
{
statement = con.prepareStatement("INSERT INTO comteleport (charId,xPos,yPos,zPos,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, TpNameAdd);
statement.execute();
}
else
{
statement = con.prepareStatement("UPDATE comteleport SET xPos=?, yPos=?, zPos=? 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, TpNameAdd);
statement.execute();
}
}
else
{
player.sendMessage("Вы не можете сохранить более 10 закладок");
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
DatabaseUtils.closeDatabaseCSR(con, statement, rs);
}
}
@Override
public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2Player player)
{
}
}
|