Jump to content
  • 0
Sign in to follow this  
Juan Meissner

[AJUDA] Mob com requerimento para atacar

Question

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

 

 

  1. O Jogador deverá equipar o item Picareta para conseguir atacar o monstro!
  2. 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!

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

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 by Felipe

Share this post


Link to post
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.   Restore formatting

  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.

Loading...
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.