-- Incêndio script by Pivigu - Pivigu World OTServ, em breve!
function onThink(interval, lastExecution)
-- Configuração
local fromArea = {x = 168, y = 735, z = 7} -- Área que o incêndio vai acontecer.
local toArea = {x = 200, y = 772, z = 7} -- Área que o incêndio vai acontecer.
local chanceRaid = 30 -- Chance do incêndio acontecer, em porcentagem.
local intervaloExe = 60 -- Intervalo de execução, em minutos. No exemplo 60*12, ela só poderá ocorrer 7 dias após a última execucao.
-- Monstros
local bossName = "The Incendier" -- Nome do Boss a ser sumonado.
local monsterMinions = {"Fire Elemental", "Fire Devil"} -- Monstros que também serão sumonados.
local monsterAmount = 28 -- Quantidade de monstros a serem sumonados (Múltiplos de 4, de preferência).
local florestaName = "Nargor" -- Nome da floresta ou da cidade onde a floresta se localiza.
-- M = Mensagem, T = Tempo em segundos
local BroadCast1M = ("A temperatura está muito quente na floresta de " .. florestaName .. ".")
local BroadCast1T = 1
local BroadCast2M = ("Um incêndio está começando em " .. florestaName .. "!")
local BroadCast2T = 3
local BroadCast3M = ("Parece que um monstro muito quente está botando fogo em tudo o que vê!")
local BroadCast3T = 6
local BroadCast4M = (bossName .. " foi visto em " .. florestaName .. ". Não se aproxime da floresta. Tudo está pegando fogo!")
local BroadCast4T = 9
-- Incêndio
local idArvoresG = {2700, 2708, 2701, 2702, 2707} -- ID de árvores grandes para FireWall.
local idArvoresP = {2767, 2703, 2768} -- ID de árvores pequenas para FireField. (2703 considerada pequena)
local FFID = {1487,1488,1489} -- ID dos Fire Fields.
local FWID = {5063} -- ID dos FireWalls.
local fogoNoChao = TRUE -- Adicionar fogo no chão? TRUE = Verdadeiro, FALSE = Falso
local terraID = {103} -- ID dos chãos a pegar fogo
for iid = 4526, 4541 do -- Adicionando as gramas ao terraID
terraID[table.maxn(terraID) + 1] = iid
end
local chanceFogo = 65 -- Chance de pegar fogo.
-- Fim de Configuracao
-- Verificar Erros
if math.random(1, 100) > chanceRaid then
return TRUE
end
if os.time(t) - getGlobalStorageValue(5001) < intervaloExe*60 then
-- debugPrint("doIncendio: Execução cancelada pelo intervalo de execuções.")
return TRUE
end
if toArea.x <= fromArea.x or toArea.y <= fromArea.y or toArea.z < fromArea.z then
debugPrint("doIncendio: Erro na Area.")
return FALSE
end
if BroadCast4T <= BroadCast3T or BroadCast3T <= BroadCast2T or BroadCast2T <= BroadCast1T then
debugPrint("doIncendio: Erro no tempo dos Broadcasts.")
return FALSE
end
if chanceFogo < 1 then
chanceFogo = 0
end
local summonArea = 0
local allArea = {}
local getChao = 0
local getItem = 0
for xx = fromArea.x, toArea.x do
for yy = fromArea.y, toArea.y do
for zz = fromArea.z, toArea.z do
getChao = getThingFromPos({x = xx, y = yy, z = zz, stackpos = STACKPOS_GROUND})
getItem = getThingFromPos({x = xx, y = yy, z = zz, stackpos = 1})
for ch = 1, table.maxn(terraID) do
if terraID[ch] == getChao.itemid and (getItem.itemid == 0 or getItem.itemid == 6216 or getItem.itemid == 6217 or getItem.itemid == 6218 or getItem.itemid == 6219) then
allArea[table.maxn(allArea) + 1] = {x = xx, y = yy, z = zz}
end
end
end
end
end
-- Fim de verificar erros
-- Adicionando eventos
addEvent(BroadCast, BroadCast1T*1000, BroadCast1M, monsterAmount, monsterMinions, allArea)
addEvent(BroadCast, BroadCast2T*1000, BroadCast2M, monsterAmount, monsterMinions, allArea)
addEvent(BroadCast, BroadCast3T*1000, BroadCast3M, monsterAmount, monsterMinions, allArea)
addEvent(BroadCastBoss, BroadCast4T*1000, BroadCast4M, monsterAmount, monsterMinions, bossName, allArea)
addEvent(doIncendio, BroadCast4T*1002, fromArea, toArea, idArvoresG, idArvoresP, fogoNoChao, chanceFogo, FFID, FWID, terraID)
-- Fim de Adicionando eventos
-- debugPrint("doIncendio: Incendio iniciado.")
setGlobalStorageValue(5001, lastExecution)
return TRUE
end
function BroadCast(BroadCastM, Amount, Monsters, allArea)
doBroadcastMessage(BroadCastM,22)
local summonPos = {x = 0, y = 0, z = 0}
local monsterName = 0
for i = 1, Amount / 4 do
monsterName = Monsters[math.random(1, table.maxn(Monsters))]
summonPos = allArea[math.random(1, table.maxn(allArea))]
doSummonCreature(monsterName, summonPos)
end
return TRUE
end
function BroadCastBoss(BroadCastM, Amount, Monsters, BossName, allArea)
doBroadcastMessage(BroadCastM,22)
local summonPos = {x = 0, y = 0, z = 0}
local monsterName = 0
for i = 1, Amount / 4 do
monsterName = Monsters[math.random(1, table.maxn(Monsters))]
summonPos = allArea[math.random(1, table.maxn(allArea))]
doSummonCreature(monsterName, summonPos)
end
monsterName = Monsters[math.random(1, table.maxn(Monsters))]
summonPos = allArea[math.random(1, table.maxn(allArea))]
doSummonCreature(BossName, summonPos)
return TRUE
end
-- Incendios
function doIncendio(fromArea, toArea, agID, apID, FChao, Chance, FireFieldID, FireWallsID, chaoLib)
local arvoreID = 0
local posNow = {x = 0, y = 0, z = 0}
local randomFF = math.random(1, table.maxn(FireFieldID))
local chaoID = 0
for t = fromArea.z, toArea.z do -- Área
for n = fromArea.y, toArea.y do
for i = fromArea.x, toArea.x do
posNow = {x = i, y = n, z = t}
for ar = 1, table.maxn(apID) do -- Nas árvores pequenas FF
arvoreID = getThingFromPos({x = i, y = n, z = t, stackpos = 1})
if arvoreID.itemid == apID[ar] then
if Chance >= math.random(1,100) then
randomFF = math.random(1, table.maxn(FireFieldID))
doCreateItem(FireFieldID[randomFF], 1, posNow)
end
end
end
for ar = 1, table.maxn(agID) do -- Nas árvores grandes FireWall
arvoreID = getThingFromPos({x = i, y = n, z = t, stackpos = 1})
if arvoreID.itemid == agID[ar] then
if Chance / 4 >= math.random(1,100) then
randomFF = math.random(1, table.maxn(FireFieldID))
doCreateItem(FireFieldID[randomFF], 1, posNow)
end
if Chance >= math.random(1,100) then
posNow = {x = i, y = n, z = t}
randomFF = math.random(1, table.maxn(FireWallsID))
doCreateItem(FireWallsID[randomFF], 1, posNow)
end
end
end
if FChao == TRUE then -- FF no Chão
arvoreID = getThingFromPos({x = i, y = n, z = t, stackpos = 1})
chaoID = getThingFromPos({x = i, y = n, z = t, stackpos = STACKPOS_GROUND})
if arvoreID.itemid == 0 then
if Chance >= math.random(1,100) then
for ch = 1, table.maxn(chaoLib) do
if chaoID.itemid == chaoLib[ch] then
posNow = {x = i, y = n, z = t}
randomFF = math.random(1, table.maxn(FireFieldID))
doCreateItem(FireFieldID[randomFF], 1, posNow)
end
end
end
end
end
end -- Área
end
end
return TRUE
end