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

error in console while using potions

Jeyci

Banned User
Joined
May 6, 2023
Messages
289
Solutions
3
Reaction score
36
Lua:
Lua Script Error: [Action Interface]
data/actions/scripts/Other/fluids/potions.lua:onUse
data/actions/scripts/Other/fluids/potions.lua:200: attempt to index local 'tile' (a nil value)
stack traceback:
        data/actions/scripts/Other/fluids/potions.lua:200: in function <data/actions/scripts/Other/fluids/potions.lua:196>

this is the script
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 manaShield = Condition(CONDITION_MANASHIELD_BREAKABLE)
--manaShield:setParameter(CONDITION_PARAM_TICKS, 3 * 60 * 1000)

--local function magicShieldCapacity(player)
--    manaShield:setParameter(CONDITION_PARAM_MANASHIELD_BREAKABLE, math.min(player:getMaxMana(), 300 + 7.6 * player:getLevel() + 7 * player:getMagicLevel()))
--end

local potions = {
    [6558] = { -- flask of demonic blood
        transform = {7588, 7589},
        effect = CONST_ME_DRAWBLOOD
    },
    [7439] = { -- berserk potion
        condition = berserk,
        vocations = {
            VOCATION_KNIGHT,
            VOCATION_ELITE_KNIGHT
        },
        effect = CONST_ME_MAGIC_RED,
        description = "Only knights may drink this potion.",
        text = "You feel stronger."
    },
    [7440] = { -- mastermind potion
        condition = mastermind,
        vocations = {
            VOCATION_SORCERER,
            VOCATION_DRUID,
            VOCATION_MASTER_SORCERER,
            VOCATION_ELDER_DRUID
        },
        effect = CONST_ME_MAGIC_BLUE,
        description = "Only sorcerers and druids may drink this potion.",
        text = "You feel smarter."
    },
    [7443] = { -- bullseye potion
        condition = bullseye,
        vocations = {
            VOCATION_PALADIN,
            VOCATION_ROYAL_PALADIN
        },
        effect = CONST_ME_MAGIC_GREEN,
        description = "Only paladins may drink this potion.",
        text = "You feel more accurate."
    },
    --[38219] = { -- magic shield potion
    --    condition = manaShield,
    --    vocations = {
    --        VOCATION_SORCERER,
    ---        VOCATION_DRUID,
        --    VOCATION_MASTER_SORCERER,
        --    VOCATION_ELDER_DRUID
        --},
        --level = 14,
        --effect = CONST_ME_ENERGYAREA,
        --description = "Only sorcerers and druids of level 14 or above may drink this potion.",
        --capacity = magicShieldCapacity
    --},
    [7588] = { -- strong health potion
        health = {250, 350},
        vocations = {
            VOCATION_PALADIN,
            VOCATION_KNIGHT,
            VOCATION_ROYAL_PALADIN,
            VOCATION_ELITE_KNIGHT
        },
        level = 50,
        flask = 7634,
        description = "Only knights and paladins of level 50 or above may drink this fluid."
    },
    [7589] = { -- strong mana potion
        mana = {115, 185},
        vocations = {
            VOCATION_SORCERER,
            VOCATION_DRUID,
            VOCATION_PALADIN,
            VOCATION_MASTER_SORCERER,
            VOCATION_ELDER_DRUID,
            VOCATION_ROYAL_PALADIN
            },
        level = 50,
        flask = 7634,
        description = "Only sorcerers, druids and paladins of level 50 or above may drink this fluid."
    },
    [7590] = { -- great mana potion
        mana = {150, 250},
        vocations = {
            VOCATION_SORCERER,
            VOCATION_DRUID,
            VOCATION_PALADIN,
            VOCATION_MASTER_SORCERER,
            VOCATION_ELDER_DRUID,
            VOCATION_ROYAL_PALADIN
        },
        level = 80,
        flask = 7635,
        description = "Only sorcerers, druids and paladins of level 80 or above may drink this fluid."
    },
    [7591] = { -- great health potion
        health = {425, 575},
        vocations = {
            VOCATION_KNIGHT,
            VOCATION_ELITE_KNIGHT
        },
        level = 80,
        flask = 7635,
        description = "Only knights of level 80 or above may drink this fluid."
    },
    [7618] = { -- health potion
        health = {125, 175},
        flask = 7636
    },
    [7620] = { -- mana potion
        mana = {75, 125},
        flask = 7636
    },
    [8472] = { -- great spirit potion
        health = {250, 350},
        mana = {100, 200},
        vocations = {
            VOCATION_PALADIN,
            VOCATION_ROYAL_PALADIN
        },
        level = 80,
        flask = 7635,
        description = "Only paladins of level 80 or above may drink this fluid."
    },
    [8473] = { -- ultimate health potion
        health = {650, 850},
        vocations = {
            VOCATION_KNIGHT,
            VOCATION_ELITE_KNIGHT
        },
        level = 130,
        flask = 7635,
        description = "Only knights of level 130 or above may drink this fluid."
    },
    [8474] = { -- antidote potion
        antidote = true,
        flask = 7636
    },
    [8704] = { -- small health potion
        health = {60, 90},
        flask = 7636
    },
    [26029] = { -- ultimate mana potion
        mana = {425, 575},
        vocations = {
            VOCATION_SORCERER,
            VOCATION_DRUID,
            VOCATION_MASTER_SORCERER,
            VOCATION_ELDER_DRUID
        },
        level = 130,
        flask = 7635,
        description = "Only druids and sorcerers of level 130 or above may drink this fluid."
    },
    [26030] = { -- ultimate spirit potion
        health = {410, 580},
        mana = {150, 250},
        vocations = {
            VOCATION_PALADIN,
            VOCATION_ROYAL_PALADIN
        },
        level = 130,
        flask = 7635,
        description = "Only paladins of level 130 or above may drink this fluid."
    },
    [26031] = { -- supreme health potion
        health = {875, 1125},
        vocations = {
            VOCATION_KNIGHT,
            VOCATION_ELITE_KNIGHT
        },
        level = 200,
        flask = 7635,
        description = "Only knights of level 200 or above may drink this fluid."
    }
}
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
   local potion = potions[item:getId()]
  
   local tile = Tile(toPosition)
   local items = tile:getItems()
   if items then
      for i, item in ipairs(items) do
         local targetItemType = ItemType(item:getId())
         if targetItemType and targetItemType:getType() == ITEM_TYPE_TELEPORT then
            return false
         end
      end
   end
  
   if type(target) == "userdata" and not target:isPlayer() then
      if potion.health and potion.mana then
         Game.createItem(2025, 35, toPosition):decay()
      elseif potion.health then
         Game.createItem(2025, 10, toPosition):decay()
      elseif potion.mana then
         Game.createItem(2025, 7, toPosition):decay()
      end
      if configManager.getBoolean(configKeys.REMOVE_POTION_CHARGES) then
         item:remove(1)
         if potion.flask and potion.flask > 0 then
            player:addItem(potion.flask)
         end
      end
      return true
   end
  
   if not player:getGroup():getAccess() and (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_POTION)
      return true
   end

   if potion.condition then
      if potion.capacity then
         potion.capacity(player)
      end
      player:addCondition(potion.condition)
      player:say(potion.text, TALKTYPE_POTION)
      player:getPosition():sendMagicEffect(potion.effect)
   elseif potion.transform then
      local reward = potion.transform[math.random(#potion.transform)]
      if fromPosition.x == CONTAINER_POSITION then
         local targetContainer = Container(item:getParent().uid)
         targetContainer:addItem(reward, 1)
      else
         Game.createItem(reward, 1, fromPosition)
      end

      item:getPosition():sendMagicEffect(potion.effect)
      item:remove(1)
      return true
   else
      if potion.health then
         doTargetCombat(player, target, COMBAT_HEALING, potion.health[1], potion.health[2])
      end

      if potion.mana then
         doTargetCombat(player, target, COMBAT_MANADRAIN, potion.mana[1], potion.mana[2])
      end

      if potion.antidote then
         target:removeCondition(CONDITION_POISON)
      end

      player:addAchievementProgress("Potion Addict", 100000)
      player:addItem(potion.flask)
      target:say("Aaaah...", TALKTYPE_POTION)
      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

this is the line
Code:
 local items = tile:getItems()
 
Solution
Line 199:208
Lua:
   local tile = Tile(toPosition)
   if tile then
      for i, item in ipairs(tile:getItems()) do
         local targetItemType = ItemType(item:getId())
         if targetItemType and targetItemType:getType() == ITEM_TYPE_TELEPORT then
            return false
         end
      end
   end
Line 199:208
Lua:
   local tile = Tile(toPosition)
   if tile then
      for i, item in ipairs(tile:getItems()) do
         local targetItemType = ItemType(item:getId())
         if targetItemType and targetItemType:getType() == ITEM_TYPE_TELEPORT then
            return false
         end
      end
   end
 
Solution
Back
Top