• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

Solved Function onUse Vial > Trough and not Trough > vial

Shackal

Alien Project
Joined
Feb 7, 2009
Messages
211
Reaction score
17
Location
Brazil
If you want it to work both ways, above "if(item.type == TYPE_OIL and oilLamps[itemEx.itemid] ~= nil) then", add this.
Code:
   if item.type > 0 and item.type ~= TYPE_OIL then
            if isItemFluidContainer(itemEx.itemid) and itemEx.type == TYPE_EMPTY then
                doChangeTypeItem(itemEx.uid, item.type)
                doChangeTypeItem(item.uid, TYPE_EMPTY)
                return true
            elseif isItemFluidContainer(itemEx.itemid) and itemEx.type > 0 then
                return false
            end


Good night people,

I am all day due to this script and I can not make it work properly.
It works only if you use the trough in the vial, and the correct is to use the vial in the trough.
I am using TFS 0.4 and would be grateful if someone could help me.
Thank you in advance and sorry for my bad english (I'm trying to improve)

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 TYPE_MEAD = 43
local oilLamps = {[2046] = 2044}
local casks = {[1771] = TYPE_WATER, [1772] = TYPE_BEER, [1773] = TYPE_WINE, [1369] = TYPE_WATER, [1368] = TYPE_WATER}
local alcoholDrinks = {TYPE_BEER, TYPE_WINE, TYPE_RUM, TYPE_MEAD}
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)
setConditionParam(poison, CONDITION_PARAM_MINVALUE, -50)
setConditionParam(poison, CONDITION_PARAM_MAXVALUE, -120)
setConditionParam(poison, CONDITION_PARAM_STARTVALUE, -5)
setConditionParam(poison, CONDITION_PARAM_TICKINTERVAL, 4000)
setConditionParam(poison, CONDITION_PARAM_FORCEUPDATE, true)

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

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(itemEx.uid == cid) then
        if(item.type == TYPE_EMPTY) then
            doPlayerSendCancel(cid, "It is empty.")
            return true
        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(isItemFluidContainer(itemEx.itemid) and itemEx.type ~= TYPE_EMPTY) then
                doChangeTypeItem(item.uid, itemEx.type)
                doChangeTypeItem(itemEx.uid, TYPE_EMPTY)
                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 ~= false) then
                doChangeTypeItem(item.uid, fluidEx)
                return true
            end

            doPlayerSendCancel(cid, "It is empty.")
            return true
        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

        if(hasProperty(itemEx.uid, CONST_PROP_BLOCKSOLID)) then
            return false
        end
    end

    doDecayItem(doCreateItem(ITEM_POOL, item.type, toPosition))
    doChangeTypeItem(item.uid, TYPE_EMPTY)
    return true
end

actions.xml

Code:
<action itemid="1775" event="script" value="liquids/containers.lua"/>
 
Last edited:
Is the vial id added in actions.xml? If it is, you can look if the id is added twice or more and delete those lines.
 
once the bottle is inserted and the trough

Code:
    <action itemid="1775" event="script" value="liquids/containers.lua"/>
    <action itemid="2005" event="script" value="liquids/containers.lua"/>
    <action itemid="2006" event="script" value="liquids/containers.lua"/>
    <action itemid="2007" event="script" value="liquids/containers.lua"/>
    <action itemid="2008" event="script" value="liquids/containers.lua"/>
    <action itemid="2009" event="script" value="liquids/containers.lua"/>
    <action itemid="2011" event="script" value="liquids/containers.lua"/>
    <action itemid="2012" event="script" value="liquids/containers.lua"/>
    <action itemid="2013" event="script" value="liquids/containers.lua"/>
    <action itemid="2014" event="script" value="liquids/containers.lua"/>
    <action itemid="2015" event="script" value="liquids/containers.lua"/>
    <action itemid="2023" event="script" value="liquids/containers.lua"/>
    <action itemid="2031" event="script" value="liquids/containers.lua"/>
    <action itemid="2032" event="script" value="liquids/containers.lua"/>
    <action itemid="2033" event="script" value="liquids/containers.lua"/>
    <action itemid="2034" event="script" value="liquids/containers.lua"/>
    <action itemid="2562" event="script" value="liquids/containers.lua"/>
    <action itemid="2574" event="script" value="liquids/containers.lua"/>
    <action itemid="2575" event="script" value="liquids/containers.lua"/>
    <action itemid="2576" event="script" value="liquids/containers.lua"/>
    <action itemid="2577" event="script" value="liquids/containers.lua"/>
    <action itemid="3941" event="script" value="liquids/containers.lua"/>
    <action itemid="3942" event="script" value="liquids/containers.lua"/>
    <action itemid="5553" event="script" value="liquids/containers.lua"/>
    <action itemid="10150" event="script" value="liquids/containers.lua"/>
 
Last edited:
Can you explain how you want it to work? Atm if you use an empty container on a container with fluid it adds the fluid in the empty container and the container with fluid becomes empty.
 
Yes bro, I want instead, as follows: If you use a container with liquid into an empty container adds the liquid in the container and empty the container with the liquid becomes empty.
 
Last edited:
If you want it to work both ways, above "if(item.type == TYPE_OIL and oilLamps[itemEx.itemid] ~= nil) then", add this.
Code:
    elseif item.type > 0 and item.type ~= TYPE_OIL then
         if isItemFluidContainer(itemEx.itemid) and itemEx.type == TYPE_EMPTY then
             doChangeTypeItem(itemEx.uid, item.type)
             doChangeTypeItem(item.uid, TYPE_EMPTY)
             return true
         end
 
Grateful Limos, it worked, but I found a bug in the script:
If I use a container with liquid into same or another container with liquid, returns the following error:

P1YJRhA.png


how can I make a condition that, when this action is performed, display a message to the player: You can not use this object.

Sorry my bad English and all these questions is not clear to me how this scheme of containers, and the variables of this script are a bit confusing.
 
Last edited:
SOLVED Brother.

Intensely appreciate your help Limos, you do not know how much I tried to solve it.

A big hug and I hope one day to contribute.
 
Back
Top