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

no vials'flask after potion use

walltimer

Member
Joined
Aug 5, 2020
Messages
153
Reaction score
18
what change/edit that potion wont transfer to empty vial?
fluid ->
local drunk = Condition(CONDITION_DRUNK)
drunk:setParameter(CONDITION_PARAM_TICKS, 60000)

local poison = Condition(CONDITION_POISON)
poison:setParameter(CONDITION_PARAM_DELAYED, true)
poison:setParameter(CONDITION_PARAM_MINVALUE, -50)
poison:setParameter(CONDITION_PARAM_MAXVALUE, -120)
poison:setParameter(CONDITION_PARAM_STARTVALUE, -5)
poison:setParameter(CONDITION_PARAM_TICKINTERVAL, 4000)
poison:setParameter(CONDITION_PARAM_FORCEUPDATE, true)

local fluidMessage = {
[3] = 'Aah...',
[4] = 'Urgh!',
[5] = 'Mmmh.',
[7] = 'Aaaah...',
[10] = 'Aaaah...',
[11] = 'Urgh!',
[13] = 'Urgh!',
[15] = 'Aah...',
[19] = 'Urgh!',
[43] = 'Aaaah...'
}

local function graveStoneTeleport(cid, fromPosition, toPosition)
local player = Player(cid)
if not player then
return true
end

player:teleportTo(toPosition)
player:say('Muahahahaha..', TALKTYPE_MONSTER_SAY, false, player)
fromPosition:sendMagicEffect(CONST_ME_DRAWBLOOD)
toPosition:sendMagicEffect(CONST_ME_MORTAREA)
end

-- Special poison condition used on dawnport residents
-- Doesnt allow poison yourself when health is <= 10 or your health go low than 10 due poison
function dawnportPoisonCondition(player)
local health = player:getHealth();
local minHealth = 10
-- Default poison values (not possible read condition parameters)
local startValue = 5
local minPoisonDamage = 50
local maxPoisonDamage = 120

-- Special poison
if health > minHealth and health < (minHealth + maxPoisonDamage) then
local maxValue = health - minHealth
local minValue = minPoisonDamage
local value = startValue
local minRoundsDamage = (startValue * (startValue + 1) / 2)

if maxValue < minPoisonDamage then
minValue = maxValue
end

if maxValue < minRoundsDamage then
value = math.floor( math.sqrt(maxValue) )
end

local poisonMod = Condition(CONDITION_POISON)
poisonMod:setParameter(CONDITION_PARAM_DELAYED, true)
poisonMod:setParameter(CONDITION_PARAM_MINVALUE, -minValue)
poisonMod:setParameter(CONDITION_PARAM_MAXVALUE, -maxValue)
poisonMod:setParameter(CONDITION_PARAM_STARTVALUE, -value)
poisonMod:setParameter(CONDITION_PARAM_TICKINTERVAL, 4000)
poisonMod:setParameter(CONDITION_PARAM_FORCEUPDATE, true)

player:addCondition(poisonMod)
-- Common poison
elseif health >= (minHealth + maxPoisonDamage) then
player:addCondition(poison)
end
-- Otherwise no poison
end

local fluid = Action()

function fluid.onUse(player, item, fromPosition, target, toPosition, isHotkey)
local targetType = ItemType(target.itemid)
if targetType:isFluidContainer() then
if target.type == 0 and item.type ~= 0 then
target:transform(target.itemid, item.type)
item:transform(item.itemid, 0)
return true
elseif target.type ~= 0 and item.type == 0 then
target:transform(target.itemid, 0)
item:transform(item.itemid, target.type)
return true
end
end
if target.itemid == 29312 then
if item.type == 0 then
player:sendTextMessage(MESSAGE_FAILURE, 'It is empty.')

elseif item.type == 1 then
toPosition:sendMagicEffect(CONST_ME_WATER_SPLASH)
target:transform(target.itemid + 1)
item:transform(item.itemid, 0)
else
player:sendTextMessage(MESSAGE_FAILURE, 'You need water.')
end
return true
end

if target.itemid == 1 then
if item.type == 0 then
player:sendTextMessage(MESSAGE_FAILURE, 'It is empty.')

elseif target.uid == player.uid then
if isInArray({3, 15, 43}, item.type) then
player:addCondition(drunk)

elseif item.type == 4 then
local town = player:getTown()
if town and town:getId() == TOWNS_LIST.DAWNPORT then
dawnportPoisonCondition(player)
else
player:addCondition(poison)
end
elseif item.type == 7 then
player:addMana(math.random(50, 150))
fromPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE)
elseif item.type == 10 then
player:addHealth(60)
fromPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE)
end

player:say(fluidMessage[item.type] or 'Gulp.', TALKTYPE_MONSTER_SAY)
item:transform(item.itemid, 0)
else
local pool = Game.createItem(2016, item.type, toPosition)
if pool then
pool:decay()
if item.type == 1 then
checkWallArito(pool, toPosition)
end
end
item:transform(item.itemid, 0)
end

else

local fluidSource = targetType:getFluidSource()
if fluidSource ~= 0 then
item:transform(item.itemid, fluidSource)

elseif item.type == 0 then
player:sendTextMessage(MESSAGE_FAILURE, 'It is empty.')

else
if item.type == 2 and target.actionid == 2023 then
toPosition.y = toPosition.y + 1
local creatures, destination = Tile(toPosition):getCreatures(), Position(32791, 32332, 10)
if #creatures == 0 then
graveStoneTeleport(player.uid, fromPosition, destination)
else
local creature
for i = 1, #creatures do
creature = creatures
if creature and creature:isPlayer() then
graveStoneTeleport(creature.uid, toPosition, destination)
end
end
end

else
if toPosition.x == CONTAINER_POSITION then
toPosition = player:getPosition()
end

local pool = Game.createItem(2016, item.type, toPosition)
if pool then
pool:decay()
if item.type == 1 then
checkWallArito(pool, toPosition)
end
end
end
item:transform(item.itemid, 0)
end
end

return true
end

fluid:id(1775, 2005, 2006, 2007, 2008, 2009, 2011, 2012, 2013, 2014, 2015, 2023, 2031, 2032, 2033, 2034, 2562, 2574, 2575, 2576, 2577)
fluid:register()


potions ->
local berserk = Condition(CONDITION_ATTRIBUTES)
berserk:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
berserk:setParameter(CONDITION_PARAM_SKILL_MELEE, 5)
berserk:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10)
berserk:setParameter(CONDITION_PARAM_BUFF_SPELL, true)

local mastermind = Condition(CONDITION_ATTRIBUTES)
mastermind:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
mastermind:setParameter(CONDITION_PARAM_STAT_MAGICPOINTS, 3)
mastermind:setParameter(CONDITION_PARAM_BUFF_SPELL, true)

local bullseye = Condition(CONDITION_ATTRIBUTES)
bullseye:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
bullseye:setParameter(CONDITION_PARAM_SKILL_DISTANCE, 5)
bullseye:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10)
bullseye:setParameter(CONDITION_PARAM_BUFF_SPELL, true)

local antidote = Combat()
antidote:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
antidote:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
antidote:setParameter(COMBAT_PARAM_DISPEL, CONDITION_POISON)
antidote:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
antidote:setParameter(COMBAT_PARAM_TARGETCASTERORTOPMOST, true)

local exhaust = Condition(CONDITION_EXHAUST_HEAL)
exhaust:setParameter(CONDITION_PARAM_TICKS, (configManager.getNumber(configKeys.EX_ACTIONS_DELAY_INTERVAL) - 1000))
-- 1000 - 100 due to exact condition timing. -100 doesn't hurt us, and players don't have reminding ~50ms exhaustion.

local function magicshield(player)
local condition = Condition(CONDITION_MANASHIELD)
condition:setParameter(CONDITION_PARAM_TICKS, 60000)
condition:setParameter(CONDITION_PARAM_MANASHIELD, math.min(player:getMaxMana(), 300 + 7.6 * player:getLevel() + 7 * player:getMagicLevel()))
player:addCondition(condition)
end

local potions = {
[6558] = {
transform = {
id = {7588, 7589}
},
effect = CONST_ME_DRAWBLOOD
},
[7439] = {
vocations = {
VOCATION.CLIENT_ID.KNIGHT
},
condition = berserk,
effect = CONST_ME_MAGIC_RED,
description = "Only knights may drink this potion.",
text = "You feel stronger."
},
[7440] = {
vocations = {
VOCATION.CLIENT_ID.SORCERER,
VOCATION.CLIENT_ID.DRUID
},
condition = mastermind,
effect = CONST_ME_MAGIC_BLUE,
description = "Only sorcerers and druids may drink this potion.",
text = "You feel smarter."
},
[7443] = {
vocations = {
VOCATION.CLIENT_ID.PALADIN
},
condition = bullseye,
effect = CONST_ME_MAGIC_GREEN,
description = "Only paladins may drink this potion.",
text = "You feel more accurate."
},
[40398] = {
vocations = {
VOCATION.CLIENT_ID.SORCERER,
VOCATION.CLIENT_ID.DRUID
},
level = 14,
func = magicshield,
effect = CONST_ME_ENERGYAREA,
description = "Only sorcerers and druids of level 14 or above may drink this potion.",
},
[7588] = {
health = {
250,
350
},
vocations = {
VOCATION.CLIENT_ID.PALADIN,
VOCATION.CLIENT_ID.KNIGHT
},
level = 50,
flask = 7634,
description = "Only knights and paladins of level 50 or above may drink this fluid."
},
[7589] = {
mana = {
115,
185
},
level = 50,
flask = 7634,
description = "Only players of level 50 or above may drink this fluid."
},
[7590] = {
mana = {
150,
250
},
vocations = {
VOCATION.CLIENT_ID.SORCERER,
VOCATION.CLIENT_ID.DRUID,
VOCATION.CLIENT_ID.PALADIN
},
level = 80,
flask = 7635,
description = "Only sorcerers, druids and paladins of level 80 or above may drink this fluid."
},
[7591] = {
health = {
425,
575
},
vocations = {
VOCATION.CLIENT_ID.KNIGHT
},
level = 80,
flask = 7635,
description = "Only knights of level 80 or above may drink this fluid."
},
[7618] = {
health = {
125,
175
},
flask = 7636
},
[7620] = {
mana = {
75,
125
},
flask = 7636
},
[8472] = {
health = {
250,
350
},
mana = {
100,
200
},
vocations = {
VOCATION.CLIENT_ID.PALADIN
},
level = 80,
flask = 7635,
description = "Only paladins of level 80 or above may drink this fluid."
},
[8473] = {
health = {650, 850},
vocations = {
VOCATION.CLIENT_ID.KNIGHT
},
level = 130,
flask = 7635,
description = "Only knights of level 130 or above may drink this fluid."
},
[8474] = {
combat = antidote,
flask = 7636
},
[8704] = {
health = {
60,
90
},
flask = 7636
},
[26029] = {
mana = {
425,
575
},
vocations = {
VOCATION.CLIENT_ID.SORCERER,
VOCATION.CLIENT_ID.DRUID
},
level = 130,
flask = 7635,
description = "Only druids and sorcerers of level 130 or above may drink this fluid."
},
[26030] = {
health = {
420,
580
},
mana = {
250,
350
},
vocations = {
VOCATION.CLIENT_ID.PALADIN
},
level = 130,
flask = 7635,
description = "Only paladins of level 130 or above may drink this fluid."
},
[26031] = {
health = {
875,
1125
},
vocations = {
VOCATION.CLIENT_ID.KNIGHT
},
level = 200,
flask = 7635,
description = "Only knights of level 200 or above may drink this fluid."
}
}

local flaskPotion = Action()

function flaskPotion.onUse(player, item, fromPosition, target, toPosition, isHotkey)
if type(target) == "userdata" and not target:isPlayer() then
return false
end

-- Delay potion
if not playerDelayPotion[player:getId()] then
playerDelayPotion[player:getId()] = 0
end
if playerDelayPotion[player:getId()] > os.mtime() then
player:sendTextMessage(MESSAGE_FAILURE, Game.getReturnMessage(RETURNVALUE_YOUAREEXHAUSTED))
return true
end

local potion = potions[item:getId()]
if potion.level and player:getLevel() < potion.level or potion.vocations and not table.contains(potion.vocations, player:getVocation():getClientId()) and not (player:getGroup():getId() >= 2) then
player:say(potion.description, MESSAGE_POTION)
return true
end

if player:getCondition(CONDITION_EXHAUST_HEAL) then
player:sendTextMessage(MESSAGE_FAILURE, Game.getReturnMessage(RETURNVALUE_YOUAREEXHAUSTED))
return true
end

if potion.health or potion.mana or potion.combat then
if potion.health then
doTargetCombatHealth(0, target, COMBAT_HEALING, potion.health[1], potion.health[2], CONST_ME_MAGIC_BLUE)
end

if potion.mana then
doTargetCombatMana(0, target, potion.mana[1], potion.mana[2], CONST_ME_MAGIC_BLUE)
end

if potion.combat then
potion.combat:execute(target, Variant(target:getId()))
end

player:addAchievementProgress('Potion Addict', 100000)
target:say("Aaaah...", MESSAGE_POTION)
player:addItem(potion.flask, 1)
player:addCondition(exhaust)
player:setStorageValue(38412, player:getStorageValue(38412)+1)
end

-- Delay potion
playerDelayPotion[player:getId()] = os.mtime() + 500

if potion.func then
potion.func(player)
if potion.text then
player:say(potion.text, MESSAGE_POTION)
end
player:getPosition():sendMagicEffect(potion.effect)
end

if potion.condition then
player:addCondition(potion.condition)
player:say(potion.text, MESSAGE_POTION)
player:getPosition():sendMagicEffect(potion.effect)
end

if potion.transform then
if item:getCount() >= 1 then
item:remove(1)
player:addItem(potion.transform.id[math.random(#potion.transform.id)], 1)
item:getPosition():sendMagicEffect(potion.effect)
return true
end
end

if not configManager.getBoolean(configKeys.REMOVE_POTION_CHARGES) then
return true
end

player:updateSupplyTracker(item)
item:remove(1)
return true
end

for index, value in pairs(potions) do
flaskPotion:id(index)
end

flaskPotion:register()
 
Solution
I don't really understand anything, but I think you want to remove potion empty flask?!


just remove this from potions:

player:addItem(potion.flask, 1)


and for vials something like changing this:

item:transform(item.itemid, 0)

into this:
item:remove(1)

Evil Puncker

prolonged absenteeism
TFS Developer
Joined
May 30, 2009
Messages
8,038
Solutions
215
Reaction score
3,878
I don't really understand anything, but I think you want to remove potion empty flask?!


just remove this from potions:

player:addItem(potion.flask, 1)


and for vials something like changing this:

item:transform(item.itemid, 0)

into this:
item:remove(1)
 
Solution
OP
OP
W

walltimer

Member
Joined
Aug 5, 2020
Messages
153
Reaction score
18
I don't really understand anything, but I think you want to remove potion empty flask?!


just remove this from potions:

player:addItem(potion.flask, 1)


and for vials something like changing this:

item:transform(item.itemid, 0)

into this:
item:remove(1)
thanks! :p i changed onlny the first one before, now it works
 
Top