Index: dist/game/config/SmartCB.properties
===================================================================
--- dist/game/config/SmartCB.properties (revision 0)
+++ dist/game/config/SmartCB.properties (working copy)
@@ -0,0 +1,33 @@
+# ---------------------------------------------------------------------------
+# Smart CommunityBoard Settings
+# ---------------------------------------------------------------------------
+# This properties file is solely for the Smart CB modifications.
+# The Smart CB has been created by Darule.
+
+# ---------------------------------------------------------------------------
+# Top Players Options
+# ---------------------------------------------------------------------------
+# Explanation 1
+# Default value 19
+TopPlayerRowHeight = 19
+
+# Here you can specify the amount of the results that will be displayed.
+# Default value 20
+TopPlayerResults = 20
+
+# Explanation 1
+# Default value 17
+RaidListRowHeight = 17
+
+# Here you can specify the amount of the results that will be displayed.
+# Default value 20 , max is 26. If you change this you have to check the Raids Pagination because some pages might be empty.
+RaidListResults = 20
+
+# If you enable this option Raid List results will be sorted using asceding level (Smaller level raids will appear 1st)
+# Default = True
+RaidListSortAsc = True
+
+# If you enable this option on the stat page 2 rows will appear under Players Online on stats page.
+# Real active players and detached players.
+# Default = True
+AllowRealOnlineStats = True
\ No newline at end of file
Index: java/com/l2jserver/Config.java
===================================================================
--- java/com/l2jserver/Config.java (revision 5370)
+++ java/com/l2jserver/Config.java (working copy)
@@ -90,8 +90,19 @@
public static final String SECURITY_CONFIG_FILE = "./config/security.properties";
public static final String EMAIL_CONFIG_FILE = "./config/email.properties";
public static final String CH_SIEGE_FILE = "./config/ConquerableHallSiege.properties";
+ public static final String SMART_CB = "./config/SmartCB.properties";
// --------------------------------------------------
+ // Smart Community Board Definitions
+ // --------------------------------------------------
+ public static int TOP_PLAYER_ROW_HEIGHT;
+ public static int TOP_PLAYER_RESULTS;
+ public static int RAID_LIST_ROW_HEIGHT;
+ public static int RAID_LIST_RESULTS;
+ public static boolean RAID_LIST_SORT_ASC;
+ public static boolean ALLOW_REAL_ONLINE_STATS;
+
+ // --------------------------------------------------
// L2J Variable Definitions
// --------------------------------------------------
public static boolean ALT_GAME_DELEVEL;
@@ -1260,6 +1271,25 @@
throw new Error("Failed to Load " + COMMUNITY_CONFIGURATION_FILE + " File.");
}
+ // Load Smart CB Properties file (if exists)
+ final File smartcb = new File(SMART_CB);
+ try (InputStream is = new FileInputStream(smartcb))
+ {
+ L2Properties smartCB = new L2Properties();
+ smartCB.load(is);
+ TOP_PLAYER_ROW_HEIGHT = Integer.parseInt(smartCB.getProperty("TopPlayerRowHeight", "19"));
+ TOP_PLAYER_RESULTS = Integer.parseInt(smartCB.getProperty("TopPlayerResults", "20"));
+ RAID_LIST_ROW_HEIGHT = Integer.parseInt(smartCB.getProperty("RaidListRowHeight", "18"));
+ RAID_LIST_RESULTS = Integer.parseInt(smartCB.getProperty("RaidListResults", "20"));
+ RAID_LIST_SORT_ASC = Boolean.parseBoolean(smartCB.getProperty("RaidListSortAsc", "True"));
+ ALLOW_REAL_ONLINE_STATS = Boolean.parseBoolean(smartCB.getProperty("AllowRealOnlineStats", "True"));
+ }
+ catch (Exception e)
+ {
+ _log.warning("Config: " + e.getMessage());
+ throw new Error("Failed to Load " + SMART_CB + " File.");
+ }
+
// Load Feature L2Properties file (if exists)
final File feature = new File(FEATURE_CONFIG_FILE);
try (InputStream is = new FileInputStream(feature))
Index: java/com/l2jserver/gameserver/communitybbs/BB/Forum.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/BB/Forum.java (revision 5370)
+++ java/com/l2jserver/gameserver/communitybbs/BB/Forum.java (working copy)
@@ -292,7 +292,7 @@
*/
public void vload()
{
- if (!_loaded)
+ if (_loaded == false)
{
load();
getChildren();
Index: java/com/l2jserver/gameserver/communitybbs/CastleStatus.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/CastleStatus.java (revision 0)
+++ java/com/l2jserver/gameserver/communitybbs/CastleStatus.java (working copy)
@@ -0,0 +1,102 @@
+package com.l2jserver.gameserver.communitybbs;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.l2jserver.L2DatabaseFactory;
+
+import javolution.text.TextBuilder;
+
+public class CastleStatus
+{
+ private TextBuilder _playerList = new TextBuilder();
+
+ public CastleStatus()
+ {
+ loadFromDB();
+ }
+
+ @SuppressWarnings("null")
+ private void loadFromDB()
+ {
+ Connection con = null;
+
+ try
+ {
+ con = L2DatabaseFactory.getInstance().getConnection();
+
+ for (int i = 1; i < 9; i++)
+ {
+ PreparedStatement statement = con.prepareStatement("SELECT clan_name, clan_level FROM clan_data WHERE hasCastle=" + i + ";");
+ ResultSet result = statement.executeQuery();
+
+ PreparedStatement statement2 = con.prepareStatement("SELECT name, siegeDate, taxPercent FROM castle WHERE id=" + i + ";");
+ ResultSet result2 = statement2.executeQuery();
+
+ while (result.next())
+ {
+ String owner = result.getString("clan_name");
+ int level = result.getInt("clan_level");
+
+ while (result2.next())
+ {
+ String name = result2.getString("name");
+ long someLong = result2.getLong("siegeDate");
+ int tax = result2.getInt("taxPercent");
+ Date anotherDate = new Date(someLong);
+ String DATE_FORMAT = "dd-MMM-yyyy HH:mm";
+ SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
+
+ addCastleToList(name, owner, level, tax, sdf.format(anotherDate));
+ }
+
+ result2.close();
+ statement2.close();
+ }
+
+ result.close();
+ statement.close();
+ }
+ }
+
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ finally
+ {
+ try
+ {
+ con.close();
+ }
+ catch (Exception e)
+ {
+ }
+ }
+ }
+
+ private void addCastleToList(String name, String owner, int level, int tax, String siegeDate)
+ {
+ _playerList.append("<table border=0 cellspacing=0 cellpadding=2 width=750>");
+ _playerList.append("<tr>");
+ _playerList.append("<td FIXWIDTH=10></td>");
+ _playerList.append("<td FIXWIDTH=100>" + name + "</td>");
+ _playerList.append("<td FIXWIDTH=100>" + owner + "</td>");
+ _playerList.append("<td FIXWIDTH=80>" + level + "</td>");
+ _playerList.append("<td FIXWIDTH=40>" + tax + "</td>");
+ _playerList.append("<td FIXWIDTH=180>" + siegeDate + "</td>");
+ _playerList.append("<td FIXWIDTH=5></td>");
+ _playerList.append("</tr>");
+ _playerList.append("</table>");
+ _playerList.append("<img src=\"L2UI.Squaregray\" width=\"740\" height=\"1\">");
+ }
+
+ public String loadCastleList()
+ {
+ return _playerList.toString();
+ }
+}
Index: java/com/l2jserver/gameserver/communitybbs/ClanList.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/ClanList.java (revision 0)
+++ java/com/l2jserver/gameserver/communitybbs/ClanList.java (working copy)
@@ -0,0 +1,116 @@
+package com.l2jserver.gameserver.communitybbs;
+
+import com.l2jserver.L2DatabaseFactory;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import javolution.text.TextBuilder;
+
+public class ClanList
+{
+ private TextBuilder _clanList = new TextBuilder();
+
+ public ClanList(int type)
+ {
+ loadFromDB(type);
+ }
+
+ private void loadFromDB(int type)
+ {
+ Connection con = null;
+ int stpoint = 0;
+ int results = 20;
+ String castlename = "";
+ String allystatus = "";
+ String leadername = "";
+ for (int count = 1; count != type; count++)
+ {
+ stpoint += 20;
+ }
+
+ try
+ {
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement("SELECT clan_id, clan_name, ally_name, leader_id, clan_level, reputation_score, hasCastle, ally_id FROM clan_data ORDER BY `clan_level` desc Limit " + stpoint + ", " + results);
+ ResultSet result = statement.executeQuery();
+ int pos = 0;
+
+ while (result.next())
+ {
+ int clanid = result.getInt("leader_id");
+ String clan = result.getString("clan_name");
+ String ally = result.getString("ally_name");
+ int clanleader = result.getInt("leader_id");
+ int clanlevel = result.getInt("clan_level");
+ int reputation = result.getInt("reputation_score");
+ int hascastle = result.getInt("hasCastle");
+ int allyid = result.getInt("ally_id");
+ if (allyid != 0)
+ {
+ if (allyid == clanid)
+ allystatus = "Alliance Leader";
+ allystatus = "Affiliated Clan";
+ }
+ else
+ {
+ allystatus = "-";
+ ally = "[no-ally]";
+ }
+ if (hascastle != 0)
+ {
+ PreparedStatement statement2 = con.prepareStatement("SELECT name FROM castle WHERE id=" + hascastle);
+ ResultSet result2 = statement2.executeQuery();
+ if (result2.next())
+ castlename = result2.getString("name");
+ result2.close();
+ statement2.close();
+ }
+ else
+ castlename = "[none]";
+ PreparedStatement statement3 = con.prepareStatement("SELECT char_name FROM characters WHERE charId=" + clanleader);
+ ResultSet result3 = statement3.executeQuery();
+
+ if (result3.next())
+ leadername = result3.getString("char_name");
+ result3.close();
+ statement3.close();
+ pos++;
+ addClanToList(pos, clan, ally, leadername, clanlevel, reputation, castlename, allystatus);
+ }
+ result.close();
+ statement.close();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ L2DatabaseFactory.close(con);
+ }
+ }
+
+ private void addClanToList(int pos, String clan, String ally, String leadername, int clanlevel, int reputation, String castlename, String allystatus)
+ {
+ _clanList.append("<table border=0 cellspacing=0 cellpadding=2 width=760>");
+ _clanList.append("<tr>");
+ _clanList.append("<td FIXWIDTH=5></td>");
+ _clanList.append("<td FIXWIDTH=20>" + pos + "</td>");
+ _clanList.append("<td FIXWIDTH=90>" + clan + "</td>");
+ _clanList.append("<td FIXWIDTH=90>" + ally + "</td>");
+ _clanList.append("<td FIXWIDTH=85>" + leadername + "</td>");
+ _clanList.append("<td FIXWIDTH=45 align=center>" + clanlevel + "</td>");
+ _clanList.append("<td FIXWIDTH=70 align=center>" + reputation + "</td>");
+ _clanList.append("<td FIXWIDTH=50 align=center>" + castlename + "</td>");
+ _clanList.append("<td FIXWIDTH=70 align=center>" + allystatus + "</td>");
+ _clanList.append("<td FIXWIDTH=5></td>");
+ _clanList.append("</tr>");
+ _clanList.append("</table>");
+ _clanList.append("<img src=\"L2UI.Squaregray\" width=\"740\" height=\"1\">");
+ }
+
+ public String loadClanList()
+ {
+ return _clanList.toString();
+ }
+}
Index: java/com/l2jserver/gameserver/communitybbs/CommunityBoard.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/CommunityBoard.java (revision 5370)
+++ java/com/l2jserver/gameserver/communitybbs/CommunityBoard.java (working copy)
@@ -27,6 +27,10 @@
public class CommunityBoard
{
+ private CommunityBoard()
+ {
+ }
+
public static CommunityBoard getInstance()
{
return SingletonHolder._instance;
@@ -144,6 +148,7 @@
}
}
+ @SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final CommunityBoard _instance = new CommunityBoard();
Index: java/com/l2jserver/gameserver/communitybbs/GrandBossList.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/GrandBossList.java (revision 0)
+++ java/com/l2jserver/gameserver/communitybbs/GrandBossList.java (working copy)
@@ -0,0 +1,84 @@
+package com.l2jserver.gameserver.communitybbs;
+
+import com.l2jserver.L2DatabaseFactory;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import javolution.text.TextBuilder;
+
+public class GrandBossList
+{
+ private TextBuilder _GrandBossList = new TextBuilder();
+
+ public GrandBossList()
+ {
+ loadFromDB();
+ }
+
+ private void loadFromDB()
+ {
+ Connection con = null;
+ int pos = 0;
+
+ try
+ {
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement("SELECT boss_id, status FROM grandboss_data");
+ ResultSet result = statement.executeQuery();
+
+ nextnpc:
+ while (result.next())
+ {
+ int npcid = result.getInt("boss_id");
+ int status = result.getInt("status");
+ if (npcid == 29066 || npcid == 29067 || npcid == 29068 || npcid == 29118)
+ continue nextnpc;
+
+ PreparedStatement statement2 = con.prepareStatement("SELECT name FROM npc WHERE id=" + npcid);
+ ResultSet result2 = statement2.executeQuery();
+
+ while (result2.next())
+ {
+ pos++;
+ boolean rstatus = false;
+ if (status == 0)
+ rstatus = true;
+ String npcname = result2.getString("name");
+ addGrandBossToList(pos, npcname, rstatus);
+ }
+ result2.close();
+ statement2.close();
+ }
+
+ result.close();
+ statement.close();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ L2DatabaseFactory.close(con);
+ }
+ }
+
+ private void addGrandBossToList(int pos, String npcname, boolean rstatus)
+ {
+ _GrandBossList.append("<table border=0 cellspacing=0 cellpadding=2>");
+ _GrandBossList.append("<tr>");
+ _GrandBossList.append("<td FIXWIDTH=5></td>");
+ _GrandBossList.append("<td FIXWIDTH=50>" + pos + "</td>");
+ _GrandBossList.append("<td FIXWIDTH=130>" + npcname + "</td>");
+ _GrandBossList.append("<td FIXWIDTH=60 align=center>" + ((rstatus) ? "<font color=99FF00>Alive</font>" : "<font color=CC0000>Dead</font>") + "</td>");
+ _GrandBossList.append("<td FIXWIDTH=5></td>");
+ _GrandBossList.append("</tr>");
+ _GrandBossList.append("</table>");
+ _GrandBossList.append("<img src=\"L2UI.Squaregray\" width=\"250\" height=\"1\">");
+ }
+
+ public String loadGrandBossList()
+ {
+ return _GrandBossList.toString();
+ }
+}
Index: java/com/l2jserver/gameserver/communitybbs/HeroeList.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/HeroeList.java (revision 0)
+++ java/com/l2jserver/gameserver/communitybbs/HeroeList.java (working copy)
@@ -0,0 +1,197 @@
+package com.l2jserver.gameserver.communitybbs;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.Map;
+
+import com.l2jserver.L2DatabaseFactory;
+
+import javolution.text.TextBuilder;
+import javolution.util.FastMap;
+
+public class HeroeList
+{
+ private int _posId;
+ private TextBuilder _heroeList = new TextBuilder();
+
+ public HeroeList()
+ {
+ loadFromDB();
+ }
+
+ @SuppressWarnings("null")
+ private void loadFromDB()
+ {
+ java.sql.Connection con = null;
+ try
+ {
+ _posId = 0;
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement("SELECT h.count, h.played, ch.char_name, ch.base_class, ch.online, cl.clan_name, cl.ally_name FROM heroes h LEFT JOIN characters ch ON ch.charId=h.charId LEFT OUTER JOIN clan_data cl ON cl.clan_id=ch.clanid ORDER BY h.count DESC, ch.char_name ASC LIMIT 20");
+
+ ResultSet result = statement.executeQuery();
+
+ while (result.next())
+ {
+ boolean status = false;
+ _posId = _posId + 1;
+
+ if (result.getInt("online") == 1)
+ status = true;
+
+ addPlayerToList(_posId, result.getInt("count"), result.getInt("played"), result.getString("char_name"), result.getInt("base_class"), result.getString("clan_name"), result.getString("ally_name"), status);
+ }
+ result.close();
+ statement.close();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ try
+ {
+ con.close();
+ }
+ catch (Exception e)
+ {
+ }
+ }
+ }
+
+ public String loadHeroeList()
+ {
+ return _heroeList.toString();
+ }
+
+ private void addPlayerToList(int objId, int count, int played, String name, int ChrClass, String clan, String ally, boolean isOnline)
+ {
+ _heroeList.append("<table border=0 cellspacing=0 cellpadding=2 width=750>");
+ _heroeList.append("<tr>");
+ _heroeList.append("<td FIXWIDTH=10></td>");
+ _heroeList.append("<td FIXWIDTH=40>" + objId + ".</td>");
+ _heroeList.append("<td FIXWIDTH=150>" + name + "</td>");
+ _heroeList.append("<td FIXWIDTH=160>" + className(ChrClass) + "</td>");
+ _heroeList.append("<td FIXWIDTH=80>" + count + "</td>");
+ _heroeList.append("<td FIXWIDTH=80>" + played + "</td>");
+ _heroeList.append("<td FIXWIDTH=160>" + clan + "</td>");
+ _heroeList.append("<td FIXWIDTH=160>" + ally + "</td>");
+ _heroeList.append("<td FIXWIDTH=70>" + ((isOnline) ? "<font color=99FF00>Online</font>" : "<font color=CC0000>Offline</font>") + "</td>");
+ _heroeList.append("<td FIXWIDTH=5></td>");
+ _heroeList.append("</tr>");
+ _heroeList.append("</table>");
+ _heroeList.append("<img src=\"L2UI.Squaregray\" width=\"740\" height=\"1\">");
+ }
+
+ public final static String className(int classId)
+ {
+ Map<Integer, String> classList;
+ classList = new FastMap<Integer, String>();
+ classList.put(0, "Fighter");
+ classList.put(1, "Warrior");
+ classList.put(2, "Gladiator");
+ classList.put(3, "Warlord");
+ classList.put(4, "Knight");
+ classList.put(5, "Paladin");
+ classList.put(6, "Dark Avenger");
+ classList.put(7, "Rogue");
+ classList.put(8, "Treasure Hunter");
+ classList.put(9, "Hawkeye");
+ classList.put(10, "Mage");
+ classList.put(11, "Wizard");
+ classList.put(12, "Sorcerer");
+ classList.put(13, "Necromancer");
+ classList.put(14, "Warlock");
+ classList.put(15, "Cleric");
+ classList.put(16, "Bishop");
+ classList.put(17, "Prophet");
+ classList.put(18, "Elven Fighter");
+ classList.put(19, "Elven Knight");
+ classList.put(20, "Temple Knight");
+ classList.put(21, "Swordsinger");
+ classList.put(22, "Elven Scout");
+ classList.put(23, "Plains Walker");
+ classList.put(24, "Silver Ranger");
+ classList.put(25, "Elven Mage");
+ classList.put(26, "Elven Wizard");
+ classList.put(27, "Spellsinger");
+ classList.put(28, "Elemental Summoner");
+ classList.put(29, "Oracle");
+ classList.put(30, "Elder");
+ classList.put(31, "Dark Fighter");
+ classList.put(32, "Palus Knightr");
+ classList.put(33, "Shillien Knight");
+ classList.put(34, "Bladedancer");
+ classList.put(35, "Assasin");
+ classList.put(36, "Abyss Walker");
+ classList.put(37, "Phantom Ranger");
+ classList.put(38, "Dark Mage");
+ classList.put(39, "Dark Wizard");
+ classList.put(40, "Spellhowler");
+ classList.put(41, "Phantom Summoner");
+ classList.put(42, "Shillien Oracle");
+ classList.put(43, "Shilien Elder");
+ classList.put(44, "Orc Fighter");
+ classList.put(45, "Orc Raider");
+ classList.put(46, "Destroyer");
+ classList.put(47, "Orc Monk");
+ classList.put(48, "Tyrant");
+ classList.put(49, "Orc Mage");
+ classList.put(50, "Orc Shaman");
+ classList.put(51, "Overlord");
+ classList.put(52, "Warcryer");
+ classList.put(53, "Dwarven Fighter");
+ classList.put(54, "Scavenger");
+ classList.put(55, "Bounty Hunter");
+ classList.put(56, "Artisan");
+ classList.put(57, "Warsmith");
+ classList.put(88, "Duelist");
+ classList.put(89, "Dreadnought");
+ classList.put(90, "Phoenix Knight");
+ classList.put(91, "Hell Knight");
+ classList.put(92, "Sagittarius");
+ classList.put(93, "Adventurer");
+ classList.put(94, "Archmage");
+ classList.put(95, "Soultaker");
+ classList.put(96, "Arcana Lord");
+ classList.put(97, "Cardinal");
+ classList.put(98, "Hierophant");
+ classList.put(99, "Evas Templar");
+ classList.put(100, "Sword Muse");
+ classList.put(101, "Wind Rider");
+ classList.put(102, "Moonlight Sentinel");
+ classList.put(103, "Mystic Muse");
+ classList.put(104, "Elemental Master");
+ classList.put(105, "Evas Saint");
+ classList.put(106, "Shillien Templar");
+ classList.put(107, "Spectral Dancer");
+ classList.put(108, "Ghost Hunter");
+ classList.put(109, "Ghost Sentinel");
+ classList.put(110, "Storm Screamer");
+ classList.put(111, "Spectral Master");
+ classList.put(112, "Shillien Saint");
+ classList.put(113, "Titan");
+ classList.put(114, "Grand Khavatari");
+ classList.put(115, "Dominator");
+ classList.put(116, "Doomcryer");
+ classList.put(117, "Fortune Seeker");
+ classList.put(118, "Maestro");
+ classList.put(123, "Male Soldier");
+ classList.put(124, "Female Soldier");
+ classList.put(125, "Trooper");
+ classList.put(126, "Warder");
+ classList.put(127, "Berserker");
+ classList.put(128, "Male Soulbreaker");
+ classList.put(129, "Female Soulbreaker");
+ classList.put(130, "Arbalester");
+ classList.put(131, "Doombringer");
+ classList.put(132, "Male Soulhound");
+ classList.put(133, "Female Soulhound");
+ classList.put(134, "Trickster");
+ classList.put(135, "Inspector");
+ classList.put(136, "Judicator");
+
+ return classList.get(classId);
+ }
+}
Index: java/com/l2jserver/gameserver/communitybbs/Manager/AdminBBSManager.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/Manager/AdminBBSManager.java (revision 5370)
+++ java/com/l2jserver/gameserver/communitybbs/Manager/AdminBBSManager.java (working copy)
@@ -27,6 +27,14 @@
return SingletonHolder._instance;
}
+ private AdminBBSManager()
+ {
+ }
+
+ /**
+ *
+ * @see com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager#parsecmd(java.lang.String, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
+ */
@Override
public void parsecmd(String command, L2PcInstance activeChar)
{
@@ -65,6 +73,7 @@
}
+ @SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final AdminBBSManager _instance = new AdminBBSManager();
Index: java/com/l2jserver/gameserver/communitybbs/Manager/ClanBBSManager.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/Manager/ClanBBSManager.java (revision 5370)
+++ java/com/l2jserver/gameserver/communitybbs/Manager/ClanBBSManager.java (working copy)
@@ -24,6 +24,10 @@
public class ClanBBSManager extends BaseBBSManager
{
+ private ClanBBSManager()
+ {
+ }
+
public static ClanBBSManager getInstance()
{
return SingletonHolder._instance;
@@ -274,6 +278,7 @@
clanhome(activeChar, activeChar.getClan().getClanId());
}
+ @SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final ClanBBSManager _instance = new ClanBBSManager();
Index: java/com/l2jserver/gameserver/communitybbs/Manager/ForumsBBSManager.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/Manager/ForumsBBSManager.java (revision 5370)
+++ java/com/l2jserver/gameserver/communitybbs/Manager/ForumsBBSManager.java (working copy)
@@ -41,7 +41,7 @@
return SingletonHolder._instance;
}
- protected ForumsBBSManager()
+ private ForumsBBSManager()
{
_table = new FastList<Forum>();
@@ -157,6 +157,7 @@
{
}
+ @SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final ForumsBBSManager _instance = new ForumsBBSManager();
Index: java/com/l2jserver/gameserver/communitybbs/Manager/PostBBSManager.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/Manager/PostBBSManager.java (revision 5370)
+++ java/com/l2jserver/gameserver/communitybbs/Manager/PostBBSManager.java (working copy)
@@ -32,10 +32,16 @@
public class PostBBSManager extends BaseBBSManager
{
+
private Map<Topic, Post> _postByTopic;
- protected PostBBSManager()
+ public static PostBBSManager getInstance()
{
+ return SingletonHolder._instance;
+ }
+
+ private PostBBSManager()
+ {
_postByTopic = new FastMap<Topic, Post>();
}
@@ -45,7 +51,7 @@
post = _postByTopic.get(t);
if (post == null)
{
- post = new Post(t);
+ post = load(t);
_postByTopic.put(t, post);
}
return post;
@@ -67,6 +73,17 @@
}
}
+ /**
+ * @param t
+ * @return
+ */
+ private Post load(Topic t)
+ {
+ Post p;
+ p = new Post(t);
+ return p;
+ }
+
@Override
public void parsecmd(String command, L2PcInstance activeChar)
{
@@ -288,34 +305,31 @@
}
else
{
- final Post p = getGPosttByTopic(t);
+ CPost cp = null;
+ Post p = getGPosttByTopic(t);
if (p != null)
{
- final CPost cp = p.getCPost(idp);
- if (cp == null)
- {
- ShowBoard sb = new ShowBoard("<html><body><br><br><center>the post: " + idp
- + " does not exist !</center><br><br></body></html>", "101");
- activeChar.sendPacket(sb);
- activeChar.sendPacket(new ShowBoard(null, "102"));
- activeChar.sendPacket(new ShowBoard(null, "103"));
- }
- else
- {
- p.getCPost(idp).postTxt = ar4;
- p.updatetxt(idp);
- parsecmd("_bbsposts;read;" + f.getID() + ";" + t.getID(), activeChar);
- }
+ cp = p.getCPost(idp);
}
+ if (cp == null)
+ {
+ ShowBoard sb = new ShowBoard("<html><body><br><br><center>the post: " + idp
+ + " does not exist !</center><br><br></body></html>", "101");
+ activeChar.sendPacket(sb);
+ activeChar.sendPacket(new ShowBoard(null, "102"));
+ activeChar.sendPacket(new ShowBoard(null, "103"));
+ }
+ else
+ {
+ p.getCPost(idp).postTxt = ar4;
+ p.updatetxt(idp);
+ parsecmd("_bbsposts;read;" + f.getID() + ";" + t.getID(), activeChar);
+ }
}
}
}
- public static PostBBSManager getInstance()
- {
- return SingletonHolder._instance;
- }
-
+ @SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final PostBBSManager _instance = new PostBBSManager();
Index: java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java (revision 5370)
+++ java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java (working copy)
@@ -54,6 +54,10 @@
}
};
+ private RegionBBSManager()
+ {
+ }
+
@Override
public void parsecmd(String command, L2PcInstance activeChar)
{
@@ -564,6 +568,7 @@
return null;
}
+ @SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final RegionBBSManager _instance = new RegionBBSManager();
Index: java/com/l2jserver/gameserver/communitybbs/Manager/TopBBSManager.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/Manager/TopBBSManager.java (revision 5370)
+++ java/com/l2jserver/gameserver/communitybbs/Manager/TopBBSManager.java (working copy)
@@ -1,66 +1,128 @@
-/*
- * 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.io.File;
import java.util.StringTokenizer;
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.GameTimeController;
import com.l2jserver.gameserver.cache.HtmCache;
+import com.l2jserver.gameserver.communitybbs.CastleStatus;
+import com.l2jserver.gameserver.communitybbs.ClanList;
+import com.l2jserver.gameserver.communitybbs.GrandBossList;
+import com.l2jserver.gameserver.communitybbs.HeroeList;
+import com.l2jserver.gameserver.communitybbs.RaidList;
+import com.l2jserver.gameserver.communitybbs.TopPlayers;
+import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
-
public class TopBBSManager extends BaseBBSManager
{
+
+ private TopBBSManager()
+ {
+ }
+
@Override
public void parsecmd(String command, L2PcInstance activeChar)
{
- if (command.equals("_bbstop"))
+ String path = "data/html/CommunityBoard/";
+ String filepath = "";
+ String content = "";
+
+ if (command.equals("_bbstop") | command.equals("_bbshome"))
{
- String content = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/index.htm");
- if (content == null)
- {
- content = "<html><body><br><br><center>404 :File not found: 'data/html/CommunityBoard/index.htm' </center></body></html>";
- }
+ filepath = path + "index.htm";
+ content = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), filepath);
separateAndSend(content, activeChar);
}
- else if (command.equals("_bbshome"))
- {
- String content = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/index.htm");
- if (content == null)
- {
- content = "<html><body><br><br><center>404 :File not found: 'data/html/CommunityBoard/index.htm' </center></body></html>";
- }
- separateAndSend(content, activeChar);
- }
else if (command.startsWith("_bbstop;"))
{
StringTokenizer st = new StringTokenizer(command, ";");
st.nextToken();
- int idp = Integer.parseInt(st.nextToken());
- String content = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/" + idp + ".htm");
- if (content == null)
+ String file = st.nextToken();
+ filepath = path + file + ".htm";
+ File filecom = new File(filepath);
+
+ if (!(filecom.exists()))
{
- content = "<html><body><br><br><center>404 :File not found: 'data/html/CommunityBoard/" + idp
- + ".htm' </center></body></html>";
+ content = "<html><body><br><br><center>The command " + command + " points to file(" + filepath + ") that NOT exists.</center></body></html>";
+ separateAndSend(content, activeChar);
+ return;
}
+ content = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), filepath);
+
+ if (content.isEmpty())
+ content = "<html><body><br><br><center>Content Empty: The command " + command + " points to an invalid or empty html file(" + filepath + ").</center></body></html>";
+
+ switch (file)
+ {
+ case "toppvp":
+ TopPlayers pvp = new TopPlayers(file);
+ content = content.replaceAll("%toppvp%", pvp.loadTopList());
+ break;
+ case "toppk":
+ TopPlayers pk = new TopPlayers(file);
+ content = content.replaceAll("%toppk%", pk.loadTopList());
+ break;
+ case "toprbrank":
+ TopPlayers raid = new TopPlayers(file);
+ content = content.replaceAll("%toprbrank%", raid.loadTopList());
+ break;
+ case "topadena":
+ TopPlayers adena = new TopPlayers(file);
+ content = content.replaceAll("%topadena%", adena.loadTopList());
+ break;
+ case "toponline":
+ TopPlayers online = new TopPlayers(file);
+ content = content.replaceAll("%toponline%", online.loadTopList());
+ break;
+ case "heroes":
+ HeroeList hr = new HeroeList();
+ content = content.replaceAll("%heroelist%", hr.loadHeroeList());
+ break;
+ case "castle":
+ CastleStatus status = new CastleStatus();
+ content = content.replaceAll("%castle%", status.loadCastleList());
+ break;
+ case "boss":
+ GrandBossList gb = new GrandBossList();
+ content = content.replaceAll("%gboss%", gb.loadGrandBossList());
+ break;
+ case "stats":
+ content = content.replace("%online%", Integer.toString(L2World.getInstance().getAllPlayersCount()));
+ content = content.replace("%servercapacity%", Integer.toString(Config.MAXIMUM_ONLINE_USERS));
+ content = content.replace("%serverruntime%", getServerRunTime());
+ if (Config.ALLOW_REAL_ONLINE_STATS)
+ content = content.replace("%serveronline%", getRealOnline());
+ else
+ content = content.replace("%serveronline%", "");
+ break;
+ default:
+ break;
+
+ }
+ if (file.startsWith("clan"))
+ {
+ int cid = Integer.parseInt(file.substring(4));
+ ClanList cl = new ClanList(cid);
+ content = content.replaceAll("%clanlist%", cl.loadClanList());
+ }
+ if (file.startsWith("raid"))
+ {
+ String rfid = file.substring(4);
+ RaidList rd = new RaidList(rfid);
+ content = content.replaceAll("%raidlist%", rd.loadRaidList());
+ }
+ if (content.isEmpty())
+ {
+ content = "<html><body><br><br><center>404 :File not found or empty: " + filepath + " your command is " + command + "</center></body></html>";
+ }
separateAndSend(content, activeChar);
}
else
{
- ShowBoard sb = new ShowBoard("<html><body><br><br><center>the command: " + command
- + " is not implemented yet</center><br><br></body></html>", "101");
+ ShowBoard sb = new ShowBoard("<html><body><br><br><center>the command: " + command + " is not implemented yet</center><br><br></body></html>", "101");
activeChar.sendPacket(sb);
activeChar.sendPacket(new ShowBoard(null, "102"));
activeChar.sendPacket(new ShowBoard(null, "103"));
@@ -77,8 +139,34 @@
return SingletonHolder._instance;
}
+ @SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final TopBBSManager _instance = new TopBBSManager();
}
+
+ public String getServerRunTime()
+ {
+ int timeSeconds = (GameTimeController.getGameTicks() - 36000) / 10;
+ String timeResult = "";
+ if (timeSeconds >= 86400)
+ timeResult = Integer.toString(timeSeconds / 86400) + " Days " + Integer.toString((timeSeconds % 86400) / 3600) + " hours";
+ else
+ timeResult = Integer.toString(timeSeconds / 3600) + " Hours " + Integer.toString((timeSeconds % 3600) / 60) + " mins";
+ return timeResult;
+ }
+
+ public String getRealOnline()
+ {
+ int counter = 0;
+ for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayersArray())
+ {
+ if (onlinePlayer.isOnline() && (onlinePlayer.getClient() != null && !onlinePlayer.getClient().isDetached()))
+ {
+ counter++;
+ }
+ }
+ String realOnline = "<tr><td fixwidth=11></td><td FIXWIDTH=280>Players Active</td><td FIXWIDTH=470><font color=26e600>" + counter + "</font></td></tr>" + "<tr><td fixwidth=11></td><td FIXWIDTH=280>Players Shops</td><td FIXWIDTH=470><font color=26e600>" + (L2World.getInstance().getAllPlayersCount() - counter) + "</font></td></tr>";
+ return realOnline;
+ }
}
\ No newline at end of file
Index: java/com/l2jserver/gameserver/communitybbs/Manager/TopicBBSManager.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/Manager/TopicBBSManager.java (revision 5370)
+++ java/com/l2jserver/gameserver/communitybbs/Manager/TopicBBSManager.java (working copy)
@@ -42,7 +42,7 @@
return SingletonHolder._instance;
}
- protected TopicBBSManager()
+ private TopicBBSManager()
{
_table = new FastList<Topic>();
_maxId = new FastMap<Forum, Integer>().shared();
@@ -442,6 +442,7 @@
separateAndSend(html.toString(), activeChar);
}
+ @SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final TopicBBSManager _instance = new TopicBBSManager();
Index: java/com/l2jserver/gameserver/communitybbs/RaidList.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/RaidList.java (revision 0)
+++ java/com/l2jserver/gameserver/communitybbs/RaidList.java (working copy)
@@ -0,0 +1,101 @@
+package com.l2jserver.gameserver.communitybbs;
+
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import javolution.text.TextBuilder;
+
+public class RaidList
+{
+ private TextBuilder _raidList = new TextBuilder();
+
+ public RaidList(String rfid)
+ {
+ loadFromDB(rfid);
+ }
+
+ private void loadFromDB(String rfid)
+ {
+ int type = Integer.parseInt(rfid);
+ Connection con = null;
+ int stpoint = 0;
+ int pos = 0;
+ String sort = "";
+ if (Config.RAID_LIST_SORT_ASC)
+ sort = "ASC";
+ else
+ sort = "DESC";
+ for (int count = 1; count != type; count++)
+ {
+ stpoint += Config.RAID_LIST_RESULTS;
+ }
+
+
+ try
+ {
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement("SELECT id, name, level FROM npc WHERE type='L2RaidBoss' AND EXISTS (SELECT * FROM raidboss_spawnlist WHERE raidboss_spawnlist.boss_id = npc.id) ORDER BY `level` " + sort + " Limit " + stpoint + ", " + Config.RAID_LIST_RESULTS);
+ ResultSet result = statement.executeQuery();
+ pos = stpoint;
+
+ while (result.next())
+ {
+ int npcid = result.getInt("id");
+ String npcname = result.getString("name");
+ int rlevel = result.getInt("level");
+ PreparedStatement statement2 = con.prepareStatement("SELECT respawn_time, respawn_min_delay, respawn_max_delay FROM raidboss_spawnlist WHERE boss_id=" + npcid);
+ ResultSet result2 = statement2.executeQuery();
+
+ while (result2.next())
+ {
+ pos++;
+ boolean rstatus = false;
+ long respawn = result2.getLong("respawn_time");
+ if (respawn == 0)
+ rstatus = true;
+ int mindelay = result2.getInt("respawn_min_delay");
+ int maxdelay = result2.getInt("respawn_max_delay");
+ mindelay = mindelay / 60 / 60;
+ maxdelay = maxdelay / 60 / 60;
+ addRaidToList(pos, npcname, rlevel, mindelay, maxdelay, rstatus);
+ }
+ result2.close();
+ statement2.close();
+ }
+
+ result.close();
+ statement.close();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ L2DatabaseFactory.close(con);
+ }
+ }
+
+ private void addRaidToList(int pos, String npcname, int rlevel, int mindelay, int maxdelay, boolean rstatus)
+ {
+ _raidList.append("<table border=0 cellspacing=0 cellpadding=2 width=750 height="+Config.RAID_LIST_ROW_HEIGHT+">");
+ _raidList.append("<tr>");
+ _raidList.append("<td FIXWIDTH=5></td>");
+ _raidList.append("<td FIXWIDTH=20>" + pos + "</td>");
+ _raidList.append("<td FIXWIDTH=270>" + npcname + "</td>");
+ _raidList.append("<td FIXWIDTH=50>" + rlevel + "</td>");
+ _raidList.append("<td FIXWIDTH=120 align=center>" + mindelay + " - " + maxdelay + "</td>");
+ _raidList.append("<td FIXWIDTH=50 align=center>" + ((rstatus) ? "<font color=99FF00>Alive</font>" : "<font color=CC0000>Dead</font>") + "</td>");
+ _raidList.append("<td FIXWIDTH=5></td>");
+ _raidList.append("</tr>");
+ _raidList.append("</table>");
+ _raidList.append("<img src=\"L2UI.Squaregray\" width=\"740\" height=\"1\">");
+ }
+
+ public String loadRaidList()
+ {
+ return _raidList.toString();
+ }
+}
Index: java/com/l2jserver/gameserver/communitybbs/TopPlayers.java
===================================================================
--- java/com/l2jserver/gameserver/communitybbs/TopPlayers.java (revision 0)
+++ java/com/l2jserver/gameserver/communitybbs/TopPlayers.java (working copy)
@@ -0,0 +1,243 @@
+package com.l2jserver.gameserver.communitybbs;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.Map;
+
+import javolution.text.TextBuilder;
+import javolution.util.FastMap;
+
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+
+public class TopPlayers
+{
+ private int pos;
+ private TextBuilder _topList = new TextBuilder();
+ String sort = "";
+
+ public TopPlayers(String file)
+ {
+ loadDB(file);
+ }
+
+ @SuppressWarnings("null")
+ private void loadDB(String file)
+ {
+ Connection con = null;
+
+ switch (file)
+ {
+ case "toppvp":
+ sort = "pvpkills";
+ break;
+ case "toppk":
+ sort = "pkkills";
+ break;
+ case "topadena":
+ sort = "SUM(it.count)";
+ break;
+ case "toprbrank":
+ sort = "SUM(chr.points)";
+ break;
+ case "toponline":
+ sort = "onlinetime";
+ break;
+ default:
+ break;
+
+ }
+
+ try
+ {
+ pos = 0;
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement("SELECT SUM(chr.points), SUM(it.count), ch.char_name, ch.pkkills, ch.pvpkills, ch.onlinetime, ch.base_class, ch.online FROM characters ch LEFT JOIN character_raid_points chr ON ch.charId=chr.charId LEFT OUTER JOIN items it ON ch.charId=it.owner_id WHERE item_id=57 GROUP BY ch.charId ORDER BY " + sort + " DESC LIMIT " + Config.TOP_PLAYER_RESULTS);
+
+ ResultSet result = statement.executeQuery();
+
+ while (result.next())
+ {
+ boolean status = false;
+ pos++;
+
+ if (result.getInt("online") == 1)
+ status = true;
+ String timeon = getPlayerRunTime(result.getInt("ch.onlinetime"));
+ String adenas = getAdenas(result.getInt("SUM(it.count)"));
+
+ addChar(pos, result.getString("ch.char_name"), result.getInt("base_class"), result.getInt("ch.pvpkills"), result.getInt("ch.pkkills"), result.getInt("SUM(chr.points)"), adenas, timeon, status);
+ }
+
+ result.close();
+ statement.close();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ try
+ {
+ con.close();
+ }
+ catch (Exception e)
+ {
+
+ }
+ }
+ }
+
+ public String loadTopList()
+ {
+ return _topList.toString();
+ }
+
+ private void addChar(int position, String name, int classid, int pvp, int pk, int raid, String adenas, String online, boolean isOnline)
+ {
+ _topList.append("<table border=0 cellspacing=0 cellpadding=2 bgcolor=050505 height=" + Config.TOP_PLAYER_ROW_HEIGHT + "><tr><td FIXWIDTH=5></td>");
+ _topList.append("<td FIXWIDTH=20>" + position + ".</td>");
+ _topList.append("<td FIXWIDTH=180>" + name + "</td>");
+ _topList.append("<td FIXWIDTH=175>" + className(classid) + "</td>");
+ _topList.append("<td FIXWIDTH=60>" + pvp + "</td>");
+ _topList.append("<td FIXWIDTH=60>" + pk + "</td>");
+ _topList.append("<td FIXWIDTH=65>" + raid + "</td>");
+ _topList.append("<td FIXWIDTH=150>" + adenas + "</td>");
+ _topList.append("<td FIXWIDTH=148>" + online + "</td>");
+ _topList.append("<td FIXWIDTH=65>" + ((isOnline) ? "<font color=99FF00>Online</font>" : "<font color=CC0000>Offline</font>") + "</td>");
+ _topList.append("</tr></table><img src=\"L2UI.Squaregray\" width=\"758\" height=\"1\">");
+
+ }
+
+ public final static String className(int classid)
+ {
+ Map<Integer, String> classList;
+ classList = new FastMap<Integer, String>();
+ classList.put(0, "Fighter");
+ classList.put(1, "Warrior");
+ classList.put(2, "Gladiator");
+ classList.put(3, "Warlord");
+ classList.put(4, "Knight");
+ classList.put(5, "Paladin");
+ classList.put(6, "Dark Avenger");
+ classList.put(7, "Rogue");
+ classList.put(8, "Treasure Hunter");
+ classList.put(9, "Hawkeye");
+ classList.put(10, "Mage");
+ classList.put(11, "Wizard");
+ classList.put(12, "Sorcerer");
+ classList.put(13, "Necromancer");
+ classList.put(14, "Warlock");
+ classList.put(15, "Cleric");
+ classList.put(16, "Bishop");
+ classList.put(17, "Prophet");
+ classList.put(18, "Elven Fighter");
+ classList.put(19, "Elven Knight");
+ classList.put(20, "Temple Knight");
+ classList.put(21, "Swordsinger");
+ classList.put(22, "Elven Scout");
+ classList.put(23, "Plains Walker");
+ classList.put(24, "Silver Ranger");
+ classList.put(25, "Elven Mage");
+ classList.put(26, "Elven Wizard");
+ classList.put(27, "Spellsinger");
+ classList.put(28, "Elemental Summoner");
+ classList.put(29, "Oracle");
+ classList.put(30, "Elder");
+ classList.put(31, "Dark Fighter");
+ classList.put(32, "Palus Knightr");
+ classList.put(33, "Shillien Knight");
+ classList.put(34, "Bladedancer");
+ classList.put(35, "Assasin");
+ classList.put(36, "Abyss Walker");
+ classList.put(37, "Phantom Ranger");
+ classList.put(38, "Dark Mage");
+ classList.put(39, "Dark Wizard");
+ classList.put(40, "Spellhowler");
+ classList.put(41, "Phantom Summoner");
+ classList.put(42, "Shillien Oracle");
+ classList.put(43, "Shilien Elder");
+ classList.put(44, "Orc Fighter");
+ classList.put(45, "Orc Raider");
+ classList.put(46, "Destroyer");
+ classList.put(47, "Orc Monk");
+ classList.put(48, "Tyrant");
+ classList.put(49, "Orc Mage");
+ classList.put(50, "Orc Shaman");
+ classList.put(51, "Overlord");
+ classList.put(52, "Warcryer");
+ classList.put(53, "Dwarven Fighter");
+ classList.put(54, "Scavenger");
+ classList.put(55, "Bounty Hunter");
+ classList.put(56, "Artisan");
+ classList.put(57, "Warsmith");
+ classList.put(88, "Duelist");
+ classList.put(89, "Dreadnought");
+ classList.put(90, "Phoenix Knight");
+ classList.put(91, "Hell Knight");
+ classList.put(92, "Sagittarius");
+ classList.put(93, "Adventurer");
+ classList.put(94, "Archmage");
+ classList.put(95, "Soultaker");
+ classList.put(96, "Arcana Lord");
+ classList.put(97, "Cardinal");
+ classList.put(98, "Hierophant");
+ classList.put(99, "Evas Templar");
+ classList.put(100, "Sword Muse");
+ classList.put(101, "Wind Rider");
+ classList.put(102, "Moonlight Sentinel");
+ classList.put(103, "Mystic Muse");
+ classList.put(104, "Elemental Master");
+ classList.put(105, "Evas Saint");
+ classList.put(106, "Shillien Templar");
+ classList.put(107, "Spectral Dancer");
+ classList.put(108, "Ghost Hunter");
+ classList.put(109, "Ghost Sentinel");
+ classList.put(110, "Storm Screamer");
+ classList.put(111, "Spectral Master");
+ classList.put(112, "Shillien Saint");
+ classList.put(113, "Titan");
+ classList.put(114, "Grand Khavatari");
+ classList.put(115, "Dominator");
+ classList.put(116, "Doomcryer");
+ classList.put(117, "Fortune Seeker");
+ classList.put(118, "Maestro");
+ classList.put(123, "Male Soldier");
+ classList.put(124, "Female Soldier");
+ classList.put(125, "Trooper");
+ classList.put(126, "Warder");
+ classList.put(127, "Berserker");
+ classList.put(128, "Male Soulbreaker");
+ classList.put(129, "Female Soulbreaker");
+ classList.put(130, "Arbalester");
+ classList.put(131, "Doombringer");
+ classList.put(132, "Male Soulhound");
+ classList.put(133, "Female Soulhound");
+ classList.put(134, "Trickster");
+ classList.put(135, "Inspector");
+ classList.put(136, "Judicator");
+
+ return classList.get(classid);
+ }
+
+ public String getPlayerRunTime(int secs)
+ {
+ String timeResult = "";
+ if (secs >= 86400)
+ timeResult = Integer.toString(secs / 86400) + " Days " + Integer.toString((secs % 86400) / 3600) + " hours";
+ else
+ timeResult = Integer.toString(secs / 3600) + " Hours " + Integer.toString((secs % 3600) / 60) + " mins";
+ return timeResult;
+ }
+ public String getAdenas(int adena)
+ {
+ String adenas = "";
+ if (adena >= 1000000000)
+ adenas = Integer.toString(adena / 1000000000) + " Billion " + Integer.toString((adena % 1000000000) / 1000000) + " million";
+ else
+ adenas = Integer.toString(adena / 1000000) + " Million " + Integer.toString((adena % 1000000) / 1000) + " k";
+ return adenas;
+ }
+}