/* * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ package net.sf.l2j.gameserver.communitybbs.Manager; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; import javolution.text.TextBuilder; import javolution.util.FastList; import javolution.util.FastMap; import net.sf.l2j.Config; import net.sf.l2j.gameserver.GameServer; import net.sf.l2j.gameserver.clientpackets.Say2; import net.sf.l2j.gameserver.model.BlockList; import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.base.Experience; import net.sf.l2j.gameserver.network.SystemMessageId; import net.sf.l2j.gameserver.serverpackets.CreatureSay; import net.sf.l2j.gameserver.serverpackets.ShowBoard; import net.sf.l2j.gameserver.serverpackets.SystemMessage; public class RegionBBSManager extends BaseBBSManager { private static Logger _logChat = Logger.getLogger("chat"); /* (non-Javadoc) * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance) */ @Override public void parsecmd(String command, L2PcInstance activeChar) { if (command.equals("_bbsloc")) { showOldCommunity(activeChar, 1); } else if (command.startsWith("_bbsloc;page;")) { StringTokenizer st = new StringTokenizer(command, ";"); st.nextToken(); st.nextToken(); int page = 0; try { page = Integer.parseInt(st.nextToken()); } catch (NumberFormatException nfe) {} showOldCommunity(activeChar, page); } else if (command.startsWith("_bbsloc;playerinfo;")) { StringTokenizer st = new StringTokenizer(command, ";"); st.nextToken(); st.nextToken(); String name = st.nextToken(); showOldCommunityPI(activeChar, name); } else { if(Config.COMMUNITY_TYPE.equals("old")) { showOldCommunity(activeChar, 1); } else { ShowBoard sb = new ShowBoard("

the command: "+command+" is not implemented yet


","101"); activeChar.sendPacket(sb); activeChar.sendPacket(new ShowBoard(null,"102")); activeChar.sendPacket(new ShowBoard(null,"103")); } } } /** * @param activeChar * @param name */ private void showOldCommunityPI(L2PcInstance activeChar, String name) { TextBuilder htmlCode = new TextBuilder("
"); htmlCode.append("
L2J Community Board
"); L2PcInstance player = L2World.getInstance().getPlayer(name); if (player != null) { String sex = "Male"; if (player.getAppearance().getSex()) { sex = "Female"; } String levelApprox = "low"; if (player.getLevel() >= 60) levelApprox = "very high"; else if (player.getLevel() >= 40) levelApprox = "high"; else if (player.getLevel() >= 20) levelApprox = "medium"; htmlCode.append(""); htmlCode.append(""); htmlCode.append(""); if (activeChar != null && (activeChar.isGM() || player.getObjectId() == activeChar.getObjectId() || Config.SHOW_LEVEL_COMMUNITYBOARD)) { long nextLevelExp = 0; long nextLevelExpNeeded = 0; if (player.getLevel() < (Experience.MAX_LEVEL - 1)) { nextLevelExp = Experience.LEVEL[player.getLevel() + 1]; nextLevelExpNeeded = nextLevelExp-player.getExp(); } htmlCode.append(""); htmlCode.append(""); htmlCode.append(""); htmlCode.append(""); } int uptime = (int)player.getUptime()/1000; int h = uptime/3600; int m = (uptime-(h*3600))/60; int s = ((uptime-(h*3600))-(m*60)); htmlCode.append(""); htmlCode.append(""); if (player.getClan() != null) { htmlCode.append(""); htmlCode.append(""); } htmlCode.append("
"+player.getName()+" ("+sex+" "+player.getTemplate().className+"):
Level: "+levelApprox+"

Level: "+player.getLevel()+"
Experience: "+player.getExp()+"/"+nextLevelExp+"
Experience needed for level up: "+nextLevelExpNeeded+"

Uptime: "+h+"h "+m+"m "+s+"s

Clan: "+player.getClan().getName()+"


"); htmlCode.append("
"); htmlCode.append(""); separateAndSend(htmlCode.toString(),activeChar); } else { ShowBoard sb = new ShowBoard("

No player with name "+name+"


","101"); activeChar.sendPacket(sb); activeChar.sendPacket(new ShowBoard(null,"102")); activeChar.sendPacket(new ShowBoard(null,"103")); } } /** * @param activeChar */ private void showOldCommunity(L2PcInstance activeChar,int page) { separateAndSend(getCommunityPage(page, activeChar.isGM() ? "gm" : "pl"),activeChar); } /* (non-Javadoc) * @see net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager#parsewrite(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, net.sf.l2j.gameserver.model.actor.instance.L2PcInstance) */ @Override public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar) { if (activeChar == null) return; if (ar1.equals("PM")) { TextBuilder htmlCode = new TextBuilder("
"); htmlCode.append("
L2J Community Board
"); try { L2PcInstance receiver = L2World.getInstance().getPlayer(ar2); if (receiver == null) { htmlCode.append("Player not found!
"); separateAndSend(htmlCode.toString(),activeChar); return; } if (Config.JAIL_DISABLE_CHAT && receiver.isInJail()) { activeChar.sendMessage("Player is in jail."); return; } if (receiver.isChatBanned()) { activeChar.sendMessage("Player is chat banned."); return; } if (activeChar.isInJail() && Config.JAIL_DISABLE_CHAT) { activeChar.sendMessage("You can not chat while in jail."); return; } if (Config.LOG_CHAT) { LogRecord record = new LogRecord(Level.INFO, ar3); record.setLoggerName("chat"); record.setParameters(new Object[]{"TELL", "[" + activeChar.getName() + " to "+receiver.getName()+"]"}); _logChat.log(record); } CreatureSay cs = new CreatureSay(activeChar.getObjectId(), Say2.TELL, activeChar.getName(), ar3); if (receiver != null && !BlockList.isBlocked(receiver, activeChar)) { if (!receiver.getMessageRefusal()) { receiver.sendPacket(cs); activeChar.sendPacket(new CreatureSay(activeChar.getObjectId(), Say2.TELL, "->" + receiver.getName(), ar3)); htmlCode.append("Message Sent