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

TFS 0.2 beta 0.3 - Questing Bug

Maybe somethign wrong with map editor ?
Check quest system if it works, run clean distro with clean map and add chest on that map -> check if it works.
 
system.lua:
PHP:
local specialQuests = {
        [2001] = 5015 --Noobilator
}
 
local questsExperience = {
        [5015] = 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) == -1) 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

Next step: Place an chest on the map(or any container). Put the actionid 2000 to this container. Put any free uniqueid to this chest(it will be used for storage value, so it will check, was quest done or no). Put any items into this container from mapeditor. DO NOT TRY ON GAME MASTERS, IT WILL WORK JUST WITH NORMAL CHARS.. Done. :)
 
aff just use the old quest system:

Code:
local annihilatorReward = {1990, 2400, 2431, 2494}
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if item.uid > 1000 and item.uid < 10000 then
        local itemWeight = getItemWeight(item.uid, 1, FALSE)
        local playerCap = getPlayerFreeCap(cid)
        if isInArray(annihilatorReward, item.uid) == TRUE then
            if getPlayerStorageValue(cid, 30015) == -1 then
                if playerCap >= itemWeight then
                    if item.uid == 1990 then
                        local container = doPlayerAddItem(cid, 1990, 1)
                        doAddContainerItem(container, 2326, 1)
                    else
                        doPlayerAddItem(cid, item.uid, 1)
                    end
                    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. getItemNameById(item.uid) .. '.')
                    setPlayerStorageValue(cid, 30015, 1)
                else
                    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. getItemNameById(item.uid) .. ' weighing ' .. itemWeight .. ' oz it\'s too heavy.')
                end
            else
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
            end
        elseif getPlayerStorageValue(cid, item.uid) == -1 then
            if playerCap >= itemWeight then
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. getItemNameById(item.uid) .. '.')
                doPlayerAddItem(cid, item.uid, 1)
                setPlayerStorageValue(cid, item.uid, 1)
            else
                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. getItemNameById(item.uid) .. ' weighing ' .. itemWeight .. ' oz it\'s too heavy.')
            end
        else
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
        end
    else
        return FALSE
    end
    return TRUE
end

i just changed:
Code:
getItemName
for
Code:
getItemNameById
 
Thanks for all info :p
It works now, uniuqe ID = The item you want to quest/loot.
action ID = 2000, always for quests.

If only those 2 things could be mentioned after 2 days xD
Haha, ty !

/Limannen
 
Back
Top