mirror of
https://github.com/Wyrrrd/Gun_Turret_Alerts.git
synced 2026-06-06 17:20:20 +02:00
Mutlisurface support and some fixes
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
<img src=https://raw.githubusercontent.com/Wyrrrd/Gun_Turret_Alerts/master/thumbnail.png width="128" height="128">
|
<img src=https://raw.githubusercontent.com/Wyrrrd/Gun_Turret_Alerts/master/thumbnail.png width="128" height="128">
|
||||||
|
|
||||||
### Description
|
### 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
|
### 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.
|
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.
|
||||||
|
|||||||
+14
-6
@@ -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
|
Version: 2.0.5
|
||||||
Date: 2024-11-09
|
Date: 2024-11-09
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
@@ -35,10 +45,6 @@ Date: 2024-10-27
|
|||||||
- Renamed car group to vehicle group in all languages
|
- Renamed car group to vehicle group in all languages
|
||||||
Features:
|
Features:
|
||||||
- Added spidertrons to vehicle group
|
- 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
|
Version: 1.1.11
|
||||||
Date: 2023-03-12
|
Date: 2023-03-12
|
||||||
@@ -63,12 +69,14 @@ Date: 2021-08-06
|
|||||||
Version: 1.1.7
|
Version: 1.1.7
|
||||||
Date: 2021-06-21
|
Date: 2021-06-21
|
||||||
Compatibility:
|
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
|
Version: 1.1.6
|
||||||
Date: 2021-04-22
|
Date: 2021-04-22
|
||||||
Bugfixes:
|
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:
|
Scripting:
|
||||||
- Simplified some boolean logic misusing it as ternary
|
- Simplified some boolean logic misusing it as ternary
|
||||||
---------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
+67
-41
@@ -132,6 +132,20 @@ local function remove_force_from_list(event)
|
|||||||
end
|
end
|
||||||
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)
|
local function remove_surface_from_list(event)
|
||||||
--Whenever a surface is renamed or deleted, move/remove all entities in/from the global table.
|
--Whenever a surface is renamed or deleted, move/remove all entities in/from the global table.
|
||||||
for _,force in pairs(game.forces) do
|
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 artillery_enabled = player.mod_settings["gun-turret-alerts-artillery-enabled"].value
|
||||||
local mode = player.mod_settings["gun-turret-alerts-mode"].value
|
local mode = player.mod_settings["gun-turret-alerts-mode"].value
|
||||||
local player_threshold = player.mod_settings["gun-turret-alerts-threshold"].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 auto_full = player.mod_settings["gun-turret-alerts-z-automated-full"].value
|
||||||
local ammo_entities = storage.ammo_entities[player.surface.name.."_"..player.force.name]
|
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 _,surface in pairs(game.surfaces) do
|
||||||
for index,entity in pairs(ammo_entities) do
|
local ammo_entities
|
||||||
if entity.valid then
|
|
||||||
if entity.force == player.force then
|
|
||||||
|
|
||||||
--Get ammo inventory based on entity type, skip vehicles without guns
|
if surface == player.surface or (show_platforms and surface.platform) or (show_planets and surface.planet) then
|
||||||
local inventory
|
ammo_entities = storage.ammo_entities[surface.name.."_"..player.force.name]
|
||||||
if turret_enabled and entity.type == "ammo-turret" then
|
end
|
||||||
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
|
|
||||||
|
|
||||||
--Check for states of no or low ammo based on mode
|
if ammo_entities and not table_is_empty(ammo_entities) then
|
||||||
local ammo_flag
|
for index,entity in pairs(ammo_entities) do
|
||||||
if inventory and get_ammo_flag[mode] then
|
if entity.valid then
|
||||||
if entity.type == "ammo-turret" or entity.type == "artillery-turret" or entity.type == "artillery-wagon" then
|
if entity.force == player.force then
|
||||||
ammo_flag = get_ammo_flag[mode](inventory, player_threshold)
|
|
||||||
if autofull and entity.prototype.automated_ammo_count then
|
--Get ammo inventory based on entity type, skip vehicles without guns
|
||||||
if entity.prototype.automated_ammo_count < player_threshold then
|
local inventory
|
||||||
ammo_flag = get_ammo_flag[mode](inventory, entity.prototype.automated_ammo_count)
|
if turret_enabled and entity.type == "ammo-turret" then
|
||||||
end
|
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
|
||||||
elseif entity.type == "car" or entity.type == "spider-vehicle" then
|
end
|
||||||
ammo_flag = get_ammo_flag[mode](inventory, player_threshold, entity.selected_gun_index)
|
|
||||||
|
--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
|
||||||
end
|
end
|
||||||
|
else
|
||||||
--Create alert for present state
|
table.remove(ammo_entities, index)
|
||||||
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
|
end
|
||||||
else
|
|
||||||
ammo_entities[index] = nil
|
|
||||||
end
|
end
|
||||||
end
|
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_force_created, add_force_to_list)
|
||||||
script.on_event(defines.events.on_forces_merged, remove_force_from_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_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_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_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_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_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.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_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_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.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"}})
|
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"}})
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "Gun_Turret_Alerts",
|
"name": "Gun_Turret_Alerts",
|
||||||
"version": "2.0.5",
|
"version": "2.0.6",
|
||||||
"title": "Ammo Alerts",
|
"title": "Ammo Alerts",
|
||||||
"author": "Wyrrrd",
|
"author": "Wyrrrd",
|
||||||
"factorio_version": "2.0",
|
"factorio_version": "2.0",
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ gun-turret-alerts-artillery-enabled=Artillery ammo alerts enabled
|
|||||||
gun-turret-alerts-mode=Multi slot mode
|
gun-turret-alerts-mode=Multi slot mode
|
||||||
gun-turret-alerts-threshold=Low ammo threshold
|
gun-turret-alerts-threshold=Low ammo threshold
|
||||||
gun-turret-alerts-z-automated-full=Automated amount equals full
|
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]
|
[mod-setting-description]
|
||||||
gun-turret-alerts-enabled=Enables turret ammo alerts to be added to your player.
|
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-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-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-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]
|
[string-mod-setting]
|
||||||
gun-turret-alerts-mode-added=Added up
|
gun-turret-alerts-mode-added=Added up
|
||||||
|
|||||||
@@ -40,4 +40,16 @@ data:extend({
|
|||||||
setting_type = "runtime-per-user",
|
setting_type = "runtime-per-user",
|
||||||
default_value = true
|
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
|
||||||
|
},
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user