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

Advanced Quest System by Gesior!

Guapoke

Member
Joined
Nov 21, 2008
Messages
259
Reaction score
5
Multiquests by Gesior
I use it a lot in my OT and I now realised that players can take the prize as much them want. The system is like that: I put an action ID 1740 in the chest, and then add with remere the itens that I want in the chest, script:

PHP:
function copyItem(item)
    if (isContainer(item.uid) == TRUE) then
        uid = copyContainer(item.uid, item.itemid)
        if item.actionid > 0 then
            doSetItemActionId(uid, item.actionid)
        end
        return uid
    else
        return doCreateItemEx(item.itemid, item.type)
    end
end

function copyContainer(uid, itemid)
    local container = doCreateItemEx(itemid, 1)
    local iterator = getContainerSize(uid)
    while iterator > 0  do
        iterator = iterator - 1
        doAddContainerItemEx(container, copyItem(getContainerItem(uid, iterator)))
    end
    return container
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getPlayerStorageValue(cid, item.uid) ~= 1 then
        local items = {}
        local item_in = {}
        local item_slot = 0
        local item_to_give = 0
        local item_desc = ''
        while(true) do
            item_in = getContainerItem(item.uid, item_slot)
            if item_in.itemid > 0 then
                table.insert(items, item_in)
            else
                break
            end
            item_slot = item_slot+1
        end
        if #items == 0 then
            item_to_give = doCreateItemEx(item.uid)
            item_desc = getItemNameById(item.uid)
        elseif #items == 1 then
            item_to_give = doCreateItemEx(items[1].itemid, items[1].type)
            if items[1].actionid > 0 then
                doSetItemActionId(item_to_give, items[1].actionid)
            end
            item_desc = getItemNameById(items[1].itemid)
        else
            if #items <= 8 then
                item_to_give = doCreateItemEx(1987, 1)
            else
                item_to_give = doCreateItemEx(1988, 1)
            end
            local n = 0
            local uid = 0
            for i=1, #items do
                n = #items - i + 1
                uid = doAddContainerItemEx(item_to_give, copyItem(items[n]))
                if items[n].actionid > 0 then
                    doSetItemActionId(uid, items[n].actionid)
                end
                item_desc = getItemNameById(items[n].itemid) .. item_desc
                if i ~= #items then
                    item_desc = ", " .. item_desc
                end
            end
        end
        if doPlayerAddItemEx(cid, item_to_give, 0) == RETURNVALUE_NOERROR then
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. item_desc .. '.')
            setPlayerStorageValue(cid, item.uid, 1)
            if item.uid < 2000 then
                setPlayerStorageValue(cid, 1000, getPlayerStorageValue(cid,1000)+1)
            end
        else
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You don\'t have enought capacity or free place in backpack for a ' .. item_desc .. '.')
        end
    else
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
    end
    return TRUE
end

I was thinking in put storage value but I'm newbie at scripting;
Thanks, Guapoke.
 
Back
Top