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

Solved Help with system.lua quests

Thorn

Spriting since 2013
Joined
Sep 24, 2012
Messages
2,203
Solutions
1
Reaction score
923
Location
Chile
Hello guys, i have tfs 1.0 and this system.lua isn't working for me, i followed the instructions, let me show you what i have:

LUA:
local specialQuests = {
    [2001] = 30015, --Annihilator
    [2002] = 12000 --test
}

local questsExperience = {
    [30015] = 10000
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

    local storage = specialQuests[item.actionid]
    if(not storage) then
        storage = item.uid
        if(storage > 65535) then
            return false
        end
    end

    if(getPlayerStorageValue(cid, storage) > 0) then
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
        return true
    end

    local items = {}
    local reward = 0

    local size = isContainer(item.uid) and getContainerSize(item.uid) or 0
    if(size == 0) then
        reward = doCopyItem(item, false)
    else
        for i = 0, size do
            local tmp = getContainerItem(item.uid, i)
            if(tmp.itemid > 0) then
                table.insert(items, tmp)
            end
        end
    end

    size = table.maxn(items)
    if(size == 1) then
        reward = doCopyItem(items[1], true)
    end

    local result = ""
    if(reward ~= 0) then
        local ret = getItemDescriptions(reward.uid)
        if(reward.type > 0 and isItemRune(reward.itemid)) then
            result = reward.type .. " charges " .. ret.name
        elseif(reward.type > 0 and isItemStackable(reward.itemid)) then
            result = reward.type .. " " .. ret.plural
        else
            result = ret.article .. " " .. ret.name
        end
    else
        if(size > 20) then
            reward = doCopyItem(item, false)
        elseif(size > 8) then
            reward = getThing(doCreateItemEx(1988, 1))
        else
            reward = getThing(doCreateItemEx(1987, 1))
        end

        for i = 1, size do
            local tmp = doCopyItem(items[i], true)
            if(doAddContainerItemEx(reward.uid, tmp.uid) ~= RETURNVALUE_NOERROR) then
                print("[Warning] QuestSystem:", "Could not add quest reward")
            else
                local ret = ", "
                if(i == 2) then
                    ret = " and "
                elseif(i == 1) then
                    ret = ""
                end

                result = result .. ret
                ret = getItemDescriptions(tmp.uid)
                if(tmp.type > 0 and isItemRune(tmp.itemid)) then
                    result = result .. tmp.type .. " charges " .. ret.name
                elseif(tmp.type > 0 and isItemStackable(tmp.itemid)) then
                    result = result .. tmp.type .. " " .. ret.plural
                else
                    result = result .. ret.article .. " " .. ret.name
                end
            end
        end
    end

    if(doPlayerAddItemEx(cid, reward.uid, false) ~= RETURNVALUE_NOERROR) then
        result = "You have found a reward weighing " .. getItemWeight(reward.uid) .. " oz. It is too heavy or you have not enough space."
    else
        result = "You have found " .. result .. "."
        setPlayerStorageValue(cid, storage, 1)
        if(questsExperience[storage] ~= nil) then
            doPlayerAddExp(cid, questsExperience[storage])
            doSendAnimatedText(getCreaturePosition(cid), questsExperience[storage], TEXTCOLOR_WHITE)
        end
    end

    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, result)
    return true
end


map:
7387e87a22d02bdef02aef865042f338.png


error in console:
Code:
Lua Script Error: [Action Interface]
data/actions/scripts/quests/system.lua:onUse
data/global.lua:141: attempt to call global 'doCreateItemEx' (a nil value)
stack traceback:
        [C]: in function 'doCreateItemEx'
        data/global.lua:141: in function 'doCopyItem'
        data/actions/scripts/quests/system.lua:42: in function <data/actions/scripts/quests/system.lua:10>


and global.lua
LUA:
function doCopyItem(item, attributes)
        local attributes = attributes or false
        local ret = doCreateItemEx(item.itemid, item.type)
        if(attributes) then
                if(item.actionid > 0) then
                        doSetItemActionId(ret, item.actionid)
                end
        end
        if(isContainer(item.uid) == TRUE) then
                for i = (getContainerSize(item.uid) - 1), 0, -1 do
                        local tmp = getContainerItem(item.uid, i)
                        if(tmp.itemid > 0) then
                                doAddContainerItemEx(ret, doCopyItem(tmp, true).uid)
                        end
                end
        end
        return getThing(ret)
end


i did everything as instructed, idk why im getting that error :(
 
Solution
Put this in your compat.lua
Code:
function doCreateItemEx(itemid, count)
    local item = Game.createItem(itemid, count)
    if item then
        return item:getUniqueId()
    end
    return false
end
That code above is from 1.3 but it will work in 1.0 because you have the same methods.
Put this in your compat.lua
Code:
function doCreateItemEx(itemid, count)
    local item = Game.createItem(itemid, count)
    if item then
        return item:getUniqueId()
    end
    return false
end
That code above is from 1.3 but it will work in 1.0 because you have the same methods.
 
Solution
Put this in your compat.lua
Code:
function doCreateItemEx(itemid, count)
    local item = Game.createItem(itemid, count)
    if item then
        return item:getUniqueId()
    end
    return false
end
That code above is from 1.3 but it will work in 1.0 because you have the same methods.
it works! thanks, but with a small problem, i see this
19:56 You have found .
no name of the item, how can i fix this?
 
Back
Top