1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-06 00:23:49 +02:00

buff damage by 10% upgrade

This commit is contained in:
danielmartin0 2024-09-12 12:17:28 +01:00
parent 8705819fc2
commit 3d66293a2e
11 changed files with 139 additions and 97 deletions

View File

@ -632,4 +632,7 @@ cmd_explain_clear_south_tanks=Clear ship's south fluid storage tanks on deck and
cmd_explain_dev=is a dev command.
gui_crew_window_spectator_controls=Spectator Controls
gui_crew_window_spectator_goto_surface=Go to Surface
gui_crew_window_spectator_goto_surface=Go to Surface
market_description_purchase_attack_upgrade=10% damage upgrade for the crew.
market_event_attack_upgrade_purchased=__1__ bought a 10% damage upgrade for the crew.

View File

@ -1410,39 +1410,11 @@ function Public.research_apply_buffs(event)
end
function Public.apply_flamer_nerfs()
local memory = Memory.get_crew_memory()
-- local difficulty = memory.difficulty
local force = memory.force
-- This code matches the vanilla game. Written by Hanakocz I think.
local flame_researches = {
[1] = {name = 'refined-flammables-1', bonus = 0.2},
[2] = {name = 'refined-flammables-2', bonus = 0.2},
[3] = {name = 'refined-flammables-3', bonus = 0.2},
[4] = {name = 'refined-flammables-4', bonus = 0.3},
[5] = {name = 'refined-flammables-5', bonus = 0.3},
[6] = {name = 'refined-flammables-6', bonus = 0.4},
[7] = {name = 'refined-flammables-7', bonus = 0.2}
}
local flamer_power = 0
for i = 1, 6, 1 do
if force.technologies[flame_researches[i].name].researched then
flamer_power = flamer_power + flame_researches[i].bonus
end
end
flamer_power = flamer_power + (force.technologies[flame_researches[7].name].level - 7) * 0.2
-- TODO: Check this code is valid after Factorio 2.0
force.set_ammo_damage_modifier('flamethrower', flamer_power * Balance.flamers_tech_multipliers() + (1 - Balance.flamers_base_damage_multiplier()))
force.set_turret_attack_modifier('flamethrower-turret', flamer_power * Balance.flamers_tech_multipliers() + (1 - Balance.flamers_base_damage_multiplier()))
end
local function event_on_research_finished(event)
-- figure out which crew this is about:
local research = event.research
local p_force = research.force
local crew_id = Common.get_id_from_force_name(p_force.name)
local force = research.force
local crew_id = Common.get_id_from_force_name(force.name)
Memory.set_working_id(crew_id)
local memory = Memory.get_crew_memory()
@ -1453,42 +1425,39 @@ local function event_on_research_finished(event)
Server.to_discord_embed_raw({'', '[' .. memory.name .. '] ', {'pirates.research_notification', game.technology_prototypes[research.name].localised_name}}, true)
end
Public.apply_flamer_nerfs()
-- Public.research_apply_buffs(event) -- this is broken right now
for _, e in ipairs(research.effects) do
local t = e.type
local t = e.type
if t == 'ammo-damage' then
local category = e.ammo_category
local factor = Balance.player_ammo_damage_modifiers()[category]
if factor then
local current_m = p_force.get_ammo_damage_modifier(category)
local current_m = force.get_ammo_damage_modifier(category)
local m = e.modifier
p_force.set_ammo_damage_modifier(category, current_m + factor * m)
force.set_ammo_damage_modifier(category, current_m + factor * m)
end
elseif t == 'gun-speed' then
local category = e.ammo_category
local factor = Balance.player_gun_speed_modifiers()[category]
if factor then
local current_m = p_force.get_gun_speed_modifier(category)
local current_m = force.get_gun_speed_modifier(category)
local m = e.modifier
p_force.set_gun_speed_modifier(category, current_m + factor * m)
force.set_gun_speed_modifier(category, current_m + factor * m)
end
elseif t == 'turret-attack' then
local category = e.ammo_category
local factor = Balance.player_turret_attack_modifiers()[category]
if factor then
local current_m = p_force.get_turret_attack_modifier(category)
local current_m = force.get_turret_attack_modifier(category)
local m = e.modifier
p_force.set_turret_attack_modifier(category, current_m + factor * m)
force.set_turret_attack_modifier(category, current_m + factor * m)
end
end
end
Crew.disable_recipes(p_force)
Crew.disable_recipes(force)
end
local function event_on_player_joined_game(event)

View File

@ -501,14 +501,19 @@ end
function Public.class_cost(at_dock)
if at_dock then
return 10000
return 8000
else
return 6000
return 5000
end
-- return Math.ceil(10000 / (Public.crew_scale()*10/4)^(1/6))
end
function Public.weapon_damage_upgrade_price()
return {{name = 'coin', amount = 4000}, {name = 'steel-plate', amount = 100}} --NOTE: Should be different to other 'nothing' costs. See the use of this function in shop.lua.
end
Public.quest_structures_first_appear_at = 40
Public.coin_sell_amount = 300
@ -616,10 +621,10 @@ end
Public.research_buffs = { --currently disabled anyway
-- these already give .1 productivity so we're adding .1 to get to 20%
['mining-productivity-1'] = {['mining_drill_productivity_bonus'] = .2},
['mining-productivity-2'] = {['mining_drill_productivity_bonus'] = .2},
['mining-productivity-3'] = {['mining_drill_productivity_bonus'] = .2},
['mining-productivity-4'] = {['mining_drill_productivity_bonus'] = .2},
['mining-productivity-1'] = {['mining_drill_productivity_bonus'] = .1},
['mining-productivity-2'] = {['mining_drill_productivity_bonus'] = .1},
['mining-productivity-3'] = {['mining_drill_productivity_bonus'] = .1},
['mining-productivity-4'] = {['mining_drill_productivity_bonus'] = .1},
-- -- these already give .1 productivity so we're adding .1 to get to 20%
-- ['mining-productivity-1'] = {['mining-drill-productivity-bonus'] = .1, ['character-inventory-slots-bonus'] = 5},
-- ['mining-productivity-2'] = {['mining-drill-productivity-bonus'] = .1, ['character-inventory-slots-bonus'] = 5},
@ -627,18 +632,6 @@ Public.research_buffs = { --currently disabled anyway
-- ['mining-productivity-4'] = {['mining-drill-productivity-bonus'] = .1, ['character-inventory-slots-bonus'] = 5},
}
function Public.flamers_tech_multipliers()
return 0.4
end
function Public.flamers_base_damage_multiplier()
return 0.4
end
function Public.player_ammo_damage_modifiers() -- modifiers are fractional. bullet affects gun turrets, but flamethrower does not affect flamer turrets
local data = {
['artillery-shell'] = 0,
@ -647,7 +640,7 @@ function Public.player_ammo_damage_modifiers() -- modifiers are fractional. bull
['cannon-shell'] = 0,
['capsule'] = 0,
['electric'] = 0,
['flamethrower'] = 0, --these nerfs are elsewhere for finer control
['flamethrower'] = -0.6, --these nerfs are elsewhere for finer control
['grenade'] = -0.05,
['landmine'] = 0,
['melee'] = 0, -- doesn't do anything apparently
@ -661,6 +654,7 @@ function Public.player_turret_attack_modifiers()
['gun-turret'] = 0,
['artillery-turret'] = 0,
['laser-turret'] = 0,
['flamethrower-turret'] = -0.6,
}
return data
end
@ -672,7 +666,7 @@ function Public.player_gun_speed_modifiers()
['cannon-shell'] = 0,
['capsule'] = 0,
['electric'] = 0,
['flamethrower'] = 0, --these nerfs are elsewhere for finer control
['flamethrower'] = 0,
['grenade'] = -0.25,
['landmine'] = 0,
['melee'] = 0, -- doesn't do anything apparently

View File

@ -700,22 +700,27 @@ function Public.initialise_crew(accepted_proposal)
local global_memory = Memory.get_global_memory()
local new_id = Public.generate_new_crew_id()
global_memory.crew_active_ids[#global_memory.crew_active_ids + 1] = new_id
Memory.initialise_crew_memory(new_id)
Memory.set_working_id(new_id)
if not new_id then return end
game.reset_time_played() -- affects the multiplayer lobby view
global_memory.crew_active_ids[#global_memory.crew_active_ids + 1] = new_id
global_memory.crew_memories[new_id] = {}
Memory.set_working_id(new_id)
local memory = Memory.get_crew_memory()
memory.id = new_id
memory.game_lost = false
memory.game_won = false
local secs = Server.get_current_time()
if not secs then secs = 0 end
memory.secs_id = secs
memory.id = new_id
memory.force_name = Common.get_crew_force_name(new_id)
memory.enemy_force_name = Common.get_enemy_force_name(new_id)
memory.ancient_enemy_force_name = Common.get_ancient_hostile_force_name(new_id)
@ -822,6 +827,53 @@ function Public.initialise_crew(accepted_proposal)
boat.dockedposition = boat.position
boat.speed = 0
boat.cannonscount = 2
Public.set_initial_damage_modifiers()
end
function Public.set_initial_damage_modifiers()
local memory = Memory.get_crew_memory()
local force = memory.force
local ammo_damage_modifiers = Balance.player_ammo_damage_modifiers()
local turret_attack_modifiers = Balance.player_turret_attack_modifiers()
local gun_speed_modifiers = Balance.player_gun_speed_modifiers()
for category, factor in pairs(ammo_damage_modifiers) do
force.set_ammo_damage_modifier(category, factor)
end
for category, factor in pairs(turret_attack_modifiers) do
force.set_turret_attack_modifier(category, factor)
end
for category, factor in pairs(gun_speed_modifiers) do
force.set_gun_speed_modifier(category, factor)
end
end
function Public.buff_all_damage(amount)
local memory = Memory.get_crew_memory()
local force = memory.force
local ammo_damage_modifiers = Balance.player_ammo_damage_modifiers()
local turret_attack_modifiers = Balance.player_turret_attack_modifiers()
local gun_speed_modifiers = Balance.player_gun_speed_modifiers()
for category, factor in pairs(ammo_damage_modifiers) do
local current_modifier = force.get_ammo_damage_modifier(category)
force.set_ammo_damage_modifier(category, current_modifier + amount * (1 + factor))
end
for category, factor in pairs(turret_attack_modifiers) do
local current_modifier = force.get_turret_attack_modifier(category)
force.set_turret_attack_modifier(category, current_modifier + amount * (1 + factor))
end
for category, factor in pairs(gun_speed_modifiers) do
local current_modifier = force.get_gun_speed_modifier(category)
force.set_gun_speed_modifier(category, current_modifier + amount * (1 + factor))
end
end

View File

@ -41,15 +41,6 @@ function Public.global_reset_memory()
pirates_global_memory.last_players_health = {} --used to make damage reduction work somewhat properly
end
function Public.initialise_crew_memory(id)
pirates_global_memory.crew_memories[id] = {}
local memory = pirates_global_memory.crew_memories[id]
memory.game_lost = false
memory.game_won = false
end
function Public.fallthrough_crew_memory() --could make this a metatable, but metatables and factorio global seem not to play nicely
return {
id = 0,

View File

@ -52,7 +52,7 @@ local C = {STANDARD, STANDARD2, RED_DESERT, HORSESHOE, WALKWAYS}
local D = {NIL, NIL, NIL, STANDARD, STANDARD2, RED_DESERT, HORSESHOE, WALKWAYS, SWAMP, CAVE}
local destinationScheme = {
[0] = {HORSESHOE, NIL, NIL},
[0] = {FIRST, NIL, NIL},
[1] = {HORSESHOE, HORSESHOE, HORSESHOE}, --map where you break rocks
[2] = {STANDARD2, STANDARD2, STANDARD2}, --aesthetically different to previous map
[3] = {DOCK, NIL, NIL},

View File

@ -4,7 +4,7 @@
local Memory = require 'maps.pirates.memory'
-- local Roles = require 'maps.pirates.roles.roles'
local Classes = require 'maps.pirates.roles.classes'
-- local Crew = require 'maps.pirates.crew'
local Crew = require 'maps.pirates.crew'
-- local Boats = require 'maps.pirates.structures.boats.boats'
-- local Dock = require 'maps.pirates.surfaces.dock'
local Balance = require 'maps.pirates.balance'
@ -223,25 +223,35 @@ function Public.event_on_market_item_purchased(event)
else
if thisPurchaseData.offer_type == 'nothing' and destination.static_params.class_for_sale then
if thisPurchaseData.offer_type == 'nothing' then
local isDamageUpgrade = thisPurchaseData.price[1].amount == Balance.weapon_damage_upgrade_price()[1].amount and thisPurchaseData.price[1].name == Balance.weapon_damage_upgrade_price()[1].name and thisPurchaseData.price[2] and thisPurchaseData.price[2].amount == Balance.weapon_damage_upgrade_price()[2].amount and thisPurchaseData.price[2].name == Balance.weapon_damage_upgrade_price()[2].name
local class_for_sale = destination.static_params.class_for_sale
-- if not class_for_sale then return end
local required_class = Classes.class_purchase_requirement[class_for_sale]
if isDamageUpgrade then
Common.notify_force_light(player.force, {'pirates.market_event_attack_upgrade_purchased', player.name})
market.remove_market_item(offer_index)
local ok = Classes.try_unlock_class(class_for_sale, player, false)
Crew.buff_all_damage(0.1)
if ok then
market.remove_market_item(offer_index)
else -- if this happens, I believe there is something wrong with code
if force and force.valid then
Common.notify_force_error(force, {'pirates.class_purchase_error_prerequisite_class', Classes.display_form(required_class)})
elseif destination.static_params.class_for_sale then
local class_for_sale = destination.static_params.class_for_sale
-- if not class_for_sale then return end
local required_class = Classes.class_purchase_requirement[class_for_sale]
local ok = Classes.try_unlock_class(class_for_sale, player, false)
if ok then
market.remove_market_item(offer_index)
else -- if this happens, I believe there is something wrong with code
if force and force.valid then
Common.notify_force_error(force, {'pirates.class_purchase_error_prerequisite_class', Classes.display_form(required_class)})
end
--refund
refunds = refunds + 1
Public.refund_items(player, thisPurchaseData.price, 1)
log('Error purchasing class: ' .. class_for_sale)
end
--refund
refunds = refunds + 1
Public.refund_items(player, thisPurchaseData.price, 1)
log('Error purchasing class: ' .. class_for_sale)
end
else
Common.notify_force_light(player.force, {'pirates.market_event_buy', player.name, thisPurchaseData.offer_giveitem_count .. ' ' .. thisPurchaseData.offer_giveitem_name, thisPurchaseData.price[1].amount .. ' ' .. thisPurchaseData.price[1].name})

View File

@ -106,6 +106,14 @@ function Public.create_step2_entities()
quest_structure_data.market.add_market_item(o)
end
quest_structure_data.market.add_market_item{
price = Balance.weapon_damage_upgrade_price(),
offer = {
type = "nothing",
effect_description = {'pirates.market_description_purchase_attack_upgrade'}
}
}
if destination.static_params.class_for_sale then
quest_structure_data.market.add_market_item{price={{'coin', Balance.class_cost(false)}}, offer={type="nothing", effect_description = {'pirates.market_description_purchase_class', Classes.display_form(destination.static_params.class_for_sale)}}}

View File

@ -96,6 +96,14 @@ function Public.create_step2_entities()
quest_structure_data.market.add_market_item(o)
end
quest_structure_data.market.add_market_item{
price = Balance.weapon_damage_upgrade_price(),
offer = {
type = "nothing",
effect_description = {'pirates.market_description_purchase_attack_upgrade'}
}
}
if destination.static_params.class_for_sale then
quest_structure_data.market.add_market_item{price={{'coin', Balance.class_cost(false)}}, offer={type="nothing", effect_description = {'pirates.market_description_purchase_class', Classes.display_form(destination.static_params.class_for_sale)}}}

View File

@ -27,6 +27,15 @@ local function spawn_market(args, is_main)
local offers
if is_main then
offers = ShopCovered.market_generate_coin_offers(6)
offers[#offers+1] = {
price = Balance.weapon_damage_upgrade_price(),
offer = {
type = "nothing",
effect_description = {'pirates.market_description_purchase_attack_upgrade'}
}
}
if destination_data.static_params.class_for_sale then
offers[#offers+1] = {price={{'coin', Balance.class_cost(true)}}, offer={type="nothing", effect_description = {'pirates.market_description_purchase_class', Classes.display_form(destination_data.static_params.class_for_sale)}}}
end

View File

@ -103,7 +103,6 @@ function Public.on_surface_generation(destination)
-- local memory = Memory.get_crew_memory()
-- game.map_settings.pollution.enemy_attack_pollution_consumption_modifier = Balance.defaultai_attack_pollution_consumption_modifier()
-- Event_functions.flamer_nerfs()
if destination.type == enum.ISLAND then
local subtype = destination.subtype
@ -270,7 +269,6 @@ function Public.destination_on_arrival(destination)
local memory = Memory.get_crew_memory()
-- game.map_settings.pollution.enemy_attack_pollution_consumption_modifier = Balance.defaultai_attack_pollution_consumption_modifier()
-- Event_functions.flamer_nerfs()
log('Playthrough stats:')
log(_inspect(memory.playtesting_stats))