Bom, comecei a aprender Lua hoje e como joguei Tibia a alguns anos atrás decidi desenvolver scripts pro joguinho. Este script é o meu primeiro trabalho com a linguagem, portanto está bem simples mas também funcional.
A ideia do NPC é que você possa definir um ou mais itens para serem trocados/forjados por/em um item X. Você também pode por uma ou mais storages para que o player possa efetuar a troca/forja, ou se precisa ser premium account.
Aqui tem um GIF demonstrando como o NPC funciona.
Se você gostou e quer usar em seu servidor, a instalação é bem simples.
Crie um arquivo chamado Marcus Vinicius.xml na pasta data/npc
Crie um arquivo chamado forge.lua na pasta data/npc/scripts
Spoiler
--Items to forge
local items ={{
id =2466,
requirements ={{id =9971, count =20}},
storages ={{key =1010, value =1}},
premium =true},{
id =2183,
requirements ={{id =12508, count =2}}},{
id =7753,
requirements ={{id =5887, count =10},{id =7760, count =1}}}}local nodes ={}local keywordHandler =KeywordHandler:new()local npcHandler =NpcHandler:new(keywordHandler)NpcSystem.parseParameters(npcHandler)function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid)endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid)endfunction onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg)endfunction onThink() npcHandler:onThink()endfor i =1,#items, 1 dolocal requirements = items[i].requirements
local storages = items[i].storages or{}local premium = items[i].premium orfalselocal itemId = items[i].id
local item = doCreateItemEx(itemId)ifnot isItem(item)then
error('Item '.. itemId ..' is not valid!')end--Items message
if i ==1then
msgItems ='I can forge: {'.. getItemName(itemId)..'}'
elseif #items == i then
msgItems = msgItems ..' and {'.. getItemName(itemId)..'}.'
table.insert(nodes, keywordHandler:addKeyword({'items'},StdModule.say,{npcHandler = npcHandler, onlyFocus =true, text = msgItems}))else
msgItems = msgItems ..', {'.. getItemName(itemId)..'}'endfor j =1,#requirements, 1 dolocal rCountItem = requirements[j].count
local rItemId = requirements[j].id
local rItem = doCreateItemEx(rItemId)ifnot isItem(rItem)then
error('Item '.. itemId ..' is not valid!')end--Requirements message
if j ==1and j ==#requirements then
msg ='Would you like to forge '.. rCountItem ..' '.. getItemName(rItemId)
msg = msg ..' into 1 '.. getItemName(itemId)..'?'
elseif j ==1then
msg ='Would you like to forge '.. rCountItem ..' '.. getItemName(rItemId)
elseif j ==#requirements then
msg = msg ..' and '.. rCountItem ..' '.. getItemName(rItemId)
msg = msg ..' into 1 '.. getItemName(itemId)..'?'else
msg = msg ..', '.. rCountItem ..' '.. getItemName(rItemId)endend
nodes[i]= keywordHandler:addKeyword({getItemName(itemId)},StdModule.say,{npcHandler = npcHandler, onlyFocus =true, text = msg})
nodes[i]:addChildKeyword({'yes'},StdModule.forge,{npcHandler = npcHandler, premium = premium, cost = requirements, item = itemId, storages = storages})
nodes[i]:addChildKeyword({'no'},StdModule.say,{npcHandler = npcHandler, onlyFocus =true, reset =true, text ='Ok!'})end
npcHandler:addModule(FocusModule:new())
Agora vá até o arquivo data/npc/lib/npcsystem/modules.lua e antes do último end adicione o seguinte código
Quote
functionStdModule.forge(cid, message, keywords, parameters, node)local npcHandler = parameters.npcHandler
local player =Player(cid)if npcHandler ==nilthen
error("StdModule.forge called without any npcHandler instance.")endifnot npcHandler:isFocused(cid)thenreturnfalseendifnot player:isPremium()and parameters.premium then
npcHandler:say("You need to be premium.", cid)returnfalseendfor i =1,#parameters.storages, 1 doif player:getStorageValue(parameters.storages[i].key)~= parameters.storages[i].value then
npcHandler:say("I can't do it for you now.", cid)returnfalseendendfor i =1,#parameters.cost, 1 doif player:getItemCount(parameters.cost[i].id)< parameters.cost[i].count then
npcHandler:say("You don't have all the necessary items for the forge.", cid)returnfalseendendfor i =1,#parameters.cost, 1 do
player:removeItem(parameters.cost[i].id, parameters.cost[i].count)end
player:addItem(parameters.item,1,false)
npcHandler:say("Here's your ".. getItemName(parameters.item).."!.", cid)
npcHandler:resetNpc(cid)returntrueend
Depois de tudo isso o NPC já estará funcionando 100%.
Para adicionar novos itens na forja/troca é bem simples, logo nas primeiras linhas do forge.lua você encontrara a configuração do NPC.
Aqui tem uma breve explicação de como configurar o NPC:
Quote
local items ={{
id =2466,--Esteé o ID do item no qual você deja realizar a forja/troca.
requirements ={{id =9971, count =20}--Aqui fica o ID e a quantidade do material para a forja/troca.},
storages ={{key =1010, value =1}--Pode ser inserido o número da storage e o valor dela para a forja/troca ser realizada.},
premium =true--Também pode ser definido se o player precisa ser premium ou não para realizar a forja/troca.}}
Bom galera é isso ai, se vocês tiverem algum problema ou sugestão podem falar.
info
Grupo: Campones
Registrado: 25/04/14
Posts: 3
Reputação: 0
Gênero: Masculino
Bom, comecei a aprender Lua hoje e como joguei Tibia a alguns anos atrás decidi desenvolver scripts pro joguinho. Este script é o meu primeiro trabalho com a linguagem, portanto está bem simples mas também funcional.
A ideia do NPC é que você possa definir um ou mais itens para serem trocados/forjados por/em um item X. Você também pode por uma ou mais storages para que o player possa efetuar a troca/forja, ou se precisa ser premium account.
Aqui tem um GIF demonstrando como o NPC funciona.
Se você gostou e quer usar em seu servidor, a instalação é bem simples.
Crie um arquivo chamado Marcus Vinicius.xml na pasta data/npc
Crie um arquivo chamado forge.lua na pasta data/npc/scripts
Agora vá até o arquivo data/npc/lib/npcsystem/modules.lua e antes do último end adicione o seguinte código
Depois de tudo isso o NPC já estará funcionando 100%.
Para adicionar novos itens na forja/troca é bem simples, logo nas primeiras linhas do forge.lua você encontrara a configuração do NPC.
Aqui tem uma breve explicação de como configurar o NPC:
Bom galera é isso ai, se vocês tiverem algum problema ou sugestão podem falar.