Ir para conteúdo

Super Tutorial Sobre Npc


Heitorzin

Posts Recomendados

Motivo do Tópico:Muitas duvidas sobre NPC (quem ajuda lá no fórum de Suporte sabe oque eu estou falando)..

Estou aqui para tentar ajuda-los, e com esse tutorial eu sempre vou estar editando/adicionando coisas novas aqui, e aceito opniões!

Alem de eu criar/editar/arrumar tópicos sobre NPC's eu estou adicionando alguns tutoriais para ficar tudo mais completo!

Versão Padrão: Yurots

Bom, vamos começar:

O principal: Colocando o spawn de NPC

 

-Abra a pasta do seu OTServ

-Vá em data/word

-Procure por npc.xml

-Clicke com o botão direto e vá em "editar"

-Adicione a tag do seu npc depois de:

<?xml version="1.0"?>

<npclist>

-E antes de:

</npclist>

-E adicione a TAG

Exemplo:

<npc name="Npc" x="74" y="220" z="7"/>

Só mude o Npc para o nome do npc que voce queira!

E a cordenada (x,y,z) para a cordenada onde voce queira que este tal npc apareca!!

Fazendo os seus NPC's andarem!

 

-Abra a pasta do seu OTServ

-Vá em data/npc/scripts/lib/npc.lua

-Abra-o

-Entre qualquer função adicione:

function moveRandom(ox,oy,max)

maxx = ox + max

maxy = oy + max

minx = ox - max

miny = oy - max

cx, cy, cz = selfGetPosition()

randmove = math.random(1,50)

if randmove == 1 then

nx = cx + 1

ny = cy

end

if randmove == 2 then

nx = cx - 1

ny = cy

end

if randmove == 3 then

ny = cy + 1

nx = cx

end

if randmove == 4 then

ny = cy - 1

nx = cx

end

if randmove >= 5 then

nx = cx

ny = cy

end

if((nx < maxx) and (ny < maxy) and (nx > minx) and (ny > miny)) then

moveToPosition(nx, ny, cz)

end

end

-Abra o arquivo .lua do NPC que voce queira que ande e adicione (no topo):

ox = 400

oy = 400

oz = 7

max = 5

Atenção:ox, oy e ozé a posição de respaw do seu NPC, altere de acordo com cada NPC.

E o "max"é a quantidade maxima de sqms que o NPC vai poder se afastar do ser respaw original.

-Ainda no mesmo arquivo.. procure pela função onThink() (para facilitar, aperte ctrl + f e escreva onThink) adicione:

if(focus == 0) then

moveRandom(ox,oy,max)

end

-Npc's estatuas ? Nunca mais! :icon1:

Faça seu NPC leva-lo para mais de um lugar!

 

-Abra a pasta do seu OTServ

-Vá em data/npc/scripts

-Procure pelo script do seu npc de barco

-Agora procure por um exeplo de viagem..

-Por exemplo:

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

if pay(cid,50) then

selfSay('Let\'s go!')

selfSay('/send ' .. creatureGetName(cid) .. ', 122 119 7')

focus = 0

talk_start = 0

else

selfSay('Sorry, you don\'t have enough money.')

talk_start = os.clock()

end

end

-Copie-o

-Agora depois desse ultimo end adicione denovo a mesma coisa..

-Dai é só alterar como quiser!

--Explicando:

if msgcontains(msg, 'tutorial')

È oque o player vai falar para ir para esse tal lugar..

if pay(cid,50) then

È quanto o player vai pagar pela "viagem", no caso, 50gps

selfSay('/send ' .. creatureGetName(cid) .. ', 122 119 7')

É pra onde o player vai ser teleportado, mude os numeros para onde voce queira que o player seja teleportado..

Trocas com seu NPC

 

-Bom, vou postar a função de "trade" para os npc's:

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

itemstatus = doPlayerRemoveItem(cid,ID_DO_ITEM)

if itemstatus == -1 then

selfSay('Where is the item?')

else

selfSay('Here it is...')

buy(cid,ID_DO_ITEM,1,0)

talk_start = os.clock()

end

Explicando:

doPlayerRemoveItem(cid,ID_DO_ITEM)

Este será o item que voce tera que dar ao npc para receber outro em troca

buy(cid,ID_DO_ITEM,1,0)

Este sera o item que o npc vai lhe dar em troca do outro

E se vc quiser vc pode acrecentar embaixo do else um

setPlayerStorageValue(cid,6019)

Que fará com que o NPC so troque uma vez o item!!

Fazendo NPC olhar para outros lugares!

 

 

-Vá em data/npc

-Procure pelo NPC que voce queira que "olhe para outro lugar"

-Com o botão direito clicke em editar

-Procure por:

lookdir="2">

-Dai é só mudar esse "2"

-Atenção:

lookdir 0 = /\ (para o norte)

lookdir 1 = > (para o leste)

lookdir 2 = \/ (para o sul)

lookdir 3 = < (para o oeste)

 

Editando preço de runas e outros itens em seu NPC

 

Bom primero passo , ecolha um NPC na pasta data/npc e veja qual o nome do script dele , fica logo apos o nome dele assim :

<npc name="Tutorial" script="data/npc/scripts/tutorial.lua"

Logo apos ver o nome va na pasta scripts (data/npc/scripts) e localize o arquivo que estava no seu NPC , no caso aqui tutorial.lua

Abra ele como bloco de notas e então procure as mensagens :

elseif msgcontains(msg, 'blank') and focus == cid then

buy(cid,3085,1,5)

talk_start = os.clock()

Este é um exemplo de blank rune pode se perceber que cada runa ou item tem uma mensagem em cima do qual o player deve falar para comprar o item :

elseif msgcontains(msg, 'blank')

Assim se estivesse escrito SD, toda vez que ele falasse SD o npc responderia com essa ação.

buy(cid,3085,1,5)

Essa é a parte mais importantecid é o player que estará falando com o NPC,3085 é o ID da blank rune,1 é o numero de blanks que o NPC dará pra elee 5 é o preço da blank rune

Se você quer editar o preço da runa, edite no caso, o5

Se você quer criar uma nova runa ou item é só copiar essa parte e adicionar o ID da runa ou item que você quer mudar.

Mude a mensagem deBlankpara o nome da runa ou item escolhido, lembrando que para pegar o ID da runa ou do item é só ir no Items.xml que localiza-se na pasta data/items.

Lembrando que isso funciona do mesmo jeito para itens.

**************

Creditos:

-Todos usuarios com tópicos sobre NPC no fórum de tutoriais.

-Todos criadores de tutoriais sobre NPC.

-Todas duvidas respondidas sobre NPC.

-Tutorial by Gaspar de um otro fórum

Espero ter ajudado,

Heitorzin

OBS: Rotciv,obrigado por me alertar que o nome era Yurots.

Abraços

Link para o comentário
Compartilhar em outros sites

Parabens cara,um otimo tutorial,porem utilizo um outro geito de fazer npc ;D

Mais para os principiantes é muitu bom.

Obrigado por ajudar o Xtibia com esse Tutorial,bonito e bem explicado.

Por mim,Aprovado

Atenciosamente,Jvchequer

Link para o comentário
Compartilhar em outros sites

Caraca... Tutorial perfeito! Pois os npcs sao coisas meio dificeis pra mecher e talz mas com o tutorial aprendi uma coisa que ainda nao sabia.... fazer o npc andar... Pois baixei o Elwin e Alwin os famosos vendedor e comprador de todos itens e eles andavam tive que achar um lugar pra prende los para nao sair pela cidade toda... mas agora achei ali heheh e ja dexei os paradinhos da Silva ^^ vlw... merece ser fixo msm (NA MINHA OPINIAO NÉ :bigsmile: ) vlw :bye:

Link para o comentário
Compartilhar em outros sites

Lek eu ja tentei de tudo mas quando eu vou por o ot on da esse erro:

Not loud npc.xml!

<?xml version="1.0"?>

<npclist>

<npc name="Lector" x="445" y="492" z="7" dir="1"/> --Food Karmia--

<npc name="Terrorista" x="438" y="509" z="7" dir="1"/> --Bomba Karmia--

<npc name="Diamati" x="441" y="520" z="6" dir="1"/> --Diamanti Karmia--

<npc name="Mochileiro" x="457" y="493" z="7" dir="1"/> --Bps Karmia--

<npc name="Frans" x="441" y="515" z="7" dir="1"/> --Runas Karmia 10x--

<npc name="Norbert" x="457" y="515" z="7" dir="1"/> --Loots Karmia--

<npc name="Seller" x="441" y="521" z="7" dir="1"/> --Seller Karmia--

<npc name="Shiriel" x="445" y="510" z="7" dir="1"/> --Wands e Rods Karmia--

<npc name="Tandros" x="448" y="501" z="7" dir="1"/> --Bows Karmia--

<npc name="Fenech" x="469" y="502" z="7" dir="1"/> --Aols Karmia--

<npc name="Obi" x="478" y="513" z="7" dir="1"/> --Obi Karmia--

<npc name="Fargum" x="453" y="481" z="6" dir="1"/> --Barco Karmia--

<npc name="Orlan" x="438" y="501" z="7" dir="1"/> --Orlan karmia--

<npc name="Lector" x="366" y="486" z="7" dir="1"/> --Food desert--

<npc name="Frans" x="348" y="462" z="7" dir="1"/> --Runas desert 10x--

<npc name="Frans" x="386" y="474" z="7" dir="1"/> --Runas desert 10x--

<npc name="Norbert" x="384" y="484" z="7" dir="1"/> --Loots desert--

<npc name="Seller" x="375" y="485" z="7" dir="1"/> --Seller deserta--

<npc name="Shiriel" x="368" y="507" z="7" dir="1"/> --Wands e Rods desert--

<npc name="Tandros" x="356" y="469" z="7" dir="1"/> --Bows desert--

<npc name="Fenech" x="362" y="485" z="7" dir="1"/> --Aols desert--

<npc name="Obi" x="340" y="466" z="7" dir="1"/> --Obi desert--

<npc name="Fargum" x="402" y="481" z="6" dir="1"/> --Barco desert--

<npc name="Tandros" x="377" y="506" z="7" dir="1"/> --Bows desert--

<npc name="Norbert" x="362" y="465" z="7" dir="1"/> --Loots desert--

<npc name="Lector" x="486" y="392" z="7" dir="1"/> --Food Fogo--

<npc name="Shiriel" x="490" y="400" z="6" dir="1"/> --Wands e Rods Fogo--

<npc name="Frans" x="486" y="406" z="6" dir="1"/> --Runas Fogo 10x--

<npc name="Norbert" x="471" y="424" z="7" dir="1"/> --Loots Fogo--

<npc name="Seller" x="468" y="418" z="7" dir="1"/> --Seller Fogo--

<npc name="Tandros" x="480" y="413" z="7" dir="1"/> --Bows Fogo--

<npc name="Fenech" x="490" y="410" z="6" dir="1"/> --Aols Fogo--

<npc name="Obi" x="482" y="418" z="7" dir="1"/> --Obi Fogo--

<npc name="Fargum" x="516" y="440" z="6" dir="1"/> --Barco Fogo--

<npc name="Orlan" x="488" y="408" z="7" dir="1"/> --Orlan Fogo--

<npc name="Lector" x="532" y="488" z="5" dir="1"/> --Food Tiquanda--

<npc name="Frans" x="522" y="449" z="6" dir="1"/> --Runas Tiquanda 10x--

<npc name="Seller" x="522" y="453" z="6" dir="1"/> --Seller Tiquanda--

<npc name="Obi" x="531" y="453" z="5" dir="1"/> --Obi Tiquanda--

<npc name="Fenech" x="523" y="453" z="5" dir="1"/> --Aols Tiquanda--

<npc name="Tandros" x="523" y="448" z="5" dir="1"/> --Bows Tiquanda--

<npc name="Norbert" x="531" y="453" z="6" dir="1"/> --Loots Tiquanda--

<npc name="Orlan" x="532" y="454" z="7" dir="1"/> --Orlan Tiquanda--

<npc name="Haster" x="520" y="532" z="6" dir="1"/> --Barco Premier--

<npc name="Haster" x="544" y="459" z="6" dir="1"/> --Barco Premier--

<npc name="Haster" x="436" y="627" z="7" dir="1"/> --Barco Premier--

<npc name="Lector" x="448" y="649" z="7" dir="1"/> --Food premmy island--

<npc name="Lector" x="449" y="671" z="7" dir="1"/> --Food premmy

<npc name="Frans" x="435" y="649" z="6" dir="1"/> --Runas premmy island <npc name="Norbert" x="439" y="653" z="6" dir="1"/> --Loots premmy island--

<npc name="Seller" x="438" y="654" z="7" dir="1"/> --Seller premmy island--

<npc name="Tandros" x="443" y="649" z="6" dir="1"/> --Bows premmy island--

<npc name="Fenech" x="439" y="644" z="6" dir="1"/> --Aols premmy island--

<npc name="Obi" x="460" y="666" z="7" dir="1"/> --Obi premmy island--

<npc name="Orlan" x="433" y="637" z="7" dir="1"/> --Orlan premmy island--

<npc name="Lector" x="402" y="437" z="6" dir="1"/> --Food Venore--

<npc name="Frans" x="397" y="434" z="6" dir="1"/> --Runas Venore 10x--

<npc name="Norbert" x="408" y="434" z="6" dir="1"/> --Loots Venore--

<npc name="Seller" x="387" y="417" z="6" dir="1"/> --Seller Venore--

<npc name="Tandros" x="387" y="417" z="7" dir="1"/> --Bows Venore--

<npc name="Fenech" x="387" y="419" z="5" dir="1"/> --Aols Venore--

<npc name="Obi" x="387" y="414" z="5" dir="1"/> --Obi Venore--

<npc name="Fargum" x="431" y="420" z="6" dir="1"/> --Barco Venore--

<npc name="Orlan" x="402" y="382" z="7" dir="1"/> --Orlan Venore--

<npc name="RookSeller" x="371" y="626" z="7" dir="1"/> --Seller Rook--

<npc name="LifeFluid" x="371" y="636" z="7" dir="1"/> --Seller Rook--

<npc name="Padre" x="391" y="629" z="6" dir="1"/> --Seller Rook--

</npclist>

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...