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

Quest system 0.3.6

BugaS

Donżuan
Joined
Mar 12, 2009
Messages
1,219
Reaction score
9
Location
NYC
Mam takiego skrypciora:
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

Ustawione skrzynki unique (id przedmiotu) i jak otwieram skrzynie to pusta sie otwiera a itemu jak nie bylo tak nie ma.

Wtf?
 
Tu masz mój skrypt który działa:
local annihilatorReward = {1990, 2400, 2431, 2494}
function onUse(cid, item, fromPosition, itemEx, toPosition)
if item.uid > 1000 and item.uid < 13000 then
local itemWeight = getItemWeightById(item.uid, 1)
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[1], 2326, 1)
else
doPlayerAddItem(cid, item.uid, 1)
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Zdobyles ' .. getItemNameById(item.uid) .. '.')
setPlayerStorageValue(cid, 30015, 1)
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ' Zdobyles ' .. getItemNameById(item.uid) .. ' weighing ' .. itemWeight .. ' oz it\'s too heavy.')
end
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Pusto")
end
elseif getPlayerStorageValue(cid, item.uid) == -1 then
if playerCap >= itemWeight then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ' Zdobyles ' .. 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, "Pusto")
end
else
return FALSE
end
return TRUE
end
 
Może spróbuj ten inny quest system ?


AID : 2000
UID : STORAGEID
a w środku chesta dajesz nagrode :]
 
Lua:
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_EVENT_ADVANCE, '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
 
Kret ma racje.

w actionid chestu wpisz 200
w uniqueid cjestu wpisz storageid na jakim ma być quest.

A w środku dajesz nagrodę.
 
Back
Top