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

Potions that heals % of your hp

Simoria

Hola at me
Joined
May 3, 2012
Messages
447
Reaction score
10
Location
Sweden
Hello.

Anyone here who can help me ?

I want the orginal Potions that heals with % of hes own healt/mana.

anyone that can fix this for me ?

My Potion..lua

Code:
local config = {
    removeOnUse = "no",
    splashable = "no",
    realAnimation = "no", -- make text effect visible only for players in range 1x1
    healthMultiplier = 1.0,
    manaMultiplier = 1.0
}

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

local POTIONS = {
    [8704] = {empty = 7636, splash = 2, health = {50, 100}}, -- small health potion
    [7618] = {empty = 7636, splash = 2, health = {100, 200}}, -- health potion
    [7489] = {empty = 7489, splash = 2, health = {1300, 1500}, level = 0, vocations = {3, 4, 7, 8, 12, 11}, vocStr = "knights and paladins"}, -- donation health potion
        [7588] = {empty = 7634, splash = 2, health = {200, 400}, level = 50, vocations = {3, 4, 7, 8, 12, 11}, vocStr = "knights and paladins"}, -- strong health potion
    [7591] = {empty = 7635, splash = 2, health = {500, 700}, level = 80, vocations = {4, 8, 12}, vocStr = "knights"}, -- great health potion
    [8473] = {empty = 7635, splash = 2, health = {1200, 1400}, level = 130, vocations = {4, 8, 12}, vocStr = "knights"}, -- ultimate health potion

    [7620] = {empty = 7636, splash = 7, mana = {70, 130}}, -- mana potion
    [7589] = {empty = 7634, splash = 7, mana = {110, 190}, level = 50, vocations = {1, 2, 3, 5, 6, 7, 9, 10, 11}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
    [7590] = {empty = 7635, splash = 7, mana = {200, 300}, level = 80, vocations = {1, 2, 5, 6, 9, 10}, vocStr = "sorcerers and druids"}, -- great mana potion

    [8472] = {empty = 7635, splash = 3, health = {200, 400}, mana = {110, 190}, level = 80, vocations = {3, 7, 11}, 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)) 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, "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)
    if(not potion.empty or config.removeOnUse) then
        doRemoveItem(item.uid)
        return true
    end

local aidd =
{
  min = 10901,
   max = 10911
    }
     if item.actionid < aidd.min then
      doItemSetAttribute(item.uid, "actionid", aidd.min)
       elseif item.actionid >= aidd.min and item.actionid <= aidd.max then
      doItemSetAttribute(item.uid, "actionid", getItemAttribute(item.uid, "actionid")+1)
     elseif item.actionid >= aidd.max then
    doTransformItem(item.uid, potion.empty)
   return TRUE
  end
return true
end
 
The original one or with your edits?
Code:
local config = {
     removeOnUse = "yes",
     usableOnTarget = "yes", 
     splashable = "no",
     realAnimation = "no", 
     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 = {3, 5}}, -- small health potion
     [7618] = {empty = 7636, splash = 2, health = {5, 10}}, -- health potion
     [7588] = {empty = 7634, splash = 2, health = {15, 20}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion
     [7591] = {empty = 7635, splash = 2, health = {25, 30}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion
     [8473] = {empty = 7635, splash = 2, health = {30, 40}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion
     [7620] = {empty = 7636, splash = 7, mana = {5, 10}}, -- mana potion
     [7589] = {empty = 7634, splash = 7, mana = {10, 15}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
     [7590] = {empty = 7635, splash = 7, mana = {15, 20}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion
     [8472] = {empty = 7635, splash = 3, health = {25, 30}, mana = {10, 15}, 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
     local healthmax = getCreatureMaxHealth(cid)
     if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(healthmax * (mana[1]/100), healthmax * (mana[2]/100)) * config.healthMultiplier))) then
         return false
     end

     local mana = potion.mana
     local manamax = getPlayerMaxMana(cid)
     if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(manamax * (mana[1]/100), manamax * (mana[2]/100)) * 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)
     if(not potion.empty or config.removeOnUse) then
         doRemoveItem(item.uid, 1)
         return true
     end 
     if(fromPosition.x == CONTAINER_POSITION) then
         doRemoveItem(item.uid, 1)
     else   
         doCreateItem(potion.empty, 1, getThingPos(item.uid))
         doRemoveItem(item.uid, 1)     
     end
     return true
end
If you want with your edits you can change that last part.
 
The original one or with your edits?
Code:
local config = {
     removeOnUse = "yes",
     usableOnTarget = "yes",
     splashable = "no",
     realAnimation = "no",
     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 = {3, 5}}, -- small health potion
     [7618] = {empty = 7636, splash = 2, health = {5, 10}}, -- health potion
     [7588] = {empty = 7634, splash = 2, health = {15, 20}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion
     [7591] = {empty = 7635, splash = 2, health = {25, 30}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion
     [8473] = {empty = 7635, splash = 2, health = {30, 40}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion
     [7620] = {empty = 7636, splash = 7, mana = {5, 10}}, -- mana potion
     [7589] = {empty = 7634, splash = 7, mana = {10, 15}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
     [7590] = {empty = 7635, splash = 7, mana = {15, 20}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion
     [8472] = {empty = 7635, splash = 3, health = {25, 30}, mana = {10, 15}, 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
     local healthmax = getCreatureMaxHealth(cid)
     if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(healthmax * (mana[1]/100), healthmax * (mana[2]/100)) * config.healthMultiplier))) then
         return false
     end

     local mana = potion.mana
     local manamax = getPlayerMaxMana(cid)
     if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(manamax * (mana[1]/100), manamax * (mana[2]/100)) * 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)
     if(not potion.empty or config.removeOnUse) then
         doRemoveItem(item.uid, 1)
         return true
     end
     if(fromPosition.x == CONTAINER_POSITION) then
         doRemoveItem(item.uid, 1)
     else  
         doCreateItem(potion.empty, 1, getThingPos(item.uid))
         doRemoveItem(item.uid, 1)    
     end
     return true
end
If you want with your edits you can change that last part.


Thanks limos :)
 
Back
Top