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

Lua Why this potion ends?

Zoool

New Member
Joined
Jul 18, 2014
Messages
163
Reaction score
2
Why does this potion ends? i dont want it to end =d

Code:
local MIN = 750
local MAX = 900
local EMPTY_POTION = 7635

local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if isPlayer(itemEx.uid) == FALSE then
        return FALSE
    end

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

    if((not(isKnight(itemEx.uid)) or getPlayerLevel(itemEx.uid) < 80) and getPlayerCustomFlagValue(itemEx.uid, PlayerCustomFlag_GamemasterPrivileges) == FALSE) then
        doCreatureSay(itemEx.uid, "Only knights of level 80 or above may drink this fluid.", TALKTYPE_ORANGE_1)
        return TRUE
    end

    if doCreatureAddHealth(itemEx.uid, math.random(MIN, MAX)) == LUA_ERROR then
        return FALSE
    end
 
    doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE)
    doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1)
    doTransformItem(item.uid, EMPTY_POTION)
    doRemoveItem(item.uid, 7635)
    return TRUE
end


Potions.lua
Code:
local config = {
    removeOnUse = "yes",
    usableOnTarget = "yes", -- can be used on target? (fe. healing friend)
    splashable = "no",
    realAnimation = "yes", -- make text effect visible only for players in range 1x1
    maxRange = 1, -- 0 to disable
    healthMultiplier = 1.0,
    manaMultiplier = 1.0
}

config.removeOnUse = getBooleanFromString(config.removeOnUse)
config.usableOnTarget = getBooleanFromString(config.usableOnTarget)
config.splashable = getBooleanFromString(config.splashable)
config.realAnimation = getBooleanFromString(config.realAnimation)

local POTIONS = {
    [8704] = {empty = 7636, splash = 2, health = {150, 230}}, -- small health potion
    [7618] = {empty = 7636, splash = 2, health = {220, 350}}, -- health potion
    [7588] = {empty = 7634, splash = 2, health = {410, 570}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion
    [7591] = {empty = 7635, splash = 2, health = {580, 750}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion
    [8473] = {empty = 7635, splash = 2, health = {870, 940}, level = 150, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion

    [7620] = {empty = 7636, splash = 7, mana = {101, 130}}, -- mana potion
    [7589] = {empty = 7634, splash = 7, mana = {160, 205}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
    [7590] = {empty = 7635, splash = 7, mana = {385, 420}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion

    [8472] = {empty = 7635, splash = 3, health = {225, 275}, mana = {150, 175}, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion
}

local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 10))

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local potion = POTIONS[item.itemid]
    if(not potion) then
        return false
    end

    if(not isPlayer(itemEx.uid) or (not config.usableOnTarget and cid ~= itemEx.uid)) then
        if(not config.splashable) then
            return false
        end

        if(toPosition.x == CONTAINER_POSITION) then
            toPosition = getThingPos(item.uid)
        end

        doDecayItem(doCreateItem(2016, potion.splash, toPosition))
        doTransformItem(item.uid, potion.empty)
        return true
    end

    if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then
        doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
        return true
    end

    if(config.maxRange > 0 and cid ~= itemEx.uid and getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(itemEx.uid)) > config.maxRange) then
        return false
    end

    if(((potion.level and getPlayerLevel(cid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(cid)))) and
        not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES))
    then
        doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1)
        return true
    end

    local health = potion.health
    if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(health[1], health[2]) * config.healthMultiplier))) then
        return false
    end

    local mana = potion.mana
    if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(mana[1], mana[2]) * config.manaMultiplier))) then
        return false
    end

    doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE)
    if(not realAnimation) then
        doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1)
    else
        for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do
            if(isPlayer(tid)) then
                doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid)
            end
        end
    end

    doAddCondition(cid, exhaust)
   
    local v = getItemParent(item.uid)
    doChangeTypeItem(item.uid, item.type - 1)
   
    if(not potion.empty or config.removeOnUse) then
        return true
    end

    if v.uid == 0 then
        local hack
        if fromPosition.y == CONST_SLOT_LEFT and getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid == 0 then
            hack = doPlayerAddItem(cid, 2148, 1)
        end
        doPlayerAddItem(cid, potion.empty, 1)
        if hack then
            doRemoveItem(hack)
        end
        return true
    end

    local size = getContainerSize(v.uid)
    for i = 0, size-1 do
        local tmp = getContainerItem(v.uid, i)
        if tmp.itemid == potion.empty and tmp.type < 100 then
            return getPlayerFreeCap(cid) >= getItemInfo(potion.empty).weight and doChangeTypeItem(tmp.uid, tmp.type + 1) or doPlayerAddItem(cid, potion.empty, 1)
        end
    end

    if getContainerSize(v.uid) < getContainerCap(v.uid) then
        doAddContainerItem(v.uid, potion.empty)
    else
        doPlayerAddItem(cid, potion.empty, 1)
    end

    doTransformItem(item.uid, potion.empty)
    return true
end
 
Last edited:
Probably because:

doTransformItem(item.uid, EMPTY_POTION)
doRemoveItem(item.uid, 7635)

but I'm not an expert.
 
Code:
local MIN = 750
local MAX = 900
local EMPTY_POTION = 7635

local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if isPlayer(itemEx.uid) == FALSE then
        return FALSE
    end

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

    if((not(isKnight(itemEx.uid)) or getPlayerLevel(itemEx.uid) < 80) and getPlayerCustomFlagValue(itemEx.uid, PlayerCustomFlag_GamemasterPrivileges) == FALSE) then
        doCreatureSay(itemEx.uid, "Only knights of level 80 or above may drink this fluid.", TALKTYPE_ORANGE_1)
        return TRUE
    end

    if doCreatureAddHealth(itemEx.uid, math.random(MIN, MAX)) == LUA_ERROR then
        return FALSE
    end
  
    doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE)
    doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1)
    return TRUE
end
 
<!-- Potions -->
<action itemid="7588-7591;8472-8473;7618;7620;8704" event="script" value="liquids/potions.lua" allowfaruse="1"/>
<action itemid="7439" event="script" value="liquids/berserk_potion.lua" allowfaruse="1"/>
<action itemid="7440" event="script" value="liquids/mastermind_potion.lua" allowfaruse="1"/>
<action itemid="7443" event="script" value="liquids/bullseye_potion.lua" allowfaruse="1"/>
<action itemid="8474" event="script" value="liquids/antidote_potion.lua" allowfaruse="1"/>

line 3; removeOnUse = "yes",
line 3; removeOnUse = "no" ????
its for vials... if i click no potion will be used and leaving vials
 
<!-- Potions -->
<action itemid="7588-7591;8472-8473;7618;7620;8704" event="script" value="liquids/potions.lua" allowfaruse="1"/>
<action itemid="7439" event="script" value="liquids/berserk_potion.lua" allowfaruse="1"/>
<action itemid="7440" event="script" value="liquids/mastermind_potion.lua" allowfaruse="1"/>
<action itemid="7443" event="script" value="liquids/bullseye_potion.lua" allowfaruse="1"/>
<action itemid="8474" event="script" value="liquids/antidote_potion.lua" allowfaruse="1"/>


its for vials... if i click no potion will be used and leaving vials

And what potion is the first script for? It seems like it is not in use at all here. My guess is that the potion you use is associated with potions.lua, not the first script you posted.
 
Try to do these changes;

Remove these lines
Lua:
doTransformItem(item.uid, EMPTY_POTION)
doRemoveItem(item.uid, 7635)

Then in the config, change removeOnUse to no or false

Also remove these 2 lines;
Lua:
doTransformItem(item.uid, potion.empty)
Lua:
doRemoveItem(hack)
 
Still not.
in config i have no "removeOnUse"
but i have this like this:
removeWeaponAmmunition = false
removeWeaponCharges = false
removeRuneCharges = false
 
Okay, I understand that you want to create new health potion, but what item Id does it use? Like I told you already, my guess is this potion of yours uses potions.lua, not your custom script and potions.lua remove charges. That would also be consistent with what you're saying about removing parts of your custom script with no effect.
 
Ok, so you use potions.lua for these potions that should not end? Second script from your original post? And you want all these potions to never end?

Can you replace your potions.lua with this?
Lua:
local config = {
    usableOnTarget = "yes", -- can be used on target? (fe. healing friend)
    splashable = "no",
    realAnimation = "yes", -- make text effect visible only for players in range 1x1
    maxRange = 1, -- 0 to disable
    healthMultiplier = 1.0,
    manaMultiplier = 1.0
}
config.usableOnTarget = getBooleanFromString(config.usableOnTarget)
config.splashable = getBooleanFromString(config.splashable)
config.realAnimation = getBooleanFromString(config.realAnimation)
local POTIONS = {
    [8704] = {empty = 7636, splash = 2, health = {150, 230}}, -- small health potion
    [7618] = {empty = 7636, splash = 2, health = {220, 350}}, -- health potion
    [7588] = {empty = 7634, splash = 2, health = {410, 570}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion
    [7591] = {empty = 7635, splash = 2, health = {580, 750}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion
    [8473] = {empty = 7635, splash = 2, health = {870, 940}, level = 150, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion
    [7620] = {empty = 7636, splash = 7, mana = {101, 130}}, -- mana potion
    [7589] = {empty = 7634, splash = 7, mana = {160, 205}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
    [7590] = {empty = 7635, splash = 7, mana = {385, 420}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion
    [8472] = {empty = 7635, splash = 3, health = {225, 275}, mana = {150, 175}, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion
}
local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 10))
function onUse(cid, item, fromPosition, itemEx, toPosition)
    local potion = POTIONS[item.itemid]
    if(not potion) then
        return false
    end
    if(not isPlayer(itemEx.uid) or (not config.usableOnTarget and cid ~= itemEx.uid)) then
        if(not config.splashable) then
            return false
        end
        if(toPosition.x == CONTAINER_POSITION) then
            toPosition = getThingPos(item.uid)
        end
        doDecayItem(doCreateItem(2016, potion.splash, toPosition))
        return true
    end
    if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then
        doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
        return true
    end
    if(config.maxRange > 0 and cid ~= itemEx.uid and getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(itemEx.uid)) > config.maxRange) then
        return false
    end
    if(((potion.level and getPlayerLevel(cid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(cid)))) and
        not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES))
    then
        doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1)
        return true
    end
    local health = potion.health
    if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(health[1], health[2]) * config.healthMultiplier))) then
        return false
    end
    local mana = potion.mana
    if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(mana[1], mana[2]) * config.manaMultiplier))) then
        return false
    end
    doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE)
    if(not realAnimation) then
        doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1)
    else
        for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do
            if(isPlayer(tid)) then
                doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid)
            end
        end
    end
    doAddCondition(cid, exhaust)
  
    return true
end

Just make sure to make a backup of your potions.lua before, because I have no means to test it and I didn't :)
 
Last edited:
That works. Thanks man!
Can you tell me what did you do ;p?

Yes, sure. But you could also infer this by comparing your potions.lua with mine potions.lua. Basically I removed all parts responsible for transforming potion item to empty vial and all parts that would act on this new empty vial (stacking empty vials, etc.).
 
Back
Top