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

If player has item X in ammo slot

vexler222

Active Member
Joined
Apr 22, 2012
Messages
714
Solutions
15
Reaction score
46
Hi, how to check player item in ammo slot?
I want add bonus for better potion if he have item X in ammo slot but idk how to check it

tfs 1.3 (downgrade 8.6)
 
Hi, how to check player item in ammo slot?
I want add bonus for better potion if he have item X in ammo slot but idk how to check it

tfs 1.3 (downgrade 8.6)

<movevent event="Equip" itemid="ITEMID" slot="ammo" function="onEquipItem">
</movevent>
<movevent event="DeEquip" itemid="ITEMID" slot="ammo" function="onDeEquipItem" />

also movements.xml :D
 
<movevent event="Equip" itemid="ITEMID" slot="ammo" function="onEquipItem">
</movevent>
<movevent event="DeEquip" itemid="ITEMID" slot="ammo" function="onDeEquipItem" />

also movements.xml :D

i know
I need to check if the player has the item in ammo slot, as there is no attribute that increases potion healing
 
nil value error if player has no item in slot.
sigh. xD

Was answering his question, not giving ready-to-go code.

But since you mentioned it..

Lua:
local slotItem = player:getSlotItem(CONST_SLOT_AMMO)
if slotItem then
    if slotItem:getId() == 1111 then
        -- is correct item
    else
        -- not correct item
    end
end
 
@Xikini hey bro, i have litte problem, i added it to my potions and if i have item X in ammo slot it work but if i dont have any item in ammo slot, potion dont adding mana (0) i don't know why?

Code:
        if slotItem then
        if potion.mana and slotItem:getId() == 11754 then
            doTargetCombatMana(0, target, potion.mana[1]+50, potion.mana[2]+50) // it work adding config mp + 50
        else
            doTargetCombatMana(0, target, potion.mana[1], potion.mana[2]) // not work, i can use potion and i see text "Aaaa" but not add mana
        end
    end
 
@Xikini hey bro, i have litte problem, i added it to my potions and if i have item X in ammo slot it work but if i dont have any item in ammo slot, potion dont adding mana (0) i don't know why?

Code:
        if slotItem then
        if potion.mana and slotItem:getId() == 11754 then
            doTargetCombatMana(0, target, potion.mana[1]+50, potion.mana[2]+50) // it work adding config mp + 50
        else
            doTargetCombatMana(0, target, potion.mana[1], potion.mana[2]) // not work, i can use potion and i see text "Aaaa" but not add mana
        end
    end
You'd have to show the full script.
and tell us which potion you tested with
 
@Xikini hey bro, i have litte problem, i added it to my potions and if i have item X in ammo slot it work but if i dont have any item in ammo slot, potion dont adding mana (0) i don't know why?

Code:
        if slotItem then
        if potion.mana and slotItem:getId() == 11754 then
            doTargetCombatMana(0, target, potion.mana[1]+50, potion.mana[2]+50) // it work adding config mp + 50
        else
            doTargetCombatMana(0, target, potion.mana[1], potion.mana[2]) // not work, i can use potion and i see text "Aaaa" but not add mana
        end
    end
you wrote else to wrong if conditional
 
@Xikini i'm testing it with great mana potion

//edit
@Xikini / @Nekiro

okey i have it but i don't know is correct? ;p
It work so i think it's good but im not programist

Code:
        if slotItem then
            if potion.mana and slotItem:getId() == 11754 then
                doTargetCombatMana(0, target, potion.mana[1]+50, potion.mana[2]+50)
                target:say("test_item", TALKTYPE_MONSTER_SAY)
            end
        else
            target:say("test_noitem", TALKTYPE_MONSTER_SAY)
            doTargetCombatMana(0, target, potion.mana[1], potion.mana[2])
        end

Code:
local berserk = Condition(CONDITION_ATTRIBUTES)
berserk:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
berserk:setParameter(CONDITION_PARAM_SKILL_MELEE, 5)
berserk:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10)
berserk:setParameter(CONDITION_PARAM_BUFF_SPELL, true)

local mastermind = Condition(CONDITION_ATTRIBUTES)
mastermind:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
mastermind:setParameter(CONDITION_PARAM_STAT_MAGICPOINTS, 3)
mastermind:setParameter(CONDITION_PARAM_BUFF_SPELL, true)

local bullseye = Condition(CONDITION_ATTRIBUTES)
bullseye:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
bullseye:setParameter(CONDITION_PARAM_SKILL_DISTANCE, 5)
bullseye:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10)
bullseye:setParameter(CONDITION_PARAM_BUFF_SPELL, true)

local potions = {
    [6558] = {transform = {7588, 7589}, effect = CONST_ME_DRAWBLOOD},
    [7439] = {condition = berserk, vocations = {4, 8}, effect = CONST_ME_MAGIC_RED, description = "Only knights may drink this potion.", text = "You feel stronger."},
    [7440] = {condition = mastermind, vocations = {1, 2, 5, 6}, effect = CONST_ME_MAGIC_BLUE, description = "Only sorcerers and druids may drink this potion.", text = "You feel smarter."},
    [7443] = {condition = bullseye, vocations = {3, 7}, effect = CONST_ME_MAGIC_GREEN, description = "Only paladins may drink this potion.", text = "You feel more accurate."},
    [7588] = {health = {250, 350}, vocations = {3, 4, 7, 8}, level = 50, flask = 7634, description = "Only knights and paladins of level 50 or above may drink this fluid."},
    [7589] = {mana = {115, 185}, vocations = {1, 2, 3, 5, 6, 7}, level = 50, flask = 7634, description = "Only sorcerers, druids and paladins of level 50 or above may drink this fluid."},
    [7590] = {mana = {100, 100}, vocations = {1, 2, 5, 6}, level = 80, flask = 7635, description = "Only druids and sorcerers of level 80 or above may drink this fluid."},
    [7591] = {health = {425, 575}, vocations = {4, 8}, level = 80, flask = 7635, description = "Only knights of level 80 or above may drink this fluid."},
    [7618] = {health = {125, 175}, flask = 7636},
    [7620] = {mana = {75, 125}, flask = 7636},
    [8472] = {health = {250, 350}, mana = {100, 200}, vocations = {3, 7}, level = 80, flask = 7635, description = "Only paladins of level 80 or above may drink this fluid."},
    [8473] = {health = {650, 850}, vocations = {4, 8}, level = 130, flask = 7635, description = "Only knights of level 130 or above may drink this fluid."},
    [8474] = {antidote = true, flask = 7636},
    [8704] = {health = {60, 90}, flask = 7636}
}

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if type(target) == "userdata" and not target:isPlayer() then
        return false
    end

    local potion = potions[item:getId()]
    local slotItem = player:getSlotItem(CONST_SLOT_AMMO)
    if potion.level and player:getLevel() < potion.level or potion.vocations and not table.contains(potion.vocations, player:getVocation():getId()) then
        player:say(potion.description, TALKTYPE_MONSTER_SAY)
        return true
    end
    if potion.condition then
        player:addCondition(potion.condition)
        player:say(potion.text, TALKTYPE_MONSTER_SAY)
        player:getPosition():sendMagicEffect(potion.effect)
    elseif potion.transform then
        item:transform(potion.transform[math.random(#potion.transform)])
        item:getPosition():sendMagicEffect(potion.effect)
        return true
    else
        if potion.health then
            doTargetCombatHealth(0, target, COMBAT_HEALING, potion.health[1], potion.health[2])
        end
        if slotItem then
            if potion.mana and slotItem:getId() == 11754 then
                doTargetCombatMana(0, target, potion.mana[1]+50, potion.mana[2]+50)
                target:say("test_item", TALKTYPE_MONSTER_SAY)
            end
        else
            target:say("test_noitem", TALKTYPE_MONSTER_SAY)
            doTargetCombatMana(0, target, potion.mana[1], potion.mana[2])
        end
        if potion.antidote then
            target:removeCondition(CONDITION_POISON)
        end

        player:addItem(potion.flask)
        target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        target:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
    end

    if not configManager.getBoolean(configKeys.REMOVE_POTION_CHARGES) then
        return true
    end    

    item:remove(1)
    return true
end
 
Last edited:
@Xikini i'm testing it with great mana potion

//edit
@Xikini / @Nekiro

okey i have it but i don't know is correct? ;p
It work so i think it's good but im not programist

Code:
        if slotItem then
            if potion.mana and slotItem:getId() == 11754 then
                doTargetCombatMana(0, target, potion.mana[1]+50, potion.mana[2]+50)
                target:say("test_item", TALKTYPE_MONSTER_SAY)
            end
        else
            target:say("test_noitem", TALKTYPE_MONSTER_SAY)
            doTargetCombatMana(0, target, potion.mana[1], potion.mana[2])
        end

Code:
local berserk = Condition(CONDITION_ATTRIBUTES)
berserk:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
berserk:setParameter(CONDITION_PARAM_SKILL_MELEE, 5)
berserk:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10)
berserk:setParameter(CONDITION_PARAM_BUFF_SPELL, true)

local mastermind = Condition(CONDITION_ATTRIBUTES)
mastermind:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
mastermind:setParameter(CONDITION_PARAM_STAT_MAGICPOINTS, 3)
mastermind:setParameter(CONDITION_PARAM_BUFF_SPELL, true)

local bullseye = Condition(CONDITION_ATTRIBUTES)
bullseye:setParameter(CONDITION_PARAM_TICKS, 10 * 60 * 1000)
bullseye:setParameter(CONDITION_PARAM_SKILL_DISTANCE, 5)
bullseye:setParameter(CONDITION_PARAM_SKILL_SHIELD, -10)
bullseye:setParameter(CONDITION_PARAM_BUFF_SPELL, true)

local potions = {
    [6558] = {transform = {7588, 7589}, effect = CONST_ME_DRAWBLOOD},
    [7439] = {condition = berserk, vocations = {4, 8}, effect = CONST_ME_MAGIC_RED, description = "Only knights may drink this potion.", text = "You feel stronger."},
    [7440] = {condition = mastermind, vocations = {1, 2, 5, 6}, effect = CONST_ME_MAGIC_BLUE, description = "Only sorcerers and druids may drink this potion.", text = "You feel smarter."},
    [7443] = {condition = bullseye, vocations = {3, 7}, effect = CONST_ME_MAGIC_GREEN, description = "Only paladins may drink this potion.", text = "You feel more accurate."},
    [7588] = {health = {250, 350}, vocations = {3, 4, 7, 8}, level = 50, flask = 7634, description = "Only knights and paladins of level 50 or above may drink this fluid."},
    [7589] = {mana = {115, 185}, vocations = {1, 2, 3, 5, 6, 7}, level = 50, flask = 7634, description = "Only sorcerers, druids and paladins of level 50 or above may drink this fluid."},
    [7590] = {mana = {100, 100}, vocations = {1, 2, 5, 6}, level = 80, flask = 7635, description = "Only druids and sorcerers of level 80 or above may drink this fluid."},
    [7591] = {health = {425, 575}, vocations = {4, 8}, level = 80, flask = 7635, description = "Only knights of level 80 or above may drink this fluid."},
    [7618] = {health = {125, 175}, flask = 7636},
    [7620] = {mana = {75, 125}, flask = 7636},
    [8472] = {health = {250, 350}, mana = {100, 200}, vocations = {3, 7}, level = 80, flask = 7635, description = "Only paladins of level 80 or above may drink this fluid."},
    [8473] = {health = {650, 850}, vocations = {4, 8}, level = 130, flask = 7635, description = "Only knights of level 130 or above may drink this fluid."},
    [8474] = {antidote = true, flask = 7636},
    [8704] = {health = {60, 90}, flask = 7636}
}

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if type(target) == "userdata" and not target:isPlayer() then
        return false
    end

    local potion = potions[item:getId()]
    local slotItem = player:getSlotItem(CONST_SLOT_AMMO)
    if potion.level and player:getLevel() < potion.level or potion.vocations and not table.contains(potion.vocations, player:getVocation():getId()) then
        player:say(potion.description, TALKTYPE_MONSTER_SAY)
        return true
    end
    if potion.condition then
        player:addCondition(potion.condition)
        player:say(potion.text, TALKTYPE_MONSTER_SAY)
        player:getPosition():sendMagicEffect(potion.effect)
    elseif potion.transform then
        item:transform(potion.transform[math.random(#potion.transform)])
        item:getPosition():sendMagicEffect(potion.effect)
        return true
    else
        if potion.health then
            doTargetCombatHealth(0, target, COMBAT_HEALING, potion.health[1], potion.health[2])
        end
        if slotItem then
            if potion.mana and slotItem:getId() == 11754 then
                doTargetCombatMana(0, target, potion.mana[1]+50, potion.mana[2]+50)
                target:say("test_item", TALKTYPE_MONSTER_SAY)
            end
        else
            target:say("test_noitem", TALKTYPE_MONSTER_SAY)
            doTargetCombatMana(0, target, potion.mana[1], potion.mana[2])
        end
        if potion.antidote then
            target:removeCondition(CONDITION_POISON)
        end

        player:addItem(potion.flask)
        target:say("Aaaah...", TALKTYPE_MONSTER_SAY)
        target:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
    end

    if not configManager.getBoolean(configKeys.REMOVE_POTION_CHARGES) then
        return true
    end    

    item:remove(1)
    return true
end
Yes, that looks correct.
 
Back
Top