View difference between Paste ID: MFDXGLb2 and DQYi6xhy
SHOW: | | - or go back to the newest paste.
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