Ir para conteúdo

Criando Npc E Nova Magia.


God Luan

Posts Recomendados

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 direito 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:

 

QUOTEfunction moveRandom(ox,oy,max)maxx = ox + maxmaxy = oy + maxminx = ox - maxminy = oy - maxcx, cy, cz = selfGetPosition()randmove = math.random(1,50)if randmove == 1 thennx = cx + 1ny = cyendif randmove == 2 thennx = cx - 1ny = cyendif randmove == 3 thenny = cy + 1nx = cxendif randmove == 4 thenny = cy - 1nx = cxendif randmove >= 5 thennx = cxny = cyendif((nx < maxx) and (ny < maxy) and (nx > minx) and (ny > miny)) thenmoveToPosition(nx, ny, cz)endend

 

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

 

QUOTEox = 400oy = 400oz = 7max = 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:

 

QUOTEif(focus == 0) thenmoveRandom(ox,oy,max)end

 

-Npc's estatuas ? Nunca mais!

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:

 

QUOTEif msgcontains(msg, 'tutorial') and focus == cid thenif pay(cid,50) thenselfSay('Let\'s go!')selfSay('/send ' .. creatureGetName(cid) .. ', 122 119 7')focus = 0talk_start = 0elseselfSay('Sorry, you don\'t have enough money.')talk_start = os.clock()endend

 

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

 

QUOTEif msgcontains(msg, 'trade') and focus == cid thenitemstatus = doPlayerRemoveItem(cid,ID_DO_ITEM)if itemstatus == -1 thenselfSay('Where is the item?')elseselfSay('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:

 

QUOTElookdir="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 :

 

QUOTE<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 :

 

QUOTEelseif 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 :

 

QUOTEelseif msgcontains(msg, 'blank')

 

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

 

QUOTEbuy(cid,3085,1,5)

 

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

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

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 de Blank para 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 AO: Zeh Pekeno

Vomit System By Colex

Esta action é simples mas realistica

Voce podi comer até ficar full mas se vc ficar tentandu comer mesmu full vc podi vumitar, perdendu simplesmente 1 de hp

porque só 1??

porque se uma pessoa ta comendo é pra aumentar a life ou mana, intaum axo ke ficaria xato se ele perdesse mt HP

É facil o player vomitar?

Como na vida real não é mt facil, mas se vc ficar sempre tentando comer podi ter a certeza ke uma hora vc vomita, as probabilidades é 1 em 50, para mim axo ke dexa o jogo mais realista.

passemos ao code:

vai na pasta data/actions/scripts e procura por food.lua (deve estar la) abre ele e substitui tudo que esta dentro pelo seguinte:

 

QUOTE --Food System 7.6 by Danielo with GM Eating System by Frerety and Vomit System by Colex-- MAX_FOOD = 1200 function onUse(cid, item, frompos, item2, topos) if item.itemid == 2328 then food = 96 elseif item.itemid == 2362 then food = 96 elseif item.itemid == 2363 then food = 72 elseif item.itemid == 2666 then food = 180 elseif item.itemid == 2667 then food = 144 elseif item.itemid == 2668 then food = 120 elseif item.itemid == 2669 then food = 254 elseif item.itemid == 2670 then food = 196 elseif item.itemid == 2671 then food = 360 elseif item.itemid == 2672 then food = 720 elseif item.itemid == 2673 then food = 56 elseif item.itemid == 2674 then food = 72 elseif item.itemid == 2675 then food = 156 elseif item.itemid == 2676 then food = 96 elseif item.itemid == 2677 then food = 12 elseif item.itemid == 2678 then food = 160 elseif item.itemid == 2679 then food = 12 elseif item.itemid == 2680 then food = 24 elseif item.itemid == 2681 then food = 108 elseif item.itemid == 2682 then food = 240 elseif item.itemid == 2683 then food = 240 --MODIFIC elseif item.itemid == 2684 then food = 96 elseif item.itemid == 2685 then food = 46 elseif item.itemid == 2686 then food = 108 elseif item.itemid == 2687 then food = 24 elseif item.itemid == 2688 then food = 126  --MODIFIC elseif item.itemid == 2689 then food = 120 elseif item.itemid == 2690 then food = 72 elseif item.itemid == 2691 then food = 96 ------------------------------- elseif item.itemid == 2695 then food = 96 elseif item.itemid == 2696 then food = 108 elseif item.itemid == 2787 then food = 72  --102 elseif item.itemid == 2788 then food = 48 elseif item.itemid == 2789 then food = 264 elseif item.itemid == 2790 then food = 84 elseif item.itemid == 2791 then food = 84 elseif item.itemid == 2792 then food = 140 elseif item.itemid == 2793 then food = 126 elseif item.itemid == 2794 then food = 111 elseif item.itemid == 2795 then food = 136 elseif item.itemid == 2796 then food = 60 else return 0 end vomit = math.random(1,50) if (getPlayerFood(cid) + food > MAX_FOOD) then if getPlayerAccess(cid) > 2 then doPlayerFeed(cid,food) doRemoveItem(item.uid,1) return 1 else if vomit == 1 then doPlayerSendCancel(cid,"You are full, You have vomited.") doSendMagicEffect(getPlayerPosition(cid),8) doPlayerAddHealth(cid,-vomit) vom = doCreateItem(2025,4,getPlayerPosition(cid)) doRemoveItem(item.uid,1) doSetItemSpecialDescription(vom,"Vomit") doDecayItem(vom) else doPlayerSendCancel(cid,"You are full.") end return 1 end end doPlayerFeed(cid,food) doRemoveItem(item.uid,1) return 1 end

 

e é só isso

espero que gostem

nota: não testem com GM porque esse script ta com o sistema de GM comer sem ficar full por Frerety

CREDITOS AO: Colex

Quero coments..Valeu. :bye:

Link para o comentário
Compartilhar em outros sites

 

Belo tópico =hehehetá ficando bom nisso hein =)

 

auhehuahe...valeu...Mas é isso ai..com o tempo eu vou aprendendo..ngm gosta dos meus posts..sei la cara..acho q tenho q soh ficar respondendo mesmo..vms aumentar seus posts ai..ahueuhae..

Atenciosamete,God Luan.

Link para o comentário
Compartilhar em outros sites

  • 5 months later...
  • 1 month later...
  • 1 month later...

Desculpem-me, fiquei afastado do Forum e do Tibia por um tempo.

 

Agradeço os elogios e desculpe-me por postar na seçao errada.

 

Sem Mais.

//Obrigado

God Luan//

Link para o comentário
Compartilhar em outros sites

  • 1 year later...

God Luan, muito bom seu post meu ensino como criar NPC eu estava querendo aprender a mto tempo mas não achava um tópico decente, para aprender, continue assim seu trabalho é mto bom :smile_positivo:

Link para o comentário
Compartilhar em outros sites

cara, seu vomit system num funcionou aqui em casa, eu tentei e num deu certo, mas tudo bem, mto bom seu trabalho continue assim :smile_positivo:

 

aé, agora que eu vi é pra tibia 7.6, e o meu é 8.1 por isso que num deu certo eu fiz tudim igual tava explicando aí mas aqui num rodo mas tudo bem, como eu disse ali em cima continue assim :nuts:

Link para o comentário
Compartilhar em outros sites

Aeh fera pa quem ta comesando isso ta mt bom em

 

Vlw por compartilha cum nois du X TIBIA :weight_lift:

 

Aeh fera pa quem ta comesando isso ta mt bom em

 

Vlw por compartilha cum nois du X TIBIA :weight_lift:

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...