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

Action Advanced quest chest

Gesior.pl

Mega Noob&LOL 2012
Senator
Joined
Sep 18, 2007
Messages
2,955
Solutions
98
Reaction score
3,351
Location
Poland
GitHub
gesior
Update. Now you can set actionID of items in chest.
--------------------------------
WORK ON THE FORGOTTEN SERVER 0.3 ALPHA 3!
If you use old script for quests (set unique id of box as item id) it will still work normal, but you can use new much better method!
You can put items in chests/boxes/dead bodies. Set ActionID 1740, UniqueID XXX to save in database 'quest done' with this UniqueID and it's ready!
Example:
multiquest.PNG

data/actions/actions.xml
PHP:
<action actionid="1740" script="quests/multiquests.lua"/>
data/actions/scripts/quests/multiquests.lua
PHP:
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 item.uid < 65535 and item.uid ~= 0 then
		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.itemid)
			elseif #items == 1 then
				item_to_give = copyItem(items[1])
				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_INFO_DESCR, '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
	end
	return TRUE
end
Hope you understand how it work :p
 
Last edited:
Thx Gesior I Love it :*
 
Last edited by a moderator:
Very good scriptr :D
 
Last edited by a moderator:
I would test it but i can't ATM since i don't have alpha compiled and i am lazy to download&compile them >: But looks great ^_^ keep it up gesior :p
 
Last edited by a moderator:
ah very smart idea. this is much better then making a new script for each 'unique' type of quest box that gave more advanced loot sets like in ur example. very cool thanks for sharing it
 
Update:
Now you can set ActionID of items in chest and it will be copied. Useful if you want put key with actionID to open door.
 
Not a bad idea.

Now you can visually 'see' what you are putting in chests AND can add items with a count without using other scripts/modifications.

Edit:
PHP:
function getArticle(str)
You don't want it to say, 'You have found a amulet of loss.'. You want it to say, 'You have found an amulet of loss'.

AND
PHP:
<movevent event="StepIn" actionid="1740" script="walkback.lua"/>
That way people won't be able to walk over the container. Also the container will still need a unique ID to prevent people from moving the container. Imagine if a player moved a rare item quest chest (say a demon helmet chest) from its spot, to a teleporter, to the players house, he could make unlimited characters, walk in the house and get a demon helm per character made then transfer the items to his main character and sell them all for a profit.
 
Last edited:
Back
Top