/*
* 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 <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.communitybbs.Manager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.StringTokenizer;
import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.cache.HtmCache;
import com.l2jserver.gameserver.communitybbs.CastleStatus;
import com.l2jserver.gameserver.communitybbs.PlayerList;
import com.l2jserver.gameserver.communitybbs.ServerStats;
import com.l2jserver.gameserver.communitybbs.TopAdena;
import com.l2jserver.gameserver.datatables.ClanTable;
import com.l2jserver.gameserver.instancemanager.GrandBossManager;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
/**
*
*
*/
public class TopBBSManager extends BaseBBSManager
{
private TopBBSManager()
{
}
@Override
public void parsecmd(String command, L2PcInstance activeChar)
{
String fileName = "";
if (command.equals("_bbstop") || command.equals("_bbshome"))
{
fileName = "data/html/CommunityBoard/index.htm";
}
if (command.startsWith("_bbstop;"))
{
StringTokenizer st = new StringTokenizer(command, ";");
st.nextToken();
int idp = Integer.parseInt(st.nextToken());
fileName = "data/html/CommunityBoard/" + idp + ".htm";
}
if(fileName.length() == 0)
{
return;
}
String content = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), fileName);
String ip = "N/A";
String account = "N/A";
try
{
String clientInfo = activeChar.getClient().toString();
account = clientInfo.substring(clientInfo.indexOf("Account: ") + 9, clientInfo.indexOf(" - IP: "));
ip = clientInfo.substring(clientInfo.indexOf(" - IP: ") + 7, clientInfo.lastIndexOf("]"));
}
catch (Exception e)
{
}
if (fileName.equals("data/html/CommunityBoard/3.htm"));
{
// Top 15 PvP List
PlayerList pvp = new PlayerList(1);
content = content.replaceAll("%pvplist%", pvp.loadPlayerList());
}
if (fileName.equals("data/html/CommunityBoard/5.htm"));
{
CastleStatus status = new CastleStatus();
content = content.replaceAll("%castle%", status.loadCastleList());
}
if (fileName.equals("data/html/CommunityBoard/6.htm"));
{
// Top 15 Pk List
PlayerList pk = new PlayerList(0);
content = content.replaceAll("%pklist%", pk.loadPlayerList());
}
if (fileName.equals("data/html/CommunityBoard/53.htm"));
{
// Char Info
content = content.replaceAll("%name%", activeChar.getName());
content = content.replaceAll("%level%", String.valueOf(activeChar.getLevel()));
content = content.replaceAll("%clan%", String.valueOf(ClanTable.getInstance().getClan(activeChar.getClanId())));
content = content.replaceAll("%xp%", String.valueOf(activeChar.getExp()));
content = content.replaceAll("%sp%", String.valueOf(activeChar.getSp()));
content = content.replaceAll("%class%", activeChar.getTemplate().className);
content = content.replaceAll("%classid%", String.valueOf(activeChar.getClassId()));
content = content.replaceAll("%currenthp%", String.valueOf((int) activeChar.getCurrentHp()));
content = content.replaceAll("%maxhp%", String.valueOf(activeChar.getMaxHp()));
content = content.replaceAll("%currentmp%", String.valueOf((int) activeChar.getCurrentMp()));
content = content.replaceAll("%maxmp%", String.valueOf(activeChar.getMaxMp()));
content = content.replaceAll("%currentcp%", String.valueOf((int) activeChar.getCurrentCp()));
content = content.replaceAll("%maxcp%", String.valueOf(activeChar.getMaxCp()));
content = content.replaceAll("%currentload%", String.valueOf(activeChar.getCurrentLoad()));
content = content.replaceAll("%maxload%", String.valueOf(activeChar.getMaxLoad()));
content = content.replaceAll("%access%", String.valueOf(activeChar.getAccessLevel().getLevel()));
content = content.replaceAll("%account%", account);
content = content.replaceAll("%ip%", ip);
}
if (fileName.equals("data/html/CommunityBoard/4.htm"));
{
// Top 20 Adena Owners
TopAdena topAdena = new TopAdena();
content = content.replaceAll("%topadena%", topAdena.loadPlayerList());
}
if (fileName.equals("data/html/CommunityBoard/54.htm"));
{
// Online Gamemasters
content = content.replaceAll("%gmlist%", getOnlineGMs());
}
if (fileName.equals("data/html/CommunityBoard/56.htm"));
{
// Raid Status
content = content.replaceAll("%antharas%", bossStatus(29019));
content = content.replaceAll("%valakas%", bossStatus(29028));
content = content.replaceAll("%baium%", bossStatus(29001));
content = content.replaceAll("%antqueen%", bossStatus(29020));
content = content.replaceAll("%core%", bossStatus(29006));
content = content.replaceAll("%zaken%", bossStatus(29022));
content = content.replaceAll("%frintezza%", bossStatus(29045));
}
if (fileName.equals("data/html/CommunityBoard/57.htm"));
{
// Character Repair
content = content.replaceAll("%acc_chars%", getCharList(activeChar));
}
if (fileName.equals("data/html/CommunityBoard/55.htm"));
{
// Server Stats
ServerStats stats = new ServerStats();
content = content.replaceAll("%stats%", stats.getServerStats());
content = content.replaceAll("%online%", stats.getOnlineCount());
}
if (content == null)
{
//sendError404(activeChar, fileName);
}
else
{
separateAndSend(content, activeChar);
}
}
@Override
public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar)
{
}
private String getOnlineGMs()
{
String msg = "<br>";
if (L2World.getInstance().getAllGMs().isEmpty())
{
msg = "There are not Online GMs at this moment!";
}
else
{
for (L2PcInstance player: L2World.getInstance().getAllGMs())
{
msg += player.getName();
msg += "<br>";
}
}
return msg;
}
/**
* @param bossId
* @return
*/
private static String bossStatus(int bossId)
{
long delay = GrandBossManager.getInstance().getStatsSet(bossId).getLong("respawn_time");
if (delay <= System.currentTimeMillis())
{
return "<font color=\"9CC300\">Alive</font>";
}
else
{
return "<font color=\"ff0000\">Dead</font>";
}
}
/**
* @param activeChar
* @return
*/
private String getCharList(L2PcInstance activeChar)
{
String result="";
String repCharAcc=activeChar.getAccountName();
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT char_name FROM characters WHERE account_name=?");
statement.setString(1, repCharAcc);
ResultSet rset = statement.executeQuery();
while (rset.next())
{
if (activeChar.getName().compareTo(rset.getString(1)) != 0)
result += rset.getString(1)+";";
}
rset.close();
statement.close();
}
catch (SQLException e)
{
e.printStackTrace();
return result;
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
return result;
}
public static TopBBSManager getInstance()
{
return SingletonHolder.INSTANCE;
}
@SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final TopBBSManager INSTANCE = new TopBBSManager();
}
}