• 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 Use mana potions on others.

Mestor

Active Member
Joined
Feb 1, 2009
Messages
515
Reaction score
34
Location
Sweden
Hello, looks that I cant use mana potions on others! When I press to use the mana pot on someone else it ends up that I using it on myself.

Got no idea how to fix this, so please help! ^^

TFS 1.0
10.37
 
check in your potions.lua file >_>

this line should be included,
Code:
    usableOnTarget = "yes", -- can be used on target? (fe. healing friend)
 
Seems that I dont have that line at all... and when I tried to add it I could not even use a pot "cannot use this object"


potions.lua:
Code:
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)
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(cid, item, fromPosition, itemEx, toPosition)
    if itemEx.itemid ~= 1 or itemEx.type ~= THING_TYPE_PLAYER then
        return true
    end

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

    if item.itemid == antidotePot then
        if not doCombat(cid, antidote, numberToVariant(cid)) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == smallHealthPot then
        if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 60, 85, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == healthPot then
        if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 125, 175, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == manaPot then
        if not doTargetCombatMana(0, cid, 75, 125, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == strongHealthPot then
        if(not isInArray({3,4,7,8}, player:getVocation():getId()) or player:getLevel() < 50) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by paladins and knights of level 50 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(strongEmptyPot, 1)
    elseif item.itemid == strongManaPot then
        if(not isInArray({1,2,3,5,6,7}, player:getVocation():getId()) or player:getLevel() < 50) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by sorcerers, druids and paladins of level 50 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatMana(0, cid, 115, 185, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(strongEmptyPot, 1)
    elseif item.itemid == greatSpiritPot then
        if(not isInArray({3, 7}, player:getVocation():getId()) or (player:getLevel() < 80)) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by paladins of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) or not doTargetCombatMana(0, cid, 100, 200, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == greatHealthPot then
        if(not isInArray({4, 8}, player:getVocation():getId()) or player:getLevel() < 80) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by knights of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 425, 575, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == greatManaPot then
        if(not isInArray({1,2,5,6}, player:getVocation():getId()) or player:getLevel() < 80) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by sorcerers and druids of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatMana(0, cid, 150, 250, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == ultimateHealthPot then
        if(not isInArray({4, 8}, player:getVocation():getId()) or player:getLevel() < 130) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by knights of level 130 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 650, 850, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    end


    return true
end
 
if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 125, 175, CONST_ME_MAGIC_BLUE) then
 
So, changed uid to cid there Ninja guided me to, but it still dont work!
potions.lua (Updated)
Code:
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)
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(cid, item, fromPosition, itemEx, toPosition)
    if itemEx.itemid ~= 1 or itemEx.type ~= THING_TYPE_PLAYER then
        return true
    end

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

    if item.itemid == antidotePot then
        if not doCombat(cid, antidote, numberToVariant(cid)) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == smallHealthPot then
        if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 60, 85, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == healthPot then
    if not doTargetCombatHealth(0, itemEx.cid, COMBAT_HEALING, 125, 175, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == manaPot then
        if not doTargetCombatMana(0, cid, 75, 125, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == strongHealthPot then
        if(not isInArray({3,4,7,8}, player:getVocation():getId()) or player:getLevel() < 50) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by paladins and knights of level 50 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(strongEmptyPot, 1)
    elseif item.itemid == strongManaPot then
        if(not isInArray({1,2,3,5,6,7}, player:getVocation():getId()) or player:getLevel() < 50) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by sorcerers, druids and paladins of level 50 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatMana(0, cid, 115, 185, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(strongEmptyPot, 1)
    elseif item.itemid == greatSpiritPot then
        if(not isInArray({3, 7}, player:getVocation():getId()) or (player:getLevel() < 80)) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by paladins of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) or not doTargetCombatMana(0, cid, 100, 200, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == greatHealthPot then
        if(not isInArray({4, 8}, player:getVocation():getId()) or player:getLevel() < 80) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by knights of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 425, 575, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == greatManaPot then
        if(not isInArray({1,2,5,6}, player:getVocation():getId()) or player:getLevel() < 80) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by sorcerers and druids of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatMana(0, cid, 150, 250, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == ultimateHealthPot then
        if(not isInArray({4, 8}, player:getVocation():getId()) or player:getLevel() < 130) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by knights of level 130 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 650, 850, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    end


    return true
end
 
Last edited:
Now I see that I cant use health potions too!

I get error:

Code:
Lua Script Error: [Action Interface]
data/actions/scripts/other/potions.lua:onUse
luaDoTargetCombatHealth(). Creature not found
stack traceback:
        [C]: in function 'doTargetCombatHealth'
        data/actions/scripts/other/potions.lua:54: in function <data/actions/scripts/other/potions.lua:26>
 
if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 125, 175, CONST_ME_MAGIC_BLUE) then
Yee, Techrlz it was exactly right
Change the uid for cid.

first tell him where to change it cause he does not know lua, and even i dont know, cause there is no

if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 125, 175, CONST_ME_MAGIC_BLUE) then

now if you ment change the cid in all theses similar line with uid that would make sense, you need to explain how to do something for those who dont know jack dont expect everyone to understand something as vague as that
 
Now I see that I cant use health potions too!

I get error:

Code:
Lua Script Error: [Action Interface]
data/actions/scripts/other/potions.lua:onUse
luaDoTargetCombatHealth(). Creature not found
stack traceback:
        [C]: in function 'doTargetCombatHealth'
        data/actions/scripts/other/potions.lua:54: in function <data/actions/scripts/other/potions.lua:26>

goto the old code, dont try anything they have said so far, as not even i know what they want done
 
Replace cid with itemEx.uid (in functions doTargetCombatHealth/doTargetCombatMana), it heals the player you're using the potion on instead of yourself.
 
Ok Thanks! That made me understand abit more atleast ^^

It worked! But we are not entierly done yet. Now when I am using it on the other player, he will get mana + the sparkle, but the "Aaaah..." Is still on me. It should be on the one who got mana+

potions.lua (Updated)

Code:
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)
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(cid, item, fromPosition, itemEx, toPosition)
    if itemEx.itemid ~= 1 or itemEx.type ~= THING_TYPE_PLAYER then
        return true
    end

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

    if item.itemid == antidotePot then
        if not doCombat(itemEx.uid, antidote, numberToVariant(itemEx.uid)) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == smallHealthPot then
        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 60, 85, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == healthPot then
        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 125, 175, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == manaPot then
        if not doTargetCombatMana(0, itemEx.uid, 75, 125, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == strongHealthPot then
        if(not isInArray({3,4,7,8}, player:getVocation():getId()) or player:getLevel() < 50) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by paladins and knights of level 50 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(strongEmptyPot, 1)
    elseif item.itemid == strongManaPot then
        if(not isInArray({1,2,3,5,6,7}, player:getVocation():getId()) or player:getLevel() < 50) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by sorcerers, druids and paladins of level 50 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatMana(0, itemEx.uid, 115, 185, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(strongEmptyPot, 1)
    elseif item.itemid == greatSpiritPot then
        if(not isInArray({3, 7}, player:getVocation():getId()) or (player:getLevel() < 80)) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by paladins of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) or not doTargetCombatMana(0, itemEx.uid, 100, 200, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == greatHealthPot then
        if(not isInArray({4, 8}, player:getVocation():getId()) or player:getLevel() < 80) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by knights of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 425, 575, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == greatManaPot then
        if(not isInArray({1,2,5,6}, player:getVocation():getId()) or player:getLevel() < 80) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by sorcerers and druids of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatMana(0, itemEx.uid, 150, 250, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == ultimateHealthPot then
        if(not isInArray({4, 8}, player:getVocation():getId()) or player:getLevel() < 130) and not(player:getGroup():getId() >= 2) then
            player:say("This potion can only be consumed by knights of level 130 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 650, 850, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        player:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    end


    return true
end
 
Back
Top