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

Exp quest System

kito2

www.masteria.net
Joined
Mar 9, 2009
Messages
3,766
Solutions
1
Reaction score
225
Location
Chile, Santiago
Can someone make a system wich works with a actionid (ex: like quest system "2000") and then at uniqueid the ammount of exp that the chest gives, and also this uniqueid works as the storage.

Someone please?
 
Lua:
local config = {
	exp = 100,
	storage = 100
}

function onUse(cid, item, frompos, item2, topos)

   	if getPlayerStorageValue(cid,config.storage) == -1 then
   		setPlayerStorageValue(cid,config.storage,1)
   		doPlayerAddExp(cid, config.exp)
   		doPlayerSendTextMessage(cid,21,"You get "..config.exp..".")
	else
		doPlayerSendTextMessage(cid,21,"You already got some exp.")
	end
   	return TRUE
end

There you go, :thumbup:.
 
Nice, but it is something simple, Im looking something that just need one .lua and can make loots of chests...
For that:
actionid: 3000
uniqueid: 5000 (ammount of exp and also storage for player)
 
Nice, but it is something simple, Im looking something that just need one .lua and can make loots of chests...
For that:
actionid: 3000
uniqueid: 5000 (ammount of exp and also storage for player)

There you go:
Lua:
function onUse(cid, item, frompos, item2, topos)

	if item.actionid == 3000 then
		storage = item.uniqueid
		if getPlayerStorageValue(cid, storage) == -1 then
                	setPlayerStorageValue(cid, storage,1)
                	doPlayerAddExp(cid, storage)
			doPlayerSendTextMessage(cid,21,"You get "..storage.." exp.")
        	else
			doPlayerSendTextMessage(cid,21,"You already got some exp.")
		end
	end
        return TRUE
end
:thumbup:
 
Lua:
[17/08/2009 17:13:44] 
[17/08/2009 17:13:44] Lua Script Error: [Action Interface] 
[17/08/2009 17:13:44] data/actions/scripts/mtibia/exp.lua:onUse
[17/08/2009 17:13:44] 
[17/08/2009 17:13:44] data/actions/scripts/mtibia/exp.lua:8: attempt to concatenate global 'storage' (a nil value)
[17/08/2009 17:13:44] stack traceback:
[17/08/2009 17:13:44] data/actions/scripts/mtibia/exp.lua:8: in function <data/actions/scripts/mtibia/exp.lua:1>


Uhmm.... I forgot to say that I use tfs0.3.4pl2, maybe this will help?
 
Lua:
  function onUse(cid, item, frompos, item2, topos)

        if item.actionid == 3000 then
                local storage = item.uniqueid
                if getPlayerStorageValue(cid, storage) == -1 then
                        setPlayerStorageValue(cid, storage,1)
                        doPlayerAddExp(cid, storage)
                        doPlayerSendTextMessage(cid,21,"You get "..storage.." exp.")
                else
                        doPlayerSendTextMessage(cid,21,"You already got some exp.")
                end
        end
        return TRUE
end
Try this one, I added "local".
 
hey kito2
change your system file for this
Lua:
local specialQuests = {
	[2001] = 30015 --Annihilator
}

local questsExperience = {
	[unique id of the experience chest] = experience
}

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)
			result = "You have found " .. questsExperience[storage] .. " of Experience."
		end
	end

	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, result)
	return true
end

and in actions.xml add something like this
Code:
<action uniqueid="unique id of the exp chest" event="script" value="quests/system.lua"/>

and then in your server add the chest with the respective unique id of the expchest...
 
Are you sure? I did /attr uniqueid 3000 and didnt work, it just gave me a chest :S ... should I restart the OT or maybe, add the chest at map editors?
 
Last edited:
Back
Top