root/npc/custom/Lance/FR_HallOfFame.c @ 1

Revision 1, 9.0 kB (checked in by jinshiro, 17 years ago)
Line 
1//===== eAthena Script ======================================
2//= Hall of Fame
3//===========================================================
4//===== By ==================================================
5//= [Lance]
6//= Idea from emilylee78
7//===== Version =============================================
8//= 2.4 FINAL
9//===== Compatible With =====================================
10//= eAthena SVN and Freya SVN
11//===== Description =========================================
12//= A Hall of Fame framework. Will update the list on every
13//= login and logout in a safe manner.
14//=
15//= Usage: callfunc "printHallOfFame", $;
16//= $ - Can be either 0 or 1.
17//= 0 - Display the current rankings.
18//= 1 - Display last week's rankings.
19//= Note : Remember to put a close; after calling it.
20//===== Comments ============================================
21//= 1.0 - Initial beta release                      [Lance]
22//= 1.1 - Fixed typos. Optimized a teeny bit.       [Lance]
23//= 1.2 - Bug fixes.                                [Lance]
24//= 1.3 - Added a more realistic shuffling.         [Lance]
25//= 1.4 - Added Weekly Top 10 list.                 [Lance]
26//= 1.5 - Friggin typos =< + Better shuffling       [Lance]
27//= 1.6 - Bugfixes                                  [Lance]
28//= 1.7 - More bugfixes. Type mismatch =P           [Lance]
29//= 2.0 - Exclude GMs and add recovery plan.
30//=       Suggested by EvilPoringOfDooom.           [Lance]
31//= 2.1 - Typo.. again.. T_T                        [Lance]
32//= 2.2 - Minor updates and added Jury              [Lance]
33//= 2.3 - Utilizing eAthena's new scripting engine  [Lance]
34//= 2.4 - Minor bug fix with event script label (bugport:722) [Samura22]
35//===========================================================
36
37prontera,0,0,0  script  OnPCLoginEvent  -1,{
38OnPCLoginEvent:
39        callfunc "HallOfFameInit";
40        end;
41
42OnInit:
43        // Total Number of Players in Hall of Fame
44        // =======================================
45        set $HoF_totalCount, 10;
46        // Reshuffle (Will affect perfomance) ====
47        set $HoF_reshuffle, 1;
48        // Minimum GM Lvl to be excluded from HoF=
49        set $HoF_minGMLvl, 99;
50        // Recovery Plan to Remove GMs ============
51        set $@HoF_recovery, 0;
52        // =======================================
53
54        //set $HoF_totalCount, $HoF_totalCount - 1;
55        set $@FebruaryD, 28;
56        if((gettime(7) % 4) == 0) {
57                set $@FebruaryD, 29;
58        }
59        setarray $@MonthDayThing[1],31, $@FebruaryD,31,30,31,30,31,31,30,31,30,31;
60        set $@HoF_TimeUpdateD, $HoF_LastUpdateD;
61        set $@HoF_TimeUpdateM, $HoF_LastUpdateM;
62        set $@HoF_TimeUpdateY, $HoF_LastUpdateY;
63        // Time to do some maths
64        set $@TimeNowD, gettime(5);
65        set $@TimeNowM, gettime(6);
66        set $@TimeNowY, gettime(7);
67        // Debug Message --
68        debugmes "[Hall of Fame] Last Update is Year " + $@HoF_TimeUpdateY + " Month " + $@HoF_TimeUpdateM + " Day " + $@HoF_TimeUpdateD;
69        debugmes "[Hall of Fame] Today is Year " + $@TimeNowY + " Month " + $@TimeNowM + " Day " + $@TimeNowD;
70        if(($@TimeNowD - $@HoF_TimeUpdateD) < 0){
71                set $@TimeNowD, $@TimeNowD + $@MonthDayThing[$@TimeNowM];
72                set $@TimeNowM, $@TimeNowM - 1;
73        }
74        set $@GapD, $@TimeNowD - $@HoF_TimeUpdateD;
75        if(($@TimeNowM - $@HoF_TimeUpdateM) < 0){
76                set $@TimeNowM, $@TimeNowM + 12;
77                set $@TimeNowY, $@TimeNowY - 1;
78        }
79        set $@GapM, $@TimeNowM - $@HoF_TimeUpdateM;
80        set $@GapY, $@TimeNowY - $@HoF_TimeUpdateY;
81        debugmes "[Hall of Fame] Gap is " + $@GapY + " Years " + $@GapM + " Months " + $@GapD + " Days.";
82        if($@GapY > 0 || $@GapM > 0 || $@GapD >= 7) {
83                callfunc "hallOfFameReset"; // Phew..
84        }
85        end;
86
87OnClock0000:
88        set $HoF_UpdateCount, $HoF_UpdateCount + 1;
89        if($HoF_UpdateCount == 7) {
90                callfunc "hallOfFameReset";
91        }
92        end;
93}
94
95prontera,0,0,0  script  PCLogoutEvent   -1,{
96OnPCLogoutEvent:
97        callfunc "HallOfFameInit";
98        end;
99}
100
101function        script  hallOfFameReset {
102        copyarray $HoF_LadderNameO$[0], $HoF_LadderName$[0], $HoF_totalCount;
103        copyarray $HoF_LadderBLevelO[0], $HoF_LadderBLevel[0], $HoF_totalCount; 
104        copyarray $HoF_LadderJLevelO[0], $HoF_LadderJLevel[0], $HoF_totalCount;
105        copyarray $HoF_LadderZenyO[0], $HoF_LadderZeny[0], $HoF_totalCount;
106        deletearray $HoF_LadderName$[0], $HoF_totalCount;
107        deletearray $HoF_LadderBLevel[0], $HoF_totalCount; 
108        deletearray $HoF_LadderJLevel[0], $HoF_totalCount;
109        deletearray $HoF_LadderZeny[0], $HoF_totalCount;
110        set $HoF_LastUpdateD, gettime(5);
111        set $HoF_LastUpdateM, gettime(6);
112        set $HoF_LastUpdateY, gettime(7);
113        set $HoF_UpdateCount, 0;
114        debugmes "[Hall of Fame] System Reset Invoked!";
115        return;
116}
117
118function        script  HallOfFameInit  {
119        if(getgmlevel() >= $HoF_minGMLvl && $@HoF_recovery != 1) {
120                set PCLogoutEvent, 0;
121        } else {
122                set PCLogoutEvent, 1;
123                callfunc "updateHallofFame", $HoF_reshuffle;
124        }
125        return;
126}
127
128function        script  updateHallofFame        {
129        set @i, 0;
130        if(getarg(0) == 1){
131                goto L_ShuffleName;
132        }
133        if(BaseLevel >= $HoF_LadderBLevel[$HoF_totalCount-1]){
134                goto L_checkBase;
135        }
136        goto L_End;
137
138L_ShuffleName:
139        if($HoF_LadderName$[@i] == strcharinfo(0)) {
140                goto L_ShuffleScore;
141        }
142        if(@i == $HoF_totalCount-1) {
143                goto L_checkEntry;
144        }
145        set @i, @i + 1;
146        goto L_ShuffleName;
147
148L_ShuffleScore:
149        deletearray $HoF_LadderName$[@i],1;
150        deletearray $HoF_LadderZeny[@i],1;
151        deletearray $HoF_LadderJLevel[@i],1;
152        deletearray $HoF_LadderBLevel[@i],1;
153        goto L_ShuffleName;
154
155L_checkEntry:
156        if(getgmlevel() >= $HoF_minGMLvl){
157                end;
158        }
159        set @i, 0;
160        goto L_checkBase;
161
162L_checkBase:
163        if(BaseLevel >= $HoF_LadderBLevel[@i]) {
164                goto L_BaseOK;
165        } else {
166                goto L_Increment;
167        }
168
169L_BaseOK:
170        if(BaseLevel == $HoF_LadderBLevel[@i]){
171                goto L_BaseSameLoop;
172        } else {
173                goto L_NewEntry;
174        }
175
176L_BaseSameLoop:
177        if(JobLevel >= $HoF_LadderJLevel[@i]) {
178                goto L_JobOK;
179        } else if(Zeny >= $HoF_LadderZeny[@i]) {
180                goto L_ZenyOK;
181        }
182        goto L_Increment;
183
184L_JobOK:
185        if(JobLevel == $HoF_LadderJLevel[@i]) {
186                goto L_JobSame;
187        } else {
188                goto L_NewEntry;
189        }
190
191L_ZenyOK:
192        if(Zeny == $HoF_LadderZeny[@i]){
193                goto L_Increment;
194        } else {
195                goto L_NewEntry;
196        }
197
198L_JobSame:
199        if(Zeny >= $HoF_LadderZeny[@i]) {
200                goto L_ZenyOK;
201        } else {
202                goto L_Increment;
203        }
204
205L_NewEntry:
206        callfunc "hallOfFameNewEntry", @i, strcharinfo(0), BaseLevel, JobLevel, Zeny;
207        end;
208
209L_Increment:
210        if(@i == $HoF_totalCount-1) {
211                goto L_End;
212        } else {
213                set @i, @i + 1;
214                goto L_checkBase;
215        }
216
217L_End:
218        return;
219
220}
221
222
223function        script  hallOfFameNewEntry      {
224        if(getarg(0) == 0) goto L_New_Entry;
225        else if(getarg(1) != $HoF_LadderName$[getarg(0) - 1]) goto L_New_Entry;
226        return;
227
228L_New_Entry:
229                set @startPos, getarg(0);
230                copyarray @HoF_LadderNameB$[0], $HoF_LadderName$[@startPos], $HoF_totalCount;
231                copyarray @HoF_LadderBLevelB[0], $HoF_LadderBLevel[@startPos], $HoF_totalCount; 
232                copyarray @HoF_LadderJLevelB[0], $HoF_LadderJLevel[@startPos], $HoF_totalCount;
233                copyarray @HoF_LadderZenyB[0], $HoF_LadderZeny[@startPos], $HoF_totalCount; 
234                setarray $HoF_LadderName$[@startPos], getarg(1);
235                setarray $HoF_LadderBLevel[@startPos], getarg(2);
236                setarray $HoF_LadderJLevel[@startPos], getarg(3);
237                setarray $HoF_LadderZeny[@startPos], getarg(4);
238                set @startPos, @startPos + 1;
239                set @limitPos, $HoF_totalCount - @startPos;
240                copyarray $HoF_LadderName$[@startPos], @HoF_LadderNameB$[0], @limitPos;
241                copyarray $HoF_LadderBLevel[@startPos], @HoF_LadderBLevelB[0], @limitPos; 
242                copyarray $HoF_LadderJLevel[@startPos], @HoF_LadderJLevelB[0], @limitPos;
243                copyarray $HoF_LadderZeny[@startPos], @HoF_LadderZenyB[0], @limitPos;
244                announce "[Hall of Fame] " + getarg(1) + " has made his/herself onto the No. " + @startPos + " ranking in Hall of Fame!", bc_all;
245                return;
246}
247
248function        script  printHallOfFame {
249        if(getarg(0) == 1) {
250                mes "[Hall of Fame] - Last Week's Rankings";
251                for(set @loop, 0; @loop < $HoF_totalCount; set @loop, @loop + 1){
252                        mes "^ff0000";
253                        mes "Position No. " + (@loop + 1) + ":^0000ff";
254                        mes "+================================+";
255                        mes "^000000Name :" + $HoF_LadderNameO$[@loop];
256                        mes "BLvl :" + $HoF_LadderBLevelO[@loop];
257                        mes "JLvl :" + $HoF_LadderJLevelO[@loop];
258                        mes "Zeny :" + $HoF_LadderZenyO[@loop] + "^0000ff";
259                        mes "+================================+^000000";
260                }
261        } else {
262                mes "[Hall of Fame] - Current Rankings";
263                for(set @loop, 0; @loop < $HoF_totalCount; set @loop, @loop + 1){
264                        mes "^ff0000";
265                        mes "Position No. " + (@loop + 1) + ":^0000ff";
266                        mes "+================================+";
267                        mes "^000000Name :" + $HoF_LadderName$[@loop];
268                        mes "BLvl :" + $HoF_LadderBLevel[@loop];
269                        mes "JLvl :" + $HoF_LadderJLevel[@loop];
270                        mes "Zeny :" + $HoF_LadderZeny[@loop] + "^0000ff";
271                        mes "+================================+^000000";
272                }
273        }
274        return;
275}
276
277prontera,164,134,2      script  Jury    109,{
278        mes "[Jury]";
279        mes "Good day. Would you like to view the Hall of Fame?";
280        next;
281        menu "Yes",L_OK,"No",L_QUIT;
282
283L_OK:
284        mes "[Jury]";
285        mes "Would you like to view the current or the past rankings?";
286
287L_MENU:
288        next;
289        menu "Current", L_CUR, "Past", -,"Nevermind",L_QUIT;
290        callfunc "printHallOfFame",1;
291        goto L_MENU;
292
293L_CUR:
294        callfunc "printHallOfFame",0;
295        goto L_MENU;
296
297L_QUIT:
298        mes "[Jury]";
299        mes "Have a nice day then.";
300        close;
301       
302}
Note: See TracBrowser for help on using the browser.