Tenta assim:
local config =
{
requirements =
{
storage = 35565,
requiredlevel = true,
level = 55,
requiredpremium = false,
itemsrequired =
{
[11442] = {amount = 1}, -- entre [] pon el id de water stone --
[12170] = {amount = 100}, -- entre [] pon el id de las water pendant --
[12161] = {amount = 1000}, -- entre [] pon el id de las water gem --
},
},
rewards =
{
expvalue = 700,
expcolor = 35,
money = 350000,
reward =
{
[2392] = {amount = 30}, -- entre [] pon el id de las ultra ball's --
},
}
}
local function getRequiredThings(cid)
local msg = ""
local itemsleft = { }
for i,x in pairs(config.requirements.itemsrequired) do
local item = getPlayerItemCount(cid, i)
if (item < x.amount) then
table.insert(itemsleft, x.amount - item.. "x "..getItemNameById(i))
end
end
msg = #itemsleft > 0 and "Items: "..table.concat(itemsleft, ", ") or ""
return msg
end
local itemscap = 0
for i,x in pairs (config.requirements.itemsrequired) do
itemscap = itemscap + getItemWeightById(i, x.amount)
end
local requir = {}
for i,x in pairs(config.requirements.itemsrequired) do
table.insert (requir, x.amount .. "x "..getItemNameById(i))
end
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local cap = getPlayerFreeCap(cid)
local s = getPlayerStorageValue(cid, config.requirements.storage) == 1 and true or false
local lv = getPlayerLevel(cid)
local prm = isPremium(cid)
local msgs =
{
requirements = "Well, i need help to get some items. I need "..table.concat(requir, ", ").. ". Could you help me to get "..(#requir > 1 and "them" or "it").. "?.",
reward = "Thanks for helping me, here is your reward!",
done = "You have already done this mission.",
notpremium = "Sorry, only players with premium account can make this mission.",
notitems = "Sorry, you don't have all the items required for this mission "..getRequiredThings(cid),
notlevel = "Sorry, you don't have the required level for make this mission {"..config.requirements.level.."}",
wrong = "Huh?",
negation = "Ok, maybe next time.."
}
local rq = getRequiredThings(cid)
if (msgcontains(msg, 'mission')) then
if (config.requirements.requiredpremium == true and not prm ) then
return selfSay(msgs.notpremium, cid)
end
if (s == true)then
return selfSay(msgs.done, cid)
end
if (config.requirements.requiredlevel == true and lv < config.requirements.level) then
return selfSay(msgs.notlevel, cid)
end
selfSay(msgs.requirements,cid)
talk_state = 1
elseif (msgcontains(msg, "yes")) and talk_state == 1 then
if ( rq == "" ) then
if (cap < itemscap) then
return selfSay("Sorry, you don't have enough capacity to carry the reward. All weights items.cap", cid)
end
if (config.rewards.expvalue ~= false) then
doPlayerAddExp(cid, config.rewards.expvalue)
if (config.rewards.expcolor > 255 or config.rewards.expcolor <= 0) then
config.rewards.expcolor = math.random(255)
end
doSendAnimatedText(getThingPos(cid), config.rewards.expvalue, config.rewards.expcolor)
end
if (config.rewards.money ~= false) then
doPlayerAddMoney(cid, config.rewards.money)
end
if (config.rewards.reward ~= false) then
for i,x in pairs (config.rewards.reward) do
doPlayerAddItem(cid, i, x.amount)
end
end
for i,x in pairs (config.requirements.itemsrequired) do
doPlayerRemoveItem(cid, i, x.amount)
end
doPlayerSetStorageValue(cid, config.requirements.storage, 1)
selfSay(msgs.reward.."".. rq, cid)
talk_state = 0
else
selfSay("Sorry, you don't have all items, you still need "..rq, cid)
talk_state = 0
end
elseif (msgcontains(msg, "no") and talk_state == 1 ) then
selfSay(msgs.negation, cid)
talk_state = 0
else
selfSay(msgs.wrong, cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())





info
Grupo: Infante
Registrado: 27/08/11
Posts: 1.9k
Reputação: +85
Gênero: Masculino
Char no Tibia: Bruno Maciel
Estou com um bug na meu npc de task ...
BUG
[05/04/2013 16:22:45] [Error - Npc interface]
[05/04/2013 16:22:45] data/npc/scripts/task/Task 4.lua:onThink
[05/04/2013 16:22:45] Description:
[05/04/2013 16:22:46] (luaGetCreatureName) Creature not found
[05/04/2013 16:22:46] [Error - Npc interface]
[05/04/2013 16:22:46] data/npc/scripts/task/Task 4.lua:onThink
[05/04/2013 16:22:47] Description:
[05/04/2013 16:22:47] data/npc/lib/npcsystem/npchandler.lua:308: bad argument #3 to 'gsub' (string/function/table expected)
[05/04/2013 16:22:47] stack traceback:
[05/04/2013 16:22:48] [C]: in function 'gsub'
[05/04/2013 16:22:48] data/npc/lib/npcsystem/npchandler.lua:308: in function 'parseMessage'
[05/04/2013 16:22:48] data/npc/lib/npcsystem/npchandler.lua:549: in function 'onWalkAway'
[05/04/2013 16:22:48] data/npc/lib/npcsystem/npchandler.lua:491: in function 'onThink'
[05/04/2013 16:22:49] data/npc/scripts/task/Task 4.lua:75: in function <data/npc/scripts/task/Task 4.lua:75>
SCRIPT
local config =
{
requirements =
{
storage = 35565,
requiredlevel = true,
level = 55,
requiredpremium = false,
itemsrequired =
{
[11442] = {amount = 1}, -- entre [] pon el id de water stone --
[12170] = {amount = 100}, -- entre [] pon el id de las water pendant --
[12161] = {amount = 1000}, -- entre [] pon el id de las water gem --
},
},
rewards =
{
expvalue = 700,
expcolor = 35,
money = 350000,
reward =
{
[2392] = {amount = 30}, -- entre [] pon el id de las ultra ball's --
},
}
}
local function getRequiredThings(cid)
local msg = ""
local itemsleft = { }
for i,x in pairs(config.requirements.itemsrequired) do
local item = getPlayerItemCount(cid, i)
if (item < x.amount) then
table.insert(itemsleft, x.amount - item.. "x "..getItemNameById(i))
end
end
msg = #itemsleft > 0 and "Items: "..table.concat(itemsleft, ", ") or ""
return msg
end
local itemscap = 0
for i,x in pairs (config.requirements.itemsrequired) do
itemscap = itemscap + getItemWeightById(i, x.amount)
end
local requir = {}
for i,x in pairs(config.requirements.itemsrequired) do
table.insert (requir, x.amount .. "x "..getItemNameById(i))
end
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local cap = getPlayerFreeCap(cid)
local s = getPlayerStorageValue(cid, config.requirements.storage) == 1 and true or false
local lv = getPlayerLevel(cid)
local prm = isPremium(cid)
local msgs =
{
requirements = "Well, i need help to get some items. I need "..table.concat(requir, ", ").. ". Could you help me to get "..(#requir > 1 and "them" or "it").. "?.",
reward = "Thanks for helping me, here is your reward!",
done = "You have already done this mission.",
notpremium = "Sorry, only players with premium account can make this mission.",
notitems = "Sorry, you don't have all the items required for this mission "..getRequiredThings(cid),
notlevel = "Sorry, you don't have the required level for make this mission {"..config.requirements.level.."}",
wrong = "Huh?",
negation = "Ok, maybe next time.."
}
local rq = getRequiredThings(cid)
if (msgcontains(msg, 'mission')) then
if (config.requirements.requiredpremium == true and not prm ) then
return selfSay(msgs.notpremium, cid)
end
if (s == true)then
return selfSay(msgs.done, cid)
end
if (config.requirements.requiredlevel == true and lv < config.requirements.level) then
return selfSay(msgs.notlevel, cid)
end
selfSay(msgs.requirements,cid)
talk_state = 1
elseif (msgcontains(msg, "yes")) and talk_state == 1 then
if ( rq == "" ) then
if (cap < itemscap) then
return selfSay("Sorry, you don't have enough capacity to carry the reward. All weights items.cap", cid)
end
if (config.rewards.expvalue ~= false) then
doPlayerAddExp(cid, config.rewards.expvalue)
if (config.rewards.expcolor > 255 or config.rewards.expcolor <= 0) then
config.rewards.expcolor = math.random(255)
end
doSendAnimatedText(getThingPos(cid), config.rewards.expvalue, config.rewards.expcolor)
end
if (config.rewards.money ~= false) then
doPlayerAddMoney(cid, config.rewards.money)
end
if (config.rewards.reward ~= false) then
for i,x in pairs (config.rewards.reward) do
doPlayerAddItem(cid, i, x.amount)
end
end
for i,x in pairs (config.requirements.itemsrequired) do
doPlayerRemoveItem(cid, i, x.amount)
end
doPlayerSetStorageValue(cid, config.requirements.storage, 1)
selfSay(msgs.reward.."".. rq, cid)
talk_state = 0
else
selfSay("Sorry, you don't have all items, you still need "..rq, cid)
talk_state = 0
end
elseif (msgcontains(msg, "no") and talk_state == 1 ) then
selfSay(msgs.negation, cid)
talk_state = 0
else
selfSay(msgs.wrong, cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Rep+