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

[Help] Quest system bug :s!

Demian

New Member
Joined
Sep 10, 2010
Messages
36
Reaction score
0
Hello, i have problem in Quest system
Picture check
errorrx6ur.png

and map editor have this
2error.png

:S help
quest 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) == -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
and quest.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<quests>
	<quest name="Example Quest I" startstorageid="30031" startstoragevalue="1">
		<mission name="The head of Kiper" storageid="1001" startvalue="1" endvalue="3">
			<missionstate id="1" description="Kill Kiper!"/>
			<missionstate id="2" description="Give his head to Talaturen!"/>
			<missionstate id="3" description="Take the medal you got from Talaturen to Ruly!"/>
		</mission>
		<mission name="Ruly's Revenge" storageid="30031" startvalue="4" endvalue="6">
			<missionstate id="4" description="You received a document with instructions from Ruly, follow them."/>
			<missionstate id="5" description="Go back to Ruly and tell him that you followed his instructions to the end."/>
			<missionstate id="6" description="You got a reward from Ruly, he was very thankful with that you helped him to take his revenge."/>
		</mission>
	</quest>
</quests>
Help, + rep
atte demian :)
Srry my bad ingles
 
PHP:
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 
    return true 
end

test this...
and quest.xml has nothing to do with it.
 
you have this?

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

in actions.xml
 
Back
Top