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

TFS 1.X+ How to show mana health effect

janes123

New Member
Joined
Jun 21, 2012
Messages
100
Reaction score
4
tfs 1.3
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 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 potions = {
    [6558] = {transform = {id = {7588, 7589}}, effect = CONST_ME_DRAWBLOOD},
    [7439] = {condition = berserk, vocations = {4, 8}, effect = CONST_ME_MAGIC_RED,
            description = "Only knights may drink this potion.", text = "You feel stronger."},

    [7440] = {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] = {condition = bullseye, vocations = {3, 7}, effect = CONST_ME_MAGIC_GREEN,
            description = "Only paladins may drink this potion.", text = "You feel more accurate."},

    [7588] = {health = {250, 350}, vocations = {3, 4, 7, 8}, level = 50, flask = 7634,
            description = "Only knights and paladins of level 50 or above may drink this fluid."},

    [7589] = {mana = {115, 185}, vocations = {1, 2, 3, 5, 6, 7}, level = 50, flask = 7634,
            description = "Only sorcerers, druids and paladins of level 50 or above may drink this fluid."},

    [7590] = {mana = {150, 250}, vocations = {1, 2, 5, 6}, level = 80, flask = 7635,
            description = "Only druids and sorcerers of level 80 or above may drink this fluid."},

    [7591] = {health = {425, 575}, vocations = {4, 8}, 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 = {3, 7}, level = 80, flask = 7635,
            description = "Only paladins of level 80 or above may drink this fluid."},

    [8473] = {health = {650, 850}, vocations = {4, 8}, 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 = {1, 2, 5, 6}, 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 = {3, 7}, level = 130, flask = 7635,
            description = "Only paladins of level 130 or above may drink this fluid."},

    [26031] = {health = {875, 1125}, vocations = {4, 8}, 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 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.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

        target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        -- player:addItem(potion.flask, 1)
    end

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

    if potion.transform then
        item:transform(potion.transform.id[math.random(#potion.transform.id)])
        item:getPosition():sendMagicEffect(potion.effect)
        return true
    end

    item:remove(1)
    return true
end
 
it should help if you make it clear with a description with what you want to make dude.
if you just want to show how much life/mana each potion is healing, you can add doSendAnimatedText(pos, text, color[, player]) and show the value you want
 
it should help if you make it clear with a description with what you want to make dude.
if you just want to show how much life/mana each potion is healing, you can add doSendAnimatedText(pos, text, color[, player]) and show the value you want
C++:
/**
* The Forgotten Server - a free and open-source MMORPG server emulator
* Copyright (C) 2017  Mark Samman <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#ifndef FS_CONFIGMANAGER_H_6BDD23BD0B8344F4B7C40E8BE6AF6F39
#define FS_CONFIGMANAGER_H_6BDD23BD0B8344F4B7C40E8BE6AF6F39

class ConfigManager
{
    public:
        enum boolean_config_t {
            ALLOW_CHANGEOUTFIT,
            ONE_PLAYER_ON_ACCOUNT,
            AIMBOT_HOTKEY_ENABLED,
            REMOVE_RUNE_CHARGES,
            EXPERIENCE_FROM_PLAYERS,
            FREE_PREMIUM,
            REPLACE_KICK_ON_LOGIN,
            ALLOW_CLONES,doSendAnimatedText
            BIND_ONLY_GLOBAL_ADDRESS,
            OPTIMIZE_DATABASE,
            MARKET_PREMIUM,
            EMOTE_SPELLS,
            STAMINA_SYSTEM,
            WARN_UNSAFE_SCRIPTS,
            CONVERT_UNSAFE_SCRIPTS,
            CLASSIC_EQUIPMENT_SLOTS,

            LAST_BOOLEAN_CONFIG /* this must be the last one */
        };

        enum string_config_t {
            MAP_NAME,
            HOUSE_RENT_PERIOD,
            SERVER_NAME,
            OWNER_NAME,
            OWNER_EMAIL,
            URL,
            LOCATION,
            IP,
            MOTD,
            WORLD_TYPE,
            MYSQL_HOST,
            MYSQL_USER,
            MYSQL_PASS,
            MYSQL_DB,
            MYSQL_SOCK,
            DEFAULT_PRIORITY,
            MAP_AUTHOR,

            LAST_STRING_CONFIG /* this must be the last one */
        };

        enum integer_config_t {
            SQL_PORT,
            MAX_PLAYERS,
            PZ_LOCKED,
            DEFAULT_DESPAWNRANGE,
            DEFAULT_DESPAWNRADIUS,
            RATE_EXPERIENCE,
            RATE_SKILL,
            RATE_LOOT,
            RATE_MAGIC,
            RATE_SPAWN,
            HOUSE_PRICE,
            KILLS_TO_RED,
            KILLS_TO_BLACK,
            MAX_MESSAGEBUFFER,
            ACTIONS_DELAY_INTERVAL,
            EX_ACTIONS_DELAY_INTERVAL,
            KICK_AFTER_MINUTES,
            PROTECTION_LEVEL,
            DEATH_LOSE_PERCENT,
            STATUSQUERY_TIMEOUT,
            FRAG_TIME,
            WHITE_SKULL_TIME,
            GAME_PORT,
            LOGIN_PORT,
            STATUS_PORT,
            STAIRHOP_DELAY,
            MARKET_OFFER_DURATION,
            CHECK_EXPIRED_MARKET_OFFERS_EACH_MINUTES,
            MAX_MARKET_OFFERS_AT_A_TIME_PER_PLAYER,
            EXP_FROM_PLAYERS_LEVEL_RANGE,
            MAX_PACKETS_PER_SECOND,

            LAST_INTEGER_CONFIG /* this must be the last one */
        };

        bool load();
        bool reload();

        const std::string& getString(string_config_t what) const;
        int32_t getNumber(integer_config_t what) const;
        bool getBoolean(boolean_config_t what) const;

    private:
        std::string string[LAST_STRING_CONFIG] = {};
        int32_t integer[LAST_INTEGER_CONFIG] = {};
        bool boolean[LAST_BOOLEAN_CONFIG] = {};

        bool loaded = false;
};

#endif
This is me configmanager.h
 
Back
Top