• 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 Boss Event

jel

Member
Joined
Mar 22, 2014
Messages
302
Reaction score
12
hello, could someone modify this script for the event to start in interval mode instead of days?

tfs 1.3

globalevent:
Lua:
function onThink(interval)
    Bosses:checkTime()
    return true
end

Lua:
Bosses ={
    bosses = {
        ["morgaroth"] = {dia = "04/12/21", horario = 01, tempoMatar = 1}, -- mes/dia/ano - somente a hora - em horas
    },
    posNasceBoss = Position(32359, 32187, 7),
    posTpOpen = Position(32362, 32191, 7),
    posDestino = Position(32364, 32187, 7),
    level = {
        active = true,
        levelMin = 150,
    },
    tempoTpAberto = 20, -- Em minutos
    mensagemUm = "[Boss] Trovões, raios e terremotos nas profundezas do continente ... O portal mágico está entrando em colapso!",  -- 15 min
    mensagemDois = "[Boss] Não há mais magia capaz de parar o que está por vir. O portal está completamente aberto!", -- 10 min
    mensagemTres = "[Boss] Cidadãos, cuidado! Uma criatura do mal acaba de escapar do portal.", -- 5 min
    mensagemTpFechar = "[Boss] O teleport irá fechar em 5 minutos e não será possível entrar mais na sala do boss.",
    actionIdTp = 42477,
}

function Bosses:getBossName()
    for index, v in pairs(Bosses.bosses) do
        if v.dia == os.date("%x") and v.horario  == tonumber(os.date("%H")) then
            return index
        end
    end
    return nil
end

function Bosses:eek:penTp()
    local tile = Tile(Bosses.posTpOpen)
    if tile then
        local item = tile:getItemById(1387)
        if item then
            item:getPosition():sendMagicEffect(CONST_ME_POFF)
            item:remove()
        else
            local teleport = Game.createItem(1387, 1, Bosses.posTpOpen)
            if teleport then
                teleport:setActionId(Bosses.actionIdTp)
            end
            addEvent(function()
                Bosses:eek:penTp()
            end, Bosses.tempoTpAberto * 60 * 1000)
            addEvent(Game.broadcastMessage, (Bosses.tempoTpAberto - 5) * 60 * 1000, (Bosses.mensagemTpFechar))
        end
    end
end

function Bosses:checkTime()
    for index, v in pairs(Bosses.bosses) do
        if v.dia == os.date("%x") and v.horario  == tonumber(os.date("%H")) then
            addEvent(function()
                local monster = Game.createMonster(index, Bosses.posNasceBoss)
                monster:setEmblem(GUILDEMBLEM_ENEMY)
                local idMonster = monster:getId()
            end, 10 * 60 * 1000)
            addEvent(function()
                Bosses:removeMonster(idMonster)
            end, v.tempoMatar * 60 * 60 * 1000)
            Bosses:sendMessages()
            Bosses:eek:penTp()
        end
    end
end

function Bosses:sendMessages()
    Game.broadcastMessage(Bosses.mensagemUm)
    addEvent(Game.broadcastMessage, 5 * 60 * 1000, Bosses.mensagemDois)
    addEvent(Game.broadcastMessage, 10 * 60 * 1000, Bosses.mensagemTres)
end

function Bosses:removeMonster(id)
    monstro = Monster(id)
    if monstro then
        monstro:getPosition():sendMagicEffect(CONST_ME_POFF)
        monstro:remove()
    end
end

note: in case the event is starting for scheduled days I want it to start every 1h
 
Last edited by a moderator:
Solution
Change "hour" for the hour that you want.

Lua:
Bosses ={
    bosses = {
        ["morgaroth"] = {hour = 01, tempoMatar = 1}, - somente a hora - em horas
    },
    posNasceBoss = Position(32359, 32187, 7),
    posTpOpen = Position(32362, 32191, 7),
    posDestino = Position(32364, 32187, 7),
    level = {
        active = true,
        levelMin = 150,
    },
    tempoTpAberto = 20, -- Em minutos
    mensagemUm = "[Boss] Trovões, raios e terremotos nas profundezas do continente ... O portal mágico está entrando em colapso!",  -- 15 min
    mensagemDois = "[Boss] Não há mais magia capaz de parar o que está por vir. O portal está completamente aberto!", -- 10 min
    mensagemTres = "[Boss] Cidadãos, cuidado! Uma criatura do mal acaba de escapar do...
Change "hour" for the hour that you want.

Lua:
Bosses ={
    bosses = {
        ["morgaroth"] = {hour = 01, tempoMatar = 1}, - somente a hora - em horas
    },
    posNasceBoss = Position(32359, 32187, 7),
    posTpOpen = Position(32362, 32191, 7),
    posDestino = Position(32364, 32187, 7),
    level = {
        active = true,
        levelMin = 150,
    },
    tempoTpAberto = 20, -- Em minutos
    mensagemUm = "[Boss] Trovões, raios e terremotos nas profundezas do continente ... O portal mágico está entrando em colapso!",  -- 15 min
    mensagemDois = "[Boss] Não há mais magia capaz de parar o que está por vir. O portal está completamente aberto!", -- 10 min
    mensagemTres = "[Boss] Cidadãos, cuidado! Uma criatura do mal acaba de escapar do portal.", -- 5 min
    mensagemTpFechar = "[Boss] O teleport irá fechar em 5 minutos e não será possível entrar mais na sala do boss.",
    actionIdTp = 42477,
}

function Bosses:getBossName()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            return index
        end
    end
    return nil
end

function Bosses:eek:penTp()
    local tile = Tile(Bosses.posTpOpen)
    if tile then
        local item = tile:getItemById(1387)
        if item then
            item:getPosition():sendMagicEffect(CONST_ME_POFF)
            item:remove()
        else
            local teleport = Game.createItem(1387, 1, Bosses.posTpOpen)
            if teleport then
                teleport:setActionId(Bosses.actionIdTp)
            end
            addEvent(function()
                Bosses:eek:penTp()
            end, Bosses.tempoTpAberto * 60 * 1000)
            addEvent(Game.broadcastMessage, (Bosses.tempoTpAberto - 5) * 60 * 1000, (Bosses.mensagemTpFechar))
        end
    end
end

function Bosses:checkTime()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            addEvent(function()
                local monster = Game.createMonster(index, Bosses.posNasceBoss)
                monster:setEmblem(GUILDEMBLEM_ENEMY)
                local idMonster = monster:getId()
            end, 10 * 60 * 1000)
            addEvent(function()
                Bosses:removeMonster(idMonster)
            end, v.tempoMatar * 60 * 60 * 1000)
            Bosses:sendMessages()
            Bosses:eek:penTp()
        end
    end
end

function Bosses:sendMessages()
    Game.broadcastMessage(Bosses.mensagemUm)
    addEvent(Game.broadcastMessage, 5 * 60 * 1000, Bosses.mensagemDois)
    addEvent(Game.broadcastMessage, 10 * 60 * 1000, Bosses.mensagemTres)
end

function Bosses:removeMonster(id)
    monstro = Monster(id)
    if monstro then
        monstro:getPosition():sendMagicEffect(CONST_ME_POFF)
        monstro:remove()
    end
end
 
Solution
Change "hour" for the hour that you want.

Lua:
Bosses ={
    bosses = {
        ["morgaroth"] = {hour = 01, tempoMatar = 1}, - somente a hora - em horas
    },
    posNasceBoss = Position(32359, 32187, 7),
    posTpOpen = Position(32362, 32191, 7),
    posDestino = Position(32364, 32187, 7),
    level = {
        active = true,
        levelMin = 150,
    },
    tempoTpAberto = 20, -- Em minutos
    mensagemUm = "[Boss] Trovões, raios e terremotos nas profundezas do continente ... O portal mágico está entrando em colapso!",  -- 15 min
    mensagemDois = "[Boss] Não há mais magia capaz de parar o que está por vir. O portal está completamente aberto!", -- 10 min
    mensagemTres = "[Boss] Cidadãos, cuidado! Uma criatura do mal acaba de escapar do portal.", -- 5 min
    mensagemTpFechar = "[Boss] O teleport irá fechar em 5 minutos e não será possível entrar mais na sala do boss.",
    actionIdTp = 42477,
}

function Bosses:getBossName()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            return index
        end
    end
    return nil
end

function Bosses:eek:penTp()
    local tile = Tile(Bosses.posTpOpen)
    if tile then
        local item = tile:getItemById(1387)
        if item then
            item:getPosition():sendMagicEffect(CONST_ME_POFF)
            item:remove()
        else
            local teleport = Game.createItem(1387, 1, Bosses.posTpOpen)
            if teleport then
                teleport:setActionId(Bosses.actionIdTp)
            end
            addEvent(function()
                Bosses:eek:penTp()
            end, Bosses.tempoTpAberto * 60 * 1000)
            addEvent(Game.broadcastMessage, (Bosses.tempoTpAberto - 5) * 60 * 1000, (Bosses.mensagemTpFechar))
        end
    end
end

function Bosses:checkTime()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            addEvent(function()
                local monster = Game.createMonster(index, Bosses.posNasceBoss)
                monster:setEmblem(GUILDEMBLEM_ENEMY)
                local idMonster = monster:getId()
            end, 10 * 60 * 1000)
            addEvent(function()
                Bosses:removeMonster(idMonster)
            end, v.tempoMatar * 60 * 60 * 1000)
            Bosses:sendMessages()
            Bosses:eek:penTp()
        end
    end
end

function Bosses:sendMessages()
    Game.broadcastMessage(Bosses.mensagemUm)
    addEvent(Game.broadcastMessage, 5 * 60 * 1000, Bosses.mensagemDois)
    addEvent(Game.broadcastMessage, 10 * 60 * 1000, Bosses.mensagemTres)
end

function Bosses:removeMonster(id)
    monstro = Monster(id)
    if monstro then
        monstro:getPosition():sendMagicEffect(CONST_ME_POFF)
        monstro:remove()
    end
end
is it possible to modify this script so that it is a random boss that is born every 1h?
 
Last edited:
Change "hour" for the hour that you want.

Lua:
Bosses ={
    bosses = {
        ["morgaroth"] = {hour = 01, tempoMatar = 1}, - somente a hora - em horas
    },
    posNasceBoss = Position(32359, 32187, 7),
    posTpOpen = Position(32362, 32191, 7),
    posDestino = Position(32364, 32187, 7),
    level = {
        active = true,
        levelMin = 150,
    },
    tempoTpAberto = 20, -- Em minutos
    mensagemUm = "[Boss] Trovões, raios e terremotos nas profundezas do continente ... O portal mágico está entrando em colapso!",  -- 15 min
    mensagemDois = "[Boss] Não há mais magia capaz de parar o que está por vir. O portal está completamente aberto!", -- 10 min
    mensagemTres = "[Boss] Cidadãos, cuidado! Uma criatura do mal acaba de escapar do portal.", -- 5 min
    mensagemTpFechar = "[Boss] O teleport irá fechar em 5 minutos e não será possível entrar mais na sala do boss.",
    actionIdTp = 42477,
}

function Bosses:getBossName()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            return index
        end
    end
    return nil
end

function Bosses:eek:penTp()
    local tile = Tile(Bosses.posTpOpen)
    if tile then
        local item = tile:getItemById(1387)
        if item then
            item:getPosition():sendMagicEffect(CONST_ME_POFF)
            item:remove()
        else
            local teleport = Game.createItem(1387, 1, Bosses.posTpOpen)
            if teleport then
                teleport:setActionId(Bosses.actionIdTp)
            end
            addEvent(function()
                Bosses:eek:penTp()
            end, Bosses.tempoTpAberto * 60 * 1000)
            addEvent(Game.broadcastMessage, (Bosses.tempoTpAberto - 5) * 60 * 1000, (Bosses.mensagemTpFechar))
        end
    end
end

function Bosses:checkTime()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            addEvent(function()
                local monster = Game.createMonster(index, Bosses.posNasceBoss)
                monster:setEmblem(GUILDEMBLEM_ENEMY)
                local idMonster = monster:getId()
            end, 10 * 60 * 1000)
            addEvent(function()
                Bosses:removeMonster(idMonster)
            end, v.tempoMatar * 60 * 60 * 1000)
            Bosses:sendMessages()
            Bosses:eek:penTp()
        end
    end
end

function Bosses:sendMessages()
    Game.broadcastMessage(Bosses.mensagemUm)
    addEvent(Game.broadcastMessage, 5 * 60 * 1000, Bosses.mensagemDois)
    addEvent(Game.broadcastMessage, 10 * 60 * 1000, Bosses.mensagemTres)
end

function Bosses:removeMonster(id)
    monstro = Monster(id)
    if monstro then
        monstro:getPosition():sendMagicEffect(CONST_ME_POFF)
        monstro:remove()
    end
end
1650312702672.png
1650312731300.png
help me with this error? I can't identify this eek
 
Change "hour" for the hour that you want.

Lua:
Bosses ={
    bosses = {
        ["morgaroth"] = {hour = 01, tempoMatar = 1}, - somente a hora - em horas
    },
    posNasceBoss = Position(32359, 32187, 7),
    posTpOpen = Position(32362, 32191, 7),
    posDestino = Position(32364, 32187, 7),
    level = {
        active = true,
        levelMin = 150,
    },
    tempoTpAberto = 20, -- Em minutos
    mensagemUm = "[Boss] Trovões, raios e terremotos nas profundezas do continente ... O portal mágico está entrando em colapso!",  -- 15 min
    mensagemDois = "[Boss] Não há mais magia capaz de parar o que está por vir. O portal está completamente aberto!", -- 10 min
    mensagemTres = "[Boss] Cidadãos, cuidado! Uma criatura do mal acaba de escapar do portal.", -- 5 min
    mensagemTpFechar = "[Boss] O teleport irá fechar em 5 minutos e não será possível entrar mais na sala do boss.",
    actionIdTp = 42477,
}

function Bosses:getBossName()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            return index
        end
    end
    return nil
end

function Bosses:eek:penTp()
    local tile = Tile(Bosses.posTpOpen)
    if tile then
        local item = tile:getItemById(1387)
        if item then
            item:getPosition():sendMagicEffect(CONST_ME_POFF)
            item:remove()
        else
            local teleport = Game.createItem(1387, 1, Bosses.posTpOpen)
            if teleport then
                teleport:setActionId(Bosses.actionIdTp)
            end
            addEvent(function()
                Bosses:eek:penTp()
            end, Bosses.tempoTpAberto * 60 * 1000)
            addEvent(Game.broadcastMessage, (Bosses.tempoTpAberto - 5) * 60 * 1000, (Bosses.mensagemTpFechar))
        end
    end
end

function Bosses:checkTime()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            addEvent(function()
                local monster = Game.createMonster(index, Bosses.posNasceBoss)
                monster:setEmblem(GUILDEMBLEM_ENEMY)
                local idMonster = monster:getId()
            end, 10 * 60 * 1000)
            addEvent(function()
                Bosses:removeMonster(idMonster)
            end, v.tempoMatar * 60 * 60 * 1000)
            Bosses:sendMessages()
            Bosses:eek:penTp()
        end
    end
end

function Bosses:sendMessages()
    Game.broadcastMessage(Bosses.mensagemUm)
    addEvent(Game.broadcastMessage, 5 * 60 * 1000, Bosses.mensagemDois)
    addEvent(Game.broadcastMessage, 10 * 60 * 1000, Bosses.mensagemTres)
end

function Bosses:removeMonster(id)
    monstro = Monster(id)
    if monstro then
        monstro:getPosition():sendMagicEffect(CONST_ME_POFF)
        monstro:remove()
    end
end
Can do this for TFS 0.X?
 
Lua:
Bosses ={
    bosses = {
        ["morgaroth"] = {hour = 01, tempoMatar = 1}, - somente a hora - em horas
    },
    posNasceBoss = Position(32359, 32187, 7),
    posTpOpen = Position(32362, 32191, 7),
    posDestino = Position(32364, 32187, 7),
    level = {
        active = true,
        levelMin = 150,
    },
    tempoTpAberto = 20, -- Em minutos
    mensagemUm = "[Boss] Trovões, raios e terremotos nas profundezas do continente ... O portal mágico está entrando em colapso!",  -- 15 min
    mensagemDois = "[Boss] Não há mais magia capaz de parar o que está por vir. O portal está completamente aberto!", -- 10 min
    mensagemTres = "[Boss] Cidadãos, cuidado! Uma criatura do mal acaba de escapar do portal.", -- 5 min
    mensagemTpFechar = "[Boss] O teleport irá fechar em 5 minutos e não será possível entrar mais na sala do boss.",
    actionIdTp = 42477,
}

function Bosses:getBossName()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            return index
        end
    end
    return nil
end

function Bosses:penTp()
    local tile = Tile(Bosses.posTpOpen)
    if tile then
        local item = tile:getItemById(1387)
        if item then
            item:getPosition():sendMagicEffect(CONST_ME_POFF)
            item:remove()
        else
            local teleport = Game.createItem(1387, 1, Bosses.posTpOpen)
            if teleport then
                teleport:setActionId(Bosses.actionIdTp)
            end
            addEvent(function()
                Bosses:penTp()
            end, Bosses.tempoTpAberto * 60 * 1000)
            addEvent(Game.broadcastMessage, (Bosses.tempoTpAberto - 5) * 60 * 1000, (Bosses.mensagemTpFechar))
        end
    end
end

function Bosses:checkTime()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            addEvent(function()
                local monster = Game.createMonster(index, Bosses.posNasceBoss)
                monster:setEmblem(GUILDEMBLEM_ENEMY)
                local idMonster = monster:getId()
            end, 10 * 60 * 1000)
            addEvent(function()
                Bosses:removeMonster(idMonster)
            end, v.tempoMatar * 60 * 60 * 1000)
            Bosses:sendMessages()
            Bosses:penTp()
        end
    end
end

function Bosses:sendMessages()
    Game.broadcastMessage(Bosses.mensagemUm)
    addEvent(Game.broadcastMessage, 5 * 60 * 1000, Bosses.mensagemDois)
    addEvent(Game.broadcastMessage, 10 * 60 * 1000, Bosses.mensagemTres)
end

function Bosses:removeMonster(id)
    monstro = Monster(id)
    if monstro then
        monstro:getPosition():sendMagicEffect(CONST_ME_POFF)
        monstro:remove()
    end
end
 
Lua:
Bosses ={
    bosses = {
        ["morgaroth"] = {hour = 01, tempoMatar = 1}, - somente a hora - em horas
    },
    posNasceBoss = Position(32359, 32187, 7),
    posTpOpen = Position(32362, 32191, 7),
    posDestino = Position(32364, 32187, 7),
    level = {
        active = true,
        levelMin = 150,
    },
    tempoTpAberto = 20, -- Em minutos
    mensagemUm = "[Boss] Trovões, raios e terremotos nas profundezas do continente ... O portal mágico está entrando em colapso!",  -- 15 min
    mensagemDois = "[Boss] Não há mais magia capaz de parar o que está por vir. O portal está completamente aberto!", -- 10 min
    mensagemTres = "[Boss] Cidadãos, cuidado! Uma criatura do mal acaba de escapar do portal.", -- 5 min
    mensagemTpFechar = "[Boss] O teleport irá fechar em 5 minutos e não será possível entrar mais na sala do boss.",
    actionIdTp = 42477,
}

function Bosses:getBossName()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            return index
        end
    end
    return nil
end

function Bosses:penTp()
    local tile = Tile(Bosses.posTpOpen)
    if tile then
        local item = tile:getItemById(1387)
        if item then
            item:getPosition():sendMagicEffect(CONST_ME_POFF)
            item:remove()
        else
            local teleport = Game.createItem(1387, 1, Bosses.posTpOpen)
            if teleport then
                teleport:setActionId(Bosses.actionIdTp)
            end
            addEvent(function()
                Bosses:penTp()
            end, Bosses.tempoTpAberto * 60 * 1000)
            addEvent(Game.broadcastMessage, (Bosses.tempoTpAberto - 5) * 60 * 1000, (Bosses.mensagemTpFechar))
        end
    end
end

function Bosses:checkTime()
    for index, v in pairs(Bosses.bosses) do
        if v.hour == tonumber(os.date("%H")) then
            addEvent(function()
                local monster = Game.createMonster(index, Bosses.posNasceBoss)
                monster:setEmblem(GUILDEMBLEM_ENEMY)
                local idMonster = monster:getId()
            end, 10 * 60 * 1000)
            addEvent(function()
                Bosses:removeMonster(idMonster)
            end, v.tempoMatar * 60 * 60 * 1000)
            Bosses:sendMessages()
            Bosses:penTp()
        end
    end
end

function Bosses:sendMessages()
    Game.broadcastMessage(Bosses.mensagemUm)
    addEvent(Game.broadcastMessage, 5 * 60 * 1000, Bosses.mensagemDois)
    addEvent(Game.broadcastMessage, 10 * 60 * 1000, Bosses.mensagemTres)
end

function Bosses:removeMonster(id)
    monstro = Monster(id)
    if monstro then
        monstro:getPosition():sendMagicEffect(CONST_ME_POFF)
        monstro:remove()
    end
end

removing eek the script doesn't show any error, however it doesn't work.

there's a script here on the forum that works, but I was wondering if you can help me implement a teleport?

at birth the boss creates a teleport in the temple and sends it to the "boss room" where it was born.

help me please?

 
Back
Top