1
0
mirror of https://github.com/Wyrrrd/Gun_Turret_Alerts.git synced 2026-06-30 12:05:44 +02:00

Compare commits

...

11 Commits

Author SHA1 Message Date
Wyrrrd 0b343029e9 Added static script event listeners 2023-03-12 23:15:14 +01:00
Wyrrrd 445691bd04 Update README.md 2022-08-07 17:31:55 +02:00
Wyrrrd 9df748dead Add artillery alert group 2022-08-07 17:24:46 +02:00
Wyrrrd ec0564f167 Fix migrations folder location 2022-08-07 16:28:15 +02:00
Wyrrrd c261e1bc5c Update README.md 2021-08-08 09:51:24 +00:00
Wyrrrd ba581ac1a1 Fixed modes not being translated 2021-08-07 16:01:26 +02:00
Wyrrrd d7f853f1a5 Added french locale (by d0ob) 2021-08-07 00:08:34 +02:00
Wyrrrd 9ee6474408 Merge pull request #3 from snouz/master
Adaptive threshold based on automated ammo count
2021-06-22 15:59:46 +00:00
snouz 33c9bbe783 Fixed missing signal names 2021-06-22 17:13:30 +02:00
snouz ad4ae53c97 Adaptive threshold based on automated ammo count
-Threshold for alert comes is never higher than then number of ammo loaded by an inserter.
-This fixes annoying alerts in Space Exploration's meteor defence, where the default ammo loaded is 4, and fixes the problem for any other mod.
2021-06-21 15:06:34 +02:00
Wyrrrd 9545d088eb Fix crash on load
"selected" mode defaulting to first slot now
2021-04-22 09:14:37 +02:00
9 changed files with 141 additions and 50 deletions
+4 -3
View File
@@ -2,11 +2,12 @@
<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 car or gun turret is out of ammo or has low ammo. The amount of ammo considered low can be configured. Alerts for cars and turrets can be disabled separately. Behaviour on cars with multiple ammo slots can be configured globally. Adds alerts when a gun turret, car or artillery is out of ammo or has low ammo. The amount of ammo considered low can be configured. Alerts for turrets, cars and artillery can be disabled separately. Behaviour on cars with multiple ammo slots can be configured globally.
### Locale ### Locale
If you want to contribute by translating this mod, you can view the existing translations [here](https://github.com/Wyrrrd/Gun_Turret_Alerts/tree/master/locale). 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 [here](https://github.com/Wyrrrd/Gun_Turret_Alerts/tree/master/locale). I'd be happy to add your language and credits to the next release.
### Credit ### Credit
Thanks to [unhott](https://mods.factorio.com/user/unhott) for the [original mod](https://mods.factorio.com/mod/GunTurretAlerts). Thanks to [unhott](https://mods.factorio.com/user/unhott) for the [original mod](https://mods.factorio.com/mod/GunTurretAlerts).
Thanks to [snouz](https://mods.factorio.com/user/snouz) for the new icons and thumbnail. Thanks to [snouz](https://mods.factorio.com/user/snouz) for the new icons and thumbnail.
Thanks to [Friendch](https://mods.factorio.com/user/Friendch) for the french locale.
+32
View File
@@ -1,4 +1,36 @@
--------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------
Version: 1.1.11
Date: 2023-03-12
Bugfixes:
- Added static script event listeners to fix missing alerts for script built entities
---------------------------------------------------------------------------------------------------
Version: 1.1.10
Date: 2022-08-07
Features:
- Added artillery as third alert group (off by default)
---------------------------------------------------------------------------------------------------
Version: 1.1.9
Date: 2021-08-07
Locale:
- Fixed modes not being translated
---------------------------------------------------------------------------------------------------
Version: 1.1.8
Date: 2021-08-06
Locale:
- Addedd french locale (thanks to d0ob)
---------------------------------------------------------------------------------------------------
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)
---------------------------------------------------------------------------------------------------
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.
Scripting:
- Simplified some boolean logic misusing it as ternary
---------------------------------------------------------------------------------------------------
Version: 1.1.5 Version: 1.1.5
Date: 2021-04-21 Date: 2021-04-21
Features: Features:
+50 -38
View File
@@ -13,70 +13,67 @@ end
--local functions --local functions
local get_ammo_flags = { local get_ammo_flag = {
--Applies mode to inventory, calculates and returns respective inventory flags --Applies mode to inventory, calculates and returns respective inventory flags
--Uses boolean return value as ternary, with true = no ammo, false = low ammo and nil = enough ammo
["added"] = function (inventory,player_threshold) ["added"] = function (inventory,player_threshold)
local no,low = false
if inventory.is_empty() then if inventory.is_empty() then
no = true return true
else else
local ammo_count = 0 local ammo_count = 0
for i=1, #inventory do for i=1, #inventory do
ammo_count = ammo_count + inventory[i].count ammo_count = ammo_count + inventory[i].count
end end
if ammo_count == 0 then if ammo_count == 0 then
no = true return true
elseif ammo_count < player_threshold then elseif ammo_count < player_threshold then
low = true return false
end end
end end
return no, low
end, end,
["individually"] = function (inventory,player_threshold) ["individually"] = function (inventory,player_threshold)
local no,low = false
if inventory.is_empty() then if inventory.is_empty() then
no = true return true
else else
for i=1, #inventory do for i=1, #inventory do
if inventory[i].count == 0 then if inventory[i].count == 0 then
no = true return true
elseif inventory[i].count < player_threshold then elseif inventory[i].count < player_threshold then
low = true return false
end end
end end
end end
return no, low
end, end,
["selected"] = function (inventory,player_threshold,gun_index) ["selected"] = function (inventory,player_threshold,gun_index)
local no,low = false
if inventory.is_empty() then if inventory.is_empty() then
no = true return true
else else
if not gun_index then if not gun_index then
-- default to added mode if no slot selected (probably multislot turret) -- default to first slot if no slot selected (probably multislot turret)
no, low = get_ammo_flags["added"](inventory, player_threshold) gun_index = 1
elseif inventory[gun_index].count == 0 then end
no = true if inventory[gun_index].count == 0 then
return true
elseif inventory[gun_index].count < player_threshold then elseif inventory[gun_index].count < player_threshold then
low = true return false
end end
end end
return no, low
end end
} }
local function add_entity_to_list(event) local function add_entity_to_list(event)
--Whenever an ammo-turret or car type entity is built, add it to the global table. --Whenever an ammo-turret, car or artillery type entity is built, add it to the global table.
local index = event.created_entity.surface.name.."_"..event.created_entity.force.name local entity = event.created_entity or event.entity
local index = entity.surface.name.."_"..entity.force.name
if global.ammo_entities[index] then if global.ammo_entities[index] then
table.insert(global.ammo_entities[index], event.created_entity) table.insert(global.ammo_entities[index], entity)
end end
end end
local function remove_entity_from_list(event) local function remove_entity_from_list(event)
--Whenever an ammo-turret or car type entity dies / is mined, remove it from the global table. --Whenever an ammo-turret, car or artillery type entity dies / is mined, remove it from the global table.
local index = event.entity.surface.name.."_"..event.entity.force.name local index = event.entity.surface.name.."_"..event.entity.force.name
if global.ammo_entities[index] then if global.ammo_entities[index] then
for i,entity in pairs(global.ammo_entities[index]) do for i,entity in pairs(global.ammo_entities[index]) do
@@ -89,7 +86,7 @@ local function remove_entity_from_list(event)
end end
local function add_force_to_list(event) local function add_force_to_list(event)
--Whenever a player of an unscanned force joins the game or a force is created, add all ammo-turret or car type entities of that force to the global table. --Whenever a player of an unscanned force joins the game or a force is created, add all ammo-turret, car or artillery type entities of that force to the global table.
local player, force local player, force
if event.player_index then if event.player_index then
player = game.get_player(event.player_index) player = game.get_player(event.player_index)
@@ -103,7 +100,7 @@ local function add_force_to_list(event)
if player and force and not global.ammo_entities[player.surface.name.."_"..force.name] then if player and force and not global.ammo_entities[player.surface.name.."_"..force.name] then
for _,surface in pairs(game.surfaces) do for _,surface in pairs(game.surfaces) do
global.ammo_entities[surface.name.."_"..force.name] = surface.find_entities_filtered{type = {"ammo-turret","car"}, force = force, to_be_deconstructed = false} global.ammo_entities[surface.name.."_"..force.name] = surface.find_entities_filtered{type = {"ammo-turret","car","artillery-turret","artillery-wagon"}, force = force, to_be_deconstructed = false}
end end
end end
end end
@@ -144,11 +141,12 @@ local function init_list()
end end
local function generate_alerts() local function generate_alerts()
--Every 10 seconds recheck and give alerts to players for car and ammo-turret entities on the same force as them. --Every 10 seconds recheck and give alerts to players for ammo-turret, car or artillery type entities on the same force as them.
for _,player in pairs(game.connected_players) do for _,player in pairs(game.connected_players) do
local turret_enabled = player.mod_settings["gun-turret-alerts-enabled"].value local turret_enabled = player.mod_settings["gun-turret-alerts-enabled"].value
local car_enabled = player.mod_settings["gun-turret-alerts-car-enabled"].value local car_enabled = player.mod_settings["gun-turret-alerts-car-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 ammo_entities = global.ammo_entities[player.surface.name.."_"..player.force.name] local ammo_entities = global.ammo_entities[player.surface.name.."_"..player.force.name]
@@ -163,23 +161,34 @@ local function generate_alerts()
inventory = entity.get_inventory(defines.inventory.turret_ammo) inventory = entity.get_inventory(defines.inventory.turret_ammo)
elseif car_enabled and entity.type == "car" and not table_is_empty(entity.prototype.guns) then elseif car_enabled and entity.type == "car" and not table_is_empty(entity.prototype.guns) then
inventory = entity.get_inventory(defines.inventory.car_ammo) 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 end
--Check for states of no or low ammo based on mode --Check for states of no or low ammo based on mode
local no, low = false local ammo_flag
if inventory and get_ammo_flags[mode] then if inventory and get_ammo_flag[mode] then
if entity.type == "ammo-turret" then if entity.type == "ammo-turret" or entity.type == "artillery-turret" or entity.type == "artillery-wagon" then
no, low = get_ammo_flags[mode](inventory, player_threshold) ammo_flag = get_ammo_flag[mode](inventory, player_threshold)
if 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" then elseif entity.type == "car" then
no, low = get_ammo_flags[mode](inventory, player_threshold, entity.selected_gun_index) ammo_flag = get_ammo_flag[mode](inventory, player_threshold, entity.selected_gun_index)
end end
end end
--Create alert for present state --Create alert for present state
if no then if ammo_flag then
-- no ammo alert -- no ammo alert
player.add_custom_alert(entity, {type = "virtual", name = "ammo-icon-red"}, {"gun-turret-alerts.message-empty", entity.localised_name}, true) player.add_custom_alert(entity, {type = "virtual", name = "ammo-icon-red"}, {"gun-turret-alerts.message-empty", entity.localised_name}, true)
elseif low then elseif ammo_flag == false then
-- low ammo alert -- low ammo alert
player.add_custom_alert(entity, {type = "virtual", name = "ammo-icon-yellow"}, {"gun-turret-alerts.message-low", entity.localised_name}, true) player.add_custom_alert(entity, {type = "virtual", name = "ammo-icon-yellow"}, {"gun-turret-alerts.message-low", entity.localised_name}, true)
end end
@@ -202,11 +211,14 @@ 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_built_entity, add_entity_to_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"}}) script.on_event(defines.events.on_built_entity, add_entity_to_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{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"}}) 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 = "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 = "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 = "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"}}) 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 = "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"}}) 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 = "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"}}) script.on_event(defines.events.on_entity_died, remove_entity_from_list, {{filter="type", type = "ammo-turret"},{filter="type", type = "car"},{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 = "artillery-turret"},{filter="type", type = "artillery-wagon"}})
script.on_nth_tick(600, generate_alerts) script.on_nth_tick(600, generate_alerts)
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "Gun_Turret_Alerts", "name": "Gun_Turret_Alerts",
"version": "1.1.5", "version": "1.1.11",
"title": "Ammo Alerts", "title": "Ammo Alerts",
"author": "Wyrrrd", "author": "Wyrrrd",
"factorio_version": "1.1", "factorio_version": "1.1",
+10 -4
View File
@@ -1,20 +1,26 @@
[mod-setting-name] [mod-setting-name]
gun-turret-alerts-enabled=Alarme für Geschützturmmunition aktiviert gun-turret-alerts-enabled=Alarme für Geschützturmmunition aktiviert
gun-turret-alerts-car-enabled=Alarme für Fahrzeugmunition aktiviert gun-turret-alerts-car-enabled=Alarme für Fahrzeugmunition aktiviert
gun-turret-alerts-artillery-enabled=Alarme für Artillerie aktiviert
gun-turret-alerts-mode=Mehrplatz-Modus gun-turret-alerts-mode=Mehrplatz-Modus
gun-turret-alerts-threshold=Grenze für wenig Munition gun-turret-alerts-threshold=Grenze für wenig Munition
[mod-setting-description] [mod-setting-description]
gun-turret-alerts-enabled=Aktiviert Alarme für Geschützturmmunition für deinen Spieler gun-turret-alerts-enabled=Aktiviert Alarme für Geschützturmmunition für deinen Spieler
gun-turret-alerts-car-enabled=Aktiviert Alarme für Fahrzeugmunition für deinen Spieler gun-turret-alerts-car-enabled=Aktiviert Alarme für Fahrzeugmunition für deinen Spieler
gun-turret-alerts-artillery-enabled=Aktiviert Alarme für Artillerie für deinen Spieler
gun-turret-alerts-mode=Bestimmt, ob die Munitionsplätze aufaddiert, jeder Platz einzeln oder nur der ausgewählte Platz gezählt wird.\n(Greift nur bei mehr als einem Munitionsplatz, zum Beispiel in Fahrzeugen.) gun-turret-alerts-mode=Bestimmt, ob die Munitionsplätze aufaddiert, jeder Platz einzeln oder nur der ausgewählte Platz gezählt wird.\n(Greift nur bei mehr als einem Munitionsplatz, zum Beispiel in Fahrzeugen.)
gun-turret-alerts-threshold=Wenn ein Fahrzeug oder Geschützturm weniger als diese Anzahl Munition hat, wird ein Alarm zu deinem Spieler hinzugefügt gun-turret-alerts-threshold=Wenn ein Fahrzeug oder Geschützturm weniger als diese Anzahl Munition hat, wird ein Alarm zu deinem Spieler hinzugefügt
[string-mod-setting] [string-mod-setting]
autofilter_mode-added=Aufaddiert gun-turret-alerts-mode-added=Aufaddiert
autofilter_mode-individually=Einzeln gun-turret-alerts-mode-individually=Einzeln
autofilter_mode-selected=Auswahl gun-turret-alerts-mode-selected=Auswahl
[gun-turret-alerts] [gun-turret-alerts]
message-empty=__1__ hat keine Munition message-empty=__1__ hat keine Munition
message-low=__1__ hat wenig Munition message-low=__1__ hat wenig Munition
[virtual-signal-name]
ammo-icon-red=Hat keine Munition
ammo-icon-yellow=Hat wenig Munition
+10 -4
View File
@@ -1,20 +1,26 @@
[mod-setting-name] [mod-setting-name]
gun-turret-alerts-enabled=Turret ammo alerts enabled gun-turret-alerts-enabled=Turret ammo alerts enabled
gun-turret-alerts-car-enabled=Car ammo alerts enabled gun-turret-alerts-car-enabled=Car ammo alerts enabled
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
[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.
gun-turret-alerts-car-enabled=Enables car ammo alerts to be added to your player. gun-turret-alerts-car-enabled=Enables car 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 car or turret has less than this much ammo an alert will be added to your player. gun-turret-alerts-threshold=If a car or turret has less than this much ammo an alert will be added to your player.
[string-mod-setting] [string-mod-setting]
autofilter_mode-added=Added up gun-turret-alerts-mode-added=Added up
autofilter_mode-individually=Individually gun-turret-alerts-mode-individually=Individually
autofilter_mode-selected=Selected gun-turret-alerts-mode-selected=Selected
[gun-turret-alerts] [gun-turret-alerts]
message-empty=__1__ out of ammo message-empty=__1__ out of ammo
message-low=__1__ ammo low message-low=__1__ low ammo
[virtual-signal-name]
ammo-icon-red=Out of ammo signal
ammo-icon-yellow=Low ammo signal
+26
View File
@@ -0,0 +1,26 @@
[mod-setting-name]
gun-turret-alerts-enabled=Activer les alertes de manque de munitions dans les tourelles.
gun-turret-alerts-car-enabled=Activer les alertes de manque de munitions dans les véhicules.
gun-turret-alerts-artillery-enabled=Activer les alertes de manque de munitions dans la artillerie.
gun-turret-alerts-mode=Prendre en considération plusieurs compartiments de munitions.
gun-turret-alerts-threshold=Nombre de munitions restantes avant d'être alerté.
[mod-setting-description]
gun-turret-alerts-enabled=Le manque de munitions dans une tourelle enverra une alerte au joueur.
gun-turret-alerts-car-enabled=Le manque de munitions dans un véhicule enverra une alerte au joueur.
gun-turret-alerts-artillery-enabled=Le manque de munitions dans une artillerie enverra une alerte au joueur.
gun-turret-alerts-mode=Surveiller tous les compartiments de l'unité, un seul, ou une sélection.\n(Certaines unités, principalement des véhicules, peuvent posséder plusieurs compartiments. À laisser décoché s'il n'y en a qu'un seul.)
gun-turret-alerts-threshold=Le nombre de munitions, dans une tourelle ou un véhicule, qui déclenchera un alerte une fois atteint.
[string-mod-setting]
gun-turret-alerts-mode-added=Tous
gun-turret-alerts-mode-individually=Unique
gun-turret-alerts-mode-selected=Sélection
[gun-turret-alerts]
message-empty=__1__ plus de munition
message-low=__1__ peu de munitions
[virtual-signal-name]
ammo-icon-red=Signal d'absence de munition
ammo-icon-yellow=Signal de manque de munitions
+2
View File
@@ -0,0 +1,2 @@
global.turret_entities = nil
global.car_entities = nil
+6
View File
@@ -14,6 +14,12 @@ 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-artillery-enabled",
setting_type = "runtime-per-user",
default_value = false
},
{ {
type = "string-setting", type = "string-setting",
name = "gun-turret-alerts-mode", name = "gun-turret-alerts-mode",