Action Advanced quest chest

Gesior.pl

Mega Noob&LOL 2012
Joined
Sep 18, 2007
Messages
2,026
Best answers
19
Reaction score
1,063
Location
PLand
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:

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:

JayBeee

Retired Global Mod
Joined
Jun 2, 2007
Messages
5,225
Best answers
0
Reaction score
13
Location
Sweden
Nice thinking! :) Great work, as always, Gesior. :)
 

Zoriax_

Owner|Antarctica Ots
Joined
Feb 15, 2008
Messages
745
Best answers
0
Reaction score
22
Location
Norway
Thx Gesior I Love it :*
 
Last edited by a moderator:

Kaorus

Unleash Dreams Staff
Joined
May 18, 2008
Messages
1,087
Best answers
0
Reaction score
8
Location
Iquique, Chile
Very good scriptr :D
 
Last edited by a moderator:

Dark Warrior

New Member
Joined
Feb 29, 2008
Messages
419
Best answers
0
Reaction score
1
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:
OP
Gesior.pl

Gesior.pl

Mega Noob&LOL 2012
Joined
Sep 18, 2007
Messages
2,026
Best answers
19
Reaction score
1,063
Location
PLand
Great work, to bad it doesn't work for 2.* :<
Change every 'getItemNameById' to 'getItemName' and it should work on 0.2, not tested.
 

Saj

Remember my name
Joined
Feb 26, 2008
Messages
2,127
Best answers
0
Reaction score
5
Good job Gesior!
 

soul4soul

Active Member
Joined
Aug 13, 2007
Messages
1,787
Best answers
0
Reaction score
43
Location
USA
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
 
OP
Gesior.pl

Gesior.pl

Mega Noob&LOL 2012
Joined
Sep 18, 2007
Messages
2,026
Best answers
19
Reaction score
1,063
Location
PLand
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.
 

zednem

New Member
Joined
Nov 15, 2008
Messages
108
Best answers
0
Reaction score
0
i don't have to change nothing in script?
just put itens in map editor?
 

Jerry

I've Been Permanently Ban
Joined
Aug 17, 2008
Messages
1,697
Best answers
0
Reaction score
1
Location
Panama
Nice scrip love your work man.
 

STiX

Intermediate OT User
Joined
Aug 22, 2007
Messages
437
Best answers
0
Reaction score
105
Location
Western Australia
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:

EvulMastah

๏̯͡๏﴿
Premium User
Joined
Aug 19, 2007
Messages
4,833
Best answers
0
Reaction score
184
o.o
 
Last edited:
Top