//===== rAthena Script =======================================
// Ranking Script
//===== By: ==================================================
//= Masao
//===== Current Version: =====================================
//= 1.0
//===== Compatible With: =====================================
//= Any rAthena SVN
//===== Description: =========================================
//= An simple Ranker Script which lists PvP Kills & Deaths,
//= MvP kills and Emperium kills.
//=
//= Resets all the Rankings every Monday and on every Sunday
//= the Top Player of each Ranking List receives a Prize.
//===== Additional Comments: =================================
//= 1.0 First Version.
//============================================================
- script ranker_funcs -1,{
OnInit:
// Create Database Table:
query_sql "CREATE TABLE IF NOT EXISTS `ranker` (`char_id` int(11) unsigned NOT NULL default '0' PRIMARY KEY, `name` varchar(30) NOT NULL default '', `pvp_kills` smallint(4) unsigned NOT NULL default '0', `pvp_deaths` smallint(4) unsigned NOT NULL default '0', `emp_breaks` smallint(4) unsigned NOT NULL default '0', `mvp_kills` smallint(4) unsigned NOT NULL default '0')";
setarray .mvps[0],1511,1647,1785,1630,1039,1874,2068,1272,1719,1046,1389,1112,1115,1418,1871,1252,1768,1086,1885,1649,1651,1832,1492,1734,1251,1779,1688,2156,1646,1373,1147,1059,1150,2022,1087,1190,1038,1157,1159,2087,2165,1623,1650,1583,1708,1312,1751,1685,1648,1917,1658;
end;
OnPCDieEvent:
if(getgmlevel() < 40) {
getmapxy .@m$,.@x,.@y,0;
if(.@m$ == "rwc03" || .@m$ == "rwc02" || .@m$ == "guild_vs1-1" || .@m$ == "rwc01")
{
set @i,killerrid;
query_sql "SELECT `char_id` FROM `char` WHERE `account_id` = '"+@i+"'",@cid;
query_sql "SELECT `char_id` FROM `ranker` WHERE `char_id` = '"+@cid+"'",@cid2;
if(!@cid2)
{
query_sql "INSERT `ranker` (`char_id`,`name`,`pvp_kills`,`pvp_deaths`,`emp_breaks`,`mvp_kills`) VALUES ('"+@cid+"','"+escape_sql(strcharinfo(0))+"','0','0','0','0')";
}
query_sql "UPDATE `ranker` SET `pvp_kills` = `pvp_kills` + 1 WHERE `char_id` = '"+@cid+"'";
}
}
end;
OnPCKillEvent:
if(getgmlevel() < 40) {
getmapxy .@m$,.@x,.@y,0;
if(.@m$ == "rwc03" || .@m$ == "rwc02" || .@m$ == "guild_vs1-1" || .@m$ == "rwc01")
{
set @j,killedrid;
query_sql "SELECT `char_id` FROM `char` WHERE `account_id` = '"+@j+"'",@cid3;
query_sql "SELECT `char_id` FROM `ranker` WHERE `char_id` = '"+@cid3+"'",@cid4;
if(!@cid4)
{
query_sql "INSERT `ranker` (`char_id`,`name`,`pvp_kills`,`pvp_deaths`,`emp_breaks`,`mvp_kills`) VALUES ('"+@cid3+"','"+escape_sql(strcharinfo(0))+"','0','0','0','0')";
}
query_sql "UPDATE `ranker` SET `pvp_deaths` = `pvp_deaths` + 1 WHERE `char_id` = '"+@cid3+"'";
}
}
end;
OnNPCKillEvent:
if(getgmlevel() < 40) {
for(set.@i,0; .@i <= 51; set .@i,.@i+1)
{
if(.mvps[.@i] == killedrid)
{
query_sql "SELECT `char_id` FROM `ranker` WHERE `char_id` = '"+getcharid(0)+"'",@cid;
if(!@cid)
{
query_sql "INSERT `ranker` (`char_id`,`name`,`pvp_kills`,`pvp_deaths`,`emp_breaks`,`mvp_kills`) VALUES ('"+getcharid(0)+"','"+escape_sql(strcharinfo(0))+"','0','0','0','0')";
}
query_sql "UPDATE `ranker` SET `mvp_kills` = `mvp_kills` + 1 WHERE `char_id` = '"+getcharid(0)+"'";
}
}
}
end;
OnClock0001:
// Clear variables and Table every Monday:
if(gettime(4) == 1)
{
set $@pvpp,0;
set $@mvpp,0;
set $@empp,0;
query_sql "TRUNCATE TABLE `ranker`";
}
end;
}
prontera,164,174,4 script Ranker 859,{
set .@n$,"[Ranker]";
mes .@n$;
mes "Hello "+strcharinfo(0)+",";
mes "what can i do for you today?";
next;
menu "PvP Ranking",-,"MvP Ranking",L_M,"Emperium Ranking",L_E,"Collect Prize",L_CP,"Cancel",L_C;
mes .@n$;
mes "Would you like to see the Top 10 PvP Ranking or your personal Ranking?";
next;
menu "Top 10",-,"Your current PvP Kills / Deaths",L_PvPPP;
query_sql "SELECT `name`, `pvp_kills`, `pvp_deaths` FROM `ranker` ORDER BY `pvp_kills` DESC LIMIT 10",@name$,@pvp_kills,@pvp_deaths;
mes .@n$;
mes "Pos. Name | Kills | Deaths";
mes "1. "+@name$[0]+" | "+@pvp_kills[0]+" | "+@pvp_deaths[0]+"";
mes "2. "+@name$[1]+" | "+@pvp_kills[1]+" | "+@pvp_deaths[1]+"";
mes "3. "+@name$[2]+" | "+@pvp_kills[2]+" | "+@pvp_deaths[2]+"";
mes "4. "+@name$[3]+" | "+@pvp_kills[3]+" | "+@pvp_deaths[3]+"";
mes "5. "+@name$[4]+" | "+@pvp_kills[4]+" | "+@pvp_deaths[4]+"";
mes "6. "+@name$[5]+" | "+@pvp_kills[5]+" | "+@pvp_deaths[5]+"";
mes "7. "+@name$[6]+" | "+@pvp_kills[6]+" | "+@pvp_deaths[6]+"";
mes "8. "+@name$[7]+" | "+@pvp_kills[7]+" | "+@pvp_deaths[7]+"";
mes "9. "+@name$[8]+" | "+@pvp_kills[8]+" | "+@pvp_deaths[8]+"";
mes "10. "+@name$[9]+" | "+@pvp_kills[9]+" | "+@pvp_deaths[9]+"";
close;
L_PvPPP:
query_sql "SELECT `pvp_kills`, `pvp_deaths` FROM `ranker` WHERE `name` = '"+escape_sql(strcharinfo(0))+"'",@pvp_kills,@pvp_deaths;
if(!@pvp_kills && !@pvp_deaths)
{
mes .@n$;
mes "Sorry but you haven't killed any Players yet.";
close;
}
mes .@n$;
mes "Name | Kills | Deaths";
mes ""+strcharinfo(0)+" | "+@pvp_kills+" | "+@pvp_deaths+"";
close;
L_M:
mes .@n$;
mes "Would you like to see the Top 10 MvP Ranking or your personal Ranking?";
next;
menu "Top 10",-,"Your current MvP Kills",L_MvPPP;
query_sql "SELECT `name`, `mvp_kills` FROM `ranker` ORDER BY `mvp_kills` DESC LIMIT 10",@name$,@mvp_kills;
mes .@n$;
mes "Pos. Name | Kills";
mes "1. "+@name$[0]+" | "+@mvp_kills[0]+"";
mes "2. "+@name$[1]+" | "+@mvp_kills[1]+"";
mes "3. "+@name$[2]+" | "+@mvp_kills[2]+"";
mes "4. "+@name$[3]+" | "+@mvp_kills[3]+"";
mes "5. "+@name$[4]+" | "+@mvp_kills[4]+"";
mes "6. "+@name$[5]+" | "+@mvp_kills[5]+"";
mes "7. "+@name$[6]+" | "+@mvp_kills[6]+"";
mes "8. "+@name$[7]+" | "+@mvp_kills[7]+"";
mes "9. "+@name$[8]+" | "+@mvp_kills[8]+"";
mes "10. "+@name$[9]+" | "+@mvp_kills[9]+"";
close;
L_MvPPP:
query_sql "SELECT `mvp_kills` FROM `ranker` WHERE `name` = '"+escape_sql(strcharinfo(0))+"'",@mvp_kills;
if(!@mvp_kills)
{
mes .@n$;
mes "Sorry but you haven't killed any MvP's yet.";
close;
}
mes .@n$;
mes "Name | Kills";
mes ""+strcharinfo(0)+" | "+@mvp_kills+"";
close;
L_E:
mes .@n$;
mes "Would you like to see the Top 10 Empe Rranking or your personal Ranking?";
next;
menu "Top 10",-,"Your current Emp. Kills",L_EMPPP;
query_sql "SELECT `name`, `emp_breaks` FROM `ranker` ORDER BY `emp_breaks` DESC LIMIT 10",@name$,@emp_breaks;
mes .@n$;
mes "Pos. Name | Kills";
mes "1. "+@name$[0]+" | "+@emp_breaks[0]+"";
mes "2. "+@name$[1]+" | "+@emp_breaks[1]+"";
mes "3. "+@name$[2]+" | "+@emp_breaks[2]+"";
mes "4. "+@name$[3]+" | "+@emp_breaks[3]+"";
mes "5. "+@name$[4]+" | "+@emp_breaks[4]+"";
mes "6. "+@name$[5]+" | "+@emp_breaks[5]+"";
mes "7. "+@name$[6]+" | "+@emp_breaks[6]+"";
mes "8. "+@name$[7]+" | "+@emp_breaks[7]+"";
mes "9. "+@name$[8]+" | "+@emp_breaks[8]+"";
mes "10. "+@name$[9]+" | "+@emp_breaks[9]+"";
close;
L_EMPPP:
query_sql "SELECT `emp_breaks` FROM `ranker` WHERE `name` = '"+escape_sql(strcharinfo(0))+"'",@emp_breaks;
if(!@emp_breaks)
{
mes .@n$;
mes "Sorry but you haven't killed any Emperiums yet.";
close;
}
mes .@n$;
mes "Name | Kills";
mes ""+strcharinfo(0)+" | "+@emp_breaks+"";
close;
L_CP:
if(gettime(4) != 0)
{
mes .@n$;
mes "Sorry but the prizes can only be collected during Sundays.";
close;
}
query_sql "SELECT `name` FROM `ranker` ORDER BY `pvp_kills` DESC LIMIT 1",@name$;
query_sql "SELECT `name` FROM `ranker` ORDER BY `mvp_kills` DESC LIMIT 1",@name1$;
query_sql "SELECT `name` FROM `ranker` ORDER BY `emp_breaks` DESC LIMIT 1",@name2$;
if((strcharinfo(0) != @name$[0]) && (strcharinfo(0) != @name1$[0]) && (strcharinfo(0) != @name2$[0]))
{
mes .@n$;
mes "I'm sorry but you're not in the first Position of any Ranking!";
close;
}
if((strcharinfo(0) == @name$[0]) && ($@pvpp != 1))
{
mes .@n$;
mes "Congratulations!";
mes "You're this weeks Number 1 PvP Killer!";
mes "You've been rewarded with 500 Cashpoints.";
set #CASHPOINTS,#CASHPOINTS+500;
set $@pvpp,1;
close;
}
else if((strcharinfo(0) == @name1$[0]) && ($@mvpp != 1))
{
mes .@n$;
mes "Congratulations!";
mes "You're this weeks Number 1 MvP Killer!";
mes "Here is your Prize and have fun with it.";
getitem 12103,3; // Bloody Branch 3ea.
set $@mvpp,1;
close;
}
else if((strcharinfo(0) == @name2$[0]) && ($@empp != 1))
{
mes .@n$;
mes "Congratulations!";
mes "You're this weeks Number 1 Emp. Killer!";
mes "Here is your Prize and have fun with it.";
getitem 14288,2; // Guardian Stone Repairkit 2ea.
set $@empp,1;
close;
}
mes .@n$;
mes "I'm sorry but it seems like you've already collected your Prize this week.";
close;
L_C:
mes .@n$;
mes "Ok, bye.";
close;
}
function script ranker_woe {
if(getgmlevel() < 40) {
query_sql "SELECT `char_id` FROM `ranker` WHERE `char_id` = '"+getcharid(0)+"'",@cid;
if(!@cid)
{
query_sql "INSERT `ranker` (`char_id`,`name`,`pvp_kills`,`pvp_deaths`,`emp_breaks`,`mvp_kills`) VALUES ('"+getcharid(0)+"','"+escape_sql(strcharinfo(0))+"','0','0','0','0')";
}
query_sql "UPDATE `ranker` SET `emp_breaks` = `emp_breaks` + 1 WHERE `char_id` = '"+getcharid(0)+"'";
}
end;
}