• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

Strong healing potion problem on use!

Batalj

Member
Joined
May 26, 2017
Messages
53
Solutions
1
Reaction score
14
Hello! When I use Strong Healing Potion on my Character ingame it gives an messege in console that is:

Lua Script Error: [Action Interface]
data/actions/scripts/other/potions.lua:onUse
data/actions/scripts/other/potions.lua:69: attempt to call global 'isKnight' (a nil value)
stack traceback:
[C]: in function 'isKnight'
data/actions/scripts/other/potions.lua:69: in function <data/actions/scripts/other/potions.lua:26>

I have been trying to look around for a way to make this work, also playing around with the 'isKnight' value. This is the script itself.

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 = createCombatObject()
setCombatParam(antidote, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(antidote, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(antidote, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(antidote, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(antidote, COMBAT_PARAM_DISPEL, CONDITION_POISON)

local exhaust = createConditionObject(CONDITION_EXHAUST_HEAL)
setConditionParam(exhaust, 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

    if(getCreatureCondition(cid, CONDITION_EXHAUST_HEAL) == TRUE) then
        doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
        return TRUE
    end

    if(item.itemid == antidotePot) then
        if(doCombat(cid, antidote, numberToVariant(cid)) == LUA_ERROR) then
            return FALSE
        end
        doAddCondition(cid, exhaust)
        doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
        doRemoveItem(item.uid, 1)
        doPlayerAddItem(cid, emptyPot, 1)
    elseif(item.itemid == smallHealthPot) then
        if(doTargetCombatHealth(0, cid, COMBAT_HEALING, 60, 85, CONST_ME_MAGIC_BLUE) == LUA_ERROR) then
            return FALSE
        end
        doAddCondition(cid, exhaust)
        doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
        doRemoveItem(item.uid, 1)
        doPlayerAddItem(cid, emptyPot, 1)
    elseif(item.itemid == healthPot) then
        if(doTargetCombatHealth(0, cid, COMBAT_HEALING, 125, 175, CONST_ME_MAGIC_BLUE) == LUA_ERROR) then
            return FALSE
        end
        doAddCondition(cid, exhaust)
        doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
        doRemoveItem(item.uid, 1)
        doPlayerAddItem(cid, emptyPot, 1)
    elseif(item.itemid == manaPot) then
        if(doTargetCombatMana(0, cid, 100, 200, CONST_ME_MAGIC_BLUE) == LUA_ERROR) then
            return FALSE
        end
        doAddCondition(cid, exhaust)
        doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
        doRemoveItem(item.uid, 1)
        doPlayerAddItem(cid, emptyPot, 1)
    elseif(item.itemid == strongHealthPot) then
        if(not (isKnight(cid) or isPaladin(cid)) or (getPlayerLevel(cid) < 50)) and not(getPlayerGroupId(cid) >= 2) then
            doCreatureSay(cid, "This potion can only be consumed by paladins and knights of level 50 or higher.", TALKTYPE_ORANGE_1)
            return TRUE
        end

        if(doTargetCombatHealth(0, cid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) == LUA_ERROR) then
            return FALSE
        end
        doAddCondition(cid, exhaust)
        doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
        doRemoveItem(item.uid, 1)
        doPlayerAddItem(cid, strongEmptyPot, 1)
    elseif(item.itemid == strongManaPot) then
        if(not(isSorcerer(cid) or isDruid(cid) or isPaladin(cid)) or (getPlayerLevel(cid) < 50)) and not(getPlayerGroupId(cid) >= 2) then
            doCreatureSay(cid, "This potion can only be consumed by sorcerers, druids and paladins of level 50 or higher.", TALKTYPE_ORANGE_1)
            return TRUE
        end

        if(doTargetCombatMana(0, cid, 200, 350, CONST_ME_MAGIC_BLUE) == LUA_ERROR) then
            return FALSE
        end
        doAddCondition(cid, exhaust)
        doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
        doRemoveItem(item.uid, 1)
        doPlayerAddItem(cid, strongEmptyPot, 1)
    elseif(item.itemid == greatSpiritPot) then
        if(not(isPaladin(cid)) or (getPlayerLevel(cid) < 80)) and not(getPlayerGroupId(cid) >= 2) then
            doCreatureSay(cid, "This potion can only be consumed by paladins of level 80 or higher.", TALKTYPE_ORANGE_1)
            return TRUE
        end

        if(doTargetCombatHealth(0, cid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) == LUA_ERROR or doTargetCombatMana(0, cid, 250, 350, CONST_ME_MAGIC_BLUE) == LUA_ERROR) then
            return FALSE
        end
        doAddCondition(cid, exhaust)
        doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
        doRemoveItem(item.uid, 1)
        doPlayerAddItem(cid, greatEmptyPot, 1)
    elseif(item.itemid == greatHealthPot) then
        if(not(isKnight(cid)) or (getPlayerLevel(cid) < 80)) and not(getPlayerGroupId(cid) >= 2) then
            doCreatureSay(cid, "This potion can only be consumed by knights of level 80 or higher.", TALKTYPE_ORANGE_1)
            return TRUE
        end

        if(doTargetCombatHealth(0, cid, COMBAT_HEALING, 425, 575, CONST_ME_MAGIC_BLUE) == LUA_ERROR) then
            return FALSE
        end
        doAddCondition(cid, exhaust)
        doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
        doRemoveItem(item.uid, 1)
        doPlayerAddItem(cid, greatEmptyPot, 1)
    elseif(item.itemid == greatManaPot) then
        if(not(isSorcerer(cid) or isDruid(cid)) or (getPlayerLevel(cid) < 80)) and not(getPlayerGroupId(cid) >= 2) then
            doCreatureSay(cid, "This potion can only be consumed by sorcerers and druids of level 80 or higher.", TALKTYPE_ORANGE_1)
            return TRUE
        end

        if(doTargetCombatMana(0, cid, 350, 500, CONST_ME_MAGIC_BLUE) == LUA_ERROR) then
            return FALSE
        end
        doAddCondition(cid, exhaust)
        doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
        doRemoveItem(item.uid, 1)
        doPlayerAddItem(cid, greatEmptyPot, 1)
    elseif(item.itemid == ultimateHealthPot) then
        if(not(isKnight(cid)) or (getPlayerLevel(cid) < 130)) and not(getPlayerGroupId(cid) >= 2) then
            doCreatureSay(cid, "This potion can only be consumed by knights of level 130 or higher.", TALKTYPE_ORANGE_1)
            return TRUE
        end

        if(doTargetCombatHealth(0, cid, COMBAT_HEALING, 650, 850, CONST_ME_MAGIC_BLUE) == LUA_ERROR) then
            return FALSE
        end
        doAddCondition(cid, exhaust)
        doCreatureSay(cid, "Aaaah...", TALKTYPE_ORANGE_1)
        doRemoveItem(item.uid, 1)
        doPlayerAddItem(cid, greatEmptyPot, 1)
    end
    return TRUE
end
 
check your global.lua.

if(not(isKnight(cid)) or (getPlayerLevel(cid) < 130)) and not(getPlayerGroupId(cid) >= 2) then

if not player get voc 4 or 8 <
 
put this somewhere in your lib
LUA:
function isKnight(cid)
    return isInArray({4, 8}, getPlayerVocation(cid))
end
 
Last edited:
Got it to work! Thanks alot guys for a fast reply! Used the wrong Tfs verision of potions.lua.
 
Last edited:
Back
Top