Merge branch 'develop' of https://github.com/FlightControl-Master/MOOSE into develop

This commit is contained in:
patpatpowercat
2026-05-19 09:41:34 -07:00
5 changed files with 425 additions and 33 deletions
+145 -22
View File
@@ -62,7 +62,8 @@ do -- SET_BASE
-- @field #table List Unused table.
-- @field Core.Scheduler#SCHEDULER CallScheduler
-- @field #SET_BASE.Filters Filter Filters
-- @field #booleaen filterNoRegex If true, FilterPrefix ignores special characters and evaluates plain string.
-- @field #boolean filterNoRegex If true, FilterPrefix ignores special characters and evaluates plain string. Defaults to false.
-- @field #boolean filterReplaceDash If true then if filterNoRegex is false, replace dashes with regex pattern friendly pattern. Defaults to true
-- @extends Core.Base#BASE
--- The @{Core.Set#SET_BASE} class defines the core functions that define a collection of objects.
@@ -102,6 +103,7 @@ do -- SET_BASE
},
},
filterNoRegex=false,
filterReplaceDash=true,
}
--- Filters
@@ -256,7 +258,8 @@ do -- SET_BASE
-- @return #boolean Returns `true`, if the pattern is contained in the name and false otherwise.
function SET_BASE:_SearchPattern(Name, Pattern, NoRegex, ReplaceDash)
NoRegex=NoRegex or self.filterNoRegex
if ReplaceDash==true then
ReplaceDash=ReplaceDash or self.filterReplaceDash
if ReplaceDash==true and NoRegex ~= true then
-- Not sure why "-" is replaced by "%-" ?! - So we can still match group names with a dash in them
-- reason is that the string is interpreted as a pattern and "-" is a special character then. For interpreting it as a string, fourth parameter needs to be set to true.
Pattern=Pattern:gsub("-", "%%-")
@@ -265,6 +268,16 @@ do -- SET_BASE
return contain
end
---Set Regex Options for FilterPrefix function.
-- @param #SET_BASE self
-- @param #boolean NoRegex If true, switch off Regex pattern matching for FilterPrefixes.
-- @param #boolean ReplaceDash If false, switch off dash "-" replacement in strings for FilterPrefixes.
-- @return #SET_BASE self
function SET_BASE:FilterSetRegex(NoRegex,ReplaceDash)
if NoRegex ~= nil then self.filterNoRegex = NoRegex end
self.filterReplaceDash = ReplaceDash or true
return self
end
--- Gets the Set.
-- @param #SET_BASE self
@@ -1198,7 +1211,21 @@ do
-- @param #SET_GROUP self
-- @return #SET_GROUP self
---Set Regex Options for FilterPrefix function.
-- @function [parent=#SET_GROUP] FilterSetRegex
-- @param #SET_GROUP self
-- @param #boolean NoRegex If true, switch off Regex pattern matching for FilterPrefixes.
-- @param #boolean ReplaceDash If false, switch off dash "-" replacement in strings for FilterPrefixes.
-- @return #SET_GROUP self
--- Builds a set of objects of same coalitions.
-- Possible current coalitions are red, blue and neutral.
-- @function [parent=#SET_GROUP] FilterCoalitions
-- @param #SET_GROUP self
-- @param #string Coalitions Can take the following values: "red", "blue", "neutral" and coalition.side.RED, coalition.side.BLUE,coalition.side.NEUTRAL
-- @param #boolean Clear If `true`, clear any previously defined filters.
-- @return #SET_GROUP self
end
--- Get a *new* set table that only contains alive groups.
@@ -2116,7 +2143,7 @@ do
if self.Filter.GroupPrefixes and MGroupInclude then
local MGroupPrefix = false
for GroupPrefixId, GroupPrefix in pairs(self.Filter.GroupPrefixes) do
if self:_SearchPattern(MGroup:GetName(), GroupPrefix, false, true) then
if self:_SearchPattern(MGroup:GetName(), GroupPrefix, self.filterNoRegex, self.filterReplaceDash) then
MGroupPrefix = true
end
end
@@ -2337,6 +2364,26 @@ do -- SET_UNIT
-- @param #SET_UNIT self
-- @return #SET_UNIT self
--- Filter the set once
-- @function [parent=#SET_UNIT] FilterOnce
-- @param #SET_UNIT self
-- @return #SET_UNIT self
---Set Regex Options for FilterPrefix function.
-- @function [parent=#SET_UNIT] FilterSetRegex
-- @param #SET_UNIT self
-- @param #boolean NoRegex If true, switch off Regex pattern matching for FilterPrefixes.
-- @param #boolean ReplaceDash If false, switch off dash "-" replacement in strings for FilterPrefixes.
-- @return #SET_UNIT self
--- Builds a set of objects of same coalitions.
-- Possible current coalitions are red, blue and neutral.
-- @function [parent=#SET_UNIT] FilterCoalitions
-- @param #SET_UNIT self
-- @param #string Coalitions Can take the following values: "red", "blue", "neutral" and coalition.side.RED, coalition.side.BLUE,coalition.side.NEUTRAL
-- @param #boolean Clear If `true`, clear any previously defined filters.
-- @return #SET_UNIT self
return self
end
@@ -3348,7 +3395,7 @@ do -- SET_UNIT
if self.Filter.UnitPrefixes and MUnitInclude then
local MUnitPrefix = false
for UnitPrefixId, UnitPrefix in pairs(self.Filter.UnitPrefixes) do
if self:_SearchPattern(MUnit:GetName(), UnitPrefix, false, true) then
if self:_SearchPattern(MUnit:GetName(), UnitPrefix, self.filterNoRegex, self.filterReplaceDash) then
MUnitPrefix = true
end
end
@@ -3544,7 +3591,27 @@ do -- SET_STATIC
-- Inherits from BASE
local self = BASE:Inherit(self, SET_BASE:New(_DATABASE.STATICS)) -- Core.Set#SET_STATIC
--- Filter the set once
-- @function [parent=#SET_STATIC] FilterOnce
-- @param #SET_STATIC self
-- @return #SET_STATIC self
---Set Regex Options for FilterPrefix function.
-- @function [parent=#SET_STATIC] FilterSetRegex
-- @param #SET_STATIC self
-- @param #boolean NoRegex If true, switch off Regex pattern matching for FilterPrefixes.
-- @param #boolean ReplaceDash If false, switch off dash "-" replacement in strings for FilterPrefixes.
-- @return #SET_STATIC self
--- Builds a set of objects of same coalitions.
-- Possible current coalitions are red, blue and neutral.
-- @function [parent=#SET_STATIC] FilterCoalitions
-- @param #SET_STATIC self
-- @param #string Coalitions Can take the following values: "red", "blue", "neutral" and coalition.side.RED, coalition.side.BLUE,coalition.side.NEUTRAL
-- @param #boolean Clear If `true`, clear any previously defined filters.
-- @return #SET_STATIC self
return self
end
@@ -4119,7 +4186,7 @@ do -- SET_STATIC
if self.Filter.StaticPrefixes then
local MStaticPrefix = false
for StaticPrefixId, StaticPrefix in pairs(self.Filter.StaticPrefixes) do
if self:_SearchPattern(MStatic:GetName(), StaticPrefix, false, true) then
if self:_SearchPattern(MStatic:GetName(), StaticPrefix, self.filterNoRegex, self.filterReplaceDash) then
MStaticPrefix = true
end
end
@@ -4303,7 +4370,27 @@ do -- SET_CLIENT
local self = BASE:Inherit(self, SET_BASE:New(_DATABASE.CLIENTS)) -- #SET_CLIENT
self:FilterActive(false)
--- Filter the set once
-- @function [parent=#SET_CLIENT] FilterOnce
-- @param #SET_CLIENT self
-- @return #SET_CLIENT self
---Set Regex Options for FilterPrefix function.
-- @function [parent=#SET_CLIENT] FilterSetRegex
-- @param #SET_CLIENT self
-- @param #boolean NoRegex If true, switch off Regex pattern matching for FilterPrefixes.
-- @param #boolean ReplaceDash If false, switch off dash "-" replacement in strings for FilterPrefixes.
-- @return #SET_CLIENT self
--- Builds a set of objects of same coalitions.
-- Possible current coalitions are red, blue and neutral.
-- @function [parent=#SET_CLIENT] FilterCoalitions
-- @param #SET_CLIENT self
-- @param #string Coalitions Can take the following values: "red", "blue", "neutral" and coalition.side.RED, coalition.side.BLUE,coalition.side.NEUTRAL
-- @param #boolean Clear If `true`, clear any previously defined filters.
-- @return #SET_CLIENT self
return self
end
@@ -4902,7 +4989,7 @@ do -- SET_CLIENT
if self.Filter.ClientPrefixes and MClientInclude then
local MClientPrefix = false
for ClientPrefixId, ClientPrefix in pairs(self.Filter.ClientPrefixes) do
if self:_SearchPattern(MClient.UnitName, ClientPrefix) then
if self:_SearchPattern(MClient.UnitName, ClientPrefix, self.filterNoRegex, self.filterReplaceDash) then
MClientPrefix = true
end
end
@@ -4926,7 +5013,7 @@ do -- SET_CLIENT
local playername = MClient:GetPlayerName() or "Unknown"
--self:T(playername)
for _,_Playername in pairs(self.Filter.Playernames) do
if playername and self:_SearchPattern(playername,_Playername) then
if playername and self:_SearchPattern(playername,_Playername,self.filterNoRegex, self.filterReplaceDash) then
MClientPlayername = true
end
end
@@ -4939,7 +5026,7 @@ do -- SET_CLIENT
local callsign = MClient:GetCallsign()
--self:I(callsign)
for _,_Callsign in pairs(self.Filter.Callsigns) do
if callsign and self:_SearchPattern(callsign,_Callsign, true) then
if callsign and self:_SearchPattern(callsign,_Callsign, self.filterNoRegex, self.filterReplaceDash) then
MClientCallsigns = true
end
end
@@ -5360,7 +5447,7 @@ do -- SET_PLAYER
if self.Filter.ClientPrefixes then
local MClientPrefix = false
for ClientPrefixId, ClientPrefix in pairs(self.Filter.ClientPrefixes) do
if self:_SearchPattern(MClient.UnitName,ClientPrefix) then
if self:_SearchPattern(MClient.UnitName,ClientPrefix,self.filterNoRegex, self.filterReplaceDash) then
MClientPrefix = true
end
end
@@ -5830,7 +5917,19 @@ do -- SET_ZONE
function SET_ZONE:New()
-- Inherits from BASE
local self = BASE:Inherit(self, SET_BASE:New(_DATABASE.ZONES))
--- Filter the set once
-- @function [parent=#SET_ZONE] FilterOnce
-- @param #SET_ZONE self
-- @return #SET_ZONE self
---Set Regex Options for FilterPrefix function.
-- @function [parent=#SET_ZONE] FilterSetRegex
-- @param #SET_ZONE self
-- @param #boolean NoRegex If true, switch off Regex pattern matching for FilterPrefixes.
-- @param #boolean ReplaceDash If false, switch off dash "-" replacement in strings for FilterPrefixes.
-- @return #SET_ZONE self
return self
end
@@ -6068,7 +6167,7 @@ do -- SET_ZONE
if self.Filter.Prefixes then
local MZonePrefix = false
for ZonePrefixId, ZonePrefix in pairs(self.Filter.Prefixes) do
if self:_SearchPattern(MZoneName, ZonePrefix, false, true) then
if self:_SearchPattern(MZoneName, ZonePrefix, self.filterNoRegex, self.filterReplaceDash) then
MZonePrefix = true
end
end
@@ -6577,7 +6676,7 @@ do -- SET_ZONE_GOAL
if self.Filter.Prefixes then
local MZonePrefix = false
for ZonePrefixId, ZonePrefix in pairs(self.Filter.Prefixes) do
if self:_SearchPattern(MZoneName, ZonePrefix, false, true) then
if self:_SearchPattern(MZoneName, ZonePrefix, self.filterNoRegex, self.filterReplaceDash) then
MZonePrefix = true
end
end
@@ -6713,7 +6812,19 @@ do -- SET_OPSZONE
-- Inherits from BASE
local self = BASE:Inherit(self, SET_BASE:New(_DATABASE.OPSZONES))
--- Filter the set once
-- @function [parent=#SET_OPSZONE] FilterOnce
-- @param #SET_OPSZONE self
-- @return #SET_OPSZONE self
---Set Regex Options for FilterPrefix function.
-- @function [parent=#SET_OPSZONE] FilterSetRegex
-- @param #SET_OPSZONE self
-- @param #boolean NoRegex If true, switch off Regex pattern matching for FilterPrefixes.
-- @param #boolean ReplaceDash If false, switch off dash "-" replacement in strings for FilterPrefixes.
-- @return #SET_OPSZONE self
return self
end
@@ -6938,7 +7049,7 @@ do -- SET_OPSZONE
for ZonePrefixId, ZonePrefix in pairs(self.Filter.Prefixes) do
-- Prefix
if self:_SearchPattern(MZoneName, ZonePrefix, false, true) then
if self:_SearchPattern(MZoneName, ZonePrefix, self.filterNoRegex, self.filterReplaceDash) then
MZonePrefix = true
break --Break the loop as we found the prefix.
end
@@ -7732,7 +7843,7 @@ function SET_OPSGROUP:_EventOnBirth(Event)
local MGroupPrefix = false
for GroupPrefixId, GroupPrefix in pairs(self.Filter.GroupPrefixes) do
if self:_SearchPattern(MGroup:GetName(), GroupPrefix, false, true) then
if self:_SearchPattern(MGroup:GetName(), GroupPrefix, self.filterNoRegex, self.filterReplaceDash) then
MGroupPrefix = true
end
end
@@ -8066,7 +8177,7 @@ do -- SET_SCENERY
if self.Filter.Prefixes then
local MSceneryPrefix = false
for ZonePrefixId, ZonePrefix in pairs(self.Filter.Prefixes) do
if self:_SearchPattern(MSceneryName, ZonePrefix, false, true) then
if self:_SearchPattern(MSceneryName, ZonePrefix, self.filterNoRegex, self.filterReplaceDash) then
MSceneryPrefix = true
end
end
@@ -8289,7 +8400,19 @@ do -- SET_DYNAMICCARGO
--- Inherits from BASE
local self = BASE:Inherit(self, SET_BASE:New(_DATABASE.DYNAMICCARGO)) -- Core.Set#SET_DYNAMICCARGO
--- Filter the set once
-- @function [parent=#SET_DYNAMICCARGO] FilterOnce
-- @param #SET_DYNAMICCARGO self
-- @return #SET_DYNAMICCARGO self
---Set Regex Options for FilterPrefix function.
-- @function [parent=#SET_DYNAMICCARGO] FilterSetRegex
-- @param #SET_DYNAMICCARGO self
-- @param #boolean NoRegex If true, switch off Regex pattern matching for FilterPrefixes.
-- @param #boolean ReplaceDash If false, switch off dash "-" replacement in strings for FilterPrefixes.
-- @return #SET_DYNAMICCARGO self
return self
end
@@ -8337,7 +8460,7 @@ do -- SET_DYNAMICCARGO
if self.Filter.StaticPrefixes then
local DCargoPrefix = false
for StaticPrefixId, StaticPrefix in pairs(self.Filter.StaticPrefixes) do
if self:_SearchPattern(DCargo:GetName(), StaticPrefix, false, true) then
if self:_SearchPattern(DCargo:GetName(), StaticPrefix, self.filterNoRegex, self.filterReplaceDash) then
DCargoPrefix = true
end
end
@@ -8505,7 +8628,7 @@ do -- SET_DYNAMICCARGO
function SET_DYNAMICCARGO:FilterCurrentOwner(PlayerName)
self:FilterFunction(
function(cargo)
if cargo and cargo.Owner and self:_SearchPattern(cargo.Owner, PlayerName, true) then
if cargo and cargo.Owner and self:_SearchPattern(cargo.Owner, PlayerName, self.filterNoRegex, self.filterReplaceDash) then
return true
else
return false
+13 -8
View File
@@ -795,15 +795,20 @@ do
local tgtgrp1 = self.Samset:FindNearestGroupFromPointVec2(tgtcoord)
local tgtcoord1 = tgtgrp1:GetCoordinate()
local tgtgrp2 = self.Groupset:FindNearestGroupFromPointVec2(tgtcoord)
local tgtcoord2 = tgtgrp2:GetCoordinate()
local dist1 = tgtcoord:Get2DDistance(tgtcoord1)
local dist2 = tgtcoord:Get2DDistance(tgtcoord2)
if dist1 < dist2 then
targetunit = tgtgrp1
targetcat = Object.Category.UNIT
if tgtgrp2 then
local tgtcoord2 = tgtgrp2:GetCoordinate()
local dist1 = tgtcoord:Get2DDistance(tgtcoord1)
local dist2 = tgtcoord:Get2DDistance(tgtcoord2)
if dist1 < dist2 then
targetunit = tgtgrp1
targetcat = Object.Category.UNIT
else
targetunit = tgtgrp2
targetcat = Object.Category.UNIT
end
else
targetunit = tgtgrp2
targetunit = tgtgrp1
targetcat = Object.Category.UNIT
end
end
@@ -1485,7 +1485,7 @@ function SUPPRESSION:onafterStop(Controllable, From, Event, To)
local text=string.format("Stopping SUPPRESSION for group %s", self.Controllable:GetName())
MESSAGE:New(text, 10):ToAllIf(self.Debug)
sefl:T(self.lid..text)
self:T(self.lid..text)
-- Clear all pending schedules
self.CallScheduler:Clear()
+7 -2
View File
@@ -204,7 +204,8 @@ do
-- my_ctld.C130DynamicCargoAutoBuildMergeSeconds = 0 -- Merge window in seconds for C-130 auto-build handoff; set to 0 to disable batching (default).
-- my_ctld.locale = "en" -- Language locale to use.
-- -- Supported: "en" English (default), "de" German, "fr" French, "es" Spanish,
-- -- "pt-br" Brazilian Portuguese, "ru" Russian, "tr" Turkish, "zh-cn" Simplified Chinese (Mainland China), "zh-tw" Traditional Chinese (Taiwan).
-- -- "it" Italian, "pt-br" Brazilian Portuguese, "ru" Russian, "tr" Turkish,
-- -- "zh-cn" Simplified Chinese (Mainland China), "zh-tw" Traditional Chinese (Taiwan).
--
-- ## 2.1 CH-47 Chinook support
--
@@ -1499,7 +1500,7 @@ function CTLD:_InitLocalization()
end
--- [User] Set a resolver used to select a CTLD locale for group-specific menus and messages.
-- Supported locales: "en", "de", "fr", "es", "pt-br", "ru", "tr", "zh-cn", "zh-tw".
-- Supported locales: "en", "de", "fr", "es", "it", "pt-br", "ru", "tr", "zh-cn", "zh-tw".
-- If unset, CTLD keeps using `self.locale` as before.
-- @param #CTLD self
-- @param #function Resolver Function called as `Resolver(self, Group)` and expected to return a locale string.
@@ -1542,6 +1543,10 @@ function CTLD:_GetMenuPluralSuffix(Count, Kind, Group)
return "ов"
end
if locale == "tr" then return "" end
if locale == "it" then
if Kind == "crate" then return count > 1 and "e" or "a" end
if Kind == "set" then return "" end
end
if locale == "de" and Kind == "crate" then return count > 1 and "n" or "" end
return count > 1 and "s" or ""
end
@@ -955,6 +955,265 @@ FR = {
BUILD_YES="SI",
BUILD_NO="NO",
},
IT = {
-- ============================================================
-- Crate / Cargo Loading
-- ============================================================
CRATE_LOADED_GROUNDCREW = "Cassa %s caricata dal personale di terra!",
CRATE_UNLOADED_GROUNDCREW = "Cassa %s scaricata dal personale di terra!",
CRATE_LOADED_ID = "ID cassa %d per %s caricato!",
LOADED_FULL = "Caricato %d %s.",
LOADED_SETS_LEFTOVER = "Caricato %d %s(s), con %d casse rimanenti.",
LOADED_SETS = "Caricato %d %s(s).",
LOADED_PARTIAL = "Caricato solo %d/%d casse di %s.",
LOADED_PARTIAL_LIMIT = "Caricato solo %d/%d casse di %s. Il limite di carico è stato raggiunto.!",
LOADED_BATCH = "Caricato %d %s.",
LOADED_BATCH_PARTIAL = "Alcuni set non sono stati caricati completamente.",
-- ============================================================
-- Dropping / Unloading
-- ============================================================
DROPPED_FULL = "Scaricati %d %s.",
DROPPED_SETS_LEFTOVER = "Sono stati scaricati %d %s(s), con %d casse rimanenti.",
DROPPED_SETS = "Scaricati %d %s(s).",
DROPPED_PARTIAL = "Scaricati %d/%d cassa(e) di %s.",
DROPPED_INTO_ACTION = "Scaricati %s in azione!",
DROPPED_BEACON = "Scaricati %s | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
CRATES_POSITIONED = "%d Le casse per %s sono state posizionate vicino a te!",
CRATES_DROPPED = "%d casse per %s sono state rilasciate!",
-- ============================================================
-- Troops
-- ============================================================
BOARDED = "%s a bordo!",
BOARDING = "%s Imbarco!",
TROOPS_RETURNED = "Le truppe sono rientrate alla base!",
TROOPS_LABEL = "Ttuppe",
ENGINEERS_LABEL = "Ingenieri",
-- ============================================================
-- Deployment
-- ============================================================
DEPLOYED_NEAR_YOU = "%s sono stati dispiegati vicino a te!",
UNITS_REMOVED = "%s sono stati rimossi",
-- ============================================================
-- Build / Repair
-- ============================================================
BUILD_STARTED = "Costruzione avviata, pronta tra %d secondi!",
REPAIR_STARTED = "Riparazione avviata utilizzando %s e impiegando %d secondi",
NO_UNIT_TO_REPAIR = "Nessuna unità è abbastanza vicina per essere riparata!",
CANT_REPAIR_WITH = "Non è possibile riparare questa unità con %s",
CRATES_MOVE_BEFORE_BUILD = "*** Le casse devono essere spostate prima della costruzione.!",
-- ============================================================
-- Errors - Chopper / Weight / Capacity
-- ============================================================
CHOPPER_CANNOT_CARRY = "Spiacenti, questo elicottero non può trasportare casse!",
TOO_HEAVY = "Mi dispiace, è troppo pesante da caricare.!",
FULLY_LOADED = "Ci dispiace, abbiamo raggiunto la capacità massima!",
CRAMMED = "Ci dispiace, siamo già pieni.!",
NO_CAPACITY_NOW = "Impossibile caricare altro al momento!",
NO_MORE_CAPACITY = "Non c'è più capacità di carico per le casse!",
CANNOT_LOAD_NONE_OR_FULL = "Impossibile caricare le casse: non ne sono state trovate oppure non c'è più spazio disponibile.",
-- ============================================================
-- Errors - Position
-- ============================================================
NEED_TO_LAND_OR_HOVER_LOAD = "È necessario atterrare o rimanere in posizione per caricare!",
HOVER_OVER_CRATES = "Resta in hover sopra le casse per raccoglierle!",
LAND_OR_HOVER_OVER_CRATES = "Atterra o sorvola le casse per raccoglierle!",
MUST_LAND_OR_HOVER_CRATES = "Devi atterrare o rimanere in volo stazionario per caricare le casse!",
NEED_TO_LAND_BUILD = "Devi atterrare/fermarti per costruire qualcosa, pilota!",
NOT_CLOSE_ENOUGH_LOGISTICS = "Non sei abbastanza vicino a una zona logistica!",
NOT_CLOSE_ENOUGH_DROP = "Non sei abbastanza vicino a una zona di lancio!",
NOT_CLOSE_ENOUGH_ZONE_NM = "Negativo, è necessario essere più vicini di %dnm a una zona!",
CANNOT_BUILD_LOADING_AREA = "Non è possibile costruire in un'area di carico, Pilota!",
-- ============================================================
-- Errors - Doors
-- ============================================================
OPEN_DOORS_LOAD_CARGO = "È necessario aprire la/le porta/e per caricare la merce!",
OPEN_DOORS_LOAD_TROOPS = "È necessario aprire la/le porta/e per caricare le truppe!",
OPEN_DOORS_EXTRACT_TROOPS = "È necessario aprire la/le porta/e per estrarre le truppe!",
OPEN_DOORS_UNLOAD_TROOPS = "Devi aprire la/le porta/e per far scendere le truppe!",
OPEN_DOORS_DROP_CARGO = "È necessario aprire la/le porta/e per scaricare il carico!",
-- ============================================================
-- Errors - Stock / Availability
-- ============================================================
ALL_GONE = "Spiacenti, tutti i %s sono esauriti!",
RAN_OUT_OF = "Ci dispiace, abbiamo finito %s",
CARGO_NOT_AVAILABLE_ZONE = "Il carico richiesto non è disponibile in questa zona!",
ENOUGH_CRATES_NEARBY = "Ci sono già abbastanza casse qui vicino! Occupati prima di quelle!",
NO_CRATES_WITHIN = "Nessuna cassa (caricabile) entro %d metri!",
NO_CRATES_WITHIN_PLAIN = "Niente casse entro %d metri!",
NO_CRATES_IN_RANGE = "Nessuna cassa trovata nel raggio d'azione!",
NO_NAMED_CRATES_IN_RANGE = "Nessuna \"%s\" Casse trovate nel raggio d'azione!",
NO_LOADABLE_CRATES = "Spiacenti, nessuna cassa caricabile nelle vicinanze oppure peso massimo del carico raggiunto!",
NO_UNITS_TO_EXTRACT = "Nessuna unità è abbastanza vicina per l'estrazione!",
NO_UNIT_CONFIG = "Nessuna configurazione dell'unità trovata per %s",
CANT_ONBOARD = "Impossibile salire a bordo %s",
TOO_MANY_UNITS_NEARBY = "Hai già %d unità nelle vicinanze!",
NO_CRATE_GROUPS = "Nessun gruppo di casse trovato per questa unità!",
NO_CRATE_SET = "Nessun set di casse trovato o indice non valido!",
NO_CRATE_IN_SET = "Nessuna cassa trovata in quel set!",
NO_TROOP_CHUNK = "Nessun blocco di carico truppe trovato per l'ID %d!",
TROOP_CHUNK_EMPTY = "Il blocco truppe è vuoto per l'ID %d!",
-- ============================================================
-- Nothing loaded / in stock
-- ============================================================
NOTHING_LOADED = "Nessun caricamento effettuato!\nLimite truppe: %d | Limite casse: %d | Limite peso: %d kg",
NOTHING_LOADED_AIRDROP = "Nessun file caricato o non conforme ai parametri di AirDrop.!",
NOTHING_LOADED_HOVER = "Nessun caricamento effettuato o il puntatore del mouse non si trova all'interno dei parametri!",
NOTHING_IN_STOCK = "Nessun prodotto disponibile!",
NOTHING_TO_PACK = "Nothing to pack at this distance pilot!",
NOTHING_TO_REMOVE = "Niente da rimuovere a questa distanza pilota!",
-- ============================================================
-- Zone / Info
-- ============================================================
ROGER_ZONE = "Roger, %s Zona %s!",
-- ============================================================
-- Report: Hover / Flight Parameters
-- ============================================================
HOVER_PARAMS_METRIC = "Hover parametri (caricamento/rilascio automatico):\n - Altezza minima %dm \n - Altezza massima %dm \n - Velocità massima 2mps \n - Nel parametro: %s",
HOVER_PARAMS_IMPERIAL = "Hover parametri (caricamento/rilascio automatico):\n - Altezza minima %dft \n - Altezza massima %dft \n - Velocità massima 6ftps \n - Nel parametro: %s",
FLIGHT_PARAMS_IMPERIAL = "Flight parameters (airdrop):\n - Altezza minima %dft \n -Altezza massima %dft \n - Nel parametro: %s",
FLIGHT_PARAMS_METRIC = "Flight parameters (airdrop):\n - Altezza minima %dm \n - Altezza massima %dm \n - Nel parametro: %s",
-- ============================================================
-- Report Titles (REPORT:New())
-- ============================================================
REPORT_CRATES_FOUND = "Casse trovate nelle vicinanze:",
REPORT_REMOVING_CRATES = "Rimozione delle casse trovate nelle vicinanze:",
REPORT_TRANSPORT_CHECKOUT = "Documento di verifica del trasporto",
REPORT_INVENTORY = "Documento di inventario",
REPORT_BUILD_CHECKLIST = "Checklist Buildable Crates",
REPORT_REPAIR_CHECKLIST = "Lista di controllo per le riparazioni",
REPORT_BEACONS = "Segnalatori di zona attiva",
-- ============================================================
-- Report Section Headers (report:Add())
-- ============================================================
REPORT_SECTION_TROOPS = " -- TRUPPE --",
REPORT_SECTION_CRATES = " -- CASSE --",
REPORT_SECTION_CRATES_GC = " -- CASSE caricate tramite Ground Crew --",
REPORT_SECTION_NONE = " NESSUNO",
REPORT_SECTION_NONE_ALT = " --- Nessun risultato trovato! ---",
REPORT_SECTION_NONE_REPAIR = " --- Nessun risultato trovato ---",
REPORT_GC_LOADABLE_HINT = "Probabilmente caricabile dal personale di terra (F8)",
REPORT_TOTAL_MASS = "Massa totale: %s kg. Caricabile: %s kg.",
REPORT_TROOPS_CRATES_COUNT = "Truppe: %d(%d), Casse: %d(%d)",
REPORT_TROOPS_CRATETYPES_COUNT = "Truppe: %d, Tipi di casse: %d",
-- ============================================================
-- Report Row Templates (per-item lines in reports)
-- ============================================================
REPORT_ROW_TROOP = "Truppa: %s dimensione %d",
REPORT_ROW_CRATE = "Casse: %s %d/%d",
REPORT_ROW_CRATE_SIZE1 = "Cassa: %s dimensione 1",
REPORT_ROW_GC_CRATE = "GC Cassa caricata: %s dimensione 1",
REPORT_ROW_DROPPED_CRATE = "Cassa scaricata per %s, %dkg",
REPORT_ROW_CRATE_KG = "Cassa per %s, %dkg",
REPORT_ROW_CRATE_REMOVED = "Cassa per %s, %dkg rimossa",
REPORT_ROW_UNIT_STOCK = "Unità: %s | Soldati: %d | Stock: %s",
REPORT_ROW_TYPE_CRATE_STOCK = "Tipo: %s | Casse per set: %d | Stock: %s",
REPORT_ROW_TYPE_STOCK = "Tipo: %s | Stock: %s",
REPORT_ROW_BUILD_CHECK = "Tipo: %s | Richiesto %d | Trovato %d | puo' essere costruita %s",
REPORT_ROW_REPAIR_CHECK = "Tipo: %s | Richiesto %d | Trovato %d | Riparabile %s",
REPORT_ROW_BEACON = " %s | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
-- ============================================================
-- Weight / Crate limit tokens
-- ============================================================
WEIGHT_LIMIT = "Limite di peso raggiunto",
CRATE_LIMIT = "Limite di casse raggiunto",
-- ============================================================
-- Menu labels - Top level
-- ============================================================
MENU_CTLD = "CTLD",
MENU_MANAGE_TROOPS = "Gestire le truppe",
MENU_MANAGE_CRATES = "Gestisci casse",
MENU_MANAGE_UNITS = "Gestisci unita'",
-- ============================================================
-- Menu labels - Troops
-- ============================================================
MENU_LOAD_TROOPS = "Carica truppe",
MENU_DROP_TROOPS = "Scarica truppe",
MENU_DROP_ALL_TROOPS = "Scarica tutte le truppe",
MENU_EXTRACT_TROOPS = "Estrai truppe",
MENU_DROP_N_TROOPS = "Scarica (%d) %s",
-- ============================================================
-- Menu labels - Crates: Get
-- ============================================================
MENU_GET_CRATES = "Prendi casse",
MENU_GET = "Prendi",
MENU_GET_AND_LOAD = "Prendi e carica",
MENU_GET_ANYWAY = "Prendi comunque",
MENU_PARTIALLY_LOAD = "Carico parziale",
MENU_OUT_OF_STOCK = "Esaurito",
MENU_TROOP_LIMIT = "Limite truppe raggiunto",
-- ============================================================
-- Menu labels - Crates: Load
-- ============================================================
MENU_LOAD_CRATES = "Carica casse",
MENU_LOAD_ALL = "Carica tutto",
MENU_SHOW_LOADABLE_CRATES = "Mostra casse caricate",
MENU_NO_CRATES_FOUND_RESCAN = "Nessuna cassa trovata! Esegui una nuova scansione.?",
MENU_USE_C130_LOAD = "Utilizzare il sistema di carico C-130",
MENU_LOAD_SINGLE = "Carica",
-- ============================================================
-- Menu labels - Crates: Drop
-- ============================================================
MENU_DROP_CRATES = "Scarica casse",
MENU_DROP_ALL_CRATES = "Scarica tutte le casse",
MENU_DROP = "Scarica",
MENU_DROP_AND_BUILD = "Scarica e costruisci",
MENU_DROP_N_SETS = "Scarica %d Set%s",
MENU_NO_CRATES_TO_DROP = "Nessuna cassa da scaricare!",
-- ============================================================
-- Menu labels - Crates: Build / Repair / Pack / Remove
-- ============================================================
MENU_BUILD_CRATES = "Sballa le casse",
MENU_REPAIR = "Ripara",
MENU_PACK_CRATES = "Casse da imballaggio",
MENU_PACK = "Imballaggio",
MENU_SCAN_PACKABLE_UNITS = "Scansiona le unità imballabili nelle vicinanze",
MENU_NO_PACKABLE_UNITS_FOUND_RESCAN = "Nessuna unità imballabile trovata! Esegui una nuova scansione.?",
MENU_PACK_ALL = "Pacchetto nelle vicinanze",
MENU_PACK_AND_LOAD = "Imballare e caricare",
MENU_PACK_AND_LOAD_ALL = "Imballaggio e carico nelle vicinanze",
MENU_PACK_AND_REMOVE = "Imballare e rimuovere",
MENU_PACK_AND_REMOVE_ALL = "Imballare e rimuovere nelle vicinanze",
MENU_REMOVE_CRATES = "Rimuovere le casse",
MENU_REMOVE_CRATES_NEARBY = "Rimuovere le casse nelle vicinanze",
MENU_LIST_CRATES_NEARBY = "Elenco delle casse nelle vicinanze",
MENU_CRATES_NEEDED = "%d cass%s %s (%dkg)",
MENU_CRATE_SINGLE = "%s (%dkg)",
-- ============================================================
-- Menu labels - Units (C-130)
-- ============================================================
MENU_GET_UNITS = "Ottieni unità",
MENU_REMOVE_UNITS_NEARBY = "Rimuovere le unità vicine",
-- ============================================================
-- Menu labels - Info / Cargo
-- ============================================================
MENU_LIST_BOARDED_CARGO = "Lista del carico a bordo",
MENU_INVENTORY = "Inventario",
MENU_LIST_ZONE_BEACONS = "Elenco dei beacon di zona attivi",
-- ============================================================
-- Menu labels - Smokes / Flares / Beacons
-- ============================================================
MENU_SMOKES_FLARES_BEACONS = "Fumogeni, razzi, segnalatori luminosi",
MENU_SMOKE_ZONES_NEARBY = "Fumogeni nelle vicinanze",
MENU_DROP_SMOKE_NOW = "Scarica fumogeni ora",
MENU_RED_SMOKE = "Fumogeno rosso",
MENU_BLUE_SMOKE = "Fumogeno blu",
MENU_GREEN_SMOKE = "Fumogeno verde",
MENU_ORANGE_SMOKE = "Fumogeno arancione",
MENU_WHITE_SMOKE = "Fumogeno bianco",
MENU_FLARE_ZONES_NEARBY = "Razzi di segnalazione nelle vicinanze",
MENU_FIRE_FLARE_NOW = "Razzi di segnalazione ora",
MENU_DROP_BEACON_NOW = "Scarica segnalatori luminosi",
-- ============================================================
-- Menu labels - Parameters
-- ============================================================
MENU_SHOW_FLIGHT_PARAMS = "Mostra i parametri di volo",
MENU_SHOW_HOVER_PARAMS = "Mostra parametri di hovering",
STOCK_NONE = "Nessuno",
STOCK_UNLIMITED = "Illimitato",
BUILD_YES = "SI",
BUILD_NO = "NO",
},
["PT-BR"] = {
-- ============================================================
-- Carregamento de caixa / carga