Ir para conteúdo

Tutorial De Npcs


maxmachado

Posts Recomendados

Tutorial de NPCs!

Conhecendo a verdadeira origem dos NPCs!

Índice:

Explicaremos:

focus

talk_start

following

atacking

Variáveis

Variáveis que indicam a conversa

Storage Value em NPCs

Algumas funções

focus

O focus está presente em vários lugares do NPC:

No início:

focus = 0

Nas conversas:

if msgcontains(msg, 'spear') and focus == cid then

Na função de andar:

if focus == 0 then

O focus indica quando estamos(ou se estamos) interagindo com o NPC.

focus = 0

Quando o focus for 0 quer dizer que não estamos interagindo com o NPC.

focus = cid

Quando o focus for cid quer dizer que estamos interagindo com o NPC.

Quer um exemplo?

Dêem uma olhada no início de conversa de algum NPC(hi).

if ((string.find(msg, '(%a*)hi(%a*)')) and (focus == 0)) and getDistanceToCreature(cid) < 3 then

selfSay('Welcome to the finest weaponshop in the land, ' .. creatureGetName(cid) .. '!')

focus = cid

talk_start = os.clock()

end

O if(olhar tutorial "Explicando os 'if's") está indicando que se o player falar hi e o focus for 0(não está falando com ninguem) o NPC fará as seguintes funções acimas inclusive transformar o focus em cid(indica que está falando com alguem).

talk_start

O talk_start também está presente em várias partes do NPC.

Vejam o exemplo lá em cima(explicando o focus)

talk_start = os.clock()

Ele também está presente em todas as funções de conversa.

if msgcontains(msg, 'offers') and focus == cid then

selfSay('My offers are weapons, only.')

talk_start = os.clock()

end

O talk_start indica se estamos conversando com o NPC.

Então quando o player diz "hi" e o focus for 0, o NPC transforma o talk_start em os.clock

E quando o player diz "bye" e o focus for cid, o NPC transforma o talk_start em 0.

(Mas se o talk_start é 0, como vou falar "hi" com o NPC?)

Simples. É que quando o player fala "hi" há uma excessão.

Perceba no início de interação com o NPC(hi)

if ((string.find(msg, '(%a*)hi(%a*)'))

Quando há esse string.find quer dizer que o NPC responderá independentemente do talk_start.

Quando o talk_start for os.clock geralmente usa-se o:

if msgcontains(msg, 'mensagem dã')

Following

Você geralmente só encontra o "following" no início do script.

following = false

O following indica se o NPC vai seguir o player que está falando com ele(focus = cid).

Atacking

Você geralmente só encontra o "atacking" no início do script.

atacking = false

O atacking indica se o NPC vai atacar o player que está falando com ele(focus = cid).

Variáveis

Todo mundo já ouviu falar em variáveis na matemática(suponho) que geralmente são a ##### dos x e y.

Cada uma das letras indica um número, pois com os NPCs é semelhante ou quase igual.

As variáveis geralmente indicam funções.

Vamos pegar um exemplo de variável:

randmove = math.random(1,20)

A variável é o randmove que significa math.random(1,20)(sortiar um número de 1 a 20).

Então toda vez que aparecer a palavra randmove(variável) no script, o NPC irá sortiar um número de 1 a 20.

As variáveis não servem só para indicar funções, também servem para indicar números e palavras.

Exemplo:

if msgcontains(msg, 'carlin sword') and focus == cid then

item = 2395

price = 473

selfSay('Do you want to buy one of the excellent carlin swords for ' .. price .. ' gold?')

talk_start = os.clock()

end

if string.find(msg, '(%a*)yes(%a*)') and focus == cid then

buy(cid,item,1,price)

talk_star = os.clock()

end

Viu as variáveis aparecendo aí como números? ^^

Obs.: Para usar as variáveis de números/palavras em falas do NPC você tem que fazer assim:

SelfSay(' ' .. variável .. ' ')

Variáveis que indicam conversa

Variáveis vocês já sabem o que são, então.

Vamos aprender a usar as variáveis que indicam a conversa.

Geralmente as variáveis de conversa são denominadas: talk_count, talk_state, settalk

Claro, não é obrigatório possuir esses nomes.

Então vamos a um exemplo:

if msgcontains(msg, 'crystal') and focus == cid then

talkset = 1

selfSay('Do you want to change 100 platinum coins for 1 crystal coin?')

talk_start = os.clock()

end

if talkset == 1 then

if msgcontains(msg, 'yes') and focus == cid then

talkset = 0

itemstatus = sell(cid,2148,100,0)

if itemstatus == -1 then

selfSay('You don\'t have enough money!')

else

buy(cid,2152,1,0)

talk_start = os.clock()

end

end

end

Quando o player falar "crystal" o NPC vai indicar que o talkset é 1.

O if embaixo(ler tutorial "Explicando os 'if's") indica que se o talkset for 1 e a fala do player for yes o NPC fará as seguintes funções.

Obs.: Lembrem, mais 1 "if", mais um "end".

Storage Value em NPCs

Muita gente conhece o Storage Value de actions para quests, eles indicam dentro do script do player se ele já fez a quest com o Storage Value determinado.

Nos NPCs é semelhante, ou melhor, igual.

Um exemplo:

if msgcontains(msg, 'quest') and focus == cid then

queststatus = getPlayerStorageValue(cid,1234)

if queststatus == -1 then

buy(cid,1452,1,0)

setPlayerStorageValue(cid,1234,1)

else

selfSay('Você já fez a quest')

talk_start = os.clock()

end

end

(se você ainda não leu a ##### do tutorial "Explicando os 'if's", sugiro ler agora)

queststatus é uma variável que determina a função de verificar o Storage Value no player.

Então essa funçao significa que se o player não tiver feito a quest(queststatus == -1) o NPC fará as seguintes funções e se o player já tiver feito a quest o NPC falará "Você já fez a quest".

Algumas funções

Ao decorrer do tópico eu expliquei algumas funções, então esse sub-título era desnecessário ^^.

Creditos:

- maxmachado

- Luis Furioso

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 5 months later...

Bom tuto explica o que fala nos scripts dos NPC

Variaveis de conversa

focus

eh bem util

--------------------------------------------------------------------

ninguêm manda na minha vida

Sou Npc maker[/color]

Link para o comentário
Compartilhar em outros sites

  • 6 months later...

Olá Xtibiano,

 

Parabéns, seu tutorial foi aprovado.

 

Estarei movendo ele para a área de tutoriais.

 

Obrigado por trazer conteúdo para o Xtibia.com e espero que continue com o ótimo trabalho.

 

 

Atenciosamente,

JV Chequer *Diretor Xtibia.com*

Link para o comentário
Compartilhar em outros sites

CAra nao entendi muito nao masi ta otimo so me explica uam coisa meu npc ele repsonde muito rapido tpw eu falo hi e ele respondi ta eu falo o nome do iten ele nao vendi e dai depois eu fali hi ele fala tudo di novo mais as veses da de crompa pq

tpw so o meu npc q eu adicionei os npcs do serve de começo nao dao esse bug oqq eu faço??

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...
  • 3 weeks later...
×
×
  • Criar Novo...