//===== eAthena Script =======================================
//= eAthena PVP-Ladder
//===== By: ==================================================
//= Terces
//===== Current Version: =====================================
//= 1.7.2
//===== Compatible With: =====================================
//= Any Athena Version that has "for" implemented
//===== Credits: =============================================
//= The whole eAthena Board and the eAthena Chat
//===== Notes: ===============================================
//= Note 1:
//= Experience gain works like this formula:
//= ($@LadderLength-(<new position>-1))*$@LadderExp
//= so if someone gets the first place he'll get
//= $@LadderLength*$@LadderExp experience points.
//============================================================
//= Fixxed by Dante
//= V1.7.2
//= Hosted by Dant3 aka Dante
// HAFE FUN! READ THE TOPIC! IT DONT WORKS MAYBE ON OLDER REV
//
//
//  LAST UPDATE: 12th,February.2008
//
// Main Script Terces (Main Thanks to Terces ^_^)
// V1.7.0 Dant3
// v1.7.1 AnnieRuRu
// v1.7.2 Dant3

// THIS SCRIPT WORKS ONLY ON THE NEW EATHENA REVISIONS! ENJOY!

-	script	PVPLADDEROPTIONS	-1,{
end;
OnInit:
// 0 = Disabled (NO)
// 1 = Enable   (YES)
set $@languageselect, 0;	//Enable/Disable language selection [English/German] (Default: 1)
set $@LadderAnnounce, 0;	//Enable/Disable the announcement when a char reaches a new position in the ladder (Default: 1)

set $@LadderLength, 30;		//Set the length of the Ladder [!Not higher than 128!] (Default: 30)
set $@LadderSteps, 10;		//Set the views per page (Default: 10)

set $@LadderExpGain, 1;		//Enable/Disable experience gain when reaching a new position in the ladder (*Note1)
set $@LadderExp, 50;		//Set Experience gain value (*Note1)

// Update v1.7.0
set $@LadderZenyGain, 1;	//Enable/Disable zeny gain when reaching a new position in the ladder
set $@LadderZeny, 50;		//Set Zeny gain value 
set $@LadderChatRoom, 1;	//Enable/Disable an Chat Room over the NPC with the message "PVPܷԱ" (Users can not enter the Chat room) 

// Update v1.7.1 (Thanks to AnnieRuRu)
// Added GM PVPܷԱ Reset Function

// Update v1.7.2
// Thanks to for the Feedback
set $@LadderAskLogin, 1;	//Enable/Disable that the NPC asks about the Broadcast when a Player logins / or  with the Npc Chat (0 = Login Ask , 1 = Npc Chat) Related: 0
}

-	script	PVPLADDER	-1,{
OnPCKillEvent:
if (terces_PVP_resets != $terces_PVP_resets) {
	dispbottom "- µ½ˢPVPϢ";
	dispbottom "- ΪGMPVP";
	end;
}
if ( killedrid == getcharid(3) ) {
	set PVPDeaths, PVPDeaths +1;
	set #PVPDeathsAccount, #PVPDeathsAccount +1;
	set @PVPDeathstoday, @PVPDeathstoday +1;
	end;
}
set $@PVPcounter,$@PVPcounter+1;
set getd("$@PVPKill"+$@PVPcounter),getcharid(3);	//getd to avoid errors when more than 1 people kill someone
attachrid(killedrid);
set PVPDeaths,PVPDeaths+1;
set @PVPDeathstoday,@PVPDeathstoday+1;
set #PVPDeathsAccount,#PVPDeathsAccount+1;
set getd("$@PVPkilledplayer"+$@PVPcounter+"$"), strcharinfo(0);	//again, getd to avoid possible glitches
detachrid;

attachrid(getd("$@PVPKill"+$@PVPcounter));
CountKills:
	set PVPKills,PVPKills+1;
	set @PVPKillstoday,@PVPKillstoday+1;
	set #PVPKillsAccount,#PVPKillsAccount+1;
	setarray @playerstats[0],@PVPKillstoday,@PVPDeathstoday,PVPKills,PVPDeaths,#PVPKillsAccount,#PVPDeathsAccount;

l_ladder:
	set @considerdeath,0;
	for (set @PosinLadder, 0; @PosinLadder < $@LadderLength; set @PosinLadder, @PosinLadder + 1){
		if (PVPKills >= $terces_PVP_kills[@PosinLadder]){	//Player deserves to be in the ladder
			//Check if Death plays a role on the position
			if ((PVPKills == $terces_PVP_kills[@PosinLadder]) && (PVPDeaths > $terces_PVP_deaths[@PosinLadder])) set @considerdeath,1; //Consider Deaths
			//Check if the player only topped his own scores
			if ($terces_PVP_names$[@PosinLadder] == strcharinfo(0)){
				set $terces_PVP_kills[@PosinLadder],PVPKills;
				set $terces_PVP_deaths[@PosinLadder],PVPDeaths;
				end;
			}
			//Moves all characters in the Ladder
			for (set @beginmoving, $@LadderLength; @beginmoving >= (@PosinLadder+@considerdeath); set @beginmoving, @beginmoving - 1){
				if ($terces_PVP_names$[@beginmoving] == strcharinfo(0)){
					//If the player already is in the Ladder it only has to move players between characters new position and characters old position
					callsub L_LadderMove,0;
					end;
				}
				else if (@beginmoving == (@PosinLadder+@considerdeath)){
					//Player is not in the Ladder and therefor it has to move all players from characters new position downwards
					callsub L_LadderMove,1;
					end;
				}
			}
			end;
		}
	}


L_LadderMove:
	if (getarg(0) == 0) set @length,@beginmoving;
	if (getarg(0) == 1) set @length,$@LadderLength;
	for (set @movecycle, @length; @movecycle > (@PosinLadder+@considerdeath);
	 set @movecycle, @movecycle - 1){

		set $terces_PVP_names$[@movecycle],$terces_PVP_names$[(@movecycle-1)];
		set $terces_PVP_kills[@movecycle],$terces_PVP_kills[(@movecycle-1)];
		set $terces_PVP_deaths[@movecycle],$terces_PVP_deaths[(@movecycle-1)];
		set $terces_PVP_times[@movecycle],$terces_PVP_times[(@movecycle-1)];
	}
	//sets the character's stats in the new position
	set $terces_PVP_names$[(@PosinLadder+@considerdeath)],strcharinfo(0);
	set $terces_PVP_kills[(@PosinLadder+@considerdeath)],PVPKills;
	set $terces_PVP_deaths[(@PosinLadder+@considerdeath)],PVPDeaths;
	set $terces_PVP_times[(@PosinLadder+@considerdeath)],gettimetick(2);
	//Experience Gain
	if ($@LadderExpGain == 1){
		set BaseExp,BaseExp+(($@LadderLength-((@PosinLadder+@considerdeath)-1))*$@LadderExp);
		dispbottom "- ˾ֵΪ "+(($@LadderLength-((@PosinLadder+@considerdeath)-1))*$@LadderExp)+" BASEĽ";
	}
	//Zeny Gain
	if ($@LadderZenyGain == 1){
		set Zeny,Zeny+(($@LadderLength-((@PosinLadder+@considerdeath)-1))*$@LadderZeny);
		dispbottom "- zenyΪ "+(($@LadderLength-((@PosinLadder+@considerdeath)-1))*$@LadderZeny)+" Ľ";
	}


OnPCLoginEvent:
if (terces_PVP_resets != $terces_PVP_resets){
		set PVPDeaths,0;
		set @PVPDeathstoday,0;
		set #PVPDeathsAccount,0;
		set PVPKills,0;
		set @PVPKillstoday,0;
		set #PVPKillsAccount,0;
		set terces_PVP_resets,$terces_PVP_resets;
	}
if ($@LadderAskLogin == 0){
	if (#pvpbroadcast == 2) goto L_ignore;
	if (pvpbroadcast == 2) goto L_ignore;
	if (#pvpbroadcast == 1) goto L_ignore;
	if (pvpbroadcast == 1) goto L_ignore;

	if (pvpbroadcast == 0)
	mes "- , "+strcharinfo(0)+"";
	mes "- PVPԱ";
	mes "- ⣬Ҿͷ㣡";
	menu "- ",L_close,"- ðھʰ",L_fine;

	L_fine:
	next;
	mes "- ҪĶPVP㲥Ϣ?";
	menu "- ǵģҪ",L_accept,"- ˣлл",L_accept_2,"- ΪPVP㲥Ϣ",L_broadcast;

	L_accept:
	next;
	mes "- лл! ^_^";
	mes "- ѡҪPVPӦõ?";
	menu "- ʺЧ",L_account,"- Ч",L_char;

	L_account:
	set #pvpbroadcast,2;
	next;
	mes "- õ, "+strcharinfo(0)+"";
	mes "- ôͿ!";
	close;

	L_char:
	set pvpbroadcast,2;
	next;
	mes "- õ, "+strcharinfo(0)+"";
	mes "- ôͿ!";
	goto access_eng;
	close;
	
	L_accept_2:
	next;
	mes "- лл! ^_^";
	mes "- ѡҪPVPӦõ?";
	menu "- ʺЧ",L_account_2,"- Ч",L_char_2;

	L_close:
	close;

	L_account_2:
	set #pvpbroadcast,1;
	next;
	mes "- õ, "+strcharinfo(0)+"";
	mes "- ôͿ!";
	close;

	L_char_2:
	set pvpbroadcast,1;
	next;
	mes "- õ, "+strcharinfo(0)+"";
	mes "- ôͿ!";
	goto access_eng;
	close;


	L_broadcast:
	mes "- 㲥ϢǻɫGM壡";
	goto L_fine;
	}
}

prontera.gat,164,153,4	script	PVPܷԱ	123,{
if ($@LadderChatRoom == 1) {
// Look on the configuration!
}
	set @name$,"[- PVPܷԱ]";
	//Colour of:			Position	Name		Kills		Deaths		Time
	setarray @colour$[0],	"^996600",	"^006699",	"^00AA00",	"^FF0000",	"^EE8800";
if ($@LadderAskLogin == 1){
	if (#pvpbroadcast == 2) goto 	access_eng;
	if (pvpbroadcast == 2) goto 	access_eng;
	if (#pvpbroadcast == 1) goto 	access_eng;
	if (pvpbroadcast == 1) goto 	access_eng;
	if (pvpbroadcast == 0)
	mes "- , "+strcharinfo(0)+"";
	mes "- PVPԱ!";
	mes "- ⣬Ҿͷ㣡";
	menu "- ",L_close,"- ðھʰ",L_fine;

	L_fine:
	next;
	mes "- ҪĶPVP㲥Ϣ?";
	menu "- ǵģҪ",L_accept,"- ˣлл",L_accept_2,"- ΪPVP㲥Ϣ",L_broadcast;


	L_accept:
	next;
	mes "- лл! ^_^";
	mes "- ѡҪPVPӦõ?";
	menu "- ʺЧ",L_account,"- Ч",L_char;
	
	L_account:
	set #pvpbroadcast,2;
	next;
	mes "- õ, "+strcharinfo(0)+"";
	mes "- ôͿ!";
	close;

	L_char:
	set pvpbroadcast,2;
	next;
	mes "- õ, "+strcharinfo(0)+"";
	mes "- ôͿ!";
	goto access_eng;
	close;
	
	L_accept_2:
	next;
	mes "- лл! ^_^";
	mes "- ѡҪPVPӦõ?";
	menu "- ʺЧ",L_account_2,"- Ч",L_char_2;

	L_close:
	close;

	L_account_2:
	set #pvpbroadcast,1;
	next;
	mes "- õ, "+strcharinfo(0)+"";
	mes "- ôͿ!";
	close;

	L_char_2:
	set pvpbroadcast,1;
	next;
	mes "- õ, "+strcharinfo(0)+"";
	mes "- ôͿ!";
	goto access_eng;
	close;


	L_broadcast:
	mes "- 㲥ϢPVPɱɱ˵ʱ򣬻ʾʾ";
	goto L_fine;
}
	access_eng:
	mes @name$;
	mes "-  "+strcharinfo(0)+"...";
	mes "- PVPΪ [^0000FF " + getmapusers("pvp_y_1-2") + "^000000 ]";
	mes "- ҪעǣκγPVP붼PVPϢ½";
	mes "- Ҫ鿴Ļȴֻ鿴ม";
	mes "- ҪĻҿԸ㿴PVPϢ";
	mes "- ԸⳢԵĻҲԴȥPVPͼ";
	next;
	M_selection_eng:
	if ( getgmlevel () < 99 )
		menu "- ҪPVPɱ¾",Lnoe,"- ҿPVP",M_Ladder_eng,"- ε½ҵPVPϢ",M_seitLogin_eng,"- PVPϢ",M_dieserChar_eng,"- ʺŵPVPϢ",M_vomAccount_eng,"- ȡ",M_abbrechen_eng;
	else
		menu "- ҪPVPɱ¾",Lnoe,"- ҿPVP",M_Ladder_eng,"- ε½ҵPVPϢ",M_seitLogin_eng,"- PVPϢ",M_dieserChar_eng,"- ʺŵPVPϢ",M_vomAccount_eng,"- PVP",L_reset,"- ȡ",M_abbrechen_eng;

	Lnoe:	
		warp "pvp_y_1-2",0,0;	end;


	M_Ladder_eng:
	mes "- õģҽʾǰ "+ $@LadderLength +" λ ÿҳ "+$@LadderSteps+" ʾ";
	mes "- 㽫Ϣ:";
	mes @colour$[0]+"<>^000000: "+@colour$[1]+"<>^000000 :"+@colour$[2]+"<ɱ˴>^000000:"+@colour$[3]+"<ɱ>^000000 "+@colour$[4]+"<ɱ˵ʱ>";
	next;
	callsub L_Ladder;
	goto M_selection_eng;

	M_seitLogin_eng:
	mes @name$;
	mes "- ε½PVPϢ:";
	mes PVPKills+"/"+PVPDeaths+"(ɱ˴/)";
	next;
	goto M_selection_eng;

	M_dieserChar_eng:
	mes @name$;
	mes "- ܵPVPϢ:";
	mes #PVPKillsAccount+"/"+#PVPDeathsAccount+"(ɱ˴/)";
	next;
	goto M_selection_eng;

	M_vomAccount_eng:
	mes @name$;
	mes "- ʺܵPVPϢ:";
	mes #PVPKillsAccount+"/"+#PVPDeathsAccount+"(ɱ˴/)";
	next;
	goto M_selection_eng;

	M_abbrechen_eng:
	mes @name$;
	mes "- õģʱϢ";
	close;

L_reset:
	if (getgmlevel() < 99) end;
	mes "Do you want to reset the ladder?";
	if (select ("Yes","No") == 2) goto L_end;
	mes "Are you really really sure you want to reset it?";
	menu "Yes, ffs!!",-,"No",L_end;
	deletearray $terces_PVP_kills,128;
	deletearray $terces_PVP_deaths,128;
	deletearray $terces_PVP_names$,128;
	deletearray $terces_PVP_times,128;
	set $terces_PVP_resets,$terces_PVP_resets +1;

	L_end:
	mes "- õģݰݣ";
	close;
	
	L_Ladder:
	for (set @y,0; @y < $@LadderLength; set @y,@y+$@LadderSteps){
		for (set @x,@y; (@x < (@y+$@LadderSteps)) && (@x < ($@LadderLength)); set @x,@x+1){
			if ($terces_PVP_names$[@x] != ""){
				mes @colour$[0]+(@x+1)+"^000000: "+@colour$[1]+$terces_PVP_names$[@x]+"^000000 "+@colour$[2]+$terces_PVP_kills[@x]+"^000000:"+@colour$[3]+$terces_PVP_deaths[@x]+"^000000 ~ "+@colour$[4]+callfunc ("Gettime",$terces_PVP_times[@x])+"^000000";
			} else {
				mes "^DD0000"+(@x+1)+": ^006699None^000000 ";
			}
		}
		next;
	}
	return;
}


function	script	Gettime	{
if (getarg(0)==0) return;

set @difftimedays,(gettimetick(2) - getarg(0));
set @difftimehours,@difftimedays%86400;
set @difftimeminutes,@difftimehours%3600;
set @difftimeseconds,@difftimeminutes%60;

set @days,@difftimedays/86400;
set @hours,@difftimehours/3600;
set @minutes,@difftimeminutes/60;
set @seconds,@difftimeseconds;
set @result$,"";
if(@days != 0) set @result$,@result$+@days+" ";
if(@hours != 0) set @result$,@result$+@hours+"Сʱ ";
if(@minutes != 0) set @result$,@result$+@minutes+" ";
if(@seconds != 0) set @result$,@result$+@seconds+"";

return (@result$);
}