• 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!

Grizzly Adams tfs1.5 problem

jareczekjsp

Member
Joined
Jan 30, 2023
Messages
188
Reaction score
9
GitHub
Jarek123
Hello Everyone I have Problem with Task,Grizzly Adams I have this error in console
Lua:
Lua Script Error: [Npc interface]
data/npc/scripts/Grizzly Adams.lua:onCreatureSay
data/npc/scripts/Grizzly Adams.lua:162: attempt to call global 'getTasksByPlayer' (a nil value)
stack traceback:
        [C]: in function 'getTasksByPlayer'
        data/npc/scripts/Grizzly Adams.lua:162: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:415: in function 'onCreatureSay'
        data/npc/scripts/Grizzly Adams.lua:8: in function <data/npc/scripts/Grizzly Adams.lua:8>
How I can fix it guys?

my script

Code:
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
 
local choose = {}
local cancel = {}
local available = {}

local grizzlyAdamsConfig = {
                            ranks = {
                                    huntsMan_rank = {
                                                    {id=11208, buy=0, sell=50, name='antlers'},
                                                    {id=10549, buy=0, sell=100, name='bloody pincers'},
                                                    {id=11183, buy=0, sell=35, name='crab pincers'},
                                                    {id=10573, buy=0, sell=55, name='cyclops toe'},
                                                    {id=10564, buy=0, sell=30, name='frosty ear of a troll'},
                                                    {id=11193, buy=0, sell=600, name='hydra head'},
                                                    {id=11366, buy=0, sell=80, name='lancer beetle shell'},
                                                    {id=10578, buy=0, sell=420, name='mutated bat ear'},
                                                    {id=11222, buy=0, sell=400, name='sabretooth'},
                                                    {id=11367, buy=0, sell=20, name='sandcrawler shell'},
                                                    {id=10547, buy=0, sell=280, name='scarab pincers'},
                                                    {id=11365, buy=0, sell=60, name='terramite legs'},
                                                    {id=11363, buy=0, sell=170, name='terramite shell'},
                                                    {id=11184, buy=0, sell=30000, name='terrorbird beak'},
                                                    
                                                    {id=7398, buy=0, sell=500, name='cyclops trophy'},
                                                    {id=11315, buy=0, sell=15000, name='draken trophy'},
                                                    {id=11330, buy=0, sell=8000, name='lizard trophy'},
                                                    {id=7401, buy=0, sell=500, name='minotaur trophy'}
                                                    },

                                    bigGameHunter_rank = {
                                                    {id=7397, buy=0, sell=3000, name='deer trophy'},
                                                    {id=7400, buy=0, sell=3000, name='lion trophy'},
                                                    {id=7394, buy=0, sell=3000, name='wolf trophy'}
                                                    },

                                    trophyHunter_rank = {
                                                    {id=7393, buy=0, sell=40000, name='demon trophy'},
                                                    {id=7396, buy=0, sell=20000, name='behemoth trophy'},
                                                    {id=7399, buy=0, sell=10000, name='dragon lord trophy'},
                                                    
                                                    {id=10518, buy=1000, sell=0, name='demon backpack'},
                                                    },
                                    }
                            }

local Topic = {}
function greetCallback(cid)
    Topic[cid] = 0
    return true
end

local function setNewTradeTable(table)
local items = {}
for _, v in ipairs(table) do
    items[v.id] = {itemId = v.id, buyPrice = v.buy, sellPrice = v.sell, subType = 0, realName = v.name}
end
return items
end

local function setNewLineTable(oldTable, newTable)
for k, v in pairs(oldTable) do
    table.insert(newTable, k, v)
end
return true
end

function creatureSayCallback(cid, type, msg)
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid
if (msgcontains(msg, "hi") or msgcontains(msg, "hello")) and (not npcHandler:isFocused(cid)) then
if (getPlayerStorageValue(cid, 100157) == -1) then
        npcHandler:say("Welcome "..getCreatureName(cid)..". Would you like to join the 'Paw and Fur - Hunting Elite'?", cid)
        npcHandler:addFocus(cid)
        talkState[talkUser] = 5
  else
        npcHandler:say("Welcome back old chap. What brings you here this time?", cid)
        npcHandler:addFocus(cid)
        talkState[talkUser] = 0
        end
        return true
    end
 
    if(not npcHandler:isFocused(cid)) then
        return false
    end
    
    if msgcontains(msg, "bye") or msgcontains(msg, "farewell") then
        selfSay("Happy hunting, old chap!", cid, TRUE)
        Topic[talkUser] = 0
        npcHandler:releaseFocus(cid)
        npcHandler:resetNpc(cid)
    end
    
    if (isInArray({"yes", "join"}, msg:lower()) and talkState[talkUser] == 5) then
        setPlayerStorageValue(cid, 100157, 1)
        npcHandler:say("Great! A warm welcome to our newest member: "..getCreatureName(cid).."! Ask me for a {task} if you want to go on a hunt.", cid)
        talkState[talkUser] = 0
   elseif (msg:lower() == "no" and talkState[talkUser] == 5) then
        npcHandler:say("No problem old chap. Come back if you change your mind.", cid) 
   end

if (getPlayerStorageValue(cid, 100157) == -1) then
    npcHandler:say("You'll have to {join} us to get more information.",cid)
    return false
end
if isInArray({"offer", "trade"}, msg:lower()) then
if getPlayerRank(cid) >= 2 then
        if getPlayerRank(cid) == 2 or getPlayerRank(cid) == 3 then
            tradeRank = grizzlyAdamsConfig.ranks.huntsMan_rank
        elseif getPlayerRank(cid) == 4 then
            tradeRank = grizzlyAdamsConfig.ranks.bigGameHunter_rank
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.bigGameHunter_rank)
        elseif getPlayerRank(cid) == 5 or getPlayerRank(cid) == 6 then
            tradeRank = grizzlyAdamsConfig.ranks.trophyHunter_rank
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.bigGameHunter_rank)
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.trophyHunter_rank)
        end
        local items = setNewTradeTable(tradeRank)
            local function onBuy(cid, item, subType, amount, ignoreCap, inBackpacks)
            if ignoreCap == false and (getPlayerFreeCap(cid) < getItemWeightById(items[item].itemId, amount) or inBackpacks and getPlayerFreeCap(cid) < (getItemWeightById(items[item].itemId, amount) + getItemWeightById(1988, 1))) then
                return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You don\'t have enough cap.')
            end
            if items[item].buyPrice then
                doPlayerRemoveMoney(cid, amount * items[item].buyPrice)
                for i = 1, amount do
                    if inBackpacks then
                        local backpack = doCreateItemEx(1988, 1)
                        doAddContainerItem(backpack, items[item].itemId, amount)
                    else
                        doPlayerAddItem(cid, items[item].itemId, amount, true)
                    end
                end
                return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You bought '..amount..'x '..items[item].realName..' for '..items[item].buyPrice * amount..' gold coins.')
            end
            return true
            end
            
            local function onSell(cid, item, subType, amount, ignoreCap, inBackpacks)
            if items[item].sellPrice then
                doPlayerAddMoney(cid, items[item].sellPrice * amount)
                doPlayerRemoveItem(cid, items[item].itemId, amount)
                return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You sold '..amount..'x '..items[item].realName..' for '..items[item].sellPrice * amount..' gold coins.')
            end
            return true
            end
        openShopWindow(cid, tradeRank, onBuy, onSell)
        return selfSay('It\'s my offer.', cid)
    else
        return selfSay('You don\'t have any rank.', cid)
        end
end
 
    if isInArray({"tasks", "task", "mission"}, msg:lower()) then
        local can = getTasksByPlayer(cid)
        if (getPlayerStorageValue(cid, 100157) == -1) then
             return (npcHandler:say("You'll have to {join}, to get any {tasks}.",cid))
        end
        if #can > 0 then
            local text = ""
            local sep = ", "
            table.sort(can, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(can) do
                t = t + 1
                if t == #can - 1 then
                    sep = " and "
                elseif t == #can then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
            selfSay("The current task" .. (#can > 1 and "s" or "") .. " that you can choose " .. (#can > 1 and "are" or "is") .. " " .. text, cid)
            talkState[talkUser] = 0
        else
            selfSay("I don't have any task for you right now.", cid)
        end
    elseif msg ~= "" and canStartTask(cid, msg) then
        if #getPlayerStartedTasks(cid) >= tasksByPlayer then
            selfSay("Sorry, but you already started " .. tasksByPlayer .. " tasks. You can check their {status} or {cancel} a task.", cid)
            return true
        end
        local task = getTaskByName(msg)
        if task and getCreatureStorage(cid, QUESTSTORAGE_BASE + task) > 0 then 
            return false
        end
        selfSay("In this task you must defeat " .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Are you sure that you want to start this task?", cid)
        choose[cid] = task
        talkState[talkUser] = 1
    elseif msg:lower() == "yes" and talkState[talkUser] == 1 then
        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + choose[cid], 1)
        selfSay("Excellent! You can check the {status} of your task saying {report} to me. Also you can {cancel} tasks to.", cid)
        choose[cid] = nil
        talkState[talkUser] = 0   
    elseif (msg:lower() == "report" or msg:lower() == "status") then
        local started = getPlayerStartedTasks(cid)
        local finishedAtLeastOne = false
        local finished = 0
        if started and #started > 0 then
            for _, id in ipairs(started) do
                if getCreatureStorage(cid, KILLSSTORAGE_BASE + id) >= tasks[id].killsRequired then
                    for _, reward in ipairs(tasks[id].rewards) do
                        local deny = false
                        if reward.storage then
                            if getCreatureStorage(cid, reward.storage[1]) >= reward.storage[2] then
                                deny = true
                            end
                        end
                        if isInArray({REWARD_MONEY, "money"}, reward.type:lower()) and not deny then
                            doPlayerAddMoney(cid, reward.value[1])
                        elseif isInArray({REWARD_EXP, "exp", "experience"}, reward.type:lower()) and not deny then
                            doPlayerAddExperience(cid, reward.value[1])
                            doPlayerSendDefaultCancel(cid, "You gained " .. reward.value[1] .. " experience points.")
                        elseif isInArray({REWARD_ACHIEVEMENT, "achievement", "ach"}, reward.type:lower()) and not deny then
                            if doPlayerAddAchievement then
                                doPlayerAddAchievement(cid, reward.value[1], true)
                            end
                        elseif isInArray({REWARD_STORAGE, "storage", "stor"}, reward.type:lower()) and not deny then
                            doCreatureSetStorage(cid, reward.value[1], reward.value[2])
                        elseif isInArray({REWARD_POINT, "points", "point"}, reward.type:lower()) and not deny then
                            doCreatureSetStorage(cid, POINTSSTORAGE, getCreatureStorage(cid, POINTSSTORAGE) + reward.value[1])
                        elseif isInArray({REWARD_ITEM, "item", "items", "object"}, reward.type:lower()) and not deny then
                            doPlayerAddItem(cid, reward.value[1], reward.value[2])
                        end
 
                        if reward.storage then
                            doCreatureSetStorage(cid, reward.storage[1], reward.storage[2])
                        end
                    end
 
                    if tasks[id].norepeatable then
                        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + id, 2)
                    else
                        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + id, 0)
                    end
                    doCreatureSetStorage(cid, KILLSSTORAGE_BASE + id, 0)
                    if getCreatureStorage(cid, REPEATSTORAGE_BASE + id) < 1 then
                        doCreatureSetStorage(cid, REPEATSTORAGE_BASE + id, 0)
                    end
                    doCreatureSetStorage(cid, REPEATSTORAGE_BASE + id, getCreatureStorage(cid, REPEATSTORAGE_BASE + id) + 1)
                    finishedAtLeastOne = true
                    finished = finished + 1
                end
            end
 
            if not finishedAtLeastOne then
         local started = getPlayerStartedTasks(cid)
        if started and #started > 0 then
            local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if t == #started - 1 then
                    sep = " and "
                elseif t == #started then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
                selfSay("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text, cid)
                Topic[cid] = 1
            else
                selfSay("Awesome! you finished " .. (finished > 1 and "various" or "a") .. " task" .. (finished > 1 and "s" or "") .. ". Talk to me again if you want to start a {task}.", cid)
            end
        else
            selfSay("You haven't started any task yet.", cid)
        end
        end
    elseif msg:lower() == "started" then
        local started = getPlayerStartedTasks(cid)
        if started and #started > 0 then
            local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if t == #started - 1 then
                    sep = " and "
                elseif t == #started then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
 
            selfSay("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text, cid)
        else
            selfSay("You haven't started any task yet.", cid)
        end
    elseif msg:lower() == "cancel" then
        local started = getPlayerStartedTasks(cid)
        local task = getTaskByName(msg)
        local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if t == #started - 1 then
                    sep = " or "
                elseif t == #started then
                    sep = "?"
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
        if started and #started > 0 then
            selfSay("Cancelling a task will make the counter restart. Which of these tasks you want cancel?" .. (#started > 1 and "" or "") .. " " .. text, cid)
            talkState[talkUser] = 2
        else
            selfSay("You haven't started any task yet.", cid)
        end
    elseif getTaskByName(msg) and talkState[talkUser] == 2 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then
        local task = getTaskByName(msg)
        if getCreatureStorage(cid, KILLSSTORAGE_BASE + task) > 0 then
            selfSay("You currently killed " .. getCreatureStorage(cid, KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Cancelling this task will restart the count. Are you sure you want to cancel this task?", cid)
        else
            selfSay("Are you sure you want to cancel this task?", cid)
        end
        talkState[talkUser] = 3
        cancel[cid] = task
    elseif getTaskByName(msg) and Topic[cid] == 1 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then
        local task = getTaskByName(msg)
        if getCreatureStorage(cid, KILLSSTORAGE_BASE + task) > 0 then
            selfSay("You currently killed " .. getCreatureStorage(cid, KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ".", cid)
            Topic[cid] = 0
        else
            selfSay("You haven't started any task yet.", cid)
        end
    elseif msg:lower() == "yes" and talkState[talkUser] == 3 then
        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + cancel[cid], -1)
        doCreatureSetStorage(cid, KILLSSTORAGE_BASE + cancel[cid], -1)
        selfSay("You have cancelled the task " .. (tasks[cancel[cid]].name or tasks[cancel[cid]].raceName) .. ".", cid)
        talkState[talkUser] = 0
    elseif isInArray({"points", "rank"}, msg:lower()) then
        if getCreatureStorage(cid, POINTSSTORAGE) < 1 then
        selfSay("At this time, you have 0 Paw & Fur points. You " .. (getPlayerRank(cid) == 6 and "are an Elite Hunter" or getPlayerRank(cid) == 5 and "are a Trophy Hunter" or getPlayerRank(cid) == 4 and "are a Big Game Hunter" or getPlayerRank(cid) == 3 and "are a Ranger" or getPlayerRank(cid) == 2 and "are a Huntsman" or getPlayerRank(cid) == 1 and "are a Member"  or "haven't been ranked yet") .. ".", cid)
        elseif getCreatureStorage(cid, POINTSSTORAGE) >= 1 then
        selfSay("At this time, you have " .. getCreatureStorage(cid, POINTSSTORAGE) .. " Paw & Fur points. You " .. (getPlayerRank(cid) == 6 and "are an Elite Hunter" or getPlayerRank(cid) == 5 and "are a Trophy Hunter" or getPlayerRank(cid) == 4 and "are a Big Game Hunter" or getPlayerRank(cid) == 3 and "are a Ranger" or getPlayerRank(cid) == 2 and "are a Huntsman" or getPlayerRank(cid) == 1 and "are a Member"  or "haven't been ranked yet") .. ".", cid)
        end
        talkState[talkUser] = 0
    end
end
 
npcHandler:setMessage(MESSAGE_FAREWELL, "Happy hunting, old chap!")
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
 
Solution
Tested and working, OK.

That's right, the NPC I posted above, along with these necessary files to make it work. Cool!!... Have fun :)

What else do you need to add here?


Lua:
<!-- Killing In The Name Of Quest -->
    <event type="kill" name="killingInTheNameOfQuestKills" script="killing in the name of quest/killingInTheNameOfQuestKills.lua"/>

login.lua
player:registerEvent("killingInTheNameOfQuestKills")


Creaturescripts.
Lua:
function onKill(cid, target, lastHit)
    local targetCreature = Creature(target)
    if targetCreature:isPlayer() or targetCreature:getMaster() then
        return true
    end

    local player = Player(cid)
    local started = getPlayerStartedTasks(cid)
    if...
Hello Everyone I have Problem with Task,Grizzly Adams I have this error in console
Lua:
Lua Script Error: [Npc interface]
data/npc/scripts/Grizzly Adams.lua:onCreatureSay
data/npc/scripts/Grizzly Adams.lua:162: attempt to call global 'getTasksByPlayer' (a nil value)
stack traceback:
        [C]: in function 'getTasksByPlayer'
        data/npc/scripts/Grizzly Adams.lua:162: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:415: in function 'onCreatureSay'
        data/npc/scripts/Grizzly Adams.lua:8: in function <data/npc/scripts/Grizzly Adams.lua:8>
How I can fix it guys?

my script

Code:
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
 
local choose = {}
local cancel = {}
local available = {}

local grizzlyAdamsConfig = {
                            ranks = {
                                    huntsMan_rank = {
                                                    {id=11208, buy=0, sell=50, name='antlers'},
                                                    {id=10549, buy=0, sell=100, name='bloody pincers'},
                                                    {id=11183, buy=0, sell=35, name='crab pincers'},
                                                    {id=10573, buy=0, sell=55, name='cyclops toe'},
                                                    {id=10564, buy=0, sell=30, name='frosty ear of a troll'},
                                                    {id=11193, buy=0, sell=600, name='hydra head'},
                                                    {id=11366, buy=0, sell=80, name='lancer beetle shell'},
                                                    {id=10578, buy=0, sell=420, name='mutated bat ear'},
                                                    {id=11222, buy=0, sell=400, name='sabretooth'},
                                                    {id=11367, buy=0, sell=20, name='sandcrawler shell'},
                                                    {id=10547, buy=0, sell=280, name='scarab pincers'},
                                                    {id=11365, buy=0, sell=60, name='terramite legs'},
                                                    {id=11363, buy=0, sell=170, name='terramite shell'},
                                                    {id=11184, buy=0, sell=30000, name='terrorbird beak'},
                                                  
                                                    {id=7398, buy=0, sell=500, name='cyclops trophy'},
                                                    {id=11315, buy=0, sell=15000, name='draken trophy'},
                                                    {id=11330, buy=0, sell=8000, name='lizard trophy'},
                                                    {id=7401, buy=0, sell=500, name='minotaur trophy'}
                                                    },

                                    bigGameHunter_rank = {
                                                    {id=7397, buy=0, sell=3000, name='deer trophy'},
                                                    {id=7400, buy=0, sell=3000, name='lion trophy'},
                                                    {id=7394, buy=0, sell=3000, name='wolf trophy'}
                                                    },

                                    trophyHunter_rank = {
                                                    {id=7393, buy=0, sell=40000, name='demon trophy'},
                                                    {id=7396, buy=0, sell=20000, name='behemoth trophy'},
                                                    {id=7399, buy=0, sell=10000, name='dragon lord trophy'},
                                                  
                                                    {id=10518, buy=1000, sell=0, name='demon backpack'},
                                                    },
                                    }
                            }

local Topic = {}
function greetCallback(cid)
    Topic[cid] = 0
    return true
end

local function setNewTradeTable(table)
local items = {}
for _, v in ipairs(table) do
    items[v.id] = {itemId = v.id, buyPrice = v.buy, sellPrice = v.sell, subType = 0, realName = v.name}
end
return items
end

local function setNewLineTable(oldTable, newTable)
for k, v in pairs(oldTable) do
    table.insert(newTable, k, v)
end
return true
end

function creatureSayCallback(cid, type, msg)
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid
if (msgcontains(msg, "hi") or msgcontains(msg, "hello")) and (not npcHandler:isFocused(cid)) then
if (getPlayerStorageValue(cid, 100157) == -1) then
        npcHandler:say("Welcome "..getCreatureName(cid)..". Would you like to join the 'Paw and Fur - Hunting Elite'?", cid)
        npcHandler:addFocus(cid)
        talkState[talkUser] = 5
  else
        npcHandler:say("Welcome back old chap. What brings you here this time?", cid)
        npcHandler:addFocus(cid)
        talkState[talkUser] = 0
        end
        return true
    end
 
    if(not npcHandler:isFocused(cid)) then
        return false
    end
  
    if msgcontains(msg, "bye") or msgcontains(msg, "farewell") then
        selfSay("Happy hunting, old chap!", cid, TRUE)
        Topic[talkUser] = 0
        npcHandler:releaseFocus(cid)
        npcHandler:resetNpc(cid)
    end
  
    if (isInArray({"yes", "join"}, msg:lower()) and talkState[talkUser] == 5) then
        setPlayerStorageValue(cid, 100157, 1)
        npcHandler:say("Great! A warm welcome to our newest member: "..getCreatureName(cid).."! Ask me for a {task} if you want to go on a hunt.", cid)
        talkState[talkUser] = 0
   elseif (msg:lower() == "no" and talkState[talkUser] == 5) then
        npcHandler:say("No problem old chap. Come back if you change your mind.", cid)
   end

if (getPlayerStorageValue(cid, 100157) == -1) then
    npcHandler:say("You'll have to {join} us to get more information.",cid)
    return false
end
if isInArray({"offer", "trade"}, msg:lower()) then
if getPlayerRank(cid) >= 2 then
        if getPlayerRank(cid) == 2 or getPlayerRank(cid) == 3 then
            tradeRank = grizzlyAdamsConfig.ranks.huntsMan_rank
        elseif getPlayerRank(cid) == 4 then
            tradeRank = grizzlyAdamsConfig.ranks.bigGameHunter_rank
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.bigGameHunter_rank)
        elseif getPlayerRank(cid) == 5 or getPlayerRank(cid) == 6 then
            tradeRank = grizzlyAdamsConfig.ranks.trophyHunter_rank
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.bigGameHunter_rank)
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.trophyHunter_rank)
        end
        local items = setNewTradeTable(tradeRank)
            local function onBuy(cid, item, subType, amount, ignoreCap, inBackpacks)
            if ignoreCap == false and (getPlayerFreeCap(cid) < getItemWeightById(items[item].itemId, amount) or inBackpacks and getPlayerFreeCap(cid) < (getItemWeightById(items[item].itemId, amount) + getItemWeightById(1988, 1))) then
                return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You don\'t have enough cap.')
            end
            if items[item].buyPrice then
                doPlayerRemoveMoney(cid, amount * items[item].buyPrice)
                for i = 1, amount do
                    if inBackpacks then
                        local backpack = doCreateItemEx(1988, 1)
                        doAddContainerItem(backpack, items[item].itemId, amount)
                    else
                        doPlayerAddItem(cid, items[item].itemId, amount, true)
                    end
                end
                return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You bought '..amount..'x '..items[item].realName..' for '..items[item].buyPrice * amount..' gold coins.')
            end
            return true
            end
          
            local function onSell(cid, item, subType, amount, ignoreCap, inBackpacks)
            if items[item].sellPrice then
                doPlayerAddMoney(cid, items[item].sellPrice * amount)
                doPlayerRemoveItem(cid, items[item].itemId, amount)
                return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You sold '..amount..'x '..items[item].realName..' for '..items[item].sellPrice * amount..' gold coins.')
            end
            return true
            end
        openShopWindow(cid, tradeRank, onBuy, onSell)
        return selfSay('It\'s my offer.', cid)
    else
        return selfSay('You don\'t have any rank.', cid)
        end
end
 
    if isInArray({"tasks", "task", "mission"}, msg:lower()) then
        local can = getTasksByPlayer(cid)
        if (getPlayerStorageValue(cid, 100157) == -1) then
             return (npcHandler:say("You'll have to {join}, to get any {tasks}.",cid))
        end
        if #can > 0 then
            local text = ""
            local sep = ", "
            table.sort(can, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(can) do
                t = t + 1
                if t == #can - 1 then
                    sep = " and "
                elseif t == #can then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
            selfSay("The current task" .. (#can > 1 and "s" or "") .. " that you can choose " .. (#can > 1 and "are" or "is") .. " " .. text, cid)
            talkState[talkUser] = 0
        else
            selfSay("I don't have any task for you right now.", cid)
        end
    elseif msg ~= "" and canStartTask(cid, msg) then
        if #getPlayerStartedTasks(cid) >= tasksByPlayer then
            selfSay("Sorry, but you already started " .. tasksByPlayer .. " tasks. You can check their {status} or {cancel} a task.", cid)
            return true
        end
        local task = getTaskByName(msg)
        if task and getCreatureStorage(cid, QUESTSTORAGE_BASE + task) > 0 then
            return false
        end
        selfSay("In this task you must defeat " .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Are you sure that you want to start this task?", cid)
        choose[cid] = task
        talkState[talkUser] = 1
    elseif msg:lower() == "yes" and talkState[talkUser] == 1 then
        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + choose[cid], 1)
        selfSay("Excellent! You can check the {status} of your task saying {report} to me. Also you can {cancel} tasks to.", cid)
        choose[cid] = nil
        talkState[talkUser] = 0 
    elseif (msg:lower() == "report" or msg:lower() == "status") then
        local started = getPlayerStartedTasks(cid)
        local finishedAtLeastOne = false
        local finished = 0
        if started and #started > 0 then
            for _, id in ipairs(started) do
                if getCreatureStorage(cid, KILLSSTORAGE_BASE + id) >= tasks[id].killsRequired then
                    for _, reward in ipairs(tasks[id].rewards) do
                        local deny = false
                        if reward.storage then
                            if getCreatureStorage(cid, reward.storage[1]) >= reward.storage[2] then
                                deny = true
                            end
                        end
                        if isInArray({REWARD_MONEY, "money"}, reward.type:lower()) and not deny then
                            doPlayerAddMoney(cid, reward.value[1])
                        elseif isInArray({REWARD_EXP, "exp", "experience"}, reward.type:lower()) and not deny then
                            doPlayerAddExperience(cid, reward.value[1])
                            doPlayerSendDefaultCancel(cid, "You gained " .. reward.value[1] .. " experience points.")
                        elseif isInArray({REWARD_ACHIEVEMENT, "achievement", "ach"}, reward.type:lower()) and not deny then
                            if doPlayerAddAchievement then
                                doPlayerAddAchievement(cid, reward.value[1], true)
                            end
                        elseif isInArray({REWARD_STORAGE, "storage", "stor"}, reward.type:lower()) and not deny then
                            doCreatureSetStorage(cid, reward.value[1], reward.value[2])
                        elseif isInArray({REWARD_POINT, "points", "point"}, reward.type:lower()) and not deny then
                            doCreatureSetStorage(cid, POINTSSTORAGE, getCreatureStorage(cid, POINTSSTORAGE) + reward.value[1])
                        elseif isInArray({REWARD_ITEM, "item", "items", "object"}, reward.type:lower()) and not deny then
                            doPlayerAddItem(cid, reward.value[1], reward.value[2])
                        end
 
                        if reward.storage then
                            doCreatureSetStorage(cid, reward.storage[1], reward.storage[2])
                        end
                    end
 
                    if tasks[id].norepeatable then
                        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + id, 2)
                    else
                        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + id, 0)
                    end
                    doCreatureSetStorage(cid, KILLSSTORAGE_BASE + id, 0)
                    if getCreatureStorage(cid, REPEATSTORAGE_BASE + id) < 1 then
                        doCreatureSetStorage(cid, REPEATSTORAGE_BASE + id, 0)
                    end
                    doCreatureSetStorage(cid, REPEATSTORAGE_BASE + id, getCreatureStorage(cid, REPEATSTORAGE_BASE + id) + 1)
                    finishedAtLeastOne = true
                    finished = finished + 1
                end
            end
 
            if not finishedAtLeastOne then
         local started = getPlayerStartedTasks(cid)
        if started and #started > 0 then
            local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if t == #started - 1 then
                    sep = " and "
                elseif t == #started then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
                selfSay("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text, cid)
                Topic[cid] = 1
            else
                selfSay("Awesome! you finished " .. (finished > 1 and "various" or "a") .. " task" .. (finished > 1 and "s" or "") .. ". Talk to me again if you want to start a {task}.", cid)
            end
        else
            selfSay("You haven't started any task yet.", cid)
        end
        end
    elseif msg:lower() == "started" then
        local started = getPlayerStartedTasks(cid)
        if started and #started > 0 then
            local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if t == #started - 1 then
                    sep = " and "
                elseif t == #started then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
 
            selfSay("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text, cid)
        else
            selfSay("You haven't started any task yet.", cid)
        end
    elseif msg:lower() == "cancel" then
        local started = getPlayerStartedTasks(cid)
        local task = getTaskByName(msg)
        local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if t == #started - 1 then
                    sep = " or "
                elseif t == #started then
                    sep = "?"
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
        if started and #started > 0 then
            selfSay("Cancelling a task will make the counter restart. Which of these tasks you want cancel?" .. (#started > 1 and "" or "") .. " " .. text, cid)
            talkState[talkUser] = 2
        else
            selfSay("You haven't started any task yet.", cid)
        end
    elseif getTaskByName(msg) and talkState[talkUser] == 2 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then
        local task = getTaskByName(msg)
        if getCreatureStorage(cid, KILLSSTORAGE_BASE + task) > 0 then
            selfSay("You currently killed " .. getCreatureStorage(cid, KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Cancelling this task will restart the count. Are you sure you want to cancel this task?", cid)
        else
            selfSay("Are you sure you want to cancel this task?", cid)
        end
        talkState[talkUser] = 3
        cancel[cid] = task
    elseif getTaskByName(msg) and Topic[cid] == 1 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then
        local task = getTaskByName(msg)
        if getCreatureStorage(cid, KILLSSTORAGE_BASE + task) > 0 then
            selfSay("You currently killed " .. getCreatureStorage(cid, KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ".", cid)
            Topic[cid] = 0
        else
            selfSay("You haven't started any task yet.", cid)
        end
    elseif msg:lower() == "yes" and talkState[talkUser] == 3 then
        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + cancel[cid], -1)
        doCreatureSetStorage(cid, KILLSSTORAGE_BASE + cancel[cid], -1)
        selfSay("You have cancelled the task " .. (tasks[cancel[cid]].name or tasks[cancel[cid]].raceName) .. ".", cid)
        talkState[talkUser] = 0
    elseif isInArray({"points", "rank"}, msg:lower()) then
        if getCreatureStorage(cid, POINTSSTORAGE) < 1 then
        selfSay("At this time, you have 0 Paw & Fur points. You " .. (getPlayerRank(cid) == 6 and "are an Elite Hunter" or getPlayerRank(cid) == 5 and "are a Trophy Hunter" or getPlayerRank(cid) == 4 and "are a Big Game Hunter" or getPlayerRank(cid) == 3 and "are a Ranger" or getPlayerRank(cid) == 2 and "are a Huntsman" or getPlayerRank(cid) == 1 and "are a Member"  or "haven't been ranked yet") .. ".", cid)
        elseif getCreatureStorage(cid, POINTSSTORAGE) >= 1 then
        selfSay("At this time, you have " .. getCreatureStorage(cid, POINTSSTORAGE) .. " Paw & Fur points. You " .. (getPlayerRank(cid) == 6 and "are an Elite Hunter" or getPlayerRank(cid) == 5 and "are a Trophy Hunter" or getPlayerRank(cid) == 4 and "are a Big Game Hunter" or getPlayerRank(cid) == 3 and "are a Ranger" or getPlayerRank(cid) == 2 and "are a Huntsman" or getPlayerRank(cid) == 1 and "are a Member"  or "haven't been ranked yet") .. ".", cid)
        end
        talkState[talkUser] = 0
    end
end
 
npcHandler:setMessage(MESSAGE_FAREWELL, "Happy hunting, old chap!")
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

I believe you are using this script, as shown in the error, there is no function called "getTasksByPlayer" that comes along with the LIB of this script, so probably you did not add the lib correctly to your server as linked below, try to follow the steps correctly. If you have placed the lib file in the lib folder, make sure that this file is referenced in the file lib.lua.

 
Hello Everyone I have Problem with Task,Grizzly Adams I have this error in console
Lua:
Lua Script Error: [Npc interface]
data/npc/scripts/Grizzly Adams.lua:onCreatureSay
data/npc/scripts/Grizzly Adams.lua:162: attempt to call global 'getTasksByPlayer' (a nil value)
stack traceback:
        [C]: in function 'getTasksByPlayer'
        data/npc/scripts/Grizzly Adams.lua:162: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:415: in function 'onCreatureSay'
        data/npc/scripts/Grizzly Adams.lua:8: in function <data/npc/scripts/Grizzly Adams.lua:8>
How I can fix it guys?

my script

Code:
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
 
local choose = {}
local cancel = {}
local available = {}

local grizzlyAdamsConfig = {
                            ranks = {
                                    huntsMan_rank = {
                                                    {id=11208, buy=0, sell=50, name='antlers'},
                                                    {id=10549, buy=0, sell=100, name='bloody pincers'},
                                                    {id=11183, buy=0, sell=35, name='crab pincers'},
                                                    {id=10573, buy=0, sell=55, name='cyclops toe'},
                                                    {id=10564, buy=0, sell=30, name='frosty ear of a troll'},
                                                    {id=11193, buy=0, sell=600, name='hydra head'},
                                                    {id=11366, buy=0, sell=80, name='lancer beetle shell'},
                                                    {id=10578, buy=0, sell=420, name='mutated bat ear'},
                                                    {id=11222, buy=0, sell=400, name='sabretooth'},
                                                    {id=11367, buy=0, sell=20, name='sandcrawler shell'},
                                                    {id=10547, buy=0, sell=280, name='scarab pincers'},
                                                    {id=11365, buy=0, sell=60, name='terramite legs'},
                                                    {id=11363, buy=0, sell=170, name='terramite shell'},
                                                    {id=11184, buy=0, sell=30000, name='terrorbird beak'},
                                                   
                                                    {id=7398, buy=0, sell=500, name='cyclops trophy'},
                                                    {id=11315, buy=0, sell=15000, name='draken trophy'},
                                                    {id=11330, buy=0, sell=8000, name='lizard trophy'},
                                                    {id=7401, buy=0, sell=500, name='minotaur trophy'}
                                                    },

                                    bigGameHunter_rank = {
                                                    {id=7397, buy=0, sell=3000, name='deer trophy'},
                                                    {id=7400, buy=0, sell=3000, name='lion trophy'},
                                                    {id=7394, buy=0, sell=3000, name='wolf trophy'}
                                                    },

                                    trophyHunter_rank = {
                                                    {id=7393, buy=0, sell=40000, name='demon trophy'},
                                                    {id=7396, buy=0, sell=20000, name='behemoth trophy'},
                                                    {id=7399, buy=0, sell=10000, name='dragon lord trophy'},
                                                   
                                                    {id=10518, buy=1000, sell=0, name='demon backpack'},
                                                    },
                                    }
                            }

local Topic = {}
function greetCallback(cid)
    Topic[cid] = 0
    return true
end

local function setNewTradeTable(table)
local items = {}
for _, v in ipairs(table) do
    items[v.id] = {itemId = v.id, buyPrice = v.buy, sellPrice = v.sell, subType = 0, realName = v.name}
end
return items
end

local function setNewLineTable(oldTable, newTable)
for k, v in pairs(oldTable) do
    table.insert(newTable, k, v)
end
return true
end

function creatureSayCallback(cid, type, msg)
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid
if (msgcontains(msg, "hi") or msgcontains(msg, "hello")) and (not npcHandler:isFocused(cid)) then
if (getPlayerStorageValue(cid, 100157) == -1) then
        npcHandler:say("Welcome "..getCreatureName(cid)..". Would you like to join the 'Paw and Fur - Hunting Elite'?", cid)
        npcHandler:addFocus(cid)
        talkState[talkUser] = 5
  else
        npcHandler:say("Welcome back old chap. What brings you here this time?", cid)
        npcHandler:addFocus(cid)
        talkState[talkUser] = 0
        end
        return true
    end
 
    if(not npcHandler:isFocused(cid)) then
        return false
    end
   
    if msgcontains(msg, "bye") or msgcontains(msg, "farewell") then
        selfSay("Happy hunting, old chap!", cid, TRUE)
        Topic[talkUser] = 0
        npcHandler:releaseFocus(cid)
        npcHandler:resetNpc(cid)
    end
   
    if (isInArray({"yes", "join"}, msg:lower()) and talkState[talkUser] == 5) then
        setPlayerStorageValue(cid, 100157, 1)
        npcHandler:say("Great! A warm welcome to our newest member: "..getCreatureName(cid).."! Ask me for a {task} if you want to go on a hunt.", cid)
        talkState[talkUser] = 0
   elseif (msg:lower() == "no" and talkState[talkUser] == 5) then
        npcHandler:say("No problem old chap. Come back if you change your mind.", cid)
   end

if (getPlayerStorageValue(cid, 100157) == -1) then
    npcHandler:say("You'll have to {join} us to get more information.",cid)
    return false
end
if isInArray({"offer", "trade"}, msg:lower()) then
if getPlayerRank(cid) >= 2 then
        if getPlayerRank(cid) == 2 or getPlayerRank(cid) == 3 then
            tradeRank = grizzlyAdamsConfig.ranks.huntsMan_rank
        elseif getPlayerRank(cid) == 4 then
            tradeRank = grizzlyAdamsConfig.ranks.bigGameHunter_rank
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.bigGameHunter_rank)
        elseif getPlayerRank(cid) == 5 or getPlayerRank(cid) == 6 then
            tradeRank = grizzlyAdamsConfig.ranks.trophyHunter_rank
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.bigGameHunter_rank)
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.trophyHunter_rank)
        end
        local items = setNewTradeTable(tradeRank)
            local function onBuy(cid, item, subType, amount, ignoreCap, inBackpacks)
            if ignoreCap == false and (getPlayerFreeCap(cid) < getItemWeightById(items[item].itemId, amount) or inBackpacks and getPlayerFreeCap(cid) < (getItemWeightById(items[item].itemId, amount) + getItemWeightById(1988, 1))) then
                return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You don\'t have enough cap.')
            end
            if items[item].buyPrice then
                doPlayerRemoveMoney(cid, amount * items[item].buyPrice)
                for i = 1, amount do
                    if inBackpacks then
                        local backpack = doCreateItemEx(1988, 1)
                        doAddContainerItem(backpack, items[item].itemId, amount)
                    else
                        doPlayerAddItem(cid, items[item].itemId, amount, true)
                    end
                end
                return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You bought '..amount..'x '..items[item].realName..' for '..items[item].buyPrice * amount..' gold coins.')
            end
            return true
            end
           
            local function onSell(cid, item, subType, amount, ignoreCap, inBackpacks)
            if items[item].sellPrice then
                doPlayerAddMoney(cid, items[item].sellPrice * amount)
                doPlayerRemoveItem(cid, items[item].itemId, amount)
                return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You sold '..amount..'x '..items[item].realName..' for '..items[item].sellPrice * amount..' gold coins.')
            end
            return true
            end
        openShopWindow(cid, tradeRank, onBuy, onSell)
        return selfSay('It\'s my offer.', cid)
    else
        return selfSay('You don\'t have any rank.', cid)
        end
end
 
    if isInArray({"tasks", "task", "mission"}, msg:lower()) then
        local can = getTasksByPlayer(cid)
        if (getPlayerStorageValue(cid, 100157) == -1) then
             return (npcHandler:say("You'll have to {join}, to get any {tasks}.",cid))
        end
        if #can > 0 then
            local text = ""
            local sep = ", "
            table.sort(can, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(can) do
                t = t + 1
                if t == #can - 1 then
                    sep = " and "
                elseif t == #can then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
            selfSay("The current task" .. (#can > 1 and "s" or "") .. " that you can choose " .. (#can > 1 and "are" or "is") .. " " .. text, cid)
            talkState[talkUser] = 0
        else
            selfSay("I don't have any task for you right now.", cid)
        end
    elseif msg ~= "" and canStartTask(cid, msg) then
        if #getPlayerStartedTasks(cid) >= tasksByPlayer then
            selfSay("Sorry, but you already started " .. tasksByPlayer .. " tasks. You can check their {status} or {cancel} a task.", cid)
            return true
        end
        local task = getTaskByName(msg)
        if task and getCreatureStorage(cid, QUESTSTORAGE_BASE + task) > 0 then
            return false
        end
        selfSay("In this task you must defeat " .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Are you sure that you want to start this task?", cid)
        choose[cid] = task
        talkState[talkUser] = 1
    elseif msg:lower() == "yes" and talkState[talkUser] == 1 then
        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + choose[cid], 1)
        selfSay("Excellent! You can check the {status} of your task saying {report} to me. Also you can {cancel} tasks to.", cid)
        choose[cid] = nil
        talkState[talkUser] = 0  
    elseif (msg:lower() == "report" or msg:lower() == "status") then
        local started = getPlayerStartedTasks(cid)
        local finishedAtLeastOne = false
        local finished = 0
        if started and #started > 0 then
            for _, id in ipairs(started) do
                if getCreatureStorage(cid, KILLSSTORAGE_BASE + id) >= tasks[id].killsRequired then
                    for _, reward in ipairs(tasks[id].rewards) do
                        local deny = false
                        if reward.storage then
                            if getCreatureStorage(cid, reward.storage[1]) >= reward.storage[2] then
                                deny = true
                            end
                        end
                        if isInArray({REWARD_MONEY, "money"}, reward.type:lower()) and not deny then
                            doPlayerAddMoney(cid, reward.value[1])
                        elseif isInArray({REWARD_EXP, "exp", "experience"}, reward.type:lower()) and not deny then
                            doPlayerAddExperience(cid, reward.value[1])
                            doPlayerSendDefaultCancel(cid, "You gained " .. reward.value[1] .. " experience points.")
                        elseif isInArray({REWARD_ACHIEVEMENT, "achievement", "ach"}, reward.type:lower()) and not deny then
                            if doPlayerAddAchievement then
                                doPlayerAddAchievement(cid, reward.value[1], true)
                            end
                        elseif isInArray({REWARD_STORAGE, "storage", "stor"}, reward.type:lower()) and not deny then
                            doCreatureSetStorage(cid, reward.value[1], reward.value[2])
                        elseif isInArray({REWARD_POINT, "points", "point"}, reward.type:lower()) and not deny then
                            doCreatureSetStorage(cid, POINTSSTORAGE, getCreatureStorage(cid, POINTSSTORAGE) + reward.value[1])
                        elseif isInArray({REWARD_ITEM, "item", "items", "object"}, reward.type:lower()) and not deny then
                            doPlayerAddItem(cid, reward.value[1], reward.value[2])
                        end
 
                        if reward.storage then
                            doCreatureSetStorage(cid, reward.storage[1], reward.storage[2])
                        end
                    end
 
                    if tasks[id].norepeatable then
                        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + id, 2)
                    else
                        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + id, 0)
                    end
                    doCreatureSetStorage(cid, KILLSSTORAGE_BASE + id, 0)
                    if getCreatureStorage(cid, REPEATSTORAGE_BASE + id) < 1 then
                        doCreatureSetStorage(cid, REPEATSTORAGE_BASE + id, 0)
                    end
                    doCreatureSetStorage(cid, REPEATSTORAGE_BASE + id, getCreatureStorage(cid, REPEATSTORAGE_BASE + id) + 1)
                    finishedAtLeastOne = true
                    finished = finished + 1
                end
            end
 
            if not finishedAtLeastOne then
         local started = getPlayerStartedTasks(cid)
        if started and #started > 0 then
            local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if t == #started - 1 then
                    sep = " and "
                elseif t == #started then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
                selfSay("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text, cid)
                Topic[cid] = 1
            else
                selfSay("Awesome! you finished " .. (finished > 1 and "various" or "a") .. " task" .. (finished > 1 and "s" or "") .. ". Talk to me again if you want to start a {task}.", cid)
            end
        else
            selfSay("You haven't started any task yet.", cid)
        end
        end
    elseif msg:lower() == "started" then
        local started = getPlayerStartedTasks(cid)
        if started and #started > 0 then
            local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if t == #started - 1 then
                    sep = " and "
                elseif t == #started then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
 
            selfSay("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text, cid)
        else
            selfSay("You haven't started any task yet.", cid)
        end
    elseif msg:lower() == "cancel" then
        local started = getPlayerStartedTasks(cid)
        local task = getTaskByName(msg)
        local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if t == #started - 1 then
                    sep = " or "
                elseif t == #started then
                    sep = "?"
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
        if started and #started > 0 then
            selfSay("Cancelling a task will make the counter restart. Which of these tasks you want cancel?" .. (#started > 1 and "" or "") .. " " .. text, cid)
            talkState[talkUser] = 2
        else
            selfSay("You haven't started any task yet.", cid)
        end
    elseif getTaskByName(msg) and talkState[talkUser] == 2 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then
        local task = getTaskByName(msg)
        if getCreatureStorage(cid, KILLSSTORAGE_BASE + task) > 0 then
            selfSay("You currently killed " .. getCreatureStorage(cid, KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Cancelling this task will restart the count. Are you sure you want to cancel this task?", cid)
        else
            selfSay("Are you sure you want to cancel this task?", cid)
        end
        talkState[talkUser] = 3
        cancel[cid] = task
    elseif getTaskByName(msg) and Topic[cid] == 1 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then
        local task = getTaskByName(msg)
        if getCreatureStorage(cid, KILLSSTORAGE_BASE + task) > 0 then
            selfSay("You currently killed " .. getCreatureStorage(cid, KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ".", cid)
            Topic[cid] = 0
        else
            selfSay("You haven't started any task yet.", cid)
        end
    elseif msg:lower() == "yes" and talkState[talkUser] == 3 then
        doCreatureSetStorage(cid, QUESTSTORAGE_BASE + cancel[cid], -1)
        doCreatureSetStorage(cid, KILLSSTORAGE_BASE + cancel[cid], -1)
        selfSay("You have cancelled the task " .. (tasks[cancel[cid]].name or tasks[cancel[cid]].raceName) .. ".", cid)
        talkState[talkUser] = 0
    elseif isInArray({"points", "rank"}, msg:lower()) then
        if getCreatureStorage(cid, POINTSSTORAGE) < 1 then
        selfSay("At this time, you have 0 Paw & Fur points. You " .. (getPlayerRank(cid) == 6 and "are an Elite Hunter" or getPlayerRank(cid) == 5 and "are a Trophy Hunter" or getPlayerRank(cid) == 4 and "are a Big Game Hunter" or getPlayerRank(cid) == 3 and "are a Ranger" or getPlayerRank(cid) == 2 and "are a Huntsman" or getPlayerRank(cid) == 1 and "are a Member"  or "haven't been ranked yet") .. ".", cid)
        elseif getCreatureStorage(cid, POINTSSTORAGE) >= 1 then
        selfSay("At this time, you have " .. getCreatureStorage(cid, POINTSSTORAGE) .. " Paw & Fur points. You " .. (getPlayerRank(cid) == 6 and "are an Elite Hunter" or getPlayerRank(cid) == 5 and "are a Trophy Hunter" or getPlayerRank(cid) == 4 and "are a Big Game Hunter" or getPlayerRank(cid) == 3 and "are a Ranger" or getPlayerRank(cid) == 2 and "are a Huntsman" or getPlayerRank(cid) == 1 and "are a Member"  or "haven't been ranked yet") .. ".", cid)
        end
        talkState[talkUser] = 0
    end
end
 
npcHandler:setMessage(MESSAGE_FAREWELL, "Happy hunting, old chap!")
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
I noticed that your NPC scripts are not for TFS 1.x; they are for TFS 0.4. You will need to adapt them for TFS 1.x.
Do you only want a daily task, or is it a one-time mission?
 
so I decided and took your script.. and made corrections, changes and adaptation for tfs 1.x.. I haven't tested it yet... please test it and let me know here...
Lua:
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
 
local choose = {}
local cancel = {}
local available = {}

local grizzlyAdamsConfig = {
                            ranks = {
                                    huntsMan_rank = {
                                                    {id=11208, buy=0, sell=50, name='antlers'},
                                                    {id=10549, buy=0, sell=100, name='bloody pincers'},
                                                    {id=11183, buy=0, sell=35, name='crab pincers'},
                                                    {id=10573, buy=0, sell=55, name='cyclops toe'},
                                                    {id=10564, buy=0, sell=30, name='frosty ear of a troll'},
                                                    {id=11193, buy=0, sell=600, name='hydra head'},
                                                    {id=11366, buy=0, sell=80, name='lancer beetle shell'},
                                                    {id=10578, buy=0, sell=420, name='mutated bat ear'},
                                                    {id=11222, buy=0, sell=400, name='sabretooth'},
                                                    {id=11367, buy=0, sell=20, name='sandcrawler shell'},
                                                    {id=10547, buy=0, sell=280, name='scarab pincers'},
                                                    {id=11365, buy=0, sell=60, name='terramite legs'},
                                                    {id=11363, buy=0, sell=170, name='terramite shell'},
                                                    {id=11184, buy=0, sell=30000, name='terrorbird beak'},
                                                   
                                                    {id=7398, buy=0, sell=500, name='cyclops trophy'},
                                                    {id=11315, buy=0, sell=15000, name='draken trophy'},
                                                    {id=11330, buy=0, sell=8000, name='lizard trophy'},
                                                    {id=7401, buy=0, sell=500, name='minotaur trophy'}
                                                    },

                                    bigGameHunter_rank = {
                                                    {id=7397, buy=0, sell=3000, name='deer trophy'},
                                                    {id=7400, buy=0, sell=3000, name='lion trophy'},
                                                    {id=7394, buy=0, sell=3000, name='wolf trophy'}
                                                    },

                                    trophyHunter_rank = {
                                                    {id=7393, buy=0, sell=40000, name='demon trophy'},
                                                    {id=7396, buy=0, sell=20000, name='behemoth trophy'},
                                                    {id=7399, buy=0, sell=10000, name='dragon lord trophy'},
                                                   
                                                    {id=10518, buy=1000, sell=0, name='demon backpack'},
                                                    },
                                    }
                            }

local Topic = {}
local function greetCallback(cid)
    Topic[cid] = 0
    return true
end

local function setNewTradeTable(table)
    local items = {}
    for _, v in ipairs(table) do
        items[v.id] = {itemId = v.id, buyPrice = v.buy, sellPrice = v.sell, subType = 0, realName = v.name}
    end
    return items
end

local function setNewLineTable(oldTable, newTable)
    for k, v in pairs(oldTable) do
        table.insert(newTable, k, v)
    end
    return true
end

local function creatureSayCallback(cid, type, msg)
    local player = Player(cid)
    if (msgcontains(msg, "hi") or msgcontains(msg, "hello")) and (not npcHandler:isFocused(cid)) then
        if (player:getStorageValue(JOIN_STOR) == -1) then
            npcHandler:say("Welcome "..getCreatureName(cid)..". Would you like to join the 'Paw and Fur - Hunting Elite'?", cid)
            npcHandler:addFocus(cid)
            npcHandler.topic[cid] = 5
        else
            npcHandler:say("Welcome back old chap. What brings you here this time?", cid)
            npcHandler:addFocus(cid)
            npcHandler.topic[cid] = 0
            end
            return true
        end
   
        if(not npcHandler:isFocused(cid)) then
            return false
        end
       
        if msgcontains(msg, "bye") or msgcontains(msg, "farewell") then
            npcHandler:say("Happy hunting, old chap!", cid, TRUE)
            Topic[talkUser] = 0
            npcHandler:releaseFocus(cid)
            npcHandler:resetNpc(cid)
        end
       
        if (isInArray({"yes", "join"}, msg:lower()) and npcHandler.topic[cid] == 5) then
            player:setStorageValue(JOIN_STOR, 1)
            npcHandler:say("Great! A warm welcome to our newest member: "..getCreatureName(cid).."! Ask me for a {task} if you want to go on a hunt.", cid)
            npcHandler.topic[cid] = 0
        elseif (msg:lower() == "no" and npcHandler.topic[cid] == 5) then
            npcHandler:say("No problem old chap. Come back if you change your mind.", cid)
        end

        if (player:getStorageValue(JOIN_STOR) == -1) then
                npcHandler:say("You'll have to {join} us to get more information.",cid)
    return false
end
if isInArray({"offer", "trade"}, msg:lower()) then
    if getPlayerRank(cid) >= 2 then
        if getPlayerRank(cid) == 2 or getPlayerRank(cid) == 3 then
            tradeRank = grizzlyAdamsConfig.ranks.huntsMan_rank
        elseif getPlayerRank(cid) == 4 then
            tradeRank = grizzlyAdamsConfig.ranks.bigGameHunter_rank
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.bigGameHunter_rank)
        elseif getPlayerRank(cid) == 5 or getPlayerRank(cid) == 6 then
            tradeRank = grizzlyAdamsConfig.ranks.trophyHunter_rank
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.bigGameHunter_rank)
            setNewLineTable(grizzlyAdamsConfig.ranks.huntsMan_rank, grizzlyAdamsConfig.ranks.trophyHunter_rank)
        end
        local items = setNewTradeTable(tradeRank)
        local function onBuy(cid, item, subType, amount, ignoreCap, inBackpacks)
            if ignoreCap == false and (player:getFreeCapacity() < getItemWeight(items[item].itemId, amount) or inBackpacks and player:getFreeCap() < (getItemWeight(items[item].itemId, amount) + getItemWeight(1988, 1))) then
                return player:sendTextMessage(MESSAGE_INFO_DESCR, 'You don\'t have enough cap.')
            end
            if items[item].buyPrice then
                player:removeMoney(amount * items[item].buyPrice)
                for i = 1, amount do
                    if inBackpacks then
                        local backpack = doCreateItemEx(1988, 1)
                        doAddContainerItem(backpack, items[item].itemId, amount)
                    else
                        player:addItem(items[item].itemId, amount, true)
                    end
                end
                return player:sendTextMessage(MESSAGE_INFO_DESCR, 'You bought '..amount..'x '..items[item].realName..' for '..items[item].buyPrice * amount..' gold coins.')
            end
            return true
            end
           
        local function onSell(cid, item, subType, amount, ignoreCap, inBackpacks)
            if items[item].sellPrice then
                player:addMoney(items[item].sellPrice * amount)
                player:removeItem(items[item].itemId, amount)
                return player:sendTextMessage(cid, MESSAGE_INFO_DESCR, 'You sold '..amount..'x '..items[item].realName..' for '..items[item].sellPrice * amount..' gold coins.')
            end
            return true
        end
        openShopWindow(cid, tradeRank, onBuy, onSell)
        return npcHandler:say('It\'s my offer.', cid)
    else
        return npcHandler:say('You don\'t have any rank.', cid)
        end
end
 
    if isInArray({"tasks", "task", "mission"}, msg:lower()) then
        local can = getTasksByPlayer(cid)
        if (player:getStorageValue(JOIN_STOR) == -1) then
             return (npcHandler:say("You'll have to {join}, to get any {tasks}.",cid))
        end
        if #can > 0 then
            local text = ""
            local sep = ", "
            table.sort(can, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(can) do
                t = t + 1
                if t == #can - 1 then
                    sep = " and "
                elseif t == #can then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
            npcHandler:say("The current task" .. (#can > 1 and "s" or "") .. " that you can choose " .. (#can > 1 and "are" or "is") .. " " .. text, cid)
            npcHandler.topic[cid] = 0
        else
            npcHandler:say("I don't have any task for you right now.", cid)
        end
    elseif msg ~= "" and canStartTask(cid, msg) then
        if #getPlayerStartedTasks(cid) >= tasksByPlayer then
            npcHandler:say("Sorry, but you already started " .. tasksByPlayer .. " tasks. You can check their {status} or {cancel} a task.", cid)
            return true
        end
        local task = getTaskByName(msg)
        if task and player:getStorageValue(QUESTSTORAGE_BASE + task) > 0 then
            return false
        end
        npcHandler:say("In this task you must defeat " .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Are you sure that you want to start this task?", cid)
        choose[cid] = task
        npcHandler.topic[cid] = 1
    elseif msg:lower() == "yes" and npcHandler.topic[cid] == 1 then
        player:setStorageValue(QUESTSTORAGE_BASE + choose[cid], 1)
        player:setStorageValue(KILLSSTORAGE_BASE + choose[cid], 0)
        npcHandler:say("Excellent! You can check the {status} of your task saying {report} to me. Also you can {cancel} tasks to.", cid)
        choose[cid] = nil
        npcHandler.topic[cid] = 0  
    elseif (msg:lower() == "report" or msg:lower() == "status") then
        local started = getPlayerStartedTasks(cid)
        local finishedAtLeastOne = false
        local finished = 0
        if started and #started > 0 then
            for _, id in ipairs(started) do
                if player:getStorageValue(KILLSSTORAGE_BASE + id) >= tasks[id].killsRequired then
                    for _, reward in ipairs(tasks[id].rewards) do
                        local deny = false
                        if reward.storage then
                            if player:getStorageValue(reward.storage[1]) >= reward.storage[2] then
                                deny = true
                            end
                        end
                        if isInArray({REWARD_MONEY, "money"}, reward.type:lower()) and not deny then
                            doPlayerAddMoney(cid, reward.value[1])
                        elseif isInArray({REWARD_EXP, "exp", "experience"}, reward.type:lower()) and not deny then
                            doPlayerAddExp(cid, reward.value[1], false, reward.value[1], false, true)
                            doPlayerSendDefaultCancel(cid, "You gained " .. reward.value[1] .. " experience points.")
                        elseif isInArray({REWARD_ACHIEVEMENT, "achievement", "ach"}, reward.type:lower()) and not deny then
                        elseif isInArray({REWARD_STORAGE, "storage", "stor"}, reward.type:lower()) and not deny then
                            player:setStorageValue(reward.value[1], reward.value[2])
                        elseif isInArray({REWARD_POINT, "points", "point"}, reward.type:lower()) and not deny then
                            player:setStorageValue(POINTSSTORAGE, player:getStorageValue(POINTSSTORAGE) + reward.value[1])
                        elseif isInArray({REWARD_ITEM, "item", "items", "object"}, reward.type:lower()) and not deny then
                            doPlayerAddItem(cid, reward.value[1], reward.value[2])
                        end
 
                        if reward.storage then
                            player:setStorageValue(reward.storage[1], reward.storage[2])
                        end
                    end
 
                    if tasks[id].norepeatable then
                        player:setStorageValue(QUESTSTORAGE_BASE + id, 2)
                    else
                        player:setStorageValue(QUESTSTORAGE_BASE + id, 0)
                    end
                    player:setStorageValue(KILLSSTORAGE_BASE + id, 0)
                    if player:getStorageValue(REPEATSTORAGE_BASE + id) < 1 then
                        player:setStorageValue(REPEATSTORAGE_BASE + id, 0)
                    end
                    player:setStorageValue(REPEATSTORAGE_BASE + id, player:getStorageValue(REPEATSTORAGE_BASE + id) + 1)
                    finishedAtLeastOne = true
                    finished = finished + 1
                end
            end
    if (not finishedAtLeastOne) then
         local started = getPlayerStartedTasks(cid)
        if (started and #started > 0) then  
            local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if (t == #started - 1) then
                    sep = " and "
                elseif (t == #started) then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
                npcHandler:say("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text, cid)
                Topic[cid] = 1
            else
                npcHandler:say("Awesome! you finished " .. (finished > 1 and "various" or "a") .. " task" .. (finished > 1 and "s" or "") .. ". Talk to me again if you want to start a {task}.", cid)
            end
        else
            npcHandler:say("You haven't started any task yet.", cid)
        end
    end
    elseif msg:lower() == "started" then
        local started = getPlayerStartedTasks(cid)
        if started and #started > 0 then
            local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if t == #started - 1 then
                    sep = " and "
                elseif t == #started then
                    sep = "."
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
 
            npcHandler:say("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text, cid)
        else
            npcHandler:say("You haven't started any task yet.", cid)
        end
    elseif msg:lower() == "cancel" then
        local started = getPlayerStartedTasks(cid)
        local task = getTaskByName(msg)
        local text = ""
            local sep = ", "
            table.sort(started, (function(a, b) return (a < b) end))
            local t = 0
            for _, id in ipairs(started) do
                t = t + 1
                if t == #started - 1 then
                    sep = " or "
                elseif t == #started then
                    sep = "?"
                end
                text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
            end
        if started and #started > 0 then
            npcHandler:say("Cancelling a task will make the counter restart. Which of these tasks you want cancel?" .. (#started > 1 and "" or "") .. " " .. text, cid)
            npcHandler.topic[cid] = 2
        else
            npcHandler:say("You haven't started any task yet.", cid)
        end
    elseif getTaskByName(msg) and npcHandler.topic[cid] == 2 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then
        local task = getTaskByName(msg)
        if player:getStorageValue(KILLSSTORAGE_BASE + task) > 0 then
            npcHandler:say("You currently killed " .. player:getStorageValue(KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Cancelling this task will restart the count. Are you sure you want to cancel this task?", cid)
        else
            npcHandler:say("Are you sure you want to cancel this task?", cid)
        end
        npcHandler.topic[cid] = 3
        cancel[cid] = task
    elseif getTaskByName(msg) and Topic[cid] == 1 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then
        local task = getTaskByName(msg)
        if player:getStorageValue(KILLSSTORAGE_BASE + task) > 0 then
            npcHandler:say("You currently killed " .. player:getStorageValue(KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ".", cid)
            Topic[cid] = 0
        else
            npcHandler:say("You currently killed 0/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ".", cid)
        end
    elseif msg:lower() == "yes" and npcHandler.topic[cid] == 3 then
        player:setStorageValue(QUESTSTORAGE_BASE + cancel[cid], -1)
        player:setStorageValue(KILLSSTORAGE_BASE + cancel[cid], -1)
        npcHandler:say("You have cancelled the task " .. (tasks[cancel[cid]].name or tasks[cancel[cid]].raceName) .. ".", cid)
        npcHandler.topic[cid] = 0
    elseif isInArray({"points", "rank"}, msg:lower()) then
        if player:getStorageValue(POINTSSTORAGE) < 1 then
        npcHandler:say("At this time, you have 0 Paw & Fur points. You " .. (getPlayerRank(cid) == 6 and "are an Elite Hunter" or getPlayerRank(cid) == 5 and "are a Trophy Hunter" or getPlayerRank(cid) == 4 and "are a Big Game Hunter" or getPlayerRank(cid) == 3 and "are a Ranger" or getPlayerRank(cid) == 2 and "are a Huntsman" or getPlayerRank(cid) == 1 and "are a Member"  or "haven't been ranked yet") .. ".", cid)
        elseif player:getStorageValue(POINTSSTORAGE) >= 1 then
        npcHandler:say("At this time, you have " .. player:getStorageValue(POINTSSTORAGE) .. " Paw & Fur points. You " .. (getPlayerRank(cid) == 6 and "are an Elite Hunter" or getPlayerRank(cid) == 5 and "are a Trophy Hunter" or getPlayerRank(cid) == 4 and "are a Big Game Hunter" or getPlayerRank(cid) == 3 and "are a Ranger" or getPlayerRank(cid) == 2 and "are a Huntsman" or getPlayerRank(cid) == 1 and "are a Member"  or "haven't been ranked yet") .. ".", cid)
        end
        npcHandler.topic[cid] = 0
    end
end
 
npcHandler:setMessage(MESSAGE_FAREWELL, "Happy hunting, old chap!")
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
 
Last edited:
14:01 Grizzly Adams: You currently killed 0/800 Serpent Spawns.

I thing is something wron in creature scripts

Creaturescripts.xml

<event type="kill" name="KillingInTheNameOf" script="killinginthenameof.lua"/>

Script
function onKill(cid, target, lastHit)

local started = getPlayerStartedTasks(cid)
if isPlayer(target) then return true end
if started and #started > 0 then
for _, id in ipairs(started) do
if isInArray(tasks[id].creatures, getCreatureName(target):lower()) then
if getCreatureStorage(cid, KILLSSTORAGE_BASE + id) < 0 then
doCreatureSetStorage(cid, KILLSSTORAGE_BASE + id, 0)
end
if getCreatureStorage(cid, KILLSSTORAGE_BASE + id) < tasks[id].killsRequired then
doCreatureSetStorage(cid, KILLSSTORAGE_BASE + id, getCreatureStorage(cid, KILLSSTORAGE_BASE + id) + 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, getCreatureStorage(cid, KILLSSTORAGE_BASE + id) .. "/" .. tasks[id].killsRequired .. " " .. tasks[id].raceName .. " already killed.")
end
end
end
end
return true
end
login.lua

player:registerEvent("KillingInTheNameOf")
 
Tested and working, OK.

That's right, the NPC I posted above, along with these necessary files to make it work. Cool!!... Have fun :)

What else do you need to add here?


Lua:
<!-- Killing In The Name Of Quest -->
    <event type="kill" name="killingInTheNameOfQuestKills" script="killing in the name of quest/killingInTheNameOfQuestKills.lua"/>

login.lua
player:registerEvent("killingInTheNameOfQuestKills")


Creaturescripts.
Lua:
function onKill(cid, target, lastHit)
    local targetCreature = Creature(target)
    if targetCreature:isPlayer() or targetCreature:getMaster() then
        return true
    end

    local player = Player(cid)
    local started = getPlayerStartedTasks(cid)
    if started and #started > 0 then
        for _, taskId in ipairs(started) do
            if isInArray(tasks[taskId].creatures, targetCreature:getName():lower()) then
                local killAmount = player:getStorageValue(KILLSSTORAGE_BASE + taskId)
                if killAmount < tasks[taskId].killsRequired then
                    player:setStorageValue(KILLSSTORAGE_BASE + taskId, killAmount + 1)
                    
                    local monster = targetCreature:getName()
                    local currentKills = player:getStorageValue(KILLSSTORAGE_BASE + taskId)
                    local totalKills = tasks[taskId].killsRequired
                    local message = "[~TASK SYSTEM~] You successfully killed " .. monster .. ". Task progress: " .. currentKills .. "/" .. totalKills .. "."
                    player:sendTextMessage(MESSAGE_STATUS_DEFAULT, message)
                end
            end
        end
    end
    return true
end

add to your lib:
killingInTheNameOfQuest.lua

Lua:
--[[
    TODO
        Unite all related variables / functions in a table
        rewrite functions like "getTasksByPlayer" to "Player.getTasks"
]]

RANK_NONE = 0
RANK_JOIN = 1
RANK_HUNTSMAN = 2
RANK_RANGER = 3
RANK_BIGGAMEHUNTER = 4
RANK_TROPHYHUNTER = 5
RANK_ELITEHUNTER = 6

REWARD_MONEY = 1
REWARD_EXP = 2
REWARD_ACHIEVEMENT = 3
REWARD_STORAGE = 4
REWARD_POINT = 5
REWARD_ITEM = 6

QUESTSTORAGE_BASE = 1500
JOIN_STOR = 100157
KILLSSTORAGE_BASE = 65000
REPEATSTORAGE_BASE = 48950
POINTSSTORAGE = 2500
tasks =
{
    [1] = {killsRequired = 100, raceName = "Trolls", level = {6, 19}, premium = true, creatures = {"troll", "troll champion", "island troll", "swamp troll"}, rewards = {{type = "exp", value = {200}},{type = "money", value = {200}}}},
    [2] = {killsRequired = 150, raceName = "Goblins", level = {6, 19}, premium = true, creatures = {"goblin", "goblin assassin", "goblin leader"}, rewards = {{type = "exp", value = {300}},{type = "money", value = {250}}}},
    [3] = {killsRequired = 300, raceName = "Crocodiles", level = {6, 49}, premium = true, creatures = {"crocodile"}, rewards = {{type = "exp", value = {800}},{type = "achievement", value = {"Blood-Red Snapper"}},{type = "storage", value = {35000, 1}},{type = "points", value = {1}}}},
    [4] = {killsRequired = 300, raceName = "Badgers", level = {6, 49}, premium = true, creatures = {"badger"}, rewards = {{type = "exp", value = {500}},{type = "points", value = {1}}}},
    [5] = {killsRequired = 300, raceName = "Tarantulas", level = {6, 49}, premium = true, creatures = {"tarantula"}, rewards = {{type = "exp", value = {1500}},{type = "achievement", value = {"No More Hiding"}},{type = "storage", value = {35001, 1}},{type = "points", value = {2}}}},
    [6] = {killsRequired = 150, raceName = "Carniphilas", level = {6, 49}, premium = true, creatures = {"carniphila"}, rewards = {{type = "exp", value = {2500}},{type = "achievement", value = {"Rootless Behaviour"}},{type = "storage", value = {35002, 1}},{type = "points", value = {3}}}},
    [7] = {killsRequired = 200, raceName = "Stone Golems", level = {6, 49}, premium = true, creatures = {"stone golem"}, rewards = {{type = "exp", value = {2000}},{type = "points", value = {3}}}},
    [8] = {killsRequired = 300, raceName = "Mammoths", level = {6, 49}, premium = true, creatures = {"mammoth"}, rewards = {{type = "exp", value = {4000}},{type = "achievement", value = {"Meat Skewer"}},{type = "storage", value = {35003, 1}},{type = "points", value = {3}}}},
    [9] = {killsRequired = 300, raceName = "Gnarlhounds", level = {6, 49}, premium = true, creatures = {"gnarlhound"}, rewards = {{type = "exp", value = {1000}},{type = "points", value = {2}}}},
    [10] = {killsRequired = 300, raceName = "Terramites", level = {6, 49}, premium = true, creatures = {"terramite"}, rewards = {{type = "exp", value = {1000}},{type = "points", value = {2}}}},
    [11] = {killsRequired = 300, raceName = "Apes", level = {6, 49}, premium = true, creatures = {"kongra", "sibang", "merklin"}, rewards = {{type = "exp", value = {1000}},{type = "points", value = {2}}}},
    [12] = {killsRequired = 300, raceName = "Thornback Tortoises", level = {6, 49}, premium = true, creatures = {"thornback tortoise"}, rewards = {{type = "exp", value = {1500}},{type = "points", value = {2}}}},
    [13] = {killsRequired = 300, raceName = "Gargoyles", level = {6, 49}, premium = true, creatures = {"gargoyle"}, rewards = {{type = "exp", value = {1500}}}},
    [14] = {killsRequired = 300, raceName = "Ice Golems", level = {50, 79}, premium = true, creatures = {"ice golem"}, rewards = {{type = "exp", value = {12000}},{type = "achievement", value = {"Breaking The Ice"}},{type = "storage", value = {35004, 1}},{type = "points", value = {2}}}},
    [15] = {killsRequired = 400, raceName = "Quara Scouts", level = {50, 79}, premium = true, creatures = {"quara pincher scout", "quara predator scout", "quara hydromancer scout", "quara constrictor scout", "quara mantassin scout"}, rewards = {{type = "exp", value = {10000}},{type = "points", value = {2}}}},
    [16] = {killsRequired = 400, raceName = "Mutated Rats", level = {50, 79}, premium = true, creatures = {"mutated rat"}, rewards = {{type = "exp", value = {10000}},{type = "achievement", value = {"Twisted Mutation"}},{type = "storage", value = {35005, 1}},{type = "points", value = {2}}}},                                                                                          
    [17] = {killsRequired = 250, raceName = "Ancient Scarabs", level = {50, 79}, premium = true, creatures = {"ancient scarab"}, rewards = {{type = "exp", value = {15000}},{type = "achievement", value = {"Crawling Death"}},{type = "storage", value = {35006, 1}},{type = "points", value = {2}}}},
    [18] = {killsRequired = 300, raceName = "Wyverns", level = {50, 79}, premium = true, creatures = {"wyvern"}, rewards = {{type = "exp", value = {12000}},{type = "points", value = {2}}}},                                                                                                  
    [19] = {killsRequired = 300, raceName = "Lancer Beetles", level = {50, 79}, premium = true, creatures = {"lancer beetle"}, rewards = {{type = "exp", value = {8000}},{type = "points", value = {2}}}},                                                                                                  
    [20] = {killsRequired = 400, raceName = "Wailing Widows", level = {50, 79}, premium = true, creatures = {"wailing widow"}, rewards = {{type = "exp", value = {12000}},{type = "points", value = {3}}}},                                                                                                  
    [21] = {killsRequired = 250, raceName = "Killer Caimans", level = {50, 79}, premium = true, creatures = {"killer caiman"}, rewards = {{type = "exp", value = {10000}},{type = "points", value = {2}}}},                                                                                                  
    [22] = {killsRequired = 300, raceName = "Bonebeasts", level = {50, 79}, premium = true, creatures = {"bonebeast"}, rewards = {{type = "exp", value = {12000}},{type = "achievement", value = {"Spareribs for Dinner"}},{type = "storage", value = {35007, 1}},{type = "points", value = {2}}}},
    [23] = {killsRequired = 300, raceName = "Crystal Spiders", level = {50, 79}, creatures = {"crystal spider"}, premium = true, rewards = {{type = "exp", value = {15000}},{type = "achievement", value = {"Arachnoise"}},{type = "storage", value = {35008, 1}},{type = "points", value = {3}}}},
    [24] = {killsRequired = 300, raceName = "Mutated Tigers", level = {50, 79}, premium = true, creatures = {"mutated tiger"}, rewards = {{type = "exp", value = {12000}},{type = "points", value = {2}}}},
    [25] = {killsRequired = 600, raceName = "Underwater Quara", level = {80, 129}, premium = true, creatures = {"quara hydromancer", "quara predator", "quara constrictor", "quara mantassin", "quara pincher"}, rewards = {{type = "exp", value = {15000}},{type = "achievement", value = {"Back into the Abyss"}},{type = "storage", value = {35009, 1}},{type = "points", value = {3}}}},
    [26] = {killsRequired = 500, raceName = "Giant Spiders", level = {80, 129}, premium = true, creatures = {"giant spider"}, rewards = {{type = "exp", value = {20000}},{type = "achievement", value = {"Choking on Her Venom"}},{type = "storage", value = {35010, 1}},{type = "points", value = {3}}}},
    [27] = {killsRequired = 300, raceName = "Werewolves", level = {80, 129}, premium = true, creatures = {"werewolf"}, rewards = {{type = "exp", value = {30000}},{type = "achievement", value = {"Howly Silence"}},{type = "storage", value = {35011, 1}},{type = "points", value = {4}}}},
    [28] = {killsRequired = 400, raceName = "Nightmares", level = {80, 129}, premium = true, creatures = {"nightmare", "nightmare scion"}, rewards = {{type = "exp", value = {25000}},{type = "achievement", value = {"Dream is Over"}},{type = "storage", value = {35012, 1}},{type = "points", value = {3}}}},  
    [29] = {killsRequired = 600, raceName = "Hellspawns", level = {80, 129}, premium = true, creatures = {"hellspawn"}, rewards = {{type = "exp", value = {25000}},{type = "achievement", value = {"Scorched Flames"}},{type = "storage", value = {35013, 1}}}},
    [30] = {killsRequired = 800, raceName = "High Class Lizards", level = {80, 129}, premium = true, creatures = {"lizard chosen", "lizard dragon priest", "lizard high guard", "lizard legionnaire"}, rewards = {{type = "exp", value = {30000}},{type = "achievement", value = {"Zzztill Zzztanding!"}},{type = "storage", value = {35014, 1}},{type = "points", value = {3}}}},
    [31] = {killsRequired = 600, raceName = "Stampors", level = {80, 129}, premium = true, creatures = {"stampor"}, rewards = {{type = "exp", value = {20000}},{type = "achievement", value = {"Stepped on a Big Toe"}},{type = "storage", value = {35015, 1}},{type = "points", value = {3}}}},  
    [32] = {killsRequired = 500, raceName = "Brimstone Bugs", level = {80, 129}, premium = true, creatures = {"brimstone bug"}, rewards = {{type = "exp", value = {15000}},{type = "achievement", value = {"Something Smells"}},{type = "storage", value = {35016, 1}},{type = "points", value = {3}}}},
    [33] = {killsRequired = 400, raceName = "Mutated Bats", level = {80, 129}, premium = true, creatures = {"mutated bat"}, rewards = {{type = "exp", value = {20000}},{type = "achievement", value = {"Kapow!"}},{type = "storage", value = {35017, 1}},{type = "points", value = {2}}}},                                      
    [34] = {killsRequired = 650, raceName = "Hydras", level = {130, 9999}, premium = true, creatures = {"hydra"}, rewards = {{type = "exp", value = {30000}},{type = "achievement", value = {"One Less"}},{type = "storage", value = {35018, 1}},{type = "points", value = {3}}}},
    [35] = {killsRequired = 800, raceName = "Serpent Spawns", level = {130, 9999}, premium = true, creatures = {"serpent spawn"}, rewards = {{type = "exp", value = {30000}},{type = "achievement", value = {"Hissing Downfall"}},{type = "storage", value = {35019, 1}},{type = "points", value = {4}}}},  
    [36] = {killsRequired = 500, raceName = "Medusae", level = {130, 9999}, premium = true, creatures = {"medusa"}, rewards = {{type = "exp", value = {40000}},{type = "achievement", value = {"The Serpent's Bride"}},{type = "storage", value = {35020, 1}},{type = "points", value = {5}}}},
    [37] = {killsRequired = 700, raceName = "Behemoths", level = {130, 9999}, premium = true, creatures = {"behemoth"}, rewards = {{type = "exp", value = {30000}},{type = "achievement", value = {"Just Cracked Me Up!"}},{type = "storage", value = {35021, 1}},{type = "points", value = {4}}}},
    [38] = {killsRequired = 900, raceName = "Sea Serpents and Young Sea Serpents", level = {130, 9999}, premium = true, creatures = {"sea serpent", "young sea serpent"}, rewards = {{type = "exp", value = {30000}},{type = "achievement", value = {"The Drowned Sea God"}},{type = "storage", value = {35022, 1}},{type = "points", value = {4}}}},  
    [39] = {killsRequired = 250, raceName = "Hellhounds", level = {130, 9999}, premium = true, creatures = {"hellhound"}, rewards = {{type = "exp", value = {40000}},{type = "achievement", value = {"The Gates of Hell"}},{type = "storage", value = {35023, 1}},{type = "points", value = {5}}}},  
    [40] = {killsRequired = 500, raceName = "Ghastly Dragons", level = {130, 9999}, premium = true, creatures = {"ghastly dragon"}, rewards = {{type = "exp", value = {30000}},{type = "achievement", value = {"Beautiful Agony"}},{type = "storage", value = {35024, 1}},{type = "points", value = {5}}}},  
    [41] = {killsRequired = 900, raceName = "Drakens", level = {130, 9999}, premium = true, creatures = {"draken spellweaver", "draken warmaster", "draken abomination", "draken elite"} , rewards = {{type = "exp", value = {30000}},{type = "achievement", value = {"Enter zze Draken!"}},{type = "storage", value = {35025, 1}},{type = "points", value = {3}}}},
    [42] = {killsRequired = 650, raceName = "Destroyers", level = {130, 9999}, premium = true, creatures = {"destroyer"}, rewards = {{type = "exp", value = {30000}},{type = "achievement", value = {"Best there was!"}},{type = "storage", value = {35026, 1}},{type = "points", value = {4}}}},      
    [43] = {killsRequired = 400, raceName = "Undead Dragons", level = {130, 9999}, premium = true, creatures = {"undead dragon"}, rewards = {{type = "exp", value = {50000}},{type = "achievement", value = {"Back from the Dead"}},{type = "storage", value = {35027, 1}},{type = "points", value = {6}}}},
    [44] = {killsRequired = 6666, raceName = "Demons", level = {130, 9999}, rank = RANK_ELITEHUNTER, premium = true, creatures = {"demon"}, rewards = {{type = "storage", value = {41300, 1}}}},
    [45] = {killsRequired = 500, raceName = "Green Djinns or Efreets", level = {1, 9999}, storage = {12500, 1}, premium = true, creatures = {"green djinn", "efreet"}, rewards = {{type = "exp", value = {10000}},{type = "money", value = {5000}},{type = "storage", value = {35028, 1}}}},
    [46] = {killsRequired = 500, raceName = "Blue Djinns or Marids", level = {1, 9999}, storage = {12501, 1}, premium = true, creatures = {"blue djinn", "marid"}, rewards = {{type = "exp", value = {10000}},{type = "money", value = {5000}},{type = "storage", value = {35029, 1}}}},  
    [47] = {killsRequired = 3000, raceName = "Pirates", level = {1, 9999}, storage = {12600, 1}, premium = true, creatures = {"pirate ghost", "pirate marauder", "pirate cutthroad", "pirate buccaneer", "pirate corsair", "pirate skeleton"}, rewards = {{type = "exp", value = {10000}},{type = "money", value = {5000}},{type = "storage", value = {35030, 1}}}},
    [48] = {killsRequired = 3000, raceName = "Pirates second task", level = {1, 9999}, storage = {REPEATSTORAGE_BASE + 47, 3}, norepeatable = true, premium = true, creatures = {"pirate ghost", "pirate marauder", "pirate cutthroad", "pirate buccaneer", "pirate corsair", "pirate skeleton"}, rewards = {{type = "exp", value = {10000}},{type = "money", value = {5000}},{type = "storage", value = {35031, 1}}}},
    [49] = {killsRequired = 5000, raceName = "Minotaurs", level = {1, 40}, storage = {12700, 1}, norepeatable = true, premium = false, creatures = {"minotaur", "minotaur mage", "minotaur archer"}, rewards = {{type = "storage", value = {35032, 1}}}},
    [50] = {killsRequired = 4000, raceName = "Necromancers and Priestess", level = {60, 9999}, norepeatable = true, premium = true, creatures = {"necromancer", "priestess"}, rewards = {{type = "storage", value = {35033, 1}},{type = "storage", value = {12800, 1}}}},
    [49] = {killsRequired = 1000, name = "Necromancers and Priestess second task", raceName = "Necromancers and Priestess", level = {60, 9999}, storage = {12800, 1}, norepeatable = true, premium = true, creatures = {"necromancer", "priestess"}, rewards = {{type = "exp", value = {40000}},{type = "storage", value = {35033, 1}}}},                                                                                                                                  
}

tasksByPlayer = 3
repeatTimes = 3

function getPlayerRank(cid)
    local p = Player(cid)
    return (p:getStorageValue(POINTSSTORAGE) >= 100 and RANK_ELITEHUNTER or p:getStorageValue(POINTSSTORAGE) >= 70 and RANK_TROPHYHUNTER or p:getStorageValue(POINTSSTORAGE) >= 40 and RANK_BIGGAMEHUNTER or p:getStorageValue(POINTSSTORAGE) >= 20 and RANK_RANGER or p:getStorageValue(POINTSSTORAGE) >= 10 and RANK_HUNTSMAN or p:getStorageValue(JOIN_STOR) == 1 and RANK_JOIN or RANK_NONE)
end

function getTaskByName(name, table)
    local t = (table and table or tasks)
    for k, v in pairs(t) do
        if(v.name) then
            if(v.name:lower() == name:lower()) then
                return k
            end
        else
            if(v.raceName:lower() == name:lower()) then
                return k
            end
        end
    end
    return false
end

function getTasksByPlayer(cid)
    local p = Player(cid)
    local canmake = {}
    local able = {}
    for k, v in pairs(tasks) do
        if(p:getStorageValue(QUESTSTORAGE_BASE + k) < 1 and p:getStorageValue(REPEATSTORAGE_BASE + k) < repeatTimes) then
            able[k] = true
            if(p:getLevel() < v.level[1] or p:getLevel() > v.level[2]) then
                able[k] = false
            end
            if(v.storage and p:getStorageValue(v.storage[1]) < v.storage[2]) then
                able[k] = false
            end

            if(v.rank) then
                if(getPlayerRank(cid) < v.rank) then
                    able[k] = false
                end
            end

            if(v.premium) then
                if(not(isPremium(cid))) then
                    able[k] = false
                end
            end

            if(able[k]) then
                table.insert(canmake, k)
            end
        end
    end
    return canmake
end

function canStartTask(cid, name, table)
    local p = Player(cid)
    local v = ""
    local id = 0
    local t = (table and table or tasks)
    for k, i in pairs(t) do
        if(i.name) then
            if(i.name:lower() == name:lower()) then
                v = i
                id = k
                break
            end
        else
            if(i.raceName:lower() == name:lower()) then
                v = i
                id = k
                break
            end
        end
    end
    if(v == "") then
        return false
    end
    if(p:getStorageValue(QUESTSTORAGE_BASE + id) > 0) then
        return false
    end
    if(p:getStorageValue(REPEATSTORAGE_BASE +  id) >= repeatTimes) or (v.norepeatable and p:getStorageValue(REPEATSTORAGE_BASE +  id) > 0) then
        return false
    end
    if(p:getLevel() >= v.level[1] and p:getLevel() <= v.level[2]) then
        if(v.premium) then
            if(isPremium(cid)) then
                if(v.rank) then
                    if(getPlayerRank(cid) >= v.rank) then
                        if(v.storage) then
                            if(p:getStorageValue(v.storage[1]) >= v.storage[2]) then
                                return true
                            end
                        else
                            return true
                        end
                    end
                else
                    return true
                end
            end
        else
            return true
        end
    end
    return false
end

function getPlayerStartedTasks(cid)
    local p = Player(cid)
    local tmp = {}
    for k, v in pairs(tasks) do
        if(p:getStorageValue(QUESTSTORAGE_BASE + k) > 0 and p:getStorageValue(QUESTSTORAGE_BASE + k) < 2) then
            table.insert(tmp, k)
        end
    end
    return tmp
end

Then, you must add it to global.lua.
Lua:
dofile('data/lib/killingInTheNameOfQuest.lua')
 
Last edited:
Solution
Are you using the library and the directory path in global.lua that will directly read in lib/lib? And the creator script that I provided? If not, you should use it, my friend.

Do you think transferring files from TFS 0.4 to TFS 1.5 will work instantly? Is the answer yes or no? Obviously, the answer is no, because TFS 0.4 is inferior; its functions differ from TFS 1.x. Nekiro TFS 1.5 8.6 is based on version 12.90, so it's simple: you can't use TFS 0.4 scripts for TFS 1.5 because they're not compatible. If you have good knowledge and can adapt or convert TFS 0.4 functions to TFS 1.5, then perhaps... I noticed you were using scripts from TFS 0.4. I provided NPC and CreatureScript, the lib which are for TFS 1.x... That's all, the end.
 
Last edited:
człekbro I know so I do all for new Scripts from 1.5,and I take your script and all paste and is the same no Counts monster bro
Post automatically merged:

11:11 Grizzly Adams: You currently killed 11/800 Serpent Spawns.
Sorry bro my fold
I paste in data/lib/lib.lua dofile('data/lib/killingInTheNameOfQuest.lua') now is in global.lua Thanks For help I love you <3
 
Last edited:

Similar threads

Back
Top