Show Content
Spoiler
local bomb = {
itemId = 6576,
plantedItemId = 8058, -- ID do item que representa a bomba plantada (exemplo: uma dinamite acesa)
effectPlace = 3, -- efeito ao plantar a bomba
effectExplosion = 7, -- efeito de explosão
minDamage = 8000,
maxDamage = 15000,
delay = 2000, -- tempo em milissegundos para a explosão
cooldown = 180,
explosionRange = {
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}
}
}
local lastUse = {}
local function explodeBomb(plantPos)
local plantedItem = Tile(plantPos):getItemById(bomb.plantedItemId)
if plantedItem then
plantedItem:remove() -- Remove o item de indicador da bomba antes da explosão
end
for x, row in ipairs(bomb.explosionRange) do
for y, value in ipairs(row) do
if value == 1 then
local explosionPos = Position(plantPos.x + x - 6, plantPos.y + y - 6, plantPos.z)
local tile = Tile(explosionPos)
-- Verifica se o tile não é uma zona de proteção
if tile and not tile:hasFlag(TILESTATE_PROTECTIONZONE) then
explosionPos:sendMagicEffect(bomb.effectExplosion)
local creatures = tile:getCreatures()
if creatures then
for _, creature in ipairs(creatures) do
-- Aplica dano a jogadores e criaturas
local damage = math.random(bomb.minDamage, bomb.maxDamage)
creature:addHealth(-damage)
end
end
end
end
end
end
end
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
-- Verifica se o item está na backpack do jogador
local itemParent = item:getParent()
if not itemParent or itemParent:isTile() then
player:sendCancelMessage("Você só pode usar este item se ele estiver na sua mochila.")
return true
end
local playerId = player:getId()
local currentTime = os.time()
local lastUseTime = player:getStorageValue(1000) -- ID arbitrário para o cooldown
if lastUseTime > 0 and currentTime < lastUseTime + bomb.cooldown then
player:sendCancelMessage("Aguarde antes de usar o rojao explosivo novamente.")
return true
end
player:setStorageValue(1000, currentTime) -- Atualiza o cooldown no storage
local plantPos = player:getPosition()
-- Remove o item corretamente
if not player:removeItem(bomb.itemId, 1) then
player:sendCancelMessage("Você precisa ter um rojao explosivo na sua backpack para joga-lo.")
return true
end
plantPos:sendMagicEffect(bomb.effectPlace)
Game.broadcastMessage(player:getName() .. " jogou um rojao explosivo!", MESSAGE_EVENT_ADVANCE)
-- Cria o item indicador da bomba
Game.createItem(bomb.plantedItemId, 1, plantPos)
-- Agenda a explosão
addEvent(explodeBomb, bomb.delay, plantPos)
return true
end