123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- //===== eAthena Script ======================================
- //= Hall of Fame
- //===========================================================
- //===== By ==================================================
- //= [Lance]
- //= Idea from emilylee78
- //===== Version =============================================
- //= 2.4 FINAL
- //===== Compatible With =====================================
- //= eAthena SVN and Freya SVN
- //===== Description =========================================
- //= A Hall of Fame framework. Will update the list on every
- //= login and logout in a safe manner.
- //=
- //= Usage: callfunc "printHallOfFame", $;
- //= $ - Can be either 0 or 1.
- //= 0 - Display the current rankings.
- //= 1 - Display last week's rankings.
- //= Note : Remember to put a close; after calling it.
- //===== Comments ============================================
- //= 1.0 - Initial beta release [Lance]
- //= 1.1 - Fixed typos. Optimized a teeny bit. [Lance]
- //= 1.2 - Bug fixes. [Lance]
- //= 1.3 - Added a more realistic shuffling. [Lance]
- //= 1.4 - Added Weekly Top 10 list. [Lance]
- //= 1.5 - Friggin typos =< + Better shuffling [Lance]
- //= 1.6 - Bugfixes [Lance]
- //= 1.7 - More bugfixes. Type mismatch =P [Lance]
- //= 2.0 - Exclude GMs and add recovery plan.
- //= Suggested by EvilPoringOfDooom. [Lance]
- //= 2.1 - Typo.. again.. T_T [Lance]
- //= 2.2 - Minor updates and added Jury [Lance]
- //= 2.3 - Utilizing eAthena's new scripting engine [Lance]
- //= 2.4 - Minor bug fix with event script label (bugport:722) [Samura22]
- //===========================================================
- prontera,0,0,0 script OnPCLoginEvent -1,{
- OnPCLoginEvent:
- callfunc "HallOfFameInit";
- end;
- OnInit:
- // Total Number of Players in Hall of Fame
- // =======================================
- set $HoF_totalCount, 10;
- // Reshuffle (Will affect perfomance) ====
- set $HoF_reshuffle, 1;
- // Minimum GM Lvl to be excluded from HoF=
- set $HoF_minGMLvl, 99;
- // Recovery Plan to Remove GMs ============
- set $@HoF_recovery, 0;
- // =======================================
- set $HoF_totalCount, $HoF_totalCount - 1;
- set $@FebruaryD, 28;
- if((gettime(7) % 4) == 0) {
- set $@FebruaryD, 29;
- }
- setarray $@MonthDayThing[1],31, $@FebruaryD,31,30,31,30,31,31,30,31,30,31;
- set $@HoF_TimeUpdateD, $HoF_LastUpdateD;
- set $@HoF_TimeUpdateM, $HoF_LastUpdateM;
- set $@HoF_TimeUpdateY, $HoF_LastUpdateY;
- // Time to do some maths
- set $@TimeNowD, gettime(5);
- set $@TimeNowM, gettime(6);
- set $@TimeNowY, gettime(7);
- // Debug Message --
- debugmes "[Hall of Fame] Last Update is Year " + $@HoF_TimeUpdateY + " Month " + $@HoF_TimeUpdateM + " Day " + $@HoF_TimeUpdateD;
- debugmes "[Hall of Fame] Today is Year " + $@TimeNowY + " Month " + $@TimeNowM + " Day " + $@TimeNowD;
- if(($@TimeNowD - $@HoF_TimeUpdateD) < 0){
- set $@TimeNowD, $@TimeNowD + $@MonthDayThing[$@TimeNowM];
- set $@TimeNowM, $@TimeNowM - 1;
- }
- set $@GapD, $@TimeNowD - $@HoF_TimeUpdateD;
- if(($@TimeNowM - $@HoF_TimeUpdateM) < 0){
- set $@TimeNowM, $@TimeNowM + 12;
- set $@TimeNowY, $@TimeNowY - 1;
- }
- set $@GapM, $@TimeNowM - $@HoF_TimeUpdateM;
- set $@GapY, $@TimeNowY - $@HoF_TimeUpdateY;
- debugmes "[Hall of Fame] Gap is " + $@GapY + " Years " + $@GapM + " Months " + $@GapD + " Days.";
- if($@GapY > 0 || $@GapM > 0 || $@GapD >= 7) {
- callfunc "hallOfFameReset"; // Phew..
- }
- end;
- OnClock0000:
- set $HoF_UpdateCount, $HoF_UpdateCount + 1;
- if($HoF_UpdateCount == 7) {
- callfunc "hallOfFameReset";
- }
- end;
- }
- prontera,0,0,0 script PCLogoutEvent -1,{
- OnPCLogoutEvent:
- callfunc "HallOfFameInit";
- end;
- }
- function script hallOfFameReset {
- copyarray $HoF_LadderNameO$[0], $HoF_LadderName$[0], $HoF_totalCount;
- copyarray $HoF_LadderBLevelO[0], $HoF_LadderBLevel[0], $HoF_totalCount;
- copyarray $HoF_LadderJLevelO[0], $HoF_LadderJLevel[0], $HoF_totalCount;
- copyarray $HoF_LadderZenyO[0], $HoF_LadderZeny[0], $HoF_totalCount;
- set $@number, $HoF_totalCount + 1;
- deletearray $HoF_LadderName$[0], $@number;
- deletearray $HoF_LadderBLevel[0], $@number;
- deletearray $HoF_LadderJLevel[0], $@number;
- deletearray $HoF_LadderZeny[0], $@number;
- set $HoF_LastUpdateD, gettime(5);
- set $HoF_LastUpdateM, gettime(6);
- set $HoF_LastUpdateY, gettime(7);
- set $HoF_UpdateCount, 0;
- debugmes "[Hall of Fame] System Reset Invoked!";
- return;
- }
- function script HallOfFameInit {
- if(getgmlevel() >= $HoF_minGMLvl && $@HoF_recovery != 1) {
- set PCLogoutEvent, 0;
- } else {
- set PCLogoutEvent, 1;
- callfunc "updateHallofFame", $HoF_reshuffle;
- }
- return;
- }
- function script updateHallofFame {
- set @i, 0;
- if(getarg(0) == 1){
- goto L_ShuffleName;
- }
- if(BaseLevel >= $HoF_LadderBLevel[$HoF_totalCount]){
- goto L_checkBase;
- }
- goto L_End;
- L_ShuffleName:
- if($HoF_LadderName$[@i] == strcharinfo(0)) {
- goto L_ShuffleScore;
- }
- if(@i == $HoF_totalCount) {
- goto L_checkEntry;
- }
- set @i, @i + 1;
- goto L_ShuffleName;
- L_ShuffleScore:
- deletearray $HoF_LadderName$[@i],1;
- deletearray $HoF_LadderZeny[@i],1;
- deletearray $HoF_LadderJLevel[@i],1;
- deletearray $HoF_LadderBLevel[@i],1;
- goto L_ShuffleName;
- L_checkEntry:
- if(getgmlevel() >= $HoF_minGMLvl){
- end;
- }
- set @i, 0;
- goto L_checkBase;
- L_checkBase:
- if(BaseLevel >= $HoF_LadderBLevel[@i]) {
- goto L_BaseOK;
- } else {
- goto L_Increment;
- }
- L_BaseOK:
- if(BaseLevel == $HoF_LadderBLevel[@i]){
- goto L_BaseSameLoop;
- } else {
- goto L_NewEntry;
- }
- L_BaseSameLoop:
- if(JobLevel >= $HoF_LadderJLevel[@i]) {
- goto L_JobOK;
- } else if(Zeny >= $HoF_LadderZeny[@i]) {
- goto L_ZenyOK;
- }
- goto L_Increment;
- L_JobOK:
- if(JobLevel == $HoF_LadderJLevel[@i]) {
- goto L_JobSame;
- } else {
- goto L_NewEntry;
- }
- L_ZenyOK:
- if(Zeny == $HoF_LadderZeny[@i]){
- goto L_Increment;
- } else {
- goto L_NewEntry;
- }
- L_JobSame:
- if(Zeny >= $HoF_LadderZeny[@i]) {
- goto L_ZenyOK;
- } else {
- goto L_Increment;
- }
- L_NewEntry:
- callfunc "hallOfFameNewEntry", @i, strcharinfo(0), BaseLevel, JobLevel, Zeny;
- end;
- L_Increment:
- if(@i == $HoF_totalCount) {
- goto L_End;
- } else {
- set @i, @i + 1;
- goto L_checkBase;
- }
- L_End:
- return;
- }
- function script hallOfFameNewEntry {
- if(getarg(0) == 0) goto L_New_Entry;
- else if(getarg(1) != $HoF_LadderName$[getarg(0) - 1]) goto L_New_Entry;
- return;
- L_New_Entry:
- set @startPos, getarg(0);
- copyarray @HoF_LadderNameB$[0], $HoF_LadderName$[@startPos], $HoF_totalCount;
- copyarray @HoF_LadderBLevelB[0], $HoF_LadderBLevel[@startPos], $HoF_totalCount;
- copyarray @HoF_LadderJLevelB[0], $HoF_LadderJLevel[@startPos], $HoF_totalCount;
- copyarray @HoF_LadderZenyB[0], $HoF_LadderZeny[@startPos], $HoF_totalCount;
- setarray $HoF_LadderName$[@startPos], getarg(1);
- setarray $HoF_LadderBLevel[@startPos], getarg(2);
- setarray $HoF_LadderJLevel[@startPos], getarg(3);
- setarray $HoF_LadderZeny[@startPos], getarg(4);
- set @startPos, @startPos + 1;
- set @limitPos, $HoF_totalCount - @startPos + 1;
- copyarray $HoF_LadderName$[@startPos], @HoF_LadderNameB$[0], @limitPos;
- copyarray $HoF_LadderBLevel[@startPos], @HoF_LadderBLevelB[0], @limitPos;
- copyarray $HoF_LadderJLevel[@startPos], @HoF_LadderJLevelB[0], @limitPos;
- copyarray $HoF_LadderZeny[@startPos], @HoF_LadderZenyB[0], @limitPos;
- announce "[Hall of Fame] " + getarg(1) + " has made his/herself onto the No. " + @startPos + " ranking in Hall of Fame!", bc_all;
- return;
- }
- function script printHallOfFame {
- if(getarg(0) == 1) {
- mes "[Hall of Fame] - Last Week's Rankings";
- for(set @loop, 0; @loop <= $HoF_totalCount; set @loop, @loop + 1){
- mes "^ff0000";
- mes "Position No. " + (@loop + 1) + ":^0000ff";
- mes "+================================+";
- mes "^000000Name :" + $HoF_LadderNameO$[@loop];
- mes "BLvl :" + $HoF_LadderBLevelO[@loop];
- mes "JLvl :" + $HoF_LadderJLevelO[@loop];
- mes "Zeny :" + $HoF_LadderZenyO[@loop] + "^0000ff";
- mes "+================================+^000000";
- }
- } else {
- mes "[Hall of Fame] - Current Rankings";
- for(set @loop, 0; @loop <= $HoF_totalCount; set @loop, @loop + 1){
- mes "^ff0000";
- mes "Position No. " + (@loop + 1) + ":^0000ff";
- mes "+================================+";
- mes "^000000Name :" + $HoF_LadderName$[@loop];
- mes "BLvl :" + $HoF_LadderBLevel[@loop];
- mes "JLvl :" + $HoF_LadderJLevel[@loop];
- mes "Zeny :" + $HoF_LadderZeny[@loop] + "^0000ff";
- mes "+================================+^000000";
- }
- }
- return;
- }
- prontera,164,134,2 script Jury 109,{
- mes "[Jury]";
- mes "Good day. Would you like to view the Hall of Fame?";
- next;
- menu "Yes",L_OK,"No",L_QUIT;
- L_OK:
- mes "[Jury]";
- mes "Would you like to view the current or the past rankings?";
- L_MENU:
- next;
- menu "Current", L_CUR, "Past", -,"Nevermind",L_QUIT;
- callfunc "printHallOfFame",1;
- goto L_MENU;
- L_CUR:
- callfunc "printHallOfFame",0;
- goto L_MENU;
- L_QUIT:
- mes "[Jury]";
- mes "Have a nice day then.";
- close;
-
- }
|