1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-03-17 20:58:13 +02:00

mtn fortress fixes

This commit is contained in:
Gerkiz 2020-07-07 16:30:04 +02:00
parent bb52c38a0c
commit e24dc9ee92
6 changed files with 138 additions and 54 deletions

View File

@ -250,6 +250,7 @@ local function angry_tree(entity, cause)
if entity.type ~= 'tree' then
return
end
if math.abs(entity.position.y) < Terrain.level_depth then
return
end
@ -338,6 +339,11 @@ local function on_player_mined_entity(event)
this.mined_scrap = this.mined_scrap + 1
Mining.on_player_mined_entity(event)
give_coin(player)
if Locomotive.is_around_train(entity) then
return
end
if math.random(1, 32) == 1 then
hidden_biter(event.entity)
entity.destroy()

View File

@ -9,8 +9,6 @@ local Public = {}
local magic_crafters_per_tick = 3
local magic_fluid_crafters_per_tick = 8
local floor = math.floor
local round = math.round
local table_shuffle_table = table.shuffle_table
local function fast_remove(tbl, index)
local count = #tbl
@ -196,30 +194,6 @@ local function add_magic_crafter_output(entity, output, distance)
end
end
function roll(budget, item_name)
if not budget then
return
end
budget = math.floor(budget)
if budget == 0 then
return
end
local final_stack_set
local final_stack_set_worth = 0
for _ = 1, 5, 1 do
local item_stack_set, item_stack_set_worth = roll_item_stacks(budget, item_name)
if item_stack_set_worth > final_stack_set_worth or item_stack_set_worth == budget then
final_stack_set = item_stack_set
final_stack_set_worth = item_stack_set_worth
end
end
return final_stack_set
end
local function tick()
do_refill_turrets()
do_magic_crafters()

View File

@ -103,6 +103,15 @@ local function create_main_frame(player)
label.style.font_color = {r = 0.88, g = 0.88, b = 0.88}
label.style.font = 'default-bold'
label.style.right_padding = 4
line = frame.add({type = 'line', direction = 'vertical'})
line.style.left_padding = 4
line.style.right_padding = 4
label = frame.add({type = 'label', caption = ' ', name = 'chest_upgrades'})
label.style.font_color = {r = 0.88, g = 0.88, b = 0.88}
label.style.font = 'default-bold'
label.style.right_padding = 4
end
local function on_player_joined_game(event)
@ -288,6 +297,9 @@ function Public.update_gui(player)
gui.train_upgrades.caption = ' [img=entity.locomotive]: ' .. format_number(this.train_upgrades, true)
gui.train_upgrades.tooltip = 'Amount of train upgrades.'
gui.chest_upgrades.caption = ' [img=entity.steel-chest]: ' .. format_number(this.chest_limit_outside_upgrades, true)
gui.chest_upgrades.tooltip = 'Amount of chests that can be placed near train.'
end
Event.add(defines.events.on_player_joined_game, on_player_joined_game)

View File

@ -91,6 +91,22 @@ local function property_boost(data)
end
end
local function is_around_train(data)
local entity = data.entity
local aura = 60
local loco = data.locomotive.position
local area = {
left_top = {x = loco.x - aura, y = loco.y - aura},
right_bottom = {x = loco.x + aura, y = loco.y + aura}
}
local pos = entity.position
if Math2D.bounding_box.contains_point(area, pos) then
return true
end
return false
end
local function fish_tag()
local this = WPT.get()
if not this.locomotive_cargo then
@ -636,6 +652,14 @@ local function gui_click(event)
local item_count = item.stack * slider_value
if name == 'chest_limit_outside' then
if this.chest_limit_outside_upgrades == 8 then
local main_market_items = WPT.get('main_market_items')
main_market_items['chest_limit_outside'].enabled = false
main_market_items['chest_limit_outside'].tooltip = 'Max limit bought!'
redraw_market_items(data.item_frame, player, data.search_text)
return player.print("You can't purchase more chests.", {r = 0.98, g = 0.66, b = 0.22})
end
player.remove_item({name = item.value, count = item.price})
local message =
@ -1028,6 +1052,7 @@ local function on_built_entity(event)
local chests_linked_to = WPT.get('chests_linked_to')
local chest_limit_outside_upgrades = WPT.get('chest_limit_outside_upgrades')
local chest_created
local increased = false
for k, v in pairs(outside_chests) do
if v and v.valid then
@ -1037,11 +1062,19 @@ local function on_built_entity(event)
return
end
outside_chests[entity.unit_number] = entity
chests_linked_to[train.unit_number].count = linked_to + 1
if not increased then
chests_linked_to[train.unit_number].count = linked_to + 1
chests_linked_to[train.unit_number][entity.unit_number] = true
increased = true
goto continue
end
else
outside_chests[entity.unit_number] = entity
chests_linked_to[train.unit_number] = {count = 1, chest = entity.unit_number}
chests_linked_to[train.unit_number] = {count = 1}
end
::continue::
rendering.draw_text {
text = '',
surface = entity.surface,
@ -1061,7 +1094,9 @@ local function on_built_entity(event)
if next(outside_chests) == nil then
outside_chests[entity.unit_number] = entity
chests_linked_to[train.unit_number] = {count = 1, chest = entity.unit_number}
chests_linked_to[train.unit_number] = {count = 1}
chests_linked_to[train.unit_number][entity.unit_number] = true
rendering.draw_text {
text = '',
surface = entity.surface,
@ -1087,12 +1122,15 @@ local function on_player_and_robot_mined_entity(event)
if outside_chests[entity.unit_number] then
for k, v in pairs(chests_linked_to) do
if v.chest == entity.unit_number then
if v[entity.unit_number] then
v.count = v.count - 1
if v.count <= 0 then
chests_linked_to[k] = nil
end
end
if chests_linked_to[k] and chests_linked_to[k][entity.unit_number] then
chests_linked_to[k][entity.unit_number] = nil
end
end
outside_chests[entity.unit_number] = nil
end
@ -1170,15 +1208,25 @@ local function add_random_loot_to_main_market(rarity)
end
for k, v in pairs(items) do
log(serpent.block(items))
local price = v.price[1][2] + math.random(1, 15) * rarity
local value = v.price[1][1]
local stack = 1
ticker = ticker + 1
if v.offer.item == 'coin' then
price = v.price[1][2]
stack = v.offer.count
if not stack then
stack = v.price[1][2]
end
end
if main_market_items[v.offer.item] then
main_market_items[v.offer.item] = nil
end
main_market_items[v.offer.item] = {
stack = 1,
value = v.price[1][1],
price = v.price[1][2] + math.random(1, 15) * rarity,
stack = stack,
value = value,
price = price,
tooltip = types[v.offer.item].localised_name,
upgrade = false
}
@ -1189,6 +1237,11 @@ local function add_random_loot_to_main_market(rarity)
end
local function on_research_finished()
local difficulty_poll_closing_timeout = Difficulty.get('difficulty_poll_closing_timeout')
if game.tick < difficulty_poll_closing_timeout then
return
end
local locomotive = WPT.get('locomotive')
if not locomotive or not locomotive.valid then
return
@ -1279,6 +1332,36 @@ function Public.boost_players_around_train()
property_boost(data)
end
function Public.is_around_train(entity)
local locomotive = WPT.get('locomotive')
local active_surface_index = WPT.get('active_surface_index')
if not active_surface_index then
return false
end
if not locomotive then
return false
end
if not locomotive.valid then
return false
end
if not entity or not entity.valid then
return false
end
local surface = game.surfaces[active_surface_index]
local data = {
locomotive = locomotive,
surface = surface,
entity = entity
}
local success = is_around_train(data)
return success
end
function Public.render_train_hp()
local this = WPT.get()
local surface = game.surfaces[this.active_surface_index]
@ -1399,16 +1482,29 @@ function Public.get_items()
local land_mine_cost = 2 * (1 + landmine)
local skill_reset_cost = 100000
main_market_items['chest_limit_outside'] = {
stack = 1,
value = 'coin',
price = chest_limit_cost,
tooltip = 'Upgrades the amount of chests that can be placed outside.\nCan be purchased multiple times.',
sprite = 'achievement/getting-on-track',
enabled = true,
upgrade = true,
static = true
}
if main_market_items['chest_limit_outside'] then
main_market_items['chest_limit_outside'] = {
stack = 1,
value = 'coin',
price = chest_limit_cost,
tooltip = main_market_items['chest_limit_outside'].tooltip,
sprite = 'achievement/so-long-and-thanks-for-all-the-fish',
enabled = main_market_items['chest_limit_outside'].enabled,
upgrade = true,
static = true
}
else
main_market_items['chest_limit_outside'] = {
stack = 1,
value = 'coin',
price = chest_limit_cost,
tooltip = 'Upgrades the amount of chests that can be placed outside.\nCan be purchased multiple times.',
sprite = 'achievement/so-long-and-thanks-for-all-the-fish',
enabled = true,
upgrade = true,
static = true
}
end
main_market_items['locomotive_max_health'] = {
stack = 1,
value = 'coin',
@ -1605,6 +1701,7 @@ Event.add(defines.events.on_gui_closed, gui_closed)
Event.add(defines.events.on_player_changed_position, on_player_changed_position)
Event.add(defines.events.on_research_finished, on_research_finished)
Event.add(defines.events.on_built_entity, on_built_entity)
Event.add(defines.events.on_robot_built_entity, on_built_entity)
Event.add(defines.events.on_entity_died, on_player_and_robot_mined_entity)
Event.add(defines.events.on_pre_player_mined_item, on_player_and_robot_mined_entity)
Event.add(defines.events.on_robot_mined_entity, on_player_and_robot_mined_entity)

View File

@ -217,6 +217,8 @@ function Public.reset_map()
game.reset_time_played()
WPT.reset_table()
Map_score.reset_score()
AntiGrief.reset_tables()
RPG.rpg_reset_all_players()
disable_tech()
@ -228,18 +230,12 @@ function Public.reset_map()
Balance.init_enemy_weapon_damage()
global.bad_fire_history = {}
global.custom_highscore.description = 'Wagon distance reached:'
Entities.set_scores()
global.friendly_fire_history = {}
global.landfill_history = {}
global.mining_history = {}
AntiGrief.log_tree_harvest(true)
AntiGrief.whitelist_types('tree', true)
get_score.score_table = {}
Diff.difficulty_poll_closing_timeout = game.tick + 90000
Diff.difficulty_player_votes = {}
Diff.difficulty_poll_closing_timeout = 60000
Difficulty.reset_difficulty_poll({difficulty_poll_closing_timeout = game.tick + 36000})
Diff.gui_width = 20
Collapse.set_kill_entities(false)
@ -259,7 +255,6 @@ function Public.reset_map()
Locomotive.render_train_hp()
render_direction(surface)
-- LM.place_market()
RPG.rpg_reset_all_players()
WD.reset_wave_defense()
wave_defense_table.surface_index = this.active_surface_index

View File

@ -9,7 +9,7 @@ local this = {
logistic_research_level = 0,
reset_counter = 1
},
power_sources = {},
power_sources = {index = 1},
refill_turrets = {index = 1},
magic_crafters = {index = 1},
magic_fluid_crafters = {index = 1},
@ -43,7 +43,7 @@ function Public.reset_table()
this.train_upgrades = 0
this.offline_players = {}
this.biter_pets = {}
this.power_sources = {}
this.power_sources = {index = 1}
this.flamethrower_damage = {}
this.refill_turrets = {index = 1}
this.magic_crafters = {index = 1}