Aleksei-bird 7c9c708c92 Первый фикс
Пачки некоторых позиций увеличены
2024-03-01 20:54:33 +03:00

165 lines
5.3 KiB
Lua

local mod_gui = require("mod-gui")
local Event = require("__stdlib__/stdlib/event/event")
local Changes = require("__stdlib__/stdlib/event/changes")
local UPGui = require("upgrade-planner/gui")
local UPGuiEvent = require("upgrade-planner/gui-events")
local UPEntityUpgrade = require("upgrade-planner/entity-upgrade")
-----------------------------------------------
-- Initialization
-----------------------------------------------
Changes.register("mod_versions", "upgrade-planner/mod-upgrade")
local function global_init()
global.current_config = {}
global["config-tmp"] = {}
global.storage = {}
global.storage_index = {}
global.default_bot = {}
end
local function player_init(player_idx)
global.default_bot[player_idx] = global.default_bot[player_idx] or false
global.current_config[player_idx] = global.current_config[player_idx] or {}
global.storage_index[player_idx] = global.storage_index[player_idx] or 1
global.storage[player_idx] = global.storage[player_idx] or {}
end
Event.register(Event.core_events.init, function()
global_init()
for player_idx, player in pairs(game.players) do
UPGui.init(player)
player_init(player_idx)
end
end)
-- Verify if all items selected for upgrade still exists (e.g. modded items)
local function verify_all_configs()
local items = game.item_prototypes
local verify_config = function(config)
local changed = false
for k, entry in pairs(config) do
local to = items[entry.to]
local from = items[entry.from]
if not (to and from) then
log("Deleted invalid config: " .. k .. serpent.line(entry))
entry[k] = nil
changed = true
end
end
return changed
end
for name, config in pairs(global.current_config) do
local changed = verify_config(config)
if changed then
UPGui.open_frame(game.players[name])
UPGui.open_frame(game.players[name])
end
end
for _, config in pairs(global["config-tmp"]) do verify_config(config) end
for _, storage in pairs(global.storage) do
for _, config in pairs(storage) do verify_config(config) end
end
end
Event.register(Event.core_events.on_configuration_changed, function(event)
if not event or not event.mod_changes then return end
verify_all_configs()
end)
Event.register(defines.events.on_player_joined_game, function(event)
local player = game.players[event.player_index]
UPGui.init(player)
player_init(event.player_index)
end)
Event.register(defines.events.on_pre_player_removed, function(event)
global.default_bot[event.player_index] = nil
global.current_config[event.player_index] = nil
global.storage_index[event.player_index] = nil
global.storage[event.player_index] = nil
end)
-----------------------------------------------
-- GUI events
-----------------------------------------------
UPGuiEvent.register()
-----------------------------------------------
-- Upgrade handling
-----------------------------------------------
Event.register(defines.events.on_player_selected_area, function(event)
if global.default_bot[event.player_index] then
UPEntityUpgrade.upgrade_area_bot(event)
else
UPEntityUpgrade.upgrade_area_player(event)
end
end)
Event.register(defines.events.on_player_alt_selected_area, function(event)
if global.default_bot[event.player_index] then
UPEntityUpgrade.upgrade_area_player(event)
else
UPEntityUpgrade.upgrade_area_bot(event)
end
end)
-----------------------------------------------
-- Key bindings
-----------------------------------------------
Event.register("upgrade-planner-hide", function(event)
local player = game.players[event.player_index]
local button_flow = mod_gui.get_button_flow(player)
if button_flow["upgrade_planner_config_button"] then
button_flow["upgrade_planner_config_button"].visible =
not button_flow.upgrade_planner_config_button.visible
return
end
local button = button_flow.add {
type = "sprite-button",
name = "upgrade_planner_config_button",
style = mod_gui.button_style,
sprite = "item/upgrade-builder",
tooltip = {"upgrade-planner.button-tooltip"},
}
button.visible = true
end)
--- Clean up additional upgrade planner items
-- Whenever more than one Upgrade planner is in a player inventory, destroy it.
-- If a planner lands in the trash inventory, destroy it.
Event.register({
defines.events.on_player_trash_inventory_changed,
defines.events.on_player_main_inventory_changed,
}, function(event)
local player = game.players[event.player_index]
local is_trash = event.name ==
defines.events.on_player_trash_inventory_changed
local inventory
if is_trash then
inventory = player.get_inventory(defines.inventory.character_trash)
elseif is_trash == false then
inventory = player.get_main_inventory()
else
return
end
if game.item_prototypes["upgrade-builder"] then
if is_trash then
local upgrade_builder = inventory.find_item_stack("upgrade-builder")
if upgrade_builder then upgrade_builder.clear() end
else
local cnt = inventory.get_item_count("upgrade-builder")
if cnt > 1 then
inventory.remove {name = "upgrade-builder", count = cnt - 1}
end
end
end
end)
Event.register(defines.events.on_player_dropped_item, function(event)
local stack = event.entity and event.entity.stack
if (stack.name == "upgrade-builder") then event.entity.destroy() end
end)