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

Solved Mana Potion/Rune--getPlayerVocation...

Doitforthegains

Well-Known Member
Joined
Aug 30, 2014
Messages
231
Reaction score
74
Hi, so I'm developing a custom ot using TFS 1.1 client 10.41, the server has all custom vocations. After changing the my vocations.xml I went into actions/others/potions and change the vocations numerical identifiers to match vocations.xml. However when I use a potion that checks playerVocation it still says (Ex.) "This potion can only be consumed by knights of level 80 or higher!". As if its taking the original script values instead of the ones I added.. Can someone fix/make me a mana potion/rune that will work with my custom vocations or tell me how to fix it?

potions.lua:
Code:
local config = {
    -- strong health potion
    [7588] = {health = {250, 350}, vocations = {3, 4, 6, 7, 8, 11, 23, 24, 26, 27, 28, 31}, text = 'rogues and warriors', level = 50, emptyId = 7634},
    -- strong mana potion
    [7589] = {mana = {115, 185}, vocations = {1, 2, 3, 6, 10, 21, 22, 23, 26, 30}, text = 'mages and rogues', level = 50, emptyId = 7634},
    -- great mana potion
    [7590] = {mana = {150, 250}, vocations = {1, 2, 10, 21, 22, 30}, text = 'mages', level = 80, emptyId = 7635},
    -- great health potion
    [7591] = {health = {425, 575}, vocations = {4, 7, 11, 24, 27, 31}, text = 'warriors', level = 80, emptyId = 7635},
    -- health potion potion
    [7618] = {health = {125, 175}, emptyId = 7636},
    -- mana potion potion
    [7620] = {mana = {75, 125}, emptyId = 7636},
    -- great spirit potion
    [8472] = {health = {250, 350}, mana = {100, 200}, vocations = {3, 6, 23, 26}, text = 'rogues', level = 80, emptyId = 7635},
    -- ultimate health potion
    [8473] = {health = {650, 850}, vocations = {4, 7, 24, 27}, text = 'warriors', level = 130, emptyId = 7635},
    -- antidote potion
    [8474] = {antidote = true, emptyId = 7636},
    -- small health potion
    [8704] = {health = {60, 85}, 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) - 100))
-- 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, itemEx, toPosition, isHotkey)
    local potion = config[item.itemid]
    if not potion then
        return true
    end

    if itemEx.itemid ~= 1 or itemEx.type ~= THING_TYPE_PLAYER then
        return true
    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(Player(itemEx.uid), Variant(itemEx.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, itemEx.uid, COMBAT_HEALING, potion.health[1], potion.health[2], CONST_ME_MAGIC_BLUE) then
        return false
    end

    if type(potion.mana) == 'table' and not doTargetCombatMana(0, itemEx.uid, potion.mana[1], potion.mana[2], CONST_ME_MAGIC_BLUE) then
        return false
    end

    local cStorage = player:getStorageValue(Storage.Achievements.PotionAddict)
    if cStorage < 100000 then
        player:setStorageValue(Storage.Achievements.PotionAddict, math.max(1, cStorage) + 1)
    elseif cStorage == 100000 then
        player:addAchievement('Potion Addict')
        player:setStorageValue(Storage.Achievements.PotionAddict, 100001)
    end

    player:addCondition(exhaust)
    doCreatureSayWithRadius(itemEx.uid, 'Aaaah...', TALKTYPE_MONSTER_SAY, 2, 2, toPosition)
    Item(item.uid):remove(1)
    if fromPosition.x == CONTAINER_POSITION then
        player:addItem(potion.emptyId, 1)
    else
        Game.createItem(potion.emptyId, 1, fromPosition)
    end
    return true
end

EDIT: So I just hi-jacked the potions.lua from TFS 1.0 and it works so far haha
 
Last edited:
Back
Top