[17/May 19:10][Warning]: script:query_sql: Too many columns, discarding last 3 columns.
[17/May 19:10][Debug]: Source (NPC): MVPLadder (invisible/not on a map)
[17/May 19:10][Debug]: Source (NPC): MVPLadder is located in: npc/custom/mvplad.txt
this is my script:
//====== 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 - 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 <thisnumber> 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 = 3; // 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;
OnTimer30000: // 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$);
}
end;
}
//---- MvP Ladder Info NPC
prontera,161,207,3 script MVP Manager 10279,{
.@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("Monthly Winner Shop","Key Shop","Most MVP killer list","Most MVP killed list","Own Information")) {
mes "["+ .@npcname$ +"]";
case 1:
mes "[Barter NPC]";
mes "...";
close2;
callshop "MVPSHOP";
end;
case 2:
mes "[Barter NPC]";
mes "...";
close2;
callshop "MVPPOINT";
end;
case 3:
.@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 4:
.@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 5:
.@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:
setunitdata (getnpcid(0), UNPC_GROUP_ID, 19);
setunittitle(getnpcid(0), "MVP Ladder");
initnpctimer;
end;
OnTimer500:
showscript("MVP Manager");
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;
}
prontera,151,219,4 duplicate(mvp_ladder_statue) mvp_ladder_statue#1 1_F_MARIA
prontera,149,222,5 duplicate(mvp_ladder_statue) mvp_ladder_statue#2 1_F_MARIA
prontera,153,222,2 duplicate(mvp_ladder_statue) mvp_ladder_statue#3 1_F_MARIA
prontera,151,220,4 script #top1 111,{
OnInit:
initnpctimer;
end;
OnTimer1000:
showscript("Top MVP Killer");
setnpctimer 0;
end;
}
so i created sql table with this, which is provided in the npc script
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;
Question
Heartfelt
got this warning and debug :
[17/May 19:10][Warning]: script:query_sql: Too many columns, discarding last 3 columns. [17/May 19:10][Debug]: Source (NPC): MVPLadder (invisible/not on a map) [17/May 19:10][Debug]: Source (NPC): MVPLadder is located in: npc/custom/mvplad.txt
this is my script:
so i created sql table with this, which is provided in the npc script
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;
any clue? please help thank you
Link to comment
Share on other sites
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.