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
local fluid_pool = doCreateItem(2025, item.type...
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
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: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
doCreateItem(2025, item.type, toPosition):decay()
doCreateItem(2025, item.type, toPosition):decay()
Did you check your items.xml?did not work
<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"/>
<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"/>
<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>
<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>
correct idea, wrong tfs version.At line 151 change to:
Lua:doCreateItem(2025, item.type, toPosition):decay()
doCreateItem(2025, item.type, toPosition)
local fluid_pool = doCreateItem(2025, item.type, toPosition)
doDecayItem(fluid_pool.uid)
correct idea, wrong tfs version.
At line 151 change
toLua:doCreateItem(2025, item.type, toPosition)
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>
View attachment 65586
local fluid_pool = doCreateItem(2025, item.type, toPosition)
doDecayItem(fluid_pool.uid)
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