1
0
mirror of https://github.com/Wyrrrd/Gun_Turret_Alerts.git synced 2026-06-03 07:52:27 +02:00

Added multislot logic for cars

- "correctly" handling multiple ammo slots (three solutions)
- not scanning surfaces twice anymore
This commit is contained in:
Wyrrrd
2021-04-19 22:38:50 +02:00
parent 48bcdc2ba5
commit 0d7676d71e
7 changed files with 120 additions and 41 deletions
+1 -1
View File
@@ -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 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. 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.
### 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.
+9
View File
@@ -1,4 +1,13 @@
--------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------
Version: 1.1.5
Date: 2021-04-19
Features:
- Added config option to change behaviour on multiple ammo slots (for cars)
Bugfixes:
- Fixed only checking for first ammo slot in cars
Optimisations:
- Theoretical performance improvement by not scanning surfaces twice anymore (once for turrets and once for cars)
---------------------------------------------------------------------------------------------------
Version: 1.1.4 Version: 1.1.4
Date: 2021-04-02 Date: 2021-04-02
Bugfixes: Bugfixes:
+83 -32
View File
@@ -1,23 +1,74 @@
--control.lua --control.lua
--This mod scans the map for cars and gun-turrets and places alerts when they are low. --This mod scans the map for cars and gun-turrets and places alerts when they are low.
local get_ammo_flags = {
["added"] = function (inventory)
local no,low = false
if inventory.is_empty() then
no = true
else
local ammo_count = 0
for i=1, #inventory do
ammo_count = ammo_count + inventory[i].count
end
if ammo_count == 0 then
no = true
elseif ammo_count < player_threshold then
low = true
end
end
return no, low
end,
["individually"] = function (inventory)
local no,low = false
if inventory.is_empty() then
no = true
else
for i=1, #inventory do
if inventory[i].count == 0 then
no = true
elseif inventory[i].count < player_threshold then
low = true
end
end
end
return no, low
end,
["selected"] = function (inventory,gun_index)
local no,low = false
if inventory.is_empty() then
no = true
else
if not gun_index then
gun_index = 1
end
if inventory[gun_index].count == 0 then
no = true
elseif inventory[gun_index].count < player_threshold then
low = true
end
end
return no, low
end
}
script.on_init(function (event) script.on_init(function (event)
-- index init -- index init
global.turret_entities = {} global.ammo_entities = {}
global.car_entities = {}
end) end)
script.on_configuration_changed(function (event) script.on_configuration_changed(function (event)
-- index init fix -- index init fix
global.turret_entities = {} global.ammo_entities = {}
global.car_entities = {}
end) end)
script.on_nth_tick(3600, function (event) script.on_nth_tick(3600, function (event)
--Every minute the surface is rescanned for car and ammo-turret type entities. This is stored in two global tables. --Every minute the surface is rescanned for car and ammo-turret type entities. This is stored in two global tables.
for index,surface in pairs(game.surfaces) do for index,surface in pairs(game.surfaces) do
global.turret_entities[index] = surface.find_entities_filtered{type = "ammo-turret"} global.ammo_entities[index] = surface.find_entities_filtered{type = {"ammo-turret","car"}}
global.car_entities[index] = surface.find_entities_filtered{type = "car"}
end end
end) end)
@@ -25,38 +76,38 @@ script.on_nth_tick(600, function (event)
--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 car and ammo-turret entities on the same force as them.
for _,player in pairs(game.connected_players) do for _,player in pairs(game.connected_players) do
GTA_turret_enabled = player.mod_settings["gun-turret-alerts-enabled"].value turret_enabled = player.mod_settings["gun-turret-alerts-enabled"].value
GTA_car_enabled = player.mod_settings["gun-turret-alerts-car-enabled"].value car_enabled = player.mod_settings["gun-turret-alerts-car-enabled"].value
mode = player.mod_settings["gun-turret-alerts-mode"].value
player_threshold = player.mod_settings["gun-turret-alerts-threshold"].value player_threshold = player.mod_settings["gun-turret-alerts-threshold"].value
turret_entities = global.turret_entities[player.surface.name] ammo_entities = global.ammo_entities[player.surface.name]
car_entities = global.car_entities[player.surface.name]
if GTA_turret_enabled and turret_entities then if ammo_entities then
for _,turret_entity in pairs(turret_entities) do for _,entity in pairs(ammo_entities) do
if turret_entity.valid and turret_entity.force == player.force then if entity.valid and entity.force == player.force then
inv_var = turret_entity.get_inventory(defines.inventory.turret_ammo)
if inv_var.is_empty() then local inventory
-- no ammo alert if entity.type == "ammo-turret" and turret_enabled then
player.add_custom_alert(turret_entity, {type = "virtual", name = "ammo-icon-red"}, {"gun-turret-alerts.message-empty", turret_entity.localised_name}, true) inventory = entity.get_inventory(defines.inventory.turret_ammo)
elseif inv_var[1].count < player_threshold then elseif entity.type == "car" and car_enabled then
-- low ammo alert inventory = entity.get_inventory(defines.inventory.car_ammo)
player.add_custom_alert(turret_entity, {type = "virtual", name = "ammo-icon-yellow"}, {"gun-turret-alerts.message-low", turret_entity.localised_name}, true)
end end
end
end
end
if GTA_car_enabled and car_entities then local no, low
for _,car_entity in pairs(car_entities) do if inventory and get_ammo_flags[mode] then
-- extra check if car has gun if entity.type == "ammo-turret" then
if car_entity.valid and car_entity.force == player.force and car_entity.selected_gun_index then no, low = get_ammo_flags[mode](inventory)
inv_var = car_entity.get_inventory(defines.inventory.car_ammo) elseif entity.type == "car" then
if inv_var.is_empty() then no, low = get_ammo_flags[mode](inventory,entity.selected_gun_index)
end
end
if no then
-- no ammo alert -- no ammo alert
player.add_custom_alert(car_entity, {type = "virtual", name = "ammo-icon-red"}, {"gun-turret-alerts.message-empty", car_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 inv_var[1].count < player_threshold then elseif low then
-- low ammo alert -- low ammo alert
player.add_custom_alert(car_entity, {type = "virtual", name = "ammo-icon-yellow"}, {"gun-turret-alerts.message-low", car_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
end end
end end
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "Gun_Turret_Alerts", "name": "Gun_Turret_Alerts",
"version": "1.1.4", "version": "1.1.5",
"title": "Ammo Alerts", "title": "Ammo Alerts",
"author": "Wyrrrd", "author": "Wyrrrd",
"factorio_version": "1.1", "factorio_version": "1.1",
+7
View File
@@ -1,13 +1,20 @@
[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-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-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]
autofilter_mode-added=Aufaddiert
autofilter_mode-individually=Einzeln
autofilter_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
+10 -3
View File
@@ -1,12 +1,19 @@
[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-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-threshold=If a car or turret has less than this much ammo an alert will 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 car or turret has less than this much ammo an alert will be added to your player.
[string-mod-setting]
autofilter_mode-added=Added up
autofilter_mode-individually=Individually
autofilter_mode-selected=Selected
[gun-turret-alerts] [gun-turret-alerts]
message-empty=__1__ out of ammo message-empty=__1__ out of ammo
+8 -3
View File
@@ -13,6 +13,13 @@ data:extend({
name = "gun-turret-alerts-car-enabled", name = "gun-turret-alerts-car-enabled",
setting_type = "runtime-per-user", setting_type = "runtime-per-user",
default_value = true default_value = true
},
{
type = "string-setting",
name = "gun-turret-alerts-mode",
setting_type = "runtime-per-user",
allowed_values = {"added","individually","selected"},
default_value = "selected"
}, },
{ {
type = "int-setting", type = "int-setting",
@@ -20,7 +27,5 @@ data:extend({
setting_type = "runtime-per-user", setting_type = "runtime-per-user",
default_value = 8, default_value = 8,
minimum_value = 0 minimum_value = 0
},
}
}) })