• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Task System NPC.

Pedrook

Advanced OT User
Joined
May 24, 2009
Messages
484
Solutions
3
Reaction score
225
Location
Brazil
GitHub
pedrogiampietro
in a system of task sistem, I go to npc and ask about the daily rewards, or rewards of normal tasks, it opens me a book with the rewards, I would like it to be by the npcs tab.

I would say, daily rewards, and on the npcs tab he would tell me which monster and then reward x.

Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

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

npcHandler:addModule(FocusModule:new())

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local player = Player(cid)
local msg = msg:lower()
------------------------------------------------------------------
if npcHandler.topic[cid] == 0 and msgcontains(msg, 'normal') then
npcHandler:say("Ótimo. A task de qual monstro você gostaria de fazer ?", cid)
npcHandler.topic[cid] = 1
elseif npcHandler.topic[cid] == 1 then
for mon, l in pairs(task_monsters) do
if player:getStorageValue(task_sto_time) < os.time() then
  if player:getStorageValue(task_storage) == -1 then
   if msg == l.nome then
     npcHandler:say("Muito bem, você agora está fazendo a task do {"..l.nome:gsub("^%l", string.upper).."}, você precisa matar "..l.amount.." deles. Boa Sorte!", cid)
     player:setStorageValue(task_storage, mon)
     player:setStorageValue(l.storage, 0)
     npcHandler.topic[cid] = 0
     npcHandler:releaseFocus(cid)
   break
   else
     npcHandler:say("Desculpe mais não temos essa task.", cid)
     npcHandler.topic[cid] = 0
   end
  else
   npcHandler:say("Você já está fazendo uma task. Você só pode fazer uma por vez. Diga {!task} para ver informações sobre sua task atual.", cid)
   npcHandler.topic[cid] = 0
  end
else
  npcHandler:say("Não estou altorizado a lhe entregar nenhuma missão, por você ter abandonado a anterior. Espere as 2 horas de punicação acabar.", cid)
  npcHandler.topic[cid] = 0
end
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif npcHandler.topic[cid] == 0 and msgcontains(msg, 'diaria') then
if player:getStorageValue(time_daySto) < os.time() then
  npcHandler:say("Lembre-se, é de grande importância que as task diarias sejam feita. Agora me diga, a task de qual monstro você gostaria de fazer ?", cid)
  npcHandler.topic[cid] = 2
else
  npcHandler:say('Você já completou a task diaria de hoje, espere passar as 24 horas para fazer novamente.', cid)
  npcHandler:releaseFocus(cid)
end
elseif npcHandler.topic[cid] == 2 then
for mon, l in pairs(task_daily) do
if player:getStorageValue(task_sto_time) < os.time() then
  if player:getStorageValue(taskd_storage) == -1 then
   if msg == l.nome then
    npcHandler:say("Muito bem, você agora está fazendo a task diaria do {"..l.nome:gsub("^%l", string.upper).."}, você precisa matar "..l.amount.." deles. Boa Sorte!", cid)
    player:setStorageValue(taskd_storage, mon)
    player:setStorageValue(l.storage, 0)
    npcHandler.topic[cid] = 0
    npcHandler:releaseFocus(cid)
   break
   else
    npcHandler:say("Desculpe mais não temos essa task diaria.", cid)
    npcHandler.topic[cid] = 0
   end
  else
   npcHandler:say("Você já está fazendo uma task diaria. Você só pode fazer uma por dia. Diga {!task} para ver informações sobre sua task atual.", cid)
   npcHandler.topic[cid] = 0
  end
else
  npcHandler:say("Não estou altorizado a lhe entregar nenhuma missão, por você ter abandonado a anterior. Espere as 2 horas de punicação acabar.", cid)
  npcHandler.topic[cid] = 0
end
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, 'receber') then
if npcHandler.topic[cid] == 0 then
  npcHandler:say("Qual tipo de task você terminou, {normal} ou {diaria} ?", cid)
  npcHandler.topic[cid] = 3
end
elseif npcHandler.topic[cid] == 3 then
if msgcontains(msg, 'normal') then
if getTaskInfos(player) then
  if player:getStorageValue(getTaskInfos(player).storage) == getTaskInfos(player).amount then
    npcHandler:say('Muito bom, aqui está seus prêmios: '..getItemsFromTable(getTaskInfos(player).items)..'.', cid)
    for g = 1, #getTaskInfos(player).items do
     player:addItem(getTaskInfos(player).items[g].id, getTaskInfos(player).items[g].count)
    end
    player:addExperience(getTaskInfos(player).exp)
    taskPoints_add(player, getTaskInfos(player).pointsTask[1])
    taskRank_add(player, getTaskInfos(player).pointsTask[2])
    player:setStorageValue(getTaskInfos(player).storage, -1)
    player:setStorageValue(task_storage, -1)
    npcHandler.topic[cid] = 0
    npcHandler:releaseFocus(cid)
  else
    npcHandler:say('Você ainda não terminou sua task atual. Receberá ela quando termina.', cid)
    npcHandler.topic[cid] = 0
    npcHandler:releaseFocus(cid)
  end
else
  npcHandler:say('Você não está fazendo nenhuma task.', cid)
  npcHandler.topic[cid] = 0
  npcHandler:releaseFocus(cid)
end
elseif npcHandler.topic[cid] == 3 and msgcontains(msg, 'diaria') then
if player:getStorageValue(time_daySto)-os.time() <= 0 then
if getTaskDailyInfo(player) then
if player:getStorageValue(getTaskDailyInfo(player).storage) == getTaskDailyInfo(player).amount then
    npcHandler:say('Muito bom, aqui está os prêmios da task diaria: '..getItemsFromTable(getTaskDailyInfo(player).items)..'. Te vejo amanha!', cid)
    for g = 1, #getTaskDailyInfo(player).items do
     player:addItem(getTaskDailyInfo(player).items[g].id, getTaskDailyInfo(player).items[g].count)
    end
    player:addExperience(getTaskDailyInfo(player).exp)
    taskPoints_add(player, getTaskDailyInfo(player).pointsTask[1])
    taskRank_add(player, getTaskDailyInfo(player).pointsTask[2])
    player:setStorageValue(getTaskDailyInfo(player).storage, -1)
    player:setStorageValue(taskd_storage, -1)
    player:setStorageValue(time_daySto, 1*60*60*24+os.time())
    npcHandler.topic[cid] = 0
    npcHandler:releaseFocus(cid)
else
    npcHandler:say('Você ainda não terminou sua task atual. Receberá ela quando termina.', cid)
    npcHandler.topic[cid] = 0
    npcHandler:releaseFocus(cid)
end
else
npcHandler:say('Você não está fazendo nenhuma task diaria.', cid)
npcHandler.topic[cid] = 0
npcHandler:releaseFocus(cid)
end
else
npcHandler:say('Você já fez uma task diaria, aguarde completar 24 horas para fazer outra novamente.', cid)
npcHandler.topic[cid] = 0
npcHandler:releaseFocus(cid)
end
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, 'abandonar') then
if npcHandler.topic[cid] == 0 then
  npcHandler:say("Qual tipo de task você quer abandonar, {normal} ou {diaria} ?", cid)
  npcHandler.topic[cid] = 4
end
elseif npcHandler.topic[cid] == 4 and msgcontains(msg, 'normal') then
if getTaskInfos(player) then
   npcHandler:say('Lamentável essa situação, tinha fé que você me traria essa missão feita, mais estava errado. Como punição ficará 2 horas sem poder fazer qualquer task.', cid)
   player:setStorageValue(task_sto_time, os.time()+task_time*60*60)
   player:setStorageValue(getTaskInfos(player).storage, -1)
   player:setStorageValue(task_storage, -1)
   npcHandler:releaseFocus(cid)
else
  npcHandler:say('Você não está fazendo nenhuma task para poder abandona-lá.', cid)
  npcHandler:releaseFocus(cid)
end
elseif npcHandler.topic[cid] == 4 and msgcontains(msg, 'diaria') then
if getTaskDailyInfo(player) then
   npcHandler:say('Lamentável essa situação, tinha fé que você me traria essa missão feita, mais estava errado. Como punição ficará 2 horas sem poder fazer qualquer task.', cid)
   player:setStorageValue(task_sto_time, os.time()+task_time*60*60)
   player:setStorageValue(getTaskDailyInfo(player).storage, -1)
   player:setStorageValue(taskd_storage, -1)
   npcHandler:releaseFocus(cid)
else
  npcHandler:say('Você não está fazendo nenhuma task diaria para poder abandona-lá.', cid)
  npcHandler:releaseFocus(cid)
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, "lista de tasks normais") then
local text = "----**| -> Tasks Normal <- |**----\n\n"
for _, d in pairs(task_monsters) do
  text = text .."------ [*] "..d.nome.." [*] ------ \n[+] Quantidade [+] -> ["..(player:getStorageValue(d.storage) + 1).."/"..d.amount.."]:\n[+] Prêmios [+] ->  "..getItemsFromTable(d.items).." - "..d.exp.." experience \n\n"
end
player:showTextDialog(1811, "" .. text)
npcHandler:say("Aqui está a lista de task's normais.", cid)
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, "lista de task dailys") then
local text = "----**| -> Tasks Dailys <- |**----\n\n"
for _, d in pairs(task_daily) do
  text = text .."------ [*] "..d.nome.." [*] ------ \n[+] Quantidade [+] -> ["..(player:getStorageValue(d.storage) + 1).."/"..d.amount.."]:\n[+] Prêmios [+] ->  "..getItemsFromTable(d.items).." - "..d.exp.." experience \n\n"
end
player:showTextDialog(1811, "" .. text)
npcHandler:say("Aqui está a lista task's diaria.", cid)
end
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
 
Last edited:

I have 1 task system, which when I ask about the rewards npc shows in a book, I would like it to be by default, not in the book.

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

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

npcHandler:addModule(FocusModule:new())

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local player = Player(cid)
local msg = msg:lower()
------------------------------------------------------------------
if npcHandler.topic[cid] == 0 and msgcontains(msg, 'normal') then
npcHandler:say("Ótimo. A task de qual monstro você gostaria de fazer ?", cid)
npcHandler.topic[cid] = 1
elseif npcHandler.topic[cid] == 1 then
for mon, l in pairs(task_monsters) do
if player:getStorageValue(task_sto_time) < os.time() then
if player:getStorageValue(task_storage) == -1 then
if msg == l.nome then
npcHandler:say("Muito bem, você agora está fazendo a task do {"..l.nome:gsub("^%l", string.upper).."}, você precisa matar "..l.amount.." deles. Boa Sorte!", cid)
player:setStorageValue(task_storage, mon)
player:setStorageValue(l.storage, 0)
npcHandler.topic[cid] = 0
npcHandler:releaseFocus(cid)
break
else
npcHandler:say("Desculpe mais não temos essa task.", cid)
npcHandler.topic[cid] = 0
end
else
npcHandler:say("Você já está fazendo uma task. Você só pode fazer uma por vez. Diga {!task} para ver informações sobre sua task atual.", cid)
npcHandler.topic[cid] = 0
end
else
npcHandler:say("Não estou altorizado a lhe entregar nenhuma missão, por você ter abandonado a anterior. Espere as 2 horas de punicação acabar.", cid)
npcHandler.topic[cid] = 0
end
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif npcHandler.topic[cid] == 0 and msgcontains(msg, 'diaria') then
if player:getStorageValue(time_daySto) < os.time() then
npcHandler:say("Lembre-se, é de grande importância que as task diarias sejam feita. Agora me diga, a task de qual monstro você gostaria de fazer ?", cid)
npcHandler.topic[cid] = 2
else
npcHandler:say('Você já completou a task diaria de hoje, espere passar as 24 horas para fazer novamente.', cid)
npcHandler:releaseFocus(cid)
end
elseif npcHandler.topic[cid] == 2 then
for mon, l in pairs(task_daily) do
if player:getStorageValue(task_sto_time) < os.time() then
if player:getStorageValue(taskd_storage) == -1 then
if msg == l.nome then
npcHandler:say("Muito bem, você agora está fazendo a task diaria do {"..l.nome:gsub("^%l", string.upper).."}, você precisa matar "..l.amount.." deles. Boa Sorte!", cid)
player:setStorageValue(taskd_storage, mon)
player:setStorageValue(l.storage, 0)
npcHandler.topic[cid] = 0
npcHandler:releaseFocus(cid)
break
else
npcHandler:say("Desculpe mais não temos essa task diaria.", cid)
npcHandler.topic[cid] = 0
end
else
npcHandler:say("Você já está fazendo uma task diaria. Você só pode fazer uma por dia. Diga {!task} para ver informações sobre sua task atual.", cid)
npcHandler.topic[cid] = 0
end
else
npcHandler:say("Não estou altorizado a lhe entregar nenhuma missão, por você ter abandonado a anterior. Espere as 2 horas de punicação acabar.", cid)
npcHandler.topic[cid] = 0
end
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, 'receber') then
if npcHandler.topic[cid] == 0 then
npcHandler:say("Qual tipo de task você terminou, {normal} ou {diaria} ?", cid)
npcHandler.topic[cid] = 3
end
elseif npcHandler.topic[cid] == 3 then
if msgcontains(msg, 'normal') then
if getTaskInfos(player) then
if player:getStorageValue(getTaskInfos(player).storage) == getTaskInfos(player).amount then
npcHandler:say('Muito bom, aqui está seus prêmios: '..getItemsFromTable(getTaskInfos(player).items)..'.', cid)
for g = 1, #getTaskInfos(player).items do
player:addItem(getTaskInfos(player).items[g].id, getTaskInfos(player).items[g].count)
end
player:addExperience(getTaskInfos(player).exp)
taskPoints_add(player, getTaskInfos(player).pointsTask[1])
taskRank_add(player, getTaskInfos(player).pointsTask[2])
player:setStorageValue(getTaskInfos(player).storage, -1)
player:setStorageValue(task_storage, -1)
npcHandler.topic[cid] = 0
npcHandler:releaseFocus(cid)
else
npcHandler:say('Você ainda não terminou sua task atual. Receberá ela quando termina.', cid)
npcHandler.topic[cid] = 0
npcHandler:releaseFocus(cid)
end
else
npcHandler:say('Você não está fazendo nenhuma task.', cid)
npcHandler.topic[cid] = 0
npcHandler:releaseFocus(cid)
end
elseif npcHandler.topic[cid] == 3 and msgcontains(msg, 'diaria') then
if player:getStorageValue(time_daySto)-os.time() <= 0 then
if getTaskDailyInfo(player) then
if player:getStorageValue(getTaskDailyInfo(player).storage) == getTaskDailyInfo(player).amount then
npcHandler:say('Muito bom, aqui está os prêmios da task diaria: '..getItemsFromTable(getTaskDailyInfo(player).items)..'. Te vejo amanha!', cid)
for g = 1, #getTaskDailyInfo(player).items do
player:addItem(getTaskDailyInfo(player).items[g].id, getTaskDailyInfo(player).items[g].count)
end
player:addExperience(getTaskDailyInfo(player).exp)
taskPoints_add(player, getTaskDailyInfo(player).pointsTask[1])
taskRank_add(player, getTaskDailyInfo(player).pointsTask[2])
player:setStorageValue(getTaskDailyInfo(player).storage, -1)
player:setStorageValue(taskd_storage, -1)
player:setStorageValue(time_daySto, 1*60*60*24+os.time())
npcHandler.topic[cid] = 0
npcHandler:releaseFocus(cid)
else
npcHandler:say('Você ainda não terminou sua task atual. Receberá ela quando termina.', cid)
npcHandler.topic[cid] = 0
npcHandler:releaseFocus(cid)
end
else
npcHandler:say('Você não está fazendo nenhuma task diaria.', cid)
npcHandler.topic[cid] = 0
npcHandler:releaseFocus(cid)
end
else
npcHandler:say('Você já fez uma task diaria, aguarde completar 24 horas para fazer outra novamente.', cid)
npcHandler.topic[cid] = 0
npcHandler:releaseFocus(cid)
end
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, 'abandonar') then
if npcHandler.topic[cid] == 0 then
npcHandler:say("Qual tipo de task você quer abandonar, {normal} ou {diaria} ?", cid)
npcHandler.topic[cid] = 4
end
elseif npcHandler.topic[cid] == 4 and msgcontains(msg, 'normal') then
if getTaskInfos(player) then
npcHandler:say('Lamentável essa situação, tinha fé que você me traria essa missão feita, mais estava errado. Como punição ficará 2 horas sem poder fazer qualquer task.', cid)
player:setStorageValue(task_sto_time, os.time()+task_time*60*60)
player:setStorageValue(getTaskInfos(player).storage, -1)
player:setStorageValue(task_storage, -1)
npcHandler:releaseFocus(cid)
else
npcHandler:say('Você não está fazendo nenhuma task para poder abandona-lá.', cid)
npcHandler:releaseFocus(cid)
end
elseif npcHandler.topic[cid] == 4 and msgcontains(msg, 'diaria') then
if getTaskDailyInfo(player) then
npcHandler:say('Lamentável essa situação, tinha fé que você me traria essa missão feita, mais estava errado. Como punição ficará 2 horas sem poder fazer qualquer task.', cid)
player:setStorageValue(task_sto_time, os.time()+task_time*60*60)
player:setStorageValue(getTaskDailyInfo(player).storage, -1)
player:setStorageValue(taskd_storage, -1)
npcHandler:releaseFocus(cid)
else
npcHandler:say('Você não está fazendo nenhuma task diaria para poder abandona-lá.', cid)
npcHandler:releaseFocus(cid)
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, "lista de tasks normais") then
local text = "----**| -> Tasks Normal <- |**----\n\n"
for _, d in pairs(task_monsters) do
text = text .."------ [*] "..d.nome.." [*] ------ \n[+] Quantidade [+] -> ["..(player:getStorageValue(d.storage) + 1).."/"..d.amount.."]:\n[+] Prêmios [+] -> "..getItemsFromTable(d.items).." - "..d.exp.." experience \n\n"
end
player:showTextDialog(1811, "" .. text)
npcHandler:say("Aqui está a lista de task's normais.", cid)
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, "lista de task dailys") then
local text = "----**| -> Tasks Dailys <- |**----\n\n"
for _, d in pairs(task_daily) do
text = text .."------ [*] "..d.nome.." [*] ------ \n[+] Quantidade [+] -> ["..(player:getStorageValue(d.storage) + 1).."/"..d.amount.."]:\n[+] Prêmios [+] -> "..getItemsFromTable(d.items).." - "..d.exp.." experience \n\n"
end
player:showTextDialog(1811, "" .. text)
npcHandler:say("Aqui está a lista task's diaria.", cid)
end
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
 
Back
Top