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

Solved Vial of water did not work TFS 0.4. HELP !

Daniel Kopeć

Member
Joined
Dec 8, 2018
Messages
125
Solutions
4
Reaction score
12
Location
Poland
Filling the vial with water does not work :( I need this feature to be done dreamer's challenge quest etc...
On the other hand, Sandra in Edron sells an empty vial. How to fix it?
vial of water.png

empty vial in item editor It looks like this:
vial item editor.png



sandra.lua:

Lua:
shopModule:addBuyableItem({'vial of oil'}, 2006, 20, 11, 'vial of oil')
shopModule:addBuyableItem({'vial of water'}, 2006, 20, 1, 'vial of water')

actions/script/liquids/containers.lua:
Lua:
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) -- 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))

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
 
Solution
1. About using the ID 11396 and not working even being registered at actions.xml, I don't know what it may be.

2. About get the vial, you should go to your Dat Editor, search ID 2874 (which is cid of vial), make sure the flag Pickupable is marked and save it.
Then open your Item Editor, open your items.otb with the updated dat in which you checked the Pickupable flag already, go to Tools > Reload Item Attributes and save it.
You should never edit anything with your Item Editor manually, because it should be synchronized with your dat.
If you change anything in your dat, you go again on your Item Editor at Tools > Reload Item Attributes and save it.
Open your server and client with your new otb...
Filling the vial with water does not work :( I need this feature to be done dreamer's challenge quest etc...
On the other hand, Sandra in Edron sells an empty vial. How to fix it?
View attachment 58329

empty vial in item editor It looks like this:
View attachment 58331



sandra.lua:

Lua:
shopModule:addBuyableItem({'vial of oil'}, 2006, 20, 11, 'vial of oil')
shopModule:addBuyableItem({'vial of water'}, 2006, 20, 1, 'vial of water')

actions/script/liquids/containers.lua:
Lua:
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) -- 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))

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

You should register your new vial item at actions.xml.
 
You created id 11396 and you want it to work, right?
Then register the id 11396 at actions.xml the same way that the id 2006 is already registered there.
I did it yesterday and managed to create a vial with water at npc Sandra but after buying it appeared on the floor and it was impossible to pick it up or pour the water on the ground.

So I think filling the ID 11396 vial with water is going to be impossible either.

I'll try it again and let you know. Thank you for the hint
Post automatically merged:

You created id 11396 and you want it to work, right?
Then register the id 11396 at actions.xml the same way that the id 2006 is already registered there.
I added a new vial with ID 11396 to items.xml.
I created it in-game and it showed up empty vial of void.
It cannot be taken in the backpack or any liquid can be poured out of it. And there was supposed to be an empty vial.
nowy vial.pngcannot take object vial.png
 
Last edited:
I did it yesterday and managed to create a vial with water at npc Sandra but after buying it appeared on the floor and it was impossible to pick it up or pour the water on the ground.

So I think filling the ID 11396 vial with water is going to be impossible either.

I'll try it again and let you know. Thank you for the hint
Post automatically merged:


I added a new vial with ID 11396 to items.xml.
I created it in-game and it showed up empty vial of void.
It cannot be taken in the backpack or any liquid can be poured out of it. And there was supposed to be an empty vial.
View attachment 58336View attachment 58337

1. About using the ID 11396 and not working even being registered at actions.xml, I don't know what it may be.

2. About get the vial, you should go to your Dat Editor, search ID 2874 (which is cid of vial), make sure the flag Pickupable is marked and save it.
Then open your Item Editor, open your items.otb with the updated dat in which you checked the Pickupable flag already, go to Tools > Reload Item Attributes and save it.
You should never edit anything with your Item Editor manually, because it should be synchronized with your dat.
If you change anything in your dat, you go again on your Item Editor at Tools > Reload Item Attributes and save it.
Open your server and client with your new otb and dat.
It should work.
 
1. About using the ID 11396 and not working even being registered at actions.xml, I don't know what it may be.

2. About get the vial, you should go to your Dat Editor, search ID 2874 (which is cid of vial), make sure the flag Pickupable is marked and save it.
Then open your Item Editor, open your items.otb with the updated dat in which you checked the Pickupable flag already, go to Tools > Reload Item Attributes and save it.
You should never edit anything with your Item Editor manually, because it should be synchronized with your dat.
If you change anything in your dat, you go again on your Item Editor at Tools > Reload Item Attributes and save it.
Open your server and client with your new otb and dat.
It should work.
I was able to fix it myself. I found an empty vial in item editor with ID 2006 and cid 110 and I changed to cid 2874 and it works :)
Once again, thank you very much for the hints and help :) REP +
 
Solution
Back
Top