1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-10 00:43:27 +02:00
ComfyFactorio/modules/scrap_towny_ffa/fish_reproduction.lua
Gerkiz 0837a8d329 scrap towny ffa fixes
Rebase from the running save
2022-03-01 18:55:02 +01:00

76 lines
2.7 KiB
Lua

local Public = {}
local math_random = math.random
local math_floor = math.floor
local Table = require 'modules.scrap_towny_ffa.table'
function Public.reproduce()
local ffatable = Table.get_table()
for _, town_center in pairs(ffatable.town_centers) do
local surface = town_center.market.surface
local position = town_center.market.position
local fishes = surface.find_entities_filtered({name = 'fish', position = position, radius = 27})
if #fishes == 0 then
return
end
if #fishes >= 128 then
return
end
-- pick a random fish
local t = math_random(1, #fishes)
local fish = fishes[t]
-- test against all other fishes
local guppy = false
for i, f in pairs(fishes) do
if i ~= t then
if math_floor(fish.position.x) == math_floor(f.position.x) and math_floor(fish.position.y) == math_floor(f.position.y) then
guppy = true
end
end
end
if guppy == true then
--log("fish spawn {" .. fish.position.x .. "," .. fish.position.y .. "}")
surface.create_entity({name = 'water-splash', position = fish.position})
surface.create_entity({name = 'fish', position = fish.position})
end
end
end
local function on_player_used_capsule(event)
if event.item.name ~= 'raw-fish' then
return
end
local player = game.players[event.player_index]
local surface = player.surface
local position = event.position
local tile = player.surface.get_tile(position.x, position.y)
-- return back some of the health if not healthy
if player.character.health < 250 then
player.surface.play_sound({path = 'utility/armor_insert', position = player.position, volume_modifier = 1})
return
end
-- if using fish on water
if tile.name == 'water'
or tile.name == 'water-green'
or tile.name == 'water-mud'
or tile.name == 'water-shallow'
or tile.name == 'deepwater'
or tile.name == 'deepwater-green'
then
-- get the count of fish in the water nearby and test if can be repopulated
surface.create_entity({name = 'water-splash', position = position})
surface.create_entity({name = 'fish', position = position})
surface.play_sound({path = 'utility/achievement_unlocked', position = player.position, volume_modifier = 1})
return
end
-- otherwise return the fish and make no sound
player.insert({name = 'raw-fish', count = 1})
end
local Event = require 'utils.event'
Event.add(defines.events.on_player_used_capsule, on_player_used_capsule)
return Public