blackneto

GUIA E ORIENTAÇÃO
[Resolvido] Primeiro NPC

12 posts neste tópico

Bom, na questão de scripts sou iniciante, olhando os tutorias do fórum entre vídeo-aulas,tutorias,etc... Eu criei um NPC bem básico estilo "Teleportador" (Claro que não chega nem aos pés -.-), Então, gostaria de receber opiniões sobre o script e nas melhorias que poderiam ser feitas até então por que mesmo iniciante eu sei que o script está construído de forma grosseira e que poderia ser melhorado em diversas coisas.

Agradeço desde já as opiniões e sugestão de ambos os membros ;) .

 

Estes Npc's já foram testados no meu emulador OFF do brAthena. ( Versão OLD )

 

 

 

 

prontera,152,174,3 script Lays 864,{


set @npc$,"[Lays]";


mes @npc$;
mes "Olá? "+strcharinfo(0)+", Posso ajudar em alguma coisa?";
next;
menu "Sim",sim,"Não, obrigado.",-;
close;


sim:
mes @npc$;
mes "Ok, vou te levar pra um passeio";
next;
mes @npc$;
mes "Escolha onde deseja ir";
next;
menu "Prontera",prt,"Morroc",morroc,"Catar Ygg",ygg;
prt:
mes @npc$;
mes "Então deseja ir a prontera?";
next;
mes @npc$;
mes "Te levarei até la, boa sorte";
next;
warp "prontera",150,150;
close;
morroc:
mes @npc$;
mes "Então deseja ir a morocc?";
next;
mes @npc$;
mes "Te levarei até la, boa sorte";
next;
warp "morocc",156,93;
close;
ygg:
mes @npc$;
mes "Então deseja catar ygg?";
next;
mes @npc$;
mes "Te levarei até la, boa sorte";
next;
warp "prt_maze03",0,0;
close;
}

 

 

 

 

Bom, estou editando o post para adicionar mais um "NPC TESTE", analisem e me digam o que acham por favor :3.

 

 

prontera,156,174,5	script	Dorgas	1388,{

set @npc$,"[Dorgas Celestial]";
	
	mes @npc$;
	mes "Olá, meu nome é Dorgas Celestial";
	mes "Eu sou um poring de elite, e estou aqui a pedido do ADM.";
	next;
	mes @npc$;
	mes "Deseja saber qual é a minha missão?";
	next;
	menu "Sim",sim,"Não, obrigado.",nao;
	close;
	
nao:	
	mes @npc$;
	mes "Ok, volte quando quiser saber.";
	close;
sim:
	mes @npc$;
	mes "Tudo bem, então vou lhe contar!";
	next;
	mes @npc$;
	mes "Eu moro na Poringlândia, e todos os dias milhares de iniciantes vem até o nosso querido lar";
	mes "E acabam matando nossos companheiros em busca de aumentar seu nivel e força.";
	next;
	mes @npc$;
	mes "Então o chefe pediu para vir e oferecer a vocês uma trégua...";
	mes "Eu darei uma pequena missão a você, e se concluir eu lhe darei um item especial.";
	next;
	mes @npc$;
	mes "Você aceita?";
	next;
	menu "Claro, agora mesmo!",squest,"Não,Irei continuar massacrando vocês!",-;
	close;
	
squest:
		mes @npc$;
		mes "Ok, eu preciso que me traga os seguinte itens:";
		mes " - 5 Felpas";
		mes " - 5 Plumas";
		mes " - 5 Plumas de Ave";
		next;
		mes @npc$;
		mes "Você já possui os itens?";
		next;
		menu "Sim",-,"Ainda não",naotem;
			if(countitem(914)<5)goto semitem;
			if(countitem(916)<5)goto semitem;
			if(countitem(949)<5)goto semitem;
		mes "Você me trouxe todos, então como prometido...";
		mes "aqui está sua recompensa, parabens!";
		getitem 5035,1;
		delitem 914,5;
		delitem 916,5;
		delitem 949,5;
		close;

semitem:
		mes @npc$;
		mes "Hum, vejo que você ainda não tem os itens necessários";
		mes "Volte quando consegui-los.";
		close;
		
naotem:
		mes @npc$;
		mes "Ok, volte quando consegui-los";
		close;
		} 

 

 

 

OBS¹: São Npc's simples e sem complexidade alguma, mais quem ta começando sabe que isso é japonês pra ribeirinho.
OBS²: Sou novo no fórum, eu não sei se está certo por dentro do Spoiler, se tiver algum erro nisso ou no local da postagem por favor, me avisem

Editado por blackneto
0

Compartilhar este post


Link para o post
Compartilhar em outros sites
prontera,156,174,5 script Dorgas 1388,{
 
set @npc$,"[Dorgas Celestial]";
 
mes @npc$;
mes "Olá, meu nome é Dorgas Celestial";
mes "Eu sou um poring de elite, e estou aqui a pedido do ADM.";
next;
mes @npc$;
mes "Deseja saber qual é a minha missão?";
next;
if(select("Sim:Não, obrigado.") == 2) {
mes @npc$;
mes "Ok, volte quando quiser saber.";
close;
}
mes @npc$;
mes "Eu moro na Poringlândia, e todos os dias milhares de iniciantes vem até o nosso querido lar";
mes "E acabam matando nossos companheiros em busca de aumentar seu nivel e força.";
next;
mes @npc$;
mes "Então o chefe pediu para vir e oferecer a vocês uma trégua...";
mes "Eu darei uma pequena missão a você, e se concluir eu lhe darei um item especial.";
next;
mes @npc$;
mes "Você aceita?";
next;
if(select("Claro, agora mesmo!:Não,Irei continuar massacrando vocês!") == 2) close;
mes @npc$;
mes "Ok, eu preciso que me traga os seguinte itens:";
mes " - 5 Felpas";
mes " - 5 Plumas";
mes " - 5 Plumas de Ave";
next;
mes @npc$;
mes "Você já possui os itens?";
next;
if(select("Sim",-,"Ainda não") == 2) {
mes @npc$;
mes "Ok, volte quando consegui-los";
close;
}
if( countitem(914) < 5 && countitem(916) < 5 && countitem(949)<5 ) {
mes @npc$;
mes "Hum, vejo que você ainda não tem os itens necessários";
mes "Volte quando consegui-los.";
close; 
}
mes "Você me trouxe todos, então como prometido...";
mes "aqui está sua recompensa, parabens!";
getitem 5035,1;
delitem 914,5;
delitem 916,5;
delitem 949,5;
close;
} 

Fiz uma modificações simples de fácil entendimento, dá pra tu ter uma noção fácil e rápida comparando.

Editado por Axl
0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma dica, não use várias pra tudo isso suja o código e fica em muitos casos ruim pra entender, em nome de npc o nom seria por em uma string normal:

 set @npc$,"[Dorgas Celestial]";
mes "[Dorgas Celestial]";

Outra dica seria a tabulação do código e o deixa bem fácil de o compreender.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma dica, não use várias pra tudo isso suja o código e fica em muitos casos ruim pra entender, em nome de npc o nom seria por em uma string normal:

 set @npc$,"[Dorgas Celestial]";
mes "[Dorgas Celestial]";

Outra dica seria a tabulação do código e o deixa bem fácil de o compreender.

 

Qual a diferença de usar variável ou não aí? Não tem nada de sujo nisso.. Mas certamente a forma mais viável de fazer isso é:

mes set(.nome$,"["+strnpcinfo(0)+"]");

Tem suporte até a hexadecimal (colocar cor no título do npc) fazendo dessa forma, só colocar fora dos " " do strnpcinfo(). ;)

 

Uma coisa eu concordo, label, isso sim suja o script e se torna algo feio ao ler, aprenda a manusear o menus dinâmicos, selects, switchs, você ganhará mais com isso, sugiro que procura a respeito e em caso de dúvidas, venha pedir o suporte.

 

Abraços!

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma dica, não use várias pra tudo isso suja o código e fica em muitos casos ruim pra entender, em nome de npc o nom seria por em uma string normal:

 set @npc$,"[Dorgas Celestial]";
mes "[Dorgas Celestial]";

Outra dica seria a tabulação do código e o deixa bem fácil de o compreender.

Obrigado Hyrosima, se não for muita burrice minha, o que seria "Tabulação do código"?

 

 

Qual a diferença de usar variável ou não aí? Não tem nada de sujo nisso.. Mas certamente a forma mais viável de fazer isso é:

mes set(.nome$,"["+strnpcinfo(0)+"]");

Tem suporte até a hexadecimal (colocar cor no título do npc) fazendo dessa forma, só colocar fora dos " " do strnpcinfo(). ;)

 

Uma coisa eu concordo, label, isso sim suja o script e se torna algo feio ao ler, aprenda a manusear o menus dinâmicos, selects, switchs, você ganhará mais com isso, sugiro que procura a respeito e em caso de dúvidas, venha pedir o suporte.

 

Abraços!

Muito obrigado wolf, eu procurei vários tutorias que falassem a respeito porém eles sempre variam muito de versão de emulador ou até mesmo do emulador então eu fiquei bem confuso em relação do que usar, no final das contas eu baixei vários npcs e olhando os tutorias pra saber como eles funcionavam eu tentei usa-los.

mes set(.nome$,"["+strnpcinfo(0)+"]"); // Ainda não aprendi a usar dessa forma, digo por exemplo que, não faço a minima ídeia da função do -> . ( ponto no inicio do comando.

Eu agradeço a paciência.

 

prontera,156,174,5 script Dorgas 1388,{
 
set @npc$,"[Dorgas Celestial]";
 
mes @npc$;
mes "Olá, meu nome é Dorgas Celestial";
mes "Eu sou um poring de elite, e estou aqui a pedido do ADM.";
next;
mes @npc$;
mes "Deseja saber qual é a minha missão?";
next;
if(select("Sim:Não, obrigado.") == 2) {
mes @npc$;
mes "Ok, volte quando quiser saber.";
close;
}
mes @npc$;
mes "Eu moro na Poringlândia, e todos os dias milhares de iniciantes vem até o nosso querido lar";
mes "E acabam matando nossos companheiros em busca de aumentar seu nivel e força.";
next;
mes @npc$;
mes "Então o chefe pediu para vir e oferecer a vocês uma trégua...";
mes "Eu darei uma pequena missão a você, e se concluir eu lhe darei um item especial.";
next;
mes @npc$;
mes "Você aceita?";
next;
if(select("Claro, agora mesmo!:Não,Irei continuar massacrando vocês!") == 2) close;
mes @npc$;
mes "Ok, eu preciso que me traga os seguinte itens:";
mes " - 5 Felpas";
mes " - 5 Plumas";
mes " - 5 Plumas de Ave";
next;
mes @npc$;
mes "Você já possui os itens?";
next;
if(select("Sim",-,"Ainda não") == 2) {
mes @npc$;
mes "Ok, volte quando consegui-los";
close;
}
if( countitem(914) < 5 && countitem(916) < 5 && countitem(949)<5 ) {
mes @npc$;
mes "Hum, vejo que você ainda não tem os itens necessários";
mes "Volte quando consegui-los.";
close; 
}
mes "Você me trouxe todos, então como prometido...";
mes "aqui está sua recompensa, parabens!";
getitem 5035,1;
delitem 914,5;
delitem 916,5;
delitem 949,5;
close;
} 

Fiz uma modificações simples de fácil entendimento, dá pra tu ter uma noção fácil e rápida comparando.

 

Axl, entendi sim. Na verdade, eu queria ter usado esses comandos como Switch ou if(select, a questão é que eu não consegui inserir eles no código, eu tentei de várias formas e sempre dava erro, o npc não falava, não funcionava mais creio que deve ser falta de prática e de entender realmente como funciona.

 

 

Bom no geral, eu agradeço a todos pela ajuda e paciência, eu vou estudar mais essas dicas e funções que me passaram.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tipo, quando falei o uso em nome de npc me refiro na questão que quando se está iniciando a programar no caso dele é bom não querer por variáveis em tudo, o que é simples pode se tornar uma dor de cabeça, ou seja onde ele deixa de prezar pelo simples e funcional para fazer adicionais ainda mais quando se está aprendendo.

 

Isso foi passado a mim quando estava aprendendo lá no eAthena e foi dito pelo meu grande Amigo Tecno Cronus ele me ajudou muito.

 

Claro que o limite de cada lição é ele quem faz...

 

^^ ha outra coisa eu estou muito desatualizado então ainda vivo uma boa parte no passado...

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

A exatos 7 anos atrás eu aprendi essas funções que você não entende nesse seguinte link: http://www.eathena.ws/board/Utilizando-Variveis-t200610.html

Continua funcional, e é muito bem explicado. E sobre sua dúvida, a parte que fala dela:

"." - Uma variável que fica no NPC enquanto o servidor estiver rodando. 
Ex.: .npc$(Variável que irá ser gravada o nome do npc)

;)

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode fazer todas as validações em um único "if"

 

 

squest:
        mes @npc$;
        mes "Ok, eu preciso que me traga os seguinte itens:";
        mes " - 5 Felpas";
        mes " - 5 Plumas";
        mes " - 5 Plumas de Ave";
        next;
        mes @npc$;
        mes "Você já possui os itens?";
        next;
        menu "Sim",-,"Ainda não",naotem;
            if(countitem(914)<5 || countitem(916)<5 || countitem(949)<5) goto semitem;
        mes "Você me trouxe todos, então como prometido...";
        mes "aqui está sua recompensa, parabens!";
        getitem 5035,1;
        delitem 914,5;
        delitem 916,5;
        delitem 949,5;
        close;

 

Utilize as opções:

 

menu "opções",chamadas;

Eu busco utilizar mais estas variáveis quando eu posso reaproveitar chamadas, mas isto é opcional.

 

Utilizo mais esta forma, pois acho mais organizado.

 

switch(select("opção 1","opção 2")){
    case 1:
      //código da opção 1
    case 2:
     //código da opção 2
}

 

Todas são práticas e de fácil entendimento. =)

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

A exatos 7 anos atrás eu aprendi essas funções que você não entende nesse seguinte link: http://www.eathena.ws/board/Utilizando-Variveis-t200610.html

 

Continua funcional, e é muito bem explicado. E sobre sua dúvida, a parte que fala dela:

"." - Uma variável que fica no NPC enquanto o servidor estiver rodando. 
Ex.: .npc$(Variável que irá ser gravada o nome do npc)

;)

Eu dei uma boa olhada no tópico e realmente ele detalha bem sobre o uso das variáveis, bom agora me resta avaliar esses "Novos Conhecimentos" e tentar agrupar na minha cabeça. Vou construir outros npc's e buscar usar cada uma dessas dicas. Valeu Wolf

 

 

pode fazer todas as validações em um único "if"

squest:
        mes @npc$;
        mes "Ok, eu preciso que me traga os seguinte itens:";
        mes " - 5 Felpas";
        mes " - 5 Plumas";
        mes " - 5 Plumas de Ave";
        next;
        mes @npc$;
        mes "Você já possui os itens?";
        next;
        menu "Sim",-,"Ainda não",naotem;
            if(countitem(914)<5 || countitem(916)<5 || countitem(949)<5) goto semitem;
        mes "Você me trouxe todos, então como prometido...";
        mes "aqui está sua recompensa, parabens!";
        getitem 5035,1;
        delitem 914,5;
        delitem 916,5;
        delitem 949,5;
        close;

Utilize as opções:

menu "opções",chamadas;

Eu busco utilizar mais estas variáveis quando eu posso reaproveitar chamadas, mas isto é opcional.

 

Utilizo mais esta forma, pois acho mais organizado.

switch(select("opção 1","opção 2")){
    case 1:
      //código da opção 1
    case 2:
     //código da opção 2
}

Todas são práticas e de fácil entendimento. =D

Eu não sabia que podia-se usar apenas um IF para todos os comandos, nos próximos eu usarei estes comandos. obrigado ;3

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lembrando que nem um desses npc's que eu postei acima são para algum servidor ou algo tipo. Eu estou criando-os para testar esses conhecimentos e comandos.

 

(Não sei se tinha ficado claro, então achei que deveria dizer.)

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo bem amigo, em caso de outras dúvidas, crie outro tópico referente a mesma que o ajudaremos. ;)

 

Boa sorte!

0

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.