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

Making a Quest

Aeonz

Banned User
Joined
Dec 2, 2009
Messages
342
Reaction score
0
Location
Boise Idaho USA
Hey i could use some help on making a quest, when i put the item in the chest then once i turn on the server it just gives it 1 time how do i fix that so i can make it like a quest<_<
 
Hey i could use some help on making a quest, when i put the item in the chest then once i turn on the server it just gives it 1 time how do i fix that so i can make it like a quest<_<

YOu need to make a quest script for it so the reward always "respawns"...here is one script from my server...

Code:
function onUse(cid, item, frompos, item2, topos)
	local storages =
{
        done = 36700,
		}

	if item.uid == 2466 then
		if getPlayerStorageValue(cid,60057) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a Guardian Halberd.")
			doPlayerAddItem(cid,2427,1)
			setPlayerStorageValue(cid,60057,1)
		else
			doPlayerSendTextMessage(cid,25,"The is empty.")
		end

	elseif item.uid == 2520 then
		if getPlayerStorageValue(cid,60058) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a Demon Shield.")
			doPlayerAddItem(cid,2520,1)
			setPlayerStorageValue(cid,60058,1)
		else
			doPlayerSendTextMessage(cid,25,"The is empty.")
		end

	elseif item.uid == 2171 then
		if getPlayerStorageValue(cid,60059) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a Golden Armor.")
			doPlayerAddItem(cid,2466,1)
			setPlayerStorageValue(cid,60059,1)
		else
			doPlayerSendTextMessage(cid,25,"The is empty.")
		end

	elseif item.uid == 2427 then
		if getPlayerStorageValue(cid,60060) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a bag.")
			local bag = doPlayerAddItem(cid,1987,1)
			doAddContainerItem(bag,2171,1)
			doAddContainerItem(bag,2168,1)
			doAddContainerItem(bag,2124,1)
			doAddContainerItem(bag,2145,3)
			doAddContainerItem(bag,2146,4)
			setPlayerStorageValue(cid,60060,1)
		else
			doPlayerSendTextMessage(cid,25,"It is empty.")
		end	
	end
	return TRUE
end
 
YOu need to make a quest script for it so the reward always "respawns"...here is one script from my server...

Code:
function onUse(cid, item, frompos, item2, topos)
	local storages =
{
        done = 36700,
		}

	if item.uid == 2466 then
		if getPlayerStorageValue(cid,60057) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a Guardian Halberd.")
			doPlayerAddItem(cid,2427,1)
			setPlayerStorageValue(cid,60057,1)
		else
			doPlayerSendTextMessage(cid,25,"The is empty.")
		end

	elseif item.uid == 2520 then
		if getPlayerStorageValue(cid,60058) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a Demon Shield.")
			doPlayerAddItem(cid,2520,1)
			setPlayerStorageValue(cid,60058,1)
		else
			doPlayerSendTextMessage(cid,25,"The is empty.")
		end

	elseif item.uid == 2171 then
		if getPlayerStorageValue(cid,60059) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a Golden Armor.")
			doPlayerAddItem(cid,2466,1)
			setPlayerStorageValue(cid,60059,1)
		else
			doPlayerSendTextMessage(cid,25,"The is empty.")
		end

	elseif item.uid == 2427 then
		if getPlayerStorageValue(cid,60060) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a bag.")
			local bag = doPlayerAddItem(cid,1987,1)
			doAddContainerItem(bag,2171,1)
			doAddContainerItem(bag,2168,1)
			doAddContainerItem(bag,2124,1)
			doAddContainerItem(bag,2145,3)
			doAddContainerItem(bag,2146,4)
			setPlayerStorageValue(cid,60060,1)
		else
			doPlayerSendTextMessage(cid,25,"It is empty.")
		end	
	end
	return TRUE
end



Can u edit one for me there is a
blue book(id-1963)
Brocade Backpack (id-9774) which contains 10 red apples
plate set(legs and armor):p

i will rep++
 
Code:
function onUse(cid, item, frompos, item2, topos)
	local storages =
{
        done = xxxx,
		}

	if item.uid == xxxx then
		if getPlayerStorageValue(cid,1990) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a Blue Book.")
			doPlayerAddItem(cid,1963,1)
			setPlayerStorageValue(cid,1999,1)
		else
			doPlayerSendTextMessage(cid,25,"The is empty.")
		end

	elseif item.uid == xxxx then
		if getPlayerStorageValue(cid,1991) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a Brocade Backpack.")
			doPlayerAddItem(cid,9774,1)
			setPlayerStorageValue(cid,1991,1)
		else
			doPlayerSendTextMessage(cid,25,"The is empty.")
		end

	elseif item.uid == xxxx then
		if getPlayerStorageValue(cid,1992) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a Golden Armor.")
			doPlayerAddItem(cid,2466,1)
			setPlayerStorageValue(cid,1992,1)
		else
			doPlayerSendTextMessage(cid,25,"The is empty.")
		end

	elseif item.uid == xxxx then
		if getPlayerStorageValue(cid,1993) == -1 then
			doPlayerSendTextMessage(cid,25,"You have found a Plate Armor.")
            doPlayerAddItem(cid,yyyy,1)
			setPlayerStorageValue(cid,1993,1)
		else
			doPlayerSendTextMessage(cid,25,"It is empty.")
		end	
	end
	return TRUE
end

Change all "xxxx" to a uniqueid which you want....
Change "yyyy" to the id of the plate armor....(lazy to check at items.xml
 
Set any uniqueid which got the id of the chest which you can add at your mapeditor. Afterwards you need to register at your actions.xml
 
No need to have scripts.

If you have TFS 0.3+ you can use TFS Quest System. Very easy.

Just have

actions.xml
Code:
  <!-- Quests -->
        <action actionid="2000" event="script" value="quests/system.lua"/>
        <action actionid="2001" event="script" value="quests/system.lua"/>

and script

system.lua

Code:
local specialQuests = {
	[2001] = 30015 --Annihilator
}

local questsExperience = {
	[30015] = 10000
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

	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

If you want to make a quest
Chest.gif
you can put

ACTIONID: 2000
UNIQUEID: XXXX (example: 65100)
ITEM: spike sword

If you want to make another chest

ACTIONID: 2000
UNIQUEID: XXXX (example: 65101)
ITEM: dragon shield

etc etc etc.

UNIQUEID = STORAGE = 1 TIME QUEST ONLY
 
No need to have scripts.

If you have TFS 0.3+ you can use TFS Quest System. Very easy.

Just have

actions.xml
Code:
  <!-- Quests -->
        <action actionid="2000" event="script" value="quests/system.lua"/>
        <action actionid="2001" event="script" value="quests/system.lua"/>

and script

system.lua

Code:
local specialQuests = {
	[2001] = 30015 --Annihilator
}

local questsExperience = {
	[30015] = 10000
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

	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

If you want to make a quest
Chest.gif
you can put

ACTIONID: 2000
UNIQUEID: XXXX (example: 65100)
ITEM: spike sword

If you want to make another chest

ACTIONID: 2000
UNIQUEID: XXXX (example: 65101)
ITEM: dragon shield

etc etc etc.

UNIQUEID = STORAGE = 1 TIME QUEST ONLY



So you can't just map quests annymore? ;s
 
Back
Top Bottom