mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-20 03:29:47 +02:00
Merge pull request #412 from ComfyFactory/mtn_v3
Mtn v3 - minor changes
This commit is contained in:
commit
4366b77a13
@ -9,6 +9,7 @@ local Math2D = require 'math2d'
|
||||
local WPT = require 'maps.mountain_fortress_v3.table'
|
||||
local Session = require 'utils.datastore.session_data'
|
||||
local AG = require 'utils.antigrief'
|
||||
local Core = require 'utils.core'
|
||||
local Discord = require 'utils.discord_handler'
|
||||
|
||||
local this = {}
|
||||
@ -434,7 +435,7 @@ local function refresh_main_frame(data)
|
||||
chestitem.enabled = false
|
||||
chestitem.tooltip = '[Antigrief] You have not grown accustomed to this technology yet.'
|
||||
end
|
||||
Gui.set_data(chestitem, {name = nil, unit_number = unit_number, share = source_chest.share.name})
|
||||
Gui.set_data_parent(volatile_tbl, chestitem, {name = nil, unit_number = unit_number, share = source_chest.share.name})
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -724,7 +725,8 @@ local function gui_closed(event)
|
||||
if not data then
|
||||
return
|
||||
end
|
||||
data.frame.destroy()
|
||||
Gui.destroy(data.volatile_tbl)
|
||||
Gui.destroy(data.frame)
|
||||
this.linked_gui[player.name] = nil
|
||||
end
|
||||
end
|
||||
@ -1084,10 +1086,24 @@ Event.add(
|
||||
Gui.on_click(
|
||||
item_name_frame_name,
|
||||
function(event)
|
||||
local data = Gui.get_data(event.element)
|
||||
local player = game.get_player(event.player_index)
|
||||
local player_data = this.linked_gui[player.name]
|
||||
local element = event.element
|
||||
if not player_data then
|
||||
Gui.remove_data_recursively(element)
|
||||
return
|
||||
end
|
||||
local parent = player_data.volatile_tbl
|
||||
if not parent or not parent.valid then
|
||||
Gui.remove_data_recursively(element)
|
||||
return
|
||||
end
|
||||
|
||||
local data = Gui.get_data_parent(parent, element)
|
||||
if not data then
|
||||
return
|
||||
end
|
||||
|
||||
local button = event.button
|
||||
|
||||
local _, _unit_number, share_container = fetch_share(data.share)
|
||||
@ -1095,15 +1111,12 @@ Gui.on_click(
|
||||
local container = fetch_container(data.unit_number)
|
||||
|
||||
if button == defines.mouse_button_type.right then
|
||||
local player = game.get_player(event.player_index)
|
||||
if player and player.valid then
|
||||
Where.create_mini_camera_gui(player, {valid = true, name = share_container.share.name, surface = share_container.chest.surface, position = share_container.chest.position}, 0.7, true)
|
||||
end
|
||||
Where.create_mini_camera_gui(player, {valid = true, name = share_container.share.name, surface = share_container.chest.surface, position = share_container.chest.position}, 0.7, true)
|
||||
return
|
||||
end
|
||||
|
||||
AG.append_scenario_history(event.player, container.chest, event.player.name .. ' linked chest (' .. data.unit_number .. ') with: ' .. share_container.share.name)
|
||||
create_message(event.player, 'Linked chest', container.chest.position, share_container.chest.position)
|
||||
AG.append_scenario_history(player, container.chest, player.name .. ' linked chest (' .. data.unit_number .. ') with: ' .. share_container.share.name)
|
||||
create_message(player, 'Linked chest', container.chest.position, share_container.chest.position)
|
||||
container.linked_to = _unit_number
|
||||
container.chest.link_id = share_container.link_id
|
||||
container.link_id = share_container.link_id
|
||||
@ -1112,6 +1125,9 @@ Gui.on_click(
|
||||
|
||||
this.linked_gui[event.player.name].updated = false
|
||||
refresh_main_frame({unit_number = container.unit_number, player = event.player})
|
||||
if element and element.valid then
|
||||
Gui.remove_data_recursively(element)
|
||||
end
|
||||
end
|
||||
end
|
||||
)
|
||||
@ -1138,6 +1154,18 @@ local function on_player_changed_position(event)
|
||||
end
|
||||
end
|
||||
|
||||
function Public.clear_linked_frames()
|
||||
Core.iter_connected_players(
|
||||
function(player)
|
||||
local data = this.linked_gui[player.name]
|
||||
if data and data.frame and data.frame.valid then
|
||||
data.frame.destroy()
|
||||
end
|
||||
this.linked_gui[player.name] = nil
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
function Public.reset()
|
||||
this.main_containers = {}
|
||||
this.linked_gui = {}
|
||||
|
@ -28,21 +28,22 @@ function Public.blueprint()
|
||||
surface.request_to_generate_chunks({0, 0}, 1)
|
||||
surface.force_generate_chunk_requests()
|
||||
|
||||
local item = surface.create_entity {name = 'item-on-ground', position = position, stack = {name = 'blueprint', count = 1}}
|
||||
if not item then
|
||||
return
|
||||
end
|
||||
|
||||
local ents = surface.find_entities_filtered({type = {'unit-spawner', 'tree'}, area = {{position.x - 70, position.y - 70}, {position.x + 70, position.y + 70}}})
|
||||
local ents = surface.find_entities_filtered({area = {{position.x - 70, position.y - 70}, {position.x + 70, position.y + 70}}})
|
||||
if #ents == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
for _, e in pairs(ents) do
|
||||
if e and e.valid then
|
||||
e.destroy()
|
||||
end
|
||||
end
|
||||
|
||||
local item = surface.create_entity {name = 'item-on-ground', position = position, stack = {name = 'blueprint', count = 1}}
|
||||
if not item then
|
||||
return
|
||||
end
|
||||
|
||||
local success = item.stack.import_stack(bp)
|
||||
if success <= 0 then
|
||||
local ghosts = item.stack.build_blueprint {surface = surface, force = 'player', position = position, force_build = true}
|
||||
|
@ -946,6 +946,7 @@ local function update_raw()
|
||||
collection.gather_time = 0
|
||||
if not collection.gather_time_done then
|
||||
collection.gather_time_done = true
|
||||
LinkedChests.clear_linked_frames()
|
||||
stateful.final_battle = true
|
||||
Public.set('final_battle', true)
|
||||
end
|
||||
|
@ -53,7 +53,7 @@ Event.on_nth_tick(
|
||||
shuffle(area)
|
||||
|
||||
WD.set_spawn_position(area[1])
|
||||
Event.raise(WD.events.on_spawn_unit_group, {fs = true, bypass = true, random_bosses = true})
|
||||
Event.raise(WD.events.on_spawn_unit_group, {fs = true, bypass = true, random_bosses = true, scale = Public.stateful.scale(20, 100)})
|
||||
return
|
||||
end
|
||||
|
||||
@ -65,4 +65,6 @@ Event.on_nth_tick(
|
||||
end
|
||||
)
|
||||
|
||||
Event.add(defines.events.on_pre_player_died, Public.on_pre_player_died)
|
||||
|
||||
return Public
|
||||
|
@ -158,6 +158,67 @@ local move_all_players_token =
|
||||
end
|
||||
)
|
||||
|
||||
local search_corpse_token =
|
||||
Token.register(
|
||||
function(event)
|
||||
local player_index = event.player_index
|
||||
local player = game.get_player(player_index)
|
||||
|
||||
if not player or not player.valid then
|
||||
return
|
||||
end
|
||||
|
||||
local pos = player.position
|
||||
local entities =
|
||||
player.surface.find_entities_filtered {
|
||||
area = {{pos.x - 0.5, pos.y - 0.5}, {pos.x + 0.5, pos.y + 0.5}},
|
||||
name = 'character-corpse'
|
||||
}
|
||||
|
||||
local entity
|
||||
for _, e in ipairs(entities) do
|
||||
if e.character_corpse_tick_of_death then
|
||||
entity = e
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not entity or not entity.valid then
|
||||
return
|
||||
end
|
||||
|
||||
entity.destroy()
|
||||
|
||||
local text = player.name .. "'s corpse was consumed by the biters."
|
||||
|
||||
game.print(text)
|
||||
end
|
||||
)
|
||||
|
||||
local function on_pre_player_died(event)
|
||||
local player_index = event.player_index
|
||||
local player = game.get_player(player_index)
|
||||
|
||||
if not player or not player.valid then
|
||||
return
|
||||
end
|
||||
|
||||
local surface = player.surface
|
||||
|
||||
local map_name = 'boss_room'
|
||||
|
||||
local corpse_removal_disabled = Public.get('corpse_removal_disabled')
|
||||
if corpse_removal_disabled then
|
||||
return
|
||||
end
|
||||
|
||||
if string.sub(surface.name, 0, #map_name) ~= map_name then
|
||||
return
|
||||
end
|
||||
|
||||
Task.set_timeout_in_ticks(5, search_corpse_token, {player_index = player.index})
|
||||
end
|
||||
|
||||
local locomotive_market_pickaxe_token =
|
||||
Token.register(
|
||||
function(count)
|
||||
@ -667,14 +728,18 @@ function Public.migrate_and_create(locomotive)
|
||||
return
|
||||
end
|
||||
local position = locomotive.position
|
||||
local inc = 6
|
||||
local new_position = {x = position.x, y = position.y + inc}
|
||||
|
||||
for _, entity in pairs(carriages) do
|
||||
if entity and entity.valid and entity.unit_number ~= locomotive.unit_number then
|
||||
local new_position = {x = position.x, y = position.y + 5}
|
||||
local new_wagon = surface.create_entity({name = entity.name, position = new_position, force = 'player', defines.direction.north})
|
||||
if new_wagon and new_wagon.valid then
|
||||
position = new_position
|
||||
ICW.migrate_wagon(entity, new_wagon)
|
||||
for index, entity in pairs(carriages) do
|
||||
if index ~= 1 then
|
||||
if entity and entity.valid and entity.unit_number ~= locomotive.unit_number then
|
||||
local new_wagon = surface.create_entity({name = entity.name, position = new_position, force = 'player', defines.direction.north})
|
||||
if new_wagon and new_wagon.valid then
|
||||
inc = inc + 7
|
||||
new_position = {x = position.x, y = position.y + inc}
|
||||
ICW.migrate_wagon(entity, new_wagon)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -874,5 +939,6 @@ Public.apply_startup_settings = apply_startup_settings
|
||||
Public.scale = scale
|
||||
Public.stateful_spawn_points = stateful_spawn_points
|
||||
Public.sizeof_stateful_spawn_points = #stateful_spawn_points
|
||||
Public.on_pre_player_died = on_pre_player_died
|
||||
|
||||
return Public
|
||||
|
@ -108,7 +108,7 @@ local function void_tiles(p)
|
||||
end
|
||||
|
||||
local function enemy_spawn_positions(p)
|
||||
if p.x < 200 and p.x >= -212 then
|
||||
if p.x < 230 and p.x >= -242 then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
@ -233,9 +233,11 @@ function Public.heavy_functions(data)
|
||||
return
|
||||
end
|
||||
|
||||
border_chunk(p, data)
|
||||
oozy_tiles(p, data.seed, data.tiles)
|
||||
draw_rails(data)
|
||||
if p.y < 250 then
|
||||
border_chunk(p, data)
|
||||
oozy_tiles(p, data.seed, data.tiles)
|
||||
draw_rails(data)
|
||||
end
|
||||
end
|
||||
|
||||
return Public
|
||||
|
@ -220,6 +220,7 @@ function Public.reset_main_table()
|
||||
redraw_mystical_chest_cost = 3000
|
||||
}
|
||||
this.collapse_grace = true
|
||||
this.corpse_removal_disabled = false
|
||||
this.locomotive_biter = nil
|
||||
this.disconnect_wagon = false
|
||||
this.collapse_amount = false
|
||||
|
@ -8,8 +8,6 @@ local Event = require 'utils.event'
|
||||
local LootDrop = require 'modules.mobs_drop_loot'
|
||||
local WD = require 'modules.wave_defense.table'
|
||||
local Global = require 'utils.global'
|
||||
local Task = require 'utils.task'
|
||||
local Token = require 'utils.token'
|
||||
|
||||
local floor = math.floor
|
||||
local insert = table.insert
|
||||
@ -90,20 +88,6 @@ local entity_types = {
|
||||
['unit-spawner'] = true
|
||||
}
|
||||
|
||||
local function clear_unit_from_tbl(unit_number)
|
||||
if this.biter_health_boost_units[unit_number] then
|
||||
this.biter_health_boost_units[unit_number] = nil
|
||||
end
|
||||
end
|
||||
|
||||
local removeUnit =
|
||||
Token.register(
|
||||
function(data)
|
||||
local unit_number = data.unit_number
|
||||
clear_unit_from_tbl(unit_number)
|
||||
end
|
||||
)
|
||||
|
||||
local function loaded_biters(event)
|
||||
local cause = event.cause
|
||||
local entity = event.entity
|
||||
@ -379,7 +363,7 @@ local function on_entity_died(event)
|
||||
local wave_count = WD.get_wave()
|
||||
|
||||
if health_pool then
|
||||
Task.set_timeout_in_ticks(30, removeUnit, {unit_number = unit_number})
|
||||
this.biter_health_boost_units[unit_number] = nil
|
||||
if health_pool[3] and health_pool[3].healthbar_id then
|
||||
if this.enable_boss_loot then
|
||||
if random(1, 128) == 1 then
|
||||
|
@ -709,15 +709,11 @@ function Public.extra_settings(player)
|
||||
|
||||
Gui.set_data(save_button, data)
|
||||
|
||||
if not main_frame or not main_frame.valid then
|
||||
return
|
||||
end
|
||||
|
||||
player.opened = main_frame
|
||||
if not main_frame or not main_frame.valid then
|
||||
return
|
||||
end
|
||||
main_frame.auto_center = true
|
||||
player.opened = main_frame
|
||||
end
|
||||
|
||||
function Public.settings_tooltip(player)
|
||||
|
@ -1141,18 +1141,20 @@ local function spawn_unit_group(fs, only_bosses)
|
||||
end
|
||||
else
|
||||
event_data.boss_wave = true
|
||||
local count = 30
|
||||
local count = fs.scale or 30
|
||||
event_data.spawn_count = count
|
||||
for _ = 1, count, 1 do
|
||||
local random_boss = (random(1, 100) == 1)
|
||||
local random_boss = (random(1, 60) == 1)
|
||||
local biter = spawn_biter(surface, spawn_position, fs, random_boss, unit_settings)
|
||||
if not biter then
|
||||
Public.debug_print('spawn_unit_group - No biter was found?')
|
||||
break
|
||||
end
|
||||
unit_group.add_member(biter)
|
||||
if random_boss then
|
||||
raise(Public.events.on_entity_created, {entity = biter, boss_unit = true, target = target})
|
||||
end
|
||||
end
|
||||
Public.set('boss_wave', false)
|
||||
end
|
||||
|
||||
generated_units.unit_groups[unit_group.group_number] = unit_group
|
||||
|
@ -101,6 +101,35 @@ function Public.set_data(element, value)
|
||||
end
|
||||
local set_data = Public.set_data
|
||||
|
||||
-- Associates data with the LuaGuiElement. If data is nil then removes the data
|
||||
function Public.set_data_parent(parent, element, value)
|
||||
local player_index = parent.player_index
|
||||
local values = data[player_index]
|
||||
|
||||
if value == nil then
|
||||
if not values then
|
||||
return
|
||||
end
|
||||
|
||||
values[parent.index] = nil
|
||||
|
||||
if next(values) == nil then
|
||||
data[player_index] = nil
|
||||
end
|
||||
else
|
||||
if not values then
|
||||
values = {}
|
||||
data[player_index] = values
|
||||
end
|
||||
|
||||
if not values[parent.index] then
|
||||
values[parent.index] = {}
|
||||
end
|
||||
|
||||
values[parent.index][element.index] = value
|
||||
end
|
||||
end
|
||||
|
||||
-- Gets the Associated data with this LuaGuiElement if any.
|
||||
function Public.get_data(element)
|
||||
if not element then
|
||||
@ -117,6 +146,30 @@ function Public.get_data(element)
|
||||
return values[element.index]
|
||||
end
|
||||
|
||||
-- Gets the Associated data with this LuaGuiElement if any.
|
||||
function Public.get_data_parent(parent, element)
|
||||
if not parent then
|
||||
return
|
||||
end
|
||||
if not element then
|
||||
return
|
||||
end
|
||||
|
||||
local player_index = parent.player_index
|
||||
|
||||
local values = data[player_index]
|
||||
if not values then
|
||||
return nil
|
||||
end
|
||||
|
||||
values = values[parent.index]
|
||||
if not values then
|
||||
return nil
|
||||
end
|
||||
|
||||
return values[element.index]
|
||||
end
|
||||
|
||||
-- Adds a gui that is alike the factorio native gui.
|
||||
function Public.add_main_frame_with_toolbar(player, align, set_frame_name, set_settings_button_name, close_main_frame_name, name, info, inside_table_count)
|
||||
if not align then
|
||||
|
Loading…
x
Reference in New Issue
Block a user