Jump to content
  • 0

Hello! Please help how to edit this MVP Ranker script


playniks

Question


  • Group:  Members
  • Topic Count:  12
  • Topics Per Day:  0.03
  • Content Count:  45
  • Reputation:   2
  • Joined:  02/23/23
  • Last Seen:  

Hi, this is the first time me posting, I just hope I am on the right path.
Anyways, can anyone help edit this script

1st. that could only announce mob being killed on mvp maps, 

2nd.  register ranking that are killed only in mvp maps as well? 

3rd and lastly broadcast rare drops (1%)

Thank you guys!

Quote

 //====== rAthena Script ======================================================
//= MVP ladder script
//===== By: ==================================================================
//= Rokimoki but edited and adapted from AnnieRuru PVP Ladder
//= https://herc.ws/board/topic/18871-dota-pvp-ladder/
//= Mark Script fixed and adapted some small things
//===== Current Version: =====================================================
//= 2.1
//===== Compatible With: =====================================================
//= rAthena 2020-10-20, with MySQL 8.0
//===== Description: =========================================================
//= MVP ladder store in SQL table
//= Requested by DevThor
//===== Additional Comments: =================================================
//= 1.0 initial version
//= 2.0 added total kill count and fixed some sql bugs
//= 2.1 fixed sql sorting rank
//============================================================================

/*
CREATE TABLE `mvpladder` (
	`id` int(11) NOT NULL AUTO_INCREMENT,
	`char_id` int(11) unsigned NOT NULL default '0',
	`mob_id` INT NOT NULL,
	`kills` INT DEFAULT 0,
  	PRIMARY KEY (`id`),
	INDEX (`char_id`),
	INDEX (`mob_id`),
	INDEX (`kills`)
) ENGINE=MyISAM AUTO_INCREMENT=1;
*/

//---- MvP Ladder Logic Script

-    script    MVPLadder    -1,{

OnInit:
// Config
    .map_killannounce = 1; // announce when MVP is dead on the map where the MVP was killed : 0 - off, 1 - on
    .killannounce = 1; // announce when MVP is dead globally : 0 - off, 1 - on
    .gmnokill = 0; // GMs are not suppose to kill MVP. A GM with <this number> level or higher will do nothing. IF set to 60, GM60 and above kill any player will not get anything : 0 - off

//    .min_gm_menu = 90; // minimum level of GM can use the GM menu on ladder npc

    .showtotal = 20; // show the length of ladder.
    .showpage = 10;    // set the views per page.

    .showstatue = 5; // number of statues. This number must match with the number of duplicates at the end of the script
    .fix_custom_sprite = false; // if your server has custom animated sprite that overlaps the sprite animation repeatedly on the statues, enable this

// Config ends ------------------------------------------------------------------------------------------

//    to prevent bug happen
    if (.gmnokill <= 0) .gmnokill = 100;

    sleep 1;
    
OnTimer1000: // refresh statues every 30 seconds. Note the `char` table is unrealiable, player still need to perform certain task to save the character -> see 'save_settings' in conf\map-server.conf
    .@query$ = "SELECT `char`.`char_id`, `char`.`name`, `char`.`guild_id`, `char`.`class`, "
             + "`char`.`sex`, `char`.`hair`, `char`.`hair_color`, `char`.`clothes_color`, "
             + "`char`.`body`, `char`.`head_top`, `char`.`head_mid`, `char`.`head_bottom`, `char`.`robe`, "
             + "SUM(`mvpladder`.`kills`) as `orderKills` "
             + "FROM `char` RIGHT JOIN `mvpladder` ON `char`.`char_id` = `mvpladder`.`char_id` GROUP BY `char`.`char_id` ORDER BY `orderKills` DESC LIMIT " + .showstatue;
    .@nb = query_sql(.@query$, .@cid, .@name$, .@guild_id, .@class, .@sex$, .@hair, .@hair_color, .@clothes_color, .@body, .@head_top, .@head_mid, .@head_bottom, .@robe, .@kills);
    if (.fix_custom_sprite) {
        for (.@i = 0; .@i < .@nb; ++.@i) {
            setunitdata .statue[.@i +1], UNPC_HEADTOP, 0;
            setunitdata .statue[.@i +1], UNPC_HEADMIDDLE, 0;
            setunitdata .statue[.@i +1], UNPC_HEADBOTTOM, 0;
            setunitdata .statue[.@i +1], UNPC_ROBE, 0;
        }
    }
    for (.@i = 0; .@i < .@nb; ++.@i) {
        setunitdata .statue[.@i +1], UNPC_CLASS, .@class[.@i];
        setunitdata .statue[.@i +1], UNPC_SEX, (.@sex$[.@i] == "F")? SEX_FEMALE:SEX_MALE;
        setunitdata .statue[.@i +1], UNPC_HAIRSTYLE, .@hair[.@i];
        setunitdata .statue[.@i +1], UNPC_HAIRCOLOR, .@hair_color[.@i];
        setunitdata .statue[.@i +1], UNPC_CLOTHCOLOR, .@clothes_color[.@i];
        setunitdata .statue[.@i +1], UNPC_BODY2, .@body[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADTOP, .@head_top[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADMIDDLE, .@head_mid[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADBOTTOM, .@head_bottom[.@i];
        setunitdata .statue[.@i +1], UNPC_ROBE, .@robe[.@i];
        setnpcdisplay "mvp_ladder_statue#"+(.@i +1), .@name$[.@i];
        .statue_name$[.@i +1] = .@name$[.@i];
        .statue_guild$[.@i +1] = getguildname(.@guild_id[.@i]);
        .statue_kills[.@i +1] = .@kills[.@i];
    }
    for (.@i = .@nb; .@i < .showstatue; ++.@i)
        setunitdata .statue[.@i +1], UNPC_CLASS, HIDDEN_WARP_NPC;
    initnpctimer;
    end;

OnNPCKillEvent: // Logic to detect when a MvP is killed
    if (getmonsterinfo(killedrid, MOB_MVPEXP) > 0){
        .@selectIfKillExistQuery$ = "SELECT char_id, mob_id, kills FROM mvpladder WHERE char_id = '" + getcharid(0) + "' AND mob_id = '" + killedrid + "';";
        if (query_sql(.@selectIfKillExistQuery$) > 0) { // Exist a kill of that MVP so +1 to kill count
            .@updateLadderQuery$ = "UPDATE mvpladder SET kills = kills + 1 WHERE char_id = '" + getcharid(0) + "' AND mob_id = '" + killedrid + "'";
        } 
        else { // Create a new kill of specific MVP
            //.@updateLadderQuery$ = "INSERT INTO mvpladder (char_id, mob_id, kills) VALUES ('" + getcharid(0) + "','" + killedrid + "','1');";
            .@updateLadderQuery$ = "INSERT INTO mvpladder (`char_id` , `mob_id` , `kills`) VALUES ('" + getcharid(0) + "','" + killedrid + "','1');";
        }
        query_sql(.@updateLadderQuery$);
    }
    if ( getmonsterinfo(killedrid,MOB_MVPEXP) && (getgmlevel() < 99) )
        announce strcharinfo(0)+" has defeated "+getmonsterinfo(killedrid,0)+" at "+strcharinfo(3),0,0xFF0101;

end;
}
//---- MvP Ladder Info NPC

skycity,137,241,5    script    MVP Ladder    120,{
    .@npcname$ = strnpcinfo(0);
    while (1) {
        mes "["+ .@npcname$ +"]";
        mes "Hello "+ strcharinfo(0) +"...";
        mes "If you want to I can show you your MVP stats.";
        next;
        switch (select("Most MVP killer list","Most MVP killed list","Own Information")) {
        mes "["+ .@npcname$ +"]";
        case 1:
            .@queryKillerList$ = "SELECT t1.char_id, SUM(t1.kills) as `orderKills`, t2.name " +
                                 "FROM `mvpladder` t1 " +
                                 "INNER JOIN `char` t2 " +
                                 "ON t1.char_id = t2.char_id " +
                                 "GROUP BY t1.char_id " +
                                 "ORDER BY `orderKills` DESC " +
                                 "LIMIT " + getvariableofnpc(.showtotal, "MVPLadder") + ";";
            .@nb = query_sql(.@queryKillerList$, .@charid, .@kills, .@name$);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i)
                    mes "^996600" + (.@i+1) + ": ^006699" + .@name$[.@i] + " ^00AA00[^FF0000" + .@kills[.@i] + " MvP^00AA00 killed]^000000";
                next;
            }
            break;
            
        case 2:
            .@queryKilledList$ = "SELECT char_id, mob_id, SUM(kills) as `orderKills` " +
                                 "FROM `mvpladder` " +
                                 "GROUP BY mob_id " +
                                 "ORDER BY `orderKills` DESC " +
                                 "LIMIT " + getvariableofnpc(.showtotal, "MVPLadder") + ";";
            .@nb = query_sql(.@queryKilledList$, .@charid, .@mobid, .@kills);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i) {
                    mes "^996600" + (.@i+1) + ": ^006699" + strmobinfo(1, .@mobid[.@i]) + " ^FF0000MvP ^00AA00[Killed ^FF0000" + .@kills[.@i] + " ^00AA00times]^000000";
                }
                next;
            }
            query_sql("SELECT SUM(kills) FROM mvpladder;", .@killCount);
            mes "^996600==> ^006699Total MvP Kills [^FF0000" + .@killCount[0] + " ^00AA00kills]^000000";
            break;
            
        case 3:
            .@queryOwnLadder$ = "SELECT char_id, mob_id, SUM(kills) as `orderKills` " +
                                "FROM `mvpladder` " +
                                "WHERE char_id = '" + getcharid(0) + "'" +
                                "ORDER BY `orderKills` DESC;";
            .@nb = query_sql(.@queryOwnLadder$, .@charid, .@mobid, .@kills);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            .@totalKillCount = 0;
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i ) {    
                    mes "^996600" + (.@i+1) + ": ^006699" + strmobinfo(1, .@mobid[.@i]) + " ^FF0000MvP ^00AA00[Killed ^FF0000" + .@kills[.@i] + " ^00AA00times]^000000";
                    .@totalKillCount = .@totalKillCount + .@kills[.@i];
                }
                next;
            }
            mes "^996600==> ^006699Total Own MvP Kills [^FF0000" + .@totalKillCount + " ^00AA00kills]^000000";
            break;
        }
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("MVP Ladder");
    setnpctimer 0;
    end;
    }
close;

}

//---- MSG board NPCs

-    script    mvp_ladder_statue    -1,{
    .@id = getelementofarray(getvariableofnpc(.npcgid, "MVPLadder"), getnpcid(0));
    mes "^996600[TOP "+ .@id +"]";
    mes "^006699Name : "+ getelementofarray(getvariableofnpc(.statue_name$, "MVPLadder"), .@id);
    .@guildname$ = getelementofarray(getvariableofnpc(.statue_guild$, "MVPLadder"), .@id);
    mes "^00AAAAGuild : "+((.@guildname$ == "null")? "^AAAAAANone": .@guildname$);
    mes "^00AA00Total MVP Kills : ["+ getelementofarray(getvariableofnpc(.statue_kills, "MVPLadder"), .@id) +"]";
    close;

OnInit:
    .@id = strnpcinfo(2);
    set getvariableofnpc(.statue[.@id], "MVPLadder"), getnpcid(0);
    set getvariableofnpc(.npcgid[getnpcid(0)], "MVPLadder"), .@id;
    end;
}

skycity,145,234,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#1    844
skycity,145,230,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#2    844
skycity,145,226,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#3    844
//1@dth3,54,91,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#4    1_F_MARIA
//1@dth3,47,83,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#5    1_F_MARIA

skycity,145,234,5    script     #top1    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-1 MVP Killer");
    setnpctimer 0;
    end;
}

skycity,145,230,5    script     #top2    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-2 MVP Killer");
    setnpctimer 0;
    end;
}

skycity,145,226,5    script     #top3    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-3 MVP Killer");
    setnpctimer 0;
    end;
}

//1@dth3,54,91,5    script     #top4    111,{
//OnInit:
//    initnpctimer;
//    end;
//OnTimer1000:
//    showscript("Top-4 MVP Killer");
//    setnpctimer 0;
//    end;
//}
//
//1@dth3,47,83,5    script     #top5    111,{
//OnInit:
//    initnpctimer;
//    end;
//OnTimer1000:
//    showscript("Top-5 MVP Killer");
//    setnpctimer 0;
//    end;
//
//}

//====== rAthena Script ======================================================
//= MVP ladder script
//===== By: ==================================================================
//= Rokimoki but edited and adapted from AnnieRuru PVP Ladder
//= https://herc.ws/board/topic/18871-dota-pvp-ladder/
//= Mark Script fixed and adapted some small things
//===== Current Version: =====================================================
//= 2.1
//===== Compatible With: =====================================================
//= rAthena 2020-10-20, with MySQL 8.0
//===== Description: =========================================================
//= MVP ladder store in SQL table
//= Requested by DevThor
//===== Additional Comments: =================================================
//= 1.0 initial version
//= 2.0 added total kill count and fixed some sql bugs
//= 2.1 fixed sql sorting rank
//============================================================================

//---- MvP Ladder Logic Script

-    script    MVPLadder    -1,{

OnInit:
// Config
    .map_killannounce = 1; // announce when MVP is dead on the map where the MVP was killed : 0 - off, 1 - o
    .killannounce = 1; // announce when MVP is dead globally : 0 - off, 1 - on
    .gmnokill = 0; // GMs are not suppose to kill MVP. A GM with <this number> level or higher will do nothing. IF set to 60, GM60 and above kill any player will not get anything : 0 - off

//    .min_gm_menu = 90; // minimum level of GM can use the GM menu on ladder npc

    .showtotal = 20; // show the length of ladder.
    .showpage = 10;    // set the views per page.

    .showstatue = 5; // number of statues. This number must match with the number of duplicates at the end of the script
    .fix_custom_sprite = false; // if your server has custom animated sprite that overlaps the sprite animation repeatedly on the statues, enable this

// Config ends ------------------------------------------------------------------------------------------

//    to prevent bug happen
    if (.gmnokill <= 0) .gmnokill = 100;

    sleep 1;
    
OnTimer1000: // refresh statues every 30 seconds. Note the `char` table is unrealiable, player still need to perform certain task to save the character -> see 'save_settings' in conf\map-server.conf
    .@query$ = "SELECT `char`.`char_id`, `char`.`name`, `char`.`guild_id`, `char`.`class`, "
             + "`char`.`sex`, `char`.`hair`, `char`.`hair_color`, `char`.`clothes_color`, "
             + "`char`.`body`, `char`.`head_top`, `char`.`head_mid`, `char`.`head_bottom`, `char`.`robe`, "
             + "SUM(`mvpladder`.`kills`) as `orderKills` "
             + "FROM `char` RIGHT JOIN `mvpladder` ON `char`.`char_id` = `mvpladder`.`char_id` GROUP BY `char`.`char_id` ORDER BY `orderKills` DESC LIMIT " + .showstatue;
    .@nb = query_sql(.@query$, .@cid, .@name$, .@guild_id, .@class, .@sex$, .@hair, .@hair_color, .@clothes_color, .@body, .@head_top, .@head_mid, .@head_bottom, .@robe, .@kills);
    if (.fix_custom_sprite) {
        for (.@i = 0; .@i < .@nb; ++.@i) {
            setunitdata .statue[.@i +1], UNPC_HEADTOP, 0;
            setunitdata .statue[.@i +1], UNPC_HEADMIDDLE, 0;
            setunitdata .statue[.@i +1], UNPC_HEADBOTTOM, 0;
            setunitdata .statue[.@i +1], UNPC_ROBE, 0;
        }
    }
    for (.@i = 0; .@i < .@nb; ++.@i) {
        setunitdata .statue[.@i +1], UNPC_CLASS, .@class[.@i];
        setunitdata .statue[.@i +1], UNPC_SEX, (.@sex$[.@i] == "F")? SEX_FEMALE:SEX_MALE;
        setunitdata .statue[.@i +1], UNPC_HAIRSTYLE, .@hair[.@i];
        setunitdata .statue[.@i +1], UNPC_HAIRCOLOR, .@hair_color[.@i];
        setunitdata .statue[.@i +1], UNPC_CLOTHCOLOR, .@clothes_color[.@i];
        setunitdata .statue[.@i +1], UNPC_BODY2, .@body[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADTOP, .@head_top[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADMIDDLE, .@head_mid[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADBOTTOM, .@head_bottom[.@i];
        setunitdata .statue[.@i +1], UNPC_ROBE, .@robe[.@i];
        setnpcdisplay "mvp_ladder_statue#"+(.@i +1), .@name$[.@i];
        .statue_name$[.@i +1] = .@name$[.@i];
        .statue_guild$[.@i +1] = getguildname(.@guild_id[.@i]);
        .statue_kills[.@i +1] = .@kills[.@i];
    }
    for (.@i = .@nb; .@i < .showstatue; ++.@i)
        setunitdata .statue[.@i +1], UNPC_CLASS, HIDDEN_WARP_NPC;
    initnpctimer;
    end;

OnNPCKillEvent: // Logic to detect when a MvP is killed
    if (getmonsterinfo(killedrid, MOB_MVPEXP) > 0){
        .@selectIfKillExistQuery$ = "SELECT char_id, mob_id, kills FROM mvpladder WHERE char_id = '" + getcharid(0) + "' AND mob_id = '" + killedrid + "';";
        if (query_sql(.@selectIfKillExistQuery$) > 0) { // Exist a kill of that MVP so +1 to kill count
            .@updateLadderQuery$ = "UPDATE mvpladder SET kills = kills + 1 WHERE char_id = '" + getcharid(0) + "' AND mob_id = '" + killedrid + "'";
        } 
        else { // Create a new kill of specific MVP
            //.@updateLadderQuery$ = "INSERT INTO mvpladder (char_id, mob_id, kills) VALUES ('" + getcharid(0) + "','" + killedrid + "','1');";
            .@updateLadderQuery$ = "INSERT INTO mvpladder (`char_id` , `mob_id` , `kills`) VALUES ('" + getcharid(0) + "','" + killedrid + "','1');";
        }
        query_sql(.@updateLadderQuery$);
    }
    if ( getmonsterinfo(killedrid,MOB_MVPEXP) && (getgmlevel() < 99) )
        announce strcharinfo(0)+" has defeated "+getmonsterinfo(killedrid,0)+" at "+strcharinfo(3),0,0xFF0101;

end;
}
//---- MvP Ladder Info NPC

skycity,137,241,5    script    MVP Ladder    120,{
    .@npcname$ = strnpcinfo(0);
    while (1) {
        mes "["+ .@npcname$ +"]";
        mes "Hello "+ strcharinfo(0) +"...";
        mes "If you want to I can show you your MVP stats.";
        next;
        switch (select("Most MVP killer list","Most MVP killed list","Own Information")) {
        mes "["+ .@npcname$ +"]";
        case 1:
            .@queryKillerList$ = "SELECT t1.char_id, SUM(t1.kills) as `orderKills`, t2.name " +
                                 "FROM `mvpladder` t1 " +
                                 "INNER JOIN `char` t2 " +
                                 "ON t1.char_id = t2.char_id " +
                                 "GROUP BY t1.char_id " +
                                 "ORDER BY `orderKills` DESC " +
                                 "LIMIT " + getvariableofnpc(.showtotal, "MVPLadder") + ";";
            .@nb = query_sql(.@queryKillerList$, .@charid, .@kills, .@name$);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i)
                    mes "^996600" + (.@i+1) + ": ^006699" + .@name$[.@i] + " ^00AA00[^FF0000" + .@kills[.@i] + " MvP^00AA00 killed]^000000";
                next;
            }
            break;
            
        case 2:
            .@queryKilledList$ = "SELECT char_id, mob_id, SUM(kills) as `orderKills` " +
                                 "FROM `mvpladder` " +
                                 "GROUP BY mob_id " +
                                 "ORDER BY `orderKills` DESC " +
                                 "LIMIT " + getvariableofnpc(.showtotal, "MVPLadder") + ";";
            .@nb = query_sql(.@queryKilledList$, .@charid, .@mobid, .@kills);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i) {
                    mes "^996600" + (.@i+1) + ": ^006699" + strmobinfo(1, .@mobid[.@i]) + " ^FF0000MvP ^00AA00[Killed ^FF0000" + .@kills[.@i] + " ^00AA00times]^000000";
                }
                next;
            }
            query_sql("SELECT SUM(kills) FROM mvpladder;", .@killCount);
            mes "^996600==> ^006699Total MvP Kills [^FF0000" + .@killCount[0] + " ^00AA00kills]^000000";
            break;
            
        case 3:
            .@queryOwnLadder$ = "SELECT char_id, mob_id, SUM(kills) as `orderKills` " +
                                "FROM `mvpladder` " +
                                "WHERE char_id = '" + getcharid(0) + "'" +
                                "ORDER BY `orderKills` DESC;";
            .@nb = query_sql(.@queryOwnLadder$, .@charid, .@mobid, .@kills);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            .@totalKillCount = 0;
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i ) {    
                    mes "^996600" + (.@i+1) + ": ^006699" + strmobinfo(1, .@mobid[.@i]) + " ^FF0000MvP ^00AA00[Killed ^FF0000" + .@kills[.@i] + " ^00AA00times]^000000";
                    .@totalKillCount = .@totalKillCount + .@kills[.@i];
                }
                next;
            }
            mes "^996600==> ^006699Total Own MvP Kills [^FF0000" + .@totalKillCount + " ^00AA00kills]^000000";
            break;
        }
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("MVP Ladder");
    setnpctimer 0;
    end;
    }
close;

}

//---- MSG board NPCs

-    script    mvp_ladder_statue    -1,{
    .@id = getelementofarray(getvariableofnpc(.npcgid, "MVPLadder"), getnpcid(0));
    mes "^996600[TOP "+ .@id +"]";
    mes "^006699Name : "+ getelementofarray(getvariableofnpc(.statue_name$, "MVPLadder"), .@id);
    .@guildname$ = getelementofarray(getvariableofnpc(.statue_guild$, "MVPLadder"), .@id);
    mes "^00AAAAGuild : "+((.@guildname$ == "null")? "^AAAAAANone": .@guildname$);
    mes "^00AA00Total MVP Kills : ["+ getelementofarray(getvariableofnpc(.statue_kills, "MVPLadder"), .@id) +"]";
    close;

OnInit:
    .@id = strnpcinfo(2);
    set getvariableofnpc(.statue[.@id], "MVPLadder"), getnpcid(0);
    set getvariableofnpc(.npcgid[getnpcid(0)], "MVPLadder"), .@id;
    end;
}

skycity,145,234,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#1    844
skycity,145,230,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#2    844
skycity,145,226,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#3    844
//1@dth3,54,91,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#4    1_F_MARIA
//1@dth3,47,83,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#5    1_F_MARIA

skycity,145,234,5    script     #top1    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-1 MVP Killer");
    setnpctimer 0;
    end;
}

skycity,145,230,5    script     #top2    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-2 MVP Killer");
    setnpctimer 0;
    end;
}

skycity,145,226,5    script     #top3    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-3 MVP Killer");
    setnpctimer 0;
    end;
}

//1@dth3,54,91,5    script     #top4    111,{
//OnInit:
//    initnpctimer;
//    end;
//OnTimer1000:
//    showscript("Top-4 MVP Killer");
//    setnpctimer 0;
//    end;
//}
//
//1@dth3,47,83,5    script     #top5    111,{
//OnInit:
//    initnpctimer;
//    end;
//OnTimer1000:
//    showscript("Top-5 MVP Killer");
//    setnpctimer 0;
//    end;
//
//}

//====== rAthena Script ======================================================
//= MVP ladder script
//===== By: ==================================================================
//= Rokimoki but edited and adapted from AnnieRuru PVP Ladder
//= https://herc.ws/board/topic/18871-dota-pvp-ladder/
//= Mark Script fixed and adapted some small things
//===== Current Version: =====================================================
//= 2.1
//===== Compatible With: =====================================================
//= rAthena 2020-10-20, with MySQL 8.0
//===== Description: =========================================================
//= MVP ladder store in SQL table
//= Requested by DevThor
//===== Additional Comments: =================================================
//= 1.0 initial version
//= 2.0 added total kill count and fixed some sql bugs
//= 2.1 fixed sql sorting rank
//============================================================================

//---- MvP Ladder Logic Script

-    script    MVPLadder    -1,{

OnInit:
// Config
    .map_killannounce = 1; // announce when MVP is dead on the map where the MVP was killed : 0 - off, 1 - o
    .killannounce = 1; // announce when MVP is dead globally : 0 - off, 1 - on
    .gmnokill = 0; // GMs are not suppose to kill MVP. A GM with <this number> level or higher will do nothing. IF set to 60, GM60 and above kill any player will not get anything : 0 - off

//    .min_gm_menu = 90; // minimum level of GM can use the GM menu on ladder npc

    .showtotal = 20; // show the length of ladder.
    .showpage = 10;    // set the views per page.

    .showstatue = 5; // number of statues. This number must match with the number of duplicates at the end of the script
    .fix_custom_sprite = false; // if your server has custom animated sprite that overlaps the sprite animation repeatedly on the statues, enable this

// Config ends ------------------------------------------------------------------------------------------

//    to prevent bug happen
    if (.gmnokill <= 0) .gmnokill = 100;

    sleep 1;
    
OnTimer1000: // refresh statues every 30 seconds. Note the `char` table is unrealiable, player still need to perform certain task to save the character -> see 'save_settings' in conf\map-server.conf
    .@query$ = "SELECT `char`.`char_id`, `char`.`name`, `char`.`guild_id`, `char`.`class`, "
             + "`char`.`sex`, `char`.`hair`, `char`.`hair_color`, `char`.`clothes_color`, "
             + "`char`.`body`, `char`.`head_top`, `char`.`head_mid`, `char`.`head_bottom`, `char`.`robe`, "
             + "SUM(`mvpladder`.`kills`) as `orderKills` "
             + "FROM `char` RIGHT JOIN `mvpladder` ON `char`.`char_id` = `mvpladder`.`char_id` GROUP BY `char`.`char_id` ORDER BY `orderKills` DESC LIMIT " + .showstatue;
    .@nb = query_sql(.@query$, .@cid, .@name$, .@guild_id, .@class, .@sex$, .@hair, .@hair_color, .@clothes_color, .@body, .@head_top, .@head_mid, .@head_bottom, .@robe, .@kills);
    if (.fix_custom_sprite) {
        for (.@i = 0; .@i < .@nb; ++.@i) {
            setunitdata .statue[.@i +1], UNPC_HEADTOP, 0;
            setunitdata .statue[.@i +1], UNPC_HEADMIDDLE, 0;
            setunitdata .statue[.@i +1], UNPC_HEADBOTTOM, 0;
            setunitdata .statue[.@i +1], UNPC_ROBE, 0;
        }
    }
    for (.@i = 0; .@i < .@nb; ++.@i) {
        setunitdata .statue[.@i +1], UNPC_CLASS, .@class[.@i];
        setunitdata .statue[.@i +1], UNPC_SEX, (.@sex$[.@i] == "F")? SEX_FEMALE:SEX_MALE;
        setunitdata .statue[.@i +1], UNPC_HAIRSTYLE, .@hair[.@i];
        setunitdata .statue[.@i +1], UNPC_HAIRCOLOR, .@hair_color[.@i];
        setunitdata .statue[.@i +1], UNPC_CLOTHCOLOR, .@clothes_color[.@i];
        setunitdata .statue[.@i +1], UNPC_BODY2, .@body[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADTOP, .@head_top[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADMIDDLE, .@head_mid[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADBOTTOM, .@head_bottom[.@i];
        setunitdata .statue[.@i +1], UNPC_ROBE, .@robe[.@i];
        setnpcdisplay "mvp_ladder_statue#"+(.@i +1), .@name$[.@i];
        .statue_name$[.@i +1] = .@name$[.@i];
        .statue_guild$[.@i +1] = getguildname(.@guild_id[.@i]);
        .statue_kills[.@i +1] = .@kills[.@i];
    }
    for (.@i = .@nb; .@i < .showstatue; ++.@i)
        setunitdata .statue[.@i +1], UNPC_CLASS, HIDDEN_WARP_NPC;
    initnpctimer;
    end;

OnNPCKillEvent: // Logic to detect when a MvP is killed
    if (getmonsterinfo(killedrid, MOB_MVPEXP) > 0){
        .@selectIfKillExistQuery$ = "SELECT char_id, mob_id, kills FROM mvpladder WHERE char_id = '" + getcharid(0) + "' AND mob_id = '" + killedrid + "';";
        if (query_sql(.@selectIfKillExistQuery$) > 0) { // Exist a kill of that MVP so +1 to kill count
            .@updateLadderQuery$ = "UPDATE mvpladder SET kills = kills + 1 WHERE char_id = '" + getcharid(0) + "' AND mob_id = '" + killedrid + "'";
        } 
        else { // Create a new kill of specific MVP
            //.@updateLadderQuery$ = "INSERT INTO mvpladder (char_id, mob_id, kills) VALUES ('" + getcharid(0) + "','" + killedrid + "','1');";
            .@updateLadderQuery$ = "INSERT INTO mvpladder (`char_id` , `mob_id` , `kills`) VALUES ('" + getcharid(0) + "','" + killedrid + "','1');";
        }
        query_sql(.@updateLadderQuery$);
    }
    if ( getmonsterinfo(killedrid,MOB_MVPEXP) && (getgmlevel() < 99) )
        announce strcharinfo(0)+" has defeated "+getmonsterinfo(killedrid,0)+" at "+strcharinfo(3),0,0xFF0101;

end;
}
//---- MvP Ladder Info NPC

skycity,137,241,5    script    MVP Ladder    120,{
    .@npcname$ = strnpcinfo(0);
    while (1) {
        mes "["+ .@npcname$ +"]";
        mes "Hello "+ strcharinfo(0) +"...";
        mes "If you want to I can show you your MVP stats.";
        next;
        switch (select("Most MVP killer list","Most MVP killed list","Own Information")) {
        mes "["+ .@npcname$ +"]";
        case 1:
            .@queryKillerList$ = "SELECT t1.char_id, SUM(t1.kills) as `orderKills`, t2.name " +
                                 "FROM `mvpladder` t1 " +
                                 "INNER JOIN `char` t2 " +
                                 "ON t1.char_id = t2.char_id " +
                                 "GROUP BY t1.char_id " +
                                 "ORDER BY `orderKills` DESC " +
                                 "LIMIT " + getvariableofnpc(.showtotal, "MVPLadder") + ";";
            .@nb = query_sql(.@queryKillerList$, .@charid, .@kills, .@name$);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i)
                    mes "^996600" + (.@i+1) + ": ^006699" + .@name$[.@i] + " ^00AA00[^FF0000" + .@kills[.@i] + " MvP^00AA00 killed]^000000";
                next;
            }
            break;
            
        case 2:
            .@queryKilledList$ = "SELECT char_id, mob_id, SUM(kills) as `orderKills` " +
                                 "FROM `mvpladder` " +
                                 "GROUP BY mob_id " +
                                 "ORDER BY `orderKills` DESC " +
                                 "LIMIT " + getvariableofnpc(.showtotal, "MVPLadder") + ";";
            .@nb = query_sql(.@queryKilledList$, .@charid, .@mobid, .@kills);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i) {
                    mes "^996600" + (.@i+1) + ": ^006699" + strmobinfo(1, .@mobid[.@i]) + " ^FF0000MvP ^00AA00[Killed ^FF0000" + .@kills[.@i] + " ^00AA00times]^000000";
                }
                next;
            }
            query_sql("SELECT SUM(kills) FROM mvpladder;", .@killCount);
            mes "^996600==> ^006699Total MvP Kills [^FF0000" + .@killCount[0] + " ^00AA00kills]^000000";
            break;
            
        case 3:
            .@queryOwnLadder$ = "SELECT char_id, mob_id, SUM(kills) as `orderKills` " +
                                "FROM `mvpladder` " +
                                "WHERE char_id = '" + getcharid(0) + "'" +
                                "ORDER BY `orderKills` DESC;";
            .@nb = query_sql(.@queryOwnLadder$, .@charid, .@mobid, .@kills);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            .@totalKillCount = 0;
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i ) {    
                    mes "^996600" + (.@i+1) + ": ^006699" + strmobinfo(1, .@mobid[.@i]) + " ^FF0000MvP ^00AA00[Killed ^FF0000" + .@kills[.@i] + " ^00AA00times]^000000";
                    .@totalKillCount = .@totalKillCount + .@kills[.@i];
                }
                next;
            }
            mes "^996600==> ^006699Total Own MvP Kills [^FF0000" + .@totalKillCount + " ^00AA00kills]^000000";
            break;
        }
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("MVP Ladder");
    setnpctimer 0;
    end;
    }
close;

}

//---- MSG board NPCs

-    script    mvp_ladder_statue    -1,{
    .@id = getelementofarray(getvariableofnpc(.npcgid, "MVPLadder"), getnpcid(0));
    mes "^996600[TOP "+ .@id +"]";
    mes "^006699Name : "+ getelementofarray(getvariableofnpc(.statue_name$, "MVPLadder"), .@id);
    .@guildname$ = getelementofarray(getvariableofnpc(.statue_guild$, "MVPLadder"), .@id);
    mes "^00AAAAGuild : "+((.@guildname$ == "null")? "^AAAAAANone": .@guildname$);
    mes "^00AA00Total MVP Kills : ["+ getelementofarray(getvariableofnpc(.statue_kills, "MVPLadder"), .@id) +"]";
    close;

OnInit:
    .@id = strnpcinfo(2);
    set getvariableofnpc(.statue[.@id], "MVPLadder"), getnpcid(0);
    set getvariableofnpc(.npcgid[getnpcid(0)], "MVPLadder"), .@id;
    end;
}

skycity,145,234,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#1    844
skycity,145,230,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#2    844
skycity,145,226,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#3    844
//1@dth3,54,91,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#4    1_F_MARIA
//1@dth3,47,83,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#5    1_F_MARIA

skycity,145,234,5    script     #top1    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-1 MVP Killer");
    setnpctimer 0;
    end;
}

skycity,145,230,5    script     #top2    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-2 MVP Killer");
    setnpctimer 0;
    end;
}

skycity,145,226,5    script     #top3    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-3 MVP Killer");
    setnpctimer 0;
    end;
}

//1@dth3,54,91,5    script     #top4    111,{
//OnInit:
//    initnpctimer;
//    end;
//OnTimer1000:
//    showscript("Top-4 MVP Killer");
//    setnpctimer 0;
//    end;
//}
//
//1@dth3,47,83,5    script     #top5    111,{
//OnInit:
//    initnpctimer;
//    end;
//OnTimer1000:
//    showscript("Top-5 MVP Killer");
//    setnpctimer 0;
//    end;
//
//}

 

Quote

//====== rAthena Script ======================================================
//= MVP ladder script
//===== By: ==================================================================
//= Rokimoki but edited and adapted from AnnieRuru PVP Ladder
//= https://herc.ws/board/topic/18871-dota-pvp-ladder/
//= Mark Script fixed and adapted some small things
//===== Current Version: =====================================================
//= 2.1
//===== Compatible With: =====================================================
//= rAthena 2020-10-20, with MySQL 8.0
//===== Description: =========================================================
//= MVP ladder store in SQL table
//= Requested by DevThor
//===== Additional Comments: =================================================
//= 1.0 initial version
//= 2.0 added total kill count and fixed some sql bugs
//= 2.1 fixed sql sorting rank
//============================================================================

//---- MvP Ladder Logic Script

-    script    MVPLadder    -1,{

OnInit:
// Config
    .map_killannounce = 1; // announce when MVP is dead on the map where the MVP was killed : 0 - off, 1 - o
    .killannounce = 1; // announce when MVP is dead globally : 0 - off, 1 - on
    .gmnokill = 0; // GMs are not suppose to kill MVP. A GM with <this number> level or higher will do nothing. IF set to 60, GM60 and above kill any player will not get anything : 0 - off

//    .min_gm_menu = 90; // minimum level of GM can use the GM menu on ladder npc

    .showtotal = 20; // show the length of ladder.
    .showpage = 10;    // set the views per page.

    .showstatue = 5; // number of statues. This number must match with the number of duplicates at the end of the script
    .fix_custom_sprite = false; // if your server has custom animated sprite that overlaps the sprite animation repeatedly on the statues, enable this

// Config ends ------------------------------------------------------------------------------------------

//    to prevent bug happen
    if (.gmnokill <= 0) .gmnokill = 100;

    sleep 1;
    
OnTimer1000: // refresh statues every 30 seconds. Note the `char` table is unrealiable, player still need to perform certain task to save the character -> see 'save_settings' in conf\map-server.conf
    .@query$ = "SELECT `char`.`char_id`, `char`.`name`, `char`.`guild_id`, `char`.`class`, "
             + "`char`.`sex`, `char`.`hair`, `char`.`hair_color`, `char`.`clothes_color`, "
             + "`char`.`body`, `char`.`head_top`, `char`.`head_mid`, `char`.`head_bottom`, `char`.`robe`, "
             + "SUM(`mvpladder`.`kills`) as `orderKills` "
             + "FROM `char` RIGHT JOIN `mvpladder` ON `char`.`char_id` = `mvpladder`.`char_id` GROUP BY `char`.`char_id` ORDER BY `orderKills` DESC LIMIT " + .showstatue;
    .@nb = query_sql(.@query$, .@cid, .@name$, .@guild_id, .@class, .@sex$, .@hair, .@hair_color, .@clothes_color, .@body, .@head_top, .@head_mid, .@head_bottom, .@robe, .@kills);
    if (.fix_custom_sprite) {
        for (.@i = 0; .@i < .@nb; ++.@i) {
            setunitdata .statue[.@i +1], UNPC_HEADTOP, 0;
            setunitdata .statue[.@i +1], UNPC_HEADMIDDLE, 0;
            setunitdata .statue[.@i +1], UNPC_HEADBOTTOM, 0;
            setunitdata .statue[.@i +1], UNPC_ROBE, 0;
        }
    }
    for (.@i = 0; .@i < .@nb; ++.@i) {
        setunitdata .statue[.@i +1], UNPC_CLASS, .@class[.@i];
        setunitdata .statue[.@i +1], UNPC_SEX, (.@sex$[.@i] == "F")? SEX_FEMALE:SEX_MALE;
        setunitdata .statue[.@i +1], UNPC_HAIRSTYLE, .@hair[.@i];
        setunitdata .statue[.@i +1], UNPC_HAIRCOLOR, .@hair_color[.@i];
        setunitdata .statue[.@i +1], UNPC_CLOTHCOLOR, .@clothes_color[.@i];
        setunitdata .statue[.@i +1], UNPC_BODY2, .@body[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADTOP, .@head_top[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADMIDDLE, .@head_mid[.@i];
        setunitdata .statue[.@i +1], UNPC_HEADBOTTOM, .@head_bottom[.@i];
        setunitdata .statue[.@i +1], UNPC_ROBE, .@robe[.@i];
        setnpcdisplay "mvp_ladder_statue#"+(.@i +1), .@name$[.@i];
        .statue_name$[.@i +1] = .@name$[.@i];
        .statue_guild$[.@i +1] = getguildname(.@guild_id[.@i]);
        .statue_kills[.@i +1] = .@kills[.@i];
    }
    for (.@i = .@nb; .@i < .showstatue; ++.@i)
        setunitdata .statue[.@i +1], UNPC_CLASS, HIDDEN_WARP_NPC;
    initnpctimer;
    end;

OnNPCKillEvent: // Logic to detect when a MvP is killed
    if (getmonsterinfo(killedrid, MOB_MVPEXP) > 0){
        .@selectIfKillExistQuery$ = "SELECT char_id, mob_id, kills FROM mvpladder WHERE char_id = '" + getcharid(0) + "' AND mob_id = '" + killedrid + "';";
        if (query_sql(.@selectIfKillExistQuery$) > 0) { // Exist a kill of that MVP so +1 to kill count
            .@updateLadderQuery$ = "UPDATE mvpladder SET kills = kills + 1 WHERE char_id = '" + getcharid(0) + "' AND mob_id = '" + killedrid + "'";
        } 
        else { // Create a new kill of specific MVP
            //.@updateLadderQuery$ = "INSERT INTO mvpladder (char_id, mob_id, kills) VALUES ('" + getcharid(0) + "','" + killedrid + "','1');";
            .@updateLadderQuery$ = "INSERT INTO mvpladder (`char_id` , `mob_id` , `kills`) VALUES ('" + getcharid(0) + "','" + killedrid + "','1');";
        }
        query_sql(.@updateLadderQuery$);
    }
    if ( getmonsterinfo(killedrid,MOB_MVPEXP) && (getgmlevel() < 99) )
        announce strcharinfo(0)+" has defeated "+getmonsterinfo(killedrid,0)+" at "+strcharinfo(3),0,0xFF0101;

end;
}
//---- MvP Ladder Info NPC

skycity,137,241,5    script    MVP Ladder    120,{
    .@npcname$ = strnpcinfo(0);
    while (1) {
        mes "["+ .@npcname$ +"]";
        mes "Hello "+ strcharinfo(0) +"...";
        mes "If you want to I can show you your MVP stats.";
        next;
        switch (select("Most MVP killer list","Most MVP killed list","Own Information")) {
        mes "["+ .@npcname$ +"]";
        case 1:
            .@queryKillerList$ = "SELECT t1.char_id, SUM(t1.kills) as `orderKills`, t2.name " +
                                 "FROM `mvpladder` t1 " +
                                 "INNER JOIN `char` t2 " +
                                 "ON t1.char_id = t2.char_id " +
                                 "GROUP BY t1.char_id " +
                                 "ORDER BY `orderKills` DESC " +
                                 "LIMIT " + getvariableofnpc(.showtotal, "MVPLadder") + ";";
            .@nb = query_sql(.@queryKillerList$, .@charid, .@kills, .@name$);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i)
                    mes "^996600" + (.@i+1) + ": ^006699" + .@name$[.@i] + " ^00AA00[^FF0000" + .@kills[.@i] + " MvP^00AA00 killed]^000000";
                next;
            }
            break;
            
        case 2:
            .@queryKilledList$ = "SELECT char_id, mob_id, SUM(kills) as `orderKills` " +
                                 "FROM `mvpladder` " +
                                 "GROUP BY mob_id " +
                                 "ORDER BY `orderKills` DESC " +
                                 "LIMIT " + getvariableofnpc(.showtotal, "MVPLadder") + ";";
            .@nb = query_sql(.@queryKilledList$, .@charid, .@mobid, .@kills);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i) {
                    mes "^996600" + (.@i+1) + ": ^006699" + strmobinfo(1, .@mobid[.@i]) + " ^FF0000MvP ^00AA00[Killed ^FF0000" + .@kills[.@i] + " ^00AA00times]^000000";
                }
                next;
            }
            query_sql("SELECT SUM(kills) FROM mvpladder;", .@killCount);
            mes "^996600==> ^006699Total MvP Kills [^FF0000" + .@killCount[0] + " ^00AA00kills]^000000";
            break;
            
        case 3:
            .@queryOwnLadder$ = "SELECT char_id, mob_id, SUM(kills) as `orderKills` " +
                                "FROM `mvpladder` " +
                                "WHERE char_id = '" + getcharid(0) + "'" +
                                "ORDER BY `orderKills` DESC;";
            .@nb = query_sql(.@queryOwnLadder$, .@charid, .@mobid, .@kills);
            if (!.@nb) {
                mes "The ladder currently is empty.";
                next;
            }
            .@totalKillCount = 0;
            for (.@j = 0; .@j < .@nb; .@j += getvariableofnpc(.showpage,"MVPLadder")) {
                for (.@i = .@j; .@i < (getvariableofnpc(.showpage,"MVPLadder") + .@j) && .@i < .@nb; ++.@i ) {    
                    mes "^996600" + (.@i+1) + ": ^006699" + strmobinfo(1, .@mobid[.@i]) + " ^FF0000MvP ^00AA00[Killed ^FF0000" + .@kills[.@i] + " ^00AA00times]^000000";
                    .@totalKillCount = .@totalKillCount + .@kills[.@i];
                }
                next;
            }
            mes "^996600==> ^006699Total Own MvP Kills [^FF0000" + .@totalKillCount + " ^00AA00kills]^000000";
            break;
        }
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("MVP Ladder");
    setnpctimer 0;
    end;
    }
close;

}

//---- MSG board NPCs

-    script    mvp_ladder_statue    -1,{
    .@id = getelementofarray(getvariableofnpc(.npcgid, "MVPLadder"), getnpcid(0));
    mes "^996600[TOP "+ .@id +"]";
    mes "^006699Name : "+ getelementofarray(getvariableofnpc(.statue_name$, "MVPLadder"), .@id);
    .@guildname$ = getelementofarray(getvariableofnpc(.statue_guild$, "MVPLadder"), .@id);
    mes "^00AAAAGuild : "+((.@guildname$ == "null")? "^AAAAAANone": .@guildname$);
    mes "^00AA00Total MVP Kills : ["+ getelementofarray(getvariableofnpc(.statue_kills, "MVPLadder"), .@id) +"]";
    close;

OnInit:
    .@id = strnpcinfo(2);
    set getvariableofnpc(.statue[.@id], "MVPLadder"), getnpcid(0);
    set getvariableofnpc(.npcgid[getnpcid(0)], "MVPLadder"), .@id;
    end;
}

skycity,145,234,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#1    844
skycity,145,230,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#2    844
skycity,145,226,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#3    844
//1@dth3,54,91,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#4    1_F_MARIA
//1@dth3,47,83,5    duplicate(mvp_ladder_statue)    mvp_ladder_statue#5    1_F_MARIA

skycity,145,234,5    script     #top1    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-1 MVP Killer");
    setnpctimer 0;
    end;
}

skycity,145,230,5    script     #top2    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-2 MVP Killer");
    setnpctimer 0;
    end;
}

skycity,145,226,5    script     #top3    111,{
OnInit:
    initnpctimer;
    end;
OnTimer1000:
    showscript("Top-3 MVP Killer");
    setnpctimer 0;
    end;
}

//1@dth3,54,91,5    script     #top4    111,{
//OnInit:
//    initnpctimer;
//    end;
//OnTimer1000:
//    showscript("Top-4 MVP Killer");
//    setnpctimer 0;
//    end;
//}
//
//1@dth3,47,83,5    script     #top5    111,{
//OnInit:
//    initnpctimer;
//    end;
//OnTimer1000:
//    showscript("Top-5 MVP Killer");
//    setnpctimer 0;
//    end;
//
//}

 

 

Edited by playniks
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10013
  • Reputation:   2348
  • Joined:  10/28/11
  • Last Seen:  

On 4/20/2023 at 2:32 AM, playniks said:

1st. that could only announce mob being killed on mvp maps, 

2nd.  register ranking that are killed only in mvp maps as well? 

OnNPCKillEvent: // Logic to detect when a MvP is killed
    if (getmonsterinfo(killedrid, MOB_MVPEXP) > 0 && strcharinfo(3) == "YOUR_MAP_NAME"){

 

On 4/20/2023 at 2:32 AM, playniks said:

3rd and lastly broadcast rare drops (1%)

conf/battle/drops.conf#L143-L150

// Make broadcast ** Player1 won Pupa's Pupa Card (chance 0.01%) ***
// This can be set to any value between 0~10000.
// Note: It also announces STEAL skill usage with rare items
// 0 = don't show announces at all
// 1 = show announces for 0.01% drop chance items
// 333 = show announces for 3.33% or lower drop chance items
// 10000 = show announces for all items
rare_drop_announce: 100

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  12
  • Topics Per Day:  0.03
  • Content Count:  45
  • Reputation:   2
  • Joined:  02/23/23
  • Last Seen:  

On 4/25/2023 at 3:46 PM, Emistry said:
OnNPCKillEvent: // Logic to detect when a MvP is killed
    if (getmonsterinfo(killedrid, MOB_MVPEXP) > 0 && strcharinfo(3) == "YOUR_MAP_NAME"){

 

conf/battle/drops.conf#L143-L150

Hi @Emistry thank you so much for your response and I really appreciate it. However, as I try to follow your instruction about this "

OnNPCKillEvent: // Logic to detect when a MvP is killed
    if (getmonsterinfo(killedrid, MOB_MVPEXP) > 0 && strcharinfo(3) == "YOUR_MAP_NAME"){


It does not register whether I kill the mvp on its map or not.
see example below for Mistress:      (tried killing MISTRESS in it's map at mjolnir_04 and pvp_n_2-2 and no point at all) and I only want a kill to register when killin gon mvp's original hideout..  What to do?

OnNPCKillEvent: // Logic to detect when a MvP is killed
    if (getmonsterinfo(killedrid, MOB_MVPEXP) > 0 && strcharinfo(3) == "mjolnir_04"){
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  12
  • Topics Per Day:  0.03
  • Content Count:  45
  • Reputation:   2
  • Joined:  02/23/23
  • Last Seen:  

3 hours ago, paxtonleiny said:

 

Whether or not I eliminate the map's mvp has no effect.
for Mistress, check the following example:      I only want a kill to count when I am killing gon mvp in his original hideout (I've tried killing MISTRESS in its map at mjolnir_04 and pvp_n_2-2 and there's no purpose at all).  Where do we go from here?

Hi! I actually made a separate script to count a kill on the specific hide out of certain mvp while waiting for somebody's help and manage to resolve my own issue. However, I had to make a custom file for each mvp (duplicate each mvp) and remove the MVP experience on each duplicates.

Edited by playniks
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...