function Position:bombermanExplode(defpos, player)
local tile = Tile(self)
local item = tile and tile:getItems() or {}
local cache = BOMBERMAN_MINIGAME.player_cache[player:getId()]
if not cache then
if tile:getItemById(BOMBERMAN_MINIGAME.bomb_id) then
tile:getItemById(BOMBERMAN_MINIGAME.bomb_id):remove(1)
end
return
end
local map = cache.map
self:sendMagicEffect(BOMBERMAN_MINIGAME.explode_effect)
for i = 1, tile:getItemCount() do
if isInArray(BOMBERMAN_MINIGAME.explosive_items, item[i]:getId()) then
addEvent(function()
self:sendMagicEffect(BOMBERMAN_MINIGAME.exploded_item_remove_effect)
table.insert(BOMBERMAN_MINIGAME.items_cache, {itemid = item[i]:getId(), pos = self, map = map})
if item[i] then
item[i]:remove(item[i]:getCount())
end
local rand = math.random(1, 100)
if rand <= BOMBERMAN_MINIGAME.drop_item_chance then
local upgrade = {BOMBERMAN_MINIGAME.speed_up_item, BOMBERMAN_MINIGAME.range_up_item, BOMBERMAN_MINIGAME.bomb_up_item}
upgrade = upgrade[math.random(1, #upgrade)]
local item = Game.createItem(upgrade.itemid, 1, self)
item:setActionId(BOMBERMAN_MINIGAME.movement_actionid)
self:sendMagicEffect(BOMBERMAN_MINIGAME.exploded_upgrade_item_effect)
end
end, BOMBERMAN_MINIGAME.exploded_item_remove_time)
break
elseif defpos == self and item[i]:getId() == BOMBERMAN_MINIGAME.bomb_id then
if item[i] then
item[i]:remove(item[i]:getCount())
end
elseif item[i]:getId() == BOMBERMAN_MINIGAME.bomb_id and defpos ~= self then
if item[i] then
item[i]:remove(item[i]:getCount())
end
self:bombermanParseExplodeArea(player)
elseif isInArray({BOMBERMAN_MINIGAME.speed_up_item.itemid, BOMBERMAN_MINIGAME.range_up_item.itemid, BOMBERMAN_MINIGAME.bomb_up_item.itemid}, item[i]:getId()) then
if item[i] then
item[i]:remove(item[i]:getCount())
end
self:sendMagicEffect(BOMBERMAN_MINIGAME.exploded_upgrade_item_effect)
end
end
local kill = tile:getTopCreature()
local killcache = kill and kill:isPlayer() and BOMBERMAN_MINIGAME.player_cache[kill:getId()] or false
if killcache then
if kill:getId() ~= player:getId() then
cache.kill = cache.kill+1
kill:sendTextMessage(BOMBERMAN_MINIGAME.messages.bomb_death.type, string.format(BOMBERMAN_MINIGAME.messages.bomb_death.msg, player:getName()))
player:sendTextMessage(BOMBERMAN_MINIGAME.messages.bomb_kill.type, string.format(BOMBERMAN_MINIGAME.messages.bomb_kill.msg, kill:getName()))
player:sendChannelMessage("", string.format(BOMBERMAN_MINIGAME.messages.channel_kill.msg, player:getName(), kill:getName()), BOMBERMAN_MINIGAME.messages.channel_kill.type, BOMBERMAN_MINIGAME.channelId)
else
player:sendTextMessage(BOMBERMAN_MINIGAME.messages.bomb_suicide.type, BOMBERMAN_MINIGAME.messages.bomb_suicide.msg)
player:sendChannelMessage("", string.format(BOMBERMAN_MINIGAME.messages.channel_suicide.msg, player:getName()), BOMBERMAN_MINIGAME.messages.channel_suicide.type, BOMBERMAN_MINIGAME.channelId)
end
killcache.death = true
kill:changeSpeed(-kill:getSpeed())
kill:changeSpeed(killcache.speed)
if BOMBERMAN_MINIGAME.spectators then
kill:teleportTo(BOMBERMAN_MINIGAME.maps[map].player_death_spec_pos)
--print("Base Speed 1:", kill:getBaseSpeed())
--kill:changeSpeed(kill:getBaseSpeed())
else
kill:teleportTo(kill:getTown():getTemplePosition())
--print("Base Speed 2:", kill:getBaseSpeed())
kill:bombermanSave() -- cade essa função?
killcache.ingame = false
end
local players = 0
for k, v in pairs(BOMBERMAN_MINIGAME.player_cache) do
if not v.death and v.map == map then
players = players+1
end
end
if players == 1 then
player:sendChannelMessage("", string.format(BOMBERMAN_MINIGAME.messages.channel_winner.msg, player:getName()), BOMBERMAN_MINIGAME.messages.channel_winner.type, BOMBERMAN_MINIGAME.channelId)
for k, v in pairs(BOMBERMAN_MINIGAME.reward) do
player:addItem(v.itemid, v.count)
end
if BOMBERMAN_MINIGAME.spectators then
for k, v in pairs(BOMBERMAN_MINIGAME.player_cache) do
if v.map == map then
Player(k):teleportTo(Player(k):getTown():getTemplePosition())
end
end
else
if BOMBERMAN_MINIGAME.player_cache[player:getId()].ingame then
player:teleportTo(player:getTown():getTemplePosition())
print("Base Speed 4:", player:getBaseSpeed())
end
end
BOMBERMAN_MINIGAME.rebuilding_map = true
addEvent(function()
for k, v in pairs(BOMBERMAN_MINIGAME.items_cache) do
if v.map == map then
local item = Tile(v.pos):getItems()
for i = 1, #item do
if item[i] then
item[i]:remove(item[i]:getCount())
end
end
Game.createItem(v.itemid, 1, v.pos)
BOMBERMAN_MINIGAME.items_cache[k] = nil
end
end
for k, v in pairs(BOMBERMAN_MINIGAME.player_cache) do
if v.map == map then
BOMBERMAN_MINIGAME.player_cache[k] = nil
end
end
BOMBERMAN_MINIGAME.rebuilding_map = false
end, BOMBERMAN_MINIGAME.map_rebuild_time)
end
end
end