diff --git a/maps/mountain_fortress_v3/entities.lua b/maps/mountain_fortress_v3/entities.lua index e36b57b8..e7324865 100644 --- a/maps/mountain_fortress_v3/entities.lua +++ b/maps/mountain_fortress_v3/entities.lua @@ -212,7 +212,7 @@ local function check_health_final_damage(final_damage_amount) end end -local function set_train_final_health(final_damage_amount) +local function set_train_final_health(final_damage_amount, repair) if final_damage_amount == 0 then return end @@ -224,53 +224,56 @@ local function set_train_final_health(final_damage_amount) local locomotive_health = WPT.get('locomotive_health') local locomotive_max_health = WPT.get('locomotive_max_health') - local poison_deployed = WPT.get('poison_deployed') - local robotics_deployed = WPT.get('robotics_deployed') - local lower_high = locomotive_max_health * 0.4 - local higher_high = locomotive_max_health * 0.5 - local lower_low = locomotive_max_health * 0.2 - local higher_low = locomotive_max_health * 0.3 + if not repair then + local poison_deployed = WPT.get('poison_deployed') + local robotics_deployed = WPT.get('robotics_deployed') - if locomotive_health >= lower_high and locomotive_health <= higher_high then - if not poison_deployed then - local carriages = WPT.get('carriages') + local lower_high = locomotive_max_health * 0.4 + local higher_high = locomotive_max_health * 0.5 + local lower_low = locomotive_max_health * 0.2 + local higher_low = locomotive_max_health * 0.3 - if carriages then - for i = 1, #carriages do - local entity = carriages[i] - Locomotive.enable_poison_defense(entity.position) - end - end + if locomotive_health >= lower_high and locomotive_health <= higher_high then + if not poison_deployed then + local carriages = WPT.get('carriages') - local p = { - position = locomotive.position - } - local msg = ({'entity.train_taking_damage'}) - Alert.alert_all_players_location(p, msg) - WPT.set().poison_deployed = true - end - elseif locomotive_health >= lower_low and locomotive_health <= higher_low then - if not robotics_deployed then - local carriages = WPT.get('carriages') - - if carriages then - for _ = 1, 10 do + if carriages then for i = 1, #carriages do local entity = carriages[i] - Locomotive.enable_robotic_defense(entity.position) + Locomotive.enable_poison_defense(entity.position) end end + + local p = { + position = locomotive.position + } + local msg = ({'entity.train_taking_damage'}) + Alert.alert_all_players_location(p, msg) + WPT.set().poison_deployed = true end - local p = { - position = locomotive.position - } - local msg = ({'entity.train_taking_damage'}) - Alert.alert_all_players_location(p, msg) - WPT.set().robotics_deployed = true + elseif locomotive_health >= lower_low and locomotive_health <= higher_low then + if not robotics_deployed then + local carriages = WPT.get('carriages') + + if carriages then + for _ = 1, 10 do + for i = 1, #carriages do + local entity = carriages[i] + Locomotive.enable_robotic_defense(entity.position) + end + end + end + local p = { + position = locomotive.position + } + local msg = ({'entity.train_taking_damage'}) + Alert.alert_all_players_location(p, msg) + WPT.set().robotics_deployed = true + end + elseif locomotive_health >= locomotive_max_health then + WPT.set().poison_deployed = false end - elseif locomotive_health >= locomotive_max_health then - WPT.set().poison_deployed = false end if locomotive_health <= 0 then @@ -332,7 +335,7 @@ local function protect_entities(event) if (event.cause and event.cause.valid) then if event.cause.force.index == 2 then if units and units[entity.unit_number] then - set_train_final_health(dmg) + set_train_final_health(dmg, false) return else entity.health = entity.health - dmg @@ -342,7 +345,7 @@ local function protect_entities(event) elseif not (event.cause and event.cause.valid) then if event.force and event.force.index == 2 then if units and units[entity.unit_number] then - set_train_final_health(dmg) + set_train_final_health(dmg, false) return else entity.health = entity.health - dmg @@ -946,10 +949,10 @@ local function on_player_repaired_entity(event) local player = game.players[event.player_index] local repair_speed = Functions.get_magicka(player) if repair_speed <= 0 then - set_train_final_health(-1) + set_train_final_health(-1, true) return else - set_train_final_health(-repair_speed) + set_train_final_health(-repair_speed, true) return end end diff --git a/maps/mountain_fortress_v3/ic/functions.lua b/maps/mountain_fortress_v3/ic/functions.lua index 690ab969..ec8b0558 100644 --- a/maps/mountain_fortress_v3/ic/functions.lua +++ b/maps/mountain_fortress_v3/ic/functions.lua @@ -3,7 +3,7 @@ local Color = require 'utils.color_presets' local Task = require 'utils.task' local Token = require 'utils.token' local IC_Gui = require 'maps.mountain_fortress_v3.ic.gui' -local IC = require 'maps.mountain_fortress.ic.table' +local IC = require 'maps.mountain_fortress_v3.ic.table' local WPT = require 'maps.mountain_fortress_v3.table' local Public = {} diff --git a/modules/rpg/functions.lua b/modules/rpg/functions.lua index 47379909..271a2c6c 100644 --- a/modules/rpg/functions.lua +++ b/modules/rpg/functions.lua @@ -738,28 +738,25 @@ local damage_player_over_time_token = Token.register( function(data) local player = data.player - local damage = data.damage if not player.character or not player.character.valid then return end - player.character.health = player.character.health - damage + player.character.health = player.character.health - (player.character.health * 0.05) player.character.surface.create_entity({name = 'water-splash', position = player.position}) end ) --- Damages a player over time. -function Public.damage_player_over_time(player, amount, damage) +function Public.damage_player_over_time(player, amount) if not player or not player.valid then return end - amount = amount or 5 - damage = damage or 10 + amount = amount or 10 local tick = 20 for _ = 1, amount, 1 do - Task.set_timeout_in_ticks(tick, damage_player_over_time_token, {player = player, damage = damage}) + Task.set_timeout_in_ticks(tick, damage_player_over_time_token, {player = player}) tick = tick + 15 - damage = damage + 10 end end diff --git a/modules/rpg/main.lua b/modules/rpg/main.lua index a56528cd..1308ca16 100644 --- a/modules/rpg/main.lua +++ b/modules/rpg/main.lua @@ -1098,7 +1098,7 @@ local function on_player_used_capsule(event) elseif object.obj_to_create == 'warp-gate' then player.teleport(surface.find_non_colliding_position('character', game.forces.player.get_spawn_position(surface), 3, 0, 5), surface) rpg_t[player.index].mana = 0 - Functions.damage_player_over_time(player, 10) + Functions.damage_player_over_time(player, math.random(8, 16)) player.play_sound {path = 'utility/armor_insert', volume_modifier = 1} p(({'rpg_main.warped_ok'}), Color.info) rpg_t[player.index].mana = rpg_t[player.index].mana - object.mana_cost