Pontos de MVP: mudanças entre as edições

De Grimopedia
Ir para navegação Ir para pesquisar
Criou página com '/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: : : : _______________________ _______________________ : : |_________ _________| |_________ _________| : : |_________ _________| |_________ _________| : : | | | | : : | | | | : : | |...'
 
Sem resumo de edição
Linha 1: Linha 1:
/*
= Pontos MVP =
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:                                                          :
:    _______________________    _______________________    :
:  |_________    _________|  |_________    _________|  :
:  |_________    _________|  |_________    _________|  :
:            |  |                      |  |            :
:            |  |                      |  |            :
:            |  |                      |  |            :
:            |  |                      |  |            :
:            |  |                      |  |            :
:            |  |                      |  |            :
:            |___|                      |___|            :
:                                                          :
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


----- Script: Sistema Passe de batalha  1.0
Os '''Pontos MVP''' (variável '''#MVPOINTS''') são ganhos ao derrotar MVPs específicos e podem ser trocados por itens na '''Loja de Pontos MVP'''.
----- Autor: Desconhecido
O sistema é controlado pelo script ''MvP_System'' e '''somente MVPs dentro de uma whitelist contam pontos e ranking'''. :contentReference[oaicite:1]{index=1}
----- Update: Dev TT
----- Data: 10-11-2023
----- Insira no seu banco de dados:


CREATE TABLE `mvpladder` (
== Como ganhar Pontos MVP ==
`id` int(11) NOT NULL AUTO_INCREMENT,
* Ao matar um MVP válido (na whitelist), você ganha:
`char_id` int(11) unsigned NOT NULL default '0',
** '''+1 Ponto MVP''' na maioria dos casos. :contentReference[oaicite:2]{index=2}
`mob_id` INT NOT NULL,
** '''+3 Pontos MVP''' se for um MVP “EXTRA” (somente 2 IDs específicos). :contentReference[oaicite:3]{index=3} :contentReference[oaicite:4]{index=4}
`kills` INT DEFAULT 0,
* Se o MVP morto '''não estiver na whitelist''', '''não conta nada''' (sem ponto e sem ranking). :contentReference[oaicite:5]{index=5}
  PRIMARY KEY (`id`),
INDEX (`char_id`),
INDEX (`mob_id`),
INDEX (`kills`)
) ENGINE=MyISAM AUTO_INCREMENT=1;
*/


//---- MvP Ladder Logic Script
=== MVPs EXTRA (valem 3 pontos) ===
Os MVPs abaixo valem '''3 Pontos MVP''' por kill:
* '''22394'''
* '''22404''' :contentReference[oaicite:6]{index=6}


- script MVPLadder -1,{
== O que o sistema registra (Ranking) ==
Quando você mata um MVP válido:
* Atualiza o ranking do NPC em '''mvp_ranking''' (campo mvp_death). :contentReference[oaicite:7]{index=7}
* Atualiza o ranking do site em '''mvp_rank''' (campo mvp_kills). :contentReference[oaicite:8]{index=8}
* Soma seus pontos em '''#MVPOINTS''' e incrementa seu contador de kills ('''MVPKills'''). :contentReference[oaicite:9]{index=9}


OnInit:
== Onde trocar (NPC) ==
// Config
Você troca os Pontos MVP no NPC:
.map_killannounce = 1; // anuncia quando o MVP está morto no mapa onde o MVP foi morto: 0 - OFF, 1 - ON
.killannounce = 0;    // anunciar quando o MVP está morto globalmente: 0 - OFF, 1 - ON
.gmnokill = 0;        // GMs não devem matar MVP. Um GM com este nível ou superior não recebe nada


// .min_gm_menu = 90; // O nível mínimo de GM pode usar o menu GM na escada NPC
* '''Pontos MVP''' (Gestor dos Pontos)
* Local: '''prt_in (136,28)''' :contentReference[oaicite:10]{index=10}


.showtotal = 40; // Mostre o comprimento da escada.
Ao falar com o NPC, ele mostra quantos pontos você tem e oferece 3 lojas:
.showpage  = 20; // Defina as visualizações por página.
* Loja de Utilidades
* Loja de Equipamentos
* Loja de Visuais :contentReference[oaicite:11]{index=11}


.showstatue = 3; // Número de estátuas. Deve corresponder ao número de duplicatas no final do script
== Lojas de Pontos MVP ==
.fix_custom_sprite = false; // Se seu servidor tiver sprite animada personalizada bugando em estátuas, ative isso


// Para evitar bug
=== Loja de Utilidades ===
if (.gmnokill <= 0) .gmnokill = 100;
{| class="wikitable sortable"
! Item !! Custo (Pontos MVP)
|-
| {{Item|22507}} || 1
|-
| {{Item|11593}} || 1
|-
| {{Item|11595}} || 1
|-
| {{Item|11592}} || 1
|-
| {{Item|22751}} || 2
|-
| {{Item|12662}} || 2
|-
| {{Item|12658}} || 2
|-
| {{Item|22752}} || 2
|-
| {{Item|12664}} || 2
|-
| {{Item|22753}} || 2
|-
| {{Item|12661}} || 2
|-
| {{Item|12660}} || 2
|-
| {{Item|22754}} || 2
|-
| {{Item|12663}} || 2
|-
| {{Item|12659}} || 2
|-
| {{Item|22750}} || 2
|-
| {{Item|22755}} || 2
|-
| {{Item|22999}} || 2
|-
| {{Item|40049}} || 2
|-
| {{Item|12883}} || 2
|-
| {{Item|100008}} || 2
|-
| {{Item|23227}} || 5
|-
| {{Item|12922}} || 5
|-
| {{Item|12210}} || 5
|} :contentReference[oaicite:12]{index=12}


sleep 1;
=== Loja de Equipamentos ===
{| class="wikitable sortable"
! Item !! Custo (Pontos MVP)
|-
| {{Item|15052}} || 2
|-
| {{Item|5490}} || 5
|-
| {{Item|5363}} || 5
|-
| {{Item|22228}} || 20
|-
| {{Item|19498}} || 20
|-
| {{Item|18574}} || 20
|-
| {{Item|2177}} || 20
|-
| {{Item|32258}} || 25
|-
| {{Item|28565}} || 25
|-
| {{Item|19436}} || 30
|-
| {{Item|19285}} || 35
|-
| {{Item|28531}} || 45
|-
| {{Item|460046}} || 50
|-
| {{Item|460079}} || 50
|-
| {{Item|19380}} || 50
|} :contentReference[oaicite:13]{index=13}


OnTimer1700000: // Atualize as estátuas (timer original do script)
=== Loja de Visuais ===
.@query$ = "SELECT `char`.`char_id`, `char`.`name`, `char`.`guild_id`, `char`.`class`, "
{| class="wikitable sortable"
        + "`char`.`sex`, `char`.`hair`, `char`.`hair_color`, `char`.`clothes_color`, "
! Item !! Custo (Pontos MVP)
        + "`char`.`body`, `char`.`head_top`, `char`.`head_mid`, `char`.`head_bottom`, `char`.`robe`, "
|-
        + "SUM(`mvpladder`.`kills`) as `orderKills` "
| {{Item|31325}} || 10
        + "FROM `char` RIGHT JOIN `mvpladder` ON `char`.`char_id` = `mvpladder`.`char_id` "
|-
        + "GROUP BY `char`.`char_id` ORDER BY `orderKills` DESC LIMIT " + .showstatue;
| {{Item|31331}} || 10
|-
| {{Item|31332}} || 10
|-
| {{Item|20432}} || 10
|-
| {{Item|31205}} || 10
|-
| {{Item|20268}} || 10
|-
| {{Item|20167}} || 10
|-
| {{Item|20175}} || 10
|-
| {{Item|20393}} || 10
|-
| {{Item|15847}} || 10
|-
| {{Item|15889}} || 10
|-
| {{Item|19546}} || 10
|-
| {{Item|19587}} || 10
|} :contentReference[oaicite:14]{index=14}


.@nb = query_sql(.@query$, .@cid, .@name$, .@guild_id, .@class, .@sex$, .@hair, .@hair_color, .@clothes_color, .@body, .@head_top, .@head_mid, .@head_bottom, .@robe, .@kills);
== Lista de MVPs válidos (Whitelist) ==
Apenas MVPs desta lista contam Pontos MVP e Ranking: :contentReference[oaicite:15]{index=15}


if (.fix_custom_sprite) {
<div class="mw-collapsible mw-collapsed" style="border:1px solid #dcdcdc; padding:10px; border-radius:10px;">
for (.@i = 0; .@i < .@nb; ++.@i) {
'''Clique para expandir a Whitelist'''
setunitdata .statue[.@i + 1], UNPC_HEADTOP, 0;
<div class="mw-collapsible-content">
setunitdata .statue[.@i + 1], UNPC_HEADMIDDLE, 0;
1087, 2094, 1147, 1190, 1086, 1115, 1806, 1511, 1159, 1389, 1150, 1688, 1039, 1980, 1251, 2068, 2194, 1885, 1252, 2131,
setunitdata .statue[.@i + 1], UNPC_HEADBOTTOM, 0;
1583, 1038, 1046, 1059, 1157, 1957, 1112, 2156, 1373, 1272, 1630, 1623, 1492, 2187, 2188, 1418, 1312, 1785, 2317, 2022,
setunitdata .statue[.@i + 1], UNPC_ROBE, 0;
2087, 2253, 2321, 1929, 1779, 1708, 1956, 2202, 1734, 1685, 1719, 1768, 3757, 2189, 2190, 1658, 2255, 2251, 2319, 1871,
}
2165, 1751, 2249, 1832, 1874, 1917, 1647, 1649, 1650, 1651, 1648, 1646,
}
22394, 22404
 
</div>
for (.@i = 0; .@i < .@nb; ++.@i) {
</div>
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;
 
// =====================================================================
// EFEITO SOMENTE NO TOP 1 (statue[1]) - 100% garantido (aplica no refresh)
// =====================================================================
// Limpa de todas as estátuas (pra não "grudar" quando trocar ranking)
for (.@i = 1; .@i <= .showstatue; ++.@i) {
if (.statue[.@i]) {
hateffect_npc 174, false, .statue[.@i];
setunitdata .statue[.@i], UNPC_GROUP_ID, 0;
}
}
// Aplica somente no Top 1
if (.statue[1]) {
hateffect_npc 174, true, .statue[1];    // id hateffect
setunitdata .statue[1], UNPC_GROUP_ID, 52; // emblema no nome do npc
}
 
initnpctimer;
end;
 
OnNPCKillEvent: // Lógica para detectar quando um MVP é morto
if (getmonsterinfo(killedrid, MOB_MVPEXP) > 0) {
.@selectIfKillExistQuery$ = "SELECT char_id, mob_id, kills FROM mvpladder WHERE char_id = '" + getcharid(0) + "' AND mob_id = '" + killedrid + "';";
.@nb = query_sql(.@selectIfKillExistQuery$, .@char_id, .@mob_id, .@kills);
 
if (.@nb > 0) { // Já existe registro desse MVP para esse char
.@updateLadderQuery$ = "UPDATE mvpladder SET kills = kills + 1 WHERE char_id = '" + getcharid(0) + "' AND mob_id = '" + killedrid + "'";
} else { // Cria um novo registro para esse MVP específico
.@updateLadderQuery$ = "INSERT INTO mvpladder (`char_id`, `mob_id`, `kills`) VALUES ('" + getcharid(0) + "','" + killedrid + "','1');";
}
 
query_sql(.@updateLadderQuery$);
}
end;
}
//---- MvP Ladder Info NPC
 
prontera,127,190,5 script Ranking MVP 19337,{
.@npcname$ = strnpcinfo(0);
while (1) {
query_sql("SELECT SUM(kills) FROM mvpladder;", .@killCount);
 
set .@name$, "^0099FF[ " + strnpcinfo(1) + " ]^000000";
mes "Olá ^108AE1" + strcharinfo(0) + "^000000, seja bem-vindo!";
mes "Veio verificar como anda o Ranking MvP?";
mes "^996600==> ^006699Total de MvP's Mortos [^FF0000" + .@killCount[0] + "^00AA00]^000000";
next;
 
switch (select("^00CC00•^000000 Verificar Ranking MvP","^00CC00•^000000 Total de MvP Mortos","^00CC00•^000000 Minhas informações")) {
set .@name$, "^0099FF[ " + strnpcinfo(1) + " ]^000000";
 
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) {
set .@name$, "^0099FF[ " + strnpcinfo(1) + " ]^000000";
mes "Sem ranking atualmente...";
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) + " ^000000 : ^006699" + .@name$[.@i] + " ^00AA00| ^006699Matou:^000000 ^ff0000" + .@kills[.@i] + "^000000 ^00AA00MvP's^000000";
mes "      ^108AE1====================^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) {
set .@name$, "^0099FF[ " + strnpcinfo(1) + " ]^000000";
mes "Sem ranking atualmente...";
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[Morto ^FF0000" + .@kills[.@i] + " ^00AA00vezes]^000000";
next;
}
 
query_sql("SELECT SUM(kills) FROM mvpladder;", .@killCount);
set .@name$, "^0099FF[ " + strnpcinfo(1) + " ]^000000";
mes "^996600==> ^006699Total de MvP's Mortos [^FF0000" + .@killCount[0] + "^00AA00]^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) {
set .@name$, "^0099FF[ " + strnpcinfo(1) + " ]^000000";
mes "Sem ranking atualmente...";
next;
}
 
.@totalKillCount = 0;
for (.@i = 0; .@i < .@nb; ++.@i)
.@totalKillCount += .@kills[.@i];
 
mes "^996600==> ^006699Você matou no total: [^FF0000" + .@totalKillCount + " ^00AA00MvP^000000^006699]^000000";
break;
}
 
OnInit:
initnpctimer;
end;
 
OnTimer1000:
showscript("Top Ranking [MvP]");
setnpctimer 0;
end;
}
close;
}
 
//---- MSG board NPCs
 
- script mvp_ladder_statue -1,{
.@id = getelementofarray(getvariableofnpc(.npcgid, "MVPLadder"), getnpcid(0));
set .@name$, "^0099FF[ " + strnpcinfo(1) + " ]^000000";
mes "^006699Top Ranking: ^ff0000" + .@id + " ";
mes "^006699Nome : " + getelementofarray(getvariableofnpc(.statue_name$, "MVPLadder"), .@id);
 
.@guildname$ = getelementofarray(getvariableofnpc(.statue_guild$, "MVPLadder"), .@id);
mes "^00AAAAGuilda : " + ((.@guildname$ == "null") ? "^AAAAAANenhuma" : .@guildname$);
 
mes "^00AA00Total MVP Kills :^000000 ^FF0000[" + getelementofarray(getvariableofnpc(.statue_kills, "MVPLadder"), .@id) + "]";
close;
 
OnInit:
.@id = strnpcinfo(2);
.@npc_id = getnpcid(0);
 
// IMPORTANTE: sem efeito aqui.
// O efeito do Top 1 é aplicado 100% no refresh do MVPLadder (OnTimer1700000)
set getvariableofnpc(.statue[.@id], "MVPLadder"), .@npc_id;
set getvariableofnpc(.npcgid[.@npc_id], "MVPLadder"), .@id;
end;
}
 
prontera,122,190,5 duplicate(mvp_ladder_statue) mvp_ladder_statue#1 1_F_MARIA
prontera,120,190,5 duplicate(mvp_ladder_statue) mvp_ladder_statue#2 1_F_MARIA
prontera,124,190,5 duplicate(mvp_ladder_statue) mvp_ladder_statue#3 1_F_MARIA
 
//|==============================================================|
//|===== rAthena Script =========================================|
//|===== Créditos: ==============================================|
//|= KyoSasuke                                                  |
//|===== Versao do NPC: =========================================|
//|= 1.0                                                        |
//|===== Tabela SQL: ============================================|
/*
CREATE TABLE IF NOT EXISTS `mvp_ranking` (
  `char_id` int(11) unsigned NOT NULL DEFAULT '0',
  `name` varchar(30) NOT NULL DEFAULT '',
  `mvp_death` int(11) unsigned NOT NULL default '0',
  PRIMARY KEY  (`char_id`)
) ENGINE=MyISAM;
*/
 
//===== Lojas de Pontos MVP: ==============================================|
- pointshop mvp_shop_utilidades -1,#MVPOINTS,22507:1,11593:1,11595:1,11592:1,22751:2,12662:2,12658:2,22752:2,12664:2,22753:2,12661:2,12660:2,22754:2,12663:2,12659:2,22750:2,22755:2,22999:2,40049:2,12883:2,100008:2,23227:5,12922:5,12210:5
- pointshop mvp_shop_equips -1,#MVPOINTS,15052:2,5490:5,5363:5,22228:20,19498:20,18574:20,2177:20,32258:25,28565:25,19436:30,19285:35,28531:45,460046:50,460079:50,19380:50
- pointshop mvp_shop_visuais -1,#MVPOINTS,31325:10,31331:10,31332:10,20432:10,31205:10,20268:10,20167:10,20175:10,20393:10,15847:10,15889:10,19546:10,19587:10
 
//===== Script NPC Gestor dos Pontos MVP ===============================|
prt_in,136,28,2 script Pontos MVP 3746,{ 
goto NPC_RANK;
 
OnInit:
.npc$ = "^0099FF[ Gestor dos Pontos ]^000000";
.topMvP = 10;
.ChatNpc = 0;
while(1) {
showscript "Loja pontos [MvP] ";
sleep 1000;
}
if (.ChatNpc)
waitingroom "Ranking MvP",0,"",0;
end;
 
//==============================================================|
NPC_RANK:
mes .npc$;
mes (gettime(3)>= 6 && gettime(3)<= 12 ? "Bom-dia" : (gettime(3)>=13 && gettime(3)<=18 ? "Boa-tarde" : "Boa-noite")) + ", ^108AE1" + strcharinfo(0) + "^000000 !";
mes "Você possui ^ff0000" + #MVPOINTS + "^000000 Pontos ^00AA00MvP^000000";
query_sql "select `name`, `mvp_death` from `mvp_ranking` ORDER BY `mvp_death` DESC LIMIT " + .topmvp + "", .@name$, .@mvpkills;
next;
 
// MENU VISUAL 3 LOJAS + SAIR + (GM) RESET
.@menu$ = "^00CC00•^000000 Loja de Utilidades:^00CC00•^000000 Loja de Equipamentos:^00CC00•^000000 Loja de Visuais:^00CC00•^000000 Sair";
if (getgroupid() >= 90) .@menu$ = .@menu$ + ":^00CC00•^000000 Resetar tabela";
switch(select(.@menu$)){
case 1:
callshop "mvp_shop_utilidades";
end;
case 2:
callshop "mvp_shop_equips";
end;
case 3:
callshop "mvp_shop_visuais";
end;
case 4:
clear;
mes .npc$;
mes "Ok, volte quando precisar de meus serviços.";
end;
 
case 5: // Apenas GM
switch(select("^00CC00•^000000 Resetar tabela de rank:^00CC00•^000000 Resetar pontos mvp:^00CC00•^000000 Cancelar")){
case 1:
query_sql "select `name` from `mvp_ranking` ORDER BY `name` DESC LIMIT " + .topmvp + "", .@name$;
if(.@name$ == ""){
clear;
mes .npc$;
mes "      ^108AE1====================^000000";
mes "A tabela de rank MvP já foi resetada.";
end;
}else{
query_sql("TRUNCATE mvp_ranking");
clear;
mes .npc$;
mes "      ^108AE1====================^000000";
mes "Tabela de rank MvP foi resetada com sucesso.";
end;
}
break;
 
case 2:
query_sql "SELECT `key` FROM `acc_reg_num` WHERE `key` = '#MVPOINTS'", @mvppoints$;
if(@mvppoints$ == ""){
clear;
mes .npc$;
mes "      ^108AE1====================^000000";
mes "Os pontos MvP já foram resetados.";
end;
}else{
query_sql("DELETE FROM `acc_reg_num` WHERE `key` = '#MVPOINTS'");
set #MVPOINTS, 0;
clear;
mes .npc$;
mes "      ^108AE1====================^000000";
mes "Tabela de Pontos MvP foi resetada com sucesso.";
end;
}
break;
 
case 3:
clear;
mes .npc$;
mes "      ^108AE1====================^000000";
mes "Ok, volte quando precisar de meus serviços.";
end;
}
end;
}
}
 
//==============================================================|
//==============================================================|
//==============================================================|
- script MvP_System -1,{
 
OnInit:
// ==========================================================
// Whitelist: SOMENTE estes IDs vão contar pontos/ranking
// ==========================================================
setarray .mvp_whitelist[0],
1087,2094,1147,1190,1086,1115,1806,1511,1159,1389,1150,1688,1039,1980,1251,2068,2194,1885,1252,2131,
1583,1038,1046,1059,1157,1957,1112,2156,1373,1272,1630,1623,1492,2187,2188,1418,1312,1785,2317,2022,
2087,2253,2321,1929,1779,1708,1956,2202,1734,1685,1719,1768,3757,2189,2190,1658,2255,2251,2319,1871,
2165,1751,2249,1832,1874,1917,1647,1649,1650,1651,1648,1646,
22394,22404; // <- extras também precisam estar na whitelist pra contar
 
// ==========================================================
// MVPs extras: ganham 3 pontos (somente estes 2)
// ==========================================================
setarray .mvp_special[0],
22394,22404;
 
set .anuncio, 1; // Anunciar quem matou o MvP e qual MvP e qual mapa [0 OFF - 1 ON]
end;
 
OnNPCKillEvent:
 
// ==========================================================
// 1) Se NÃO está na whitelist, não conta nada.
// ==========================================================
if (inarray(.mvp_whitelist, killedrid) < 0)
end;
 
// ==========================================================
// 2) Define pontos (3 se for "extra", senão 1)
// ==========================================================
.@pontos = (inarray(.mvp_special, killedrid) >= 0) ? 3 : 1;
 
// ==========================================================
// 3) Atualiza ranking do NPC (mvp_ranking)
// ==========================================================
query_sql "INSERT INTO `mvp_ranking` (`char_id`,`name`,`mvp_death`) " +
          "VALUES (" + getcharid(0) + ", '" + escape_sql(strcharinfo(0)) + "', 1) " +
          "ON DUPLICATE KEY UPDATE `mvp_death` = `mvp_death` + 1";
 
// ==========================================================
// 4) Atualiza ranking do SITE (mvp_rank)
// ==========================================================
query_sql "INSERT INTO `mvp_rank` (`char_id`,`mvp_kills`) " +
          "VALUES (" + getcharid(0) + ", 1) " +
          "ON DUPLICATE KEY UPDATE `mvp_kills` = `mvp_kills` + 1";
 
// ==========================================================
// 5) Atualiza pontos / contador
// ==========================================================
#MVPOINTS += .@pontos;
MVPKills  += 1;
 
// ==========================================================
// 6) Mensagens
// ==========================================================
dispbottom "================================================", 0xFFC300;
if (.@pontos == 3)
dispbottom "Você matou um MvP EXTRA (+3). Total kills: [" + MVPKills + "] | Pontos: [" + #MVPOINTS + "]", 0x00F7FF;
else
dispbottom "Você matou um MvP (+1). Total kills: [" + MVPKills + "] | Pontos: [" + #MVPOINTS + "]", 0x00F7FF;
dispbottom "================================================", 0xFFC300;
 
end;
}

Edição das 11h15min de 27 de fevereiro de 2026

Pontos MVP

Os Pontos MVP (variável #MVPOINTS) são ganhos ao derrotar MVPs específicos e podem ser trocados por itens na Loja de Pontos MVP. O sistema é controlado pelo script MvP_System e somente MVPs dentro de uma whitelist contam pontos e ranking. :contentReference[oaicite:1]{index=1}

Como ganhar Pontos MVP

  • Ao matar um MVP válido (na whitelist), você ganha:
    • +1 Ponto MVP na maioria dos casos. :contentReference[oaicite:2]{index=2}
    • +3 Pontos MVP se for um MVP “EXTRA” (somente 2 IDs específicos). :contentReference[oaicite:3]{index=3} :contentReference[oaicite:4]{index=4}
  • Se o MVP morto não estiver na whitelist, não conta nada (sem ponto e sem ranking). :contentReference[oaicite:5]{index=5}

MVPs EXTRA (valem 3 pontos)

Os MVPs abaixo valem 3 Pontos MVP por kill:

  • 22394
  • 22404 :contentReference[oaicite:6]{index=6}

O que o sistema registra (Ranking)

Quando você mata um MVP válido:

  • Atualiza o ranking do NPC em mvp_ranking (campo mvp_death). :contentReference[oaicite:7]{index=7}
  • Atualiza o ranking do site em mvp_rank (campo mvp_kills). :contentReference[oaicite:8]{index=8}
  • Soma seus pontos em #MVPOINTS e incrementa seu contador de kills (MVPKills). :contentReference[oaicite:9]{index=9}

Onde trocar (NPC)

Você troca os Pontos MVP no NPC:

  • Pontos MVP (Gestor dos Pontos)
  • Local: prt_in (136,28) :contentReference[oaicite:10]{index=10}

Ao falar com o NPC, ele mostra quantos pontos você tem e oferece 3 lojas:

  • Loja de Utilidades
  • Loja de Equipamentos
  • Loja de Visuais :contentReference[oaicite:11]{index=11}

Lojas de Pontos MVP

Loja de Utilidades

Item Custo (Pontos MVP)

Item 22507 || 1

Item 11593 || 1

Item 11595 || 1

Item 11592 || 1

Item 22751 || 2

Item 12662 || 2

Item 12658 || 2

Item 22752 || 2

Item 12664 || 2

Item 22753 || 2

Item 12661 || 2

Item 12660 || 2

Item 22754 || 2

Item 12663 || 2

Item 12659 || 2

Item 22750 || 2

Item 22755 || 2

Item 22999 || 2

Item 40049 || 2

Item 12883 || 2

Item 100008 || 2

Item 23227 || 5

Item 12922 || 5

Item 12210 || 5

:contentReference[oaicite:12]{index=12}

Loja de Equipamentos

Item Custo (Pontos MVP)

Item 15052 || 2

Item 5490 || 5

Item 5363 || 5

Item 22228 || 20

Item 19498 || 20

Item 18574 || 20

Item 2177 || 20

Item 32258 || 25

Item 28565 || 25

Item 19436 || 30

Item 19285 || 35

Item 28531 || 45

Item 460046 || 50

Item 460079 || 50

Item 19380 || 50

:contentReference[oaicite:13]{index=13}

Loja de Visuais

Item Custo (Pontos MVP)

Item 31325 || 10

Item 31331 || 10

Item 31332 || 10

Item 20432 || 10

Item 31205 || 10

Item 20268 || 10

Item 20167 || 10

Item 20175 || 10

Item 20393 || 10

Item 15847 || 10

Item 15889 || 10

Item 19546 || 10

Item 19587 || 10

:contentReference[oaicite:14]{index=14}

Lista de MVPs válidos (Whitelist)

Apenas MVPs desta lista contam Pontos MVP e Ranking: :contentReference[oaicite:15]{index=15}

Clique para expandir a Whitelist

1087, 2094, 1147, 1190, 1086, 1115, 1806, 1511, 1159, 1389, 1150, 1688, 1039, 1980, 1251, 2068, 2194, 1885, 1252, 2131, 1583, 1038, 1046, 1059, 1157, 1957, 1112, 2156, 1373, 1272, 1630, 1623, 1492, 2187, 2188, 1418, 1312, 1785, 2317, 2022, 2087, 2253, 2321, 1929, 1779, 1708, 1956, 2202, 1734, 1685, 1719, 1768, 3757, 2189, 2190, 1658, 2255, 2251, 2319, 1871, 2165, 1751, 2249, 1832, 1874, 1917, 1647, 1649, 1650, 1651, 1648, 1646, 22394, 22404