Ir para conteúdo
Entre para seguir isso  
Longhart

NPCs e suas utilidades

Recommended Posts

Longhart    16
Longhart

Olá pessoal da OtBr, senhores scripters.

 

 

 

Primeiramente quero dizer que, não vou lhe dar peixes, vou lhes ensinar a pesca-los, portanto se você quer o bola ao invés da massa e do forno, prefiro que vá na padaria e compre. Mas lembre-se, você gastará seu precioso dinheiro em algo que você poderá aprender a fazer de graça. Não vou lhes ensinar a fazer bolo, e muito menos a pescar, mas vou ensina-los sobre NPCs!

 

O que é um NPC? a abreviação NPC vem do inglês Non-Playable-Character, traduzindo para o português personagem não jogável. Certo, mas para que você precisa saber disso? Pelo simples fato de entender que ele será um personagem não jogável, e que os jogadores não poderão controla-lo. Mas você, senhor scripter, sim poderá controla-lo através do script.

 

E o que um NPC faz ou pode vir a fazer? Tudo que você souber configurar é bem-vindo. Você pode fazê-lo tanto mudar o nome de um personagem, quanto manda-lo para um lugar dependendo de algumas condições e itens que você possui. Mas lembre-se, nem tudo é bom para se fazer em um NPC, afinal, ele não é um Deus amenos que você queira. Um NPC que vive na cidade não seria capaz de fazer você subir 100 leveis sem mais nem menos, afinal, ele é só um simples NPC.

 

Pense também, que NPCs representam seres humanos, e tem as mesmas capacidades que um ser humano, claro, se tratando de tibia, as possibilidades aumentam.

 

Vamos partir para o script, lembrando que você precisa ter uma noção sobre script em LUA antes de prosseguir com o tutorial. Vou citar apenas as ferramentas mais importantes e mais usadas em NPCs, dependendo de sua necessidade.

 

Vamos falar sobre talkState[talkUser]

 

Essa é uma função de fluência, uma variável, e você poderá usa-la de acordo com sua necessidade, ela servirá para dar continuidade a um diálogo entre jogador e NPC, no caso de responder yes ou no por exemplo.

 

if msgcontains(msg, "one") then

talkState[talkUser] = 1

selfSay("Yes or No?", cid)

if msgcontains(msg, "yes") and talkState[talkUser] == 1 then

selfSay("Thanks.", cid)

elseif msgcontains(msg, "no") and talkState[talkUser] == 1 then

selfSay("Thanks anyway", cid)

end

end

 

Nesse caso, se o jogador dizer "one" então a talkState será 1 e o npc dirá yes or no?

no segundo caso, o script dará continuidade ao que o jogador deve fazer, que é responder sim ou não! Acontece que, se o jogador dissesse yes ou no antes de dizer one, o npc não responderia! Por quê? Pelo simples fato de que a variável talkstate[talkuser] não é 1, e sim 0 ou -1. Você pode usar essa variável para qualquer tipo de dialogo, mas tome cuidado. Sempre que o player perder a chance de continuar uma fala, use talkState[talkUser] = 0, para que ele não retorne a dizer yes ou no para o npc novamente depois de quebrar o dialogo. É importante ressaltar que a talkState[talkUser] é como a memória RAM do computador, quando você para de conversar com o NPC essa variável não permanece com o ultimo valor mas sim como 0 ou -1. Você também poderá fazer um sistema básico de inteligência artificial para o NPC usando essa variável, mas é algo que não vou entrar em detalhes nesse tutorial.

 

Storage Values

 

Outro comando muito usado em NPCs é o getPlayerStorageValue(cid, 1001, 1) os números são meros exemplos, e também setPlayerStorageValue(cid, 1001, 1).

Esses são mais usados em quests, o primeiro para verificar se tal variável do jogador é x, e a outra é para transformar a variável do jogador em x, onde x é um número qualquer.

 

Barco

Para npcs de barco, doTeleportThing(cid, posx, posy, posz).

 

Vender/Comprar

 

Para npcs de venda, use o arquivo xml do npc, se não souber como, use os NPCs do OT como exemplo e faça do mesmo modo.

Addons

 

Outro tipo de npc muito pedido é o de addons, que não é muito difícil de fazer, você pode até customizar os itens necessários, isso é interessante. Mas não ensinarei como faze-lo nesse tutorial. Mas fica a dica, você usará:

 

getPlayerItemCount(cid, itemid) -- Para saber se o player tem o item tal, e se tem mais, menos ou igual a x.

 

doPlayerRemoveItem(cid, itemid, count, subtyp) -- Para remover o item x e quantos desse item do jogador.

 

Spells

 

Os NPCs para vender spells não são muito usados, mas ainda sim vou citar sobre duas funções:

 

doPlayerLearnInstantSpell(cid, name)

getPlayerLearnedInstantSpell(cid, name)

 

A primeira é sobre ensinar o jogador uma magia de acordo com o nome da magia, por exemplo "Light Healing", "Berserk", "Enchant Spear" etc.

E a segunda é sobre verificar se o player tem a spell x, por exemplo:

if getPlayerLearnedInstantSpell(cid, light healing) == TRUE then

 

Você usará TRUE e FALSE para saber se o player tem (TRUE) ou não tem (FALSE) a spell.

 

Promotion

 

No caso de NPC de promotion, você deverá usar:

 

getPlayerLevel(cid, level) -- Para verificar o level do jogador.

getPlayerPromotionLevel(cid) -- Para saber se o player está promovido para MS, EK, RP ou ED.

setPlayerPromotionLevel(cid, level) -- Para promover o player para o level x de sua vocação. não promovido significa 0, e promovido significa 1.

 

 

 

 

Final

 

Espero que meu tutorial mal formatado e mal explicado possa abrir a cabeça de alguns de vocês em relação a NPCs, que parece um bixo de 7 cabeças mas na verdade não é.

Compartilhar este post


Link para o post
Willbhor    18
Willbhor

Ótimo tutorial! Aprovado & Movido.

Compartilhar este post


Link para o post
Willbhor    18
Willbhor

@Caipora123 Como ele disse, o tutorial é pra quem já tem um conhecimento sobre LUA.

Compartilhar este post


Link para o post
Willbhor    18
Willbhor
@Will Oliveira

 

pórem ele cito nome de dues comesso fala nada com nada não sei oque aconteceu mais só acho que ele se precipto antes de cria topico.

Não entendi oque você quis dizer '-'

Compartilhar este post


Link para o post
Longhart    16
Longhart
Texto porem diz nada com nada poderia ter argumentado cosas mais importantes em relação a NPC sem codigos. Poderia ter formatado melhor ou até mesmo postado imagens ou videos da sua autoria. Mais valeu a intenção.

 

Sim, eu concordo com você, eu deveria ter explicado mais sobre os códigos e exemplos práticos, mas prometo que vou melhorar, quem sabe até fazer umas vídeo aulas? Obrigado por ler e espere por mais tópicos.

 

@Caipora123 Como ele disse, o tutorial é pra quem já tem um conhecimento sobre LUA.

 

Mesmo com conhecimento prévio em LUA, eu poderia citar mais partes importantes dos NPCs, mas pretendo fazer isso em vídeo que pode ficar melhor. Uma dúvida, se eu for postar os vídeos de scripting, pode ser nessa área mesmo? E deverei postar todos juntos ou criar novos tópicos conforme saem os vídeos? Obrigado.

Editado por Longhart

Compartilhar este post


Link para o post
Willbhor    18
Willbhor
Mesmo com conhecimento prévio em LUA, eu poderia citar mais partes importantes dos NPCs, mas pretendo fazer isso em vídeo que pode ficar melhor. Uma dúvida, se eu for postar os vídeos de scripting, pode ser nessa área mesmo? E deverei postar todos juntos ou criar novos tópicos conforme saem os vídeos? Obrigado.

Sim, é nessa área mesmo, se os vídeos forem sobre o mesmo assunto poste no mesmo tópico, mas se forem tutorias de assuntos diferentes poste em tópicos separados.

Compartilhar este post


Link para o post
iuniX    4
iuniX

Achei fraco e mal explicado. Você não explica o conceito básico dos NPCs, você simplesmente passa algumas funções que geralmente são usada neles.

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×