Skip to content

Commit

Permalink
MVP_RANK update
Browse files Browse the repository at this point in the history
  • Loading branch information
AnnieRuru committed Nov 21, 2020
1 parent fc95fb2 commit 94b9915
Show file tree
Hide file tree
Showing 2 changed files with 253 additions and 0 deletions.
117 changes: 117 additions & 0 deletions scripts/Games & Events/MVP Rank/Monthly MVP Rank 1.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
//===== Hercules Script ======================================
//= Monthly MVP Rank
//===== By: ==================================================
//= AnnieRuru
//===== Current Version: =====================================
//= 1.3
//===== Compatible With: =====================================
//= Hercules 2020-11-22
//===== Description: =========================================
//= MVP Ranking script, with sendmail the reward monthly
//===== Topic ================================================
//= http://herc.ws/board/topic/4552-mvp-ladder-script-enhancement/
//===== Additional Comments: =================================
//= remember to change the reward item at setarray .@reward
//============================================================

/*
CREATE TABLE `mvp_rank` {
`char_id` INT PRIMARY KEY,
`name` VARCHAR(23),
`kills` INT,
KEY(`kills`)
} ENGINE = InnoDB;

CREATE TABLE `mvp_rank_archive` (
`date` DATETIME,
`pos` TINYINT UNSIGNED,
`char_id` INT,
`name` VARCHAR(23),
`kills` INT,
PRIMARY KEY(`date`, `pos`)
) ENGINE = MyISAM;
*/

prontera,158,183,3 script MVP Ranking 1_F_MARIA,{
mes "[MVP Ranking]";
mes "Hello!";
mes "What are you doing here?";
next;
switch(select("Check rankings.", "My stats. ", "Previous Month ranking")) {
case 1:
mes "[MVP Ranking]";
mes "Rankings :->";
.@nb = query_sql("SELECT `name`, `kills` FROM `mvp_rank` ORDER BY `kills` DESC LIMIT 10", .@name$, .@kills);
if (!.@nb) {
mes "no entry";
close;
}
for (.@i = 0; .@i < .@nb; ++.@i)
mes (.@i +1)+". "+ .@name$[.@i] +" -> "+ .@kills[.@i] +" kills";
close;
case 2:
mes "[MVP Ranking]";
if (!query_sql("SELECT `kills`, 1+(SELECT COUNT(1) FROM `mvp_rank` t1 WHERE t1.`kills` > t2.`kills`) FROM `mvp_rank` t2 WHERE `char_id` = "+ getcharid(CHAR_ID_CHAR), .@kills, .@rank)) {
mes "You haven't kill MVP this month.";
close;
}
mes "You have killed "+ .@kills +" MVPs";
mes "Your Rank is No."+ .@rank;
close;
case 3:
mes "[MVP Ranking]";
mes "Last month ranking";
if (gettime(GETTIME_MONTH) > 10)
.@store_date$ = gettime(GETTIME_YEAR) +"-"+(gettime(GETTIME_MONTH) -1)+"-00 00:00:00";
else if (gettime(GETTIME_MONTH) > 1)
.@store_date$ = gettime(GETTIME_YEAR) +"-0"+(gettime(GETTIME_MONTH) -1)+"-00 00:00:00";
else
.@store_date$ = (gettime(GETTIME_YEAR) -1) +"-12-00 00:00:00";
.@nb = query_sql( "SELECT `name`, `kills` FROM `mvp_rank_archive` WHERE `date` = '"+ .@store_date$ +"' ORDER BY `pos`", .@name$, .@kills);
if (!.@nb) {
mes "no entry";
close;
}
for (.@i = 0; .@i < .@nb; ++.@i)
mes (.@i +1)+". "+ .@name$[.@i] +" -> "+ .@kills[.@i] +" kills";
close;
}
close;
OnInit:
if (!$mvp_ladder_last_given) {
$mvp_ladder_last_given = atoi(gettime(GETTIME_YEAR) +""+ gettime(GETTIME_MONTH));
end;
}
else if ($mvp_ladder_last_given != atoi(gettime(GETTIME_YEAR) +""+ gettime(GETTIME_MONTH)))
goto L_give;
end;
OnClock0000:
if (gettime(GETTIME_DAYOFMONTH) != 1) end;
L_give:
// query_sql "TRUNCATE TABLE `mvp_rank_archive`"; // uncomment this line if you love to periodically clean your data
$mvp_ladder_last_given = atoi(gettime(GETTIME_YEAR) +""+ gettime(GETTIME_MONTH));
.@nb = query_sql("SELECT `char_id`, `name`, `kills` FROM `mvp_rank` ORDER BY `kills` DESC LIMIT 10", .@cid, .@name$, .@kills);
if (!.@nb) end;
setarray .@reward, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510;
setarray .@amount, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1;
for (.@i = 0; .@i < .@nb; ++.@i)
rodex_sendmail .@cid[.@i], "[MVP Rank]", "MVP Rank Monthly Reward", "Congratulations for earning No. "+(.@i +1)+" position in MVP rank. Here is your reward.", 0, .@reward[.@i], .@amount[.@i];
if (gettime(GETTIME_MONTH) > 10)
.@store_date$ = gettime(GETTIME_YEAR) +"-"+(gettime(GETTIME_MONTH) -1)+"-00 00:00:00";
else if (gettime(GETTIME_MONTH) > 1)
.@store_date$ = gettime(GETTIME_YEAR) +"-0"+(gettime(GETTIME_MONTH) -1)+"-00 00:00:00";
else
.@store_date$ = (gettime(GETTIME_YEAR) -1) +"-12-00 00:00:00";
for (.@i = 0; .@i < .@nb; ++.@i)
.@store$[.@i] = "('"+ .@store_date$ +"', "+(.@i +1)+", "+ .@cid[.@i] +", '"+ escape_sql(.@name$[.@i]) +"', "+ .@kills[.@i] +")";
query_sql "INSERT INTO `mvp_rank_archive` VALUES "+ implode(.@store$, ",");
query_sql "TRUNCATE `mvp_rank`";
end;
OnNPCKillEvent:
if (getmonsterinfo(killedrid, MOB_MVPEXP)) {
query_sql "INSERT INTO `mvp_rank` VALUES ("+ getcharid(CHAR_ID_CHAR) +", '"+ escape_sql(strcharinfo(PC_NAME)) +"', 1) ON DUPLICATE KEY UPDATE `name` = '"+ escape_sql(strcharinfo(PC_NAME)) +"', `kills` = `kills` +1";
query_sql "SELECT `kills` FROM `mvp_rank` WHERE `char_id` = "+ getcharid(CHAR_ID_CHAR), .@kills;
dispbottom "~ You've killed "+ .@kills +" MVP. ~";
}
end;
}
136 changes: 136 additions & 0 deletions scripts/Games & Events/MVP Rank/Weekly_MVP_Reward_1.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
//===== Hercules Script ======================================
//= Weekly MVP Rank
//===== By: ==================================================
//= AnnieRuru
//===== Current Version: =====================================
//= 1.2
//===== Compatible With: =====================================
//= Hercules 2020-11-21
//===== Description: =========================================
//= MVP Ranking script, player has to come and claim the reward
//===== Topic ================================================
//=
//===== Additional Comments: =================================
//= remember to change the reward item at setarray .@reward
//============================================================

/*
CREATE TABLE `mvp_rank` (
`char_id` INT PRIMARY KEY,
`name` VARCHAR(23),
`kills` INT,
KEY (`kills`)
) ENGINE = InnoDB;

CREATE TABLE `mvp_rank_archive` (
`weekindex` INT,
`rank` TINYINT UNSIGNED,
`char_id` INT,
`name` VARCHAR(23),
`kills` INT,
KEY (`weekindex`)
) ENGINE = MyISAM;

CREATE TABLE `mvp_rank_reward` (
`char_id` INT,
`weekindex` INT,
`rank` TINYINT UNSIGNED,
KEY (`char_id`)
) ENGINE = InnoDB;
*/

prontera,158,183,3 script MVP Ladder 1_F_MARIA,{
mes "[MVP Ladder]";
mes "Hello!";
mes "What are you doing here?";
next;
switch(select("Check rankings.", "My stats.", "Previous Week ranking", "Claim Rewards")) {
mes "[MVP Ladder]";
case 1:
mes "Rankings :->";
.@query$ = "SELECT `name`, IF(@d=t.`kills`, @r, @r:=@i), @d:=t.`kills`, @i:=@i+1 ";
.@query$ += "FROM `mvp_rank` t, (SELECT @d:=0, @r:=0, @i:=1)q ";
.@query$ += "ORDER BY `kills` DESC LIMIT 10";
.@nb = query_sql(.@query$, .@name$, .@rank, .@kills, .@dummy);
if (!.@nb) {
mes " No entry.";
close;
}
for (.@i = 0; .@i < .@nb; ++.@i)
mes .@rank[.@i] +". "+ .@name$[.@i] +" -> "+ .@kills[.@i] +" points";
close;
case 2:
if (!query_sql("SELECT `kills`, 1+(SELECT COUNT(1) FROM `mvp_rank` t1 WHERE t1.`kills` > t2.`kills`) FROM `mvp_rank` t2 WHERE `char_id` = "+ getcharid(CHAR_ID_CHAR), .@kills, .@rank)) {
mes "You haven't kill MVP this week";
close;
}
mes "You have killed "+ .@kills +" MVPs";
mes "Your current rank is No."+ .@rank;
close;
case 3:
mes "Previous week ranking :->";
.@nb = query_sql( "SELECT `rank`, `name`, `kills` FROM `mvp_rank_archive` WHERE `weekindex` = "+(.this_week_index -1)+" ORDER BY `rank`", .@rank, .@name$, .@kills);
if (!.@nb) {
mes " No entry";
close;
}
for ( .@i = 0; .@i < .@nb; ++.@i )
mes .@rank[.@i] +". "+ .@name$[.@i] +" -> "+ .@kills[.@i] +" points";
close;
case 4:
.@nb = query_sql("SELECT `weekindex`, `rank` FROM `mvp_rank_reward` WHERE `char_id` = "+ getcharid(CHAR_ID_CHAR), .@week, .@rank);
if (!.@nb) {
mes "You don't have unclaim rewards.";
close;
}
mes "You have ["+ .@nb +"] unclaimed rewards.";
for (.@i = 0; .@i < .@nb; ++.@i)
mes (.@i +1) +". Rank."+ .@rank[.@i] +" from "+(.this_week_index - .@week[.@i])+" weeks ago.";
next;
for (.@i = 0; .@i < .@nb; ++.@i)
.@menu$[.@i] = "Claim Rank."+ .@rank[.@i] +" from "+(.this_week_index - .@week[.@i])+" weeks ago.";
.@s = select(implode(.@menu$, ":")) -1;
if (checkweight(.reward[.@rank[.@s] -1], .amount[.@rank[.@s] -1]) == false) {
mes "You are currently overweight, store some items to continue.";
close;
}
getitem .reward[.@rank[.@s] -1], .amount[.@rank[.@s] -1];
query_sql "DELETE FROM `mvp_rank_reward` WHERE `char_id` = "+ getcharid(CHAR_ID_CHAR) +" AND `weekindex` = "+ .@week[.@s] +" AND `rank` = "+ .@rank[.@s];
}
close;
OnInit:
// set reward here ... 1st place won 10 red pot, 2nd place won 9 orange pot ... etc ...
setarray .reward, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510;
setarray .amount, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1;

if (!$mvp_rank_1st_sunday) {
query_sql "SELECT REPLACE(SUBDATE(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) -1) DAY), '-', '')", $mvp_rank_1st_sunday; // TRICK !! how to save the 1st sunday once the script installed
end;
}
OnSun0000:
query_sql "SELECT DATEDIFF(CURDATE(), '"+ $mvp_rank_1st_sunday +"') /7", .this_week_index;
if (.this_week_index == $mvp_rank_week_index) end;
// query_sql "TRUNCATE TABLE `mvp_rank_archive`"; // uncomment this line if you love to periodically clean your data
.@query$ = "SELECT char_id, `name`, IF(@d=t.`kills`, @r, @r:=@i), @d:=t.`kills`, @i:=@i+1 ";
.@query$ += "FROM `mvp_rank` t, (SELECT @d:=0, @r:=0, @i:=1)q ";
.@query$ += "ORDER BY `kills` DESC LIMIT 10";
.@nb = query_sql(.@query$, .@cid, .@name$, .@rank, .@kills, .@dummy);
if (.@nb) {
for (.@i = 0; .@i < .@nb; ++.@i) {
.@reward_query$[.@i] = "("+ .@cid[.@i] +", "+ $mvp_rank_week_index +", "+ .@rank[.@i] +")";
.@archive_query$[.@i] = "("+ $mvp_rank_week_index +", "+ .@rank[.@i] +", "+ .@cid[.@i] +", '"+ escape_sql(.@name$[.@i]) +"', "+ .@kills[.@i] +")";
}
query_sql "INSERT INTO `mvp_rank_reward` VALUES "+ implode(.@reward_query$, ", ");
query_sql "INSERT INTO `mvp_rank_archive` VALUES "+ implode(.@archive_query$, ", ");
query_sql "TRUNCATE TABLE `mvp_rank`";
}
$mvp_rank_week_index = .this_week_index;
end;
OnNPCKillEvent:
if (getmonsterinfo(killedrid, MOB_MVPEXP)) {
query_sql "INSERT INTO `mvp_rank` VALUES ("+ getcharid(CHAR_ID_CHAR) +", '"+ escape_sql(strcharinfo(PC_NAME)) +"', 1) ON DUPLICATE KEY UPDATE `name` = '"+ escape_sql(strcharinfo(PC_NAME))+"', kills = kills +1";
query_sql "SELECT `kills` FROM `mvp_rank` WHERE `char_id` = "+ getcharid(CHAR_ID_CHAR), .@kills;
dispbottom "~ You've killed "+ .@kills +" MVP. ~";
}
end;
}

0 comments on commit 94b9915

Please sign in to comment.