· 6 years ago · Aug 23, 2019, 11:26 AM
1Index: /trunk/aCis_datapack/data/html/CommunityBoard/announcements/adminWrite.htm
2===================================================================
3--- /trunk/aCis_datapack/data/html/CommunityBoard/announcements/adminWrite.htm (revision 81)
4+++ /trunk/aCis_datapack/data/html/CommunityBoard/announcements/adminWrite.htm (revision 81)
5@@ -0,0 +1,48 @@
6+<html>
7+ <body>
8+ <br>
9+ <br><br><br>
10+ <center>
11+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
12+ <br>
13+ <font color="AAAAAA">News Announcements.</font>
14+ <img src="l2ui.squaregray" width="500" height="1">
15+ <br>
16+ <br>
17+ <table width=500>
18+ <tr>
19+ <td>1. Please use HTML tag for your post!<br></td>
20+ </tr>
21+ <tr>
22+ <td>2. Do not use any kind of (table) content!<br></td>
23+ </tr>
24+ <tr>
25+ <td>3. The post cannot contain more then 1000 symbols.<br></td>
26+ </tr>
27+ <tr>
28+ <td>4. Using url addresses is possible by using command for your button:<br></td>
29+ </tr>
30+ <tr>
31+ <td>5. bypass -h visitUrl;yourURLaddress<br></td>
32+ </tr>
33+ <tr>
34+ <td>6. Images outside client cannot be used.<br></td>
35+ </tr>
36+ </table>
37+ <img src="l2ui.squaregray" width="500" height="1">
38+ <br>
39+ <table width=450>
40+ <tr>
41+ <td width=50 align=center>Title</td>
42+ <td><edit var="title" width=400 height=13></td>
43+ </tr>
44+ <tr><td></td></tr>
45+ <tr><td></td></tr>
46+ </table>
47+ <br><br>
48+ <button value="Continue ->" action="bypass _bbsannouncements;postTitle $title" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"/>
49+ </center>
50+ <br>
51+ <img src="l2ui.squaregray" width="610" height="1">
52+ </body>
53+</html>
54Index: /trunk/aCis_datapack/data/html/CommunityBoard/announcements/adminWrite2.htm
55===================================================================
56--- /trunk/aCis_datapack/data/html/CommunityBoard/announcements/adminWrite2.htm (revision 81)
57+++ /trunk/aCis_datapack/data/html/CommunityBoard/announcements/adminWrite2.htm (revision 81)
58@@ -0,0 +1,33 @@
59+<html>
60+ <body>
61+ <br>
62+ <br><br><br>
63+ <center>
64+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
65+ <br>
66+ <font color="AAAAAA">News Announcements.</font>
67+ <img src="l2ui.squaregray" width="500" height="1">
68+ <br>
69+ <br>
70+ <table width=450>
71+ <tr>
72+ <td width=50 align=center>Title:</td>
73+ <td>%title%</td>
74+ </tr>
75+ <tr><td></td></tr>
76+ <tr>
77+ <td width=50 align=center>Content:</td>
78+ <td><multiedit var="content" width=400 height=200></td>
79+ </tr>
80+ </table>
81+ <br>
82+ <br>
83+ <img src="l2ui.squaregray" width="500" height="1">
84+ <br>
85+ <br>
86+ <button value="Post Announcement" action="bypass _bbsannouncements;postText $content" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"/>
87+ </center>
88+ <br>
89+ <img src="l2ui.squaregray" width="610" height="1">
90+ </body>
91+</html>
92Index: /trunk/aCis_datapack/data/html/CommunityBoard/announcements/main.htm
93===================================================================
94--- /trunk/aCis_datapack/data/html/CommunityBoard/announcements/main.htm (revision 81)
95+++ /trunk/aCis_datapack/data/html/CommunityBoard/announcements/main.htm (revision 81)
96@@ -0,0 +1,21 @@
97+<html>
98+ <body>
99+ <br>
100+ <br><br><br>
101+ <center><img src="L2UI_CH3.herotower_deco" width=256 height=32>
102+ <br>
103+ <font color="AAAAAA">Announcements List:</font></center>
104+ <br><br>
105+ %adminMenu%
106+ <table width=610 bgcolor="000000">
107+ <tr>
108+ <td width=50 height=18 align="center">#</td>
109+ <td width=400 height=18 align="left">Title</td>
110+ <td width=100 height=18 align="center">Date</td>
111+ </tr>
112+ </table>
113+ %showList%
114+ <br><br>
115+ <center><font color="585858">For older announcements please visit our forum.</font></center>
116+ </body>
117+</html>
118Index: /trunk/aCis_datapack/data/html/CommunityBoard/announcements/postTemplate.htm
119===================================================================
120--- /trunk/aCis_datapack/data/html/CommunityBoard/announcements/postTemplate.htm (revision 81)
121+++ /trunk/aCis_datapack/data/html/CommunityBoard/announcements/postTemplate.htm (revision 81)
122@@ -0,0 +1,26 @@
123+<html>
124+ <body>
125+ <br>
126+ <br><br><br>
127+ <center>
128+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
129+ <br>
130+ <font color="AAAAAA">%title%</font>
131+ <br>
132+ <table width=500 bgcolor="000000">
133+ <tr>
134+ <td width=100 height=18 align="center">Published at %date% by <font color="88FF11">%author%</font></td>
135+ </tr>
136+ </table>
137+ <br>
138+ <table width=500>
139+ <tr>
140+ <td>%text%</td>
141+ </tr>
142+ </table>
143+ </center>
144+ <br>
145+ <img src="l2ui.squaregray" width="610" height="1">
146+ <br>
147+ </body>
148+</html>
149Index: /trunk/aCis_datapack/data/html/CommunityBoard/donation/completed.htm
150===================================================================
151--- /trunk/aCis_datapack/data/html/CommunityBoard/donation/completed.htm (revision 81)
152+++ /trunk/aCis_datapack/data/html/CommunityBoard/donation/completed.htm (revision 81)
153@@ -0,0 +1,12 @@
154+<html>
155+ <body>
156+ <br>
157+ <br><br><br>
158+ <center>
159+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
160+ <br>
161+ Thank you for your donation!<br>
162+ Please wait while GM confirms it and you will get your reward.
163+ </center>
164+ </body>
165+</html>
166Index: /trunk/aCis_datapack/data/html/CommunityBoard/donation/main.htm
167===================================================================
168--- /trunk/aCis_datapack/data/html/CommunityBoard/donation/main.htm (revision 81)
169+++ /trunk/aCis_datapack/data/html/CommunityBoard/donation/main.htm (revision 81)
170@@ -0,0 +1,45 @@
171+<html>
172+ <body>
173+ <br>
174+ <br><br><br>
175+ <center>
176+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
177+ <br>
178+ <font color="AAAAAA">Donation Rules & Terms of agreement.</font>
179+ <img src="l2ui.squaregray" width="500" height="1">
180+ <br>
181+ <br>
182+ <table width=500>
183+ <tr>
184+ <td>1. Donating is completely voluntary and is not needed to play our server, by submitting any type of donation to us, you agree that its a one-way contribution and you are not entitled to receive anything. Donations will not be refunded under any circumstances. If one were to recall their donation they will lose their donated items and will have their accounts suspended.<br></td>
185+ </tr>
186+ <tr>
187+ <td>2. Most donation reward like gear are exchangable for up to 72 hours after that there will be no free exchanging. Please choose carefully when deciding what items you wish to receive. There are no discounts or extra items unless its in the special offers section. So please never ask for discounts or extra items your donation unless your referring to the special offers list or some sort of announcement.<br></td>
188+ </tr>
189+ <tr>
190+ <td>3. You may not sell any donation rewards to another player for real world currency, if you do, the rewards will be deleted and and punishment will be taken.<br></td>
191+ </tr>
192+ <tr>
193+ <td>4. If one loses their donated items from trading, scamming, dropping from karma, or really any way at all, you are not entitled to reimbursement.<br></td>
194+ </tr>
195+ <tr>
196+ <td>5. People who donate will not receive any sort of special treatment, they still have to follow the rules and will be punished likewise, donators and non-donaters are equals. prejudice towards donators and non donators will not be tolerated.<br></td>
197+ </tr>
198+ <tr>
199+ <td>6. After you have donated please state the following, in a forum private message to Administrator, in this format<br></td>
200+ </tr>
201+ </table>
202+ <br>
203+ <img src="l2ui.squaregray" width="500" height="1"><br>
204+ <table width=300>
205+ <tr>
206+ <td><button value="I Agree" action="bypass _bbshome;../donation/showMethods.htm" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
207+ <td><button value="I Disagee" action="bypass _bbshome" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
208+ </tr>
209+ </table>
210+ </center>
211+ <br>
212+ <img src="l2ui.squaregray" width="610" height="1">
213+ <br>
214+ </body>
215+</html>
216Index: /trunk/aCis_datapack/data/html/CommunityBoard/donation/paypal.htm
217===================================================================
218--- /trunk/aCis_datapack/data/html/CommunityBoard/donation/paypal.htm (revision 81)
219+++ /trunk/aCis_datapack/data/html/CommunityBoard/donation/paypal.htm (revision 81)
220@@ -0,0 +1,77 @@
221+<html>
222+ <body>
223+ <br>
224+ <center>
225+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
226+ <br>
227+ <font color="AAAAAA">Donation Via PayPal.</font>
228+ <img src="l2ui.squaregray" width="500" height="1">
229+ <br>
230+ <br>
231+ <table width=500>
232+ <tr>
233+ <td>Donation Guide:<br></td>
234+ </tr>
235+ <tr>
236+ <td>1. Firstly visit the paypal website link. (Button Bellow)<br></td>
237+ </tr>
238+ <tr>
239+ <td>2. Fill the fields in your browser and complete the donation payment.<br></td>
240+ </tr>
241+ <tr>
242+ <td>3. After everything is completed fill the fields bellow with the information from your donation.<br></td>
243+ </tr>
244+ <tr><td></td></tr>
245+ <tr>
246+ <td>4. The fields with <font color=LEVEL>*</font> are required!<br></td>
247+ </tr>
248+ <tr>
249+ <td>5. Please enter only information about your paypal account!<br></td>
250+ </tr>
251+ </table>
252+ <br>
253+ <img src="l2ui.squaregray" width="500" height="1"><br>
254+ <font color="AAAAAA">Donation Form.</font>
255+ <br>
256+ <table width=500>
257+ <tr>
258+ <td width="100" align=left>Account:</td>
259+ <td width="400" align=left>%charAcc%</td>
260+ </tr>
261+ <tr><td></td></tr>
262+ <tr>
263+ <td width="100" align=left>Character:</td>
264+ <td width="400" align=left>%charName%</td>
265+ </tr>
266+ <tr><td></td></tr>
267+ <tr><td></td></tr>
268+ <tr>
269+ <td width="75">Amount: <font color=LEVEL>*</font></td>
270+ <td width="425"><edit var="amount" width=50 height=12></td>
271+ </tr>
272+ <tr><td></td></tr>
273+ <tr>
274+ <td width="75">Email: <font color=LEVEL>*</font></td>
275+ <td width="425"><edit var="email" width=150 height=12></td>
276+ </tr>
277+ <tr><td></td></tr>
278+ <tr>
279+ <td width="75">Transaction Id: <font color=LEVEL>*</font></td>
280+ <td width="425"><edit var="transId" width=150 height=12></td>
281+ </tr>
282+ <tr><td></td></tr>
283+ <tr>
284+ <td width="75">Message: <font color=LEVEL>*</font></td>
285+ <td width="425"><edit var="message" width=300 height=12></td>
286+ </tr>
287+ </table>
288+ <br>
289+ <img src="l2ui.squaregray" width="500" height="1">
290+ <br>
291+ <button value="Submit Donation" action="bypass _bbsdonation;submitPayPal $amount $email $transId $message" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton">
292+ <br>
293+ <img src="l2ui.squaregray" width="610" height="1"><br>
294+ <br>
295+ </center>
296+ </body>
297+</html>
298Index: /trunk/aCis_datapack/data/html/CommunityBoard/donation/paysafe.htm
299===================================================================
300--- /trunk/aCis_datapack/data/html/CommunityBoard/donation/paysafe.htm (revision 81)
301+++ /trunk/aCis_datapack/data/html/CommunityBoard/donation/paysafe.htm (revision 81)
302@@ -0,0 +1,67 @@
303+<html>
304+ <body>
305+ <br>
306+ <br><br><br>
307+ <center>
308+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
309+ <br>
310+ <font color="AAAAAA">Donation Via PaySafe Card.</font>
311+ <img src="l2ui.squaregray" width="500" height="1">
312+ <br>
313+ <br>
314+ <table width=500>
315+ <tr>
316+ <td>1. The fields with <font color=LEVEL>*</font> are required!<br></td>
317+ </tr>
318+ <tr>
319+ <td>2. Once submitted you cannot edit the details you've put bellow.<br></td>
320+ </tr>
321+ </table>
322+ <br>
323+ <img src="l2ui.squaregray" width="500" height="1"><br>
324+ <font color="AAAAAA">Donation Form.</font>
325+ <br>
326+ <table width=500>
327+ <tr>
328+ <td width="75">Account:</td>
329+ <td width="425">%charAcc%</td>
330+ </tr>
331+ <tr><td></td></tr>
332+ <tr>
333+ <td width="75">Character:</td>
334+ <td width="425">%charName%</td>
335+ </tr>
336+ <tr><td></td></tr>
337+ <tr><td></td></tr>
338+ <tr>
339+ <td width="75">Card Amount: <font color=LEVEL>*</font></td>
340+ <td width="425"><combobox width=80 height=12 var="amount" list=10-Euro;25-Euro;50-Euro;100-Euro;></td>
341+ </tr>
342+ </table>
343+ <table width=500>
344+ <tr>
345+ <td width="75">Card Pin: <font color=LEVEL>*</font></td>
346+ <td width="50"><edit var="pin1" width=50 height=12 type=number></td>
347+ <td width="50"><edit var="pin2" width=50 height=12 type=number></td>
348+ <td width="50"><edit var="pin3" width=50 height=12 type=number></td>
349+ <td width="50"><edit var="pin4" width=50 height=12 type=number></td>
350+ <td width="190"></td>
351+ </tr>
352+ </table>
353+ <br><br>
354+ <table width=500>
355+ <tr>
356+ <td width="75">Message: <font color=LEVEL>*</font></td>
357+ <td width="425"><edit var="message" width=240 height=12></td>
358+ </tr>
359+ </table>
360+ <br>
361+ <img src="l2ui.squaregray" width="500" height="1">
362+ <br>
363+ <button value="Submit Donation" action="bypass _bbsdonation;submitPaySafe $amount $pin1 $pin2 $pin3 $pin4 $message" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton">
364+ <br>
365+ <img src="l2ui.squaregray" width="610" height="1"><br>
366+ <br>
367+ </center>
368+ </body>
369+</html>
370Index: /trunk/aCis_datapack/data/html/CommunityBoard/donation/showMethods.htm
371===================================================================
372--- /trunk/aCis_datapack/data/html/CommunityBoard/donation/showMethods.htm (revision 81)
373+++ /trunk/aCis_datapack/data/html/CommunityBoard/donation/showMethods.htm (revision 81)
374@@ -0,0 +1,42 @@
375+<html>
376+ <body>
377+ <br>
378+ <br><br><br>
379+ <center>
380+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
381+ <br>
382+ <font color="AAAAAA">Pick Your Donation Method.</font>
383+ <img src="l2ui.squaregray" width="500" height="1">
384+ <br>
385+ <br>
386+ <table width=500>
387+ <tr>
388+ <td>1. Please be aware that you will not receive your reward right after you donate!</br></td>
389+ </tr>
390+ <tr>
391+ <td>2. Firstly a member of our staff must confirm that the donation is valid.</br></td>
392+ </tr>
393+ <tr>
394+ <td>3. Do not try to spam! You cannot make more donations until the first one is confirmed.</br></td>
395+ </tr>
396+ <tr>
397+ <td>4. Please have patience. The staff members will receive message. But they might not react in 2 minutes.</br></td>
398+ </tr>
399+ <tr>
400+ <td>5. Fake donations might get your self banned!</br></td>
401+ </tr>
402+ </table>
403+ <br>
404+ <img src="l2ui.squaregray" width="500" height="1"><br>
405+ <table width=300>
406+ <tr>
407+ <td><button value="I will donate via PaySafe" action="bypass _bbsdonation;paysafe" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
408+ <td><button value="I will donate via PayPal" action="bypass _bbsdonation;paypal" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
409+ </tr>
410+ </table>
411+ </center>
412+ <br>
413+ <img src="l2ui.squaregray" width="610" height="1">
414+ <br>
415+ </body>
416+</html>
417Index: /trunk/aCis_datapack/data/html/CommunityBoard/reporting/completed.htm
418===================================================================
419--- /trunk/aCis_datapack/data/html/CommunityBoard/reporting/completed.htm (revision 81)
420+++ /trunk/aCis_datapack/data/html/CommunityBoard/reporting/completed.htm (revision 81)
421@@ -0,0 +1,13 @@
422+<html>
423+ <body>
424+ <br>
425+ <br><br><br>
426+ <center>
427+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
428+ <br>
429+ Thank you for your report!<br>
430+ We value player's problem reports because they are important for our server.<br>
431+ Every reporting is making our server even more stronger :)
432+ </center>
433+ </body>
434+</html>
435Index: /trunk/aCis_datapack/data/html/CommunityBoard/reporting/description.htm
436===================================================================
437--- /trunk/aCis_datapack/data/html/CommunityBoard/reporting/description.htm (revision 81)
438+++ /trunk/aCis_datapack/data/html/CommunityBoard/reporting/description.htm (revision 81)
439@@ -0,0 +1,45 @@
440+<html>
441+ <body>
442+ <br>
443+ <br><br><br>
444+ <center>
445+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
446+ <br>
447+ <font color="AAAAAA">Report Form</font>
448+ <img src="l2ui.squaregray" width="500" height="1">
449+ <br>
450+ <br>
451+ <table width=500>
452+ <tr>
453+ <td width="100" align=left>Character:</td>
454+ <td width="400" align=left>%charName%</td>
455+ </tr>
456+ <tr><td></td></tr>
457+ <tr>
458+ <td width="100" align=left>Majority:</td>
459+ <td width="400" align=left>%majority%</td>
460+ </tr>
461+ <tr><td></td></tr>
462+ <tr>
463+ <td width="100" align=left>Type:</td>
464+ <td width="400" align=left>%type%</td>
465+ </tr>
466+ <tr><td></td></tr>
467+ <tr>
468+ <td width="100">Title:</td>
469+ <td align=left>%title%</td>
470+ </tr>
471+ <tr>
472+ <td width="100">Description:</td>
473+ <td align=left><multiedit var="description" width=350 height=200></td>
474+ </tr>
475+ </table>
476+ <br>
477+ <img src="l2ui.squaregray" width="500" height="1"><br>
478+ <button value="Submit Report" action="bypass _bbsProblemReport;submit $description" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton">
479+ </center>
480+ <br>
481+ <img src="l2ui.squaregray" width="610" height="1">
482+ <br>
483+ </body>
484+</html>
485Index: /trunk/aCis_datapack/data/html/CommunityBoard/reporting/main.htm
486===================================================================
487--- /trunk/aCis_datapack/data/html/CommunityBoard/reporting/main.htm (revision 81)
488+++ /trunk/aCis_datapack/data/html/CommunityBoard/reporting/main.htm (revision 81)
489@@ -0,0 +1,59 @@
490+<html>
491+ <body>
492+ <br>
493+ <br><br><br>
494+ <center>
495+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
496+ <br>
497+ <font color="AAAAAA">Problem Reporting</font>
498+ <img src="l2ui.squaregray" width="500" height="1">
499+ <br>
500+ <br>
501+ <table width=500>
502+ <tr>
503+ <td>1. You are pleased to have clarity about your speech to be easy to read understand your problem by the reader in order to help you. Otherwise your topic will be locked and may you will be punished.<br></td>
504+ </tr>
505+ <tr>
506+ <td>2. In case that you haven't got any idea about your words or you don't know where is the problem, you are pleased to don't even try to answer. You will be punished for wrong guidance.<br></td>
507+ </tr>
508+ <tr>
509+ <td>3. It remembers to choose the correct option before reporting an error.<br></td>
510+ </tr>
511+ <tr>
512+ <td>4. In case that you haven't got any answer, in 24 hours, we suggested to you to return to report.<br></td>
513+ </tr>
514+ </table>
515+ <br>
516+ <img src="l2ui.squaregray" width="500" height="1"><br>
517+ <font color="AAAAAA">Report Form.</font>
518+ <br>
519+ <table width=500>
520+ <tr>
521+ <td width="100" align=left>Character:</td>
522+ <td width="400" align=left>%charName%</td>
523+ </tr>
524+ <tr><td></td></tr>
525+ <tr>
526+ <td width="100" align=left>Majority:</td>
527+ <td width="400" align=left><combobox width=80 height=12 var="mojority" list=Low;Normal;Critical;></td>
528+ </tr>
529+ <tr><td></td></tr>
530+ <tr>
531+ <td width="100" align=left>Type:</td>
532+ <td width="400" align=left><combobox width=120 height=12 var="type" list=Bug-Report;Quest-Report;Skill-Report;Character-Report;Bot-Report;Other;></td>
533+ </tr>
534+ <tr><td></td></tr>
535+ <tr>
536+ <td width="100">Title:</td>
537+ <td align=left><edit var="title" width=150 height=12></td>
538+ </tr>
539+ </table>
540+ <br>
541+ <img src="l2ui.squaregray" width="500" height="1"><br>
542+ <button value="Continue to Description" action="bypass _bbsProblemReport;toDescription $mojority $type $title" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton">
543+ </center>
544+ <br>
545+ <img src="l2ui.squaregray" width="610" height="1">
546+ <br>
547+ </body>
548+</html>
549Index: /trunk/aCis_datapack/data/html/CommunityBoard/stats/boss/grandBoss.htm
550===================================================================
551--- /trunk/aCis_datapack/data/html/CommunityBoard/stats/boss/grandBoss.htm (revision 81)
552+++ /trunk/aCis_datapack/data/html/CommunityBoard/stats/boss/grandBoss.htm (revision 81)
553@@ -0,0 +1,19 @@
554+<html>
555+ <body>
556+ <br>
557+ <br><br><br>
558+ <center>
559+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
560+ <br>
561+ <font color="AAAAAA">Grand Boss Status</font>
562+ <br>
563+ <table border=0 cellspacing=0 cellpadding=2 bgcolor=000000 height=24 width=400>
564+ <tr>
565+ <td FIXWIDTH=200 align=center>Raid Name</td>
566+ <td FIXWIDTH=200 align=center>Status</td>
567+ </tr>
568+ </table>
569+ %showList%
570+ </center>
571+ </body>
572+</html>
573Index: /trunk/aCis_datapack/data/html/CommunityBoard/stats/olympiad/list.htm
574===================================================================
575--- /trunk/aCis_datapack/data/html/CommunityBoard/stats/olympiad/list.htm (revision 81)
576+++ /trunk/aCis_datapack/data/html/CommunityBoard/stats/olympiad/list.htm (revision 81)
577@@ -0,0 +1,27 @@
578+<html>
579+ <body>
580+ <br>
581+ <br><br><br>
582+ <center>
583+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
584+ <br>
585+ <font color="AAAAAA">%className% Status</font>
586+ <br>
587+ <table border=0 cellspacing=0 cellpadding=2 bgcolor=000000 width=610>
588+ <tr>
589+ <td FIXWIDTH=10></td>
590+ <td FIXWIDTH=40>#</td>
591+ <td FIXWIDTH=190>Name</td>
592+ <td FIXWIDTH=140>Class</td>
593+ <td FIXWIDTH=100>Points</td>
594+ <td FIXWIDTH=120>Competitions</td>
595+ <td FIXWIDTH=120>Clan</td>
596+ <td FIXWIDTH=120>Ally</td>
597+ <td FIXWIDTH=70>Status</td>
598+ <td FIXWIDTH=5></td>
599+ </tr>
600+ </table>
601+ %showList%
602+ </center>
603+ </body>
604+</html>
605Index: /trunk/aCis_datapack/data/html/CommunityBoard/stats/olympiad/main.htm
606===================================================================
607--- /trunk/aCis_datapack/data/html/CommunityBoard/stats/olympiad/main.htm (revision 81)
608+++ /trunk/aCis_datapack/data/html/CommunityBoard/stats/olympiad/main.htm (revision 81)
609@@ -0,0 +1,79 @@
610+<html>
611+ <body>
612+ <br>
613+ <br><br><br>
614+ <center>
615+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
616+ <br>
617+ <font color="AAAAAA">Olympiad Status</font>
618+ <br>
619+ <table border=0 cellspacing=0 cellpadding=2 bgcolor=000000 width=610>
620+ <tr>
621+ <td FIXWIDTH=10></td>
622+ <td FIXWIDTH=40>#</td>
623+ <td FIXWIDTH=190>Name</td>
624+ <td FIXWIDTH=140>Class</td>
625+ <td FIXWIDTH=100>Points</td>
626+ <td FIXWIDTH=120>Competitions</td>
627+ <td FIXWIDTH=120>Clan</td>
628+ <td FIXWIDTH=120>Ally</td>
629+ <td FIXWIDTH=70>Status</td>
630+ <td FIXWIDTH=5></td>
631+ </tr>
632+ </table>
633+ <br><br><br>
634+ <font color="AAAAAA">Please select class:</font>
635+ <br>
636+ <table border=0 cellspacing=0 cellpadding=2 width=610>
637+ <tr>
638+ <td FIXWIDTH=150 align=center><button value="Duelist" action="bypass _bbsClassList;88" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
639+ <td FIXWIDTH=150 align=center><button value="Dreadnought" action="bypass _bbsClassList;89" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
640+ <td FIXWIDTH=150 align=center><button value="Phoenix Knight" action="bypass _bbsClassList;90" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
641+ <td FIXWIDTH=150 align=center><button value="Hell Knight" action="bypass _bbsClassList;91" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
642+ </tr>
643+ <tr>
644+ <td FIXWIDTH=150 align=center><button value="Sagittarius" action="bypass _bbsClassList;92" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
645+ <td FIXWIDTH=150 align=center><button value="Adventurer" action="bypass _bbsClassList;93" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
646+ <td FIXWIDTH=150 align=center><button value="Archmage" action="bypass _bbsClassList;94" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
647+ <td FIXWIDTH=150 align=center><button value="Soultaker" action="bypass _bbsClassList;95" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
648+ </tr>
649+ <tr>
650+ <td FIXWIDTH=150 align=center><button value="Arcana Lord" action="bypass _bbsClassList;96" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
651+ <td FIXWIDTH=150 align=center><button value="Cardinal" action="bypass _bbsClassList;97" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
652+ <td FIXWIDTH=150 align=center><button value="Hierophant" action="bypass _bbsClassList;98" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
653+ <td FIXWIDTH=150 align=center><button value="Evas Templar" action="bypass _bbsClassList;99" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
654+ </tr>
655+ <tr>
656+ <td FIXWIDTH=150 align=center><button value="Sword Muse" action="bypass _bbsClassList;100" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
657+ <td FIXWIDTH=150 align=center><button value="Wind Rider" action="bypass _bbsClassList;101" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
658+ <td FIXWIDTH=150 align=center><button value="Moonlight Sentinel" action="bypass _bbsClassList;102" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
659+ <td FIXWIDTH=150 align=center><button value="Mystic Muse" action="bypass _bbsClassList;103" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
660+ </tr>
661+ <tr>
662+ <td FIXWIDTH=150 align=center><button value="Elemental Master" action="bypass _bbsClassList;104" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
663+ <td FIXWIDTH=150 align=center><button value="Evas Saint" action="bypass _bbsClassList;105" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
664+ <td FIXWIDTH=150 align=center><button value="Shillien Templar" action="bypass _bbsClassList;106" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
665+ <td FIXWIDTH=150 align=center><button value="Spectral Dancer" action="bypass _bbsClassList;107" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
666+ </tr>
667+ <tr>
668+ <td FIXWIDTH=150 align=center><button value="Ghost Hunter" action="bypass _bbsClassList;108" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
669+ <td FIXWIDTH=150 align=center><button value="Ghost Sentinel" action="bypass _bbsClassList;109" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
670+ <td FIXWIDTH=150 align=center><button value="Storm Screamer" action="bypass _bbsClassList;110" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
671+ <td FIXWIDTH=150 align=center><button value="Soultaker" action="bypass _bbsClassList;95" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
672+ </tr>
673+ <tr>
674+ <td FIXWIDTH=150 align=center><button value="Spectral Master" action="bypass _bbsClassList;111" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
675+ <td FIXWIDTH=150 align=center><button value="Shillien Saint" action="bypass _bbsClassList;112" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
676+ <td FIXWIDTH=150 align=center><button value="Titan" action="bypass _bbsClassList;113" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
677+ <td FIXWIDTH=150 align=center><button value="Grand Khavatari" action="bypass _bbsClassList;114" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
678+ </tr>
679+ <tr>
680+ <td FIXWIDTH=150 align=center><button value="Dominator" action="bypass _bbsClassList;115" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
681+ <td FIXWIDTH=150 align=center><button value="Doomcryer" action="bypass _bbsClassList;116" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
682+ <td FIXWIDTH=150 align=center><button value="Fortune Seeker" action="bypass _bbsClassList;117" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
683+ <td FIXWIDTH=150 align=center><button value="Maestro" action="bypass _bbsClassList;118" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"></td>
684+ </tr>
685+ </table>
686+ </center>
687+ </body>
688+</html>
689Index: /trunk/aCis_datapack/data/html/CommunityBoard/stats/topAdena.htm
690===================================================================
691--- /trunk/aCis_datapack/data/html/CommunityBoard/stats/topAdena.htm (revision 81)
692+++ /trunk/aCis_datapack/data/html/CommunityBoard/stats/topAdena.htm (revision 81)
693@@ -0,0 +1,29 @@
694+<html>
695+ <body>
696+ <br>
697+ <br><br><br>
698+ <center>
699+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
700+ <br>
701+ <font color="AAAAAA">Most Rich Players</font>
702+ <br>
703+ <table border=0 cellspacing=0 cellpadding=2 bgcolor=000000 height=24 width=610>
704+ <tr>
705+ <td FIXWIDTH=5></td>
706+ <td FIXWIDTH=20>#</td>
707+ <td FIXWIDTH=180>Name</td>
708+ <td FIXWIDTH=175>Class</td>
709+ <td fixwidth=60>PvP</td>
710+ <td fixwidth=60>Pk</td>
711+ <td fixwidth=70 align=center>R.Points</td>
712+ <td fixwidth=140><font color="CCCC66">Adenas</font></td>
713+ <td fixwidth=150>In Game</td>
714+ <td FIXWIDTH=65>Status</td>
715+ </tr>
716+ </table>
717+ %topadena%
718+ <br>
719+ <font color="585858">Last updated: %lastUpdate%</font>
720+ </center>
721+ </body>
722+</html>
723Index: /trunk/aCis_datapack/data/html/CommunityBoard/stats/topOnline.htm
724===================================================================
725--- /trunk/aCis_datapack/data/html/CommunityBoard/stats/topOnline.htm (revision 81)
726+++ /trunk/aCis_datapack/data/html/CommunityBoard/stats/topOnline.htm (revision 81)
727@@ -0,0 +1,29 @@
728+<html>
729+ <body>
730+ <br>
731+ <br><br><br>
732+ <center>
733+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
734+ <br>
735+ <font color="AAAAAA">Most Active Players</font>
736+ <br>
737+ <table border=0 cellspacing=0 cellpadding=2 bgcolor=000000 height=24 width=610>
738+ <tr>
739+ <td FIXWIDTH=5></td>
740+ <td FIXWIDTH=20>#</td>
741+ <td FIXWIDTH=180>Name</td>
742+ <td FIXWIDTH=175>Class</td>
743+ <td fixwidth=60>PvP</td>
744+ <td fixwidth=60>Pk</td>
745+ <td fixwidth=70 align=center>R.Points</td>
746+ <td fixwidth=140>Adenas</td>
747+ <td fixwidth=150><font color="CCCC66">In Game</font></td>
748+ <td FIXWIDTH=65>Status</td>
749+ </tr>
750+ </table>
751+ %toponline%
752+ <br>
753+ <font color="585858">Last updated: %lastUpdate%</font>
754+ </center>
755+ </body>
756+</html>
757Index: /trunk/aCis_datapack/data/html/CommunityBoard/stats/topPk.htm
758===================================================================
759--- /trunk/aCis_datapack/data/html/CommunityBoard/stats/topPk.htm (revision 81)
760+++ /trunk/aCis_datapack/data/html/CommunityBoard/stats/topPk.htm (revision 81)
761@@ -0,0 +1,29 @@
762+<html>
763+ <body>
764+ <br>
765+ <br><br><br>
766+ <center>
767+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
768+ <br>
769+ <font color="AAAAAA">Top Pk Killers</font>
770+ <br>
771+ <table border=0 cellspacing=0 cellpadding=2 bgcolor=000000 height=24 width=610>
772+ <tr>
773+ <td FIXWIDTH=5></td>
774+ <td FIXWIDTH=20>#</td>
775+ <td FIXWIDTH=180>Name</td>
776+ <td FIXWIDTH=175>Class</td>
777+ <td fixwidth=60>PvP</td>
778+ <td fixwidth=60><font color="CCCC66">Pk</font></td>
779+ <td fixwidth=70 align=center>R.Points</td>
780+ <td fixwidth=140>Adenas</td>
781+ <td fixwidth=150>In Game</td>
782+ <td FIXWIDTH=65>Status</td>
783+ </tr>
784+ </table>
785+ %toppk%
786+ <br>
787+ <font color="585858">Last updated: %lastUpdate%</font>
788+ </center>
789+ </body>
790+</html>
791Index: /trunk/aCis_datapack/data/html/CommunityBoard/stats/topPvp.htm
792===================================================================
793--- /trunk/aCis_datapack/data/html/CommunityBoard/stats/topPvp.htm (revision 81)
794+++ /trunk/aCis_datapack/data/html/CommunityBoard/stats/topPvp.htm (revision 81)
795@@ -0,0 +1,29 @@
796+<html>
797+ <body>
798+ <br>
799+ <br><br><br>
800+ <center>
801+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
802+ <br>
803+ <font color="AAAAAA">Top PvP Killers</font>
804+ <br>
805+ <table border=0 cellspacing=0 cellpadding=2 bgcolor=000000 height=24 width=610>
806+ <tr>
807+ <td FIXWIDTH=5></td>
808+ <td FIXWIDTH=20>#</td>
809+ <td FIXWIDTH=180>Name</td>
810+ <td FIXWIDTH=175>Class</td>
811+ <td fixwidth=60><font color="CCCC66">PvP</font></td>
812+ <td fixwidth=60>Pk</td>
813+ <td fixwidth=70 align=center>R.Points</td>
814+ <td fixwidth=140>Adenas</td>
815+ <td fixwidth=150>In Game</td>
816+ <td FIXWIDTH=65>Status</td>
817+ </tr>
818+ </table>
819+ %toppvp%
820+ <br>
821+ <font color="585858">Last updated: %lastUpdate%</font>
822+ </center>
823+ </body>
824+</html>
825Index: /trunk/aCis_datapack/data/html/CommunityBoard/stats/topRaid.htm
826===================================================================
827--- /trunk/aCis_datapack/data/html/CommunityBoard/stats/topRaid.htm (revision 81)
828+++ /trunk/aCis_datapack/data/html/CommunityBoard/stats/topRaid.htm (revision 81)
829@@ -0,0 +1,29 @@
830+<html>
831+ <body>
832+ <br>
833+ <br><br><br>
834+ <center>
835+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
836+ <br>
837+ <font color="AAAAAA">Top Raid Boss Killers</font>
838+ <br>
839+ <table border=0 cellspacing=0 cellpadding=2 bgcolor=000000 height=24 width=610>
840+ <tr>
841+ <td FIXWIDTH=5></td>
842+ <td FIXWIDTH=20>#</td>
843+ <td FIXWIDTH=180>Name</td>
844+ <td FIXWIDTH=175>Class</td>
845+ <td fixwidth=60>PvP</td>
846+ <td fixwidth=60>Pk</td>
847+ <td fixwidth=70 align=center><font color="CCCC66">R.Points</font></td>
848+ <td fixwidth=140>Adenas</td>
849+ <td fixwidth=150>In Game</td>
850+ <td FIXWIDTH=65>Status</td>
851+ </tr>
852+ </table>
853+ %topraid%
854+ <br>
855+ <font color="585858">Last updated: %lastUpdate%</font>
856+ </center>
857+ </body>
858+</html>
859Index: /trunk/aCis_datapack/data/html/CommunityBoard/top/index.htm
860===================================================================
861--- /trunk/aCis_datapack/data/html/CommunityBoard/top/index.htm (revision 80)
862+++ /trunk/aCis_datapack/data/html/CommunityBoard/top/index.htm (revision 81)
863@@ -1,67 +1,70 @@
864-<html><body><br>
865- <table width="610">
866- <tr>
867- <td align="center" height="30"><img src="l2ui.bbs_lineage2" width="128" height="16"></td>
868- </tr>
869- </table>
870- <table width="610" bgcolor="A7A19A">
871- <tr>
872- <td width="50" align="center">&$412;</td>
873- <td width="380" align="center">&$413;</td>
874- <td width="90" align="center">&$414;</td>
875- <td width="90" align="center">&$415;</td>
876- </tr>
877- </table><br>
878- <table width="610">
879- <tr>
880- <td width="50" align="center"><img src="l2ui.bbs_folder" width="32" height="32"></td>
881- <td width="380" align="left"><a action="bypass _bbsgetfav">Favorites</a><br1><font color="AAAAAA">Bookmarks</font></td>
882- <td width="90" align="center">0</td>
883- <td width="90" align="center">admin</td>
884- </tr>
885- </table>
886- <table border=0 cellspacing=0 cellpadding=0>
887- <tr>
888- <td width=610><img src="l2ui.squaregray" width="600" height="1"></td>
889- </tr>
890- </table><br>
891- <table border=0 cellspacing=0 cellpadding=2>
892- <tr>
893- <td FIXWIDTH=50 align=right valign=top><img src="l2ui.bbs_folder" width=32 height=32></td>
894- <td FIXWIDTH=380 align=left valign=top><a action="bypass _bbshome;rules.htm">Server Rules</a><br1><font color="AAAAAA">Read them carefully</font></td>
895- <td FIXWIDTH=90 align=center valign=top>0</td>
896- <td FIXWIDTH=90 align=center valign=top>admin</td>
897- </tr>
898- </table>
899- <table border=0 cellspacing=0 cellpadding=0>
900- <tr>
901- <td width=610><img src="l2ui.squaregray" width="600" height="1"></td>
902- </tr>
903- </table><br>
904- <table border=0 cellspacing=0 cellpadding=2>
905- <tr>
906- <td FIXWIDTH=50 align=right valign=top><img src="l2ui.bbs_folder" width=32 height=32></td>
907- <td FIXWIDTH=380 align=left valign=top><a action="bypass _bbshome;news.htm">Lineage II News</a><br1><font color="AAAAAA">New Information</font></td>
908- <td FIXWIDTH=90 align=center valign=top>0</td>
909- <td FIXWIDTH=90 align=center valign=top>admin</td>
910- </tr>
911- </table>
912- <table border=0 cellspacing=0 cellpadding=0>
913- <tr>
914- <td width=610><img src="l2ui.squaregray" width="600" height="1"></td>
915- </tr>
916- </table><br>
917- <table border=0 cellspacing=0 cellpadding=2>
918- <tr>
919- <td FIXWIDTH=50 align=right valign=top><img src="l2ui.bbs_folder" width=32 height=32></td>
920- <td FIXWIDTH=380 align=left valign=top><a action="bypass _bbsclan">Clan Community</a><br1><font color="AAAAAA">Clan Community</font></td>
921- <td FIXWIDTH=90 align=center valign=top>0</td>
922- <td FIXWIDTH=90 align=center valign=top>admin</td>
923- </tr>
924- </table>
925- <table border=0 cellspacing=0 cellpadding=0>
926- <tr>
927- <td width=610><img src="l2ui.squaregray" width="600" height="1"></td>
928- </tr>
929- </table>
930-</center></body></html>
931+<html>
932+ <body>
933+ <br>
934+ <center><img src="l2ui.bbs_lineage2" width="80" height="16"></center>
935+ <br>
936+ <center><img src="l2ui.squaregray" width="600" height="1"></center>
937+ <table width="610">
938+ <tr>
939+ <td width="50" align="center"><img src="l2ui.bbs_folder" width="32" height="32"></td>
940+ <td width="380" align="left"><a action="bypass _bbsannouncements;show">Announcements</a><br1><font color="AAAAAA">Here you can read about our latest server announcements.</font></td>
941+ </tr>
942+ </table>
943+ <center><img src="l2ui.squaregray" width="600" height="1"></center>
944+ <table width="610">
945+ <tr>
946+ <td width="50" align="center"><img src="l2ui.maincharacter_small" width="32" height="32"></td>
947+ <td width="380" align="left"><a action="bypass _bbshome;../donation/main.htm">Submit Donation</a><br1><font color="AAAAAA">Every donation is making our server stronger! We need this money to pay our feeds.</font></td>
948+ </tr>
949+ </table>
950+ <center><img src="l2ui.squaregray" width="600" height="1"></center>
951+ <table width="610">
952+ <tr>
953+ <td width="50" align="center"><img src="l2ui.mainsystem_small" width="32" height="32"></td>
954+ <td width="380" align="left"><a action="bypass _bbsProblemReport">Problem Report</a><br1><font color="AAAAAA">If you have noticed any problems, bugs or bots. Please report them to the staff.</font></td>
955+ </tr>
956+ </table>
957+ <center><img src="l2ui.squaregray" width="600" height="1"></center>
958+ <br><br><br>
959+ <center><img src="L2UI_CH3.herotower_deco" width=256 height=32></center>
960+ <br><br><br>
961+ <center><img src="l2ui.squaregray" width="600" height="1"></center>
962+ <table width="610">
963+ <tr>
964+ <td width="50" align="center"><img src="l2ui.mainskill_small" width="32" height="32"></td>
965+ <td width="380" align="left">
966+ <a action="bypass _bbsstats;pvp">Top PvP Killers</a> |
967+ <a action="bypass _bbsstats;pk">Top Pk Killers</a> |
968+ <a action="bypass _bbsstats;raid">Top Raid Points</a> |
969+ <a action="bypass _bbsstats;adena">Most Rich Players</a> |
970+ <a action="bypass _bbsstats;online">Most Active Players</a><br1>
971+ <font color=AAAAAA>Find out which are our best players.</font><br>
972+ </td>
973+ </tr>
974+ </table>
975+ <center><img src="l2ui.squaregray" width="600" height="1"></center>
976+ <table width="610">
977+ <tr>
978+ <td width="50" align="center"><img src="l2ui.mainquest_small" width="32" height="32"></td>
979+ <td width="380" align="left">
980+ <a action="bypass _bbsOlStats">Olympiad Status</a> |
981+ <a action="bypass _bbsGrandBoss">Grand Boss Status</a><br1>
982+ <font color=AAAAAA>Learn valuable information about our world.</font><br>
983+ </td>
984+ </tr>
985+ </table>
986+ <center><img src="l2ui.squaregray" width="600" height="1"></center>
987+ <table width="610">
988+ <tr>
989+ <td width="50" align="center"><img src="l2ui.mainstatus_small" width="32" height="32"></td>
990+ <td width="380" align="left">
991+ <a action="bypass _bbsShowRepair">Repair Broken Character</a> |
992+ <a action="bypass _bbshome;passChange.htm">Change Account Password</a><br1>
993+ <font color=AAAAAA>Use our special services to help your self out.</font><br>
994+ </td>
995+ </tr>
996+ </table>
997+ <center><img src="l2ui.squaregray" width="600" height="1"></center>
998+ <br><br><br><br>
999+ </body>
1000+</html>
1001Index: /trunk/aCis_datapack/data/html/CommunityBoard/top/passChange.htm
1002===================================================================
1003--- /trunk/aCis_datapack/data/html/CommunityBoard/top/passChange.htm (revision 81)
1004+++ /trunk/aCis_datapack/data/html/CommunityBoard/top/passChange.htm (revision 81)
1005@@ -0,0 +1,44 @@
1006+<html>
1007+ <body>
1008+ <br>
1009+ <br><br><br>
1010+ <center>
1011+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
1012+ <br>
1013+ <font color="AAAAAA">Password Change Function</font><br>
1014+ <img src="l2ui.squaregray" width="500" height="1"><br>
1015+ <br>
1016+ <table width="400" cellpadding="5">
1017+ <tr>
1018+ <td width="45" valign="top" align="center"><img src="icon.action006" width="32" height="32"></td>
1019+ <td valign="top">
1020+ Changing your password often is not recommended, because<br1>
1021+ more passwords means more confusion and you might forget it.
1022+ </td>
1023+ </tr>
1024+ </table>
1025+ <br>
1026+ <img src="l2ui.SquareGray" width="400" height="1">
1027+ <br>
1028+ Please fill all the fields bellow.<br>
1029+ <table width="210" cellpadding="5">
1030+ <tr>
1031+ <td width=100 valign="top">Current Password:</td>
1032+ <td width=100 valign="top"><edit var="cur" width=100 height=12></td>
1033+ </tr>
1034+ <tr>
1035+ <td width=100 valign="top">New Password:</td>
1036+ <td width=100 valign="top"><edit var="new" width=100 height=12></td>
1037+ </tr>
1038+ <tr>
1039+ <td width=100 valign="top">Repeat Password:</td>
1040+ <td width=100 valign="top"><edit var="repeatnew" width=100 height=12></td>
1041+ </tr>
1042+ </table>
1043+ <br>
1044+ <img src="l2ui.SquareGray" width="400" height="1"><br>
1045+ <button value="Change my password" action="bypass _bbsChangePass $cur $new $repeatnew" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton"/>
1046+ </center>
1047+ <center><img src="l2ui.squaregray" width="500" height="1"></center><br>
1048+ </body>
1049+</html>
1050Index: /trunk/aCis_datapack/data/html/CommunityBoard/top/passChanged.htm
1051===================================================================
1052--- /trunk/aCis_datapack/data/html/CommunityBoard/top/passChanged.htm (revision 81)
1053+++ /trunk/aCis_datapack/data/html/CommunityBoard/top/passChanged.htm (revision 81)
1054@@ -0,0 +1,16 @@
1055+<html>
1056+ <body>
1057+ <br>
1058+ <br><br><br>
1059+ <center>
1060+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
1061+ <br>
1062+ <font color="AAAAAA">Password Change Function</font><br>
1063+ <img src="l2ui.squaregray" width="500" height="1"><br>
1064+ <br>
1065+ Password changing procedure has been successfully finished!<br>
1066+ Please re-login to confirm your new password.<br>
1067+ </center>
1068+ <center><img src="l2ui.squaregray" width="500" height="1"></center><br>
1069+ </body>
1070+</html>
1071Index: /trunk/aCis_datapack/data/html/CommunityBoard/top/repair.htm
1072===================================================================
1073--- /trunk/aCis_datapack/data/html/CommunityBoard/top/repair.htm (revision 81)
1074+++ /trunk/aCis_datapack/data/html/CommunityBoard/top/repair.htm (revision 81)
1075@@ -0,0 +1,36 @@
1076+<html>
1077+ <body>
1078+ <br>
1079+ <br><br><br>
1080+ <center>
1081+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
1082+ <br>
1083+ <font color="AAAAAA">Character Repair Function</font><br>
1084+ <img src="l2ui.squaregray" width="500" height="1"><br>
1085+ <br>
1086+ <table width="300" cellpadding="5">
1087+ <tr>
1088+ <td width="45" valign="top" align="center"><img src="icon.skill4376" width="32" height="32"></td>
1089+ <td valign="top">Use this tool, to fix problems with your other<br1>character. Like client crashing while loading.</td>
1090+ </tr>
1091+ </table>
1092+ <br>
1093+ <img src="l2ui.SquareGray" width="300" height="1">
1094+ <br>
1095+ <table width="300" cellpadding="5">
1096+ <tr>
1097+ <td valign="top"><font color="FF6600">Choose broken character name.</font><br1>
1098+ Choose character name, that you wish to<br1>attempt to fix. It will be moved to Floran<br1>
1099+ and removed shortcuts and keyboard<br1>configuration.</td>
1100+ </tr>
1101+ <tr>
1102+ <td align=center><combobox var="name" list="%acc_chars%" width="170" height="15"/></td>
1103+ </tr>
1104+ </table>
1105+ <br>
1106+ <img src="l2ui.SquareGray" width="300" height="1"><br>
1107+ <button value="Repair the character" action="bypass _bbsRepair $name" width=140 height=21 back="L2UI_ch3.msnbutton_down" fore="L2UI_ch3.msnbutton">
1108+ </center>
1109+ <center><img src="l2ui.squaregray" width="500" height="1"></center><br>
1110+ </body>
1111+</html>
1112Index: /trunk/aCis_datapack/data/html/CommunityBoard/top/repaired.htm
1113===================================================================
1114--- /trunk/aCis_datapack/data/html/CommunityBoard/top/repaired.htm (revision 81)
1115+++ /trunk/aCis_datapack/data/html/CommunityBoard/top/repaired.htm (revision 81)
1116@@ -0,0 +1,17 @@
1117+<html>
1118+ <body>
1119+ <br>
1120+ <br><br><br>
1121+ <center>
1122+ <img src="L2UI_CH3.herotower_deco" width=256 height=32>
1123+ <br>
1124+ <font color="AAAAAA">Character Repair Function</font><br>
1125+ <img src="l2ui.squaregray" width="500" height="1"><br>
1126+ <br>
1127+ Repairing procedure has been successfully finished!<br>
1128+ Relog now on broken character, to confirm that repairing operation was sucessfull.<br>
1129+ If not, contact server Support and ask for help.<br>
1130+ </center>
1131+ <center><img src="l2ui.squaregray" width="500" height="1"></center><br>
1132+ </body>
1133+</html>
1134Index: /trunk/aCis_datapack/sql/bbs_announcements.sql
1135===================================================================
1136--- /trunk/aCis_datapack/sql/bbs_announcements.sql (revision 81)
1137+++ /trunk/aCis_datapack/sql/bbs_announcements.sql (revision 81)
1138@@ -0,0 +1,8 @@
1139+CREATE TABLE IF NOT EXISTS `bbs_announcements` (
1140+ `announce_id` INT NOT NULL default 0,
1141+ `announce_title` varchar(150),
1142+ `announce_text` varchar(1000),
1143+ `announce_date` varchar(10),
1144+ `author` varchar(16),
1145+ PRIMARY KEY (`announce_id`)
1146+);
1147Index: /trunk/aCis_gameserver/config/custom.properties
1148===================================================================
1149--- /trunk/aCis_gameserver/config/custom.properties (revision 80)
1150+++ /trunk/aCis_gameserver/config/custom.properties (revision 81)
1151@@ -8,5 +8,5 @@
1152
1153 # ================================================================
1154-# Player Config
1155+# Player Config
1156 # ================================================================
1157
1158@@ -30,7 +30,46 @@
1159 AltSpawnNewCharZ = -6756
1160
1161-#=============================================================
1162+# ================================================================
1163+# Custom Community Board
1164+# ================================================================
1165+
1166+# Donation Functions
1167+# - Donations will be saved into /data/donations/ folder.
1168+# - And message will be send to the staff on login if there are new donations.
1169+# - Once you've confirmed the donation delete the file or move it to other
1170+# - folder because the system will not allow more donations from that player.
1171+# Default: False
1172+EnablePaySafeBBSDonation = True
1173+
1174+# PayPal donation Page.
1175+# Default: False
1176+EnablePayPalBBSDonation = True
1177+
1178+# Top Players Options
1179+# Default value: 24
1180+TopPlayerRowHeight = 24
1181+
1182+# Here you can specify the amount of the results that will be displayed.
1183+# Default value: 15
1184+TopPlayerResults = 15
1185+
1186+# Problem Reporting Function.
1187+# - Problem reports will be saved into /data/reports/ folder.
1188+# - Staff members will receive message on enter world if there is any bug report.
1189+# - The file should be deleted / moved to other folder after reading it because the player will not be able to submit more reports.
1190+# Default: False
1191+EnableProblemReportingBBSFuncion = True
1192+
1193+# Character Repair Function.
1194+# Default: False
1195+EnableRepairBBS = True
1196+
1197+# Password Change Function.
1198+# Default: False
1199+EnablePasswordChangeBBS = True
1200+
1201+# ================================================================
1202 # Blessed Enchant
1203-#=============================================================
1204+# ================================================================
1205 # % chance of success to enchant a magic weapon
1206 EnchantChanceMagicWeaponBlessed = 0.4
1207@@ -45,5 +84,5 @@
1208
1209 # ================================================================
1210-# Skill Time Modify
1211+# Skill Time Modify
1212 # ================================================================
1213 # Enable to modify skill duration data
1214Index: /trunk/aCis_gameserver/java/net/sf/l2j/Config.java
1215===================================================================
1216--- /trunk/aCis_gameserver/java/net/sf/l2j/Config.java (revision 80)
1217+++ /trunk/aCis_gameserver/java/net/sf/l2j/Config.java (revision 81)
1218@@ -602,4 +602,12 @@
1219 public static int ALT_SPAWN_FOR_NEW_CHAR_Y;
1220 public static int ALT_SPAWN_FOR_NEW_CHAR_Z;
1221+ /** Custom Community Board */
1222+ public static boolean ENABLE_PAY_SAFE_DONATION_BBS;
1223+ public static boolean ENABLE_PAY_PAL_DONATION_BBS;
1224+ public static int TOP_PLAYER_ROW_HEIGHT;
1225+ public static int TOP_PLAYER_RESULTS;
1226+ public static boolean ENABLE_BBS_REPORT;
1227+ public static boolean ENABLE_REPAIR_BBS;
1228+ public static boolean ENABLE_BBS_PASS_CHANGE;
1229
1230 /** Flood Protectors */
1231@@ -685,4 +693,11 @@
1232 final ExProperties custom = initProperties(Config.CUSTOM_FILE);
1233
1234+ ENABLE_PAY_SAFE_DONATION_BBS = custom.getProperty("EnablePaySafeBBSDonation", true);
1235+ ENABLE_PAY_PAL_DONATION_BBS = custom.getProperty("EnablePayPalBBSDonation", true);
1236+ TOP_PLAYER_ROW_HEIGHT = custom.getProperty("TopPlayerRowHeight", 19);
1237+ TOP_PLAYER_RESULTS = custom.getProperty("TopPlayerResults", 15);
1238+ ENABLE_BBS_REPORT = custom.getProperty("EnableProblemReportingBBSFuncion", true);
1239+ ENABLE_REPAIR_BBS = custom.getProperty("EnableRepairBBS", true);
1240+ ENABLE_BBS_PASS_CHANGE = custom.getProperty("EnablePasswordChangeBBS", true);
1241 ALLOW_TITLE_FOR_NEW_CHARS = Boolean.parseBoolean(custom.getProperty("AllowNewCharTitle", "False"));
1242 TITLE_FOR_NEW_CHARS = custom.getProperty("SetNewCharTitle", "L2OldStyle");
1243Index: /trunk/aCis_gameserver/java/net/sf/l2j/L2DatabaseFactory.java
1244===================================================================
1245--- /trunk/aCis_gameserver/java/net/sf/l2j/L2DatabaseFactory.java (revision 80)
1246+++ /trunk/aCis_gameserver/java/net/sf/l2j/L2DatabaseFactory.java (revision 81)
1247@@ -131,3 +131,11 @@
1248 }
1249 }
1250+ public static void close(Connection con)
1251+ {
1252+ try
1253+ {
1254+ con.close();
1255+ }
1256+ catch (Exception e) {}
1257+ }
1258 }
1259Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
1260===================================================================
1261--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java (revision 80)
1262+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java (revision 81)
1263@@ -17,4 +17,6 @@
1264 import net.sf.l2j.L2DatabaseFactory;
1265 import net.sf.l2j.gameserver.communitybbs.Manager.ForumsBBSManager;
1266+import net.sf.l2j.gameserver.communitybbs.tasks.AnnouncementsUpdateManager;
1267+import net.sf.l2j.gameserver.communitybbs.tasks.PlayerStatsUpdateTask;
1268 import net.sf.l2j.gameserver.data.ItemTable;
1269 import net.sf.l2j.gameserver.data.SkillTable;
1270@@ -188,5 +190,9 @@
1271 StringUtil.printSection("Community server");
1272 if (Config.ENABLE_COMMUNITY_BOARD) // Forums has to be loaded before clan data
1273+ {
1274+ AnnouncementsUpdateManager.loadSection();
1275+ PlayerStatsUpdateTask.updateTask();
1276 ForumsBBSManager.getInstance().initRoot();
1277+ }
1278 else
1279 LOGGER.info("Community server is disabled.");
1280Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/CommunityBoard.java
1281===================================================================
1282--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/CommunityBoard.java (revision 80)
1283+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/CommunityBoard.java (revision 81)
1284@@ -2,10 +2,18 @@
1285
1286 import net.sf.l2j.Config;
1287+import net.sf.l2j.gameserver.communitybbs.Manager.AnnouncementsBBSManager;
1288 import net.sf.l2j.gameserver.communitybbs.Manager.BaseBBSManager;
1289+import net.sf.l2j.gameserver.communitybbs.Manager.BossBBSManager;
1290 import net.sf.l2j.gameserver.communitybbs.Manager.ClanBBSManager;
1291+import net.sf.l2j.gameserver.communitybbs.Manager.DonationBBSManager;
1292 import net.sf.l2j.gameserver.communitybbs.Manager.FriendsBBSManager;
1293 import net.sf.l2j.gameserver.communitybbs.Manager.MailBBSManager;
1294+import net.sf.l2j.gameserver.communitybbs.Manager.OlStatsBBSManager;
1295+import net.sf.l2j.gameserver.communitybbs.Manager.PasswordBBSManager;
1296 import net.sf.l2j.gameserver.communitybbs.Manager.PostBBSManager;
1297+import net.sf.l2j.gameserver.communitybbs.Manager.ProblemReportBBSManager;
1298 import net.sf.l2j.gameserver.communitybbs.Manager.RegionBBSManager;
1299+import net.sf.l2j.gameserver.communitybbs.Manager.RepairBBSManager;
1300+import net.sf.l2j.gameserver.communitybbs.Manager.StatsBBSManager;
1301 import net.sf.l2j.gameserver.communitybbs.Manager.TopBBSManager;
1302 import net.sf.l2j.gameserver.communitybbs.Manager.TopicBBSManager;
1303@@ -48,4 +56,36 @@
1304 else if (command.startsWith("_bbsposts"))
1305 PostBBSManager.getInstance().parseCmd(command, player);
1306+ else if (command.startsWith("_bbsstats"))
1307+ {
1308+ StatsBBSManager.getInstance().parseCmd(command, player);
1309+ }
1310+ else if ((command.startsWith("_bbsOlStats")) || (command.startsWith("_bbsClassList")))
1311+ {
1312+ OlStatsBBSManager.getInstance().parseCmd(command, player);
1313+ }
1314+ else if (command.startsWith("_bbsannouncements"))
1315+ {
1316+ AnnouncementsBBSManager.getInstance().parseCmd(command, player);
1317+ }
1318+ else if (command.startsWith("_bbsdonation"))
1319+ {
1320+ DonationBBSManager.getInstance().parseCmd(command, player);
1321+ }
1322+ else if (command.startsWith("_bbsProblemReport"))
1323+ {
1324+ ProblemReportBBSManager.getInstance().parseCmd(command, player);
1325+ }
1326+ else if (command.equals("_bbsGrandBoss"))
1327+ {
1328+ BossBBSManager.getInstance().parseCmd(command, player);
1329+ }
1330+ else if ((command.equals("_bbsShowRepair")) || (command.startsWith("_bbsRepair")))
1331+ {
1332+ RepairBBSManager.getInstance().parseCmd(command, player);
1333+ }
1334+ else if ((command.equals("_bbsPassPanel")) || (command.startsWith("_bbsChangePass")))
1335+ {
1336+ PasswordBBSManager.getInstance().parseCmd(command, player);
1337+ }
1338 else
1339 BaseBBSManager.separateAndSend("<html><body><br><br><center>The command: " + command + " isn't implemented.</center></body></html>", player);
1340Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/AnnouncementsBBSManager.java
1341===================================================================
1342--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/AnnouncementsBBSManager.java (revision 81)
1343+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/AnnouncementsBBSManager.java (revision 81)
1344@@ -0,0 +1,321 @@
1345+/*
1346+ * This program is free software: you can redistribute it and/or modify it under
1347+ * the terms of the GNU General Public License as published by the Free Software
1348+ * Foundation, either version 3 of the License, or (at your option) any later
1349+ * version.
1350+ *
1351+ * This program is distributed in the hope that it will be useful, but WITHOUT
1352+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
1353+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
1354+ * details.
1355+ *
1356+ * You should have received a copy of the GNU General Public License along with
1357+ * this program. If not, see <http://www.gnu.org/licenses/>.
1358+ */
1359+package net.sf.l2j.gameserver.communitybbs.Manager;
1360+
1361+import java.sql.Connection;
1362+import java.sql.PreparedStatement;
1363+import java.sql.ResultSet;
1364+import java.sql.SQLException;
1365+import java.text.DateFormat;
1366+import java.text.SimpleDateFormat;
1367+import java.util.Date;
1368+import java.util.StringTokenizer;
1369+import java.util.logging.Level;
1370+import java.util.logging.Logger;
1371+
1372+import net.sf.l2j.L2DatabaseFactory;
1373+import net.sf.l2j.gameserver.communitybbs.tasks.AnnouncementsUpdateManager;
1374+import net.sf.l2j.gameserver.data.cache.HtmCache;
1375+import net.sf.l2j.gameserver.model.actor.Player;
1376+
1377+public class AnnouncementsBBSManager extends BaseBBSManager
1378+{
1379+ private static final Logger _log = Logger.getLogger(AnnouncementsBBSManager.class.getName());
1380+
1381+ static String _title;
1382+
1383+ public static AnnouncementsBBSManager getInstance()
1384+ {
1385+ return SingletonHolder._instance;
1386+ }
1387+
1388+ @Override
1389+ public void parseCmd(String command, Player activeChar)
1390+ {
1391+ if (command.startsWith("_bbsannouncements"))
1392+ {
1393+ StringTokenizer st = new StringTokenizer(command, ";");
1394+ st.nextToken();
1395+ String secondCommand = st.nextToken();
1396+
1397+ if (secondCommand.equalsIgnoreCase("show"))
1398+ {
1399+ showList(activeChar);
1400+ }
1401+ else if (secondCommand.equalsIgnoreCase("write"))
1402+ {
1403+ separateAndSend(HtmCache.getInstance().getHtm("data/html/CommunityBoard/announcements/adminWrite.htm"), activeChar);
1404+ }
1405+ else if (secondCommand.startsWith("postTitle"))
1406+ {
1407+ String title = secondCommand.substring(9);
1408+ if (title == "")
1409+ {
1410+ activeChar.sendMessage("Please insert title first.");
1411+ return;
1412+ }
1413+ if (title.length() >= 150)
1414+ {
1415+ activeChar.sendMessage("The current title lenght is " + title.length() + ". Maximum lenght is 150!");
1416+ return;
1417+ }
1418+ setTitle(title);
1419+
1420+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/announcements/adminWrite2.htm");
1421+ content = content.replaceAll("%title%", getTitle());
1422+ separateAndSend(content, activeChar);
1423+ }
1424+ else if (secondCommand.startsWith("postText"))
1425+ {
1426+ String content = secondCommand.substring(9);
1427+ if (content == "")
1428+ {
1429+ activeChar.sendMessage("Please insert your post content. This message cannot be empty.");
1430+ return;
1431+ }
1432+ if (content.length() >= 1000)
1433+ {
1434+ activeChar.sendMessage("The current content lenght is " + content.length() + ". Maximum lenght is 1000!");
1435+ return;
1436+ }
1437+ insertAnnouncement(getTitle(), content, activeChar);
1438+ }
1439+ else if (secondCommand.startsWith("read"))
1440+ {
1441+ StringTokenizer st2 = new StringTokenizer(secondCommand);
1442+ st2.nextToken();
1443+
1444+ String command_Id = st2.nextToken();
1445+ int announcement_id = Integer.valueOf(command_Id).intValue();
1446+ showAnnouncement(activeChar, announcement_id);
1447+ }
1448+ }
1449+ else
1450+ {
1451+ super.parseCmd(command, activeChar);
1452+ }
1453+ }
1454+
1455+ @Override
1456+ protected String getFolder()
1457+ {
1458+ return "announcements/";
1459+ }
1460+
1461+ static String getTitle()
1462+ {
1463+ return _title;
1464+ }
1465+
1466+ static void setTitle(String text)
1467+ {
1468+ _title = text;
1469+ }
1470+
1471+ private static void insertAnnouncement(String title, String content, Player activeChar)
1472+ {
1473+ DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
1474+ Date date = new Date();
1475+ try
1476+ {
1477+ Connection con = L2DatabaseFactory.getInstance().getConnection();Throwable localThrowable3 = null;
1478+ try
1479+ {
1480+ PreparedStatement statement = con.prepareStatement("INSERT INTO bbs_announcements (announce_id,announce_title,announce_text,announce_date,author) VALUES (?,?,?,?,?)");
1481+
1482+ statement.setInt(1, getAnnouncementId());
1483+ statement.setString(2, title);
1484+ statement.setString(3, content);
1485+ statement.setString(4, dateFormat.format(date));
1486+ statement.setString(5, activeChar.getName());
1487+ statement.execute();
1488+ statement.close();
1489+ }
1490+ catch (Throwable localThrowable1)
1491+ {
1492+ localThrowable3 = localThrowable1;throw localThrowable1;
1493+ }
1494+ finally
1495+ {
1496+ if (con != null)
1497+ {
1498+ if (localThrowable3 != null)
1499+ {
1500+ try
1501+ {
1502+ con.close();
1503+ }
1504+ catch (Throwable localThrowable2)
1505+ {
1506+ localThrowable3.addSuppressed(localThrowable2);
1507+ }
1508+ }
1509+ else
1510+ {
1511+ con.close();
1512+ }
1513+ }
1514+ }
1515+ }
1516+ catch (SQLException e)
1517+ {
1518+ _log.log(Level.WARNING, "Failed to insert new announcement in database " + e.getMessage(), e);
1519+ }
1520+ AnnouncementsUpdateManager.updateList();
1521+ showList(activeChar);
1522+ }
1523+
1524+ private static int getAnnouncementId()
1525+ {
1526+ int id = 0;
1527+ try
1528+ {
1529+ Connection con = L2DatabaseFactory.getInstance().getConnection();Throwable localThrowable3 = null;
1530+ try
1531+ {
1532+ PreparedStatement statement = con.prepareStatement("SELECT announce_id FROM bbs_announcements ORDER BY announce_id DESC LIMIT 1");
1533+ ResultSet rset = statement.executeQuery();
1534+ while (rset.next())
1535+ {
1536+ id = rset.getInt("announce_id");
1537+ }
1538+ rset.close();
1539+ statement.close();
1540+ }
1541+ catch (Throwable localThrowable1)
1542+ {
1543+ localThrowable3 = localThrowable1;throw localThrowable1;
1544+ }
1545+ finally
1546+ {
1547+ if (con != null)
1548+ {
1549+ if (localThrowable3 != null)
1550+ {
1551+ try
1552+ {
1553+ con.close();
1554+ }
1555+ catch (Throwable localThrowable2)
1556+ {
1557+ localThrowable3.addSuppressed(localThrowable2);
1558+ }
1559+ }
1560+ else
1561+ {
1562+ con.close();
1563+ }
1564+ }
1565+ }
1566+ }
1567+ catch (Exception e)
1568+ {
1569+ _log.log(Level.WARNING, "Failed to load announcementId " + e.getMessage(), e);
1570+ }
1571+ return id + 1;
1572+ }
1573+
1574+ private static void showList(Player activeChar)
1575+ {
1576+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/announcements/main.htm");
1577+ if (activeChar.isGM())
1578+ {
1579+ content = content.replaceAll("%adminMenu%", showAdminMenu());
1580+ }
1581+ else
1582+ {
1583+ content = content.replaceAll("%adminMenu%", "");
1584+ }
1585+ content = content.replaceAll("%showList%", AnnouncementsUpdateManager.showList());
1586+ separateAndSend(content, activeChar);
1587+ }
1588+
1589+ private static void showAnnouncement(Player activeChar, int announcement_id)
1590+ {
1591+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/announcements/postTemplate.htm");
1592+ String title = "";String text = "";String date = "";String author = "";
1593+ try
1594+ {
1595+ Connection con = L2DatabaseFactory.getInstance().getConnection();Throwable localThrowable3 = null;
1596+ try
1597+ {
1598+ PreparedStatement st = con.prepareStatement("SELECT announce_title,announce_text,announce_date,author FROM bbs_announcements WHERE announce_id=?;");
1599+ st.setInt(1, announcement_id);
1600+ ResultSet rset = st.executeQuery();
1601+ while (rset.next())
1602+ {
1603+ title = rset.getString("announce_title");
1604+ text = rset.getString("announce_text");
1605+ date = rset.getString("announce_date");
1606+ author = rset.getString("author");
1607+ }
1608+ rset.close();
1609+ st.close();
1610+ }
1611+ catch (Throwable localThrowable1)
1612+ {
1613+ localThrowable3 = localThrowable1;throw localThrowable1;
1614+ }
1615+ finally
1616+ {
1617+ if (con != null)
1618+ {
1619+ if (localThrowable3 != null)
1620+ {
1621+ try
1622+ {
1623+ con.close();
1624+ }
1625+ catch (Throwable localThrowable2)
1626+ {
1627+ localThrowable3.addSuppressed(localThrowable2);
1628+ }
1629+ }
1630+ else
1631+ {
1632+ con.close();
1633+ }
1634+ }
1635+ }
1636+ }
1637+ catch (SQLException e)
1638+ {
1639+ _log.log(Level.WARNING, "Failed to load post with id " + announcement_id + " and error trace: " + e.getMessage(), e);
1640+ }
1641+ content = content.replaceAll("%title%", title);
1642+ content = content.replaceAll("%text%", text);
1643+ content = content.replaceAll("%date%", date);
1644+ content = content.replaceAll("%author%", author);
1645+ separateAndSend(content, activeChar);
1646+ }
1647+
1648+ static String showAdminMenu()
1649+ {
1650+ StringBuilder tb = new StringBuilder();
1651+
1652+ tb.append("<img src=\"l2ui.squaregray\" width=\"610\" height=\"1\"/><table width=610><tr>");
1653+ tb.append("<td width=110 height=18 align=center><font color=FF0000>Admin Only:</font></td>");
1654+ tb.append("<td width=400 height=18 align=left>The list will show only latest 5 announcements.</td>");
1655+ tb.append("<td width=100 height=18 align=center><button value=\"Write\" action=\"bypass _bbsannouncements;write\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>");
1656+ tb.append("</tr></table><img src=\"l2ui.squaregray\" width=\"610\" height=\"1\"><br><br>");
1657+
1658+ return tb.toString();
1659+ }
1660+
1661+ private static class SingletonHolder
1662+ {
1663+ protected static final AnnouncementsBBSManager _instance = new AnnouncementsBBSManager();
1664+ }
1665+}
1666Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/BossBBSManager.java
1667===================================================================
1668--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/BossBBSManager.java (revision 81)
1669+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/BossBBSManager.java (revision 81)
1670@@ -0,0 +1,99 @@
1671+/*
1672+ * This program is free software: you can redistribute it and/or modify it under
1673+ * the terms of the GNU General Public License as published by the Free Software
1674+ * Foundation, either version 3 of the License, or (at your option) any later
1675+ * version.
1676+ *
1677+ * This program is distributed in the hope that it will be useful, but WITHOUT
1678+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
1679+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
1680+ * details.
1681+ *
1682+ * You should have received a copy of the GNU General Public License along with
1683+ * this program. If not, see <http://www.gnu.org/licenses/>.
1684+ */
1685+package net.sf.l2j.gameserver.communitybbs.Manager;
1686+
1687+import java.util.logging.Level;
1688+import java.util.logging.Logger;
1689+
1690+import net.sf.l2j.gameserver.data.cache.HtmCache;
1691+import net.sf.l2j.gameserver.data.manager.GrandBossManager;
1692+import net.sf.l2j.gameserver.data.xml.NpcData;
1693+import net.sf.l2j.gameserver.model.actor.Player;
1694+
1695+
1696+public class BossBBSManager extends BaseBBSManager
1697+{
1698+ private static final Logger _log = Logger.getLogger(BossBBSManager.class.getName());
1699+
1700+ private static final int[] BOSSES = { 25512, 29001, 29006, 29014, 29019, 29020, 29022, 29028, 29065 };
1701+
1702+ public static BossBBSManager getInstance()
1703+ {
1704+ return SingletonHolder._instance;
1705+ }
1706+
1707+ @Override
1708+ public void parseCmd(String command, Player activeChar)
1709+ {
1710+ if (command.equals("_bbsGrandBoss"))
1711+ {
1712+ showGrandBossStatus(activeChar);
1713+ }
1714+ else
1715+ {
1716+ super.parseCmd(command, activeChar);
1717+ }
1718+ }
1719+
1720+ @Override
1721+ protected String getFolder()
1722+ {
1723+ return "stats/boss";
1724+ }
1725+
1726+ private static void showGrandBossStatus(Player activeChar)
1727+ {
1728+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/stats/boss/grandBoss.htm");
1729+ StringBuilder tb = new StringBuilder();
1730+ try
1731+ {
1732+ for (int boss : BOSSES)
1733+ {
1734+ String name = NpcData.getInstance().getTemplate(boss).getName();
1735+ long delay = GrandBossManager.getInstance().getStatsSet(boss).getLong("respawn_time");
1736+ if (delay <= System.currentTimeMillis())
1737+ {
1738+ tb.append("<table border=0 cellspacing=0 cellpadding=2 height=24 width=400><tr>");
1739+ tb.append("<td FIXWIDTH=200 align=center>" + name + "</td>");
1740+ tb.append("<td FIXWIDTH=200 align=center><font color=99FF00>Alive</font></td>");
1741+ tb.append("</tr></table>");
1742+ tb.append("<img src=\"L2UI.Squaregray\" width=\"400\" height=\"1\">");
1743+ }
1744+ else
1745+ {
1746+ int hours = (int)((delay - System.currentTimeMillis()) / 1000L / 60L / 60L);
1747+ int mins = (int)((delay - hours * 60 * 60 * 1000 - System.currentTimeMillis()) / 1000L / 60L);
1748+
1749+ tb.append("<table border=0 cellspacing=0 cellpadding=2 height=24 width=400><tr>");
1750+ tb.append("<td FIXWIDTH=200 align=center>" + name + "</td>");
1751+ tb.append("<td FIXWIDTH=200 align=center><font color=CC0000>" + hours + " hours and " + mins + " minutes to respawn</font></td>");
1752+ tb.append("</tr></table>");
1753+ tb.append("<img src=\"L2UI.Squaregray\" width=\"400\" height=\"1\">");
1754+ }
1755+ }
1756+ }
1757+ catch (Exception e)
1758+ {
1759+ _log.log(Level.WARNING, "Failed to load grand boss list.");
1760+ }
1761+ content = content.replaceAll("%showList%", tb.toString());
1762+ separateAndSend(content, activeChar);
1763+ }
1764+
1765+ private static class SingletonHolder
1766+ {
1767+ protected static final BossBBSManager _instance = new BossBBSManager();
1768+ }
1769+}
1770Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/DonationBBSManager.java
1771===================================================================
1772--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/DonationBBSManager.java (revision 81)
1773+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/DonationBBSManager.java (revision 81)
1774@@ -0,0 +1,261 @@
1775+/*
1776+ * This program is free software: you can redistribute it and/or modify it under
1777+ * the terms of the GNU General Public License as published by the Free Software
1778+ * Foundation, either version 3 of the License, or (at your option) any later
1779+ * version.
1780+ *
1781+ * This program is distributed in the hope that it will be useful, but WITHOUT
1782+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
1783+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
1784+ * details.
1785+ *
1786+ * You should have received a copy of the GNU General Public License along with
1787+ * this program. If not, see <http://www.gnu.org/licenses/>.
1788+ */
1789+package net.sf.l2j.gameserver.communitybbs.Manager;
1790+
1791+import java.io.BufferedWriter;
1792+import java.io.File;
1793+import java.io.FileWriter;
1794+import java.util.NoSuchElementException;
1795+import java.util.StringTokenizer;
1796+
1797+import net.sf.l2j.Config;
1798+import net.sf.l2j.gameserver.data.cache.HtmCache;
1799+import net.sf.l2j.gameserver.model.World;
1800+import net.sf.l2j.gameserver.model.actor.Player;
1801+
1802+public class DonationBBSManager extends BaseBBSManager
1803+{
1804+ public static DonationBBSManager getInstance()
1805+ {
1806+ return SingletonHolder._instance;
1807+ }
1808+
1809+ @Override
1810+ public void parseCmd(String command, Player activeChar)
1811+ {
1812+ if (command.startsWith("_bbsdonation"))
1813+ {
1814+ StringTokenizer st = new StringTokenizer(command, ";");
1815+ st.nextToken();
1816+ String secondCommand = st.nextToken();
1817+ if (secondCommand.equalsIgnoreCase("paysafe"))
1818+ {
1819+ handlePaySafeDonation(activeChar);
1820+ }
1821+ else if (secondCommand.equalsIgnoreCase("paypal"))
1822+ {
1823+ handlePayPalDonation(activeChar);
1824+ }
1825+ else
1826+ {
1827+ FileWriter fstream;
1828+ if (secondCommand.startsWith("submitPaySafe"))
1829+ {
1830+ StringTokenizer cmds = new StringTokenizer(secondCommand);
1831+ cmds.nextToken();
1832+
1833+ String quantity = null;
1834+ String pin1 = "0";
1835+ String pin2 = "0";
1836+ String pin3 = "0";
1837+ String pin4 = "0";
1838+ String message = "";
1839+
1840+ quantity = cmds.nextToken();
1841+ try
1842+ {
1843+ pin1 = cmds.nextToken();
1844+ pin2 = cmds.nextToken();
1845+ pin3 = cmds.nextToken();
1846+ pin4 = cmds.nextToken();
1847+ }
1848+ catch (NumberFormatException enf)
1849+ {
1850+ activeChar.sendMessage("Only numbers are allowed!");
1851+ return;
1852+ }
1853+ catch (NoSuchElementException enf)
1854+ {
1855+ activeChar.sendMessage("Enter a valid pin.");
1856+ return;
1857+ }
1858+ while (cmds.hasMoreTokens())
1859+ {
1860+ message = message + cmds.nextToken() + " ";
1861+ }
1862+ try
1863+ {
1864+ String fname = "data/donations/paysafe_donation_" + activeChar.getName() + ".txt";
1865+ File file = new File(fname);
1866+ boolean exist = file.createNewFile();
1867+ if (!exist)
1868+ {
1869+ activeChar.sendMessage("You have already sent a donation, staff member must confirm it first.");
1870+ return;
1871+ }
1872+ fstream = new FileWriter(fname);
1873+ BufferedWriter out = new BufferedWriter(fstream);
1874+ out.write("PaySafe donation.");
1875+ out.newLine();
1876+ out.write("- - - - - - - - - - - - - - - - - - - -");
1877+ out.newLine();
1878+ out.write("Player Details:");
1879+ out.newLine();
1880+ out.write("Account: " + activeChar.getAccountName());
1881+ out.newLine();
1882+ out.write("Name: " + activeChar.getName());
1883+ out.newLine();
1884+ out.write("IP: " + activeChar.getClient().getConnection().getInetAddress().getHostAddress());
1885+ out.newLine();
1886+ out.write("- - - - - - - - - - - - - - - - - - - -");
1887+ out.newLine();
1888+ out.write("Card Amount: " + quantity);
1889+ out.newLine();
1890+ out.write("Pin Code: " + pin1 + " " + pin2 + " " + pin3 + " " + pin4);
1891+ out.newLine();
1892+ out.write("- - - - - - - - - - - - - - - - - - - -");
1893+ out.newLine();
1894+ out.write("Message from player:" + message);
1895+ out.close();
1896+
1897+ separateAndSend(HtmCache.getInstance().getHtm("data/html/CommunityBoard/donation/completed.htm"), activeChar);
1898+
1899+ World.getInstance();
1900+ for (Player gms : World.getAllGMs())
1901+ {
1902+ gms.sendMessage("ATTENTION: " + activeChar.getName() + " just submited a donation! Please confirm this donation by browsing in /data/donations folder.");
1903+ }
1904+ }
1905+ catch (Exception e)
1906+ {
1907+ activeChar.sendMessage("Failed to submit donation. Try again or contact with staff member. This error should not occur.");
1908+ e.printStackTrace();
1909+ return;
1910+ }
1911+ }
1912+ else if (secondCommand.startsWith("submitPayPal"))
1913+ {
1914+ StringTokenizer cmds = new StringTokenizer(secondCommand);
1915+ cmds.nextToken();
1916+
1917+ String quantity = null;
1918+ String email = "";
1919+ String transId = "";
1920+ String message = "";
1921+
1922+ quantity = cmds.nextToken();
1923+
1924+ email = cmds.nextToken();
1925+
1926+ transId = cmds.nextToken();
1927+ while (cmds.hasMoreTokens())
1928+ {
1929+ message = message + cmds.nextToken() + " ";
1930+ }
1931+ try
1932+ {
1933+ String fname = "data/donations/paypal_donation_" + activeChar.getName() + ".txt";
1934+ File file = new File(fname);
1935+ boolean exist = file.createNewFile();
1936+ if (!exist)
1937+ {
1938+ activeChar.sendMessage("You have already sent a donation, staff member must confirm it first.");
1939+ return;
1940+ }
1941+ FileWriter fstream1 = new FileWriter(fname);
1942+ BufferedWriter out = new BufferedWriter(fstream1);
1943+ out.write("PayPal donation.");
1944+ out.newLine();
1945+ out.write("- - - - - - - - - - - - - - - - - - - -");
1946+ out.newLine();
1947+ out.write("Player Details:");
1948+ out.newLine();
1949+ out.write("Account: " + activeChar.getAccountName());
1950+ out.newLine();
1951+ out.write("Name: " + activeChar.getName());
1952+ out.newLine();
1953+ out.write("IP: " + activeChar.getClient().getConnection().getInetAddress().getHostAddress());
1954+ out.newLine();
1955+ out.write("- - - - - - - - - - - - - - - - - - - -");
1956+ out.newLine();
1957+ out.write("Card Amount: " + quantity);
1958+ out.newLine();
1959+ out.write("Email Address: " + email);
1960+ out.newLine();
1961+ out.write("Transaction Id: " + transId);
1962+ out.newLine();
1963+ out.write("- - - - - - - - - - - - - - - - - - - -");
1964+ out.newLine();
1965+ out.write("Message from player:" + message);
1966+ out.close();
1967+
1968+ separateAndSend(HtmCache.getInstance().getHtm("data/html/CommunityBoard/donation/completed.htm"), activeChar);
1969+
1970+ World.getInstance();
1971+ for (Player gms : World.getAllGMs())
1972+ {
1973+ gms.sendMessage("ATTENTION: " + activeChar.getName() + " just submited a donation! Please confirm this donation by browsing in /data/donations folder.");
1974+ }
1975+ }
1976+ catch (Exception e)
1977+ {
1978+ activeChar.sendMessage("Failed to submit donation. Try again or contact with staff member. This error should not occur.");
1979+ e.printStackTrace();
1980+ return;
1981+ }
1982+ }
1983+ }
1984+ }
1985+ else
1986+ {
1987+ super.parseCmd(command, activeChar);
1988+ }
1989+ }
1990+
1991+ @Override
1992+ protected String getFolder()
1993+ {
1994+ return "donation/";
1995+ }
1996+
1997+ private static void handlePaySafeDonation(Player activeChar)
1998+ {
1999+ if (Config.ENABLE_PAY_SAFE_DONATION_BBS)
2000+ {
2001+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/donation/paysafe.htm");
2002+
2003+ content = content.replaceAll("%charName%", activeChar.getName());
2004+ content = content.replaceAll("%charAcc%", activeChar.getAccountName());
2005+ separateAndSend(content, activeChar);
2006+ }
2007+ else
2008+ {
2009+ activeChar.sendMessage("We currently are not accepting paysafe card donations. Thank you for your interest!");
2010+ return;
2011+ }
2012+ }
2013+
2014+ private static void handlePayPalDonation(Player activeChar)
2015+ {
2016+ if (Config.ENABLE_PAY_PAL_DONATION_BBS)
2017+ {
2018+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/donation/paypal.htm");
2019+
2020+ content = content.replaceAll("%charName%", activeChar.getName());
2021+ content = content.replaceAll("%charAcc%", activeChar.getAccountName());
2022+ separateAndSend(content, activeChar);
2023+ }
2024+ else
2025+ {
2026+ activeChar.sendMessage("We currently are not accepting paypal donations. Thank you for your interest!");
2027+ return;
2028+ }
2029+ }
2030+
2031+ private static class SingletonHolder
2032+ {
2033+ protected static final DonationBBSManager _instance = new DonationBBSManager();
2034+ }
2035+}
2036Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/OlStatsBBSManager.java
2037===================================================================
2038--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/OlStatsBBSManager.java (revision 81)
2039+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/OlStatsBBSManager.java (revision 81)
2040@@ -0,0 +1,170 @@
2041+/*
2042+ * This program is free software: you can redistribute it and/or modify it under
2043+ * the terms of the GNU General Public License as published by the Free Software
2044+ * Foundation, either version 3 of the License, or (at your option) any later
2045+ * version.
2046+ *
2047+ * This program is distributed in the hope that it will be useful, but WITHOUT
2048+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
2049+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
2050+ * details.
2051+ *
2052+ * You should have received a copy of the GNU General Public License along with
2053+ * this program. If not, see <http://www.gnu.org/licenses/>.
2054+ */
2055+package net.sf.l2j.gameserver.communitybbs.Manager;
2056+
2057+import java.sql.Connection;
2058+import java.sql.PreparedStatement;
2059+import java.sql.ResultSet;
2060+import java.util.HashMap;
2061+import java.util.Map;
2062+import java.util.StringTokenizer;
2063+import java.util.logging.Level;
2064+import java.util.logging.Logger;
2065+
2066+import net.sf.l2j.L2DatabaseFactory;
2067+import net.sf.l2j.gameserver.data.cache.HtmCache;
2068+import net.sf.l2j.gameserver.model.actor.Player;
2069+
2070+public class OlStatsBBSManager extends BaseBBSManager
2071+{
2072+ private static final Logger _log = Logger.getLogger(OlStatsBBSManager.class.getName());
2073+
2074+ private static int _posId;
2075+
2076+ @Override
2077+ public void parseCmd(String command, Player activeChar)
2078+ {
2079+ if (command.equals("_bbsOlStats"))
2080+ {
2081+ showClassMenu(activeChar);
2082+ }
2083+ else if (command.startsWith("_bbsClassList"))
2084+ {
2085+ StringTokenizer st = new StringTokenizer(command, ";");
2086+ st.nextToken();
2087+ int classId = Integer.valueOf(st.nextToken()).intValue();
2088+
2089+ showClassList(activeChar, classId);
2090+ }
2091+ else
2092+ {
2093+ super.parseCmd(command, activeChar);
2094+ }
2095+ }
2096+
2097+ @Override
2098+ protected String getFolder()
2099+ {
2100+ return "stats/olympiad/";
2101+ }
2102+
2103+ public static OlStatsBBSManager getInstance()
2104+ {
2105+ return SingletonHolder._instance;
2106+ }
2107+
2108+ private static void showClassMenu(Player activeChar)
2109+ {
2110+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/stats/olympiad/main.htm");
2111+ separateAndSend(content, activeChar);
2112+ }
2113+
2114+ private static void showClassList(Player activeChar, int classId)
2115+ {
2116+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/stats/olympiad/list.htm");
2117+ StringBuilder tb = new StringBuilder();
2118+ Connection con = null;
2119+ try
2120+ {
2121+ _posId = 0;
2122+ con = L2DatabaseFactory.getInstance().getConnection();
2123+ PreparedStatement statement = con.prepareStatement("SELECT h.char_id, h.olympiad_points, h.competitions_done, ch.char_name, ch.online, cl.clan_name, cl.ally_name FROM olympiad_nobles h LEFT JOIN characters ch ON ch.obj_Id=h.char_id LEFT OUTER JOIN clan_data cl ON cl.clan_id=ch.clanid where h.class_id=? ORDER BY h.olympiad_points DESC, h.competitions_done DESC");
2124+
2125+ statement.setInt(1, classId);
2126+ ResultSet result = statement.executeQuery();
2127+ while (result.next())
2128+ {
2129+ boolean status = false;
2130+ _posId += 1;
2131+ if (result.getInt("online") == 1)
2132+ {
2133+ status = true;
2134+ }
2135+ tb.append("<table border=0 cellspacing=0 cellpadding=2 width=610>");
2136+ tb.append("<tr>");
2137+ tb.append("<td FIXWIDTH=10></td>");
2138+ tb.append("<td FIXWIDTH=40>" + _posId + ".</td>");
2139+ tb.append("<td FIXWIDTH=190>" + result.getString("char_name") + "</td>");
2140+ tb.append("<td FIXWIDTH=140>" + className(classId) + "</td>");
2141+ tb.append("<td FIXWIDTH=100>" + result.getInt("olympiad_points") + "</td>");
2142+ tb.append("<td FIXWIDTH=120>" + result.getInt("competitions_done") + "</td>");
2143+ tb.append("<td FIXWIDTH=120>" + result.getString("clan_name") + "</td>");
2144+ tb.append("<td FIXWIDTH=120>" + result.getString("ally_name") + "</td>");
2145+ tb.append("<td FIXWIDTH=70>" + (status ? "<font color=99FF00>Online</font>" : "<font color=CC0000>Offline</font>") + "</td>");
2146+ tb.append("<td FIXWIDTH=5></td>");
2147+ tb.append("</tr>");
2148+ tb.append("</table>");
2149+ tb.append("<img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\">");
2150+ }
2151+ result.close();
2152+ statement.close();
2153+ }
2154+ catch (Exception e)
2155+ {
2156+ _log.log(Level.WARNING, "Failed to load " + className(classId) + " list " + e.getMessage(), e);
2157+ }
2158+ finally
2159+ {
2160+ L2DatabaseFactory.close(con);
2161+ }
2162+ content = content.replaceAll("%showList%", tb.toString());
2163+ content = content.replaceAll("%className%", className(classId));
2164+ separateAndSend(content, activeChar);
2165+ }
2166+
2167+ public static final String className(int classid)
2168+ {
2169+ Map<Integer, String> classList = new HashMap<>();
2170+
2171+ classList.put(Integer.valueOf(88), "Duelist");
2172+ classList.put(Integer.valueOf(89), "Dreadnought");
2173+ classList.put(Integer.valueOf(90), "Phoenix Knight");
2174+ classList.put(Integer.valueOf(91), "Hell Knight");
2175+ classList.put(Integer.valueOf(92), "Sagittarius");
2176+ classList.put(Integer.valueOf(93), "Adventurer");
2177+ classList.put(Integer.valueOf(94), "Archmage");
2178+ classList.put(Integer.valueOf(95), "Soultaker");
2179+ classList.put(Integer.valueOf(96), "Arcana Lord");
2180+ classList.put(Integer.valueOf(97), "Cardinal");
2181+ classList.put(Integer.valueOf(98), "Hierophant");
2182+ classList.put(Integer.valueOf(99), "Evas Templar");
2183+ classList.put(Integer.valueOf(100), "Sword Muse");
2184+ classList.put(Integer.valueOf(101), "Wind Rider");
2185+ classList.put(Integer.valueOf(102), "Moonlight Sentinel");
2186+ classList.put(Integer.valueOf(103), "Mystic Muse");
2187+ classList.put(Integer.valueOf(104), "Elemental Master");
2188+ classList.put(Integer.valueOf(105), "Evas Saint");
2189+ classList.put(Integer.valueOf(106), "Shillien Templar");
2190+ classList.put(Integer.valueOf(107), "Spectral Dancer");
2191+ classList.put(Integer.valueOf(108), "Ghost Hunter");
2192+ classList.put(Integer.valueOf(109), "Ghost Sentinel");
2193+ classList.put(Integer.valueOf(110), "Storm Screamer");
2194+ classList.put(Integer.valueOf(111), "Spectral Master");
2195+ classList.put(Integer.valueOf(112), "Shillien Saint");
2196+ classList.put(Integer.valueOf(113), "Titan");
2197+ classList.put(Integer.valueOf(114), "Grand Khavatari");
2198+ classList.put(Integer.valueOf(115), "Dominator");
2199+ classList.put(Integer.valueOf(116), "Doomcryer");
2200+ classList.put(Integer.valueOf(117), "Fortune Seeker");
2201+ classList.put(Integer.valueOf(118), "Maestro");
2202+
2203+ return classList.get(Integer.valueOf(classid));
2204+ }
2205+
2206+ private static class SingletonHolder
2207+ {
2208+ protected static final OlStatsBBSManager _instance = new OlStatsBBSManager();
2209+ }
2210+}
2211Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/PasswordBBSManager.java
2212===================================================================
2213--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/PasswordBBSManager.java (revision 81)
2214+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/PasswordBBSManager.java (revision 81)
2215@@ -0,0 +1,163 @@
2216+/*
2217+ * This program is free software: you can redistribute it and/or modify it under
2218+ * the terms of the GNU General Public License as published by the Free Software
2219+ * Foundation, either version 3 of the License, or (at your option) any later
2220+ * version.
2221+ *
2222+ * This program is distributed in the hope that it will be useful, but WITHOUT
2223+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
2224+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
2225+ * details.
2226+ *
2227+ * You should have received a copy of the GNU General Public License along with
2228+ * this program. If not, see <http://www.gnu.org/licenses/>.
2229+ */
2230+package net.sf.l2j.gameserver.communitybbs.Manager;
2231+
2232+import java.security.MessageDigest;
2233+import java.sql.Connection;
2234+import java.sql.PreparedStatement;
2235+import java.sql.ResultSet;
2236+import java.util.Base64;
2237+import java.util.StringTokenizer;
2238+import java.util.logging.Level;
2239+import java.util.logging.Logger;
2240+
2241+import net.sf.l2j.Config;
2242+import net.sf.l2j.L2DatabaseFactory;
2243+import net.sf.l2j.gameserver.data.cache.HtmCache;
2244+import net.sf.l2j.gameserver.model.actor.Player;
2245+
2246+public class PasswordBBSManager extends BaseBBSManager
2247+{
2248+ private static final Logger _log = Logger.getLogger(PasswordBBSManager.class.getName());
2249+
2250+ public static PasswordBBSManager getInstance()
2251+ {
2252+ return SingletonHolder._instance;
2253+ }
2254+
2255+ @Override
2256+ public void parseCmd(String command, Player activeChar)
2257+ {
2258+ if (command.equals("_bbsPassPanel"))
2259+ {
2260+ if (Config.ENABLE_BBS_PASS_CHANGE)
2261+ {
2262+ separateAndSend(HtmCache.getInstance().getHtm("data/html/CommunityBoard/top/passChange.htm"), activeChar);
2263+ }
2264+ else
2265+ {
2266+ separateAndSend(HtmCache.getInstance().getHtm("data/html/CommunityBoard/top/functionDisabled.htm"), activeChar);
2267+ }
2268+ }
2269+ else if (command.startsWith("_bbsChangePass"))
2270+ {
2271+ StringTokenizer st = new StringTokenizer(command);
2272+ st.nextToken();
2273+
2274+ String currPass = null;
2275+ String newPass = null;
2276+ String repeatNewPass = null;
2277+ try
2278+ {
2279+ if (st.hasMoreTokens())
2280+ {
2281+ currPass = st.nextToken();
2282+ newPass = st.nextToken();
2283+ repeatNewPass = st.nextToken();
2284+ }
2285+ else
2286+ {
2287+ activeChar.sendMessage("Please fill in all the blank fields before requesting for a password change.");
2288+ return;
2289+ }
2290+ changePassword(currPass, newPass, repeatNewPass, activeChar);
2291+ }
2292+ catch (StringIndexOutOfBoundsException e)
2293+ {
2294+ activeChar.sendMessage("Something went wrong please contact with server's administrator with this error.");
2295+ _log.log(Level.WARNING, "[PasswordChangeFunction: Something went wrong for " + activeChar.getName());
2296+ e.getStackTrace();
2297+ return;
2298+ }
2299+ }
2300+ else
2301+ {
2302+ super.parseCmd(command, activeChar);
2303+ }
2304+ }
2305+
2306+ public static void changePassword(String currPass, String newPass, String repeatNewPass, Player activeChar)
2307+ {
2308+ if (newPass.length() < 5)
2309+ {
2310+ activeChar.sendMessage("The new password should be bigger then 5 letters.");
2311+ return;
2312+ }
2313+ if (newPass.length() > 20)
2314+ {
2315+ activeChar.sendMessage("The new password cannot be bigger then 20 letters.");
2316+ return;
2317+ }
2318+ if (!newPass.equals(repeatNewPass))
2319+ {
2320+ activeChar.sendMessage("Repeated password doesn't match the new password.");
2321+ return;
2322+ }
2323+ Connection con = null;
2324+ String password = null;
2325+ try
2326+ {
2327+ MessageDigest md = MessageDigest.getInstance("SHA");
2328+ byte[] raw = currPass.getBytes("UTF-8");
2329+ raw = md.digest(raw);
2330+ String currPassEncoded = Base64.getEncoder().encodeToString(raw);
2331+
2332+ con = L2DatabaseFactory.getInstance().getConnection();
2333+ PreparedStatement statement = con.prepareStatement("SELECT password FROM accounts WHERE login=?");
2334+ statement.setString(1, activeChar.getAccountName());
2335+ ResultSet rset = statement.executeQuery();
2336+ while (rset.next())
2337+ {
2338+ password = rset.getString("password");
2339+ }
2340+ rset.close();
2341+ statement.close();
2342+
2343+ byte[] password2 = null;
2344+ if (currPassEncoded.equals(password))
2345+ {
2346+ password2 = newPass.getBytes("UTF-8");
2347+ password2 = md.digest(password2);
2348+
2349+ PreparedStatement statement2 = con.prepareStatement("UPDATE accounts SET password=? WHERE login=?");
2350+ statement2.setString(1, Base64.getEncoder().encodeToString(password2));
2351+ statement2.setString(2, activeChar.getAccountName());
2352+ statement2.executeUpdate();
2353+ statement2.close();
2354+
2355+ separateAndSend(HtmCache.getInstance().getHtm("data/html/CommunityBoard/top/passChanged.htm"), activeChar);
2356+ }
2357+ else
2358+ {
2359+ activeChar.sendMessage("The current password you've inserted is incorrect! Please try again!");
2360+ return;
2361+ }
2362+ }
2363+ catch (Exception e)
2364+ {
2365+ _log.warning("could not update the password of account: " + activeChar.getAccountName());
2366+ e.getStackTrace();
2367+ }
2368+ finally
2369+ {
2370+ L2DatabaseFactory.close(con);
2371+ }
2372+ }
2373+
2374+ private static class SingletonHolder
2375+ {
2376+ protected static final PasswordBBSManager _instance = new PasswordBBSManager();
2377+ }
2378+}
2379Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/ProblemReportBBSManager.java
2380===================================================================
2381--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/ProblemReportBBSManager.java (revision 81)
2382+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/ProblemReportBBSManager.java (revision 81)
2383@@ -0,0 +1,212 @@
2384+/*
2385+ * This program is free software: you can redistribute it and/or modify it under
2386+ * the terms of the GNU General Public License as published by the Free Software
2387+ * Foundation, either version 3 of the License, or (at your option) any later
2388+ * version.
2389+ *
2390+ * This program is distributed in the hope that it will be useful, but WITHOUT
2391+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
2392+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
2393+ * details.
2394+ *
2395+ * You should have received a copy of the GNU General Public License along with
2396+ * this program. If not, see <http://www.gnu.org/licenses/>.
2397+ */
2398+package net.sf.l2j.gameserver.communitybbs.Manager;
2399+
2400+import java.io.BufferedWriter;
2401+import java.io.File;
2402+import java.io.FileWriter;
2403+import java.util.StringTokenizer;
2404+
2405+import net.sf.l2j.Config;
2406+import net.sf.l2j.gameserver.data.cache.HtmCache;
2407+import net.sf.l2j.gameserver.model.World;
2408+import net.sf.l2j.gameserver.model.actor.Player;
2409+
2410+public class ProblemReportBBSManager extends BaseBBSManager
2411+{
2412+ static String _type = "";
2413+ static String _majority = "";
2414+ static String _title = "";
2415+
2416+ public static ProblemReportBBSManager getInstance()
2417+ {
2418+ return SingletonHolder._instance;
2419+ }
2420+
2421+ @Override
2422+ public void parseCmd(String command, Player activeChar)
2423+ {
2424+ if (command.equals("_bbsProblemReport"))
2425+ {
2426+ showReportWindow(activeChar);
2427+ }
2428+ else if (command.startsWith("_bbsProblemReport"))
2429+ {
2430+ StringTokenizer st = new StringTokenizer(command, ";");
2431+ st.nextToken();
2432+ String secondCommand = st.nextToken();
2433+ if (secondCommand.startsWith("toDescription"))
2434+ {
2435+ StringTokenizer st1 = new StringTokenizer(secondCommand);
2436+ st1.nextToken();
2437+
2438+ String text = "";
2439+
2440+ setMajority(st1.nextToken());
2441+
2442+ setType(st1.nextToken());
2443+ while (st1.hasMoreTokens())
2444+ {
2445+ text = text + st1.nextToken() + " ";
2446+ }
2447+ if (text == "")
2448+ {
2449+ activeChar.sendMessage("Please insert title first.");
2450+ return;
2451+ }
2452+ setTitle(text);
2453+
2454+ showDescriptionWindow(activeChar);
2455+ }
2456+ else if (secondCommand.startsWith("submit"))
2457+ {
2458+ String description = secondCommand.substring(9);
2459+ if (description == "")
2460+ {
2461+ activeChar.sendMessage("Please insert description first.");
2462+ return;
2463+ }
2464+ if (description.length() >= 150)
2465+ {
2466+ activeChar.sendMessage("The current description lenght is " + description.length() + ". Maximum lenght is 800!");
2467+ return;
2468+ }
2469+ try
2470+ {
2471+ String fname = "data/reports/" + getMajority() + "_" + getType() + "_report_" + activeChar.getName() + ".txt";
2472+ File file = new File(fname);
2473+ boolean exist = file.createNewFile();
2474+ if (!exist)
2475+ {
2476+ activeChar.sendMessage("You have already submit a report, staff member must confirm it first.");
2477+ return;
2478+ }
2479+ FileWriter fstream = new FileWriter(fname);
2480+ BufferedWriter out = new BufferedWriter(fstream);
2481+ out.write("Problem Report");
2482+ out.newLine();
2483+ out.write("- - - - - - - - - - - - - - - - - - - -");
2484+ out.newLine();
2485+ out.write("Player Details:");
2486+ out.newLine();
2487+ out.write("Account: " + activeChar.getAccountName());
2488+ out.newLine();
2489+ out.write("Name: " + activeChar.getName());
2490+ out.newLine();
2491+ out.write("IP: " + activeChar.getClient().getConnection().getInetAddress().getHostAddress());
2492+ out.newLine();
2493+ out.write("- - - - - - - - - - - - - - - - - - - -");
2494+ out.newLine();
2495+ out.write("Type of report: " + getType());
2496+ out.newLine();
2497+ out.newLine();
2498+ out.write("Majority of report: " + getMajority());
2499+ out.newLine();
2500+ out.newLine();
2501+ out.write("Title: " + getTitle());
2502+ out.newLine();
2503+ out.newLine();
2504+ out.write("Description: " + description);
2505+ out.close();
2506+
2507+ separateAndSend(HtmCache.getInstance().getHtm("data/html/CommunityBoard/reporting/completed.htm"), activeChar);
2508+
2509+ World.getInstance();
2510+ for (Player gms : World.getAllGMs())
2511+ {
2512+ gms.sendMessage("ATTENTION: " + activeChar.getName() + " just submited a report! Please take care of his report by browsing in /data/reports folder.");
2513+ }
2514+ }
2515+ catch (Exception e)
2516+ {
2517+ activeChar.sendMessage("Failed to submit report. Try again or contact with staff member. This error should not occur.");
2518+ e.printStackTrace();
2519+ return;
2520+ }
2521+ }
2522+ }
2523+ else
2524+ {
2525+ super.parseCmd(command, activeChar);
2526+ }
2527+ }
2528+
2529+ @Override
2530+ protected String getFolder()
2531+ {
2532+ return "reporting/";
2533+ }
2534+
2535+ private static void showReportWindow(Player activeChar)
2536+ {
2537+ if (Config.ENABLE_BBS_REPORT)
2538+ {
2539+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/reporting/main.htm");
2540+
2541+ content = content.replaceAll("%charName%", activeChar.getName());
2542+ separateAndSend(content, activeChar);
2543+ }
2544+ else
2545+ {
2546+ separateAndSend(HtmCache.getInstance().getHtm("data/html/CommunityBoard/top/functionDisabled.htm"), activeChar);
2547+ }
2548+ }
2549+
2550+ static void setType(String val)
2551+ {
2552+ _type = val;
2553+ }
2554+
2555+ static void setMajority(String val)
2556+ {
2557+ _majority = val;
2558+ }
2559+
2560+ static void setTitle(String val)
2561+ {
2562+ _title = val;
2563+ }
2564+
2565+ static String getType()
2566+ {
2567+ return _type;
2568+ }
2569+
2570+ static String getMajority()
2571+ {
2572+ return _majority;
2573+ }
2574+
2575+ static String getTitle()
2576+ {
2577+ return _title;
2578+ }
2579+
2580+ private static void showDescriptionWindow(Player activeChar)
2581+ {
2582+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/reporting/description.htm");
2583+
2584+ content = content.replaceAll("%charName%", activeChar.getName());
2585+ content = content.replaceAll("%type%", getType());
2586+ content = content.replaceAll("%majority%", getMajority());
2587+ content = content.replaceAll("%title%", getTitle());
2588+ separateAndSend(content, activeChar);
2589+ }
2590+
2591+ private static class SingletonHolder
2592+ {
2593+ protected static final ProblemReportBBSManager _instance = new ProblemReportBBSManager();
2594+ }
2595+}
2596Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/RepairBBSManager.java
2597===================================================================
2598--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/RepairBBSManager.java (revision 81)
2599+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/RepairBBSManager.java (revision 81)
2600@@ -0,0 +1,315 @@
2601+/*
2602+ * This program is free software: you can redistribute it and/or modify it under
2603+ * the terms of the GNU General Public License as published by the Free Software
2604+ * Foundation, either version 3 of the License, or (at your option) any later
2605+ * version.
2606+ *
2607+ * This program is distributed in the hope that it will be useful, but WITHOUT
2608+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
2609+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
2610+ * details.
2611+ *
2612+ * You should have received a copy of the GNU General Public License along with
2613+ * this program. If not, see <http://www.gnu.org/licenses/>.
2614+ */
2615+package net.sf.l2j.gameserver.communitybbs.Manager;
2616+
2617+import java.sql.Connection;
2618+import java.sql.PreparedStatement;
2619+import java.sql.ResultSet;
2620+import java.sql.SQLException;
2621+import java.util.StringTokenizer;
2622+import java.util.logging.Logger;
2623+
2624+import net.sf.l2j.Config;
2625+import net.sf.l2j.L2DatabaseFactory;
2626+import net.sf.l2j.gameserver.data.cache.HtmCache;
2627+import net.sf.l2j.gameserver.model.actor.Player;
2628+
2629+public class RepairBBSManager extends BaseBBSManager
2630+{
2631+ private static final Logger _log = Logger.getLogger(RepairBBSManager.class.getName());
2632+
2633+ public static RepairBBSManager getInstance()
2634+ {
2635+ return SingletonHolder._instance;
2636+ }
2637+
2638+ @Override
2639+ public void parseCmd(String command, Player activeChar)
2640+ {
2641+ if (command.equals("_bbsShowRepair"))
2642+ {
2643+ showRepairWindow(activeChar);
2644+ }
2645+ else if (command.startsWith("_bbsRepair"))
2646+ {
2647+ StringTokenizer st = new StringTokenizer(command);
2648+ st.nextToken();
2649+ String repairChar = st.nextToken();
2650+ if (repairChar == null)
2651+ {
2652+ activeChar.sendMessage("Please first select character to be repaired.");
2653+ return;
2654+ }
2655+ if (checkAcc(activeChar, repairChar))
2656+ {
2657+ if (checkChar(activeChar, repairChar))
2658+ {
2659+ activeChar.sendMessage("You cannot repair your self.");
2660+ return;
2661+ }
2662+ if (checkJail(activeChar, repairChar))
2663+ {
2664+ activeChar.sendMessage("The character that you are attempting to repair is in jail and this function cannot be used to help him.");
2665+ return;
2666+ }
2667+ repairBadCharacter(repairChar);
2668+ separateAndSend(HtmCache.getInstance().getHtm("data/html/CommunityBoard/top/repaired.htm"), activeChar);
2669+ }
2670+ else
2671+ {
2672+ activeChar.sendMessage("Something went wrong. Please contact with the server's administrator.");
2673+ return;
2674+ }
2675+ }
2676+ else
2677+ {
2678+ super.parseCmd(command, activeChar);
2679+ }
2680+ }
2681+
2682+ private static void showRepairWindow(Player activeChar)
2683+ {
2684+ if (Config.ENABLE_REPAIR_BBS)
2685+ {
2686+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/top/repair.htm");
2687+
2688+ content = content.replaceAll("%acc_chars%", getCharList(activeChar));
2689+ separateAndSend(content, activeChar);
2690+ }
2691+ else
2692+ {
2693+ separateAndSend(HtmCache.getInstance().getHtm("data/html/CommunityBoard/top/functionDisabled.htm"), activeChar);
2694+ }
2695+ }
2696+
2697+ private static String getCharList(Player activeChar)
2698+ {
2699+ String result = "";
2700+ String repCharAcc = activeChar.getAccountName();
2701+ Connection con = null;
2702+ try
2703+ {
2704+ con = L2DatabaseFactory.getInstance().getConnection();
2705+ PreparedStatement statement = con.prepareStatement("SELECT char_name FROM characters WHERE account_name=?");
2706+ statement.setString(1, repCharAcc);
2707+ ResultSet rset = statement.executeQuery();
2708+ while (rset.next())
2709+ {
2710+ if (activeChar.getName().compareTo(rset.getString(1)) != 0)
2711+ {
2712+ result = result + rset.getString(1) + ";";
2713+ }
2714+ }
2715+ rset.close();
2716+ statement.close();
2717+ }
2718+ catch (SQLException e)
2719+ {
2720+ e.printStackTrace();
2721+ return result;
2722+ }
2723+ finally
2724+ {
2725+ L2DatabaseFactory.close(con);
2726+ }
2727+ return result;
2728+ }
2729+
2730+ @SuppressWarnings("null")
2731+ private static boolean checkAcc(Player activeChar, String repairChar)
2732+ {
2733+ boolean result = false;
2734+ String repCharAcc = "";
2735+ Connection con = null;
2736+ try
2737+ {
2738+ con = L2DatabaseFactory.getInstance().getConnection();
2739+ PreparedStatement statement = con.prepareStatement("SELECT account_name FROM characters WHERE char_name=?");
2740+ statement.setString(1, repairChar);
2741+ ResultSet rset = statement.executeQuery();
2742+ if (rset.next())
2743+ {
2744+ repCharAcc = rset.getString(1);
2745+ }
2746+ rset.close();
2747+ statement.close();
2748+ try
2749+ {
2750+ if (con != null)
2751+ {
2752+ con.close();
2753+ }
2754+ }
2755+ catch (SQLException e)
2756+ {
2757+ e.printStackTrace();
2758+ }
2759+ if (activeChar.getAccountName().compareTo(repCharAcc) != 0)
2760+ {
2761+ return result;
2762+ }
2763+ }
2764+ catch (SQLException e)
2765+ {
2766+ e.printStackTrace();
2767+ return result;
2768+ }
2769+ finally
2770+ {
2771+ try
2772+ {
2773+ if (con != null)
2774+ {
2775+ con.close();
2776+ }
2777+ }
2778+ catch (SQLException e)
2779+ {
2780+ e.printStackTrace();
2781+ }
2782+ }
2783+ result = true;
2784+ return result;
2785+ }
2786+
2787+ @SuppressWarnings("null")
2788+ private static boolean checkJail(Player activeChar, String repairChar)
2789+ {
2790+ boolean result = false;
2791+ int repCharJail = 0;
2792+ Connection con = null;
2793+ try
2794+ {
2795+ con = L2DatabaseFactory.getInstance().getConnection();
2796+ PreparedStatement statement = con.prepareStatement("SELECT punish_level FROM characters WHERE char_name=?");
2797+ statement.setString(1, repairChar);
2798+ ResultSet rset = statement.executeQuery();
2799+ if (rset.next())
2800+ {
2801+ repCharJail = rset.getInt(1);
2802+ }
2803+ rset.close();
2804+ statement.close();
2805+ try
2806+ {
2807+ if (con != null)
2808+ {
2809+ con.close();
2810+ }
2811+ }
2812+ catch (SQLException e)
2813+ {
2814+ e.printStackTrace();
2815+ }
2816+ if (repCharJail <= 1)
2817+ {
2818+ return result;
2819+ }
2820+ }
2821+ catch (SQLException e)
2822+ {
2823+ e.printStackTrace();
2824+ return result;
2825+ }
2826+ finally
2827+ {
2828+ try
2829+ {
2830+ if (con != null)
2831+ {
2832+ con.close();
2833+ }
2834+ }
2835+ catch (SQLException e)
2836+ {
2837+ e.printStackTrace();
2838+ }
2839+ }
2840+ result = true;
2841+ return result;
2842+ }
2843+
2844+ private static boolean checkChar(Player activeChar, String repairChar)
2845+ {
2846+ boolean result = false;
2847+ if (activeChar.getName().compareTo(repairChar) == 0)
2848+ {
2849+ result = true;
2850+ }
2851+ return result;
2852+ }
2853+
2854+ private static void repairBadCharacter(String charName)
2855+ {
2856+ Connection con = null;
2857+ try
2858+ {
2859+ con = L2DatabaseFactory.getInstance().getConnection();
2860+
2861+ PreparedStatement statement = con.prepareStatement("SELECT obj_Id FROM characters WHERE char_name=?");
2862+ statement.setString(1, charName);
2863+ ResultSet rset = statement.executeQuery();
2864+
2865+ int objId = 0;
2866+ if (rset.next())
2867+ {
2868+ objId = rset.getInt(1);
2869+ }
2870+ rset.close();
2871+ statement.close();
2872+ if (objId == 0)
2873+ {
2874+ con.close();
2875+ return;
2876+ }
2877+ statement = con.prepareStatement("UPDATE characters SET x=17867, y=170259, z=-3503 WHERE obj_Id=?");
2878+ statement.setInt(1, objId);
2879+ statement.execute();
2880+ statement.close();
2881+ statement = con.prepareStatement("DELETE FROM character_shortcuts WHERE char_obj_id=?");
2882+ statement.setInt(1, objId);
2883+ statement.execute();
2884+ statement.close();
2885+ statement = con.prepareStatement("UPDATE items SET loc=\"WAREHOUSE\" WHERE owner_id=? AND loc=\"PAPERDOLL\"");
2886+ statement.setInt(1, objId);
2887+ statement.execute();
2888+ statement.close(); return;
2889+ }
2890+ catch (Exception e)
2891+ {
2892+ _log.warning("GameServer: could not repair character:" + e);
2893+ }
2894+ finally
2895+ {
2896+
2897+ try
2898+ {
2899+ if (con != null)
2900+ {
2901+ con.close();
2902+ }
2903+ }
2904+ catch (SQLException e)
2905+ {
2906+ e.printStackTrace();
2907+ }
2908+ }
2909+ }
2910+
2911+ private static class SingletonHolder
2912+ {
2913+ protected static final RepairBBSManager _instance = new RepairBBSManager();
2914+ }
2915+}
2916Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/StatsBBSManager.java
2917===================================================================
2918--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/StatsBBSManager.java (revision 81)
2919+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/Manager/StatsBBSManager.java (revision 81)
2920@@ -0,0 +1,120 @@
2921+/*
2922+ * This program is free software: you can redistribute it and/or modify it under
2923+ * the terms of the GNU General Public License as published by the Free Software
2924+ * Foundation, either version 3 of the License, or (at your option) any later
2925+ * version.
2926+ *
2927+ * This program is distributed in the hope that it will be useful, but WITHOUT
2928+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
2929+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
2930+ * details.
2931+ *
2932+ * You should have received a copy of the GNU General Public License along with
2933+ * this program. If not, see <http://www.gnu.org/licenses/>.
2934+ */
2935+package net.sf.l2j.gameserver.communitybbs.Manager;
2936+
2937+import java.util.StringTokenizer;
2938+
2939+import net.sf.l2j.gameserver.communitybbs.tasks.PlayerStatsUpdateTask;
2940+import net.sf.l2j.gameserver.data.cache.HtmCache;
2941+import net.sf.l2j.gameserver.model.actor.Player;
2942+
2943+public class StatsBBSManager extends BaseBBSManager
2944+{
2945+ @Override
2946+ public void parseCmd(String command, Player activeChar)
2947+ {
2948+ if (command.startsWith("_bbsstats"))
2949+ {
2950+ StringTokenizer st = new StringTokenizer(command, ";");
2951+ st.nextToken();
2952+ String secondCommand = st.nextToken();
2953+ if (secondCommand.equals("pvp"))
2954+ {
2955+ showTopPvpList(activeChar);
2956+ }
2957+ else if (secondCommand.equals("pk"))
2958+ {
2959+ showTopPkList(activeChar);
2960+ }
2961+ else if (secondCommand.equals("raid"))
2962+ {
2963+ showTopRaidList(activeChar);
2964+ }
2965+ else if (secondCommand.equals("adena"))
2966+ {
2967+ showTopAdenaList(activeChar);
2968+ }
2969+ else if (secondCommand.equals("online"))
2970+ {
2971+ showTopOnlineList(activeChar);
2972+ }
2973+ }
2974+ else
2975+ {
2976+ super.parseCmd(command, activeChar);
2977+ }
2978+ }
2979+
2980+ @Override
2981+ protected String getFolder()
2982+ {
2983+ return "stats/";
2984+ }
2985+
2986+ public static StatsBBSManager getInstance()
2987+ {
2988+ return SingletonHolder._instance;
2989+ }
2990+
2991+ private static void showTopPvpList(Player activeChar)
2992+ {
2993+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/stats/topPvp.htm");
2994+
2995+ content = content.replaceAll("%toppvp%", PlayerStatsUpdateTask.pvpList());
2996+ content = content.replace("%lastUpdate%", PlayerStatsUpdateTask.getLastUpdate());
2997+ separateAndSend(content, activeChar);
2998+ }
2999+
3000+ private static void showTopPkList(Player activeChar)
3001+ {
3002+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/stats/topPk.htm");
3003+
3004+ content = content.replaceAll("%toppk%", PlayerStatsUpdateTask.pkList());
3005+ content = content.replace("%lastUpdate%", PlayerStatsUpdateTask.getLastUpdate());
3006+ separateAndSend(content, activeChar);
3007+ }
3008+
3009+ private static void showTopRaidList(Player activeChar)
3010+ {
3011+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/stats/topRaid.htm");
3012+
3013+ content = content.replaceAll("%topraid%", PlayerStatsUpdateTask.raidList());
3014+ content = content.replace("%lastUpdate%", PlayerStatsUpdateTask.getLastUpdate());
3015+ separateAndSend(content, activeChar);
3016+ }
3017+
3018+ private static void showTopAdenaList(Player activeChar)
3019+ {
3020+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/stats/topAdena.htm");
3021+
3022+ content = content.replaceAll("%topadena%", PlayerStatsUpdateTask.adenaList());
3023+ content = content.replace("%lastUpdate%", PlayerStatsUpdateTask.getLastUpdate());
3024+ separateAndSend(content, activeChar);
3025+ }
3026+
3027+ private static void showTopOnlineList(Player activeChar)
3028+ {
3029+ String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/stats/topOnline.htm");
3030+
3031+ content = content.replaceAll("%toponline%", PlayerStatsUpdateTask.onlineList());
3032+ content = content.replace("%lastUpdate%", PlayerStatsUpdateTask.getLastUpdate());
3033+ separateAndSend(content, activeChar);
3034+ }
3035+
3036+ private static class SingletonHolder
3037+ {
3038+ protected static final StatsBBSManager _instance = new StatsBBSManager();
3039+ }
3040+}
3041Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/tasks/AnnouncementsUpdateManager.java
3042===================================================================
3043--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/tasks/AnnouncementsUpdateManager.java (revision 81)
3044+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/tasks/AnnouncementsUpdateManager.java (revision 81)
3045@@ -0,0 +1,161 @@
3046+/*
3047+ * This program is free software: you can redistribute it and/or modify it under
3048+ * the terms of the GNU General Public License as published by the Free Software
3049+ * Foundation, either version 3 of the License, or (at your option) any later
3050+ * version.
3051+ *
3052+ * This program is distributed in the hope that it will be useful, but WITHOUT
3053+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
3054+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
3055+ * details.
3056+ *
3057+ * You should have received a copy of the GNU General Public License along with
3058+ * this program. If not, see <http://www.gnu.org/licenses/>.
3059+ */
3060+package net.sf.l2j.gameserver.communitybbs.tasks;
3061+
3062+import java.sql.Connection;
3063+import java.sql.PreparedStatement;
3064+import java.sql.ResultSet;
3065+import java.sql.SQLException;
3066+import java.util.logging.Level;
3067+import java.util.logging.Logger;
3068+
3069+import net.sf.l2j.L2DatabaseFactory;
3070+
3071+public class AnnouncementsUpdateManager
3072+{
3073+ static Logger _log = Logger.getLogger(AnnouncementsUpdateManager.class.getName());
3074+
3075+ private static StringBuilder _announcementsList = new StringBuilder();
3076+
3077+ public static void loadSection()
3078+ {
3079+ _log.log(Level.INFO, "[CommunityBoard]: Loading announcements section.");
3080+ try
3081+ {
3082+ Connection con = L2DatabaseFactory.getInstance().getConnection();Throwable localThrowable3 = null;
3083+ try
3084+ {
3085+ PreparedStatement st = con.prepareStatement("SELECT announce_id,announce_title,announce_date FROM bbs_announcements ORDER BY announce_id DESC LIMIT 5;");
3086+ ResultSet rset = st.executeQuery();
3087+
3088+ int id = 0;
3089+ String title = "";
3090+ String date = "";
3091+ while (rset.next())
3092+ {
3093+ id = rset.getInt("announce_id");
3094+ title = rset.getString("announce_title");
3095+ date = rset.getString("announce_date");
3096+
3097+ _announcementsList.append("<table width=610 height=40><tr>");
3098+ _announcementsList.append("<td width=50 align=center>" + id + "</td>");
3099+ _announcementsList.append("<td width=400 align=left><a action=\"bypass _bbsannouncements;read " + id + "\">" + title + "</a></td>");
3100+ _announcementsList.append("<td width=100 align=center>" + date + "</td>");
3101+ _announcementsList.append("</tr></table><img src=\"l2ui.squaregray\" width=\"610\" height=\"1\">");
3102+ }
3103+ rset.close();
3104+ st.close();
3105+ }
3106+ catch (Throwable localThrowable1)
3107+ {
3108+ localThrowable3 = localThrowable1;throw localThrowable1;
3109+ }
3110+ finally
3111+ {
3112+ if (con != null)
3113+ {
3114+ if (localThrowable3 != null)
3115+ {
3116+ try
3117+ {
3118+ con.close();
3119+ }
3120+ catch (Throwable localThrowable2)
3121+ {
3122+ localThrowable3.addSuppressed(localThrowable2);
3123+ }
3124+ }
3125+ else
3126+ {
3127+ con.close();
3128+ }
3129+ }
3130+ }
3131+ }
3132+ catch (SQLException e)
3133+ {
3134+ _log.log(Level.WARNING, "Failed to load announcements list " + e.getMessage(), e);
3135+ }
3136+ }
3137+
3138+ public static void updateList()
3139+ {
3140+ _log.log(Level.INFO, "[CommunityBoard]: Announcements section has been updated.");
3141+
3142+ _announcementsList.delete(0, _announcementsList.length());
3143+ try
3144+ {
3145+ Connection con = L2DatabaseFactory.getInstance().getConnection();Throwable localThrowable3 = null;
3146+ try
3147+ {
3148+ PreparedStatement st = con.prepareStatement("SELECT announce_id,announce_title,announce_date FROM bbs_announcements ORDER BY announce_id DESC LIMIT 5;");
3149+ ResultSet rset = st.executeQuery();
3150+
3151+
3152+ int id = 0;
3153+ String title = "";
3154+ String date = "";
3155+ while (rset.next())
3156+ {
3157+ id = rset.getInt("announce_id");
3158+ title = rset.getString("announce_title");
3159+ date = rset.getString("announce_date");
3160+
3161+ _announcementsList.append("<table width=610 height=40><tr>");
3162+ _announcementsList.append("<td width=50 align=center>" + id + "</td>");
3163+ _announcementsList.append("<td width=400 align=left><a action=\"bypass _bbsannouncements;read " + id + "\">" + title + "</a></td>");
3164+ _announcementsList.append("<td width=100 align=center>" + date + "</td>");
3165+ _announcementsList.append("</tr></table><img src=\"l2ui.squaregray\" width=\"610\" height=\"1\">");
3166+ }
3167+ rset.close();
3168+ st.close();
3169+ }
3170+ catch (Throwable localThrowable1)
3171+ {
3172+ localThrowable3 = localThrowable1;throw localThrowable1;
3173+ }
3174+ finally
3175+ {
3176+ if (con != null)
3177+ {
3178+ if (localThrowable3 != null)
3179+ {
3180+ try
3181+ {
3182+ con.close();
3183+ }
3184+ catch (Throwable localThrowable2)
3185+ {
3186+ localThrowable3.addSuppressed(localThrowable2);
3187+ }
3188+ }
3189+ else
3190+ {
3191+ con.close();
3192+ }
3193+ }
3194+ }
3195+ }
3196+ catch (SQLException e)
3197+ {
3198+ _log.log(Level.WARNING, "Failed to update announcements list " + e.getMessage(), e);
3199+ }
3200+ }
3201+
3202+ public static String showList()
3203+ {
3204+ return _announcementsList.toString();
3205+ }
3206+}
3207Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/tasks/PlayerStatsUpdateTask.java
3208===================================================================
3209--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/tasks/PlayerStatsUpdateTask.java (revision 81)
3210+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/communitybbs/tasks/PlayerStatsUpdateTask.java (revision 81)
3211@@ -0,0 +1,581 @@
3212+/*
3213+ * This program is free software: you can redistribute it and/or modify it under
3214+ * the terms of the GNU General Public License as published by the Free Software
3215+ * Foundation, either version 3 of the License, or (at your option) any later
3216+ * version.
3217+ *
3218+ * This program is distributed in the hope that it will be useful, but WITHOUT
3219+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
3220+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
3221+ * details.
3222+ *
3223+ * You should have received a copy of the GNU General Public License along with
3224+ * this program. If not, see <http://www.gnu.org/licenses/>.
3225+ */
3226+package net.sf.l2j.gameserver.communitybbs.tasks;
3227+
3228+import java.sql.Connection;
3229+import java.sql.PreparedStatement;
3230+import java.sql.ResultSet;
3231+import java.util.Date;
3232+import java.util.HashMap;
3233+import java.util.Map;
3234+import java.util.logging.Level;
3235+import java.util.logging.Logger;
3236+
3237+import net.sf.l2j.commons.concurrent.ThreadPool;
3238+
3239+import net.sf.l2j.Config;
3240+import net.sf.l2j.L2DatabaseFactory;
3241+
3242+public class PlayerStatsUpdateTask
3243+{
3244+ static Logger _log = Logger.getLogger(PlayerStatsUpdateTask.class.getName());
3245+ private static StringBuilder _pvpList = new StringBuilder();
3246+ private static StringBuilder _pkList = new StringBuilder();
3247+ private static StringBuilder _raidList = new StringBuilder();
3248+ private static StringBuilder _adenaList = new StringBuilder();
3249+ private static StringBuilder _onlineList = new StringBuilder();
3250+ private static String _lastUpdate = "Error";
3251+ Connection con = L2DatabaseFactory.getInstance().getConnection();
3252+
3253+ public static void updateTask()
3254+ {
3255+ _log.log(Level.INFO, "[CommunityBoard]: Started player stats update task!");
3256+
3257+ ThreadPool.scheduleAtFixedRate(new Runnable()
3258+ {
3259+ @Override
3260+ public void run()
3261+ {
3262+ PlayerStatsUpdateTask.cleanUpTask();
3263+ PlayerStatsUpdateTask.updatePvPList();
3264+ PlayerStatsUpdateTask.updatePkList();
3265+ PlayerStatsUpdateTask.updateRaidList();
3266+ PlayerStatsUpdateTask.updateAdenaList();
3267+ PlayerStatsUpdateTask.updateOnlineList();
3268+
3269+ Date date = new Date();
3270+ PlayerStatsUpdateTask.lastUpdate(date.toString());
3271+ }
3272+ }, 10000, 10000);
3273+ }
3274+
3275+ static void cleanUpTask()
3276+ {
3277+ _pvpList.delete(0, _pvpList.length());
3278+ _pkList.delete(0, _pkList.length());
3279+ _raidList.delete(0, _raidList.length());
3280+ _adenaList.delete(0, _adenaList.length());
3281+ _onlineList.delete(0, _onlineList.length());
3282+ }
3283+
3284+ static void updatePvPList()
3285+ {
3286+ try
3287+ {
3288+ Connection con = L2DatabaseFactory.getInstance().getConnection();Throwable localThrowable3 = null;
3289+ try
3290+ {
3291+ int pos = 0;
3292+
3293+ PreparedStatement statement = con.prepareStatement("SELECT chr.points, 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.obj_Id=chr.char_id LEFT OUTER JOIN items it ON ch.obj_Id=it.owner_id WHERE item_id=57 GROUP BY ch.obj_Id ORDER BY pvpkills DESC LIMIT " + Config.TOP_PLAYER_RESULTS);
3294+ ResultSet result = statement.executeQuery();
3295+ while (result.next())
3296+ {
3297+ pos++;
3298+ boolean status = false;
3299+ if (result.getInt("online") == 1)
3300+ {
3301+ status = true;
3302+ }
3303+ String timeon = getPlayerRunTime(result.getInt("ch.onlinetime"));
3304+ String adenas = getAdenas(result.getLong("it.count"));
3305+
3306+ _pvpList.append("<table border=0 cellspacing=0 cellpadding=2 height=" + Config.TOP_PLAYER_ROW_HEIGHT + " width=610><tr><td FIXWIDTH=5></td>");
3307+ _pvpList.append("<td FIXWIDTH=25>" + pos + "</td>");
3308+ _pvpList.append("<td FIXWIDTH=180>" + result.getString("ch.char_name") + "</td>");
3309+ _pvpList.append("<td FIXWIDTH=175>" + className(result.getInt("base_class")) + "</td>");
3310+ _pvpList.append("<td FIXWIDTH=60>" + result.getInt("ch.pvpkills") + "</td>");
3311+ _pvpList.append("<td FIXWIDTH=60>" + result.getInt("ch.pkkills") + "</td>");
3312+ _pvpList.append("<td FIXWIDTH=70>" + result.getInt("chr.points") + "</td>");
3313+ _pvpList.append("<td FIXWIDTH=140>" + adenas + "</td>");
3314+ _pvpList.append("<td FIXWIDTH=150>" + timeon + "</td>");
3315+ _pvpList.append("<td FIXWIDTH=65>" + (status ? "<font color=99FF00>Online</font>" : "<font color=CC0000>Offline</font>") + "</td>");
3316+ _pvpList.append("</tr></table><img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\">");
3317+ }
3318+ result.close();
3319+ statement.close();
3320+ }
3321+ catch (Throwable localThrowable1)
3322+ {
3323+ localThrowable3 = localThrowable1;throw localThrowable1;
3324+ }
3325+ finally
3326+ {
3327+ if (con != null)
3328+ {
3329+ if (localThrowable3 != null)
3330+ {
3331+ try
3332+ {
3333+ con.close();
3334+ }
3335+ catch (Throwable localThrowable2)
3336+ {
3337+ localThrowable3.addSuppressed(localThrowable2);
3338+ }
3339+ }
3340+ else
3341+ {
3342+ con.close();
3343+ }
3344+ }
3345+ }
3346+ }
3347+ catch (Exception e)
3348+ {
3349+ _log.log(Level.WARNING, "Failed to update pvp list!");
3350+ e.printStackTrace();
3351+ }
3352+ }
3353+
3354+ static void updatePkList()
3355+ {
3356+ try
3357+ {
3358+ Connection con = L2DatabaseFactory.getInstance().getConnection();Throwable localThrowable3 = null;
3359+ try
3360+ {
3361+ int pos = 0;
3362+
3363+ PreparedStatement statement = con.prepareStatement("SELECT chr.points, 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.obj_Id=chr.char_id LEFT OUTER JOIN items it ON ch.obj_Id=it.owner_id WHERE item_id=57 GROUP BY ch.obj_Id ORDER BY pkkills DESC LIMIT " + Config.TOP_PLAYER_RESULTS);
3364+ ResultSet result = statement.executeQuery();
3365+ while (result.next())
3366+ {
3367+ pos++;
3368+ boolean status = false;
3369+ if (result.getInt("online") == 1)
3370+ {
3371+ status = true;
3372+ }
3373+ String timeon = getPlayerRunTime(result.getInt("ch.onlinetime"));
3374+ String adenas = getAdenas(result.getLong("it.count"));
3375+
3376+ _pkList.append("<table border=0 cellspacing=0 cellpadding=2 height=" + Config.TOP_PLAYER_ROW_HEIGHT + " width=610><tr><td FIXWIDTH=5></td>");
3377+ _pkList.append("<td FIXWIDTH=25>" + pos + "</td>");
3378+ _pkList.append("<td FIXWIDTH=180>" + result.getString("ch.char_name") + "</td>");
3379+ _pkList.append("<td FIXWIDTH=175>" + className(result.getInt("base_class")) + "</td>");
3380+ _pkList.append("<td FIXWIDTH=60>" + result.getInt("ch.pvpkills") + "</td>");
3381+ _pkList.append("<td FIXWIDTH=60>" + result.getInt("ch.pkkills") + "</td>");
3382+ _pkList.append("<td FIXWIDTH=70>" + result.getInt("chr.points") + "</td>");
3383+ _pkList.append("<td FIXWIDTH=140>" + adenas + "</td>");
3384+ _pkList.append("<td FIXWIDTH=150>" + timeon + "</td>");
3385+ _pkList.append("<td FIXWIDTH=65>" + (status ? "<font color=99FF00>Online</font>" : "<font color=CC0000>Offline</font>") + "</td>");
3386+ _pkList.append("</tr></table><img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\">");
3387+ }
3388+ result.close();
3389+ statement.close();
3390+ }
3391+ catch (Throwable localThrowable1)
3392+ {
3393+ localThrowable3 = localThrowable1;throw localThrowable1;
3394+ }
3395+ finally
3396+ {
3397+ if (con != null)
3398+ {
3399+ if (localThrowable3 != null)
3400+ {
3401+ try
3402+ {
3403+ con.close();
3404+ }
3405+ catch (Throwable localThrowable2)
3406+ {
3407+ localThrowable3.addSuppressed(localThrowable2);
3408+ }
3409+ }
3410+ else
3411+ {
3412+ con.close();
3413+ }
3414+ }
3415+ }
3416+ }
3417+ catch (Exception e)
3418+ {
3419+ _log.log(Level.WARNING, "Failed to update pk list!");
3420+ e.printStackTrace();
3421+ }
3422+ }
3423+
3424+ static void updateRaidList()
3425+ {
3426+ try
3427+ {
3428+ Connection con = L2DatabaseFactory.getInstance().getConnection();Throwable localThrowable3 = null;
3429+ try
3430+ {
3431+ int pos = 0;
3432+
3433+ PreparedStatement statement = con.prepareStatement("SELECT chr.points, 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.obj_Id=chr.char_id LEFT OUTER JOIN items it ON ch.obj_Id=it.owner_id WHERE item_id=57 GROUP BY ch.obj_Id ORDER BY SUM(chr.points) DESC LIMIT " + Config.TOP_PLAYER_RESULTS);
3434+ ResultSet result = statement.executeQuery();
3435+ while (result.next())
3436+ {
3437+ pos++;
3438+ boolean status = false;
3439+ if (result.getInt("online") == 1)
3440+ {
3441+ status = true;
3442+ }
3443+ String timeon = getPlayerRunTime(result.getInt("ch.onlinetime"));
3444+ String adenas = getAdenas(result.getLong("it.count"));
3445+
3446+ _raidList.append("<table border=0 cellspacing=0 cellpadding=2 height=" + Config.TOP_PLAYER_ROW_HEIGHT + " width=610><tr><td FIXWIDTH=5></td>");
3447+ _raidList.append("<td FIXWIDTH=25>" + pos + "</td>");
3448+ _raidList.append("<td FIXWIDTH=180>" + result.getString("ch.char_name") + "</td>");
3449+ _raidList.append("<td FIXWIDTH=175>" + className(result.getInt("base_class")) + "</td>");
3450+ _raidList.append("<td FIXWIDTH=60>" + result.getInt("ch.pvpkills") + "</td>");
3451+ _raidList.append("<td FIXWIDTH=60>" + result.getInt("ch.pkkills") + "</td>");
3452+ _raidList.append("<td FIXWIDTH=70>" + result.getInt("chr.points") + "</td>");
3453+ _raidList.append("<td FIXWIDTH=140>" + adenas + "</td>");
3454+ _raidList.append("<td FIXWIDTH=150>" + timeon + "</td>");
3455+ _raidList.append("<td FIXWIDTH=65>" + (status ? "<font color=99FF00>Online</font>" : "<font color=CC0000>Offline</font>") + "</td>");
3456+ _raidList.append("</tr></table><img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\">");
3457+ }
3458+ result.close();
3459+ statement.close();
3460+ }
3461+ catch (Throwable localThrowable1)
3462+ {
3463+ localThrowable3 = localThrowable1;throw localThrowable1;
3464+ }
3465+ finally
3466+ {
3467+ if (con != null)
3468+ {
3469+ if (localThrowable3 != null)
3470+ {
3471+ try
3472+ {
3473+ con.close();
3474+ }
3475+ catch (Throwable localThrowable2)
3476+ {
3477+ localThrowable3.addSuppressed(localThrowable2);
3478+ }
3479+ }
3480+ else
3481+ {
3482+ con.close();
3483+ }
3484+ }
3485+ }
3486+ }
3487+ catch (Exception e)
3488+ {
3489+ _log.log(Level.WARNING, "Failed to update raid list!");
3490+ e.printStackTrace();
3491+ }
3492+ }
3493+
3494+ static void updateAdenaList()
3495+ {
3496+ try
3497+ {
3498+ Connection con = L2DatabaseFactory.getInstance().getConnection();Throwable localThrowable3 = null;
3499+ try
3500+ {
3501+ int pos = 0;
3502+
3503+ PreparedStatement statement = con.prepareStatement("SELECT chr.points, 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.obj_Id=chr.char_id LEFT OUTER JOIN items it ON ch.obj_Id=it.owner_id WHERE item_id=57 GROUP BY ch.obj_Id ORDER BY SUM(it.count) DESC LIMIT " + Config.TOP_PLAYER_RESULTS);
3504+ ResultSet result = statement.executeQuery();
3505+ while (result.next())
3506+ {
3507+ pos++;
3508+ boolean status = false;
3509+ if (result.getInt("online") == 1)
3510+ {
3511+ status = true;
3512+ }
3513+ String timeon = getPlayerRunTime(result.getInt("ch.onlinetime"));
3514+ String adenas = getAdenas(result.getLong("it.count"));
3515+
3516+ _adenaList.append("<table border=0 cellspacing=0 cellpadding=2 height=" + Config.TOP_PLAYER_ROW_HEIGHT + " width=610><tr><td FIXWIDTH=5></td>");
3517+ _adenaList.append("<td FIXWIDTH=25>" + pos + "</td>");
3518+ _adenaList.append("<td FIXWIDTH=180>" + result.getString("ch.char_name") + "</td>");
3519+ _adenaList.append("<td FIXWIDTH=175>" + className(result.getInt("base_class")) + "</td>");
3520+ _adenaList.append("<td FIXWIDTH=60>" + result.getInt("ch.pvpkills") + "</td>");
3521+ _adenaList.append("<td FIXWIDTH=60>" + result.getInt("ch.pkkills") + "</td>");
3522+ _adenaList.append("<td FIXWIDTH=70>" + result.getInt("chr.points") + "</td>");
3523+ _adenaList.append("<td FIXWIDTH=140>" + adenas + "</td>");
3524+ _adenaList.append("<td FIXWIDTH=150>" + timeon + "</td>");
3525+ _adenaList.append("<td FIXWIDTH=65>" + (status ? "<font color=99FF00>Online</font>" : "<font color=CC0000>Offline</font>") + "</td>");
3526+ _adenaList.append("</tr></table><img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\">");
3527+ }
3528+ result.close();
3529+ statement.close();
3530+ }
3531+ catch (Throwable localThrowable1)
3532+ {
3533+ localThrowable3 = localThrowable1;throw localThrowable1;
3534+ }
3535+ finally
3536+ {
3537+ if (con != null)
3538+ {
3539+ if (localThrowable3 != null)
3540+ {
3541+ try
3542+ {
3543+ con.close();
3544+ }
3545+ catch (Throwable localThrowable2)
3546+ {
3547+ localThrowable3.addSuppressed(localThrowable2);
3548+ }
3549+ }
3550+ else
3551+ {
3552+ con.close();
3553+ }
3554+ }
3555+ }
3556+ }
3557+ catch (Exception e)
3558+ {
3559+ _log.log(Level.WARNING, "Failed to update adena list!");
3560+ e.printStackTrace();
3561+ }
3562+ }
3563+
3564+ static void updateOnlineList()
3565+ {
3566+ try
3567+ {
3568+ Connection con = L2DatabaseFactory.getInstance().getConnection();Throwable localThrowable3 = null;
3569+ try
3570+ {
3571+ int pos = 0;
3572+ PreparedStatement statement = con.prepareStatement("SELECT chr.points, 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.obj_Id=chr.char_id LEFT OUTER JOIN items it ON ch.obj_Id=it.owner_id WHERE item_id=57 GROUP BY ch.obj_Id ORDER BY onlinetime DESC LIMIT " + Config.TOP_PLAYER_RESULTS);
3573+ ResultSet result = statement.executeQuery();
3574+ while (result.next())
3575+ {
3576+ pos++;
3577+ boolean status = false;
3578+ if (result.getInt("online") == 1)
3579+ {
3580+ status = true;
3581+ }
3582+ String timeon = getPlayerRunTime(result.getInt("ch.onlinetime"));
3583+ String adenas = getAdenas(result.getLong("it.count"));
3584+
3585+ _onlineList.append("<table border=0 cellspacing=0 cellpadding=2 height=" + Config.TOP_PLAYER_ROW_HEIGHT + " width=610><tr><td FIXWIDTH=5></td>");
3586+ _onlineList.append("<td FIXWIDTH=25>" + pos + "</td>");
3587+ _onlineList.append("<td FIXWIDTH=180>" + result.getString("ch.char_name") + "</td>");
3588+ _onlineList.append("<td FIXWIDTH=175>" + className(result.getInt("base_class")) + "</td>");
3589+ _onlineList.append("<td FIXWIDTH=60>" + result.getInt("ch.pvpkills") + "</td>");
3590+ _onlineList.append("<td FIXWIDTH=60>" + result.getInt("ch.pkkills") + "</td>");
3591+ _onlineList.append("<td FIXWIDTH=70>" + result.getInt("chr.points") + "</td>");
3592+ _onlineList.append("<td FIXWIDTH=140>" + adenas + "</td>");
3593+ _onlineList.append("<td FIXWIDTH=150>" + timeon + "</td>");
3594+ _onlineList.append("<td FIXWIDTH=65>" + (status ? "<font color=99FF00>Online</font>" : "<font color=CC0000>Offline</font>") + "</td>");
3595+ _onlineList.append("</tr></table><img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\">");
3596+ }
3597+ result.close();
3598+ statement.close();
3599+ }
3600+ catch (Throwable localThrowable1)
3601+ {
3602+ localThrowable3 = localThrowable1;throw localThrowable1;
3603+ }
3604+ finally
3605+ {
3606+ if (con != null)
3607+ {
3608+ if (localThrowable3 != null)
3609+ {
3610+ try
3611+ {
3612+ con.close();
3613+ }
3614+ catch (Throwable localThrowable2)
3615+ {
3616+ localThrowable3.addSuppressed(localThrowable2);
3617+ }
3618+ }
3619+ else
3620+ {
3621+ con.close();
3622+ }
3623+ }
3624+ }
3625+ }
3626+ catch (Exception e)
3627+ {
3628+ _log.log(Level.WARNING, "Failed to update online time list!");
3629+ e.printStackTrace();
3630+ }
3631+ }
3632+
3633+ public static String pvpList()
3634+ {
3635+ return _pvpList.toString();
3636+ }
3637+
3638+ public static String pkList()
3639+ {
3640+ return _pkList.toString();
3641+ }
3642+
3643+ public static String raidList()
3644+ {
3645+ return _raidList.toString();
3646+ }
3647+
3648+ public static String adenaList()
3649+ {
3650+ return _adenaList.toString();
3651+ }
3652+
3653+ public static String onlineList()
3654+ {
3655+ return _onlineList.toString();
3656+ }
3657+
3658+ static void lastUpdate(String format)
3659+ {
3660+ _lastUpdate = format;
3661+ }
3662+
3663+ public static String getLastUpdate()
3664+ {
3665+ return _lastUpdate;
3666+ }
3667+
3668+ public static final String className(int classid)
3669+ {
3670+ Map<Integer, String> classList = new HashMap<>();
3671+
3672+ classList.put(Integer.valueOf(0), "Fighter");
3673+ classList.put(Integer.valueOf(1), "Warrior");
3674+ classList.put(Integer.valueOf(2), "Gladiator");
3675+ classList.put(Integer.valueOf(3), "Warlord");
3676+ classList.put(Integer.valueOf(4), "Knight");
3677+ classList.put(Integer.valueOf(5), "Paladin");
3678+ classList.put(Integer.valueOf(6), "Dark Avenger");
3679+ classList.put(Integer.valueOf(7), "Rogue");
3680+ classList.put(Integer.valueOf(8), "Treasure Hunter");
3681+ classList.put(Integer.valueOf(9), "Hawkeye");
3682+ classList.put(Integer.valueOf(10), "Mage");
3683+ classList.put(Integer.valueOf(11), "Wizard");
3684+ classList.put(Integer.valueOf(12), "Sorcerer");
3685+ classList.put(Integer.valueOf(13), "Necromancer");
3686+ classList.put(Integer.valueOf(14), "Warlock");
3687+ classList.put(Integer.valueOf(15), "Cleric");
3688+ classList.put(Integer.valueOf(16), "Bishop");
3689+ classList.put(Integer.valueOf(17), "Prophet");
3690+ classList.put(Integer.valueOf(18), "Elven Fighter");
3691+ classList.put(Integer.valueOf(19), "Elven Knight");
3692+ classList.put(Integer.valueOf(20), "Temple Knight");
3693+ classList.put(Integer.valueOf(21), "Swordsinger");
3694+ classList.put(Integer.valueOf(22), "Elven Scout");
3695+ classList.put(Integer.valueOf(23), "Plains Walker");
3696+ classList.put(Integer.valueOf(24), "Silver Ranger");
3697+ classList.put(Integer.valueOf(25), "Elven Mage");
3698+ classList.put(Integer.valueOf(26), "Elven Wizard");
3699+ classList.put(Integer.valueOf(27), "Spellsinger");
3700+ classList.put(Integer.valueOf(28), "Elemental Summoner");
3701+ classList.put(Integer.valueOf(29), "Oracle");
3702+ classList.put(Integer.valueOf(30), "Elder");
3703+ classList.put(Integer.valueOf(31), "Dark Fighter");
3704+ classList.put(Integer.valueOf(32), "Palus Knightr");
3705+ classList.put(Integer.valueOf(33), "Shillien Knight");
3706+ classList.put(Integer.valueOf(34), "Bladedancer");
3707+ classList.put(Integer.valueOf(35), "Assasin");
3708+ classList.put(Integer.valueOf(36), "Abyss Walker");
3709+ classList.put(Integer.valueOf(37), "Phantom Ranger");
3710+ classList.put(Integer.valueOf(38), "Dark Mage");
3711+ classList.put(Integer.valueOf(39), "Dark Wizard");
3712+ classList.put(Integer.valueOf(40), "Spellhowler");
3713+ classList.put(Integer.valueOf(41), "Phantom Summoner");
3714+ classList.put(Integer.valueOf(42), "Shillien Oracle");
3715+ classList.put(Integer.valueOf(43), "Shilien Elder");
3716+ classList.put(Integer.valueOf(44), "Orc Fighter");
3717+ classList.put(Integer.valueOf(45), "Orc Raider");
3718+ classList.put(Integer.valueOf(46), "Destroyer");
3719+ classList.put(Integer.valueOf(47), "Orc Monk");
3720+ classList.put(Integer.valueOf(48), "Tyrant");
3721+ classList.put(Integer.valueOf(49), "Orc Mage");
3722+ classList.put(Integer.valueOf(50), "Orc Shaman");
3723+ classList.put(Integer.valueOf(51), "Overlord");
3724+ classList.put(Integer.valueOf(52), "Warcryer");
3725+ classList.put(Integer.valueOf(53), "Dwarven Fighter");
3726+ classList.put(Integer.valueOf(54), "Scavenger");
3727+ classList.put(Integer.valueOf(55), "Bounty Hunter");
3728+ classList.put(Integer.valueOf(56), "Artisan");
3729+ classList.put(Integer.valueOf(57), "Warsmith");
3730+ classList.put(Integer.valueOf(88), "Duelist");
3731+ classList.put(Integer.valueOf(89), "Dreadnought");
3732+ classList.put(Integer.valueOf(90), "Phoenix Knight");
3733+ classList.put(Integer.valueOf(91), "Hell Knight");
3734+ classList.put(Integer.valueOf(92), "Sagittarius");
3735+ classList.put(Integer.valueOf(93), "Adventurer");
3736+ classList.put(Integer.valueOf(94), "Archmage");
3737+ classList.put(Integer.valueOf(95), "Soultaker");
3738+ classList.put(Integer.valueOf(96), "Arcana Lord");
3739+ classList.put(Integer.valueOf(97), "Cardinal");
3740+ classList.put(Integer.valueOf(98), "Hierophant");
3741+ classList.put(Integer.valueOf(99), "Evas Templar");
3742+ classList.put(Integer.valueOf(100), "Sword Muse");
3743+ classList.put(Integer.valueOf(101), "Wind Rider");
3744+ classList.put(Integer.valueOf(102), "Moonlight Sentinel");
3745+ classList.put(Integer.valueOf(103), "Mystic Muse");
3746+ classList.put(Integer.valueOf(104), "Elemental Master");
3747+ classList.put(Integer.valueOf(105), "Evas Saint");
3748+ classList.put(Integer.valueOf(106), "Shillien Templar");
3749+ classList.put(Integer.valueOf(107), "Spectral Dancer");
3750+ classList.put(Integer.valueOf(108), "Ghost Hunter");
3751+ classList.put(Integer.valueOf(109), "Ghost Sentinel");
3752+ classList.put(Integer.valueOf(110), "Storm Screamer");
3753+ classList.put(Integer.valueOf(111), "Spectral Master");
3754+ classList.put(Integer.valueOf(112), "Shillien Saint");
3755+ classList.put(Integer.valueOf(113), "Titan");
3756+ classList.put(Integer.valueOf(114), "Grand Khavatari");
3757+ classList.put(Integer.valueOf(115), "Dominator");
3758+ classList.put(Integer.valueOf(116), "Doomcryer");
3759+ classList.put(Integer.valueOf(117), "Fortune Seeker");
3760+ classList.put(Integer.valueOf(118), "Maestro");
3761+
3762+ return classList.get(Integer.valueOf(classid));
3763+ }
3764+
3765+ static String getPlayerRunTime(int secs)
3766+ {
3767+ String timeResult = "";
3768+ if (secs >= 86400)
3769+ {
3770+ timeResult = Integer.toString(secs / 86400) + " Days " + Integer.toString(secs % 86400 / 3600) + " hours";
3771+ }
3772+ else
3773+ {
3774+ timeResult = Integer.toString(secs / 3600) + " Hours " + Integer.toString(secs % 3600 / 60) + " mins";
3775+ }
3776+ return timeResult;
3777+ }
3778+
3779+ public static String getAdenas(Long adena)
3780+ {
3781+ String adenas = "";
3782+ if (adena >= 1000000000)
3783+ {
3784+ adenas = Long.toString(adena / 1000000000) + " Billion " + Long.toString(adena % 1000000000 / 1000000) + " million";
3785+ }
3786+ else
3787+ {
3788+ adenas = Long.toString(adena / 1000000) + " Million " + Long.toString(adena % 1000000 / 1000) + " k";
3789+ }
3790+ return adenas;
3791+ }
3792+}
3793Index: /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/model/World.java
3794===================================================================
3795--- /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/model/World.java (revision 80)
3796+++ /trunk/aCis_gameserver/java/net/sf/l2j/gameserver/model/World.java (revision 81)
3797@@ -2,4 +2,5 @@
3798
3799 import java.util.Collection;
3800+import java.util.List;
3801 import java.util.Map;
3802 import java.util.concurrent.ConcurrentHashMap;
3803@@ -9,4 +10,5 @@
3804 import net.sf.l2j.gameserver.data.sql.PlayerInfoTable;
3805 import net.sf.l2j.gameserver.data.sql.SpawnTable;
3806+import net.sf.l2j.gameserver.data.xml.AdminData;
3807 import net.sf.l2j.gameserver.model.actor.Npc;
3808 import net.sf.l2j.gameserver.model.actor.Player;
3809@@ -261,3 +263,7 @@
3810 protected static final World INSTANCE = new World();
3811 }
3812+ public static List<Player> getAllGMs()
3813+ {
3814+ return AdminData.getInstance().getAllGms(true);
3815+ }
3816 }