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.