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

Liquids exchange

Mendela

New Member
Joined
Jun 1, 2011
Messages
18
Reaction score
0
Hi, i need script for liquid ex-change like on rl tibia


It works like this

You can pour for e.g vial of milk id 2006, 6 < and you can put it into through or bucket or bottle

Same way around, from through or bucket into vials/bottles

so you take from this, it will get removed and new container will be filled

understand?

iiEmY.png


So that i can pour one into another, back and forth.
 
bump plz help

when i put bottle or vial of milk/water on ground and try to use on object it goes on ground and not inside new object!!!
 
Mendela, you must understand that you are not allowed to post several times simultaneously.
The OtLand rules state that "You may only bump your thread once every twenty-four hours."

It's not strictly followed but you get the point.

Don't put yourself into a position of acquiring an infraction!

J.Dre
 
containers.lua
Code:
local DISTILLERY = {5513, 5514, 5469, 5470}
local ITEM_RUM_FLASK = 5553
local ITEM_POOL = 2016

local TYPE_EMPTY = 0
local TYPE_WATER = 1
local TYPE_BLOOD = 2
local TYPE_BEER = 3
local TYPE_SLIME = 4
local TYPE_MANA_FLUID = 7
local TYPE_LIFE_FLUID = 10
local TYPE_OIL = 11
local TYPE_WINE = 15
local TYPE_MUD = 19
local TYPE_LAVA = 26
local TYPE_RUM = 27
local TYPE_SWAMP = 28

local oilLamps = {[2046] = 2044}
local casks = {[1771] = TYPE_WATER, [1772] = TYPE_BEER, [1773] = TYPE_WINE}
local alcoholDrinks = {TYPE_BEER, TYPE_WINE, TYPE_RUM}
local poisonDrinks = {TYPE_SLIME, TYPE_SWAMP}

local drunk = createConditionObject(CONDITION_DRUNK)
setConditionParam(drunk, CONDITION_PARAM_TICKS, 60000)

local poison = createConditionObject(CONDITION_POISON)
setConditionParam(poison, CONDITION_PARAM_DELAYED, true) -- Condition will delay the first damage from when it's added
setConditionParam(poison, CONDITION_PARAM_MINVALUE, -50) -- Minimum damage the condition can do at total
setConditionParam(poison, CONDITION_PARAM_MAXVALUE, -120) -- Maximum damage
setConditionParam(poison, CONDITION_PARAM_STARTVALUE, -5) -- The damage the condition will do on the first hit
setConditionParam(poison, CONDITION_PARAM_TICKINTERVAL, 4000) -- Delay between damages
setConditionParam(poison, CONDITION_PARAM_FORCEUPDATE, true) -- Re-update condition when adding it(ie. min/max value)

local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))

local borders = {4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655} 

local effects = {["swamp"] = CONST_ME_GREEN_RINGS, ["water"] = CONST_ME_LOSEENERGY, ["shallow water"] = CONST_ME_LOSEENERGY, ["tar"] = CONST_ME_POFF, ["lava"] = CONST_ME_HITBYFIRE}

local trashholders = {493, 598, 599, 600, 601, 708, 709, 710, 711, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4664, 4665, 4666, 4691, 4692, 4693, 4694, 4695, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4749, 4750, 4751, 4752, 4753, 4754, 4755}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if(itemEx.uid == cid) then
		if(item.type == TYPE_EMPTY) then
			return false
		end

		if(item.type == TYPE_MANA_FLUID) then
			if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then
				doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
				return true
			end

			if(not doPlayerAddMana(cid, math.random(80, 160))) then
				return false
			end

			doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
			doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE)
			doAddCondition(cid, exhaust)
		elseif(item.type == TYPE_LIFE_FLUID) then
			if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then
				doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
				return true
			end

			if(not doCreatureAddHealth(cid, math.random(40, 75))) then
				return false
			end

			doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
			doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE)
			doAddCondition(cid, exhaust)
		elseif(isInArray(alcoholDrinks, item.type)) then
			if(not doTargetCombatCondition(0, cid, drunk, CONST_ME_NONE)) then
				return false
			end

			doCreatureSay(cid, "Aaah...", TALKTYPE_ORANGE_1)
		elseif(isInArray(poisonDrinks, item.type)) then
			if(not doTargetCombatCondition(0, cid, poison, CONST_ME_NONE)) then
				return false
			end

			doCreatureSay(cid, "Urgh!", TALKTYPE_ORANGE_1)
		else
			doCreatureSay(cid, "Gulp.", TALKTYPE_ORANGE_1)
		end

		doChangeTypeItem(item.uid, TYPE_EMPTY)
		return true
	end

	if(not isCreature(itemEx.uid)) then
		if(item.type == TYPE_EMPTY) then
			if(item.itemid == ITEM_RUM_FLASK and isInArray(DISTILLERY, itemEx.itemid)) then
				if(itemEx.actionid == 100) then
					doItemEraseAttribute(itemEx.uid, "description")
					doItemEraseAttribute(itemEx.uid, "aid")
					doChangeTypeItem(item.uid, TYPE_RUM)
				else
					doPlayerSendCancel(cid, "You have to process the bunch into the distillery to get rum.")
				end
				return true
			end

			if(casks[itemEx.itemid] ~= nil) then
				doChangeTypeItem(item.uid, casks[itemEx.itemid])
				return true
			end

			local fluidEx = getFluidSourceType(itemEx.itemid)
			if(fluidEx ~= 0) then
				doChangeTypeItem(item.uid, fluidEx)
				return true
			end

			return false
		elseif itemEx.type == 0 and isItemFluidContainer(itemEx.itemid) then
			doChangeTypeItem(itemEx.uid, item.type)
			doChangeTypeItem(item.uid, TYPE_EMPTY)
			return true
		end

		if hasProperty(getTileThingByPos({x=toPosition.x, y=toPosition.y, z=toPosition.z, stackpos=0}).uid, CONST_PROP_BLOCKSOLID) and not isInArray(borders, itemEx.itemid) then
			local tmp = getThingfromPos({x=toPosition.x, y=toPosition.y, z=toPosition.z, stackpos=1}).itemid
			if tmp == 0 and (isInArray(trashholders, getThingfromPos({x=toPosition.x, y=toPosition.y, z=toPosition.z, stackpos=0}).itemid) or getTileItemByType(getThingPos(itemEx.uid), ITEM_TYPE_TRASHHOLDER).itemid ~= 0) then
				itemEx.name = getItemInfo(itemEx.itemid).name
				if effects[itemEx.name] then
					doSendMagicEffect(toPosition, effects[itemEx.name])
				end
				return doChangeTypeItem(item.uid, TYPE_EMPTY)
			elseif item.uid ~= itemEx.uid and not isInArray(borders, tmp) and not isInArray(trashholders, getThingfromPos({x=toPosition.x, y=toPosition.y, z=toPosition.z, stackpos=0}).itemid) and getTileItemByType(getThingPos(itemEx.uid), ITEM_TYPE_TRASHHOLDER).itemid == 0 then
				return doPlayerSendCancel(cid, 'There is not enough room.')
			end
		end

		if(item.type == TYPE_OIL and oilLamps[itemEx.itemid] ~= nil) then
			doTransformItem(itemEx.uid, oilLamps[itemEx.itemid])
			doChangeTypeItem(item.uid, TYPE_NONE)
			return true
		end

	end

	if isInArray({0, 65535}, toPosition.x) then
		toPosition = getThingPos(cid)
	end
	doDecayItem(doCreateItem(ITEM_POOL, item.type, toPosition))
	doChangeTypeItem(item.uid, TYPE_EMPTY)
	return true
end
 
Last edited:
i bump because none is want to help me ;s
i think this is easy for pro scripters in this big forum
but im not so good and cant do it mi self ;;p

so friends help mi ok?
and sory for spam sry
 
Back
Top