• 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!
  • If you're using Gesior 2012 or MyAAC, please review this thread for information about a serious security vulnerability and a fix.

TFS 1.X+ 1.3+ 10.98 , potions idea + request for remake of script

Lbtg

Well-Known Member
Joined
Nov 22, 2008
Messages
2,172
Reaction score
98
Hello all, i want to ask for remake(upgrade) of the script lil bit

So i have this potions.lua, the script i use for potions,
so i want to make that if player x has storage ID 1111 has 10% chance to double heal( double heal means that on using potion player has chance, to drink 2 potions in same, time, ) , if player drink up 2 potions , show it with 2x 'aaaaahh' + effect id 199 + send message to player in blue text ''you doubled healed''
.

and if player has storage id 2222, has + extra 5% chance, to triple heal ( same idea, chance to drink 3 potions in same time).


So if player has none of those storages, potions using is normal, but if player has 1111 storage, he got 10% chance to double heal,
and if player has both storage id 1111 and 2222, player has 10% to double heal , + 5% to triple heal.

potions.lua

Lua:
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 potions = {
    [6558] = { -- concentrated demonic blood
        transform = {7588, 7589},
        effect = CONST_ME_DRAWBLOOD
    },
    [7439] = { -- berserk potion
        condition = berserk,
        vocations = {4, 8},
        effect = CONST_ME_MAGIC_RED,
        description = "Only knights may drink this potion.",
        text = "You feel stronger."
    },
    [7440] = { -- mastermind potion
        condition = mastermind,
        vocations = {1, 2, 5, 6},
        effect = CONST_ME_MAGIC_BLUE,
        description = "Only sorcerers and druids may drink this potion.",
        text = "You feel smarter."
        },
    [7443] = { -- bullseye potion
        condition = bullseye,
        vocations = {3, 7},
        effect = CONST_ME_MAGIC_GREEN,
        description = "Only paladins may drink this potion.",
        text = "You feel more accurate."
    },
    [7588] = { -- strong health potion
        health = {1000, 1400},
        vocations = {3, 4, 7, 8},
        flask = 0,
        description = "Only knights and paladins of level 50 or above may drink this fluid."
    },
    [7589] = { -- strong mana potion
        mana = {460, 740},
        vocations = {1, 2, 3, 5, 6, 7},
        flask = 0,
        description = "Only sorcerers, druids and paladins of level 50 or above may drink this fluid."
    },
    [7590] = { -- great mana potion
        mana = {600, 1000},
        vocations = {1, 2, 5, 6},
        flask = 0,
        description = "Only druids and sorcerers of level 80 or above may drink this fluid."
    },
    [7591] = { -- great health potion
        health = {1700, 2300},
        vocations = {4, 8},
        flask = 0,
        description = "Only knights of level 80 or above may drink this fluid."
    },
    [7618] = { -- health potion
        health = {500, 700},
        flask = 0
    },
    [7620] = { -- mana potion
        mana = {300, 500},
        flask = 0
    },
    [8472] = { -- great spirit potion
        health = {1000, 1400},
        mana = {400, 800},
        vocations = {3, 7},
        flask = 0,
        description = "Only paladins of level 80 or above may drink this fluid."
    },
    [8473] = { -- ultimate health potion
        health = {2600, 3400},
        vocations = {4, 8},
        flask = 0,
        description = "Only knights of level 130 or above may drink this fluid."
    },
    [8474] = { -- antidote potion
        antidote = true,
        flask = 0,
    },
    [8704] = { -- small health potion
        health = {120, 180},
        flask = 0,
    },
    [26029] = { -- ultimate mana potion
        mana = {1700, 2300},
        vocations = {1, 2, 5, 6},
        flask = 0,
        description = "Only druids and sorcerers of level 130 or above may drink this fluid."
    },
    [26030] = { -- supreme spirit potion
        health = {1680, 2320},
        mana = {800, 1400},
        vocations = {3, 7},
        flask = 0,
        description = "Only paladins of level 130 or above may drink this fluid."
    },
    [26031] = { -- ultimate health potion
        health = {3500, 4500},
        vocations = {4, 8},
        flask = 0,
        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 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_MONSTER_SAY)
        return true
    end

    if potion.condition then
        player:addCondition(potion.condition)
        player:say(potion.text, TALKTYPE_MONSTER_SAY)
        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(0, target, COMBAT_HEALING, potion.health[1], potion.health[2])
        end

        if potion.mana then
            doTargetCombat(0, 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_MONSTER_SAY)
        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
 

Xikini

I whore myself out for likes
Senator
Joined
Nov 17, 2010
Messages
6,245
Solutions
545
Reaction score
4,488
change this..
Lua:
else
    if potion.health then
        doTargetCombat(0, target, COMBAT_HEALING, potion.health[1], potion.health[2])
    end

    if potion.mana then
        doTargetCombat(0, 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_MONSTER_SAY)
    target:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
end
to this..
Lua:
else
    local healAmount = 1 -- default's to 1
    if player:getStorageValue(1111) ~= -1 then -- storage check
        if math.random(100) <= 10 then -- chance
            healAmount = 2 -- double
        end
    end
    if player:getStorageValue(2222) ~= -1 then -- storage check
        if math.random(100) <= 5 then -- chance
            healAmount = 3 -- triple
        end
    end
    
    if potion.health then
        doTargetCombat(0, target, COMBAT_HEALING, (potion.health[1] * healAmount), (potion.health[2] * healAmount)) -- increase the heal amount using multiplication
    end

    if potion.mana then
        doTargetCombat(0, target, COMBAT_MANADRAIN, (potion.mana[1] * healAmount), (potion.mana[2] * healAmount)) -- increase the heal amount using multiplication
    end

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

    player:addAchievementProgress("Potion Addict", 100000)
    player:addItem(potion.flask)
    target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
    
    if healAmount == 1 then
        target:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
    else
        -- spacing out the Aaaah..'s so all are visible
        for i = 1, healAmount - 1 do
            local targetId = target:getId()
            addEvent(function(targetId)
                local target = Creature(targetId)
                if target then
                    target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
                end
            end, i * 100)
        end
        -- changed magic effect
        target:getPosition():sendMagicEffect(199)
        -- blue text
        if healAmount == 2 then
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You double healed!")
        else
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You triple healed!")
        end
    end
end
 
OP
OP
Lbtg

Lbtg

Well-Known Member
Joined
Nov 22, 2008
Messages
2,172
Reaction score
98
change this..
Lua:
else
    if potion.health then
        doTargetCombat(0, target, COMBAT_HEALING, potion.health[1], potion.health[2])
    end

    if potion.mana then
        doTargetCombat(0, 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_MONSTER_SAY)
    target:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
end
to this..
Lua:
else
    local healAmount = 1 -- default's to 1
    if player:getStorageValue(1111) ~= -1 then -- storage check
        if math.random(100) <= 10 then -- chance
            healAmount = 2 -- double
        end
    end
    if player:getStorageValue(2222) ~= -1 then -- storage check
        if math.random(100) <= 5 then -- chance
            healAmount = 3 -- triple
        end
    end
   
    if potion.health then
        doTargetCombat(0, target, COMBAT_HEALING, (potion.health[1] * healAmount), (potion.health[2] * healAmount)) -- increase the heal amount using multiplication
    end

    if potion.mana then
        doTargetCombat(0, target, COMBAT_MANADRAIN, (potion.mana[1] * healAmount), (potion.mana[2] * healAmount)) -- increase the heal amount using multiplication
    end

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

    player:addAchievementProgress("Potion Addict", 100000)
    player:addItem(potion.flask)
    target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
   
    if healAmount == 1 then
        target:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
    else
        -- spacing out the Aaaah..'s so all are visible
        for i = 1, healAmount - 1 do
            local targetId = target:getId()
            addEvent(function(targetId)
                local target = Creature(targetId)
                if target then
                    target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
                end
            end, i * 100)
        end
        -- changed magic effect
        target:getPosition():sendMagicEffect(199)
        -- blue text
        if healAmount == 2 then
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You double healed!")
        else
            player:sendTextMessage(MESSAGE_INFO_DESCR, "You triple healed!")
        end
    end
end
Thanks alot, will test it soon
 
Top