Npc Para Server Com Rpg

lucasbro
em NPCs, monsters e raids

lucasbro

Campeão 2º Concurso de Scripting
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 23/04/07Posts: 34

Existem muitas formas de troca, que muita gente não sabe como colocar, geral as pessoas tentam colocar :

 

buy(cid,2455,1,0)
sell(cid,2455,1,0)

 

Mas sempre dava a mesma coisa, ele sempre pega o item sem devolver um....

 

O Script de troca é esse:

 

elseif talk_state == 1 then

if msgcontains(msg, 'yes') then

itemstatus = doPlayerRemoveItem(cid,2379,1)

if itemstatus == 0 then

selfSay('Sorry, you not have this item.')

else

doPlayerAddItem(cid,2148,2)

selfSay('Thanks for this item.')

end

end

talk_state = 0

 

Explicando:

 

Mensagem que o player irá dizer para a troca, no caso, eu fiz um exemplo de uma confirmação.

Esse comando serve para remover o item do player, no caso, uma dagger.

No caso, ai está o tal comando de se o player não tiver o item, ele não trocara o item.

Essa mensagem o NPC falará quando o player não tiver o item para a troca.

Esse comando server para adicionar um item ao player, no caço 2 gps pela dagger.

Essa mensagem o NPC irá falar quando vocês trocarem o item.

 

Importante¹: Se for para adicionar mais de 100 gold tenque colocar 2 comando, exemplo: doPlayerAddItem(cid,2148,43) e doPlayerAddItem(cid,2152,2), no caso o player ganhara 243 gps.

 

Aqui está um exemplo de um NPC de Troca:

 

local focus = 0

local talk_start = 0

local target = 0

local following = false

local attacking = false

 

function onThingMove(creature, thing, oldpos, oldstackpos)

 

end

 

 

function onCreatureAppear(creature)

 

end

 

 

function onCreatureDisappear(cid, pos)

if focus == cid then

selfSay('Good bye then.')

focus = 0

talk_start = 0

end

end

 

 

function onCreatureTurn(creature)

 

end

 

 

function msgcontains(txt, str)

return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))

end

 

 

function onCreatureSay(cid, type, msg)

msg = string.lower(msg)

 

if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then

selfSay('Olá ' .. creatureGetName(cid) .. '! Eu te dou um Demon Shield por um Royal Helmet.')

focus = cid

talk_start = os.clock()

 

elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then

selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')

 

elseif focus == cid then

talk_start = os.clock()

 

if msgcontains(msg, 'troca') or msgcontains(msg,'trade') then

if queststatus == -1 then

selfSay('Você quer trocar um royal helmet por um demon shield?')

talk_state = 1

 

elseif msgcontains(msg, 'exemplo de quest') or msgcontains(msg,'exemplo de quest.') then

selfSay('Você quer trocar um royal helmet por um demon shield?')

talk_state = 2

 

elseif talk_state == 1 then

if msgcontains(msg, 'yes') then

itemstatus = doPlayerRemoveItem(cid,2498,1)

if itemstatus == 0 then

selfSay('Sorry, you not have items.')

else

doPlayerAddItem(cid,2520,2)

selfSay('Thanks for items.')

end

end

talk_state = 0

 

elseif talk_state == 2 then

if msgcontains(msg, 'yes') then

itemstatus = doPlayerRemoveItem(cid,2498,1)

if itemstatus == 0 then

selfSay('Sorry, you not have items.')

else

doPlayerAddItem(cid,2520,2)

selfSay('Thanks for items.')

end

end

talk_state = 0

 

 

elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then

selfSay('Good bye, ' .. creatureGetName(cid) .. '!')

focus = 0

talk_start = 0

end

end

end

 

 

function onCreatureChangeOutfit(creature)

 

end

 

 

function onThink()

 

if (os.clock() - talk_start) > 30 then

if focus > 0 then

selfSay('Next Please...')

end

focus = 0

end

if focus ~= 0 then

if getDistanceToCreature(focus) > 5 then

selfSay('Good bye then.')

focus = 0

end

end

end

 

Agora é so configura como eu disse acima....

 

Agora vou ensinar como o NPC falará com você apenas se você tiver feito alguma quest.

 

Depois de:

	  if (msgcontains(msg, 'hi') and focus == 0) and getDistanceToCreature(cid) < 4

 

Adicione:

and queststatus > 0 then

 

Ficando:

 

	  if (msgcontains(msg, 'hi') and focus == 0) and getDistanceToCreature(cid) < 4 and queststatus > 0 then

 

Emcima adicione:

queststatus = getPlayerStorageValue(cid,2520)

 

Esse é o StorageValue da quest, se você fez ela ou não...

 

Embaixo de:

 

		  elseif string.find(msg, '(%a*)bye(%a*)')  and getDistanceToCreature(cid) < 4 then
		  selfSay('Bye human.')
		  focus = 0
		  talk_start = 0
	  end

 

Adicione:

else

 

selfSay('Você não pode conversar comigo sem fazer a quest')

 

Mensagem que irá aparecer se o player não tiver feito a quest

 

Pronto, estou acabando meu tutorial por aqui, espero ter ajudado as pessoas a fazerem seu server com mais RPG do que o normal.

Darksasuke

@andy_kun
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 20/01/07Posts: 98

uhhh gostei!!! mto bom msm!!!

10!




lucasbro

Campeão 2º Concurso de Scripting
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 23/04/07Posts: 34

Obrigado, estou aqui para ajudar!

Dekooo

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/05/07Posts: 377Char no Tibia: Sirke Amere *( AsTeRa )*

Bom...

Não intendi muitoo

isso ae é um NPC de trca?

tpw voc veio postar um NPC de troca aque?

Bom, se isso é oque realmente estou pensando, voce postou no lugar erradoo

Eu passarei por aqui nesse tópico pra ver se voce respondeu essa pergunta

Voce postou um NPC aqui? Sobre oque é esse tuto? eu li e não intendi

 

SeM MaiS

assinatura bugada, vide sobre mim

lucasbro

Campeão 2º Concurso de Scripting
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 23/04/07Posts: 34

Nesse tutorial estou ensinando a fazer um NPC que troque itens por itens, dinheiro por itens, dinheiro por dinheiro e etc...

 

E também estou ensinando uma função que o NPC só falará com você se você tiver feito uma QUEST!

 

Agora acho que você entedeu...

 

É só ler e reler que você irá entender...

Dekooo

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/05/07Posts: 377Char no Tibia: Sirke Amere *( AsTeRa )*

Hm...então, não seria melhor se voce postar na seção de NPCs?!

Pra ficar mais organizado, eu postaria la!

assinatura bugada, vide sobre mim

lucasbro

Campeão 2º Concurso de Scripting
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 23/04/07Posts: 34

Acho que não, porque eu expliquei as funções direitinho, como se fosse um tutorial!

Jvchequer

"Veni, vidi, vici."
avatar
Lenda
Lenda

INFOS

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

Tópico movido para seção correta.

 

P.S: Muito bom o NPC.

 

See ya

1271330714-U1306.gif

 

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

kaio

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 27/05/06Posts: 31

:blink: ,olha eu entendi dos legocio de troca...mai bem que poderia ser mais explicado,tipo o legocio da quest do npc, que akele 2501? é o id que ele deve ter completo???,o.O explica ai

Nada pra escreve...
Lelelele...

meu orkut, se for me add, manda mensagem!!!MEU PERFIL
meu msn ke-trento@hotmail.com

Sun~*

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 27/10/06Posts: 6

akele numero em queststatus = getPlayerStorageValue(cid,2520) é o storagevalue da quest.. storagevalue é o numero que nao te permite fazer a msm coisa 2 ou mais vezes, tipo numa quest =]

entao ele usou isso pra verificar se vc ja fez ou nao a quest.. mude esse numero conforme o storagevalue da quest que vc quer que o player faça :D

 

@topic

otimo script

se o cara for criativo da pra faze altas trocas \o/