Juan Meissner 9 Posted May 2, 2016 Olá pessoal, eu estou precisando de um recurso no Ragnarok que funcione da seguinte forma. Vamos supor que eu tenho um Mob chamado Minério, ele fica parado como se fosse uma planta azul ou verde! Esse Mob só poderá ser atacado caso em alguns casos: Casos O Jogador deverá equipar o item Picareta para conseguir atacar o monstro! O Jogador deverá ser da profissão Minerador para poder atacar o monstro! (Exemplo:) if($ProfName$[ProfID] == "Minerador"){dispbottom "Você pode atacar este monstro.";}else{dispbottom "Você não pode atacar este monstro.";}end; Agora vou postar o meu script para vocês entenderem e ver onde pode estar errado! hotel,110,173,5 script Testador#1 899,{ //areamonster "hotel",0,0,200,200,"Teste",1907,500; mes "[ Testador ]"; if(QuestAtk == 0) { set QuestAtk,1; monster "hotel",116,167,"--ja--",2600,1; } if(QuestAtk == 1) mes "Use um ataque basico no monstro."; if(QuestAtk == 2) mes "Use uma skill no monstro."; if(QuestAtk == 3) mes "Parabens você usou uma skill."; mes "Atual: " + QuestAtk; if(select("- Resetar:- Nada")==2) close3 "Até mais.", "[ Testador ]"; set QuestAtk,0; close3 "Quest resetada..", "[ Testador ]"; OnKilMinerio1: areamonster $mineriomapasSpawn$[rand(0, (getarraysize($mineriomapasSpawn$)-1))],0,0,1000,1000,"--ja--",IDmob,1,"OnKilMinerio1"; set .minerio1,rand(1,100); if (.minerio1 > 1) && (.minerio1 <= 10){ getitem 625,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(625)+""; } if (.minerio1 > 11) && (.minerio1 <= 20){ getitem 1002,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(1002)+"!!"; } if (.minerio1 > 21) && (.minerio1 <= 30){ getitem 1010,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(1010)+"!!"; } if (.minerio1 > 31) && (.minerio1 <= 40){ getitem 909,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(909)+"!!"; } if (.minerio1 > 41) && (.minerio1 <= 50){ getitem 910,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(910)+"!!"; } if (.minerio1 > 51) && (.minerio1 <= 60){ getitem 911,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(911)+"!!"; } if (.minerio1 > 61) && (.minerio1 <= 70){ getitem 1011,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(1011)+"!!"; } if (.minerio1 > 71) && (.minerio1 <= 80){ getitem 990,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(990)+"!!"; } if (.minerio1 > 81) && (.minerio1 <= 90){ getitem 991,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(991)+"!!"; } if (.minerio1 > 91) && (.minerio1 <= 98){ getitem 993,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(993)+"!!"; } if (.minerio1 == 99){ getitem 7232,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(757)+"!!"; } if (.minerio1 == 100){ getitem 6104,1; dispbottom "Parabéns, você ganhou 1 "+getitemname(6104)+"!!"; end; } OnInit: setarray $mineriomapasSpawn$, "under_dun00", "under_dun01", "under_dun02", "unknown00_2", "unknown00_3", "unknown00_4", "mt_8-1"; for(set .@i,0; .@i < getarraysize($mineriomapasSpawn$); set .@i,.@i+1) areamonster $mineriomapasSpawn$[rand(0, (getarraysize($mineriomapasSpawn$)-1))],0,0,1000,1000,"--ja--",2372,4,strnpcinfo(0)+"::OnKilMinerio1"; end; OnPCAttackMobEvent: if(@AtkID == 2372) { //dispbottom "Teste: "+@AtkID+" - "+@AtkDano+" - "+(@AtkAlvo ? "Monstro":"Player")+" - "+(@AtkTipo ? @AtkTipo:"Fisico"); if(QuestAtk == 1 && @AtkTipo == 0) set QuestAtk,2; if(QuestAtk == 2 && @AtkTipo != 0) set QuestAtk,3; } if(@AtkAlvo) { if(@AtkID == 2372) { if($ProfName$[ProfID] == "Minerador"){ dispbottom "Você pode minerar."; } else { dispbottom "Você não é minerador."; mobheal @AtkUnit, 2, 0; } } } end; } Obrigado gente! Quote Share this post Link to post Share on other sites
0 Felipe 4 Posted June 27, 2016 (edited) Como Jason em partes : 1ª Verificação ao atacar. Eu dei uma lida no manual, e não achei OnPCAttackMobEvent, fiquei curioso e joguei no google e achei o tópico de release desse comando no rAthena: https://rathena.org/board/topic/76358-label-onpcattackmobevent/ (Não sei se pode postar links de la aqui, ou vice-versa, por favor moderador apague se for contra as regras.) No tópico diz: It works ONLY in the maps with the mapflag "attackmobevent". Ou seja só funciona APENAS em mapas com a mapflag "attackmobevent" Então se você adicionar isso no seu script: mapname<TAB>mapflag<TAB>attackmobevent Deve funcionar. 2ª Se esta com a arma equipada: Vendo a doc achei essa função para verificar se ele tem o item picareta pelo id: getequipid Um pouco mais abaixo vemos que da pra verificar o id da arma, então temos: EQI_HAND_R (4) Verificar mão direita que é pra armas logo: getequipid(4) if(@AtkID == 2372 && getequipid(4) == ID_PICARETA){ dispbottom " Atacou o monstro"; }else { dispbottom "Você não pode"; } Acredito que seja por aí, não vai fugir disso eu ACHO. 3ª Sintaxe: Eu não manjo muito da sintaxe do emulador, mas falando do GCC(compilador de C) tem coisas que ele deixa passar, mas talvez podem dar erro de lógica, acho que isso acontece no emulador também, então essa parte : if (.minerio1 > 31) && (.minerio1 <= 40) você poderia deixar assim: if (.minerio1 > 31 && .minerio1 <= 40){ //Código } 4ª Dúvida minha: Essa label: OnKilMinerio1: Foi você que fez ? Caso sim, você deixou adicionou ela em outro script ? Edited June 27, 2016 by Felipe Quote Share this post Link to post Share on other sites
Olá pessoal, eu estou precisando de um recurso no Ragnarok que funcione da seguinte forma.
Casos
Agora vou postar o meu script para vocês entenderem e ver onde pode estar errado!
Share this post
Link to post
Share on other sites