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 = 400oy = 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) thenmoveRandom(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 thenif 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 thenitemstatus = 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 thenbuy(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