Tutorial De Npcs

maxmachado
em Tutoriais de Scripting

maxmachado

Empire Server - Administrator
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 08/11/05Posts: 29

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.



Você gostaria de me ter no MSN?? Ta aí! max@empire.com.br

"Pros erros há perdão; pros fracassos, chance; pros amores impossíveis, tempo. De nada adianta cercar um coração vazio ou economizar alma. O romance cujo fim é instantâneo ou indolor não é romance. Não deixe que a saudade sufoque, que a rotina acomode, que o medo impeça de tentar. Desconfie do destino e acredite em você. Gaste mais horas realizando que sonhando, fazendo que planejando, vivendo que esperando, porque embora quem quase morre esteja vivo, quem quase vive já morreu."

velokit

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 17/10/05Posts: 79

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]

FIREWORKS IS REAL

untitled1if6cn4.jpg


Flores feitas por mim sdhuadhs flores........so flores (mais eh a Mão do zero)

semttulo3pj9.jpg

Hyuuga Cyrex~

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 01/12/06Posts: 26

Belo tutorial, muito util. ;]

Jvchequer

"Veni, vidi, vici."
avatar
Lenda
Lenda

INFOS

Grupo: LendaRegistrado: 10/10/05Posts: 2161Char no Tibia: Master Chequer

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*

1271330714-U1306.gif

 

~ Fiz parte da Equipe Xtibia em um tempo que Tibia era minha família. Saudades de todos vocês.

frankli

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/03/07Posts: 42Char no Tibia: Adanzenho - hacked

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??

//Frank~~

Zutun

Ex Coordenador de Design
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/06Posts: 513Gênero: MasculinoChar no Tibia: Under Detax

Nossa Max,Ótimo tuto.

Está de parabéns.

;P

Marcone S. Figueira

Entrada na Equipe de Design: 08/09/2010

Coordenação Design:18/11/2010



 

Saída:12/03/2011

Email: zutun@xtibia.com

Dark Lost

avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 28/05/07Posts: 217Char no Tibia: Breiak

Otimo Tutorial

Parabens

Abraço




Para os pássaros Deus deu duas asas, para o homem duas rodas
Quatro rodas transportam um corpo, duas rodas libertam um espírito.

ppL | BrK Macaco =)
Recruted ppL Clan Server in Counter-Strike Brasil

Brunou

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/08/06Posts: 31

Otimo tuto vlw







--------