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

Compiling How to show health and mana(healing numbers)

eduardocosta

New Member
Joined
Aug 27, 2009
Messages
17
Reaction score
0
Hello team,
Could anyone help me with a code for 10.98 TFS-1.2 server?

After using HP and MP potions show the heal numbers. I need the code to compile (Visual Studio program) .
Ex:
ImWl4HQ.jpg

Thnx :)
 
Solution
try this
Lua:
local ultimateHealthPot = 8473
local greatHealthPot = 7591
local greatManaPot = 7590
local greatSpiritPot = 8472
local strongHealthPot = 7588
local strongManaPot = 7589
local healthPot = 7618
local manaPot = 7620
local smallHealthPot = 8704
local antidotePot = 8474
local greatEmptyPot = 7635
local strongEmptyPot = 7634
local emptyPot = 7636

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

local exhaust = Condition(CONDITION_EXHAUST_HEAL)...
how i can add number min/max of potion, not for random number
local config = {
-- strong health potion
[7588] = {health = {min = 375, max = 1050}, vocations = {3, 4}, text = 'paladins and knights', level = 50, emptyId = 7634},
-- strong mana potion
[7589] = {mana = {min = 675, max = 2250}, vocations = {1, 2}, text = 'sorcerers, druids', level = 50, emptyId = 7634},
-- great mana potion
[7590] = {mana = {min = 3500, max = 4500}, vocations = {1, 2}, text = 'sorcerers and druids', level = 80, emptyId = 7635},
-- great health potion
[7591] = {health = {min = 975, max = 2550}, vocations = {4}, text = 'knights', level = 80, emptyId = 7635},
-- health potion
[7618] = {health = {min = 188, max = 525}, emptyId = 7636},
-- mana potion
[7620] = {mana = {min = 113, max = 375}, emptyId = 7636},
-- great spirit potion
[8472] = {health = {min = 1500, max = 2500}, mana = {min = 800, max = 1600}, vocations = {3}, text = 'paladins', level = 130, emptyId = 7635},
-- ultimate health potion
[8473] = {health = {min = 3500, max = 4500}, mana = {min = 75, max = 125}, vocations = {4}, text = 'knights', level = 130, emptyId = 7635},
-- antidote potion
[8474] = {antidote = true, emptyId = 7636},
-- small health potion
[8704] = {health = {min = 90, max = 255}, emptyId = 7636}
}

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

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 sendManaNumbers(player, mana)
player:sendTextMessage(MESSAGE_HEALED, ("You gained %d mana."):format(mana), player:getPosition(), mana, TEXTCOLOR_BLUE)
local name = player:getName()
for _, spectator in ipairs(Game.getSpectators(player:getPosition(), false, true)) do
if spectator ~= player then
spectator:sendTextMessage(MESSAGE_HEALED, ("%s gained %d mana."):format(name, mana), player:getPosition(), mana, TEXTCOLOR_BLUE)
end
end
end

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
local potion = config[item.itemid]
if not potion then
return true
end

if target.itemid ~= 1 or target.type ~= THING_TYPE_PLAYER then
return false
end

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

if potion.antidote and not antidote:execute(target, Variant(target.uid)) then
return false
end

if (potion.level and player:getLevel() < potion.level)
or (type(potion.vocations) == 'table' and not isInArray(potion.vocations, player:getVocation():getBase():getId()))
and not (player:getGroup():getId() >= 2) then
player:say(string.format('This potion can only be consumed by %s of level %d or higher.', potion.text, potion.level), TALKTYPE_MONSTER_SAY)
return true
end

if type(potion.health) == 'table' and not doTargetCombatHealth(0, target, COMBAT_HEALING, potion.health.min, potion.health.max, CONST_ME_MAGIC_BLUE) then
return false
end

if type(potion.mana) == 'table' and not doTargetCombatMana(0, target, potion.mana.min, potion.mana.max, CONST_ME_MAGIC_BLUE) then
return false
end

player:addAchievementProgress('Potion Addict', 100000)

player:addCondition(exhaust)
doCreatureSayWithRadius(target, 'Aaaah...', TALKTYPE_MONSTER_SAY, 2, 2)
local mana = math.random(13000, 15000)
if not doTargetCombatMana(0, target, mana, mana, CONST_ME_MAGIC_BLUE) then
return false
end
sendManaNumbers(player, mana)
player:addCondition(exhaust)
target:say("Aaaah...", TALKTYPE_MONSTER_SAY)

local topParent = item:getTopParent()
if topParent.isItem and (not topParent:isItem() or topParent.itemid ~= 460) then
local parent = item:getParent()
end
return true
end
make min max the same number
kek
 
make min max the same number
kek
i know it but i have more than one mana potion
And my script is not the same as posted
Solved :D
Code:
local config = {
    -- strong health potion
    [7588] = {health = {min = 375, max = 1050}, vocations = {3, 4}, text = 'paladins and knights', level = 50, emptyId = 7634},
    -- strong mana potion
    [7589] = {mana = {min = 675, max = 2250}, vocations = {1, 2}, text = 'sorcerers, druids', level = 50, emptyId = 7634},
    -- great mana potion
    [7590] = {mana = {min = 3500, max = 4500}, vocations = {1, 2}, text = 'sorcerers and druids', level = 80, emptyId = 7635},
    -- great health potion
    [7591] = {health = {min = 975, max = 2550}, vocations = {4}, text = 'knights', level = 80, emptyId = 7635},
    -- health potion
    [7618] = {health = {min = 188, max = 525}, emptyId = 7636},
    -- mana potion
    [7620] = {mana = {min = 113, max = 375}, emptyId = 7636},
    -- great spirit potion
    [8472] = {health = {min = 1500, max = 2500}, mana = {min = 800, max = 1600}, vocations = {3}, text = 'paladins', level = 130, emptyId = 7635},
    -- ultimate health potion
    [8473] = {health = {min = 3500, max = 4500}, mana = {min = 75, max = 125}, vocations = {4}, text = 'knights', level = 130, emptyId = 7635},
    -- antidote potion
    [8474] = {antidote = true, emptyId = 7636},
    -- small health potion
    [8704] = {health = {min = 90, max = 255}, emptyId = 7636}
}

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

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.

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local potion = config[item.itemid]
    if not potion then
        return true
    end

    if target.itemid ~= 1 or target.type ~= THING_TYPE_PLAYER then
        return false
    end

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

    if potion.antidote and not antidote:execute(target, Variant(target.uid)) then
        return false
    end

    if (potion.level and player:getLevel() < potion.level)
            or (type(potion.vocations) == 'table' and not isInArray(potion.vocations, player:getVocation():getBase():getId()))
            and not (player:getGroup():getId() >= 2) then
        player:say(string.format('This potion can only be consumed by %s of level %d or higher.', potion.text, potion.level), TALKTYPE_MONSTER_SAY)
        return true
    end

    if type(potion.health) == 'table' and not doTargetCombatHealth(0, target, COMBAT_HEALING, potion.health.min, potion.health.max, CONST_ME_MAGIC_BLUE) then
        return false
    end

    if type(potion.mana) == 'table' and not doTargetCombatMana(0, target, potion.mana.min, potion.mana.max, CONST_ME_MAGIC_BLUE) then
        return false
    end
    if potion.mana then
            local addMana = math.random(potion.mana.min, potion.mana.max)
            player:addMana(addMana)
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
    player:sendTextMessage(MESSAGE_HEALED, ("You gained %d mana."):format(addMana), player:getPosition(), addMana, TEXTCOLOR_BLUE)
   
               local name = player:getName()
           for _, spectator in ipairs(Game.getSpectators(player:getPosition(), false, true)) do
             if spectator ~= player then
               spectator:sendTextMessage(MESSAGE_HEALED, ("%s gained %d mana."):format(name, addMana), player:getPosition(), addMana, TEXTCOLOR_BLUE)
             end
           end
      end
 
     
     
    player:addAchievementProgress('Potion Addict', 100000)

    player:addCondition(exhaust)
    doCreatureSayWithRadius(target, 'Aaaah...', TALKTYPE_MONSTER_SAY, 2, 2)

    local topParent = item:getTopParent()
    if topParent.isItem and (not topParent:isItem() or topParent.itemid ~= 460) then
        local parent = item:getParent()
    end
    return true
end
 
Last edited:
I already implemented it for mana, but how can I make that even if it is full health it still shows how much you are healing?
 
Back
Top