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

Paying 2euro!

KnightmareZ

New Member
Joined
Feb 3, 2008
Messages
607
Reaction score
4
Location
Sweden/Ljungby
Hi, As you might see im kinda desperate..

My quests isnt working, I tried pretty much everything! Im using the new TFS 0.2 Mystic spirit.. I changed some stuff in the data..

Here's the action.lua file for the quests:
Code:
	<!-- Quests -->
	<action itemid="1740" script="quests/quests.lua"/>
	<action actionid="2000" script="quests/system.lua"/>
	<action actionid="2001" script="quests/system.lua"/>

And the action/quests/quests.lua:
Code:
  local specialQuests = {
        [2001] = 30015 --Annihilator
}

local questsExperience = {
        [30015] = 10000
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
        if(getPlayerCustomFlagValue(cid, PlayerCustomFlag_GamemasterPrivileges) == TRUE) then
                return TRUE
        end

        local storage = specialQuests[item.actionid]
        if(storage == nil) then
                storage = item.uid
                if(storage > 65535) then
                        return FALSE
                end
        end

        local result = "It is empty."
        if(getPlayerStorageValue(cid, storage) <= 0) then
                local items = {}
                local reward = 0

                local size = isContainer(item.uid) == TRUE 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

                if(reward ~= 0) then
                        local ret = getItemDescriptions(reward.uid)
                        if(reward.type > 0 and isItemRune(reward.itemid) == TRUE) then
                                result = reward.type .. " charges " .. ret.name
                        elseif(reward.type > 0 and isItemStackable(reward.itemid) == TRUE) then
                                result = reward.type .. " " .. ret.plural
                        else
                                result = ret.article .. " " .. ret.name
                        end
                else
                        result = ""
                        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) == TRUE) then
                                                result = result .. tmp.type .. " charges " .. ret.name
                                        elseif(tmp.type > 0 and isItemStackable(tmp.itemid) == TRUE) 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
        end

        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, result)
        return TRUE
end

And the quests/system.lua:
Code:
 local specialQuests = {
        [2001] = 30015 --Annihilator
}

local questsExperience = {
        [30015] = 10000
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
        if(getPlayerCustomFlagValue(cid, PlayerCustomFlag_GamemasterPrivileges) == TRUE) then
                return TRUE
        end

        local storage = specialQuests[item.actionid]
        if(storage == nil) then
                storage = item.uid
                if(storage > 65535) then
                        return FALSE
                end
        end

        local result = "It is empty."
        if(getPlayerStorageValue(cid, storage) <= 0) then
                local items = {}
                local reward = 0

                local size = isContainer(item.uid) == TRUE 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

                if(reward ~= 0) then
                        local ret = getItemDescriptions(reward.uid)
                        if(reward.type > 0 and isItemRune(reward.itemid) == TRUE) then
                                result = reward.type .. " charges " .. ret.name
                        elseif(reward.type > 0 and isItemStackable(reward.itemid) == TRUE) then
                                result = reward.type .. " " .. ret.plural
                        else
                                result = ret.article .. " " .. ret.name
                        end
                else
                        result = ""
                        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) == TRUE) then
                                                result = result .. tmp.type .. " charges " .. ret.name
                                        elseif(tmp.type > 0 and isItemStackable(tmp.itemid) == TRUE) 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
        end

        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, result)
        return TRUE
end

Tell me if theres something I should add to make it easier for you.. Thanks!
 
Moderator Message: Use code tags for codes, not quote tags!

Post edited.
 
Do I have to quote myself? <_<

The New Quest system (used in TFS 0.3) is not supported in TFS 0.2 by default. You could make it work, but you need to copy the required function (doCopyItem (item, attributes)
) from TFS 0.3's data/lib/function.lua.

It clearly says "from TFS 0.3's" (Crying Damson)
I meant that you should copy it (function (doCopyItem (item, attributes)) to your data/global.lua

And don't forget to remove these lines from the quest system script:
Lua:
        if(getPlayerCustomFlagValue(cid, PlayerCustomFlag_GamemasterPrivileges) == TRUE) then
                return TRUE
        end
 
Do I have to quote myself? <_<



It clearly says "from TFS 0.3's" (Crying Damson)
I meant that you should copy it (function (doCopyItem (item, attributes)) to your data/global.lua

And don't forget to remove these lines from the quest system script:
Lua:
        if(getPlayerCustomFlagValue(cid, PlayerCustomFlag_GamemasterPrivileges) == TRUE) then
                return TRUE
        end

ok sorry, i might do not be so skilled in this..

but now this error comes up when i start the server:
[04/05/2009 23:51:00] [Warning - Actions::registerEvent] Duplicate registered item with id: 1740

and that is the
<action itemid="1740" script="quests/quests.lua"/>

And acctualy where in the global.lua? ;s
And this shows up in the CMD when i click on the chest..

Lua:
[04/05/2009  23:55:31] Lua Script Error: [Action Interface] 
[04/05/2009  23:55:31] data/actions/scripts/quests/system.lua:onUse

[04/05/2009  23:55:31] data/global.lua:472: attempt to compare number with nil
[04/05/2009  23:55:31] stack traceback:
[04/05/2009  23:55:31] 	data/global.lua:472: in function 'doCopyItem'
[04/05/2009  23:55:31] 	data/actions/scripts/quests/system.lua:26: in function <data/actions/scripts/quests/system.lua:9>
 
Last edited:

Similar threads

Back
Top