• 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 Bug potions with no exhausted :(

1268995

Member
Joined
Sep 9, 2010
Messages
422
Reaction score
13
Hello, my potions are with no exhausted O.O

<action itemid="7588-7591;8472-8473;7618;7620;8704;7443" event="script" value="liquids/potions.lua"/>

potions.lua (inside actions folder):

Code:
local config = {
        removeOnUse = "no",
        usableOnTarget = "yes", -- can be used on target? (fe. healing friend)
        splashable = "no",
        realAnimation = "no", -- make text effect visible only for players in range 1x1
        healthMultiplier = 2.6,
        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, 200}}, -- small health potion
        [7618] = {empty = 7636, splash = 2, health = {200, 300}}, -- health potion
        [7588] = {empty = 7634, splash = 2, health = {400, 800}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion
        [7591] = {empty = 7635, splash = 2, health = {700, 1000}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion
        [8473] = {empty = 7635, splash = 2, health = {1250, 1600}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion
        [7620] = {empty = 7636, splash = 7, mana = {300, 450}}, -- mana potion
        [7589] = {empty = 7634, splash = 7, mana = {510, 890}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
        [7590] = {empty = 7635, splash = 7, mana = {1050, 1200}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion
        [8472] = {empty = 7635, splash = 3, health = {600, 950}, mana = {430, 580}, level = 80, vocations = {3, 7}, vocStr = "paladins"}, -- great spirit potion
}
local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))
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(((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, "SkySoft..", TALKTYPE_ORANGE_1)
        else
                for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do
                        if(isPlayer(tid)) then
                                doCreatureSay(itemEx.uid, "SkySoft..", TALKTYPE_ORANGE_1, false, tid)
                        end
                end
        end
        doAddCondition(cid, exhaust)
        if(not potion.empty or config.removeOnUse) then
        doRemoveItem(item.uid, 1)
        return TRUE
        end
        doRemoveItem(item.uid, 0)
        doPlayerAddItem(cid, potion.empty, 0)
        doPlayerRemoveItem(cid, potion.empty, getPlayerItemCount(cid, potion.empty))
        doPlayerAddItem(cid, potion.empty, getPlayerItemCount(cid, potion.empty))
        return TRUE
end

Edit: in my conf.lua:

playerFollowExhaust = 2000

whats is that?
 
Last edited:
Hello, my potions are with no exhausted O.O

<action itemid="7588-7591;8472-8473;7618;7620;8704;7443" event="script" value="liquids/potions.lua"/>

potions.lua (inside actions folder):

Code:
local config = {
        removeOnUse = "no",
        usableOnTarget = "yes", -- can be used on target? (fe. healing friend)
        splashable = "no",
        realAnimation = "no", -- make text effect visible only for players in range 1x1
        healthMultiplier = 2.6,
        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, 200}}, -- small health potion
        [7618] = {empty = 7636, splash = 2, health = {200, 300}}, -- health potion
        [7588] = {empty = 7634, splash = 2, health = {400, 800}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion
        [7591] = {empty = 7635, splash = 2, health = {700, 1000}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion
        [8473] = {empty = 7635, splash = 2, health = {1250, 1600}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion
        [7620] = {empty = 7636, splash = 7, mana = {300, 450}}, -- mana potion
        [7589] = {empty = 7634, splash = 7, mana = {510, 890}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
        [7590] = {empty = 7635, splash = 7, mana = {1050, 1200}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion
        [8472] = {empty = 7635, splash = 3, health = {600, 950}, mana = {430, 580}, level = 80, vocations = {3, 7}, vocStr = "paladins"}, -- great spirit potion
}
local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))
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(((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, "SkySoft..", TALKTYPE_ORANGE_1)
        else
                for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do
                        if(isPlayer(tid)) then
                                doCreatureSay(itemEx.uid, "SkySoft..", TALKTYPE_ORANGE_1, false, tid)
                        end
                end
        end
        doAddCondition(cid, exhaust)
        if(not potion.empty or config.removeOnUse) then
        doRemoveItem(item.uid, 1)
        return TRUE
        end
        doRemoveItem(item.uid, 0)
        doPlayerAddItem(cid, potion.empty, 0)
        doPlayerRemoveItem(cid, potion.empty, getPlayerItemCount(cid, potion.empty))
        doPlayerAddItem(cid, potion.empty, getPlayerItemCount(cid, potion.empty))
        return TRUE
end

Edit: in my conf.lua:

playerFollowExhaust = 2000

whats is that?

That's because you try to set playerFollowExhaust, when the exhaust for potions is specified by config.lua variable "timeBetweenExActions", according to this line in your code:
Code:
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))
I'd recommend setting it to
Code:
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 1000)
or whatever the time you want to be the exhaust. Or just simply edit your config.lua, but it will affect all "ExActions" on your OT.

My best
 
That's because you try to set playerFollowExhaust, when the exhaust for potions is specified by config.lua variable "timeBetweenExActions", according to this line in your code:
Code:
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))
I'd recommend setting it to
Code:
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 1000)
or whatever the time you want to be the exhaust. Or just simply edit your config.lua, but it will affect all "ExActions" on your OT.

My best

Doens't work...
 
Hint:
Code:
if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
return TRUE
end

Code:
local exhaust = createConditionObject(CONDITION_EXHAUST)
 
:facepalm:
Read it, you should pretty quickly understand what the problem is.

A hint is not the solution, it's the way to the solution.
 
:facepalm:
Read it, you should pretty quickly understand what the problem is.

A hint is not the solution, it's the way to the solution.

You said right, i "should" pretty quickly understand where the problem is, but i didn't, since i am very noob and new in scripting and do not understand very clearly logic of programming... Please, help if it's possible >.< :/
 
You said right, i "should" pretty quickly understand where the problem is, but i didn't, since i am very noob and new in scripting and do not understand very clearly logic of programming... Please, help if it's possible >.< :/

It is posible, but you won't learn anything if I tell you exaclly what to do, just ask @Tarek1337

Ill make it easier then;
Code:
if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then

Code:
local exhaust = createConditionObject(CONDITION_EXHAUST)
 
Hey @Tarek1337 , pleease, help me XD

English is not my native language, its kind hard understand some explanations about the script and even about some codes .-.

Anyone who can read should be able to understand the problem.
You are going to run into alot more things if you can't understand this, read the white code above and then think.
 
Anyone who can read should be able to understand the problem.
You are going to run into alot more things if you can't understand this, read the white code above and then think.

Are u kiding me? LOL now i understood.

I defined local = (CONDITION_EXHAUST)
and was using = (CONDITION_EXHAUST_HEAL)
LOL

Solved.

I just changed this part:

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

To this:

Code:
        if(hasCondition(cid, CONDITION_EXHAUST)) then
                doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
                return TRUE
        end

And seems to worked!
 
Are u kiding me? LOL now i understood.

I defined local = (CONDITION_EXHAUST)
and was using = (CONDITION_EXHAUST_HEAL)
LOL

Solved.

I just changed this part:

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

To this:

Code:
        if(hasCondition(cid, CONDITION_EXHAUST)) then
                doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
                return TRUE
        end

And seems to worked!

And now you have learned to look at smaller things, aswell as actually read the code.
 
And now you have learned to look at smaller things, aswell as actually read the code.

You gaved me a nice lesson, but dont tell me a noob can do it. It's kind hard for newbies that are new to all of this XD (i said i'm new but not that new (joined 2010, have been seen a lot of codes))

Thanks anyway!

Problem SOLVED!
 
You said right, i "should" pretty quickly understand where the problem is, but i didn't, since i am very noob and new in scripting and do not understand very clearly logic of programming... Please, help if it's possible >.< :/

Never said you are a noob, you said it tho :p
And yes it's not easy when you start, but in the future actually take time to read the errors you get and or the code to find the problem yourself.
Otherwise you will never learn.
 
where i said:
(i said i'm new but not that new (joined 2010, have been seen a lot of codes)

read:
(i said i'm noob but not that noob (joined 2010, have been seen a lot of codes)

XD thanks anywayy
 
Back
Top