Axelut

COMMUNITYBOARD - RankingSystem aCis

Sep 14th, 2023
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. diff --git a/aCis_datapack/data/html/CommunityBoard/ranking/ranklist.htm b/aCis_datapack/data/html/CommunityBoard/ranking/ranklist.htm
  2. new file mode 100644
  3. index 0000000..0f5f88d
  4. --- /dev/null
  5. +++ b/aCis_datapack/data/html/CommunityBoard/ranking/ranklist.htm
  6. @@ -0,0 +1,41 @@
  7. +<html><body><center><img height=20>
  8. +   <img src=l2ui.squaregray width=630 height=1>
  9. +   <table width=630 height=40 bgcolor=000000>
  10. +   <tr>
  11. +       <td width=40 align=center><table bgcolor=FFFFFF cellpadding=6 cellspacing="-5"><tr><td><button width=32 height=32 back=icon.skill1028 fore=icon.skill1028></td></tr></table></td>
  12. +       <td width=590>Welcome <font color=LEVEL>%name%</font> to server Ranking Dashboard.
  13. +       <br1><font color=B09878>Here are listed top 15 pvp and pk players of our server.</font></td>
  14. +   </tr>
  15. +   </table>
  16. +   <img src=l2ui.squaregray width=630 height=1>
  17. +   <img height=24>
  18. +   <table width=630><tr>
  19. +   <td width=315 align=center>
  20. +   <img src=L2UI.SquareWhite width=296 height=1>
  21. +   <table width=300 bgcolor=000000><tr>
  22. +   <td width=20 align=center><font color=A9A9A9>#</td>
  23. +   <td width=20 height=18></td>
  24. +   <td width=160 align=left>Player Name</td>
  25. +   <td width=100 align=right>PVP</font></td>
  26. +   </tr></table><img src=L2UI.SquareWhite width=296 height=1>
  27. +   %pvp%
  28. +   <img src=L2UI.SquareWhite width=296 height=1>
  29. +   </td>
  30. +
  31. +   <td width=315 align=center>
  32. +   <img src=L2UI.SquareWhite width=296 height=1>
  33. +   <table width=300 bgcolor=000000><tr>
  34. +   <td width=20 align=center><font color=A9A9A9>#</td>
  35. +   <td width=20 height=18 align=center></td>
  36. +   <td width=160 align=left>Player Name</td>
  37. +   <td width=100 align=right>PK</font></td>
  38. +   </tr></table><img src=L2UI.SquareWhite width=296 height=1>
  39. +   %pks%
  40. +   <img src=L2UI.SquareWhite width=296 height=1>
  41. +   </td>
  42. +   </tr></table>
  43. +   <img height=20>
  44. +   <img src=L2UI.SquareWhite width=300 height=1>
  45. +   <table width=300 bgcolor=000000><tr><td width=300 align=center><font color=AAAAAA>Next update in %time% second(s)</font></td></tr></table>
  46. +   <img src=L2UI.SquareWhite width=300 height=1>
  47. +</center></body></html>
  48. \ No newline at end of file
  49. diff --git a/aCis_datapack/data/html/CommunityBoard/top/index.htm b/aCis_datapack/data/html/CommunityBoard/top/index.htm
  50. index e54aa7d..177e787 100644
  51. --- a/aCis_datapack/data/html/CommunityBoard/top/index.htm
  52. +++ b/aCis_datapack/data/html/CommunityBoard/top/index.htm
  53. @@ -64,4 +64,5 @@
  54.             <td width=610><img src="l2ui.squaregray" width="600" height="1"></td>
  55.         </tr>
  56.     </table>
  57. +   <br><br><center><a action="bypass _bbsranking">Ranking System</a>
  58.  </center></body></html>
  59. \ No newline at end of file
  60. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/CommunityBoard.java b/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/CommunityBoard.java
  61. index a9da4a0..9338d3b 100644
  62. --- a/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/CommunityBoard.java
  63. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/CommunityBoard.java
  64. @@ -16,6 +16,7 @@
  65.  import net.sf.l2j.gameserver.communitybbs.manager.FriendsBBSManager;
  66.  import net.sf.l2j.gameserver.communitybbs.manager.MailBBSManager;
  67.  import net.sf.l2j.gameserver.communitybbs.manager.PostBBSManager;
  68. +import net.sf.l2j.gameserver.communitybbs.manager.RankingBBSManager;
  69.  import net.sf.l2j.gameserver.communitybbs.manager.RegionBBSManager;
  70.  import net.sf.l2j.gameserver.communitybbs.manager.TopBBSManager;
  71.  import net.sf.l2j.gameserver.communitybbs.manager.TopicBBSManager;
  72. @@ -121,6 +122,8 @@
  73.             TopicBBSManager.getInstance().parseCmd(command, player);
  74.         else if (command.startsWith("_bbsposts"))
  75.             PostBBSManager.getInstance().parseCmd(command, player);
  76. +       else if (command.startsWith("_bbsranking"))
  77. +           RankingBBSManager.getInstance().parseCmd(command, player);
  78.         else
  79.             BaseBBSManager.separateAndSend("<html><body><br><br><center>The command: " + command + " isn't implemented.</center></body></html>", player);
  80.     }
  81. diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/manager/RankingBBSManager.java b/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/manager/RankingBBSManager.java
  82. new file mode 100644
  83. index 0000000..d4def7f
  84. --- /dev/null
  85. +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/manager/RankingBBSManager.java
  86. @@ -0,0 +1,137 @@
  87. +package net.sf.l2j.gameserver.communitybbs.manager;
  88. +
  89. +import java.sql.Connection;
  90. +import java.sql.PreparedStatement;
  91. +import java.sql.ResultSet;
  92. +import java.util.stream.IntStream;
  93. +
  94. +import net.sf.l2j.commons.lang.StringUtil;
  95. +import net.sf.l2j.commons.pool.ConnectionPool;
  96. +
  97. +import net.sf.l2j.gameserver.data.cache.HtmCache;
  98. +import net.sf.l2j.gameserver.model.World;
  99. +import net.sf.l2j.gameserver.model.actor.Player;
  100. +
  101. +public class RankingBBSManager extends BaseBBSManager
  102. +{
  103. +   private static final StringBuilder PVP = new StringBuilder();
  104. +   private static final StringBuilder PKS = new StringBuilder();
  105. +  
  106. +   private static final int PAGE_LIMIT_15 = 15;
  107. +  
  108. +   private long _nextUpdate;
  109. +  
  110. +   protected RankingBBSManager()
  111. +   {
  112. +   }
  113. +  
  114. +   @Override
  115. +   public void parseCmd(String command, Player player)
  116. +   {
  117. +       if (command.equals("_bbsranking"))
  118. +           showRakingList(player);
  119. +       else
  120. +           super.parseCmd(command, player);
  121. +   }
  122. +  
  123. +   public void showRakingList(Player player)
  124. +   {
  125. +       if (_nextUpdate < System.currentTimeMillis())
  126. +       {
  127. +           PVP.setLength(0);
  128. +           PKS.setLength(0);
  129. +          
  130. +           try (Connection con = ConnectionPool.getConnection())
  131. +           {
  132. +               try (PreparedStatement ps = con.prepareStatement("SELECT char_name, pvpkills FROM characters WHERE pvpkills > 0 ORDER BY pvpkills DESC LIMIT " + PAGE_LIMIT_15);
  133. +                   ResultSet rs = ps.executeQuery())
  134. +               {
  135. +                   int index = 1;
  136. +                   while (rs.next())
  137. +                   {
  138. +                       final String name = rs.getString("char_name");
  139. +                       final Player databasePlayer = World.getInstance().getPlayer(name);
  140. +                       final String status = "L2UI_CH3.msnicon" + (databasePlayer != null && databasePlayer.isOnline() ? "1" : "4");
  141. +                      
  142. +                       StringUtil.append(PVP, "<table width=300 bgcolor=000000><tr><td width=20 align=right>", getColor(index), String.format("%02d", index), "</td>");
  143. +                       StringUtil.append(PVP, "<td width=20 height=18><img src=", status, " width=16 height=16></td><td width=160 align=left>", name, "</td>");
  144. +                       StringUtil.append(PVP, "<td width=100 align=right>", StringUtil.formatNumber(rs.getInt("pvpkills")), "</font></td></tr></table><img src=L2UI.SquareGray width=296 height=1>");
  145. +                       index++;
  146. +                   }
  147. +                   IntStream.range(index - 1, PAGE_LIMIT_15).forEach(x -> applyEmpty(PVP));
  148. +               }
  149. +              
  150. +               try (PreparedStatement ps = con.prepareStatement("SELECT char_name, pkkills FROM characters WHERE pkkills > 0 ORDER BY pkkills DESC LIMIT " + PAGE_LIMIT_15);
  151. +                   ResultSet rs = ps.executeQuery())
  152. +               {
  153. +                   int index = 1;
  154. +                   while (rs.next())
  155. +                   {
  156. +                       final String name = rs.getString("char_name");
  157. +                       final Player databasePlayer = World.getInstance().getPlayer(name);
  158. +                       final String status = "L2UI_CH3.msnicon" + (databasePlayer != null && databasePlayer.isOnline() ? "1" : "4");
  159. +                      
  160. +                       StringUtil.append(PKS, "<table width=300 bgcolor=000000><tr><td width=20 align=right>", getColor(index), String.format("%02d", index), "</td>");
  161. +                       StringUtil.append(PKS, "<td width=20 height=18><img src=", status, " width=16 height=16></td><td width=160 align=left>", name, "</td>");
  162. +                       StringUtil.append(PKS, "<td width=100 align=right>", StringUtil.formatNumber(rs.getInt("pkkills")), "</font></td></tr></table><img src=L2UI.SquareGray width=296 height=1>");
  163. +                       index++;
  164. +                   }
  165. +                   IntStream.range(index - 1, PAGE_LIMIT_15).forEach(x -> applyEmpty(PKS));
  166. +               }
  167. +           }
  168. +           catch (Exception e)
  169. +           {
  170. +               LOGGER.warn("There was problem while updating ranking system.", e);
  171. +           }
  172. +          
  173. +           _nextUpdate = System.currentTimeMillis() + 60000L;
  174. +       }
  175. +      
  176. +       String content = HtmCache.getInstance().getHtm(CB_PATH + getFolder() + "ranklist.htm");
  177. +       content = content.replaceAll("%name%", player.getName());
  178. +       content = content.replaceAll("%pvp%", PVP.toString());
  179. +       content = content.replaceAll("%pks%", PKS.toString());
  180. +      
  181. +       content = content.replaceAll("%time%", String.valueOf((_nextUpdate - System.currentTimeMillis()) / 1000));
  182. +       separateAndSend(content, player);
  183. +   }
  184. +  
  185. +   protected void applyEmpty(StringBuilder sb)
  186. +   {
  187. +       sb.append("<table width=300 bgcolor=000000><tr>");
  188. +       sb.append("<td width=20 align=right><font color=B09878>--</font></td><td width=20 height=18></td>");
  189. +       sb.append("<td width=160 align=left><font color=B09878>----------------</font></td>");
  190. +       sb.append("<td width=100 align=right><font color=FF0000>0</font></td>");
  191. +       sb.append("</tr></table><img src=L2UI.SquareGray width=296 height=1>");
  192. +   }
  193. +  
  194. +   protected String getColor(int index)
  195. +   {
  196. +       switch (index)
  197. +       {
  198. +           case 1:
  199. +               return "<font color=FFFF00>";
  200. +           case 2:
  201. +               return "<font color=FFA500>";
  202. +           case 3:
  203. +               return "<font color=E9967A>";
  204. +       }
  205. +       return "";
  206. +   }
  207. +  
  208. +   @Override
  209. +   protected String getFolder()
  210. +   {
  211. +       return "ranking/";
  212. +   }
  213. +  
  214. +   public static RankingBBSManager getInstance()
  215. +   {
  216. +       return SingletonHolder.INSTANCE;
  217. +   }
  218. +  
  219. +   private static class SingletonHolder
  220. +   {
  221. +       protected static final RankingBBSManager INSTANCE = new RankingBBSManager();
  222. +   }
  223. +}
  224. \ No newline at end of file
Add Comment
Please, Sign In to add comment