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

TFS 0.X TFS 0.X (OTX 2) - You have found a chest. HELP!

manc

Member
Joined
Aug 16, 2012
Messages
13
Reaction score
8
Hello gentlemens!

I'm using OTX 2 TFS 0.x for a 7.72 project.

I have the following problem:
When configuring the RME with AID 2000 and then adding stackable items for reward, for example arrow, money, snow ball, etc.. When clicking on the chest I receive the following message "You have found a chest." and I get item id 1740.

Note:
- I noticed that this only happens with groupables items, testing with common items and even runes does not occur.
- local size = isContainer(item.uid) and getContainerSize(item.uid) or 0, I noticed that getContainerSize is not regular when there are grouped items, it all starts there in my understanding.

Actions.xml
Lua:
    <!-- Quests -->
    <action actionid="2000-2001" event="script" value="quests/system.lua"/>
    <action itemid="1740;1747-1749" event="script" value="quests/quests.lua"/>

System.lua
Code:
local specialQuests = {
    [2001] = 30015 --Annihilator
}

local questsExperience = {
    [30015] = 10000
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(getBooleanFromString(getConfigValue('enableProtectionQuestForGM'))) then
        if(getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then
            doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF, cid)
            return true
        end
    end

    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

Quest.lua
Code:
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(getBooleanFromString(getConfigValue('enableProtectionQuestForGM'))) then
        if(getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then
            doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF, cid)
            return true
        end
    end

    if item.uid > 1000 and item.uid < 11395 then
        local itemWeight = getItemWeightById(item.uid, 1)
        local playerCap = getPlayerFreeCap(cid)
        if getPlayerStorageValue(cid, item.uid) == -1 then
            if playerCap >= itemWeight then
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. getItemNameById(item.uid) .. '.')
                doPlayerAddItem(cid, item.uid ,1)
                setPlayerStorageValue(cid, item.uid, 1)
            else
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. getItemNameById(item.uid) .. ' weighing ' .. itemWeight .. ' oz it\'s too heavy.')
            end
        else
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
        end
    else
        return false
    end

    return true
end




Error.png
Post automatically merged:
 

Attachments

Last edited:
Need to get more information. Add prints to each of the scripts, and find out what they say in the console, when you get the bad items.

example, with the quest.lua script
Lua:
function onUse(cid, item, fromPosition, itemEx, toPosition)
    print("Quest.lua activated.")
    if(getBooleanFromString(getConfigValue('enableProtectionQuestForGM'))) then
        if(getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then
            doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF, cid)
            print("-> Gm flags.")
            return true
        end
    end

    if item.uid > 1000 and item.uid < 11395 then
        print("-> item.uid check succeeded.")
        local itemWeight = getItemWeightById(item.uid, 1)
        local playerCap = getPlayerFreeCap(cid)
        if getPlayerStorageValue(cid, item.uid) == -1 then
            if playerCap >= itemWeight then
                print("-> item.uid is '" .. item.uid .. "'")
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. getItemNameById(item.uid) .. '.')
                doPlayerAddItem(cid, item.uid ,1)
                setPlayerStorageValue(cid, item.uid, 1)
            else
                print("-> capacity issue")
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. getItemNameById(item.uid) .. ' weighing ' .. itemWeight .. ' oz it\'s too heavy.')
            end
        else
            print("-> reward previously gotten.")
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
        end
    else
        print("-> item.uid check failed.")
        return false
    end

    return true
end
 
Need to get more information. Add prints to each of the scripts, and find out what they say in the console, when you get the bad items.

example, with the quest.lua script
Lua:
function onUse(cid, item, fromPosition, itemEx, toPosition)
    print("Quest.lua activated.")
    if(getBooleanFromString(getConfigValue('enableProtectionQuestForGM'))) then
        if(getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then
            doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF, cid)
            print("-> Gm flags.")
            return true
        end
    end

    if item.uid > 1000 and item.uid < 11395 then
        print("-> item.uid check succeeded.")
        local itemWeight = getItemWeightById(item.uid, 1)
        local playerCap = getPlayerFreeCap(cid)
        if getPlayerStorageValue(cid, item.uid) == -1 then
            if playerCap >= itemWeight then
                print("-> item.uid is '" .. item.uid .. "'")
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. getItemNameById(item.uid) .. '.')
                doPlayerAddItem(cid, item.uid ,1)
                setPlayerStorageValue(cid, item.uid, 1)
            else
                print("-> capacity issue")
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. getItemNameById(item.uid) .. ' weighing ' .. itemWeight .. ' oz it\'s too heavy.')
            end
        else
            print("-> reward previously gotten.")
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
        end
    else
        print("-> item.uid check failed.")
        return false
    end

    return true
end

Hello my friend.

I've already done exactly what was suggested, but in system.lua. What I get is isContainer = True, however, getContainerSize = 0.

In other words, when there are stackable items in the container, it is as if the getContainerSize function is unable to read such items.

I believe that in quest.lua there will be no problem, but I will also do the recommended debugging.

*Note that I am working with aid 2000 and uid custom, I posted quest.lua just to ensure there is no lack of information in the topic.
 
Back
Top