121 lines
6.0 KiB
Lua

local observer = require("observer")
local radar = require("radar")
local radar_ui = require("radar_ui")
local drop_zone = require("drop_zone")
local base = require("base")
local setup = require("setup")
local player_system = require("player")
local roster = require("roster")
-- One registration per Factorio event lets the separate systems share events safely.
script.on_init(function() setup.on_init(observer); player_system.on_init() end)
script.on_configuration_changed(function(event)
setup.on_configuration_changed(event)
for _, player in pairs(game.players) do
roster.create_button(player)
radar_ui.create_button(player)
base.player_color(player)
end
end)
script.on_event(defines.events.on_player_created, function(event)
player_system.on_player_created(event)
roster.create_button(game.get_player(event.player_index))
radar_ui.create_button(game.get_player(event.player_index))
setup.on_player_created(event)
end)
script.on_event(defines.events.on_player_joined_game, function(event)
player_system.on_player_joined_game(event)
roster.create_button(game.get_player(event.player_index))
radar_ui.create_button(game.get_player(event.player_index))
base.player_color(game.get_player(event.player_index))
setup.on_player_joined_game(event)
end)
script.on_event(defines.events.on_player_respawned, function(event)
player_system.on_player_respawned(event)
base.on_player_respawned(event)
setup.on_player_respawned(event)
end)
script.on_event(defines.events.on_player_changed_surface, function(event)
player_system.on_player_changed_surface(event)
drop_zone.on_player_changed_surface(event)
radar_ui.on_player_changed_surface(event)
end)
script.on_event(defines.events.on_space_platform_changed_state, radar_ui.on_platform_state_changed)
script.on_event(defines.events.on_chunk_generated, setup.on_chunk_generated)
script.on_event(defines.events.on_built_entity, function(event)
radar.on_built_entity(event)
base.on_built_entity(event)
end)
script.on_event(defines.events.on_robot_built_entity, radar.on_built_entity)
script.on_event(defines.events.on_space_platform_built_entity, radar.on_built_entity)
script.on_event(defines.events.script_raised_built, radar.on_built_entity)
script.on_event(defines.events.script_raised_revive, radar.on_built_entity)
script.on_event(defines.events.on_entity_cloned, radar.on_built_entity)
-- One handler per nth-tick period: jam check and radar power sampling share 60.
script.on_nth_tick(60, function()
radar.on_jam_tick()
radar.on_power_sample_tick()
end)
script.on_event(defines.events.on_entity_died, function(event)
radar.on_entity_removed(event)
base.on_entity_died(event)
end)
script.on_event(defines.events.on_player_mined_entity, radar.on_entity_removed)
script.on_event(defines.events.on_robot_mined_entity, radar.on_entity_removed)
script.on_event(defines.events.on_space_platform_mined_entity, radar.on_entity_removed)
script.on_event(defines.events.script_raised_destroy, radar.on_entity_removed)
script.on_event(defines.events.on_player_died, base.on_player_died)
script.on_event(defines.events.on_pre_player_mined_item, base.on_pre_player_mined_item)
script.on_event(defines.events.on_robot_pre_mined, base.on_robot_pre_mined)
script.on_nth_tick(1800, radar.on_orbital_scan_tick)
script.on_nth_tick(12, radar.on_scan_queue_tick)
-- No writable "save loaded" event exists; a local flag on the permanent on_tick
-- handler fires once per load. on_nth_tick(1) cannot be used: registering a
-- transient handler makes join-time event checks fail for multiplayer clients.
script.on_event(defines.events.on_cargo_pod_finished_ascending, drop_zone.on_cargo_pod_finished_ascending)
script.on_event(defines.events.on_entity_damaged, drop_zone.on_entity_damaged)
script.on_event(defines.events.on_lua_shortcut, drop_zone.on_lua_shortcut)
script.on_event(defines.events.on_player_selected_area, drop_zone.on_player_selected_area)
script.on_event(defines.events.on_gui_click, function(event)
if not (observer.on_gui_click(event) or roster.on_gui_click(event) or radar_ui.on_gui_click(event)) then
setup.on_gui_click(event)
end
end)
script.on_event("planet-pvp-toggle-observer", function(event)
local player = game.get_player(event.player_index)
if player then observer.toggle_window(player) end
end)
script.on_nth_tick(5, observer.on_tick)
script.on_nth_tick(15, radar_ui.on_ui_tick)
script.on_nth_tick(120, function()
player_system.on_light_tick()
for _, player in pairs(game.connected_players) do base.player_color(player) end
end)
local save_loaded_fired = false
script.on_event(defines.events.on_tick, function(event)
if not save_loaded_fired then
save_loaded_fired = true
setup.on_save_loaded()
end
base.on_tick(event)
drop_zone.on_tick(event)
end)
commands.add_command("basestatus", "Show base count for every force", base.status_command)
commands.add_command("ping", nil, function(command)
local player = game.players[command.player_index]
if not (player and player.valid and player.character) then return end
for _, mode in pairs({"game", "chart"}) do
rendering.draw_circle{color = {r = 1, g = 1, b = 0, a = 1}, radius = 3, width = 10, filled = false, target = player.position, surface = player.surface, players = player.force.players, time_to_live = 300, render_mode = mode}
rendering.draw_text{text = "PING", surface = player.surface, target = {position = player.position, offset = {0, -2.5}}, color = {r = 1, g = 1, b = 0, a = 1}, players = player.force.players, alignment = "center", scale = 3, time_to_live = 300, render_mode = mode}
end
for _, target in pairs(player.force.players) do if target.valid then target.print(player.name .. " pinged their location") end end
end)
commands.add_command("observer", "Become an observer", function(command)
local player = game.get_player(command.player_index)
if not player then return end
if not player.admin then player.print("Only admins can become observers."); return end
observer.enable(player)
end)