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

system.lua

Amped RPG

New Member
Joined
Aug 24, 2012
Messages
163
Reaction score
3
Any chest I use with system.lua and an action id are bugged...It gives me as a duplicate of the chest I used...

For example if i walk up to Chest A and it's action ID is 1234, I use it and it gives me exp reward and a chest in my bp with AID 1234... I've tried replacing system.lua and rechecked AIDS a thousand times.

Please help,
Thanks.
 
Last edited:
Lua:
local specialQuests = {
    [2009] = 30016 --inquisition
}
 
local questsExperience = {
    [30016] = 100000
}
 
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

- - - Updated - - -

My bad, forgot.. rofl

- - - Updated - - -

<action actionid="2009" event="script" value="quests/system.lua"/>

- - - Updated - - -

I'd like to note that I've double checked to make sure no action IDS are conflicting.
 
Is there actually something in the chest? Like in the map editor? Because what you describe is the result I'd always get from any empty quest chest. I find it is easier to just include an experience-scroll like item in the loot or add the quest to an achievements system and assign the exp reward there.
 
Gonna bump this post up, for some reason I managed to forget how important the system.lua file was for all the other chests on my map..

Any knowledgeable person know why my system.lua won't work, are there any lib files like 050-function and so on and so forth that might affect its functionality?

Thankyou, (sorry i'm a newb)
Justin.

- - - Updated - - -

Lua:
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
 
There is a alot easier method to give reward in a chest...

Simply open a map editor and add action id: 2000
and Unique id to whatever u want. Afterward add the item u want people get rewarded.

And ur done...
 
Yes, that's correct. You give Quest Reward chests actionId 2000, and the uiqueId is tied to the quest, and is tracked by the player's storage of the same value. All of this is covered adequately it the ./DOCS I believe.

It begs the question, why was your system.lua modified in the first place?
 
Back
Top