• 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 Custom potion? ID: 9734 / 10926

Westbay

New Member
Joined
Mar 6, 2018
Messages
27
Reaction score
3
I can not get my 2 custom donation potions to work, I have added them in items.xml as well as actions.xml, any suggestions? As of now they can not be right clicked so i get the target icon on, nor do they give me any mana / hp.

Lua:
local config = {
    removeOnUse = "no",
    usableOnTarget = "yes", -- can be used on target? (fe. healing friend)
    splashable = "no",
    range = -1,
    area = {1, 1} -- if not set correctly, the message will be sent only to user of the item
}
local multiplier = {
    health = 1.0,
    mana = 1.0
}
local POTIONS = {
    [8704] = {empty = 7636, splash = 42, health = {50, 100}}, -- small health potion
    [7618] = {empty = 7636, splash = 42, health = {100, 200}}, -- health potion
    [7588] = {empty = 7634, splash = 42, health = {200, 400}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion
    [7591] = {empty = 7635, splash = 42, health = {500, 700}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion
    [8473] = {empty = 7635, splash = 42, health = {800, 1000}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion
    [9734] = {empty = 2006, splash = 42, health = {1100, 1300}, level = 8, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion
    [7620] = {empty = 7636, splash = 47, mana = {70, 130}}, -- mana potion
    [7589] = {empty = 7634, splash = 47, mana = {110, 190}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
    [7590] = {empty = 7635, splash = 47, mana = {200, 300}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion
    [10926] = {empty = 2006, splash = 47, mana = {650, 750}, level = 8, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- donation mana potion
    [8472] = {empty = 7635, splash = 43, health = {200, 400}, mana = {110, 190}, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion
}
for index, potion in pairs(POTIONS) do
    if(type(index) == 'number')then
        for k, v in pairs(config) do
            if(not potion[k]) then
                potion[k] = v
            end
        end
        if(potion.removeOnUse) then
            potion.removeOnUse = getBooleanFromString(potion.removeOnUse)
        end
        if(potion.usableOnTarget) then
            potion.usableOnTarget = getBooleanFromString(potion.usableOnTarget)
        end
        if(potion.splashable) then
            potion.splashable = getBooleanFromString(potion.splashable)
        end
        if(type(potion.health) == 'table' and table.maxn(potion.health) > 1) then
            potion.health[1] = math.ceil(potion.health[1] * multiplier.health)
            potion.health[2] = math.ceil(potion.health[2] * multiplier.health)
        else
            potion.health = nil
        end
        if(type(potion.mana) == 'table' and table.maxn(potion.mana) > 1) then
            potion.mana[1] = math.ceil(potion.mana[1] * multiplier.mana)
            potion.mana[2] = math.ceil(potion.mana[2] * multiplier.mana)
        else
            potion.mana = nil
        end
        POTIONS[index] = potion
    end
end
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 potion.usableOnTarget and cid ~= itemEx.uid)) then
        if(not potion.splashable or not potion.splash) then
            return false
        end
        if(toPosition.x == CONTAINER_POSITION) then
            toPosition = getThingPosition(item.uid)
        end
        doDecayItem(doCreateItem(POOL, potion.splash, toPosition))
        doRemoveItem(item.uid, 1)
        if(not potion.empty or potion.removeOnUse) then
            return true
        end
        if(fromPosition.x ~= CONTAINER_POSITION) then
            doCreateItem(potion.empty, fromPosition)
        else
            doPlayerAddItem(cid, potion.empty, 1)
        end
        return true
    end
    if(((potion.level and getPlayerLevel(itemEx.uid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(itemEx.uid)))) 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_MONSTER, false, cid)
        return true
    end
    if(potion.range > 0 and cid ~= itemEx.uid and getDistanceBetween(getThingPosition(cid), getThingPosition(itemEx.uid)) > potion.range and not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_CANUSEFAR)) then
        doPlayerSendDefaultCancel(cid, RETURNVALUE_TOOFARAWAY)
        return true
    end
    if(potion.health and not doTargetCombatHealth(cid, itemEx.uid, COMBAT_HEALING, potion.health[1], potion.health[2], CONST_ME_MAGIC_BLUE, false)) then
        return false
    end
    if(potion.mana and not doTargetCombatMana(cid, itemEx.uid, potion.mana[1], potion.mana[2], CONST_ME_MAGIC_BLUE, false)) then
        return false
    end
    if(type(potion.area) == 'table' and table.maxn(potion.area) > 1) then
        for i, tid in ipairs(getSpectators(getThingPosition(itemEx.uid), potion.area[1], potion.area[2])) do
            if(isPlayer(tid)) then
                doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_MONSTER, false, tid)
            end
        end
    else
        doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_MONSTER, false, itemEx.uid)
        if(itemEx.uid ~= cid) then
            doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_MONSTER, false, cid)
        end
    end
    doRemoveItem(item.uid, 1)
    if(not potion.empty or potion.removeOnUse) then
        return true
    end
    if(fromPosition.x ~= CONTAINER_POSITION) then
        doCreateItem(potion.empty, fromPosition)
    else
        doPlayerAddItem(cid, potion.empty, 1)
    end
    return true
end

--------------------------------------------------------------------------------------------------------

in actions.xml

XML:
<action itemid="7588-7591;8472-8473;7618;7620;8704;9734;10926" event="script" value="liquids/potions.lua"/>
 
Last edited by a moderator:
Solution
How to display CODE properly in your post
i've gone ahead and fixed your post for you. for future refence if you're posting code, refer to that link above, since it's a part of the support board rules
7. Scripts without code/php tags:
- Whenever posting code, you are required to post it in code tags (or php tags for php scripts).
Read about it HERE.
- Using code tags is a requirement. Without them the scripts are to hard to read, could take an unnecessary amount of space and could change because of smileys and other forum features.
- If your error or the code you wish to post is too long you can post links to pastebin.com

as for your question: if you aren't getting the crosshairs from your potions...
How to display CODE properly in your post
i've gone ahead and fixed your post for you. for future refence if you're posting code, refer to that link above, since it's a part of the support board rules
7. Scripts without code/php tags:
- Whenever posting code, you are required to post it in code tags (or php tags for php scripts).
Read about it HERE.
- Using code tags is a requirement. Without them the scripts are to hard to read, could take an unnecessary amount of space and could change because of smileys and other forum features.
- If your error or the code you wish to post is too long you can post links to pastebin.com

as for your question: if you aren't getting the crosshairs from your potions you need to either use a potion id that does have crosshairs or you need to edit the items.otb and include the flag which allows crosshairs on your potion ids (this will make your client "customized" in a way, players will have to use your items.otb instead of theirs and have to download your client)
 
Solution
I see, thank you very much! Sorry for the code tag. How can I get the potions to not disappear when using this code?

Is it also possible to make an item stackable which is not from the beginning?
 
I see, thank you very much! Sorry for the code tag. How can I get the potions to not disappear when using this code?

Is it also possible to make an item stackable which is not from the beginning?
stackable is also a property in items.otb, if you want your item to be stackable you need to edit the items.otb
to make the item not disappear, you need to remove doRemoveItem(item.uid, 1)
 
Back
Top