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

Compare commits

...

17 Commits

Author SHA1 Message Date
Wyrrrd 87c2c17d72 Scan rework, car fix & multislot fix
- only scanning for forces with connected players
- only scanning on init, updating with entities when they are built/removed
- no alerts for cars without guns
- added multislot behaviour
2021-04-21 10:28:24 +02:00
Wyrrrd fa2781aee2 Update control.lua
- commentary
- fix for multislot turrets
- small fixes
2021-04-20 10:07:26 +02:00
Wyrrrd 72e8b5509d Update control.lua 2021-04-20 09:24:40 +02:00
Wyrrrd 15a8590a76 Some quick fixes 2021-04-19 23:42:11 +02:00
Wyrrrd 0d7676d71e Added multislot logic for cars
- "correctly" handling multiple ammo slots (three solutions)
- not scanning surfaces twice anymore
2021-04-19 22:38:50 +02:00
Wyrrrd 48bcdc2ba5 Update README.md 2021-04-02 20:22:28 +02:00
Wyrrrd bd8049999b Update README.md 2021-04-02 20:16:06 +02:00
Wyrrrd 846fb1412e Fixed migration breaking multiplayer
Removed migration, fixed missing car index through on_config_changed
2021-04-02 14:20:20 +02:00
Wyrrrd 2b5f19052e Localisation tweaks
- Added alerts to locale
- Customized alerts with localised name of entities
2021-03-29 09:42:18 +02:00
Wyrrrd db141f81ca Icon meta changes 2021-03-29 08:50:35 +02:00
Wyrrrd 1eb12f0f28 Merge pull request #2 from snouz/master
New ammo icons, new thumbnail
2021-03-29 06:44:45 +00:00
snouz eb3b6cf0e6 graphics
-mod icon
-actual yellow and red ammo alerts (yellow derivated from existing vanilla ammo alert)
2021-03-29 01:24:55 +02:00
Wyrrrd 7f0fa8bbcf Fix game crash on existing save 2021-03-28 17:49:53 +02:00
Wyrrrd d2bdd2663f Update README.md 2021-03-28 15:38:53 +02:00
Wyrrrd f42afe756a Added car ammo alerts 2021-03-28 15:36:13 +02:00
Wyrrrd 52e8d69938 Version bump for base game 1.1 2020-12-02 18:58:24 +01:00
Wyrrrd 230c093dc8 Update README.md
Matched to mod portal description
2020-03-27 12:57:17 +01:00
13 changed files with 319 additions and 41 deletions
+1
View File
@@ -1 +1,2 @@
*.zip
.vscode/*
+8 -6
View File
@@ -1,10 +1,12 @@
# Gun Turret Alerts
# Ammo Alerts
<img src=https://raw.githubusercontent.com/Wyrrrd/Gun_Turret_Alerts/master/thumbnail.png width="128" height="128">
(Please note: This is a quick and dirty port to 0.18. As soon as the original is ported to 0.18, this will be removed.)
### 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.
Description
- Adds alerts when a gun turret is out of ammo or has low ammo.
### 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.
Credit:
- Thanks to [unhott](https://mods.factorio.com/user/unhott) for the [original mod](https://mods.factorio.com/mod/GunTurretAlerts).
### Credit
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.
+43
View File
@@ -1,4 +1,47 @@
---------------------------------------------------------------------------------------------------
Version: 1.1.5
Date: 2021-04-21
Features:
- Added config option to change behaviour on multiple ammo slots (mainly for cars)
Bugfixes:
- Fixed only checking first ammo slot in cars
- Fixed modded cars without guns causing ammo empty alerts (AAI)
Optimisations:
- Only scanning surfaces for forces with connected players
- Only scanning surfaces on init now, updating by single entities as they are build or removed
- Only scanning surfaces once instead of twice (once for turrets and once for cars)
---------------------------------------------------------------------------------------------------
Version: 1.1.4
Date: 2021-04-02
Bugfixes:
- Fix multiplayer incompatibility by clearing index on game version/mod version/config change
Locale:
- Added alerts to locale
- Customized alerts with localised name of entities
---------------------------------------------------------------------------------------------------
Version: 1.1.3
Date: 2021-03-29
Changes:
- Icon and message overhaul (by snouz)
---------------------------------------------------------------------------------------------------
Version: 1.1.2
Date: 2021-03-28
Bugfixes:
- Added migration to add car index to existing saves
---------------------------------------------------------------------------------------------------
Version: 1.1.1
Date: 2021-03-28
Changes:
- Added car ammo alerts, if car has guns (this should apply to modded cars and tanks)
- Added config options to display/hide car and/or turret ammo alerts
- Added german locale
- Mod display name is now less focused on turrets
---------------------------------------------------------------------------------------------------
Version: 1.1.0
Date: 2020-12-02
Changes:
- Version bump for base game 1.1
---------------------------------------------------------------------------------------------------
Version: 0.18.3
Date: 2020-03-21
Changes:
+197 -24
View File
@@ -1,39 +1,212 @@
--control.lua
--This mod scans the map for gun-turrets and places alerts when turrets are low.
--This mod scans the map for cars and gun-turrets and places alerts when they are low on ammo.
script.on_init(function (event)
-- turret index init
global.turret_entities = {}
end)
--util functions
script.on_nth_tick(3600, function (event)
--Every minute the surface is rescanned for ammo-turret type entities. This is stored in the global table.
for index,surface in pairs(game.surfaces) do
global.turret_entities[index] = surface.find_entities_filtered{type = "ammo-turret"}
function table_is_empty(table)
for _,_ in pairs(table) do
return false
end
return true
end
--local functions
local get_ammo_flags = {
--Applies mode to inventory, calculates and returns respective inventory flags
["added"] = function (inventory,player_threshold)
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,player_threshold)
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,player_threshold,gun_index)
local no,low = false
if inventory.is_empty() then
no = true
else
if not gun_index then
-- default to added mode if no slot selected (probably multislot turret)
no, low = get_ammo_flags["added"](inventory, player_threshold)
elseif inventory[gun_index].count == 0 then
no = true
elseif inventory[gun_index].count < player_threshold then
low = true
end
end
return no, low
end
end)
}
script.on_nth_tick(600, function (event)
--Every 10 seconds recheck and give alerts to players for ammo-turret entities on the same force as them.
local function add_entity_to_list(event)
--Whenever an ammo-turret or car type entity is built, add it to the global table.
local index = event.created_entity.surface.name.."_"..event.created_entity.force.name
if global.ammo_entities[index] then
table.insert(global.ammo_entities[index], event.created_entity)
end
end
local function remove_entity_from_list(event)
--Whenever an ammo-turret or car type entity dies / is mined, remove it from the global table.
local index = event.entity.surface.name.."_"..event.entity.force.name
if global.ammo_entities[index] then
for i,entity in pairs(global.ammo_entities[index]) do
if (entity == event.entity) then
table.remove(global.ammo_entities[index], i)
break
end
end
end
end
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.
local player, force
if event.player_index then
player = game.get_player(event.player_index)
force = player.force
elseif event.force then
force = event.force
if force.connected_players then
player = force.connected_players[1]
end
end
if player and force and not global.ammo_entities[player.surface.name.."_"..force.name] then
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}
end
end
end
local function remove_force_from_list(event)
--Whenever the last player of a force leaves the game or forces are merged, remove all entities of that force from the global table.
local force
local param = {}
if event.player_index and event.force then
param.player_index = event.player_index
add_force_to_list(param)
force = event.force
elseif event.player_index then
force = game.get_player(event.player_index).force
elseif event.force then
force = event.force
elseif event.source and event.destination then
param.force = event.destination
add_force_to_list(param)
force = source
end
if force and not force.connected_players then
for surface_name,_ in pairs(game.surfaces) do
global.ammo_entities[surface_name.."_"..force.name] = nil
end
end
end
local function init_list()
-- index init
global.ammo_entities = {}
local param = {}
for _,force in pairs(game.forces) do
param.force = force
add_force_to_list(param)
end
end
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.
for _,player in pairs(game.connected_players) do
GTA_enabled = player.mod_settings["gun-turret-alerts-enabled"].value
player_threshold = player.mod_settings["gun-turret-alerts-threshold"].value
turret_entities = global.turret_entities[player.surface.name]
local turret_enabled = player.mod_settings["gun-turret-alerts-enabled"].value
local car_enabled = player.mod_settings["gun-turret-alerts-car-enabled"].value
local mode = player.mod_settings["gun-turret-alerts-mode"].value
local player_threshold = player.mod_settings["gun-turret-alerts-threshold"].value
local ammo_entities = global.ammo_entities[player.surface.name.."_"..player.force.name]
if GTA_enabled and turret_entities then
for _,turret_entity in pairs(turret_entities) do
if turret_entity.valid and turret_entity.force == player.force then
inv_var = turret_entity.get_inventory(defines.inventory.turret_ammo)
if inv_var.is_empty() then
if ammo_entities then
for _,entity in pairs(ammo_entities) do
if entity.valid and entity.force == player.force then
--Get ammo inventory based on entity type, skip cars 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" and not table_is_empty(entity.prototype.guns) then
inventory = entity.get_inventory(defines.inventory.car_ammo)
end
--Check for states of no or low ammo based on mode
local no, low = false
if inventory and get_ammo_flags[mode] then
if entity.type == "ammo-turret" then
no, low = get_ammo_flags[mode](inventory, player_threshold)
elseif entity.type == "car" then
no, low = get_ammo_flags[mode](inventory, player_threshold, entity.selected_gun_index)
end
end
--Create alert for present state
if no then
-- no ammo alert
player.add_custom_alert(turret_entity, {type = "item", name = "piercing-rounds-magazine"}, "Out of ammo", true)
elseif inv_var[1].count < player_threshold then
player.add_custom_alert(entity, {type = "virtual", name = "ammo-icon-red"}, {"gun-turret-alerts.message-empty", entity.localised_name}, true)
elseif low then
-- low ammo alert
player.add_custom_alert(turret_entity, {type = "item", name = "firearm-magazine"}, "Ammo low", 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)
end
-- Event handlers
script.on_init(init_list)
script.on_configuration_changed(init_list)
script.on_event(defines.events.on_player_joined_game, add_force_to_list)
script.on_event(defines.events.on_player_left_game, remove_force_from_list)
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_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"}})
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_robot_mined_entity, 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"}})
script.on_nth_tick(600, generate_alerts)
+1
View File
@@ -1 +1,2 @@
--data.lua
require("prototypes.signals")
Binary file not shown.

After

Width:  |  Height:  |  Size: 825 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1007 B

+5 -5
View File
@@ -1,9 +1,9 @@
{
"name": "Gun_Turret_Alerts",
"version": "0.18.3",
"title": "Gun_Turret_Alerts",
"version": "1.1.5",
"title": "Ammo Alerts",
"author": "Wyrrrd",
"factorio_version": "0.18",
"dependencies": ["base >= 0.18"],
"description": "Adds map alerts for players when a turret is either out of ammo or has low ammo"
"factorio_version": "1.1",
"dependencies": ["base >= 1.1.0"],
"description": "Adds map alerts for players when a turret or car is either out of ammo or has low ammo"
}
+20
View File
@@ -0,0 +1,20 @@
[mod-setting-name]
gun-turret-alerts-enabled=Alarme für Geschützturmmunition 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
[mod-setting-description]
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-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
[string-mod-setting]
autofilter_mode-added=Aufaddiert
autofilter_mode-individually=Einzeln
autofilter_mode-selected=Auswahl
[gun-turret-alerts]
message-empty=__1__ hat keine Munition
message-low=__1__ hat wenig Munition
+16 -3
View File
@@ -1,7 +1,20 @@
[mod-setting-name]
gun-turret-alerts-enabled=Gun turret alerts enabled
gun-turret-alerts-enabled=Turret 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
[mod-setting-description]
gun-turret-alerts-enabled=Enables alerts to be added to your player
gun-turret-alerts-threshold=If a turret has less than this much ammo an alert will 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-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]
message-empty=__1__ out of ammo
message-low=__1__ ammo low
+14
View File
@@ -0,0 +1,14 @@
data:extend({
{
type = "virtual-signal",
name = "ammo-icon-red",
icon = "__Gun_Turret_Alerts__/graphics/ammo-icon-red.png",
icon_size = 64,
},
{
type = "virtual-signal",
name = "ammo-icon-yellow",
icon = "__Gun_Turret_Alerts__/graphics/ammo-icon-yellow.png",
icon_size = 64,
}
})
+14 -3
View File
@@ -7,6 +7,19 @@ data:extend({
name = "gun-turret-alerts-enabled",
setting_type = "runtime-per-user",
default_value = true
},
{
type = "bool-setting",
name = "gun-turret-alerts-car-enabled",
setting_type = "runtime-per-user",
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",
@@ -14,7 +27,5 @@ data:extend({
setting_type = "runtime-per-user",
default_value = 8,
minimum_value = 0
}
},
})
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 23 KiB