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

fix vial of manafluid

Solution
Thanks for your help... problens

1- if it's a tile with nothing on top it blocks the use -> ok
2 - when there is any object on top of the tile, it lets you use mana on the ground -> console error.

Note: if I cast id /i 2025, poison fluid appears and it has decay


[16/2/2022 17:39:25] data/actions/scripts/liquids/potions.lua:152: attempt to index local 'fluid_pool' (a number value)
[16/2/2022 17:39:25] stack traceback:
[16/2/2022 17:39:25] data/actions/scripts/liquids/potions.lua:152: in function <data/actions/scripts/liquids/potions.lua:50>


View attachment 65586

I don't understand what's wrong by your explanation...
But, let's add a few extra checks

change this
Lua:
local fluid_pool = doCreateItem(2025, item.type...
my server has potion and mana.lua

mana
Lua:
function onUse(cid, item, frompos, item2, topos)
 
local mana = getCreatureMaxMana(cid)
local ppos = getCreaturePosition(cid)

doSendMagicEffect(ppos, CONST_ME_MAGIC_BLUE)
doCreatureAddMana(cid, mana)
doCreatureSay(cid,"Aaaah...")
 
end

potions
Lua:
local ITEM_RUM_FLASK = 2006

local TYPE_EMPTY = 0
local TYPE_WATER = 1
local TYPE_BLOOD = 2
local TYPE_BEER = 3
local TYPE_SLIME = 4
local TYPE_LEMONADE = 5
local TYPE_MILK = 6
local TYPE_MANA_FLUID = 7
local TYPE_LIFE_FLUID = 10
local TYPE_OIL = 11
local TYPE_URINE = 13
local TYPE_COCONUT_MILK = 14
local TYPE_WINE = 15
local TYPE_MUD = 19
local TYPE_FRUIT_JUICE = 21
local TYPE_LAVA = 26
local TYPE_RUM = 27
local TYPE_SWAMP = 28
local TYPE_TEA = 35

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 exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 4)

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 burn = createConditionObject(CONDITION_FIRE)
setConditionParam(burn, CONDITION_PARAM_DELAYED, true) -- Condition will delay the first damage from when it's added
setConditionParam(burn, CONDITION_PARAM_MINVALUE, -70) -- Minimum damage the condition can do at total
setConditionParam(burn, CONDITION_PARAM_MAXVALUE, -150) -- Maximum damage
setConditionParam(burn, CONDITION_PARAM_STARTVALUE, -10) -- The damage the condition will do on the first hit
setConditionParam(burn, CONDITION_PARAM_TICKINTERVAL, 10000) -- Delay between damages
setConditionParam(burn, CONDITION_PARAM_FORCEUPDATE, true) -- Re-update condition when adding it(ie. min/max value)

function onUse(cid, item, fromPosition, itemEx, toPosition)
if(hasCondition(cid, CONDITION_EXHAUST) == TRUE) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
return TRUE
end

    if(doComparePositions(getCreaturePosition(cid), toPosition))then
        itemEx.uid = cid
    end

    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(not doPlayerAddMana(itemEx.uid, math.random(60, 90))) then
                return false
            end
            doAddCondition(cid, exhaust)
            doCreatureSay(itemEx.uid, "Aaaah...")
            doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE)
        elseif(item.type == TYPE_LIFE_FLUID) then
            if(not doCreatureAddHealth(itemEx.uid, math.random(55, 105))) then
                return false
            end
            doAddCondition(cid, exhaust)
            doCreatureSay(itemEx.uid, "Aaaah...")
            doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE)
        elseif(isInArray(alcoholDrinks, item.type)) then
            if(not doTargetCombatCondition(0, cid, drunk, CONST_ME_NONE)) then
                return false
            end

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

            doCreatureSay(cid, "Urgh!")
        elseif(item.type == TYPE_LAVA) then
            if(not doTargetCombatCondition(0, cid, burn, CONST_ME_NONE)) then
                return false
            end

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

        doRemoveItem(item.uid, 1)
        return true
    end

    if(not isCreature(itemEx.uid)) then
        if(item.type == TYPE_EMPTY) then
            if(isItemFluidContainer(itemEx.itemid) and itemEx.type ~= TYPE_EMPTY) then
                doChangeTypeItem(item.uid, itemEx.type)
                doChangeTypeItem(itemEx.uid, TYPE_EMPTY)
                return true
            end

            local tmp = casks[itemEx.itemid]
            if(tmp == nil) then
                tmp = getFluidSourceType(itemEx.itemid)
            end

            if(tmp) then
                doChangeTypeItem(item.uid, tmp)
                return true
            end

            doPlayerSendCancel(cid, "It is empty.")
            return true
        end

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

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

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

    if(item.type == TYPE_EMPTY) then
        doPlayerSendCancel(cid, "It is empty.")
        return true
    end

    doCreateItem(2025, item.type, toPosition)
    doChangeTypeItem(item.uid, TYPE_EMPTY)
    return true
end
 
my server has potion and mana.lua

mana
Lua:
function onUse(cid, item, frompos, item2, topos)
 
local mana = getCreatureMaxMana(cid)
local ppos = getCreaturePosition(cid)

doSendMagicEffect(ppos, CONST_ME_MAGIC_BLUE)
doCreatureAddMana(cid, mana)
doCreatureSay(cid,"Aaaah...")
 
end

potions
Lua:
local ITEM_RUM_FLASK = 2006

local TYPE_EMPTY = 0
local TYPE_WATER = 1
local TYPE_BLOOD = 2
local TYPE_BEER = 3
local TYPE_SLIME = 4
local TYPE_LEMONADE = 5
local TYPE_MILK = 6
local TYPE_MANA_FLUID = 7
local TYPE_LIFE_FLUID = 10
local TYPE_OIL = 11
local TYPE_URINE = 13
local TYPE_COCONUT_MILK = 14
local TYPE_WINE = 15
local TYPE_MUD = 19
local TYPE_FRUIT_JUICE = 21
local TYPE_LAVA = 26
local TYPE_RUM = 27
local TYPE_SWAMP = 28
local TYPE_TEA = 35

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 exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 4)

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 burn = createConditionObject(CONDITION_FIRE)
setConditionParam(burn, CONDITION_PARAM_DELAYED, true) -- Condition will delay the first damage from when it's added
setConditionParam(burn, CONDITION_PARAM_MINVALUE, -70) -- Minimum damage the condition can do at total
setConditionParam(burn, CONDITION_PARAM_MAXVALUE, -150) -- Maximum damage
setConditionParam(burn, CONDITION_PARAM_STARTVALUE, -10) -- The damage the condition will do on the first hit
setConditionParam(burn, CONDITION_PARAM_TICKINTERVAL, 10000) -- Delay between damages
setConditionParam(burn, CONDITION_PARAM_FORCEUPDATE, true) -- Re-update condition when adding it(ie. min/max value)

function onUse(cid, item, fromPosition, itemEx, toPosition)
if(hasCondition(cid, CONDITION_EXHAUST) == TRUE) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
return TRUE
end

    if(doComparePositions(getCreaturePosition(cid), toPosition))then
        itemEx.uid = cid
    end

    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(not doPlayerAddMana(itemEx.uid, math.random(60, 90))) then
                return false
            end
            doAddCondition(cid, exhaust)
            doCreatureSay(itemEx.uid, "Aaaah...")
            doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE)
        elseif(item.type == TYPE_LIFE_FLUID) then
            if(not doCreatureAddHealth(itemEx.uid, math.random(55, 105))) then
                return false
            end
            doAddCondition(cid, exhaust)
            doCreatureSay(itemEx.uid, "Aaaah...")
            doSendMagicEffect(toPosition, CONST_ME_MAGIC_BLUE)
        elseif(isInArray(alcoholDrinks, item.type)) then
            if(not doTargetCombatCondition(0, cid, drunk, CONST_ME_NONE)) then
                return false
            end

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

            doCreatureSay(cid, "Urgh!")
        elseif(item.type == TYPE_LAVA) then
            if(not doTargetCombatCondition(0, cid, burn, CONST_ME_NONE)) then
                return false
            end

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

        doRemoveItem(item.uid, 1)
        return true
    end

    if(not isCreature(itemEx.uid)) then
        if(item.type == TYPE_EMPTY) then
            if(isItemFluidContainer(itemEx.itemid) and itemEx.type ~= TYPE_EMPTY) then
                doChangeTypeItem(item.uid, itemEx.type)
                doChangeTypeItem(itemEx.uid, TYPE_EMPTY)
                return true
            end

            local tmp = casks[itemEx.itemid]
            if(tmp == nil) then
                tmp = getFluidSourceType(itemEx.itemid)
            end

            if(tmp) then
                doChangeTypeItem(item.uid, tmp)
                return true
            end

            doPlayerSendCancel(cid, "It is empty.")
            return true
        end

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

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

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

    if(item.type == TYPE_EMPTY) then
        doPlayerSendCancel(cid, "It is empty.")
        return true
    end

    doCreateItem(2025, item.type, toPosition)
    doChangeTypeItem(item.uid, TYPE_EMPTY)
    return true
end
At line 151 change to:
Lua:
doCreateItem(2025, item.type, toPosition):decay()
 
I am not sure, just wondering. Wouldnt force that to decay the item?? Maybe he doesn't have the decay in the items.xml for that splash.. its weird it does works for other splashes and not for mana type
 
in my items.xml I have not declared manafluid decay...


Lua:
<item id="20001" name="water"/>
    <item id="20002" name="blood"/>
    <item id="20003" name="beer"/>
    <item id="20004" name="slime"/>
    <item id="20005" name="lemonade"/>
    <item id="20006" name="milk"/>
    <item id="20007" name="manafluid"/>
    <item id="20010" name="lifefluid"/>
    <item id="20011" name="oil"/>
    <item id="20013" name="urine"/>
    <item id="20014" name="coconut milk"/>
 
The problem is at your items.xml

Change:
XML:
    <item id="2025" article="a" name="pool"/>
    <item id="2026" article="a" name="pool"/>
    <item id="2027" article="a" name="pool"/>
    <item id="2028" article="a" name="pool"/>
    <item id="2029" article="a" name="pool"/>
    <item id="2030" article="a" name="pool"/>

To:
XML:
    <item id="2025" article="a" name="pool">
        <attribute key="decayTo" value="2026"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2026" article="a" name="pool">
        <attribute key="decayTo" value="2027"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2027" article="a" name="pool">
        <attribute key="decayTo" value="0"/>
        <attribute key="duration" value="60"/>
    </item>
    <item id="2028" article="a" name="pool">
        <attribute key="decayTo" value="2029"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2029" article="a" name="pool">
        <attribute key="decayTo" value="2030"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2030" article="a" name="pool">
        <attribute key="decayTo" value="0"/>
        <attribute key="duration" value="60"/>
    </item>
 
The problem is at your items.xml

Change:
XML:
    <item id="2025" article="a" name="pool"/>
    <item id="2026" article="a" name="pool"/>
    <item id="2027" article="a" name="pool"/>
    <item id="2028" article="a" name="pool"/>
    <item id="2029" article="a" name="pool"/>
    <item id="2030" article="a" name="pool"/>

To:
XML:
    <item id="2025" article="a" name="pool">
        <attribute key="decayTo" value="2026"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2026" article="a" name="pool">
        <attribute key="decayTo" value="2027"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2027" article="a" name="pool">
        <attribute key="decayTo" value="0"/>
        <attribute key="duration" value="60"/>
    </item>
    <item id="2028" article="a" name="pool">
        <attribute key="decayTo" value="2029"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2029" article="a" name="pool">
        <attribute key="decayTo" value="2030"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2030" article="a" name="pool">
        <attribute key="decayTo" value="0"/>
        <attribute key="duration" value="60"/>
    </item>

thanks for your help, however my items.xml are already like this

my itens.xml

Lua:
    <item id="2025" article="a" name="pool">
        <attribute key="decayTo" value="2026"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2026" article="a" name="pool">
        <attribute key="decayTo" value="2027"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2027" article="a" name="pool">
        <attribute key="decayTo" value="0"/>
        <attribute key="duration" value="60"/>
    </item>
    <item id="2028" article="a" name="pool">
        <attribute key="decayTo" value="2029"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2029" article="a" name="pool">
        <attribute key="decayTo" value="2030"/>
        <attribute key="duration" value="45"/>
    </item>
    <item id="2030" article="a" name="pool">
        <attribute key="decayTo" value="0"/>
        <attribute key="duration" value="60"/>
    </item>
 
At line 151 change to:
Lua:
doCreateItem(2025, item.type, toPosition):decay()
correct idea, wrong tfs version.

At line 151 change
Lua:
doCreateItem(2025, item.type, toPosition)
to
Lua:
local fluid_pool = doCreateItem(2025, item.type, toPosition)
doDecayItem(fluid_pool.uid)
 
correct idea, wrong tfs version.

At line 151 change
Lua:
doCreateItem(2025, item.type, toPosition)
to
Lua:
local fluid_pool = doCreateItem(2025, item.type, toPosition)
doDecayItem(fluid_pool.uid)

Thanks for your help... problens

1- if it's a tile with nothing on top it blocks the use -> ok
2 - when there is any object on top of the tile, it lets you use mana on the ground -> console error.

Note: if I cast id /i 2025, poison fluid appears and it has decay


[16/2/2022 17:39:25] data/actions/scripts/liquids/potions.lua:152: attempt to index local 'fluid_pool' (a number value)
[16/2/2022 17:39:25] stack traceback:
[16/2/2022 17:39:25] data/actions/scripts/liquids/potions.lua:152: in function <data/actions/scripts/liquids/potions.lua:50>


Sem título.jpg
 
Last edited:
Thanks for your help... problens

1- if it's a tile with nothing on top it blocks the use -> ok
2 - when there is any object on top of the tile, it lets you use mana on the ground -> console error.

Note: if I cast id /i 2025, poison fluid appears and it has decay


[16/2/2022 17:39:25] data/actions/scripts/liquids/potions.lua:152: attempt to index local 'fluid_pool' (a number value)
[16/2/2022 17:39:25] stack traceback:
[16/2/2022 17:39:25] data/actions/scripts/liquids/potions.lua:152: in function <data/actions/scripts/liquids/potions.lua:50>


View attachment 65586

I don't understand what's wrong by your explanation...
But, let's add a few extra checks

change this
Lua:
local fluid_pool = doCreateItem(2025, item.type, toPosition)
doDecayItem(fluid_pool.uid)
to this
Lua:
local ret = RETURNVALUE_NOERROR
local fluid_pool = doCreateItemEx(2025, item.type)

ret = doTileAddItemEx(toPosition, fluid_pool)
if ret == RETURNVALUE_NOERROR then
	doDecayItem(fluid_pool)
end
 
Solution
Back
Top