--luacheck: ignore local Public = {} local math_random = math.random function Public.add_unit(force_name, unit_number, unit) global.map_forces[force_name].units[unit_number] = unit end function Public.on_buy_wave(surface, force, tier) if tier == 'red' or tier == 'green' then local random_biter = math.random(5, 9) for i = 1, random_biter, 1 do local unit = game.surfaces[surface].create_entity { name = 'small-biter', position = {global.map_forces[force].spawn.x + i, global.map_forces[force].spawn.y}, force = game.forces[force] } global.map_forces[force].units[unit.unit_number] = unit end for i = 1, 10 - random_biter, 1 do local unit = game.surfaces[surface].create_entity { name = 'small-spitter', position = {global.map_forces[force].spawn.x + i, global.map_forces[force].spawn.y}, force = game.forces[force] } global.map_forces[force].units[unit.unit_number] = unit end return end if tier == 'grey' then local random_biter = math.random(5, 9) for i = 1, random_biter, 1 do local unit = game.surfaces[surface].create_entity { name = 'medium-biter', position = {global.map_forces[force].spawn.x + i, global.map_forces[force].spawn.y}, force = game.forces[force] } global.map_forces[force].units[unit.unit_number] = unit end for i = 1, 10 - random_biter, 1 do local unit = game.surfaces[surface].create_entity { name = 'medium-spitter', position = {global.map_forces[force].spawn.x + i, global.map_forces[force].spawn.y}, force = game.forces[force] } global.map_forces[force].units[unit.unit_number] = unit end return end if tier == 'blue' then local random_biter = math.random(5, 9) for i = 1, random_biter, 1 do local unit = game.surfaces[surface].create_entity { name = 'big-biter', position = {global.map_forces[force].spawn.x + i, global.map_forces[force].spawn.y}, force = game.forces[force] } global.map_forces[force].units[unit.unit_number] = unit end for i = 1, 10 - random_biter, 1 do local unit = game.surfaces[surface].create_entity { name = 'big-spitter', position = {global.map_forces[force].spawn.x + i, global.map_forces[force].spawn.y}, force = game.forces[force] } global.map_forces[force].units[unit.unit_number] = unit end return end if tier == 'purple' or tier == 'yellow' then local random_biter = math.random(5, 9) for i = 1, random_biter, 1 do local unit = game.surfaces[surface].create_entity { name = '-biter', position = {global.map_forces[force].spawn.x + i, global.map_forces[force].spawn.y}, force = game.forces[force] } global.map_forces[force].units[unit.unit_number] = unit end for i = 1, 10 - random_biter, 1 do local unit = game.surfaces[surface].create_entity { name = 'behemoth-spitter', position = {global.map_forces[force].spawn.x + i, global.map_forces[force].spawn.y}, force = game.forces[force] } global.map_forces[force].units[unit.unit_number] = unit end return end end function Public.buy_worm_turret(surface, force_name, dist, player, player_nb_sp, nb_sp_price, sp) local size_table_turret = #global.map_forces[force_name].worm_turrets_positions if dist == 'All' then local player_sp_count = player_nb_sp count = 0 for k, pos in pairs(global.map_forces[force_name].worm_turrets_positions) do local turret = surface.find_entity('small-worm-turret', {pos.x, pos.y}) if turret == nil and player_sp_count >= nb_sp_price then local turrets = surface.find_entities_filtered {position = {pos.x, pos.y}, name = {'medium-worm-turret', 'big-worm-turret', 'behemoth-worm-turret'}} if #turrets == 0 then local position = surface.find_non_colliding_position('big-worm-turret', {pos.x, pos.y}, 5, 1) if not position then position = {pos.x, pos.y} end surface.create_entity({name = 'small-worm-turret', position = {position.x, position.y}, force = force_name}) player.remove_item({name = sp, count = nb_sp_price}) player_sp_count = player_sp_count - nb_sp_price count = count + 1 end end end if count == 0 then return false else return true end elseif dist == 'Farthest' then for i = size_table_turret, 1, -1 do local pos = global.map_forces[force_name].worm_turrets_positions[i] local turret = surface.find_entity('small-worm-turret', {pos.x, pos.y}) if turret == nil and player_nb_sp >= nb_sp_price then local turrets = surface.find_entities_filtered {position = {pos.x, pos.y}, name = {'medium-worm-turret', 'big-worm-turret', 'behemoth-worm-turret'}} if #turrets == 0 then local position = surface.find_non_colliding_position('big-worm-turret', {pos.x, pos.y}, 5, 1) if not position then position = {pos.x, pos.y} end surface.create_entity({name = 'small-worm-turret', position = {position.x, position.y}, force = force_name}) player.remove_item({name = sp, count = nb_sp_price}) return true end end end return false elseif dist == 'Closest' then for i = 1, size_table_turret, 1 do local pos = global.map_forces[force_name].worm_turrets_positions[i] local turret = surface.find_entity('small-worm-turret', {pos.x, pos.y}) if turret == nil and player_nb_sp >= nb_sp_price then local turrets = surface.find_entities_filtered {position = {pos.x, pos.y}, name = {'medium-worm-turret', 'big-worm-turret', 'behemoth-worm-turret'}} if #turrets == 0 then local position = surface.find_non_colliding_position('big-worm-turret', {pos.x, pos.y}, 5, 1) if not position then position = {pos.x, pos.y} end surface.create_entity({name = 'small-worm-turret', position = {position.x, position.y}, force = force_name}) player.remove_item({name = sp, count = nb_sp_price}) return true end end end return false end end function Public.upgrade_worm_turret(surface, force_name, dist, player, player_nb_sp, nb_sp_price, sp, tier) local table_upgrade = { ['medium-worm-turret'] = 'small-worm-turret', ['big-worm-turret'] = 'medium-worm-turret', ['behemoth-worm-turret'] = 'big-worm-turret' } local size_table_turret = #global.map_forces[force_name].worm_turrets_positions print(size_table_turret) if dist == 'All' then local player_sp_count = player_nb_sp count = 0 for k, pos in pairs(global.map_forces[force_name].worm_turrets_positions) do local turret = surface.find_entity(table_upgrade[tier], {pos.x, pos.y}) if turret ~= nil and player_nb_sp >= nb_sp_price then turret.destroy() local position = surface.find_non_colliding_position('big-worm-turret', {pos.x, pos.y}, 5, 1) if not position then position = {pos.x, pos.y} end surface.create_entity({name = tier, position = {position.x, position.y}, force = force_name}) player.remove_item({name = sp, count = nb_sp_price}) player_sp_count = player_sp_count - nb_sp_price count = count + 1 else end end if count == 0 then return false else return true end elseif dist == 'Farthest' then for i = #global.map_forces[force_name].worm_turrets_positions, 1, -1 do local turret = surface.find_entity(table_upgrade[tier], {global.map_forces[force_name].worm_turrets_positions[i].x, global.map_forces[force_name].worm_turrets_positions[i].y}) if turret ~= nil and player_nb_sp >= nb_sp_price then turret.destroy() local position = surface.find_non_colliding_position( 'big-worm-turret', {global.map_forces[force_name].worm_turrets_positions[i].x, global.map_forces[force_name].worm_turrets_positions[i].y}, 5, 1 ) if not position then position = {pos.x, pos.y} end surface.create_entity({name = tier, position = {position.x, position.y}, force = force_name}) player.remove_item({name = sp, count = nb_sp_price}) return true else end end return false elseif dist == 'Closest' then for k, pos in pairs(global.map_forces[force_name].worm_turrets_positions) do local turret = surface.find_entity(table_upgrade[tier], {pos.x, pos.y}) if turret ~= nil and player_nb_sp >= nb_sp_price then turret.destroy() local position = surface.find_non_colliding_position('big-worm-turret', {pos.x, pos.y}, 5, 1) if not position then position = {pos.x, pos.y} end surface.create_entity({name = tier, position = {position.x, position.y}, force = force_name}) player.remove_item({name = sp, count = nb_sp_price}) return true else end end return false end end function Public.buy_extra_life(force_name) local force_index = game.forces[force_name].index global.biter_reanimator.forces[force_index] = global.biter_reanimator.forces[force_index] + 1 end return Public