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

Greedy drinker. Need help!

Mestor

Active Member
Joined
Feb 1, 2009
Messages
515
Reaction score
34
Location
Sweden
Hello, just realized that when I am using potions I am using 2 at the same time instead of 1...

example: I got 50 mana/health potions, pressing them to use 1 time... he drinks 2 and I got 48 left...


I dont understand so much lua, so would be really happy if someone could help me out!

Potions.lua:
Code:
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 = Combat()
antidote:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
antidote:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
antidote:setParameter(COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
antidote:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
antidote:setParameter(COMBAT_PARAM_DISPEL, CONDITION_POISON)

local exhaust = Condition(CONDITION_EXHAUST_HEAL)
exhaust:setParameter(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

    local player = Player(cid)
    if player:getCondition(CONDITION_EXHAUST_HEAL) then
        player:sendTextMessage(MESSAGE_STATUS_SMALL, Game.getReturnMessage(RETURNVALUE_YOUAREEXHAUSTED))
        return true
    end

    if item.itemid == antidotePot then
        if not doCombat(itemEx.uid, antidote, numberToVariant(itemEx.uid)) then
            return false
        end
        player:addCondition(exhaust)
        Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == smallHealthPot then
        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 60, 85, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == healthPot then
        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 125, 175, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == manaPot then
        if not doTargetCombatMana(0, itemEx.uid, 75, 125, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(emptyPot, 1)
    elseif item.itemid == strongHealthPot then
        if(not isInArray({3,4,7,8}, player:getVocation():getId()) or player:getLevel() < 50) and not(player:getGroup():getId() >= 2) then
            Player(itemEx.uid):say("This potion can only be consumed by paladins and knights of level 50 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(strongEmptyPot, 1)
    elseif item.itemid == strongManaPot then
        if(not isInArray({1,2,3,5,6,7}, player:getVocation():getId()) or player:getLevel() < 50) and not(player:getGroup():getId() >= 2) then
            Player(itemEx.uid):say("This potion can only be consumed by sorcerers, druids and paladins of level 50 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatMana(0, itemEx.uid, 115, 185, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(strongEmptyPot, 1)
    elseif item.itemid == greatSpiritPot then
        if(not isInArray({3, 7}, player:getVocation():getId()) or (player:getLevel() < 80)) and not(player:getGroup():getId() >= 2) then
            Player(itemEx.uid):say("This potion can only be consumed by paladins of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) or not doTargetCombatMana(0, itemEx.uid, 100, 200, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == greatHealthPot then
        if(not isInArray({4, 8}, player:getVocation():getId()) or player:getLevel() < 80) and not(player:getGroup():getId() >= 2) then
            Player(itemEx.uid):say("This potion can only be consumed by knights of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 425, 575, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == greatManaPot then
        if(not isInArray({1,2,5,6}, player:getVocation():getId()) or player:getLevel() < 80) and not(player:getGroup():getId() >= 2) then
            Player(itemEx.uid):say("This potion can only be consumed by sorcerers and druids of level 80 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatMana(0, itemEx.uid, 150, 250, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    elseif item.itemid == ultimateHealthPot then
        if(not isInArray({4, 8}, player:getVocation():getId()) or player:getLevel() < 130) and not(player:getGroup():getId() >= 2) then
            Player(itemEx.uid):say("This potion can only be consumed by knights of level 130 or higher.", TALKTYPE_MONSTER_SAY)
            return true
        end

        if not doTargetCombatHealth(0, itemEx.uid, COMBAT_HEALING, 650, 850, CONST_ME_MAGIC_BLUE) then
            return false
        end
        player:addCondition(exhaust)
        Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
        Item(item.uid):remove(1)
        player:addItem(greatEmptyPot, 1)
    end
doRemoveItem(item.uid,1)

    return true
end
 
Hmm.. It always only removes "1" in the script so me as a noob in lua cant find an error either :/
I once had such an error tfs version related though..
 
At the third line from the bottom, remove this:
Code:
doRemoveItem(item.uid,1)

Your already removing one from the functions itself.
Hah o damn, I forgot.. tried to add so it would remove vials before. That was my bad... Thank you! But can you guys now help me how to make so I dont get any empty vials? ^^
I remember that before it was esay in config, but there is no function like that in mine.
 
The lines like this:
Code:
player:addItem(emptyPot, 1)
replace the full pots with empty ones. If your players are litterers and just throw away empty pots, remove those lines.
There's one in each of the main if/elseif's.

BTW: these 4 lines (now 3 I guess) should be done via an internal function:
Code:
player:addCondition(exhaust)
Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
Item(item.uid):remove(1)
player:addItem(greatEmptyPot, 1)
 
The lines like this:
Code:
player:addItem(emptyPot, 1)
replace the full pots with empty ones. If your players are litterers and just throw away empty pots, remove those lines.
There's one in each of the main if/elseif's.

BTW: these 4 lines (now 3 I guess) should be done via an internal function:
Code:
player:addCondition(exhaust)
Player(itemEx.uid):say("Aaaah...", TALKTYPE_MONSTER_SAY)
Item(item.uid):remove(1)
player:addItem(greatEmptyPot, 1)

I see! Thank you mate! :)
 
Back
Top