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

Lua Quests Storageid

Ahead

New Member
Joined
Dec 27, 2013
Messages
165
Reaction score
2
It's supposed to be inside the quest's .txt itself but i can not find it in annihilator.txt for eg. Where can i find it?.

Question: I have many different .txt of quests like Demon Oak or firewalker boots inside movements/scripts. That is common or are just some custom stuff from the last OT god?.

Thank you.
 
Which quest are you looking for specificly? I've done all my quests reward storages in actions/scripts/other.
For example:
I put unique id on a chest in my mapeditor: 1017
and then in actions.xml:
Code:
<action uniqueid="1017" script="other/questchest17.lua" />
and then I make a .lua named "questchest17" and inside this script:
Code:
function onUse(cid, item, frompos, item2, topos)

            if item.uid == 1017 then
queststatus = getPlayerStorageValue(cid,1017)
if queststatus == -1 then
doPlayerSendTextMessage(cid,22,"You have found boots of haste.")
doPlayerAddItem(cid,2195,1)

setPlayerStorageValue(cid,1017,1)
else
doPlayerSendTextMessage(cid,22,"It is empty.")
end
end
return 1
end
getPlayerStorageValue(cid,1017) <-"1017" is the storage that you should not have to open this chest
setPlayerStorageValue(cid,1017,1) - if you open it, you will get the 1017 storage

@ question most server distributions that you download will have atleast anihilator.lua inside the actions/scripts/quest folder

I have never used this system:
Code:
local specialQuests = {
    [2001] = 30015 --Annihilator
}

local questsExperience = {
    [30015] = 10000
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then
        doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF, cid)
        return true
    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
But it seems that 30015 is the storage value here:
Code:
local specialQuests = {
    [2001] = 30015 --Annihilator
}

Edit:
Also, download notepad++ unless you alredy have a good editing program. some scripts don't like be edited and saved in .txt
 
Thank you so much for the info Swiff. I was doing exactly that, i mean, i was putting the unique ids from the chest in order to check if somebody has completed or not a quest. But thank you so much anyways. I have found that in actions.xml can be found the unique ids of the quests which are completed by NPC following, like inquisition, so more ways to do this!

^^
 
Back
Top