1
0
mirror of https://github.com/Wyrrrd/Gun_Turret_Alerts.git synced 2026-04-17 19:24:52 +02:00

Mutlisurface support and some fixes

This commit is contained in:
Wyrrrd
2024-11-10 01:17:47 +01:00
parent 2b91680aa2
commit d6d426ddc7
6 changed files with 100 additions and 50 deletions

View File

@@ -2,7 +2,7 @@
<img src=https://raw.githubusercontent.com/Wyrrrd/Gun_Turret_Alerts/master/thumbnail.png width="128" height="128">
### Description
Adds alerts when a gun turret, vehicle or artillery is out of ammo or has low ammo. The amount of ammo considered low can be configured. Alerts for turrets, vehicles and artillery can be disabled separately. Behaviour on vehicles with multiple ammo slots can be configured (for all vehicles at once).
Adds alerts when a gun turret, vehicle or artillery is out of ammo or has low ammo. The amount of ammo considered low can be configured. Alerts for turrets, vehicles and artillery can be disabled separately. Behaviour on vehicles with multiple ammo slots can be configured (for all vehicles at once). Alerts on other planets or space platforms can be enabled.
### Locale
If you want to contribute by translating this mod, you can view the existing translations on [Crowdin](https://crowdin.com/project/factorio-mods-localization). I'd be happy to add your language and credits to the next release.

View File

@@ -1,4 +1,14 @@
---------------------------------------------------------------------------------------------------
Version: 2.0.6
Date: 2024-11-10
Features:
- Add support to enable alerts for other surfaces (before, alerts were only generated for the
current surface)
Bugfixes:
- Fix additional surface handling (when a new surface was created, from then on entities were
not added to the global list until all players of a force leave and join again, which is
technically impossible in single player)
---------------------------------------------------------------------------------------------------
Version: 2.0.5
Date: 2024-11-09
Bugfixes:
@@ -35,10 +45,6 @@ Date: 2024-10-27
- Renamed car group to vehicle group in all languages
Features:
- Added spidertrons to vehicle group
Info:
- Planned: Switch from surface names to surface indexes (as names can change)
- Planned: Cleanup tracking table on surface deletion (may happen with space platforms)
- Planned: Add settings to allow players to view alerts for current or multiple/all surfaces
---------------------------------------------------------------------------------------------------
Version: 1.1.11
Date: 2023-03-12
@@ -63,12 +69,14 @@ Date: 2021-08-06
Version: 1.1.7
Date: 2021-06-21
Compatibility:
- Added compatibility to Space Exploration's Meteor defence and other mods (no longer displays alert when ammo is dynamically loaded) (by snouz)
- Added compatibility to Space Exploration's Meteor defence and other mods (no longer displays
alert when ammo is dynamically loaded) (by snouz)
---------------------------------------------------------------------------------------------------
Version: 1.1.6
Date: 2021-04-22
Bugfixes:
- Defaulting multislot mode "selected" to first slot, if no slot selected. Defaulting to "added" mode caused a crash.
- Defaulting multislot mode "selected" to first slot, if no slot selected. Defaulting to
"added" mode caused a crash.
Scripting:
- Simplified some boolean logic misusing it as ternary
---------------------------------------------------------------------------------------------------

View File

@@ -132,6 +132,20 @@ local function remove_force_from_list(event)
end
end
local function add_surface_to_list(event)
--Whenever a surface is created, add an empty list to the global table for each force with a connected player.
local surface
if event.surface_index then
surface = game.surfaces[event.surface_index]
end
for _,force in pairs(game.forces) do
if surface and surface.valid and not storage.ammo_entities[surface.name.."_"..force.name] and force.connected_players[1] then
storage.ammo_entities[surface.name.."_"..force.name] = {}
end
end
end
local function remove_surface_from_list(event)
--Whenever a surface is renamed or deleted, move/remove all entities in/from the global table.
for _,force in pairs(game.forces) do
@@ -168,54 +182,63 @@ local function generate_alerts()
local artillery_enabled = player.mod_settings["gun-turret-alerts-artillery-enabled"].value
local mode = player.mod_settings["gun-turret-alerts-mode"].value
local player_threshold = player.mod_settings["gun-turret-alerts-threshold"].value
local autofull = player.mod_settings["gun-turret-alerts-z-automated-full"].value
local ammo_entities = storage.ammo_entities[player.surface.name.."_"..player.force.name]
local auto_full = player.mod_settings["gun-turret-alerts-z-automated-full"].value
local show_planets = player.mod_settings["gun-turret-alerts-z-show-planets"].value
local show_platforms = player.mod_settings["gun-turret-alerts-z-show-platforms"].value
if ammo_entities then
for index,entity in pairs(ammo_entities) do
if entity.valid then
if entity.force == player.force then
for _,surface in pairs(game.surfaces) do
local ammo_entities
--Get ammo inventory based on entity type, skip vehicles without guns
local inventory
if turret_enabled and entity.type == "ammo-turret" then
inventory = entity.get_inventory(defines.inventory.turret_ammo)
elseif car_enabled and (entity.type == "car" or entity.type == "spider-vehicle") and not table_is_empty(entity.prototype.guns) then
inventory = entity.get_inventory(defines.inventory.car_ammo)
elseif artillery_enabled then
if entity.type == "artillery-turret" then
inventory = entity.get_inventory(defines.inventory.artillery_turret_ammo)
elseif entity.type == "artillery-wagon" then
inventory = entity.get_inventory(defines.inventory.artillery_wagon_ammo)
end
end
if surface == player.surface or (show_platforms and surface.platform) or (show_planets and surface.planet) then
ammo_entities = storage.ammo_entities[surface.name.."_"..player.force.name]
end
--Check for states of no or low ammo based on mode
local ammo_flag
if inventory and get_ammo_flag[mode] then
if entity.type == "ammo-turret" or entity.type == "artillery-turret" or entity.type == "artillery-wagon" then
ammo_flag = get_ammo_flag[mode](inventory, player_threshold)
if autofull and entity.prototype.automated_ammo_count then
if entity.prototype.automated_ammo_count < player_threshold then
ammo_flag = get_ammo_flag[mode](inventory, entity.prototype.automated_ammo_count)
end
if ammo_entities and not table_is_empty(ammo_entities) then
for index,entity in pairs(ammo_entities) do
if entity.valid then
if entity.force == player.force then
--Get ammo inventory based on entity type, skip vehicles without guns
local inventory
if turret_enabled and entity.type == "ammo-turret" then
inventory = entity.get_inventory(defines.inventory.turret_ammo)
elseif car_enabled and (entity.type == "car" or entity.type == "spider-vehicle") and not table_is_empty(entity.prototype.guns) then
inventory = entity.get_inventory(defines.inventory.car_ammo)
elseif artillery_enabled then
if entity.type == "artillery-turret" then
inventory = entity.get_inventory(defines.inventory.artillery_turret_ammo)
elseif entity.type == "artillery-wagon" then
inventory = entity.get_inventory(defines.inventory.artillery_wagon_ammo)
end
elseif entity.type == "car" or entity.type == "spider-vehicle" then
ammo_flag = get_ammo_flag[mode](inventory, player_threshold, entity.selected_gun_index)
end
--Check for states of no or low ammo based on mode
local ammo_flag
if inventory and get_ammo_flag[mode] then
if entity.type == "ammo-turret" or entity.type == "artillery-turret" or entity.type == "artillery-wagon" then
ammo_flag = get_ammo_flag[mode](inventory, player_threshold)
if auto_full and entity.prototype.automated_ammo_count then
if entity.prototype.automated_ammo_count < player_threshold then
ammo_flag = get_ammo_flag[mode](inventory, entity.prototype.automated_ammo_count)
end
end
elseif entity.type == "car" or entity.type == "spider-vehicle" then
ammo_flag = get_ammo_flag[mode](inventory, player_threshold, entity.selected_gun_index)
end
end
--Create alert for present state
if ammo_flag then
-- no ammo alert
player.add_custom_alert(entity, {type = "virtual", name = "ammo-icon-red"}, {"gun-turret-alerts.message-empty", entity.localised_name}, true)
elseif ammo_flag == false then
-- low ammo alert
player.add_custom_alert(entity, {type = "virtual", name = "ammo-icon-yellow"}, {"gun-turret-alerts.message-low", entity.localised_name}, true)
end
end
--Create alert for present state
if ammo_flag then
-- no ammo alert
player.add_custom_alert(entity, {type = "virtual", name = "ammo-icon-red"}, {"gun-turret-alerts.message-empty", entity.localised_name}, true)
elseif ammo_flag == false then
-- low ammo alert
player.add_custom_alert(entity, {type = "virtual", name = "ammo-icon-yellow"}, {"gun-turret-alerts.message-low", entity.localised_name}, true)
end
else
table.remove(ammo_entities, index)
end
else
ammo_entities[index] = nil
end
end
end
@@ -235,16 +258,19 @@ script.on_event(defines.events.on_player_changed_force, remove_force_from_list)
script.on_event(defines.events.on_force_created, add_force_to_list)
script.on_event(defines.events.on_forces_merged, remove_force_from_list)
script.on_event(defines.events.on_surface_created, add_surface_to_list)
script.on_event(defines.events.on_surface_renamed, remove_surface_from_list)
script.on_event(defines.events.on_pre_surface_deleted, remove_surface_from_list)
script.on_event(defines.events.on_built_entity, add_entity_to_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{filter="type", type = "spider-vehicle"},{filter="type", type = "artillery-turret"},{filter="type", type = "artillery-wagon"}})
script.on_event(defines.events.on_robot_built_entity, add_entity_to_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{filter="type", type = "spider-vehicle"},{filter="type", type = "artillery-turret"},{filter="type", type = "artillery-wagon"}})
script.on_event(defines.events.on_space_platform_built_entity, add_entity_to_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{filter="type", type = "spider-vehicle"},{filter="type", type = "artillery-turret"},{filter="type", type = "artillery-wagon"}})
script.on_event(defines.events.script_raised_built, add_entity_to_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{filter="type", type = "spider-vehicle"},{filter="type", type = "artillery-turret"},{filter="type", type = "artillery-wagon"}})
script.on_event(defines.events.script_raised_revive, add_entity_to_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{filter="type", type = "spider-vehicle"},{filter="type", type = "artillery-turret"},{filter="type", type = "artillery-wagon"}})
script.on_event(defines.events.on_player_mined_entity, remove_entity_from_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{filter="type", type = "spider-vehicle"},{filter="type", type = "artillery-turret"},{filter="type", type = "artillery-wagon"}})
script.on_event(defines.events.on_robot_mined_entity, remove_entity_from_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{filter="type", type = "spider-vehicle"},{filter="type", type = "artillery-turret"},{filter="type", type = "artillery-wagon"}})
script.on_event(defines.events.on_space_platform_mined_entity, remove_entity_from_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{filter="type", type = "spider-vehicle"},{filter="type", type = "artillery-turret"},{filter="type", type = "artillery-wagon"}})
script.on_event(defines.events.on_entity_died, remove_entity_from_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{filter="type", type = "spider-vehicle"},{filter="type", type = "artillery-turret"},{filter="type", type = "artillery-wagon"}})
script.on_event(defines.events.script_raised_destroy, remove_entity_from_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{filter="type", type = "spider-vehicle"},{filter="type", type = "artillery-turret"},{filter="type", type = "artillery-wagon"}})

View File

@@ -1,6 +1,6 @@
{
"name": "Gun_Turret_Alerts",
"version": "2.0.5",
"version": "2.0.6",
"title": "Ammo Alerts",
"author": "Wyrrrd",
"factorio_version": "2.0",

View File

@@ -5,6 +5,8 @@ gun-turret-alerts-artillery-enabled=Artillery ammo alerts enabled
gun-turret-alerts-mode=Multi slot mode
gun-turret-alerts-threshold=Low ammo threshold
gun-turret-alerts-z-automated-full=Automated amount equals full
gun-turret-alerts-z-show-planets=Show on all planets
gun-turret-alerts-z-show-platforms=Show on all space platforms
[mod-setting-description]
gun-turret-alerts-enabled=Enables turret ammo alerts to be added to your player.
@@ -12,7 +14,9 @@ gun-turret-alerts-car-enabled=Enables vehicle ammo alerts to be added to your pl
gun-turret-alerts-artillery-enabled=Enables artillery ammo alerts to be added to your player.
gun-turret-alerts-mode=Controls, if the ammo slots are added up, every slot is counted individually, or just the selected slot is counted.\n(Only applies for more than one ammo slot, for example in vehicles.)
gun-turret-alerts-threshold=If a turret, vehicle or artillery has less than this much ammo, an alert will be added to your player.
gun-turret-alerts-z-automated-full=Send no alerts when a turret or artillery has an amount of ammo equal or higher than what inserters would automatically insert into them.
gun-turret-alerts-z-automated-full=Send no alerts when a turret or artillery has an amount of ammo equal or higher than what inserters would automatically insert into them.
gun-turret-alerts-z-show-planets=Show alerts for other planets, even if you are not there. (Default is to only show current planet/space platform.)
gun-turret-alerts-z-show-platforms=Show alerts for other space platforms, even if you are not there. (Default is to only show current planet/space platform.)
[string-mod-setting]
gun-turret-alerts-mode-added=Added up

View File

@@ -40,4 +40,16 @@ data:extend({
setting_type = "runtime-per-user",
default_value = true
},
{
type = "bool-setting",
name = "gun-turret-alerts-z-show-planets",
setting_type = "runtime-per-user",
default_value = false
},
{
type = "bool-setting",
name = "gun-turret-alerts-z-show-platforms",
setting_type = "runtime-per-user",
default_value = false
},
})