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

Quest Bugged, they give empty box

eubrunomiguel

New Member
Joined
Jan 5, 2013
Messages
23
Reaction score
0
I am creating correct quests Action 2000 and unique id.

The first player who click on the box get the item correctly, but the other ones get empty box or they simply open an empty chest.
TFS 3777 r19


quuest 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
 
If you're using lua scripts for each quest, then you need to only put a action id and register it in actions.xml, if you're putting the quest rewards in the map, use this lua action then:

QUEST.LUA

Code:
function onUse(cid, item, frompos, item2, topos)
   prize = item.uid
   count = item.actionid

   if prize > 0 and prize < 7000 then
     queststatus = getPlayerStorageValue(cid,prize)

     if queststatus == -1 then
       if count > 1 then
         doPlayerSendTextMessage(cid,22,'You have found '.. count ..' of ' .. getItemName(prize) .. '.')
         doPlayerAddItem(cid,prize,count)
         setPlayerStorageValue(cid,prize,1)
       else
         doPlayerSendTextMessage(cid,22,'You have found a ' .. getItemName(prize) .. '.')
         doPlayerAddItem(cid,prize,1)
         setPlayerStorageValue(cid,prize,1)
       end
     else
       doPlayerSendTextMessage(cid,22,"The chest is empty.")
     end

     return 1
   else
     return 0
   end
end

With this script you will no need to put any actiond id in the chest, you will only need to put the ITEM ID in unique ID.

Hope it works.
 
I mean, it work but I need to register every single unique id in action.xml right? the problem is that every quest on the server is with action 2000, so all the quests are bugged. But thanks, I will use that while I figured out how to fix the others one.
 
The system.lua should work fine, do you get errors? Can you show how you added it exactly with actionid and uniqueid in remere?
 
The system.lua should work fine, do you get errors? Can you show how you added it exactly with actionid and uniqueid in remere?
None errors on console.
I type 2000 on action ID and an unique number on uniqueid as 123123 (the maximum is 64.... something) I am sure i am doing corretly on map editor
 

Similar threads

Back
Top