//===== Ragnarok Script ====================================== //= Euphy's Quest Shop //===== By: ================================================== //= Euphy [Mihael Tradução] //===== Versão Atual: ======================================== //= 1.7 //===== Compatível com: ====================================== //= Cronus/brAthena/rAthena/Hercules //===== Descrição: =========================================== //= A dynamic quest shop based on Lunar's, with easier config. //= Includes support for multiple shops & cashpoints. //= Item Preview script by ToastOfDoom. //===== Tradução: ============================================ //= Um sistema de quest shop dinâmico baseado no Lunar's, é //= bem fácil de se configurar. //= Inclui suporte a multiplos shoppings e cashpoints. //= Visualizador de itens criado por ToastOfDoom. //============================================================ // Shop NPCs -- Fornecendo nenhum argumento exibe todo o menu. // callfunc "qshop"{,{,{,...}}}; //============================================================ prontera,164,203,6 script Quest Shop#1 4_M_MOCASS2,{ callfunc "qshop"; } // Núcleo da Script //============================================================ - script quest_shop -1,{ function Add; function Chk; function Slot; function A_An; OnInit: sleep2 10; // ----------------------------------------------------------- // Configurações básicas da loja. // ----------------------------------------------------------- set .Announce,1; // Mandar mensagem global ao terminar uma quest? (1: sim / 0: não) set .ShowSlot,1; // Mostrar Slots dos Itens? (2: todo equipamento / 1: somente aqueles que possuem slot maior que 0 / 0: nunca) set .ShowID,0; // Mostrar ID dos Itens? (1: sim / 0: não) set .ShowZeny,0; // Mostrar Custo de Zenys, caso exista? (1: sim / 0: não) set .MaxStack,100; // Número máximo de itens de quest que podem ser comprados ao mesmo tempo. // ----------------------------------------------------------- // Variável de Pontos - requisição opcional. // setarray .Points$[0],"",""; // ----------------------------------------------------------- setarray .Points$[0],"#CASHPOINTS","Cash Points"; // Exemplo: Variável com CashPoints. // ----------------------------------------------------------- // Shop IDs - para adicionar lojas, siga a lógica desta variável. // setarray .Shops$[1],"",""{,...}; // ----------------------------------------------------------- setarray .Shops$[1],"Elmos","Armas","Outros"; // ----------------------------------------------------------- // Quest -- NÃO use um item como recompensa mais de uma vez! // Add(,,, // ,, // ,{,...}); // ----------------------------------------------------------- // --- Quest Elmos Add(1,5022,1,0,0,7086,1,969,10,999,40,1003,50,984,2); Add(1,5032,1,0,0,1059,250,2221,1,2227,1,7063,600); Add(1,5027,1,0,0,2252,1,1036,400,7001,50,4052,1); Add(1,5045,1,0,0,2252,1,1054,450,943,1200); // --- Quest Armas Add(2,1224,1,0,0,7297,30,969,10,999,50,714,10); Add(2,1225,1,0,0,7292,30,969,10,999,50,714,10); // --- Quest Outros Add(3,531,1,3,0,512,1,713,1); Add(3,532,1,3,0,513,1,713,1); Add(3,533,1,3,0,514,1,713,1); Add(3,534,1,3,0,515,1,713,1); // ----------------------------------------------------------- sleep2 10; set .menu$,""; for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1) { set .menu$, .menu$+.Shops$[.@i]+":"; npcshopdelitem "qshop"+.@i,909; } end; OnMenu: set .@size, getarraysize(@i); if (!.@size) set .@i, select(.menu$); else if (.@size == 1) set .@i, @i[0]; else { for(set .@j,0; .@j<.@size; set .@j,.@j+1) set .@menu$, .@menu$+.Shops$[@i[.@j]]+":"; set .@i, @i[select(.@menu$)-1]; } deletearray @i[0],getarraysize(@i); if (.Shops$[.@i] == "") { message strcharinfo(0),"Um erro ocorreu, tire print desta tela e envie aos administradores do servidor."; end; } dispbottom "Selecione um item por vez."; callshop "qshop"+.@i,1; npcshopattach "qshop"+.@i; end; OnBuyItem: // .@q[] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... } setarray .@q[0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]); copyarray .@q[3],getd(".q_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+.@q[0])); set .@q[2],.@q[1]*.@q[3]; if (!.@q[2] || .@q[2] > 30000) { message strcharinfo(0),"Você não pode comprar "+getitemname(.@q[0])+"."; end; } mes "[Quest Shop]"; mes "Recompensa: ^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+Slot(.@q[0])+"^000000"; mes "Requerimentos:"; if (.@q[4]) mes " > "+Chk(Zeny,.@q[4]*.@q[1])+(.@q[4]*.@q[1])+" Zeny^000000"; if (.@q[5]) mes " > "+Chk(getd(.Points$[0]),.@q[5]*.@q[1])+(.@q[5]*.@q[1])+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+(.@q[5]*.@q[1])+")^000000"; if (.@q[6]) for(set .@i,6; .@i "+Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000"; next; setarray @qe[1], getiteminfo(.@q[0],5), getiteminfo(.@q[0],11); if (((@qe[1] & 1) || (@qe[1] & 256) || (@qe[1] & 512)) && @qe[2] > 0) set .@preview,1; addtimer 1000, strnpcinfo(0)+"::OnEnd"; while(1) { switch(select(" ~ Fazer ^0055FF"+getitemname(.@q[0])+"^000000:"+((.@preview && !@qe[6])?" ~ Visualizar...":"")+": ~ ^777777Cancelar^000000")) { case 1: if (@qe[0]) { mes "[Quest Shop]"; mes "Sinto muito, mas você não possui todos os itens necessários para mim fabricar esta quest."; close; } if (!checkweight(.@q[0],.@q[2])) { mes "[Quest Shop]"; mes "^FF0000Você necessita de "+(((.@q[2]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" Capacidade de peso adicional para concluir esta negociação.^000000"; close; } if (.@q[4]) set Zeny, Zeny-(.@q[4]*.@q[1]); if (.@q[5]) setd .Points$[0], getd(.Points$[0])-(.@q[5]*.@q[1]); if (.@q[6]) for(set .@i,6; .@i "+strcharinfo(0)+" acabou de criar o item [ "+((.@q[2] > 1)?.@q[2]+"x "+getitemname(.@q[0]):(getitemname(.@q[0])))+" ].",bc_all,0xFF1493; specialeffect2 699; close; case 2: setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), 1; if (@qe[1] & 1) changelook LOOK_HEAD_BOTTOM, @qe[2]; if (@qe[1] & 256) changelook LOOK_HEAD_TOP, @qe[2]; if (@qe[1] & 512) changelook LOOK_HEAD_MID, @qe[2]; break; case 3: close; } } OnEnd: if (@qe[6]) { changelook LOOK_HEAD_BOTTOM, @qe[3]; changelook LOOK_HEAD_TOP, @qe[4]; changelook LOOK_HEAD_MID, @qe[5]; } deletearray @qe[0],7; end; function Add { if (getitemname(getarg(1)) == "null") { debugmes "Recompensa da Quest #"+getarg(1)+" inválida (pulada)."; return; } setarray .@j[0],getarg(2),getarg(3),getarg(4); for(set .@i,5; .@i