• 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 Ferumbras Lever

adrenyslopez

Member
Joined
Dec 22, 2015
Messages
201
Reaction score
15
Hello, someone helps me with the scripts of the ferumbras lever, when 2 players pass 2 bosses are created, if 1 passes, only one is created, it depends on the number of players are the bosses that are created, please help

me use otbr tfs 1.3

a video for them to see




ferumbras_lever.lua
Lua:
local config = {
    bossName = "Ascending Ferumbras",
    summonName = "Rift Invader",
    bossPos = Position(33392, 31473, 14),
    centerRoom = Position(33392, 31473, 14), -- Center Room
    exitPosition = Position(33266, 31479, 14), -- Exit Position
    newPos = Position(33392, 31479, 14), -- Player Position on room
    playerPositions = {
        Position(33269, 31477, 14),
        Position(33269, 31478, 14),
        Position(33269, 31479, 14),
        Position(33269, 31480, 14),
        Position(33269, 31481, 14),
        Position(33270, 31477, 14),
        Position(33270, 31478, 14),
        Position(33270, 31479, 14),
        Position(33270, 31480, 14),
        Position(33270, 31481, 14),
        Position(33271, 31477, 14),
        Position(33271, 31478, 14),
        Position(33271, 31479, 14),
        Position(33271, 31480, 14),
        Position(33271, 31481, 14)
    },
    range = 20,
    time = 30, -- time in minutes to remove the player
}
local function clearFerumbrasRoom()
    local spectators = Game.getSpectators(config.bossPos, false, false, 20, 20, 20, 20)
    for i = 1, #spectators do
        local spectator = spectators[i]
        if spectator:isPlayer() then
            spectator:teleportTo(config.exitPosition)
            spectator:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
            spectator:say('Time out! You were teleported out by strange forces.', TALKTYPE_MONSTER_SAY)
        elseif spectator:isMonster() then
            spectator:remove()
        end
    end
end

local ferumbrasAscendantLever = Action()
function ferumbrasAscendantLever.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if item.itemid == 9825 then
        if player:getPosition() ~= Position(33270, 31477, 14) then
            return true
        end

        for x = 33269, 33271 do
            for y = 31477, 31481 do
                local playerTile = Tile(Position(x, y, 14)):getTopCreature()
                if playerTile and playerTile:isPlayer() then
                    if playerTile:getStorageValue(Storage.FerumbrasAscension.FerumbrasTimer) > os.time() then
                        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You or a member in your team have to wait 5 days to face Ferumbras again!")
                        item:transform(9826)
                        return true
                    end
                end
            end
        end

        local specs, spec = Game.getSpectators(config.centerRoom, false, false, 15, 15, 15, 15)
        for i = 1, #specs do
            spec = specs[i]
            if spec:isPlayer() then
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "There's someone fighting with Ferumbras.")
                return true
            end
        end

        local spectators = Game.getSpectators(config.bossPos, false, false, 15, 15, 15, 15)
        for i = 1, #spectators do
            local spectator = spectators[i]
            if spectator:isMonster() then
                spectator:remove()
            end
        end

        for x = 33269, 33271 do
            for y = 31477, 31481 do
                local playerTile = Tile(Position(x, y, 14)):getTopCreature()
                if playerTile and playerTile:isPlayer() then
                    playerTile:getPosition():sendMagicEffect(CONST_ME_POFF)
                    playerTile:teleportTo(config.newPos)
                    playerTile:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
                    playerTile:setStorageValue(Storage.FerumbrasAscension.FerumbrasTimer, os.time() + 280 * 60 * 3600) -- 14 days
                    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have 30 minutes to kill and loot this boss. Otherwise you will lose that chance and will be kicked out.")
                    addEvent(clearFerumbrasRoom, 60 * config.time * 1000, player:getId(), config.centerRoom, config.range, config.range, config.exitPosition)

                    for b = 1,1 do
                        local xrand = math.random(-10, 10)
                        local yrand = math.random(-10, 10)
                        local position = Position(33392 + xrand, 31473 + yrand, 14)
                        if Game.createMonster("rift invader", position) then
                        end
                    end

                    Game.createMonster(config.bossName, config.bossPos, true, true)
                    item:transform(9826)
                end
            end
        end
    elseif item.itemid == 9826 then
        item:transform(9825)
        return true
    end
end

ferumbrasAscendantLever:uid(1021)
ferumbrasAscendantLever:register()


Note: Where can I spend the time when the summons come out?
 
Lua:
local config = {
    bossName = "Ascending Ferumbras",
    summonName = "Rift Invader",
    bossPos = Position(33392, 31473, 14),
    centerRoom = Position(33392, 31473, 14), -- Center Room
    exitPosition = Position(33266, 31479, 14), -- Exit Position
    newPos = Position(33392, 31479, 14), -- Player Position on room
    playerPositions = {
        Position(33269, 31477, 14),
        Position(33269, 31478, 14),
        Position(33269, 31479, 14),
        Position(33269, 31480, 14),
        Position(33269, 31481, 14),
        Position(33270, 31477, 14),
        Position(33270, 31478, 14),
        Position(33270, 31479, 14),
        Position(33270, 31480, 14),
        Position(33270, 31481, 14),
        Position(33271, 31477, 14),
        Position(33271, 31478, 14),
        Position(33271, 31479, 14),
        Position(33271, 31480, 14),
        Position(33271, 31481, 14)
    },
    range = 20,
    time = 30, -- time in minutes to remove the player
}
local function clearFerumbrasRoom()
    local spectators = Game.getSpectators(config.bossPos, false, false, 20, 20, 20, 20)
    for i = 1, #spectators do
        local spectator = spectators[i]
        if spectator:isPlayer() then
            spectator:teleportTo(config.exitPosition)
            spectator:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
            spectator:say('Time out! You were teleported out by strange forces.', TALKTYPE_MONSTER_SAY)
        elseif spectator:isMonster() then
            spectator:remove()
        end
    end
end

local ferumbrasAscendantLever = Action()
function ferumbrasAscendantLever.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if item.itemid == 9825 then
        if player:getPosition() ~= Position(33270, 31477, 14) then
            return true
        end

        for x = 33269, 33271 do
            for y = 31477, 31481 do
                local playerTile = Tile(Position(x, y, 14)):getTopCreature()
                if playerTile and playerTile:isPlayer() then
                    if playerTile:getStorageValue(Storage.FerumbrasAscension.FerumbrasTimer) > os.time() then
                        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You or a member in your team have to wait 5 days to face Ferumbras again!")
                        item:transform(9826)
                        return true
                    end
                end
            end
        end

        local specs, spec = Game.getSpectators(config.centerRoom, false, false, 15, 15, 15, 15)
        for i = 1, #specs do
            spec = specs[i]
            if spec:isPlayer() then
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "There's someone fighting with Ferumbras.")
                return true
            end
        end

        local spectators = Game.getSpectators(config.bossPos, false, false, 15, 15, 15, 15)
        for i = 1, #spectators do
            local spectator = spectators[i]
            if spectator:isMonster() then
                spectator:remove()
            end
        end

        for x = 33269, 33271 do
            for y = 31477, 31481 do
                local playerTile = Tile(Position(x, y, 14)):getTopCreature()
                if playerTile and playerTile:isPlayer() then
                    playerTile:getPosition():sendMagicEffect(CONST_ME_POFF)
                    playerTile:teleportTo(config.newPos)
                    playerTile:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
                    playerTile:setStorageValue(Storage.FerumbrasAscension.FerumbrasTimer, os.time() + 280 * 60 * 3600) -- 14 days
                    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have 30 minutes to kill and loot this boss. Otherwise you will lose that chance and will be kicked out.")
                    addEvent(clearFerumbrasRoom, 60 * config.time * 1000, player:getId(), config.centerRoom, config.range, config.range, config.exitPosition)
                end
            end
        end
       
        for b = 1,1 do
            local xrand = math.random(-10, 10)
            local yrand = math.random(-10, 10)
            local position = Position(33392 + xrand, 31473 + yrand, 14)
            if Game.createMonster("rift invader", position) then
            end
        end

        Game.createMonster(config.bossName, config.bossPos, true, true)
        item:transform(9826)
    elseif item.itemid == 9826 then
        item:transform(9825)
        return true
    end
end

ferumbrasAscendantLever:uid(1021)
ferumbrasAscendantLever:register()
 
Change

Lua:
Game.createMonster(config.bossName, config.bossPos, true, true)

for

Code:
Game.createMonster(config.bossName, config.bossPos)
 
Lua:
local config = {
    bossName = "Ascending Ferumbras",
    summonName = "Rift Invader",
    bossPos = Position(33392, 31473, 14),
    centerRoom = Position(33392, 31473, 14), -- Center Room
    exitPosition = Position(33266, 31479, 14), -- Exit Position
    newPos = Position(33392, 31479, 14), -- Player Position on room
    playerPositions = {
        Position(33269, 31477, 14),
        Position(33269, 31478, 14),
        Position(33269, 31479, 14),
        Position(33269, 31480, 14),
        Position(33269, 31481, 14),
        Position(33270, 31477, 14),
        Position(33270, 31478, 14),
        Position(33270, 31479, 14),
        Position(33270, 31480, 14),
        Position(33270, 31481, 14),
        Position(33271, 31477, 14),
        Position(33271, 31478, 14),
        Position(33271, 31479, 14),
        Position(33271, 31480, 14),
        Position(33271, 31481, 14)
    },
    range = 20,
    time = 30, -- time in minutes to remove the player
}
local function clearFerumbrasRoom()
    local spectators = Game.getSpectators(config.bossPos, false, false, 20, 20, 20, 20)
    for i = 1, #spectators do
        local spectator = spectators[i]
        if spectator:isPlayer() then
            spectator:teleportTo(config.exitPosition)
            spectator:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
            spectator:say('Time out! You were teleported out by strange forces.', TALKTYPE_MONSTER_SAY)
        elseif spectator:isMonster() then
            spectator:remove()
        end
    end
end

local ferumbrasAscendantLever = Action()
function ferumbrasAscendantLever.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if item.itemid == 9825 then
        if player:getPosition() ~= Position(33270, 31477, 14) then
            return true
        end

        for x = 33269, 33271 do
            for y = 31477, 31481 do
                local playerTile = Tile(Position(x, y, 14)):getTopCreature()
                if playerTile and playerTile:isPlayer() then
                    if playerTile:getStorageValue(Storage.FerumbrasAscension.FerumbrasTimer) > os.time() then
                        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You or a member in your team have to wait 5 days to face Ferumbras again!")
                        item:transform(9826)
                        return true
                    end
                end
            end
        end

        local specs, spec = Game.getSpectators(config.centerRoom, false, false, 15, 15, 15, 15)
        for i = 1, #specs do
            spec = specs[i]
            if spec:isPlayer() then
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "There's someone fighting with Ferumbras.")
                return true
            end
        end

        local spectators = Game.getSpectators(config.bossPos, false, false, 15, 15, 15, 15)
        for i = 1, #spectators do
            local spectator = spectators[i]
            if spectator:isMonster() then
                spectator:remove()
            end
        end

        for x = 33269, 33271 do
            for y = 31477, 31481 do
                local playerTile = Tile(Position(x, y, 14)):getTopCreature()
                if playerTile and playerTile:isPlayer() then
                    playerTile:getPosition():sendMagicEffect(CONST_ME_POFF)
                    playerTile:teleportTo(config.newPos)
                    playerTile:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
                    playerTile:setStorageValue(Storage.FerumbrasAscension.FerumbrasTimer, os.time() + 280 * 60 * 3600) -- 14 days
                    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have 30 minutes to kill and loot this boss. Otherwise you will lose that chance and will be kicked out.")
                    addEvent(clearFerumbrasRoom, 60 * config.time * 1000, player:getId(), config.centerRoom, config.range, config.range, config.exitPosition)
                end
            end
        end
      
        for b = 1,1 do
            local xrand = math.random(-10, 10)
            local yrand = math.random(-10, 10)
            local position = Position(33392 + xrand, 31473 + yrand, 14)
            if Game.createMonster("rift invader", position) then
            end
        end

        Game.createMonster(config.bossName, config.bossPos, true, true)
        item:transform(9826)
    elseif item.itemid == 9826 then
        item:transform(9825)
        return true
    end
end

ferumbrasAscendantLever:uid(1021)
ferumbrasAscendantLever:register()

Looks good, Line 97 could be improved.

Lua:
            if Game.createMonster("rift invader", position) then

to

Code:
            if Game.createMonster("config.summonName", position) then
 
Back
Top