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

fluids on floor and in pot

Jeyci

Active Member
Joined
May 6, 2023
Messages
289
Solutions
3
Reaction score
36
TFS 1.5 - 8.6

Hello can't use fluids on floor or in pots, in spite i saw this thread TFS 1.X+ - Lifefluid and POT nekiro version 7.72 1.5 (https://otland.net/threads/lifefluid-and-pot-nekiro-version-7-72-1-5.280605/#post-2729394) and tried to adjust things.
can somebody help me please?
this is my fluids.lua
LUA:
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 = {
    [FLUID_BEER] = "Aah...",
    [FLUID_SLIME] = "Urgh!",
    [FLUID_LEMONADE] = "Mmmh.",
    [FLUID_MANA] = "Aaaah...",
    [FLUID_LIFE] = "Aaaah...",
    [FLUID_OIL] = "Urgh!",
    [FLUID_URINE] = "Urgh!",
    [FLUID_WINE] = "Aah...",
    [FLUID_MUD] = "Urgh!",
    [FLUID_RUM] = "Aah...",
    [FLUID_MEAD] = "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

local distillery = {[5513] = 5469, [5514] = 5470}

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local targetItemType = ItemType(target.itemid)
    if targetItemType and targetItemType:isFluidContainer() then
        if target.type == FLUID_NONE and item.type ~= FLUID_NONE then
            target:transform(target:getId(), item.type)
            item:transform(item:getId(), FLUID_NONE)
            return true
        elseif target.type ~= FLUID_NONE and item.type == FLUID_NONE then
            item:transform(item:getId(), target.type)
            target:transform(target:getId(), FLUID_NONE)
            return true
        end
    end

    if target.itemid == 1 then
        if item.type == FLUID_NONE then
            player:sendTextMessage(MESSAGE_STATUS_SMALL, "It is empty.")
        elseif target.uid == player.uid then
            if table.contains({FLUID_BEER, FLUID_WINE, FLUID_MEAD}, item.type) then
                player:addCondition(drunk)
            elseif item.type == FLUID_SLIME then
                player:addCondition(poison)
            elseif item.type == FLUID_MANA then
                player:addMana(math.random(50, 150))
                fromPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE)
            elseif item.type == FLUID_LIFE then
                player:addHealth(60)
                fromPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE)
            end
            player:say(fluidMessage[item.type] or "Gulp.", TALKTYPE_MONSTER_SAY)
            item:transform(item:getId(), FLUID_NONE)
        else
            Game.createItem(2016, item.type, toPosition):decay()
            item:transform(item:getId(), FLUID_NONE)
        end
    else
        local fluidSource = targetItemType and targetItemType:getFluidSource() or FLUID_NONE
        if fluidSource ~= FLUID_NONE then
            item:transform(item:getId(), fluidSource)
        elseif table.contains(distillery, target.itemid) then
            local tmp = distillery[target.itemid]
            if tmp then
                item:transform(item:getId(), FLUID_NONE)
            else
                player:sendCancelMessage("You have to process the bunch into the distillery to get rum.")
            end
        elseif item.type == FLUID_NONE then
            player:sendTextMessage(MESSAGE_STATUS_SMALL, "It is empty.")
        else
            if item.type == FLUID_BLOOD 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[i]
                        if creature and creature:isPlayer() then
                            graveStoneTeleport(creature.uid, toPosition, destination)
                        end
                    end
                end
            end

            if toPosition.x == CONTAINER_POSITION then
                toPosition = player:getPosition()
            end
            Game.createItem(2016, item.type, toPosition):decay()
            item:transform(item:getId(), FLUID_NONE)
        end
    end
    return true
end
this is my potions.lua
Code:
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 manaShield = Condition(CONDITION_MANASHIELD_BREAKABLE)
--manaShield:setParameter(CONDITION_PARAM_TICKS, 3 * 60 * 1000)

--local function magicShieldCapacity(player)
--    manaShield:setParameter(CONDITION_PARAM_MANASHIELD_BREAKABLE, math.min(player:getMaxMana(), 300 + 7.6 * player:getLevel() + 7 * player:getMagicLevel()))
--end

local potions = {
    [6558] = { -- flask of demonic blood
        transform = {7588, 7589},
        effect = CONST_ME_DRAWBLOOD
    },
    [7439] = { -- berserk potion
        condition = berserk,
        vocations = {
            VOCATION_KNIGHT,
            VOCATION_ELITE_KNIGHT
        },
        effect = CONST_ME_MAGIC_RED,
        description = "Only knights may drink this potion.",
        text = "You feel stronger."
    },
    [7440] = { -- mastermind potion
        condition = mastermind,
        vocations = {
            VOCATION_SORCERER,
            VOCATION_DRUID,
            VOCATION_MASTER_SORCERER,
            VOCATION_ELDER_DRUID
        },
        effect = CONST_ME_MAGIC_BLUE,
        description = "Only sorcerers and druids may drink this potion.",
        text = "You feel smarter."
    },
    [7443] = { -- bullseye potion
        condition = bullseye,
        vocations = {
            VOCATION_PALADIN,
            VOCATION_ROYAL_PALADIN
        },
        effect = CONST_ME_MAGIC_GREEN,
        description = "Only paladins may drink this potion.",
        text = "You feel more accurate."
    },
    --[38219] = { -- magic shield potion
    --    condition = manaShield,
    --    vocations = {
    --        VOCATION_SORCERER,
    ---        VOCATION_DRUID,
        --    VOCATION_MASTER_SORCERER,
        --    VOCATION_ELDER_DRUID
        --},
        --level = 14,
        --effect = CONST_ME_ENERGYAREA,
        --description = "Only sorcerers and druids of level 14 or above may drink this potion.",
        --capacity = magicShieldCapacity
    --},
    [7588] = { -- strong health potion
        health = {250, 350},
        vocations = {
            VOCATION_PALADIN,
            VOCATION_KNIGHT,
            VOCATION_ROYAL_PALADIN,
            VOCATION_ELITE_KNIGHT
        },
        level = 50,
        flask = 7634,
        description = "Only knights and paladins of level 50 or above may drink this fluid."
    },
    [7589] = { -- strong mana potion
        mana = {115, 185},
        level = 50,
        flask = 7634,
        description = "Only players of level 50 or above may drink this fluid."
    },
    [7590] = { -- great mana potion
        mana = {150, 250},
        vocations = {
            VOCATION_SORCERER,
            VOCATION_DRUID,
            VOCATION_PALADIN,
            VOCATION_MASTER_SORCERER,
            VOCATION_ELDER_DRUID,
            VOCATION_ROYAL_PALADIN
        },
        level = 80,
        flask = 7635,
        description = "Only sorcerers, druids and paladins of level 80 or above may drink this fluid."
    },
    [7591] = { -- great health potion
        health = {425, 575},
        vocations = {
            VOCATION_KNIGHT,
            VOCATION_ELITE_KNIGHT
        },
        level = 80,
        flask = 7635,
        description = "Only knights of level 80 or above may drink this fluid."
    },
    [7618] = { -- health potion
        health = {125, 175},
        flask = 7636
    },
    [7620] = { -- mana potion
        mana = {75, 125},
        flask = 7636
    },
    [8472] = { -- great spirit potion
        health = {250, 350},
        mana = {100, 200},
        vocations = {
            VOCATION_PALADIN,
            VOCATION_ROYAL_PALADIN
        },
        level = 80,
        flask = 7635,
        description = "Only paladins of level 80 or above may drink this fluid."
    },
    [8473] = { -- ultimate health potion
        health = {650, 850},
        vocations = {
            VOCATION_KNIGHT,
            VOCATION_ELITE_KNIGHT
        },
        level = 130,
        flask = 7635,
        description = "Only knights of level 130 or above may drink this fluid."
    },
    [8474] = { -- antidote potion
        antidote = true,
        flask = 7636
    },
    [8704] = { -- small health potion
        health = {60, 90},
        flask = 7636
    },
    [26029] = { -- ultimate mana potion
        mana = {425, 575},
        vocations = {
            VOCATION_SORCERER,
            VOCATION_DRUID,
            VOCATION_MASTER_SORCERER,
            VOCATION_ELDER_DRUID
        },
        level = 130,
        flask = 7635,
        description = "Only druids and sorcerers of level 130 or above may drink this fluid."
    },
    [26030] = { -- ultimate spirit potion
        health = {410, 580},
        mana = {150, 250},
        vocations = {
            VOCATION_PALADIN,
            VOCATION_ROYAL_PALADIN
        },
        level = 130,
        flask = 7635,
        description = "Only paladins of level 130 or above may drink this fluid."
    },
    [26031] = { -- supreme health potion
        health = {875, 1125},
        vocations = {
            VOCATION_KNIGHT,
            VOCATION_ELITE_KNIGHT
        },
        level = 200,
        flask = 7635,
        description = "Only knights of level 200 or above may drink this fluid."
    }
}

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

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

    if potion.condition then
        if potion.capacity then
            potion.capacity(player)
        end
        player:addCondition(potion.condition)
        player:say(potion.text, TALKTYPE_POTION)
        player:getPosition():sendMagicEffect(potion.effect)
    elseif potion.transform then
        local reward = potion.transform[math.random(#potion.transform)]
        if fromPosition.x == CONTAINER_POSITION then
            local targetContainer = Container(item:getParent().uid)
            targetContainer:addItem(reward, 1)
        else
            Game.createItem(reward, 1, fromPosition)
        end

        item:getPosition():sendMagicEffect(potion.effect)
        item:remove(1)
        return true
    else
        if potion.health then
            doTargetCombat(player, target, COMBAT_HEALING, potion.health[1], potion.health[2])
        end

        if potion.mana then
            doTargetCombat(player, target, COMBAT_MANADRAIN, potion.mana[1], potion.mana[2])
        end

        if potion.antidote then
            target:removeCondition(CONDITION_POISON)
        end

        player:addAchievementProgress("Potion Addict", 100000)
        player:addItem(potion.flask)
        target:say("Aaaah...", TALKTYPE_POTION)
        target:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
    end

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

    item:remove(1)
    return true
end

thanks
 
Back
Top