@jtff/miztemplate-lib 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lua/lib/HoundElint.lua +149 -194
- package/lua/lib/Moose_.lua +1524 -372
- package/lua/src/020-mission_functions.lua +98 -0
- package/lua/src/120-tankers.lua +13 -0
- package/lua/src/150-awacs.lua +10 -0
- package/package.json +1 -1
package/lua/lib/Moose_.lua
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
env.info('*** MOOSE GITHUB Commit Hash ID: 2026-
|
|
1
|
+
env.info('*** MOOSE GITHUB Commit Hash ID: 2026-05-14T10:46:22+02:00-696630fe4d7c53e25c3599abea51a147a4363f1a ***')
|
|
2
2
|
if not MOOSE_DEVELOPMENT_FOLDER then
|
|
3
3
|
MOOSE_DEVELOPMENT_FOLDER='Scripts'
|
|
4
4
|
end
|
|
@@ -13555,6 +13555,7 @@ Coalitions={
|
|
|
13555
13555
|
},
|
|
13556
13556
|
},
|
|
13557
13557
|
filterNoRegex=false,
|
|
13558
|
+
filterReplaceDash=true,
|
|
13558
13559
|
}
|
|
13559
13560
|
function SET_BASE:New(Database)
|
|
13560
13561
|
local self=BASE:Inherit(self,FSM:New())
|
|
@@ -13616,12 +13617,18 @@ return ObjectFound
|
|
|
13616
13617
|
end
|
|
13617
13618
|
function SET_BASE:_SearchPattern(Name,Pattern,NoRegex,ReplaceDash)
|
|
13618
13619
|
NoRegex=NoRegex or self.filterNoRegex
|
|
13619
|
-
|
|
13620
|
+
ReplaceDash=ReplaceDash or self.filterReplaceDash
|
|
13621
|
+
if ReplaceDash==true and NoRegex~=true then
|
|
13620
13622
|
Pattern=Pattern:gsub("-","%%-")
|
|
13621
13623
|
end
|
|
13622
13624
|
local contain=string.find(Name,Pattern,1,NoRegex)
|
|
13623
13625
|
return contain
|
|
13624
13626
|
end
|
|
13627
|
+
function SET_BASE:FilterSetRegex(NoRegex,ReplaceDash)
|
|
13628
|
+
if NoRegex~=nil then self.filterNoRegex=NoRegex end
|
|
13629
|
+
self.filterReplaceDash=ReplaceDash or true
|
|
13630
|
+
return self
|
|
13631
|
+
end
|
|
13625
13632
|
function SET_BASE:GetSet()
|
|
13626
13633
|
return self.Set or{}
|
|
13627
13634
|
end
|
|
@@ -14459,7 +14466,7 @@ end
|
|
|
14459
14466
|
if self.Filter.GroupPrefixes and MGroupInclude then
|
|
14460
14467
|
local MGroupPrefix=false
|
|
14461
14468
|
for GroupPrefixId,GroupPrefix in pairs(self.Filter.GroupPrefixes)do
|
|
14462
|
-
if self:_SearchPattern(MGroup:GetName(),GroupPrefix,
|
|
14469
|
+
if self:_SearchPattern(MGroup:GetName(),GroupPrefix,self.filterNoRegex,self.filterReplaceDash)then
|
|
14463
14470
|
MGroupPrefix=true
|
|
14464
14471
|
end
|
|
14465
14472
|
end
|
|
@@ -15098,7 +15105,7 @@ end
|
|
|
15098
15105
|
if self.Filter.UnitPrefixes and MUnitInclude then
|
|
15099
15106
|
local MUnitPrefix=false
|
|
15100
15107
|
for UnitPrefixId,UnitPrefix in pairs(self.Filter.UnitPrefixes)do
|
|
15101
|
-
if self:_SearchPattern(MUnit:GetName(),UnitPrefix,
|
|
15108
|
+
if self:_SearchPattern(MUnit:GetName(),UnitPrefix,self.filterNoRegex,self.filterReplaceDash)then
|
|
15102
15109
|
MUnitPrefix=true
|
|
15103
15110
|
end
|
|
15104
15111
|
end
|
|
@@ -15509,7 +15516,7 @@ end
|
|
|
15509
15516
|
if self.Filter.StaticPrefixes then
|
|
15510
15517
|
local MStaticPrefix=false
|
|
15511
15518
|
for StaticPrefixId,StaticPrefix in pairs(self.Filter.StaticPrefixes)do
|
|
15512
|
-
if self:_SearchPattern(MStatic:GetName(),StaticPrefix,
|
|
15519
|
+
if self:_SearchPattern(MStatic:GetName(),StaticPrefix,self.filterNoRegex,self.filterReplaceDash)then
|
|
15513
15520
|
MStaticPrefix=true
|
|
15514
15521
|
end
|
|
15515
15522
|
end
|
|
@@ -15933,7 +15940,7 @@ end
|
|
|
15933
15940
|
if self.Filter.ClientPrefixes and MClientInclude then
|
|
15934
15941
|
local MClientPrefix=false
|
|
15935
15942
|
for ClientPrefixId,ClientPrefix in pairs(self.Filter.ClientPrefixes)do
|
|
15936
|
-
if self:_SearchPattern(MClient.UnitName,ClientPrefix)then
|
|
15943
|
+
if self:_SearchPattern(MClient.UnitName,ClientPrefix,self.filterNoRegex,self.filterReplaceDash)then
|
|
15937
15944
|
MClientPrefix=true
|
|
15938
15945
|
end
|
|
15939
15946
|
end
|
|
@@ -15953,7 +15960,7 @@ if self.Filter.Playernames and MClientInclude then
|
|
|
15953
15960
|
local MClientPlayername=false
|
|
15954
15961
|
local playername=MClient:GetPlayerName()or"Unknown"
|
|
15955
15962
|
for _,_Playername in pairs(self.Filter.Playernames)do
|
|
15956
|
-
if playername and self:_SearchPattern(playername,_Playername)then
|
|
15963
|
+
if playername and self:_SearchPattern(playername,_Playername,self.filterNoRegex,self.filterReplaceDash)then
|
|
15957
15964
|
MClientPlayername=true
|
|
15958
15965
|
end
|
|
15959
15966
|
end
|
|
@@ -15963,7 +15970,7 @@ if self.Filter.Callsigns and MClientInclude then
|
|
|
15963
15970
|
local MClientCallsigns=false
|
|
15964
15971
|
local callsign=MClient:GetCallsign()
|
|
15965
15972
|
for _,_Callsign in pairs(self.Filter.Callsigns)do
|
|
15966
|
-
if callsign and self:_SearchPattern(callsign,_Callsign,
|
|
15973
|
+
if callsign and self:_SearchPattern(callsign,_Callsign,self.filterNoRegex,self.filterReplaceDash)then
|
|
15967
15974
|
MClientCallsigns=true
|
|
15968
15975
|
end
|
|
15969
15976
|
end
|
|
@@ -16192,7 +16199,7 @@ end
|
|
|
16192
16199
|
if self.Filter.ClientPrefixes then
|
|
16193
16200
|
local MClientPrefix=false
|
|
16194
16201
|
for ClientPrefixId,ClientPrefix in pairs(self.Filter.ClientPrefixes)do
|
|
16195
|
-
if self:_SearchPattern(MClient.UnitName,ClientPrefix)then
|
|
16202
|
+
if self:_SearchPattern(MClient.UnitName,ClientPrefix,self.filterNoRegex,self.filterReplaceDash)then
|
|
16196
16203
|
MClientPrefix=true
|
|
16197
16204
|
end
|
|
16198
16205
|
end
|
|
@@ -16525,7 +16532,7 @@ local MZoneName=MZone:GetName()
|
|
|
16525
16532
|
if self.Filter.Prefixes then
|
|
16526
16533
|
local MZonePrefix=false
|
|
16527
16534
|
for ZonePrefixId,ZonePrefix in pairs(self.Filter.Prefixes)do
|
|
16528
|
-
if self:_SearchPattern(MZoneName,ZonePrefix,
|
|
16535
|
+
if self:_SearchPattern(MZoneName,ZonePrefix,self.filterNoRegex,self.filterReplaceDash)then
|
|
16529
16536
|
MZonePrefix=true
|
|
16530
16537
|
end
|
|
16531
16538
|
end
|
|
@@ -16754,7 +16761,7 @@ local MZoneName=MZone:GetName()
|
|
|
16754
16761
|
if self.Filter.Prefixes then
|
|
16755
16762
|
local MZonePrefix=false
|
|
16756
16763
|
for ZonePrefixId,ZonePrefix in pairs(self.Filter.Prefixes)do
|
|
16757
|
-
if self:_SearchPattern(MZoneName,ZonePrefix,
|
|
16764
|
+
if self:_SearchPattern(MZoneName,ZonePrefix,self.filterNoRegex,self.filterReplaceDash)then
|
|
16758
16765
|
MZonePrefix=true
|
|
16759
16766
|
end
|
|
16760
16767
|
end
|
|
@@ -16907,7 +16914,7 @@ local MZoneName=MZone:GetName()
|
|
|
16907
16914
|
if self.Filter.Prefixes then
|
|
16908
16915
|
local MZonePrefix=false
|
|
16909
16916
|
for ZonePrefixId,ZonePrefix in pairs(self.Filter.Prefixes)do
|
|
16910
|
-
if self:_SearchPattern(MZoneName,ZonePrefix,
|
|
16917
|
+
if self:_SearchPattern(MZoneName,ZonePrefix,self.filterNoRegex,self.filterReplaceDash)then
|
|
16911
16918
|
MZonePrefix=true
|
|
16912
16919
|
break
|
|
16913
16920
|
end
|
|
@@ -17266,7 +17273,7 @@ end
|
|
|
17266
17273
|
if self.Filter.GroupPrefixes and MGroupInclude then
|
|
17267
17274
|
local MGroupPrefix=false
|
|
17268
17275
|
for GroupPrefixId,GroupPrefix in pairs(self.Filter.GroupPrefixes)do
|
|
17269
|
-
if self:_SearchPattern(MGroup:GetName(),GroupPrefix,
|
|
17276
|
+
if self:_SearchPattern(MGroup:GetName(),GroupPrefix,self.filterNoRegex,self.filterReplaceDash)then
|
|
17270
17277
|
MGroupPrefix=true
|
|
17271
17278
|
end
|
|
17272
17279
|
end
|
|
@@ -17430,7 +17437,7 @@ local MSceneryName=MScenery:GetName()
|
|
|
17430
17437
|
if self.Filter.Prefixes then
|
|
17431
17438
|
local MSceneryPrefix=false
|
|
17432
17439
|
for ZonePrefixId,ZonePrefix in pairs(self.Filter.Prefixes)do
|
|
17433
|
-
if self:_SearchPattern(MSceneryName,ZonePrefix,
|
|
17440
|
+
if self:_SearchPattern(MSceneryName,ZonePrefix,self.filterNoRegex,self.filterReplaceDash)then
|
|
17434
17441
|
MSceneryPrefix=true
|
|
17435
17442
|
end
|
|
17436
17443
|
end
|
|
@@ -17561,7 +17568,7 @@ end
|
|
|
17561
17568
|
if self.Filter.StaticPrefixes then
|
|
17562
17569
|
local DCargoPrefix=false
|
|
17563
17570
|
for StaticPrefixId,StaticPrefix in pairs(self.Filter.StaticPrefixes)do
|
|
17564
|
-
if self:_SearchPattern(DCargo:GetName(),StaticPrefix,
|
|
17571
|
+
if self:_SearchPattern(DCargo:GetName(),StaticPrefix,self.filterNoRegex,self.filterReplaceDash)then
|
|
17565
17572
|
DCargoPrefix=true
|
|
17566
17573
|
end
|
|
17567
17574
|
end
|
|
@@ -17660,7 +17667,7 @@ end
|
|
|
17660
17667
|
function SET_DYNAMICCARGO:FilterCurrentOwner(PlayerName)
|
|
17661
17668
|
self:FilterFunction(
|
|
17662
17669
|
function(cargo)
|
|
17663
|
-
if cargo and cargo.Owner and self:_SearchPattern(cargo.Owner,PlayerName,
|
|
17670
|
+
if cargo and cargo.Owner and self:_SearchPattern(cargo.Owner,PlayerName,self.filterNoRegex,self.filterReplaceDash)then
|
|
17664
17671
|
return true
|
|
17665
17672
|
else
|
|
17666
17673
|
return false
|
|
@@ -20886,6 +20893,9 @@ self.SpawnGrouping=Grouping
|
|
|
20886
20893
|
return self
|
|
20887
20894
|
end
|
|
20888
20895
|
function SPAWN:InitRandomizeZones(SpawnZoneTable,RandomizePositionInZone)
|
|
20896
|
+
if not SpawnZoneTable then
|
|
20897
|
+
return self
|
|
20898
|
+
end
|
|
20889
20899
|
local temptable={}
|
|
20890
20900
|
for _,_temp in pairs(SpawnZoneTable)do
|
|
20891
20901
|
temptable[#temptable+1]=_temp
|
|
@@ -21354,6 +21364,7 @@ end
|
|
|
21354
21364
|
local parkingspots={}
|
|
21355
21365
|
local parkingindex={}
|
|
21356
21366
|
local spots
|
|
21367
|
+
local useexplicitspots=false
|
|
21357
21368
|
if spawnonground and not SpawnTemplate.parked then
|
|
21358
21369
|
local nfree=0
|
|
21359
21370
|
local termtype=TerminalType
|
|
@@ -21373,12 +21384,31 @@ local scanunits=true
|
|
|
21373
21384
|
local scanstatics=true
|
|
21374
21385
|
local scanscenery=false
|
|
21375
21386
|
local verysafe=false
|
|
21376
|
-
if
|
|
21377
|
-
nfree=SpawnAirbase:GetFreeParkingSpotsNumber(termtype,true)
|
|
21378
|
-
spots=SpawnAirbase:GetFreeParkingSpotsTable(termtype,true)
|
|
21379
|
-
elseif Parkingdata~=nil then
|
|
21387
|
+
if Parkingdata~=nil then
|
|
21380
21388
|
nfree=#Parkingdata
|
|
21381
21389
|
spots=Parkingdata
|
|
21390
|
+
useexplicitspots=true
|
|
21391
|
+
elseif autoparking and AirbaseCategory==Airbase.Category.HELIPAD and ishelo then
|
|
21392
|
+
if termtype==nil then
|
|
21393
|
+
spots=SpawnAirbase:FindFreeParkingSpotForAircraft(group,AIRBASE.TerminalType.HelicopterOnly,scanradius,scanunits,scanstatics,scanscenery,verysafe,nunits,nil)
|
|
21394
|
+
nfree=#spots
|
|
21395
|
+
if nfree<nunits then
|
|
21396
|
+
spots=SpawnAirbase:FindFreeParkingSpotForAircraft(group,AIRBASE.TerminalType.HelicopterUsable,scanradius,scanunits,scanstatics,scanscenery,verysafe,nunits,nil)
|
|
21397
|
+
nfree=#spots
|
|
21398
|
+
end
|
|
21399
|
+
else
|
|
21400
|
+
spots=SpawnAirbase:FindFreeParkingSpotForAircraft(group,termtype,scanradius,scanunits,scanstatics,scanscenery,verysafe,nunits,nil)
|
|
21401
|
+
nfree=#spots
|
|
21402
|
+
end
|
|
21403
|
+
if nfree>=nunits then
|
|
21404
|
+
useexplicitspots=true
|
|
21405
|
+
else
|
|
21406
|
+
nfree=SpawnAirbase:GetFreeParkingSpotsNumber(termtype,true)
|
|
21407
|
+
spots=SpawnAirbase:GetFreeParkingSpotsTable(termtype,true)
|
|
21408
|
+
end
|
|
21409
|
+
elseif autoparking then
|
|
21410
|
+
nfree=SpawnAirbase:GetFreeParkingSpotsNumber(termtype,true)
|
|
21411
|
+
spots=SpawnAirbase:GetFreeParkingSpotsTable(termtype,true)
|
|
21382
21412
|
else
|
|
21383
21413
|
if ishelo then
|
|
21384
21414
|
if termtype==nil then
|
|
@@ -21412,7 +21442,7 @@ end
|
|
|
21412
21442
|
end
|
|
21413
21443
|
end
|
|
21414
21444
|
local _notenough=false
|
|
21415
|
-
if autoparking then
|
|
21445
|
+
if autoparking and not useexplicitspots then
|
|
21416
21446
|
if nfree>=1 then
|
|
21417
21447
|
for i=1,nunits do
|
|
21418
21448
|
table.insert(parkingspots,spots[1].Coordinate)
|
|
@@ -21432,6 +21462,9 @@ else
|
|
|
21432
21462
|
_notenough=true
|
|
21433
21463
|
end
|
|
21434
21464
|
end
|
|
21465
|
+
if useexplicitspots and parkingspots[1]then
|
|
21466
|
+
PointVec3=parkingspots[1]
|
|
21467
|
+
end
|
|
21435
21468
|
if _notenough then
|
|
21436
21469
|
if EmergencyAirSpawn and not self.SpawnUnControlled then
|
|
21437
21470
|
self:E(string.format("WARNING: Group %s has no parking spots at %s ==> air start!",self.SpawnTemplatePrefix,SpawnAirbase:GetName()))
|
|
@@ -21474,7 +21507,7 @@ local BY=SpawnTemplate.route.points[1].y
|
|
|
21474
21507
|
local TX=PointVec3.x+(SX-BX)
|
|
21475
21508
|
local TY=PointVec3.z+(SY-BY)
|
|
21476
21509
|
if spawnonground then
|
|
21477
|
-
if autoparking then
|
|
21510
|
+
if autoparking and not useexplicitspots then
|
|
21478
21511
|
SpawnTemplate.units[UnitID].x=PointVec3.x
|
|
21479
21512
|
SpawnTemplate.units[UnitID].y=PointVec3.z
|
|
21480
21513
|
SpawnTemplate.units[UnitID].alt=PointVec3.y
|
|
@@ -21600,7 +21633,30 @@ local scanunits=true
|
|
|
21600
21633
|
local scanstatics=true
|
|
21601
21634
|
local scanscenery=false
|
|
21602
21635
|
local verysafe=false
|
|
21603
|
-
|
|
21636
|
+
local useexplicitspots=false
|
|
21637
|
+
if Parkingdata~=nil then
|
|
21638
|
+
nfree=#Parkingdata
|
|
21639
|
+
spots=Parkingdata
|
|
21640
|
+
useexplicitspots=true
|
|
21641
|
+
elseif spawnonfarp and ishelo then
|
|
21642
|
+
if termtype==nil then
|
|
21643
|
+
spots=SpawnAirbase:FindFreeParkingSpotForAircraft(TemplateGroup,AIRBASE.TerminalType.HelicopterOnly,scanradius,scanunits,scanstatics,scanscenery,verysafe,nunits,nil)
|
|
21644
|
+
nfree=#spots
|
|
21645
|
+
if nfree<nunits then
|
|
21646
|
+
spots=SpawnAirbase:FindFreeParkingSpotForAircraft(TemplateGroup,AIRBASE.TerminalType.HelicopterUsable,scanradius,scanunits,scanstatics,scanscenery,verysafe,nunits,nil)
|
|
21647
|
+
nfree=#spots
|
|
21648
|
+
end
|
|
21649
|
+
else
|
|
21650
|
+
spots=SpawnAirbase:FindFreeParkingSpotForAircraft(TemplateGroup,termtype,scanradius,scanunits,scanstatics,scanscenery,verysafe,nunits,nil)
|
|
21651
|
+
nfree=#spots
|
|
21652
|
+
end
|
|
21653
|
+
if nfree>=nunits then
|
|
21654
|
+
useexplicitspots=true
|
|
21655
|
+
else
|
|
21656
|
+
nfree=SpawnAirbase:GetFreeParkingSpotsNumber(termtype,true)
|
|
21657
|
+
spots=SpawnAirbase:GetFreeParkingSpotsTable(termtype,true)
|
|
21658
|
+
end
|
|
21659
|
+
elseif spawnonship or spawnonfarp or spawnonrunway then
|
|
21604
21660
|
nfree=SpawnAirbase:GetFreeParkingSpotsNumber(termtype,true)
|
|
21605
21661
|
spots=SpawnAirbase:GetFreeParkingSpotsTable(termtype,true)
|
|
21606
21662
|
else
|
|
@@ -21636,7 +21692,7 @@ end
|
|
|
21636
21692
|
end
|
|
21637
21693
|
end
|
|
21638
21694
|
local _notenough=false
|
|
21639
|
-
if
|
|
21695
|
+
if(spawnonship or spawnonfarp or spawnonrunway)and not useexplicitspots then
|
|
21640
21696
|
if nfree>=1 then
|
|
21641
21697
|
for i=1,nunits do
|
|
21642
21698
|
table.insert(parkingspots,spots[1].Coordinate)
|
|
@@ -50595,7 +50651,7 @@ function SUPPRESSION:onafterStop(Controllable,From,Event,To)
|
|
|
50595
50651
|
self:_EventFromTo("onafterStop",Event,From,To)
|
|
50596
50652
|
local text=string.format("Stopping SUPPRESSION for group %s",self.Controllable:GetName())
|
|
50597
50653
|
MESSAGE:New(text,10):ToAllIf(self.Debug)
|
|
50598
|
-
|
|
50654
|
+
self:T(self.lid..text)
|
|
50599
50655
|
self.CallScheduler:Clear()
|
|
50600
50656
|
if self.mooseevents then
|
|
50601
50657
|
self:UnHandleEvent(EVENTS.Dead)
|
|
@@ -52337,7 +52393,7 @@ return 0,0,0,0
|
|
|
52337
52393
|
end
|
|
52338
52394
|
local templategroupname=group:GetName()
|
|
52339
52395
|
local unit=group:GetUnit(1)
|
|
52340
|
-
local Descriptors=(unit and unit:IsAlive())and unit:GetDesc()or{}
|
|
52396
|
+
local Descriptors=(unit and unit:IsAlive()~=nil)and unit:GetDesc()or{}
|
|
52341
52397
|
local Category=group:GetCategory()
|
|
52342
52398
|
local TypeName=group:GetTypeName()or"none"
|
|
52343
52399
|
local SpeedMax=group:GetSpeedMax()
|
|
@@ -55847,7 +55903,7 @@ MANTIS.radiusscale[MANTIS.SamType.MEDIUM]=1.2
|
|
|
55847
55903
|
MANTIS.radiusscale[MANTIS.SamType.SHORT]=1.75
|
|
55848
55904
|
MANTIS.radiusscale[MANTIS.SamType.POINT]=3
|
|
55849
55905
|
MANTIS.SamData={
|
|
55850
|
-
["Hawk"]={Range=
|
|
55906
|
+
["Hawk"]={Range=45,Blindspot=0,Height=12,Type="Medium",Radar="Hawk"},
|
|
55851
55907
|
["NASAMS"]={Range=14,Blindspot=0,Height=7,Type="Short",Radar="NSAMS",ARMCapacity=1},
|
|
55852
55908
|
["Patriot"]={Range=99,Blindspot=0,Height=25,Type="Long",Radar="Patriot str"},
|
|
55853
55909
|
["Rapier"]={Range=10,Blindspot=0,Height=3,Type="Short",Radar="rapier"},
|
|
@@ -74331,6 +74387,7 @@ return self
|
|
|
74331
74387
|
end
|
|
74332
74388
|
function CTLD:_InitLocalization()
|
|
74333
74389
|
self:T(self.lid.."_InitLocalization")
|
|
74390
|
+
self.locale=string.lower(tostring(self.locale or"en"))
|
|
74334
74391
|
self.gettext=TEXTANDSOUND:New("CTLD","en")
|
|
74335
74392
|
for locale,table in pairs(self.Messages)do
|
|
74336
74393
|
local Locale=string.lower(tostring(locale))
|
|
@@ -74342,6 +74399,35 @@ end
|
|
|
74342
74399
|
end
|
|
74343
74400
|
return self
|
|
74344
74401
|
end
|
|
74402
|
+
function CTLD:SetGroupLocaleResolver(Resolver)
|
|
74403
|
+
self.GroupLocaleResolver=Resolver
|
|
74404
|
+
return self
|
|
74405
|
+
end
|
|
74406
|
+
function CTLD:_GetLocaleForGroup(Group)
|
|
74407
|
+
if self.GroupLocaleResolver then
|
|
74408
|
+
local locale=self:GroupLocaleResolver(Group)
|
|
74409
|
+
if locale and locale~=""then return string.lower(tostring(locale))end
|
|
74410
|
+
end
|
|
74411
|
+
return string.lower(tostring(self.locale or"en"))
|
|
74412
|
+
end
|
|
74413
|
+
function CTLD:_GetEntryForGroup(ID,Group)
|
|
74414
|
+
return self.gettext:GetEntry(ID,self:_GetLocaleForGroup(Group))
|
|
74415
|
+
end
|
|
74416
|
+
function CTLD:_GetMenuPluralSuffix(Count,Kind,Group)
|
|
74417
|
+
local count=tonumber(Count)or 0
|
|
74418
|
+
local locale=Group and self:_GetLocaleForGroup(Group)or string.lower(tostring(self.locale or"en"))
|
|
74419
|
+
if locale=="ru"then
|
|
74420
|
+
local n=math.abs(count)%100
|
|
74421
|
+
local d=n%10
|
|
74422
|
+
if n>=11 and n<=14 then return"ов"end
|
|
74423
|
+
if d==1 then return""end
|
|
74424
|
+
if d>=2 and d<=4 then return"а"end
|
|
74425
|
+
return"ов"
|
|
74426
|
+
end
|
|
74427
|
+
if locale=="tr"then return""end
|
|
74428
|
+
if locale=="de"and Kind=="crate"then return count>1 and"n"or""end
|
|
74429
|
+
return count>1 and"s"or""
|
|
74430
|
+
end
|
|
74345
74431
|
function CTLD:SetSRS(Frequency,Modulation,PathToSRS,Gender,Culture,Port,Voice,Volume,PathToGoogleKey,AccessKey,Backend,Provider,Speaker)
|
|
74346
74432
|
self:T(self.lid.."SetSRS")
|
|
74347
74433
|
self.PathToSRS=PathToSRS or MSRS.path or"C:\\Program Files\\DCS-SimpleRadio-Standalone\\ExternalAudio"
|
|
@@ -74431,6 +74517,23 @@ return Cargo
|
|
|
74431
74517
|
end
|
|
74432
74518
|
return"Unknown"
|
|
74433
74519
|
end
|
|
74520
|
+
function CTLD:SetCargoDisplayFormatter(Formatter)
|
|
74521
|
+
self.CargoDisplayFormatter=Formatter
|
|
74522
|
+
return self
|
|
74523
|
+
end
|
|
74524
|
+
function CTLD:_FormatCargoDisplayText(BaseText,Cargo,Group)
|
|
74525
|
+
local label=BaseText or self:_GetCargoDisplayName(Cargo)
|
|
74526
|
+
if self.CargoDisplayFormatter then
|
|
74527
|
+
local formatted=self:CargoDisplayFormatter(label,Cargo,Group)
|
|
74528
|
+
if type(formatted)=="string"and formatted~=""then
|
|
74529
|
+
return formatted
|
|
74530
|
+
end
|
|
74531
|
+
end
|
|
74532
|
+
return label
|
|
74533
|
+
end
|
|
74534
|
+
function CTLD:_GetCargoDisplayNameForGroup(Cargo,Group)
|
|
74535
|
+
return self:_FormatCargoDisplayText(self:_GetCargoDisplayName(Cargo),Cargo,Group)
|
|
74536
|
+
end
|
|
74434
74537
|
function CTLD:AllowCATransport(OnOff,ClientSet)
|
|
74435
74538
|
self.allowCATransport=OnOff
|
|
74436
74539
|
self.CATransportSet=ClientSet
|
|
@@ -75236,7 +75339,7 @@ table.insert(loaded.Cargo,dcargo)
|
|
|
75236
75339
|
self.Loaded_Cargo[unitname]=nil
|
|
75237
75340
|
self.Loaded_Cargo[unitname]=loaded
|
|
75238
75341
|
local Group=client:GetGroup()
|
|
75239
|
-
local msg=self
|
|
75342
|
+
local msg=self:_GetEntryForGroup("CRATE_LOADED_GROUNDCREW",Group)
|
|
75240
75343
|
msg=string.format(msg,event.IniDynamicCargoName)
|
|
75241
75344
|
self:_SendMessage(msg,10,false,Group)
|
|
75242
75345
|
self:__CratesPickedUp(1,Group,client,dcargo)
|
|
@@ -75282,7 +75385,7 @@ self.Loaded_Cargo[unitname]=loaded
|
|
|
75282
75385
|
end
|
|
75283
75386
|
local Group=client:GetGroup()
|
|
75284
75387
|
if not self:IsC130J(client,true)then
|
|
75285
|
-
local msg=self
|
|
75388
|
+
local msg=self:_GetEntryForGroup("CRATE_UNLOADED_GROUNDCREW",Group)
|
|
75286
75389
|
msg=string.format(msg,event.IniDynamicCargoName)
|
|
75287
75390
|
self:_SendMessage(msg,10,false,Group)
|
|
75288
75391
|
end
|
|
@@ -75391,7 +75494,7 @@ local capabilities=self:_GetUnitCapabilities(Unit)
|
|
|
75391
75494
|
local cancrates=capabilities.crates
|
|
75392
75495
|
local cratelimit=capabilities.cratelimit
|
|
75393
75496
|
if not cancrates then
|
|
75394
|
-
local msg=self
|
|
75497
|
+
local msg=self:_GetEntryForGroup("CHOPPER_CANNOT_CARRY",Group)
|
|
75395
75498
|
self:_SendMessage(msg,10,false,Group)
|
|
75396
75499
|
return self
|
|
75397
75500
|
else
|
|
@@ -75416,7 +75519,7 @@ crate:SetHasMoved(true)
|
|
|
75416
75519
|
crate:SetWasDropped(false)
|
|
75417
75520
|
table.insert(loaded.Cargo,crate)
|
|
75418
75521
|
crate.Positionable=nil
|
|
75419
|
-
local msg=self
|
|
75522
|
+
local msg=self:_GetEntryForGroup("CRATE_LOADED_ID",Group)
|
|
75420
75523
|
msg=string.format(msg,crate:GetID(),crate:GetName())
|
|
75421
75524
|
self:_SendMessage(msg,10,false,Group)
|
|
75422
75525
|
self.Loaded_Cargo[unitname]=loaded
|
|
@@ -75450,7 +75553,7 @@ local cgotype=Cargotype:GetType()
|
|
|
75450
75553
|
local cgonetmass=Cargotype:GetNetMass()
|
|
75451
75554
|
local maxloadable=self:_GetMaxLoadableMass(Unit)
|
|
75452
75555
|
if type(instock)=="number"and tonumber(instock)<=0 and tonumber(instock)~=-1 and not Inject then
|
|
75453
|
-
local msg=self
|
|
75556
|
+
local msg=self:_GetEntryForGroup("ALL_GONE",Group)
|
|
75454
75557
|
msg=string.format(msg,cgoname)
|
|
75455
75558
|
self:_SendMessage(msg,10,false,Group)
|
|
75456
75559
|
return self
|
|
@@ -75463,15 +75566,15 @@ inzone,zonename,zone,distance=self:IsUnitInZone(Unit,CTLD.CargoZoneType.SHIP)
|
|
|
75463
75566
|
end
|
|
75464
75567
|
if not Inject then
|
|
75465
75568
|
if not inzone then
|
|
75466
|
-
local msg=self
|
|
75569
|
+
local msg=self:_GetEntryForGroup("NOT_CLOSE_ENOUGH_LOGISTICS",Group)
|
|
75467
75570
|
self:_SendMessage(msg,10,false,Group)
|
|
75468
75571
|
if not self.debug then return self end
|
|
75469
75572
|
elseif not grounded and not hoverload then
|
|
75470
|
-
local msg=self
|
|
75573
|
+
local msg=self:_GetEntryForGroup("NEED_TO_LAND_OR_HOVER_LOAD",Group)
|
|
75471
75574
|
self:_SendMessage(msg,10,false,Group)
|
|
75472
75575
|
if not self.debug then return self end
|
|
75473
75576
|
elseif self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
75474
|
-
local msg=self
|
|
75577
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_LOAD_TROOPS",Group)
|
|
75475
75578
|
self:_SendMessage(msg,10,false,Group)
|
|
75476
75579
|
if not self.debug then return self end
|
|
75477
75580
|
end
|
|
@@ -75498,11 +75601,11 @@ loaded.Cratesloaded=0
|
|
|
75498
75601
|
loaded.Cargo={}
|
|
75499
75602
|
end
|
|
75500
75603
|
if troopsize+numberonboard>trooplimit then
|
|
75501
|
-
local msg=self
|
|
75604
|
+
local msg=self:_GetEntryForGroup("CRAMMED",Group)
|
|
75502
75605
|
self:_SendMessage(msg,10,false,Group)
|
|
75503
75606
|
return
|
|
75504
75607
|
elseif maxloadable<cgonetmass then
|
|
75505
|
-
local msg=self
|
|
75608
|
+
local msg=self:_GetEntryForGroup("TOO_HEAVY",Group)
|
|
75506
75609
|
self:_SendMessage(msg,10,false,Group)
|
|
75507
75610
|
return
|
|
75508
75611
|
else
|
|
@@ -75515,7 +75618,7 @@ self:T({cargotype=loadcargotype})
|
|
|
75515
75618
|
loaded.Troopsloaded=loaded.Troopsloaded+troopsize
|
|
75516
75619
|
table.insert(loaded.Cargo,loadcargotype)
|
|
75517
75620
|
self.Loaded_Cargo[unitname]=loaded
|
|
75518
|
-
local msg=self
|
|
75621
|
+
local msg=self:_GetEntryForGroup("BOARDED",Group)
|
|
75519
75622
|
msg=string.format(msg,cgoname)
|
|
75520
75623
|
self:_SendMessage(msg,10,false,Group)
|
|
75521
75624
|
self:_RefreshDropTroopsMenu(Group,Unit)
|
|
@@ -75543,7 +75646,7 @@ nearestDistance=distance
|
|
|
75543
75646
|
end
|
|
75544
75647
|
end
|
|
75545
75648
|
if nearestGroup==nil or nearestDistance>self.EngineerSearch then
|
|
75546
|
-
local msg=self
|
|
75649
|
+
local msg=self:_GetEntryForGroup("NO_UNIT_TO_REPAIR",Group)
|
|
75547
75650
|
self:_SendMessage(msg,10,false,Group)
|
|
75548
75651
|
return nil,nil
|
|
75549
75652
|
end
|
|
@@ -75588,7 +75691,7 @@ local NearestGroup,CargoType=self:_FindRepairNearby(Group,Unit,Repairtype)
|
|
|
75588
75691
|
if NearestGroup~=nil then
|
|
75589
75692
|
if self.repairtime<2 then self.repairtime=30 end
|
|
75590
75693
|
if not Engineering then
|
|
75591
|
-
local msg=self
|
|
75694
|
+
local msg=self:_GetEntryForGroup("REPAIR_STARTED",Group)
|
|
75592
75695
|
msg=string.format(msg,build.Name,self.repairtime)
|
|
75593
75696
|
self:_SendMessage(msg,10,false,Group)
|
|
75594
75697
|
end
|
|
@@ -75611,7 +75714,7 @@ buildtimer:Start(self.repairtime)
|
|
|
75611
75714
|
self:__CratesRepairStarted(1,Group,Unit)
|
|
75612
75715
|
else
|
|
75613
75716
|
if not Engineering then
|
|
75614
|
-
local msg=self
|
|
75717
|
+
local msg=self:_GetEntryForGroup("CANT_REPAIR_WITH",Group)
|
|
75615
75718
|
msg=string.format(msg,build.Name)
|
|
75616
75719
|
self:_SendMessage(msg,10,false,Group)
|
|
75617
75720
|
else
|
|
@@ -75626,12 +75729,12 @@ local grounded=not self:IsUnitInAir(Unit)
|
|
|
75626
75729
|
local hoverload=self:IsCorrectHover(Unit)
|
|
75627
75730
|
local hassecondaries=false
|
|
75628
75731
|
if not grounded and not hoverload then
|
|
75629
|
-
local msg=self
|
|
75732
|
+
local msg=self:_GetEntryForGroup("NEED_TO_LAND_OR_HOVER_LOAD",Group)
|
|
75630
75733
|
self:_SendMessage(msg,10,false,Group)
|
|
75631
75734
|
if not self.debug then return self end
|
|
75632
75735
|
end
|
|
75633
75736
|
if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
75634
|
-
local msg=self
|
|
75737
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_EXTRACT_TROOPS",Group)
|
|
75635
75738
|
self:_SendMessage(msg,10,false,Group)
|
|
75636
75739
|
if not self.debug then return self end
|
|
75637
75740
|
end
|
|
@@ -75667,7 +75770,7 @@ distancekeys[#distancekeys+1]=math.floor(distance)
|
|
|
75667
75770
|
end
|
|
75668
75771
|
end
|
|
75669
75772
|
if nearestGroup==nil or nearestDistance>extractdistance then
|
|
75670
|
-
local msg=self
|
|
75773
|
+
local msg=self:_GetEntryForGroup("NO_UNITS_TO_EXTRACT",Group)
|
|
75671
75774
|
self:_SendMessage(msg,10,false,Group)
|
|
75672
75775
|
return self
|
|
75673
75776
|
end
|
|
@@ -75686,7 +75789,7 @@ break
|
|
|
75686
75789
|
end
|
|
75687
75790
|
end
|
|
75688
75791
|
if Cargotype==nil then
|
|
75689
|
-
local msg=self
|
|
75792
|
+
local msg=self:_GetEntryForGroup("CANT_ONBOARD",Group)
|
|
75690
75793
|
msg=string.format(msg,groupType)
|
|
75691
75794
|
self:_SendMessage(msg,10,false,Group)
|
|
75692
75795
|
else
|
|
@@ -75703,7 +75806,7 @@ loaded.Cratesloaded=0
|
|
|
75703
75806
|
loaded.Cargo={}
|
|
75704
75807
|
end
|
|
75705
75808
|
if troopsize+numberonboard>trooplimit then
|
|
75706
|
-
local msg=self
|
|
75809
|
+
local msg=self:_GetEntryForGroup("CRAMMED",Group)
|
|
75707
75810
|
self:_SendMessage(msg,10,false,Group)
|
|
75708
75811
|
nearestGroup.ExtractTime=0
|
|
75709
75812
|
else
|
|
@@ -75715,9 +75818,9 @@ local running=math.floor(nearestDistance/4)+20
|
|
|
75715
75818
|
loaded.Troopsloaded=loaded.Troopsloaded+troopsize
|
|
75716
75819
|
table.insert(loaded.Cargo,loadcargotype)
|
|
75717
75820
|
self.Loaded_Cargo[unitname]=loaded
|
|
75718
|
-
local boardedtext=self
|
|
75821
|
+
local boardedtext=self:_GetEntryForGroup("BOARDED",Group)
|
|
75719
75822
|
self:ScheduleOnce(running,self._SendMessage,self,string.format(boardedtext,Cargotype.Name),10,false,Group)
|
|
75720
|
-
local msg=self
|
|
75823
|
+
local msg=self:_GetEntryForGroup("BOARDING",Group)
|
|
75721
75824
|
msg=string.format(msg,Cargotype.Name)
|
|
75722
75825
|
self:_SendMessage(msg,10,false,Group)
|
|
75723
75826
|
self:_RefreshDropTroopsMenu(Group,Unit)
|
|
@@ -75770,15 +75873,15 @@ if not inzone then
|
|
|
75770
75873
|
inzone,zonename,zone,distance=self:IsUnitInZone(Unit,CTLD.CargoZoneType.SHIP)
|
|
75771
75874
|
end
|
|
75772
75875
|
if not inzone then
|
|
75773
|
-
local msg=self
|
|
75876
|
+
local msg=self:_GetEntryForGroup("NOT_CLOSE_ENOUGH_LOGISTICS",Group)
|
|
75774
75877
|
self:_SendMessage(msg,10,false,Group)
|
|
75775
75878
|
if not self.debug then return self end
|
|
75776
75879
|
elseif not grounded and not hoverload then
|
|
75777
|
-
local msg=self
|
|
75880
|
+
local msg=self:_GetEntryForGroup("NEED_TO_LAND_OR_HOVER_LOAD",Group)
|
|
75778
75881
|
self:_SendMessage(msg,10,false,Group)
|
|
75779
75882
|
if not self.debug then return self end
|
|
75780
75883
|
elseif self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
75781
|
-
local msg=self
|
|
75884
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_LOAD_TROOPS",Group)
|
|
75782
75885
|
self:_SendMessage(msg,10,false,Group)
|
|
75783
75886
|
if not self.debug then return self end
|
|
75784
75887
|
end
|
|
@@ -75791,7 +75894,7 @@ end
|
|
|
75791
75894
|
timer.scheduleFunction(function()
|
|
75792
75895
|
self.suppressmessages=prevSuppress
|
|
75793
75896
|
local dname=Cargo:GetName()
|
|
75794
|
-
local msg=self
|
|
75897
|
+
local msg=self:_GetEntryForGroup("LOADED_FULL",Group)
|
|
75795
75898
|
msg=string.format(msg,n,dname)
|
|
75796
75899
|
self:_SendMessage(msg,10,false,Group)
|
|
75797
75900
|
end,{},timer.getTime()+0.2*n+0.05)
|
|
@@ -75812,8 +75915,8 @@ local onboard=(ld and type(ld.Troopsloaded)=="number")and ld.Troopsloaded or 0
|
|
|
75812
75915
|
if trooplimit>0 then
|
|
75813
75916
|
local space=trooplimit-onboard
|
|
75814
75917
|
if space<troopsize then
|
|
75815
|
-
local msg=self
|
|
75816
|
-
if type(stock)=="number"and stock==0 then msg=self
|
|
75918
|
+
local msg=self:_GetEntryForGroup("MENU_TROOP_LIMIT",Group)
|
|
75919
|
+
if type(stock)=="number"and stock==0 then msg=self:_GetEntryForGroup("MENU_OUT_OF_STOCK",Group)end
|
|
75817
75920
|
MENU_GROUP_COMMAND:New(Group,msg,parentMenu,function()end)
|
|
75818
75921
|
return self
|
|
75819
75922
|
end
|
|
@@ -75852,7 +75955,7 @@ local availableSets=nil
|
|
|
75852
75955
|
if type(stock)=="number"and stock>=0 then
|
|
75853
75956
|
availableSets=math.floor(stock)
|
|
75854
75957
|
if availableSets<=0 then
|
|
75855
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
75958
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_OUT_OF_STOCK",Group),parentMenu,function()end)
|
|
75856
75959
|
return self
|
|
75857
75960
|
end
|
|
75858
75961
|
if availableSets<maxQuantity then
|
|
@@ -75935,29 +76038,29 @@ MENU_GROUP_COMMAND:New(Group,"1",parentMenu,self._GetCrateQuantity,self,Group,Un
|
|
|
75935
76038
|
else
|
|
75936
76039
|
local msg
|
|
75937
76040
|
if maxMassSets and(not capacitySets or capacitySets>=1)and maxMassSets<1 then
|
|
75938
|
-
msg=self
|
|
76041
|
+
msg=self:_GetEntryForGroup("WEIGHT_LIMIT",Group)
|
|
75939
76042
|
else
|
|
75940
|
-
msg=self
|
|
76043
|
+
msg=self:_GetEntryForGroup("CRATE_LIMIT",Group)
|
|
75941
76044
|
end
|
|
75942
76045
|
MENU_GROUP_COMMAND:New(Group,msg,parentMenu,self._SendMessage,self,msg,10,false,Group)
|
|
75943
76046
|
end
|
|
75944
76047
|
return self
|
|
75945
76048
|
end
|
|
75946
76049
|
if canLoad and not isHerc and not suppressGetAndLoad then
|
|
75947
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
75948
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
76050
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_GET",Group),parentMenu,self._GetCrateQuantity,self,Group,Unit,cargoObj,1)
|
|
76051
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_GET_AND_LOAD",Group),parentMenu,self._GetAndLoad,self,Group,Unit,cargoObj,1)
|
|
75949
76052
|
else
|
|
75950
76053
|
local msg
|
|
75951
76054
|
if not isHerc and not suppressGetAndLoad then
|
|
75952
76055
|
if maxMassSets and(not capacitySets or capacitySets>=1)and maxMassSets<1 then
|
|
75953
|
-
msg=self
|
|
76056
|
+
msg=self:_GetEntryForGroup("WEIGHT_LIMIT",Group)
|
|
75954
76057
|
else
|
|
75955
|
-
msg=self
|
|
76058
|
+
msg=self:_GetEntryForGroup("CRATE_LIMIT",Group)
|
|
75956
76059
|
end
|
|
75957
76060
|
MENU_GROUP_COMMAND:New(Group,msg,parentMenu,self._SendMessage,self,msg,10,false,Group)
|
|
75958
76061
|
if canPartiallyLoad and(cgotype~=CTLD_CARGO.Enum.STATIC)and(not suppressGetAndLoad)then
|
|
75959
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
75960
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
76062
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_GET_ANYWAY",Group),parentMenu,self._GetCrateQuantity,self,Group,Unit,cargoObj,1)
|
|
76063
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_PARTIALLY_LOAD",Group),parentMenu,self._GetAndLoad,self,Group,Unit,cargoObj,1,true)
|
|
75961
76064
|
end
|
|
75962
76065
|
end
|
|
75963
76066
|
end
|
|
@@ -75973,8 +76076,8 @@ local cgotype=cargoObj:GetType()or nil
|
|
|
75973
76076
|
local suppressGetAndLoad=(self.enableChinookGCLoading==true)and(cgotype==CTLD_CARGO.Enum.STATIC)
|
|
75974
76077
|
if canLoad and not isHerc and not suppressGetAndLoad then
|
|
75975
76078
|
local qMenu=MENU_GROUP:New(Group,label,parentMenu)
|
|
75976
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
75977
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
76079
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_GET",Group),qMenu,self._GetCrateQuantity,self,Group,Unit,cargoObj,quantity)
|
|
76080
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_GET_AND_LOAD",Group),qMenu,self._GetAndLoad,self,Group,Unit,cargoObj,quantity)
|
|
75978
76081
|
else
|
|
75979
76082
|
MENU_GROUP_COMMAND:New(Group,label,parentMenu,self._GetCrateQuantity,self,Group,Unit,cargoObj,quantity)
|
|
75980
76083
|
end
|
|
@@ -75995,21 +76098,21 @@ break
|
|
|
75995
76098
|
end
|
|
75996
76099
|
end
|
|
75997
76100
|
if not cfg then
|
|
75998
|
-
local msg=self
|
|
76101
|
+
local msg=self:_GetEntryForGroup("NO_UNIT_CONFIG",Group)
|
|
75999
76102
|
msg=string.format(msg,Name)
|
|
76000
76103
|
self:_SendMessage(msg,10,false,Group)
|
|
76001
76104
|
return self
|
|
76002
76105
|
end
|
|
76003
76106
|
local stock=cfg.Stock
|
|
76004
76107
|
if type(stock)=="number"and stock~=-1 and stock<=0 then
|
|
76005
|
-
local msg=self
|
|
76108
|
+
local msg=self:_GetEntryForGroup("ALL_GONE",Group)
|
|
76006
76109
|
msg=string.format(msg,cfg.Name or"units")
|
|
76007
76110
|
self:_SendMessage(msg,10,false,Group)
|
|
76008
76111
|
return self
|
|
76009
76112
|
end
|
|
76010
76113
|
local inzone=self:IsUnitInZone(Unit,CTLD.CargoZoneType.LOAD)
|
|
76011
76114
|
if not inzone then
|
|
76012
|
-
local msg=self
|
|
76115
|
+
local msg=self:_GetEntryForGroup("NOT_CLOSE_ENOUGH_LOGISTICS",Group)
|
|
76013
76116
|
self:_SendMessage(msg,10,false,Group)
|
|
76014
76117
|
return self
|
|
76015
76118
|
end
|
|
@@ -76049,7 +76152,7 @@ end
|
|
|
76049
76152
|
if nearbyCount>=maxUnitsNearby then break end
|
|
76050
76153
|
end
|
|
76051
76154
|
if nearbyCount>=maxUnitsNearby then
|
|
76052
|
-
local msg=self
|
|
76155
|
+
local msg=self:_GetEntryForGroup("TOO_MANY_UNITS_NEARBY",Group)
|
|
76053
76156
|
msg=string.format(msg,maxUnitsNearby)
|
|
76054
76157
|
self:_SendMessage(msg,10,false,Group)
|
|
76055
76158
|
return self
|
|
@@ -76100,7 +76203,7 @@ end
|
|
|
76100
76203
|
if type(stock)=="number"and stock~=-1 then
|
|
76101
76204
|
cfg.Stock=stock-1
|
|
76102
76205
|
end
|
|
76103
|
-
local msg=self
|
|
76206
|
+
local msg=self:_GetEntryForGroup("DEPLOYED_NEAR_YOU",Group)
|
|
76104
76207
|
msg=string.format(msg,cfg.Name or"selection")
|
|
76105
76208
|
self:_SendMessage(msg,10,false,Group)
|
|
76106
76209
|
return self
|
|
@@ -76125,7 +76228,7 @@ if not drop and not pack then
|
|
|
76125
76228
|
local cgoname=Cargo:GetName()
|
|
76126
76229
|
local instock=Cargo:GetStock()
|
|
76127
76230
|
if type(instock)=="number"and tonumber(instock)<=0 and tonumber(instock)~=-1 then
|
|
76128
|
-
local msg=self
|
|
76231
|
+
local msg=self:_GetEntryForGroup("RAN_OUT_OF",Group)
|
|
76129
76232
|
msg=string.format(msg,cgoname)
|
|
76130
76233
|
self:_SendMessage(msg,10,false,Group)
|
|
76131
76234
|
return false
|
|
@@ -76153,7 +76256,7 @@ elseif pack and not drop then
|
|
|
76153
76256
|
inzone=true
|
|
76154
76257
|
end
|
|
76155
76258
|
if not inzone then
|
|
76156
|
-
local msg=self
|
|
76259
|
+
local msg=self:_GetEntryForGroup("NOT_CLOSE_ENOUGH_LOGISTICS",Group)
|
|
76157
76260
|
self:_SendMessage(msg,10,false,Group)
|
|
76158
76261
|
if not self.debug then return self end
|
|
76159
76262
|
end
|
|
@@ -76162,7 +76265,7 @@ if location then
|
|
|
76162
76265
|
local unitcoord=Unit:GetCoordinate()or Group:GetCoordinate()
|
|
76163
76266
|
if unitcoord then
|
|
76164
76267
|
if not location:IsCoordinateInZone(unitcoord)then
|
|
76165
|
-
local msg=self
|
|
76268
|
+
local msg=self:_GetEntryForGroup("CARGO_NOT_AVAILABLE_ZONE",Group)
|
|
76166
76269
|
self:_SendMessage(msg,10,false,Group)
|
|
76167
76270
|
if not self.debug then return false end
|
|
76168
76271
|
end
|
|
@@ -76173,7 +76276,7 @@ local canloadcratesno=capabilities.cratelimit
|
|
|
76173
76276
|
local loaddist=self.CrateDistance or 35
|
|
76174
76277
|
local nearcrates,numbernearby=self:_FindCratesNearby(Group,Unit,loaddist,true,true,true)
|
|
76175
76278
|
if numbernearby>=canloadcratesno and(not drop)and(not pack)then
|
|
76176
|
-
local msg=self
|
|
76279
|
+
local msg=self:_GetEntryForGroup("ENOUGH_CRATES_NEARBY",Group)
|
|
76177
76280
|
self:_SendMessage(msg,10,false,Group)
|
|
76178
76281
|
return false
|
|
76179
76282
|
end
|
|
@@ -76188,7 +76291,7 @@ local cargotype=Cargo
|
|
|
76188
76291
|
local number=requestNumber
|
|
76189
76292
|
local cratesneeded=cargotype:GetCratesNeeded()
|
|
76190
76293
|
local cratename=cargotype:GetName()
|
|
76191
|
-
local cratedisplayname=self:
|
|
76294
|
+
local cratedisplayname=self:_GetCargoDisplayNameForGroup(cargotype,Group)
|
|
76192
76295
|
local cratetemplate="Container"
|
|
76193
76296
|
local cgotype=cargotype:GetType()
|
|
76194
76297
|
local cgomass=cargotype:GetMass()
|
|
@@ -76445,9 +76548,9 @@ if not(drop or pack)then
|
|
|
76445
76548
|
Cargo:RemoveStock(requestedSets)
|
|
76446
76549
|
self:_RefreshCrateQuantityMenus(Group,Unit,Cargo)
|
|
76447
76550
|
end
|
|
76448
|
-
local text=string.format(self
|
|
76551
|
+
local text=string.format(self:_GetEntryForGroup("CRATES_POSITIONED",Group),number,cratedisplayname)
|
|
76449
76552
|
if drop then
|
|
76450
|
-
text=string.format(self
|
|
76553
|
+
text=string.format(self:_GetEntryForGroup("CRATES_DROPPED",Group),number,cratedisplayname)
|
|
76451
76554
|
self:__CratesDropped(1,Group,Unit,droppedcargo)
|
|
76452
76555
|
else
|
|
76453
76556
|
if not quiet then
|
|
@@ -76554,7 +76657,7 @@ end
|
|
|
76554
76657
|
end
|
|
76555
76658
|
self:_SendMessage(text:Text(),30,true,_group,true)
|
|
76556
76659
|
else
|
|
76557
|
-
local msg=self
|
|
76660
|
+
local msg=self:_GetEntryForGroup("NO_CRATES_WITHIN",_group)
|
|
76558
76661
|
msg=string.format(msg,finddist)
|
|
76559
76662
|
self:_SendMessage(msg,10,false,_group,true)
|
|
76560
76663
|
end
|
|
@@ -76588,7 +76691,7 @@ if string.match(gr:GetName(),tName)then
|
|
|
76588
76691
|
local cname=cfg.Name or"Unit"
|
|
76589
76692
|
table.insert(removedTable,{groupName=gr:GetName(),name=cname,template=tName,coordinate=gr:GetCoordinate()})
|
|
76590
76693
|
gr:Destroy(false)
|
|
76591
|
-
local msg=self
|
|
76694
|
+
local msg=self:_GetEntryForGroup("UNITS_REMOVED",_group)
|
|
76592
76695
|
msg=string.format(msg,cname)
|
|
76593
76696
|
self:_SendMessage(msg,10,false,_group)
|
|
76594
76697
|
removedAny=true
|
|
@@ -76602,7 +76705,7 @@ end
|
|
|
76602
76705
|
end
|
|
76603
76706
|
end
|
|
76604
76707
|
if not removedAny then
|
|
76605
|
-
local msg=self
|
|
76708
|
+
local msg=self:_GetEntryForGroup("NOTHING_TO_REMOVE",_group)
|
|
76606
76709
|
self:_SendMessage(msg,10,false,_group)
|
|
76607
76710
|
else
|
|
76608
76711
|
self:__RemoveCratesNearby(1,_group,_unit,removedTable)
|
|
@@ -76647,7 +76750,7 @@ self:_RefreshLoadCratesMenu(_group,_unit)
|
|
|
76647
76750
|
self:_RefreshPackMenus(_group,_unit)
|
|
76648
76751
|
self:__RemoveCratesNearby(1,_group,_unit,crates)
|
|
76649
76752
|
else
|
|
76650
|
-
local msg=self
|
|
76753
|
+
local msg=self:_GetEntryForGroup("NO_CRATES_WITHIN",_group)
|
|
76651
76754
|
msg=string.format(msg,finddist)
|
|
76652
76755
|
self:_SendMessage(msg,10,false,_group,true)
|
|
76653
76756
|
end
|
|
@@ -76739,18 +76842,18 @@ local cratelimit=capabilities.cratelimit
|
|
|
76739
76842
|
local grounded=not self:IsUnitInAir(Unit)
|
|
76740
76843
|
local canhoverload=self:CanHoverLoad(Unit)
|
|
76741
76844
|
if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
76742
|
-
local msg=self
|
|
76845
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_LOAD_CARGO",Group)
|
|
76743
76846
|
self:_SendMessage(msg,10,false,Group)
|
|
76744
76847
|
if not self.debug then return self end
|
|
76745
76848
|
end
|
|
76746
76849
|
if not cancrates then
|
|
76747
|
-
local msg=self
|
|
76850
|
+
local msg=self:_GetEntryForGroup("CHOPPER_CANNOT_CARRY",Group)
|
|
76748
76851
|
self:_SendMessage(msg,10,false,Group)
|
|
76749
76852
|
elseif self.forcehoverload and not canhoverload then
|
|
76750
|
-
local msg=self
|
|
76853
|
+
local msg=self:_GetEntryForGroup("HOVER_OVER_CRATES",Group)
|
|
76751
76854
|
self:_SendMessage(msg,10,false,Group)
|
|
76752
76855
|
elseif not grounded and not canhoverload then
|
|
76753
|
-
local msg=self
|
|
76856
|
+
local msg=self:_GetEntryForGroup("LAND_OR_HOVER_OVER_CRATES",Group)
|
|
76754
76857
|
self:_SendMessage(msg,10,false,Group)
|
|
76755
76858
|
else
|
|
76756
76859
|
local numberonboard=0
|
|
@@ -76770,11 +76873,11 @@ self:T(self.lid.." Crates found: "..number)
|
|
|
76770
76873
|
if number==0 and self.hoverautoloading then
|
|
76771
76874
|
return self
|
|
76772
76875
|
elseif number==0 then
|
|
76773
|
-
local msg=self
|
|
76876
|
+
local msg=self:_GetEntryForGroup("NO_LOADABLE_CRATES",Group)
|
|
76774
76877
|
self:_SendMessage(msg,10,false,Group)
|
|
76775
76878
|
return self
|
|
76776
76879
|
elseif numberonboard==cratelimit then
|
|
76777
|
-
local msg=self
|
|
76880
|
+
local msg=self:_GetEntryForGroup("FULLY_LOADED",Group)
|
|
76778
76881
|
self:_SendMessage(msg,10,false,Group)
|
|
76779
76882
|
return self
|
|
76780
76883
|
else
|
|
@@ -76816,21 +76919,21 @@ local fullSets=math.floor(loadedHere/needed)
|
|
|
76816
76919
|
local leftover=loadedHere%needed
|
|
76817
76920
|
if needed>1 then
|
|
76818
76921
|
if fullSets>0 and leftover==0 then
|
|
76819
|
-
local msg=self
|
|
76820
|
-
msg=string.format(msg,fullSets,cName)
|
|
76922
|
+
local msg=self:_GetEntryForGroup("LOADED_FULL",Group)
|
|
76923
|
+
msg=string.format(msg,fullSets,self:_GetCargoDisplayNameForGroup(cName,Group))
|
|
76821
76924
|
self:_SendMessage(msg,10,false,Group)
|
|
76822
76925
|
elseif fullSets>0 and leftover>0 then
|
|
76823
|
-
local msg=self
|
|
76824
|
-
msg=string.format(msg,fullSets,cName,leftover)
|
|
76926
|
+
local msg=self:_GetEntryForGroup("LOADED_SETS_LEFTOVER",Group)
|
|
76927
|
+
msg=string.format(msg,fullSets,self:_GetCargoDisplayNameForGroup(cName,Group),leftover)
|
|
76825
76928
|
self:_SendMessage(msg,10,false,Group)
|
|
76826
76929
|
else
|
|
76827
|
-
local msg=self
|
|
76828
|
-
msg=string.format(msg,loadedHere,needed,cName)
|
|
76930
|
+
local msg=self:_GetEntryForGroup("LOADED_PARTIAL",Group)
|
|
76931
|
+
msg=string.format(msg,loadedHere,needed,self:_GetCargoDisplayNameForGroup(cName,Group))
|
|
76829
76932
|
self:_SendMessage(msg,15,false,Group)
|
|
76830
76933
|
end
|
|
76831
76934
|
else
|
|
76832
|
-
local msg=self
|
|
76833
|
-
msg=string.format(msg,loadedHere,cName)
|
|
76935
|
+
local msg=self:_GetEntryForGroup("LOADED_SETS",Group)
|
|
76936
|
+
msg=string.format(msg,loadedHere,self:_GetCargoDisplayNameForGroup(cName,Group))
|
|
76834
76937
|
self:_SendMessage(msg,10,false,Group)
|
|
76835
76938
|
end
|
|
76836
76939
|
end
|
|
@@ -76991,7 +77094,7 @@ report:Add("Total Mass: "..loadedmass.." kg. Loadable: "..maxloadable.." kg.")
|
|
|
76991
77094
|
local text=report:Text()
|
|
76992
77095
|
self:_SendMessage(text,30,true,Group,true)
|
|
76993
77096
|
else
|
|
76994
|
-
local msg=self
|
|
77097
|
+
local msg=self:_GetEntryForGroup("NOTHING_LOADED",Group)
|
|
76995
77098
|
msg=string.format(msg,trooplimit,cratelimit,maxloadable)
|
|
76996
77099
|
self:_SendMessage(msg,10,false,Group,true)
|
|
76997
77100
|
end
|
|
@@ -77076,7 +77179,7 @@ end
|
|
|
77076
77179
|
local text=report:Text()
|
|
77077
77180
|
self:_SendMessage(text,30,true,Group,true)
|
|
77078
77181
|
else
|
|
77079
|
-
local msg=self
|
|
77182
|
+
local msg=self:_GetEntryForGroup("NOTHING_IN_STOCK",Group)
|
|
77080
77183
|
self:_SendMessage(msg,10,false,Group,true)
|
|
77081
77184
|
end
|
|
77082
77185
|
return self
|
|
@@ -77127,7 +77230,7 @@ self:T(self.lid.." _UnloadTroops")
|
|
|
77127
77230
|
local droppingatbase=false
|
|
77128
77231
|
local canunload=true
|
|
77129
77232
|
if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
77130
|
-
local msg=self
|
|
77233
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_UNLOAD_TROOPS",Group)
|
|
77131
77234
|
self:_SendMessage(msg,10,false,Group)
|
|
77132
77235
|
if not self.debug then return self end
|
|
77133
77236
|
end
|
|
@@ -77214,19 +77317,21 @@ end
|
|
|
77214
77317
|
end
|
|
77215
77318
|
end
|
|
77216
77319
|
local parts={}
|
|
77320
|
+
local troopLabel=self:_GetEntryForGroup("TROOPS_LABEL",Group)
|
|
77321
|
+
local engineerLabel=self:_GetEntryForGroup("ENGINEERS_LABEL",Group)
|
|
77217
77322
|
for nName,nCount in pairs(deployedTroopsByName)do
|
|
77218
|
-
parts[#parts+1]=tostring(nCount).."x
|
|
77323
|
+
parts[#parts+1]=tostring(nCount).."x "..troopLabel.." "..nName
|
|
77219
77324
|
end
|
|
77220
77325
|
for nName,nCount in pairs(deployedEngineersByName)do
|
|
77221
|
-
parts[#parts+1]=tostring(nCount).."x
|
|
77326
|
+
parts[#parts+1]=tostring(nCount).."x "..engineerLabel.." "..nName
|
|
77222
77327
|
end
|
|
77223
77328
|
if#parts>0 then
|
|
77224
|
-
local msg=self
|
|
77329
|
+
local msg=self:_GetEntryForGroup("DROPPED_INTO_ACTION",Group)
|
|
77225
77330
|
msg=string.format(msg,table.concat(parts,", "))
|
|
77226
77331
|
self:_SendMessage(msg,10,false,Group)
|
|
77227
77332
|
end
|
|
77228
77333
|
else
|
|
77229
|
-
local msg=self
|
|
77334
|
+
local msg=self:_GetEntryForGroup("TROOPS_RETURNED",Group)
|
|
77230
77335
|
self:_SendMessage(msg,10,false,Group)
|
|
77231
77336
|
self:__TroopsRTB(1,Group,Unit,zonename,zone)
|
|
77232
77337
|
end
|
|
@@ -77266,10 +77371,10 @@ self:_UpdateUnitCargoMass(Unit)
|
|
|
77266
77371
|
self:_RefreshTroopQuantityMenus(Group,Unit,nil)
|
|
77267
77372
|
else
|
|
77268
77373
|
if IsHerc then
|
|
77269
|
-
local msg=self
|
|
77374
|
+
local msg=self:_GetEntryForGroup("NOTHING_LOADED_AIRDROP",Group)
|
|
77270
77375
|
self:_SendMessage(msg,10,false,Group)
|
|
77271
77376
|
else
|
|
77272
|
-
local msg=self
|
|
77377
|
+
local msg=self:_GetEntryForGroup("NOTHING_LOADED_HOVER",Group)
|
|
77273
77378
|
self:_SendMessage(msg,10,false,Group)
|
|
77274
77379
|
end
|
|
77275
77380
|
end
|
|
@@ -77280,7 +77385,7 @@ self:T(self.lid.." _UnloadCrates")
|
|
|
77280
77385
|
if not self.dropcratesanywhere then
|
|
77281
77386
|
local inzone,zonename,zone,distance=self:IsUnitInZone(Unit,CTLD.CargoZoneType.DROP)
|
|
77282
77387
|
if not inzone then
|
|
77283
|
-
local msg=self
|
|
77388
|
+
local msg=self:_GetEntryForGroup("NOT_CLOSE_ENOUGH_DROP",Group)
|
|
77284
77389
|
self:_SendMessage(msg,10,false,Group)
|
|
77285
77390
|
if not self.debug then
|
|
77286
77391
|
return self
|
|
@@ -77288,7 +77393,7 @@ end
|
|
|
77288
77393
|
end
|
|
77289
77394
|
end
|
|
77290
77395
|
if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
77291
|
-
local msg=self
|
|
77396
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_DROP_CARGO",Group)
|
|
77292
77397
|
self:_SendMessage(msg,10,false,Group)
|
|
77293
77398
|
if not self.debug then return self end
|
|
77294
77399
|
end
|
|
@@ -77325,21 +77430,21 @@ if needed>1 then
|
|
|
77325
77430
|
local full=math.floor(count/needed)
|
|
77326
77431
|
local left=count%needed
|
|
77327
77432
|
if full>0 and left==0 then
|
|
77328
|
-
local msg=self
|
|
77329
|
-
msg=string.format(msg,full,cname)
|
|
77433
|
+
local msg=self:_GetEntryForGroup("DROPPED_FULL",Group)
|
|
77434
|
+
msg=string.format(msg,full,self:_GetCargoDisplayNameForGroup(cname,Group))
|
|
77330
77435
|
self:_SendMessage(msg,10,false,Group)
|
|
77331
77436
|
elseif full>0 and left>0 then
|
|
77332
|
-
local msg=self
|
|
77333
|
-
msg=string.format(msg,full,cname,left)
|
|
77437
|
+
local msg=self:_GetEntryForGroup("DROPPED_SETS_LEFTOVER",Group)
|
|
77438
|
+
msg=string.format(msg,full,self:_GetCargoDisplayNameForGroup(cname,Group),left)
|
|
77334
77439
|
self:_SendMessage(msg,10,false,Group)
|
|
77335
77440
|
else
|
|
77336
|
-
local msg=self
|
|
77337
|
-
msg=string.format(msg,count,needed,cname)
|
|
77441
|
+
local msg=self:_GetEntryForGroup("DROPPED_PARTIAL",Group)
|
|
77442
|
+
msg=string.format(msg,count,needed,self:_GetCargoDisplayNameForGroup(cname,Group))
|
|
77338
77443
|
self:_SendMessage(msg,15,false,Group)
|
|
77339
77444
|
end
|
|
77340
77445
|
else
|
|
77341
|
-
local msg=self
|
|
77342
|
-
msg=string.format(msg,count,cname)
|
|
77446
|
+
local msg=self:_GetEntryForGroup("DROPPED_SETS",Group)
|
|
77447
|
+
msg=string.format(msg,count,self:_GetCargoDisplayNameForGroup(cname,Group))
|
|
77343
77448
|
self:_SendMessage(msg,10,false,Group)
|
|
77344
77449
|
end
|
|
77345
77450
|
end
|
|
@@ -77367,10 +77472,10 @@ self:_RefreshDropCratesMenu(Group,Unit)
|
|
|
77367
77472
|
self:_RefreshCrateQuantityMenus(Group,Unit,nil)
|
|
77368
77473
|
else
|
|
77369
77474
|
if IsHerc then
|
|
77370
|
-
local msg=self
|
|
77475
|
+
local msg=self:_GetEntryForGroup("NOTHING_LOADED_AIRDROP",Group)
|
|
77371
77476
|
self:_SendMessage(msg,10,false,Group)
|
|
77372
77477
|
else
|
|
77373
|
-
local msg=self
|
|
77478
|
+
local msg=self:_GetEntryForGroup("NOTHING_LOADED_HOVER",Group)
|
|
77374
77479
|
self:_SendMessage(msg,10,false,Group)
|
|
77375
77480
|
end
|
|
77376
77481
|
end
|
|
@@ -77384,7 +77489,7 @@ self:T(self.lid.." _BuildCrates")
|
|
|
77384
77489
|
if self:IsFixedWing(Unit)and self.enableFixedWing and not Engineering then
|
|
77385
77490
|
local speed=Unit:GetVelocityKMH()
|
|
77386
77491
|
if speed>1 then
|
|
77387
|
-
local msg=self
|
|
77492
|
+
local msg=self:_GetEntryForGroup("NEED_TO_LAND_BUILD",Group)
|
|
77388
77493
|
self:_SendMessage(msg,10,false,Group)
|
|
77389
77494
|
return self
|
|
77390
77495
|
end
|
|
@@ -77392,7 +77497,7 @@ end
|
|
|
77392
77497
|
if not Engineering and self.nobuildinloadzones then
|
|
77393
77498
|
local inloadzone=self:IsUnitInZone(Unit,CTLD.CargoZoneType.LOAD)
|
|
77394
77499
|
if inloadzone then
|
|
77395
|
-
local msg=self
|
|
77500
|
+
local msg=self:_GetEntryForGroup("CANNOT_BUILD_LOADING_AREA",Group)
|
|
77396
77501
|
self:_SendMessage(msg,10,false,Group)
|
|
77397
77502
|
return self
|
|
77398
77503
|
end
|
|
@@ -77528,7 +77633,7 @@ end
|
|
|
77528
77633
|
self:_SendMessage(msg,15,false,startMsgGroup)
|
|
77529
77634
|
end
|
|
77530
77635
|
else
|
|
77531
|
-
local msg=self
|
|
77636
|
+
local msg=self:_GetEntryForGroup("BUILD_STARTED",startMsgGroup)
|
|
77532
77637
|
msg=string.format(msg,self.buildtime)
|
|
77533
77638
|
if startMsgGroup then
|
|
77534
77639
|
self:_SendMessage(msg,15,false,startMsgGroup)
|
|
@@ -77597,7 +77702,7 @@ end
|
|
|
77597
77702
|
end
|
|
77598
77703
|
else
|
|
77599
77704
|
if not Engineering then
|
|
77600
|
-
local msg=self
|
|
77705
|
+
local msg=self:_GetEntryForGroup("NO_CRATES_WITHIN_PLAIN",Group)
|
|
77601
77706
|
msg=string.format(msg,finddist)
|
|
77602
77707
|
self:_SendMessage(msg,10,false,Group)
|
|
77603
77708
|
end
|
|
@@ -77623,7 +77728,7 @@ if dist>innerDist and dist<=finddist then
|
|
|
77623
77728
|
local generic=self:GetGenericCargoObjectFromGroupName(gr:GetName())
|
|
77624
77729
|
local cargo=generic and self:_FindCratesCargoObject(generic:GetName()or generic.Name)or nil
|
|
77625
77730
|
if cargo then
|
|
77626
|
-
local display=self:_GetCargoDisplayName(cargo)
|
|
77731
|
+
local display=self:_FormatCargoDisplayText(self:_GetCargoDisplayName(cargo),cargo,Group)
|
|
77627
77732
|
packable[#packable+1]={
|
|
77628
77733
|
group=gr,
|
|
77629
77734
|
groupName=gr:GetName(),
|
|
@@ -77704,12 +77809,12 @@ self:T(self.lid.." _LoadPackedCratesByIds cargoName="..(cargoName or"nil"))
|
|
|
77704
77809
|
local grounded=not self:IsUnitInAir(Unit)
|
|
77705
77810
|
local hover=self:CanHoverLoad(Unit)
|
|
77706
77811
|
if not grounded and not hover then
|
|
77707
|
-
local msg=self
|
|
77812
|
+
local msg=self:_GetEntryForGroup("MUST_LAND_OR_HOVER_CRATES",Group)
|
|
77708
77813
|
self:_SendMessage(msg,10,false,Group)
|
|
77709
77814
|
return self
|
|
77710
77815
|
end
|
|
77711
77816
|
if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
77712
|
-
local msg=self
|
|
77817
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_LOAD_CARGO",Group)
|
|
77713
77818
|
self:_SendMessage(msg,10,false,Group)
|
|
77714
77819
|
return self
|
|
77715
77820
|
end
|
|
@@ -77732,7 +77837,7 @@ end
|
|
|
77732
77837
|
end
|
|
77733
77838
|
end
|
|
77734
77839
|
if#matchingCrates==0 then
|
|
77735
|
-
local msg=self
|
|
77840
|
+
local msg=self:_GetEntryForGroup("NO_NAMED_CRATES_IN_RANGE",Group)
|
|
77736
77841
|
msg=string.format(msg,cargoName or"selection")
|
|
77737
77842
|
self:_SendMessage(msg,10,false,Group)
|
|
77738
77843
|
self:_RefreshPackMenus(Group,Unit)
|
|
@@ -77745,7 +77850,7 @@ local loadedData=self.Loaded_Cargo[unitName]or{Troopsloaded=0,Cratesloaded=0,Car
|
|
|
77745
77850
|
local capabilities=self:_GetUnitCapabilities(Unit)
|
|
77746
77851
|
local capacity=capabilities.cratelimit or 0
|
|
77747
77852
|
if loadedData.Cratesloaded>=capacity then
|
|
77748
|
-
local msg=self
|
|
77853
|
+
local msg=self:_GetEntryForGroup("NO_MORE_CAPACITY",Group)
|
|
77749
77854
|
self:_SendMessage(msg,10,false,Group)
|
|
77750
77855
|
self:_RefreshPackMenus(Group,Unit)
|
|
77751
77856
|
return self
|
|
@@ -77753,7 +77858,7 @@ end
|
|
|
77753
77858
|
local spaceLeft=capacity-loadedData.Cratesloaded
|
|
77754
77859
|
local toLoad=math.min(#matchingCrates,needed,spaceLeft)
|
|
77755
77860
|
if toLoad<1 then
|
|
77756
|
-
local msg=self
|
|
77861
|
+
local msg=self:_GetEntryForGroup("CANNOT_LOAD_NONE_OR_FULL",Group)
|
|
77757
77862
|
self:_SendMessage(msg,10,false,Group)
|
|
77758
77863
|
self:_RefreshPackMenus(Group,Unit)
|
|
77759
77864
|
return self
|
|
@@ -77775,9 +77880,9 @@ self.Loaded_Cargo[unitName]=loadedData
|
|
|
77775
77880
|
self:_UpdateUnitCargoMass(Unit)
|
|
77776
77881
|
self:_CleanupTrackedCrates(crateIDsLoaded)
|
|
77777
77882
|
local loadedHere=toLoad
|
|
77778
|
-
local displayName=cargoName or(matchingCrates[1]:GetName()or"selection")
|
|
77883
|
+
local displayName=self:_GetCargoDisplayNameForGroup(cargoName or(matchingCrates[1]:GetName()or"selection"),Group)
|
|
77779
77884
|
if loadedHere<needed and loadedData.Cratesloaded>=capacity then
|
|
77780
|
-
local msg=self
|
|
77885
|
+
local msg=self:_GetEntryForGroup("LOADED_PARTIAL_LIMIT",Group)
|
|
77781
77886
|
msg=string.format(msg,loadedHere,needed,displayName)
|
|
77782
77887
|
self:_SendMessage(msg,10,false,Group)
|
|
77783
77888
|
else
|
|
@@ -77785,20 +77890,20 @@ local fullSets=math.floor(loadedHere/needed)
|
|
|
77785
77890
|
local leftover=loadedHere%needed
|
|
77786
77891
|
if needed>1 then
|
|
77787
77892
|
if fullSets>0 and leftover==0 then
|
|
77788
|
-
local msg=self
|
|
77893
|
+
local msg=self:_GetEntryForGroup("LOADED_FULL",Group)
|
|
77789
77894
|
msg=string.format(msg,fullSets,displayName)
|
|
77790
77895
|
self:_SendMessage(msg,10,false,Group)
|
|
77791
77896
|
elseif fullSets>0 and leftover>0 then
|
|
77792
|
-
local msg=self
|
|
77897
|
+
local msg=self:_GetEntryForGroup("LOADED_SETS_LEFTOVER",Group)
|
|
77793
77898
|
msg=string.format(msg,fullSets,displayName,leftover)
|
|
77794
77899
|
self:_SendMessage(msg,10,false,Group)
|
|
77795
77900
|
else
|
|
77796
|
-
local msg=self
|
|
77901
|
+
local msg=self:_GetEntryForGroup("LOADED_PARTIAL",Group)
|
|
77797
77902
|
msg=string.format(msg,loadedHere,needed,displayName)
|
|
77798
77903
|
self:_SendMessage(msg,15,false,Group)
|
|
77799
77904
|
end
|
|
77800
77905
|
else
|
|
77801
|
-
local msg=self
|
|
77906
|
+
local msg=self:_GetEntryForGroup("LOADED_SETS",Group)
|
|
77802
77907
|
msg=string.format(msg,loadedHere,displayName)
|
|
77803
77908
|
self:_SendMessage(msg,10,false,Group)
|
|
77804
77909
|
end
|
|
@@ -77832,17 +77937,17 @@ end
|
|
|
77832
77937
|
end
|
|
77833
77938
|
end
|
|
77834
77939
|
if#crates==0 then
|
|
77835
|
-
local msg=self
|
|
77940
|
+
local msg=self:_GetEntryForGroup("NOTHING_TO_REMOVE",Group)
|
|
77836
77941
|
self:_SendMessage(msg,10,false,Group)
|
|
77837
77942
|
self:_RefreshPackMenus(Group,Unit)
|
|
77838
77943
|
return self
|
|
77839
77944
|
end
|
|
77840
|
-
local text=REPORT:New(self
|
|
77945
|
+
local text=REPORT:New(self:_GetEntryForGroup("REPORT_REMOVING_CRATES",Group))
|
|
77841
77946
|
text:Add("------------------------------------------------------------")
|
|
77842
77947
|
local removedIDs={}
|
|
77843
77948
|
for _,entry in pairs(crates)do
|
|
77844
|
-
local name=entry:GetName()or"none"
|
|
77845
|
-
text:Add(string.format(self
|
|
77949
|
+
local name=self:_GetCargoDisplayNameForGroup(entry:GetName()or"none",Group)
|
|
77950
|
+
text:Add(string.format(self:_GetEntryForGroup("REPORT_ROW_CRATE_REMOVED",Group),name,entry.PerCrateMass))
|
|
77846
77951
|
local pos=entry:GetPositionable()
|
|
77847
77952
|
if pos then
|
|
77848
77953
|
entry.coordinate=pos:GetCoordinate()
|
|
@@ -77871,7 +77976,7 @@ function CTLD:_PackSelectedGroupAction(Group,Unit,TargetGroupName,Mode)
|
|
|
77871
77976
|
self:T(self.lid.." _PackSelectedGroupAction")
|
|
77872
77977
|
local targetGroup=GROUP:FindByName(TargetGroupName)
|
|
77873
77978
|
if not targetGroup or not targetGroup:IsAlive()then
|
|
77874
|
-
local msg=self
|
|
77979
|
+
local msg=self:_GetEntryForGroup("NOTHING_TO_PACK",Group)
|
|
77875
77980
|
self:_SendMessage(msg,10,false,Group)
|
|
77876
77981
|
self:_RefreshPackMenus(Group,Unit)
|
|
77877
77982
|
return false
|
|
@@ -77908,7 +78013,7 @@ packedAny=true
|
|
|
77908
78013
|
end
|
|
77909
78014
|
end
|
|
77910
78015
|
if not packedAny then
|
|
77911
|
-
local msg=self
|
|
78016
|
+
local msg=self:_GetEntryForGroup("NOTHING_TO_PACK",Group)
|
|
77912
78017
|
self:_SendMessage(msg,10,false,Group)
|
|
77913
78018
|
return false
|
|
77914
78019
|
end
|
|
@@ -77984,7 +78089,7 @@ end
|
|
|
77984
78089
|
end
|
|
77985
78090
|
else
|
|
77986
78091
|
if not Engineering then
|
|
77987
|
-
local msg=self
|
|
78092
|
+
local msg=self:_GetEntryForGroup("NO_CRATES_WITHIN_PLAIN",Group)
|
|
77988
78093
|
msg=string.format(msg,finddist)
|
|
77989
78094
|
self:_SendMessage(msg,10,false,Group,true)
|
|
77990
78095
|
end
|
|
@@ -78102,7 +78207,7 @@ end
|
|
|
78102
78207
|
function CTLD:_DropAndBuild(Group,Unit)
|
|
78103
78208
|
if self.nobuildinloadzones then
|
|
78104
78209
|
if self:IsUnitInZone(Unit,CTLD.CargoZoneType.LOAD)then
|
|
78105
|
-
local msg=self
|
|
78210
|
+
local msg=self:_GetEntryForGroup("CANNOT_BUILD_LOADING_AREA",Group)
|
|
78106
78211
|
self:_SendMessage(msg,10,false,Group)
|
|
78107
78212
|
return self
|
|
78108
78213
|
end
|
|
@@ -78113,7 +78218,7 @@ end
|
|
|
78113
78218
|
function CTLD:_DropSingleAndBuild(Group,Unit,setIndex)
|
|
78114
78219
|
if self.nobuildinloadzones then
|
|
78115
78220
|
if self:IsUnitInZone(Unit,CTLD.CargoZoneType.LOAD)then
|
|
78116
|
-
local msg=self
|
|
78221
|
+
local msg=self:_GetEntryForGroup("CANNOT_BUILD_LOADING_AREA",Group)
|
|
78117
78222
|
self:_SendMessage(msg,10,false,Group)
|
|
78118
78223
|
return self
|
|
78119
78224
|
end
|
|
@@ -78123,7 +78228,7 @@ timer.scheduleFunction(function()self:_BuildCrates(Group,Unit,false)end,{},timer
|
|
|
78123
78228
|
end
|
|
78124
78229
|
function CTLD:_PackAndLoad(Group,Unit)
|
|
78125
78230
|
if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
78126
|
-
local msg=self
|
|
78231
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_LOAD_CARGO",Group)
|
|
78127
78232
|
self:_SendMessage(msg,10,false,Group)
|
|
78128
78233
|
return self
|
|
78129
78234
|
end
|
|
@@ -78142,7 +78247,7 @@ return self
|
|
|
78142
78247
|
end
|
|
78143
78248
|
function CTLD:_GetAndLoad(Group,Unit,cargoObj,quantity,LoadAnyWay)
|
|
78144
78249
|
if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
78145
|
-
local msg=self
|
|
78250
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_LOAD_CARGO",Group)
|
|
78146
78251
|
self:_SendMessage(msg,10,false,Group)
|
|
78147
78252
|
return self
|
|
78148
78253
|
end
|
|
@@ -78159,7 +78264,7 @@ if space<0 then space=0 end
|
|
|
78159
78264
|
local perSet=needed>0 and needed or 1
|
|
78160
78265
|
capacitySets=math.floor(space/perSet)
|
|
78161
78266
|
if capacitySets<1 and not LoadAnyWay then
|
|
78162
|
-
local msg=self
|
|
78267
|
+
local msg=self:_GetEntryForGroup("NO_CAPACITY_NOW",Group)
|
|
78163
78268
|
self:_SendMessage(msg,10,false,Group)
|
|
78164
78269
|
return self
|
|
78165
78270
|
end
|
|
@@ -78178,7 +78283,7 @@ local zone=nil
|
|
|
78178
78283
|
inzone,ship,zone,distance,width=self:IsUnitInZone(Unit,CTLD.CargoZoneType.SHIP)
|
|
78179
78284
|
end
|
|
78180
78285
|
if not inzone then
|
|
78181
|
-
local msg=self
|
|
78286
|
+
local msg=self:_GetEntryForGroup("NOT_CLOSE_ENOUGH_LOGISTICS",Group)
|
|
78182
78287
|
self:_SendMessage(msg,10,false,Group)
|
|
78183
78288
|
return self
|
|
78184
78289
|
end
|
|
@@ -78197,7 +78302,7 @@ return self
|
|
|
78197
78302
|
end
|
|
78198
78303
|
function CTLD:_GetAllAndLoad(Group,Unit)
|
|
78199
78304
|
if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
78200
|
-
local msg=self
|
|
78305
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_LOAD_CARGO",Group)
|
|
78201
78306
|
self:_SendMessage(msg,10,false,Group)
|
|
78202
78307
|
return self
|
|
78203
78308
|
end
|
|
@@ -78507,11 +78612,11 @@ _group.CTLDTopmenu=nil
|
|
|
78507
78612
|
end
|
|
78508
78613
|
local toptroops=nil
|
|
78509
78614
|
local topcrates=nil
|
|
78510
|
-
local topmenu=MENU_GROUP:New(_group,self
|
|
78615
|
+
local topmenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_CTLD",_group),nil)
|
|
78511
78616
|
_group.CTLDTopmenu=topmenu
|
|
78512
78617
|
if cantroops then
|
|
78513
|
-
local toptroops=MENU_GROUP:New(_group,self
|
|
78514
|
-
local troopsmenu=MENU_GROUP:New(_group,self
|
|
78618
|
+
local toptroops=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_MANAGE_TROOPS",_group),topmenu)
|
|
78619
|
+
local troopsmenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_LOAD_TROOPS",_group),toptroops)
|
|
78515
78620
|
_group.MyTopTroopsMenu=toptroops
|
|
78516
78621
|
_group.CTLD_TroopMenus={}
|
|
78517
78622
|
if self.usesubcats then
|
|
@@ -78530,7 +78635,7 @@ end
|
|
|
78530
78635
|
end
|
|
78531
78636
|
for _,cargoObj in pairs(self.Cargo_Troops)do
|
|
78532
78637
|
if not cargoObj.DontShowInMenu then
|
|
78533
|
-
local menutext=self:_GetCargoDisplayName(cargoObj)
|
|
78638
|
+
local menutext=self:_FormatCargoDisplayText(self:_GetCargoDisplayName(cargoObj),cargoObj,_group)
|
|
78534
78639
|
local parent=troopsmenu
|
|
78535
78640
|
if useTroopSubcats and cargoObj.Subcategory and subcatmenus[cargoObj.Subcategory]then
|
|
78536
78641
|
parent=subcatmenus[cargoObj.Subcategory]
|
|
@@ -78543,18 +78648,18 @@ end
|
|
|
78543
78648
|
else
|
|
78544
78649
|
for _,cargoObj in pairs(self.Cargo_Troops)do
|
|
78545
78650
|
if not cargoObj.DontShowInMenu then
|
|
78546
|
-
local menutext=self:_GetCargoDisplayName(cargoObj)
|
|
78651
|
+
local menutext=self:_FormatCargoDisplayText(self:_GetCargoDisplayName(cargoObj),cargoObj,_group)
|
|
78547
78652
|
local mSet=MENU_GROUP:New(_group,menutext,troopsmenu)
|
|
78548
78653
|
_group.CTLD_TroopMenus[cargoObj.Name]=mSet
|
|
78549
78654
|
self:_AddTroopQuantityMenus(_group,_unit,mSet,cargoObj)
|
|
78550
78655
|
end
|
|
78551
78656
|
end
|
|
78552
78657
|
end
|
|
78553
|
-
local dropTroopsMenu=MENU_GROUP:New(_group,self
|
|
78658
|
+
local dropTroopsMenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_DROP_TROOPS",_group),toptroops):Refresh()
|
|
78554
78659
|
if self.maxUnloadTroopsAllowed==-1 then
|
|
78555
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78660
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_DROP_ALL_TROOPS",_group),dropTroopsMenu,self._UnloadTroops,self,_group,_unit):Refresh()
|
|
78556
78661
|
end
|
|
78557
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78662
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_EXTRACT_TROOPS",_group),toptroops,self._ExtractTroops,self,_group,_unit):Refresh()
|
|
78558
78663
|
local uName=_unit:GetName()
|
|
78559
78664
|
local loadedData=self.Loaded_Cargo[uName]
|
|
78560
78665
|
if loadedData and loadedData.Cargo then
|
|
@@ -78570,9 +78675,9 @@ end
|
|
|
78570
78675
|
end
|
|
78571
78676
|
end
|
|
78572
78677
|
if cancrates then
|
|
78573
|
-
local topcrates=MENU_GROUP:New(_group,self
|
|
78678
|
+
local topcrates=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_MANAGE_CRATES",_group),topmenu)
|
|
78574
78679
|
_group.MyTopCratesMenu=topcrates
|
|
78575
|
-
local cratesmenu=MENU_GROUP:New(_group,self
|
|
78680
|
+
local cratesmenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_GET_CRATES",_group),topcrates)
|
|
78576
78681
|
if self.onestepmenu then
|
|
78577
78682
|
_group.CTLD_CrateMenus={}
|
|
78578
78683
|
local crateStockSummary=nil
|
|
@@ -78600,13 +78705,12 @@ end
|
|
|
78600
78705
|
end
|
|
78601
78706
|
local needed=cargoObj:GetCratesNeeded()or 1
|
|
78602
78707
|
local txt
|
|
78603
|
-
local cargoLabel=self:_GetCargoDisplayName(cargoObj)
|
|
78708
|
+
local cargoLabel=self:_FormatCargoDisplayText(self:_GetCargoDisplayName(cargoObj),cargoObj,_group)
|
|
78604
78709
|
if needed>1 then
|
|
78605
|
-
local plural="
|
|
78606
|
-
|
|
78607
|
-
txt=string.format(self.gettext:GetEntry("MENU_CRATES_NEEDED",self.locale),needed,plural,cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78710
|
+
local plural=self:_GetMenuPluralSuffix(needed,"crate",_group)
|
|
78711
|
+
txt=string.format(self:_GetEntryForGroup("MENU_CRATES_NEEDED",_group),needed,plural,cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78608
78712
|
else
|
|
78609
|
-
txt=string.format(
|
|
78713
|
+
txt=string.format(self:_GetEntryForGroup("MENU_CRATE_SINGLE",_group),cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78610
78714
|
end
|
|
78611
78715
|
if cargoObj.Location then txt=txt.."[R]"end
|
|
78612
78716
|
if self.showstockinmenuitems then
|
|
@@ -78647,13 +78751,12 @@ for _,cargoObj in pairs(self.Cargo_Crates)do
|
|
|
78647
78751
|
if not cargoObj.DontShowInMenu then
|
|
78648
78752
|
local needed=cargoObj:GetCratesNeeded()or 1
|
|
78649
78753
|
local txt
|
|
78650
|
-
local cargoLabel=self:_GetCargoDisplayName(cargoObj)
|
|
78754
|
+
local cargoLabel=self:_FormatCargoDisplayText(self:_GetCargoDisplayName(cargoObj),cargoObj,_group)
|
|
78651
78755
|
if needed>1 then
|
|
78652
|
-
local plural="
|
|
78653
|
-
|
|
78654
|
-
txt=string.format(self.gettext:GetEntry("MENU_CRATES_NEEDED",self.locale),needed,plural,cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78756
|
+
local plural=self:_GetMenuPluralSuffix(needed,"crate",_group)
|
|
78757
|
+
txt=string.format(self:_GetEntryForGroup("MENU_CRATES_NEEDED",_group),needed,plural,cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78655
78758
|
else
|
|
78656
|
-
txt=string.format(
|
|
78759
|
+
txt=string.format(self:_GetEntryForGroup("MENU_CRATE_SINGLE",_group),cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78657
78760
|
end
|
|
78658
78761
|
if cargoObj.Location then txt=txt.."[R]"end
|
|
78659
78762
|
local stock=cargoObj:GetStock()
|
|
@@ -78665,13 +78768,12 @@ for _,cargoObj in pairs(self.Cargo_Statics)do
|
|
|
78665
78768
|
if(not cargoObj.DontShowInMenu)and(not cargoObj.UnitCanCarry or cargoObj:UnitCanCarry(_unit))then
|
|
78666
78769
|
local needed=cargoObj:GetCratesNeeded()or 1
|
|
78667
78770
|
local txt
|
|
78668
|
-
local cargoLabel=self:_GetCargoDisplayName(cargoObj)
|
|
78771
|
+
local cargoLabel=self:_FormatCargoDisplayText(self:_GetCargoDisplayName(cargoObj),cargoObj,_group)
|
|
78669
78772
|
if needed>1 then
|
|
78670
|
-
local plural="
|
|
78671
|
-
|
|
78672
|
-
txt=string.format(self.gettext:GetEntry("MENU_CRATES_NEEDED",self.locale),needed,plural,cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78773
|
+
local plural=self:_GetMenuPluralSuffix(needed,"crate",_group)
|
|
78774
|
+
txt=string.format(self:_GetEntryForGroup("MENU_CRATES_NEEDED",_group),needed,plural,cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78673
78775
|
else
|
|
78674
|
-
txt=string.format(
|
|
78776
|
+
txt=string.format(self:_GetEntryForGroup("MENU_CRATE_SINGLE",_group),cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78675
78777
|
end
|
|
78676
78778
|
if cargoObj.Location then txt=txt.."[R]"end
|
|
78677
78779
|
local stock=cargoObj:GetStock()
|
|
@@ -78684,13 +78786,12 @@ for _,cargoObj in pairs(self.Cargo_Crates)do
|
|
|
78684
78786
|
if not cargoObj.DontShowInMenu then
|
|
78685
78787
|
local needed=cargoObj:GetCratesNeeded()or 1
|
|
78686
78788
|
local txt
|
|
78687
|
-
local cargoLabel=self:_GetCargoDisplayName(cargoObj)
|
|
78789
|
+
local cargoLabel=self:_FormatCargoDisplayText(self:_GetCargoDisplayName(cargoObj),cargoObj,_group)
|
|
78688
78790
|
if needed>1 then
|
|
78689
|
-
local plural="
|
|
78690
|
-
|
|
78691
|
-
txt=string.format(self.gettext:GetEntry("MENU_CRATES_NEEDED",self.locale),needed,plural,cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78791
|
+
local plural=self:_GetMenuPluralSuffix(needed,"crate",_group)
|
|
78792
|
+
txt=string.format(self:_GetEntryForGroup("MENU_CRATES_NEEDED",_group),needed,plural,cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78692
78793
|
else
|
|
78693
|
-
txt=string.format(
|
|
78794
|
+
txt=string.format(self:_GetEntryForGroup("MENU_CRATE_SINGLE",_group),cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78694
78795
|
end
|
|
78695
78796
|
if cargoObj.Location then txt=txt.."[R]"end
|
|
78696
78797
|
local stock=cargoObj:GetStock()
|
|
@@ -78702,13 +78803,12 @@ for _,cargoObj in pairs(self.Cargo_Statics)do
|
|
|
78702
78803
|
if(not cargoObj.DontShowInMenu)and(not cargoObj.UnitCanCarry or cargoObj:UnitCanCarry(_unit))then
|
|
78703
78804
|
local needed=cargoObj:GetCratesNeeded()or 1
|
|
78704
78805
|
local txt
|
|
78705
|
-
local cargoLabel=self:_GetCargoDisplayName(cargoObj)
|
|
78806
|
+
local cargoLabel=self:_FormatCargoDisplayText(self:_GetCargoDisplayName(cargoObj),cargoObj,_group)
|
|
78706
78807
|
if needed>1 then
|
|
78707
|
-
local plural="
|
|
78708
|
-
|
|
78709
|
-
txt=string.format(self.gettext:GetEntry("MENU_CRATES_NEEDED",self.locale),needed,plural,cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78808
|
+
local plural=self:_GetMenuPluralSuffix(needed,"crate",_group)
|
|
78809
|
+
txt=string.format(self:_GetEntryForGroup("MENU_CRATES_NEEDED",_group),needed,plural,cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78710
78810
|
else
|
|
78711
|
-
txt=string.format(
|
|
78811
|
+
txt=string.format(self:_GetEntryForGroup("MENU_CRATE_SINGLE",_group),cargoLabel,cargoObj.PerCrateMass or 0)
|
|
78712
78812
|
end
|
|
78713
78813
|
if cargoObj.Location then txt=txt.."[R]"end
|
|
78714
78814
|
local stock=cargoObj:GetStock()
|
|
@@ -78718,30 +78818,30 @@ end
|
|
|
78718
78818
|
end
|
|
78719
78819
|
end
|
|
78720
78820
|
end
|
|
78721
|
-
local loadCratesMenu=MENU_GROUP:New(_group,self
|
|
78821
|
+
local loadCratesMenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_LOAD_CRATES",_group),topcrates)
|
|
78722
78822
|
_group.MyLoadCratesMenu=loadCratesMenu
|
|
78723
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78724
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78725
|
-
local dropCratesMenu=MENU_GROUP:New(_group,self
|
|
78823
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_LOAD_ALL",_group),loadCratesMenu,self._LoadCratesNearby,self,_group,_unit)
|
|
78824
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_SHOW_LOADABLE_CRATES",_group),loadCratesMenu,self._RefreshLoadCratesMenu,self,_group,_unit)
|
|
78825
|
+
local dropCratesMenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_DROP_CRATES",_group),topcrates)
|
|
78726
78826
|
topcrates.DropCratesMenu=dropCratesMenu
|
|
78727
78827
|
if not self.nobuildmenu then
|
|
78728
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78729
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78828
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_BUILD_CRATES",_group),topcrates,self._BuildCrates,self,_group,_unit)
|
|
78829
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_REPAIR",_group),topcrates,self._RepairCrates,self,_group,_unit):Refresh()
|
|
78730
78830
|
end
|
|
78731
|
-
local removecratesmenu=MENU_GROUP:New(_group,self
|
|
78732
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78831
|
+
local removecratesmenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_REMOVE_CRATES",_group),topcrates)
|
|
78832
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_REMOVE_CRATES_NEARBY",_group),removecratesmenu,self._RemoveCratesNearby,self,_group,_unit)
|
|
78733
78833
|
if self.onestepmenu then
|
|
78734
|
-
topcrates.PackRootMenu=MENU_GROUP:New(_group,self
|
|
78735
|
-
topcrates.PackMenu=MENU_GROUP:New(_group,self
|
|
78834
|
+
topcrates.PackRootMenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_PACK",_group),topcrates)
|
|
78835
|
+
topcrates.PackMenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_PACK",_group),topcrates.PackRootMenu)
|
|
78736
78836
|
local showPackAndLoad=not(self.UseC130LoadAndUnload and self:IsC130J(_unit))
|
|
78737
78837
|
if showPackAndLoad then
|
|
78738
|
-
topcrates.PackAndLoadMenu=MENU_GROUP:New(_group,self
|
|
78838
|
+
topcrates.PackAndLoadMenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_PACK_AND_LOAD",_group),topcrates.PackRootMenu)
|
|
78739
78839
|
end
|
|
78740
|
-
topcrates.PackAndRemoveMenu=MENU_GROUP:New(_group,self
|
|
78741
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78840
|
+
topcrates.PackAndRemoveMenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_PACK_AND_REMOVE",_group),topcrates.PackRootMenu)
|
|
78841
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_LIST_CRATES_NEARBY",_group),topcrates,self._ListCratesNearby,self,_group,_unit)
|
|
78742
78842
|
else
|
|
78743
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78744
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78843
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_PACK_CRATES",_group),topcrates,self._PackCratesNearby,self,_group,_unit)
|
|
78844
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_LIST_CRATES_NEARBY",_group),topcrates,self._ListCratesNearby,self,_group,_unit)
|
|
78745
78845
|
end
|
|
78746
78846
|
local uName=_unit:GetName()
|
|
78747
78847
|
local loadedData=self.Loaded_Cargo[uName]
|
|
@@ -78751,7 +78851,7 @@ for _,cgo in pairs(loadedData.Cargo)do
|
|
|
78751
78851
|
if cgo and(not cgo:WasDropped())then
|
|
78752
78852
|
local cname=cgo:GetName()
|
|
78753
78853
|
local cneeded=cgo:GetCratesNeeded()
|
|
78754
|
-
local cdisplay=self:_GetCargoDisplayName(cgo)
|
|
78854
|
+
local cdisplay=self:_FormatCargoDisplayText(self:_GetCargoDisplayName(cgo),cgo,_group)
|
|
78755
78855
|
cargoByName[cname]=cargoByName[cname]or{count=0,needed=cneeded,display=cdisplay}
|
|
78756
78856
|
cargoByName[cname].count=cargoByName[cname].count+1
|
|
78757
78857
|
end
|
|
@@ -78763,9 +78863,9 @@ end
|
|
|
78763
78863
|
end
|
|
78764
78864
|
end
|
|
78765
78865
|
if self:IsC130J(_unit)then
|
|
78766
|
-
local topunits=MENU_GROUP:New(_group,self
|
|
78767
|
-
local getunits=MENU_GROUP:New(_group,self
|
|
78768
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78866
|
+
local topunits=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_MANAGE_UNITS",_group),topmenu)
|
|
78867
|
+
local getunits=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_GET_UNITS",_group),topunits)
|
|
78868
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_REMOVE_UNITS_NEARBY",_group),topunits,self._C130RemoveUnitsNearby,self,_group,_unit)
|
|
78769
78869
|
local unitentries=self.C130GetUnits or{}
|
|
78770
78870
|
local unittype=_unit:GetTypeName()or"none"
|
|
78771
78871
|
local subcatmenus=self.usesubcats and{}or nil
|
|
@@ -78791,7 +78891,7 @@ subcatmenus[cargoObj.SubCategory]=sub
|
|
|
78791
78891
|
end
|
|
78792
78892
|
parent=sub
|
|
78793
78893
|
end
|
|
78794
|
-
local menutext=self:_GetCargoDisplayName(cargoObj)
|
|
78894
|
+
local menutext=self:_FormatCargoDisplayText(self:_GetCargoDisplayName(cargoObj),cargoObj,_group)
|
|
78795
78895
|
if type(cargoObj.Stock)=="number"and cargoObj.Stock>=0 and self.showstockinmenuitems then
|
|
78796
78896
|
menutext=menutext.."["..cargoObj.Stock.."]"
|
|
78797
78897
|
end
|
|
@@ -78799,24 +78899,24 @@ MENU_GROUP_COMMAND:New(_group,menutext,parent,self._C130GetUnits,self,_group,_un
|
|
|
78799
78899
|
end
|
|
78800
78900
|
end
|
|
78801
78901
|
end
|
|
78802
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78803
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78804
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78805
|
-
local smoketopmenu=MENU_GROUP:New(_group,self
|
|
78806
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78807
|
-
local smokeself=MENU_GROUP:New(_group,self
|
|
78808
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78809
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78810
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78811
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78812
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78813
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78814
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78815
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78902
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_LIST_BOARDED_CARGO",_group),topmenu,self._ListCargo,self,_group,_unit)
|
|
78903
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_INVENTORY",_group),topmenu,self._ListInventory,self,_group,_unit)
|
|
78904
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_LIST_ZONE_BEACONS",_group),topmenu,self._ListRadioBeacons,self,_group,_unit)
|
|
78905
|
+
local smoketopmenu=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_SMOKES_FLARES_BEACONS",_group),topmenu)
|
|
78906
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_SMOKE_ZONES_NEARBY",_group),smoketopmenu,self.SmokeZoneNearBy,self,_unit,false)
|
|
78907
|
+
local smokeself=MENU_GROUP:New(_group,self:_GetEntryForGroup("MENU_DROP_SMOKE_NOW",_group),smoketopmenu)
|
|
78908
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_RED_SMOKE",_group),smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Red)
|
|
78909
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_BLUE_SMOKE",_group),smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Blue)
|
|
78910
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_GREEN_SMOKE",_group),smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Green)
|
|
78911
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_ORANGE_SMOKE",_group),smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.Orange)
|
|
78912
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_WHITE_SMOKE",_group),smokeself,self.SmokePositionNow,self,_unit,false,SMOKECOLOR.White)
|
|
78913
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_FLARE_ZONES_NEARBY",_group),smoketopmenu,self.SmokeZoneNearBy,self,_unit,true)
|
|
78914
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_FIRE_FLARE_NOW",_group),smoketopmenu,self.SmokePositionNow,self,_unit,true)
|
|
78915
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_DROP_BEACON_NOW",_group),smoketopmenu,self.DropBeaconNow,self,_unit):Refresh()
|
|
78816
78916
|
if self:IsFixedWing(_unit)then
|
|
78817
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78917
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_SHOW_FLIGHT_PARAMS",_group),topmenu,self._ShowFlightParams,self,_group,_unit):Refresh()
|
|
78818
78918
|
else
|
|
78819
|
-
MENU_GROUP_COMMAND:New(_group,self
|
|
78919
|
+
MENU_GROUP_COMMAND:New(_group,self:_GetEntryForGroup("MENU_SHOW_HOVER_PARAMS",_group),topmenu,self._ShowHoverParams,self,_group,_unit):Refresh()
|
|
78820
78920
|
end
|
|
78821
78921
|
self.MenusDone[_unitName]=true
|
|
78822
78922
|
self:_RefreshLoadCratesMenu(_group,_unit)
|
|
@@ -78836,16 +78936,16 @@ function CTLD:_RefreshLoadCratesMenu(Group,Unit)
|
|
|
78836
78936
|
if not Group.MyLoadCratesMenu then return end
|
|
78837
78937
|
Group.MyLoadCratesMenu:RemoveSubMenus()
|
|
78838
78938
|
if self:IsC130J(Unit)then
|
|
78839
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
78939
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_USE_C130_LOAD",Group),Group.MyLoadCratesMenu,function()end)
|
|
78840
78940
|
return
|
|
78841
78941
|
end
|
|
78842
78942
|
local d=self.CrateDistance or 35
|
|
78843
78943
|
local nearby,n=self:_FindCratesNearby(Group,Unit,d,true,true)
|
|
78844
78944
|
if n==0 then
|
|
78845
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
78945
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_NO_CRATES_FOUND_RESCAN",Group),Group.MyLoadCratesMenu,function()self:_RefreshLoadCratesMenu(Group,Unit)end)
|
|
78846
78946
|
return
|
|
78847
78947
|
end
|
|
78848
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
78948
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_LOAD_ALL",Group),Group.MyLoadCratesMenu,self._LoadCratesNearby,self,Group,Unit)
|
|
78849
78949
|
local cargoByName={}
|
|
78850
78950
|
for _,crate in pairs(nearby)do
|
|
78851
78951
|
local name=crate:GetName()
|
|
@@ -78860,7 +78960,7 @@ local i=1
|
|
|
78860
78960
|
while i<=#list do
|
|
78861
78961
|
local left=#list-i+1
|
|
78862
78962
|
local label
|
|
78863
|
-
local loadkey=self
|
|
78963
|
+
local loadkey=self:_GetEntryForGroup("MENU_LOAD_SINGLE",Group)
|
|
78864
78964
|
if left>=needed then
|
|
78865
78965
|
label=string.format("%d. %s %s",lineIndex,loadkey,cName)
|
|
78866
78966
|
i=i+needed
|
|
@@ -78889,8 +78989,8 @@ local label=string.format("%d. %s (%dm)",idx,entry.display or entry.groupName,ma
|
|
|
78889
78989
|
MENU_GROUP_COMMAND:New(Group,label,menu,self._PackSelectedGroupAction,self,Group,Unit,entry.groupName,mode)
|
|
78890
78990
|
end
|
|
78891
78991
|
end
|
|
78892
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
78893
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
78992
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup(allKey,Group),menu,bulkFunc,self,Group,Unit)
|
|
78993
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_SCAN_PACKABLE_UNITS",Group),menu,self._RefreshPackMenus,self,Group,Unit)
|
|
78894
78994
|
end
|
|
78895
78995
|
refreshPackMenu(topCrates.PackMenu,"pack","MENU_PACK_ALL",self._PackCratesNearby)
|
|
78896
78996
|
if topCrates.PackAndLoadMenu then
|
|
@@ -78903,19 +79003,19 @@ self:T(self.lid.." _LoadSingleCrateSet cargoName="..(cargoName or"nil"))
|
|
|
78903
79003
|
local grounded=not self:IsUnitInAir(Unit)
|
|
78904
79004
|
local hover=self:CanHoverLoad(Unit)
|
|
78905
79005
|
if not grounded and not hover then
|
|
78906
|
-
local msg=self
|
|
79006
|
+
local msg=self:_GetEntryForGroup("MUST_LAND_OR_HOVER_CRATES",Group)
|
|
78907
79007
|
self:_SendMessage(msg,10,false,Group)
|
|
78908
79008
|
return self
|
|
78909
79009
|
end
|
|
78910
79010
|
if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
78911
|
-
local msg=self
|
|
79011
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_LOAD_CARGO",Group)
|
|
78912
79012
|
self:_SendMessage(msg,10,false,Group)
|
|
78913
79013
|
return self
|
|
78914
79014
|
end
|
|
78915
79015
|
local finddist=self.CrateDistance or 35
|
|
78916
79016
|
local cratesNearby,number=self:_FindCratesNearby(Group,Unit,finddist,false,false)
|
|
78917
79017
|
if number==0 then
|
|
78918
|
-
local msg=self
|
|
79018
|
+
local msg=self:_GetEntryForGroup("NO_CRATES_IN_RANGE",Group)
|
|
78919
79019
|
self:_SendMessage(msg,10,false,Group)
|
|
78920
79020
|
return self
|
|
78921
79021
|
end
|
|
@@ -78928,8 +79028,8 @@ table.insert(matchingCrates,crateObj)
|
|
|
78928
79028
|
end
|
|
78929
79029
|
end
|
|
78930
79030
|
if not needed then
|
|
78931
|
-
local msg=self
|
|
78932
|
-
msg=string.format(msg,cargoName)
|
|
79031
|
+
local msg=self:_GetEntryForGroup("NO_NAMED_CRATES_IN_RANGE",Group)
|
|
79032
|
+
msg=string.format(msg,self:_GetCargoDisplayNameForGroup(cargoName,Group))
|
|
78933
79033
|
self:_SendMessage(msg,10,false,Group)
|
|
78934
79034
|
return self
|
|
78935
79035
|
end
|
|
@@ -78942,7 +79042,7 @@ local loadedData=self.Loaded_Cargo[unitName]or{Troopsloaded=0,Cratesloaded=0,Car
|
|
|
78942
79042
|
local capabilities=self:_GetUnitCapabilities(Unit)
|
|
78943
79043
|
local capacity=capabilities.cratelimit or 0
|
|
78944
79044
|
if loadedData.Cratesloaded>=capacity then
|
|
78945
|
-
local msg=self
|
|
79045
|
+
local msg=self:_GetEntryForGroup("NO_MORE_CAPACITY",Group)
|
|
78946
79046
|
self:_SendMessage(msg,10,false,Group)
|
|
78947
79047
|
self.suppressmessages=prevSuppress
|
|
78948
79048
|
return self
|
|
@@ -78950,7 +79050,7 @@ end
|
|
|
78950
79050
|
local spaceLeft=capacity-loadedData.Cratesloaded
|
|
78951
79051
|
local toLoad=math.min(found,needed,spaceLeft)
|
|
78952
79052
|
if toLoad<1 then
|
|
78953
|
-
local msg=self
|
|
79053
|
+
local msg=self:_GetEntryForGroup("CANNOT_LOAD_NONE_OR_FULL",Group)
|
|
78954
79054
|
self:_SendMessage(msg,10,false,Group)
|
|
78955
79055
|
self.suppressmessages=prevSuppress
|
|
78956
79056
|
return self
|
|
@@ -78987,29 +79087,29 @@ self.Spawned_Cargo=newSpawned
|
|
|
78987
79087
|
local loadedHere=toLoad
|
|
78988
79088
|
if details or(not batch)then
|
|
78989
79089
|
if loadedHere<needed and loadedData.Cratesloaded>=capacity then
|
|
78990
|
-
local msg=self
|
|
78991
|
-
msg=string.format(msg,loadedHere,needed,cargoName)
|
|
79090
|
+
local msg=self:_GetEntryForGroup("LOADED_PARTIAL_LIMIT",Group)
|
|
79091
|
+
msg=string.format(msg,loadedHere,needed,self:_GetCargoDisplayNameForGroup(cargoName,Group))
|
|
78992
79092
|
self:_SendMessage(msg,10,false,Group)
|
|
78993
79093
|
else
|
|
78994
79094
|
local fullSets=math.floor(loadedHere/needed)
|
|
78995
79095
|
local leftover=loadedHere%needed
|
|
78996
79096
|
if needed>1 then
|
|
78997
79097
|
if fullSets>0 and leftover==0 then
|
|
78998
|
-
local msg=self
|
|
78999
|
-
msg=string.format(msg,fullSets,cargoName)
|
|
79098
|
+
local msg=self:_GetEntryForGroup("LOADED_FULL",Group)
|
|
79099
|
+
msg=string.format(msg,fullSets,self:_GetCargoDisplayNameForGroup(cargoName,Group))
|
|
79000
79100
|
self:_SendMessage(msg,10,false,Group)
|
|
79001
79101
|
elseif fullSets>0 and leftover>0 then
|
|
79002
|
-
local msg=self
|
|
79003
|
-
msg=string.format(msg,fullSets,cargoName,leftover)
|
|
79102
|
+
local msg=self:_GetEntryForGroup("LOADED_SETS_LEFTOVER",Group)
|
|
79103
|
+
msg=string.format(msg,fullSets,self:_GetCargoDisplayNameForGroup(cargoName,Group),leftover)
|
|
79004
79104
|
self:_SendMessage(msg,10,false,Group)
|
|
79005
79105
|
else
|
|
79006
|
-
local msg=self
|
|
79007
|
-
msg=string.format(msg,loadedHere,needed,cargoName)
|
|
79106
|
+
local msg=self:_GetEntryForGroup("LOADED_PARTIAL",Group)
|
|
79107
|
+
msg=string.format(msg,loadedHere,needed,self:_GetCargoDisplayNameForGroup(cargoName,Group))
|
|
79008
79108
|
self:_SendMessage(msg,15,false,Group)
|
|
79009
79109
|
end
|
|
79010
79110
|
else
|
|
79011
|
-
local msg=self
|
|
79012
|
-
msg=string.format(msg,loadedHere,cargoName)
|
|
79111
|
+
local msg=self:_GetEntryForGroup("LOADED_SETS",Group)
|
|
79112
|
+
msg=string.format(msg,loadedHere,self:_GetCargoDisplayNameForGroup(cargoName,Group))
|
|
79013
79113
|
self:_SendMessage(msg,10,false,Group)
|
|
79014
79114
|
end
|
|
79015
79115
|
end
|
|
@@ -79026,9 +79126,9 @@ batch.remaining=(batch.remaining or 1)-1
|
|
|
79026
79126
|
if batch.remaining<=0 then
|
|
79027
79127
|
self.suppressmessages=prevSuppress
|
|
79028
79128
|
if not details then
|
|
79029
|
-
local txt=string.format(self
|
|
79129
|
+
local txt=string.format(self:_GetEntryForGroup("LOADED_BATCH",batch.group),batch.loaded,self:_GetCargoDisplayNameForGroup(cargoName,batch.group))
|
|
79030
79130
|
if batch.partials and batch.partials>0 then
|
|
79031
|
-
txt=txt.." "..self
|
|
79131
|
+
txt=txt.." "..self:_GetEntryForGroup("LOADED_BATCH_PARTIAL",batch.group)
|
|
79032
79132
|
end
|
|
79033
79133
|
self:_SendMessage(txt,10,false,batch.group)
|
|
79034
79134
|
end
|
|
@@ -79044,7 +79144,7 @@ self:T(self.lid.." _UnloadSingleCrateSet")
|
|
|
79044
79144
|
if not self.dropcratesanywhere then
|
|
79045
79145
|
local inzone,zoneName,zone,distance=self:IsUnitInZone(Unit,CTLD.CargoZoneType.DROP)
|
|
79046
79146
|
if not inzone then
|
|
79047
|
-
local msg=self
|
|
79147
|
+
local msg=self:_GetEntryForGroup("NOT_CLOSE_ENOUGH_DROP",Group)
|
|
79048
79148
|
self:_SendMessage(msg,10,false,Group)
|
|
79049
79149
|
if not self.debug then
|
|
79050
79150
|
return self
|
|
@@ -79052,26 +79152,26 @@ end
|
|
|
79052
79152
|
end
|
|
79053
79153
|
end
|
|
79054
79154
|
if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
79055
|
-
local msg=self
|
|
79155
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_DROP_CARGO",Group)
|
|
79056
79156
|
self:_SendMessage(msg,10,false,Group)
|
|
79057
79157
|
if not self.debug then return self end
|
|
79058
79158
|
end
|
|
79059
79159
|
local unitName=Unit:GetName()
|
|
79060
79160
|
if not self.CrateGroupList or not self.CrateGroupList[unitName]then
|
|
79061
|
-
local msg=self
|
|
79161
|
+
local msg=self:_GetEntryForGroup("NO_CRATE_GROUPS",Group)
|
|
79062
79162
|
self:_SendMessage(msg,10,false,Group)
|
|
79063
79163
|
if not self.debug then return self end
|
|
79064
79164
|
return self
|
|
79065
79165
|
end
|
|
79066
79166
|
local chunk=self.CrateGroupList[unitName][setIndex]
|
|
79067
79167
|
if not chunk then
|
|
79068
|
-
local msg=self
|
|
79168
|
+
local msg=self:_GetEntryForGroup("NO_CRATE_SET",Group)
|
|
79069
79169
|
self:_SendMessage(msg,10,false,Group)
|
|
79070
79170
|
if not self.debug then return self end
|
|
79071
79171
|
return self
|
|
79072
79172
|
end
|
|
79073
79173
|
if#chunk==0 then
|
|
79074
|
-
local msg=self
|
|
79174
|
+
local msg=self:_GetEntryForGroup("NO_CRATE_IN_SET",Group)
|
|
79075
79175
|
self:_SendMessage(msg,10,false,Group)
|
|
79076
79176
|
if not self.debug then return self end
|
|
79077
79177
|
return self
|
|
@@ -79085,10 +79185,10 @@ hoverunload=self:IsCorrectFlightParameters(Unit)
|
|
|
79085
79185
|
end
|
|
79086
79186
|
if not grounded and not hoverunload then
|
|
79087
79187
|
if isHerc then
|
|
79088
|
-
local msg=self
|
|
79188
|
+
local msg=self:_GetEntryForGroup("NOTHING_LOADED_AIRDROP",Group)
|
|
79089
79189
|
self:_SendMessage(msg,10,false,Group)
|
|
79090
79190
|
else
|
|
79091
|
-
local msg=self
|
|
79191
|
+
local msg=self:_GetEntryForGroup("NOTHING_LOADED_HOVER",Group)
|
|
79092
79192
|
self:_SendMessage(msg,10,false,Group)
|
|
79093
79193
|
end
|
|
79094
79194
|
if not self.debug then return self end
|
|
@@ -79096,7 +79196,7 @@ return self
|
|
|
79096
79196
|
end
|
|
79097
79197
|
local crateObj=chunk[1]
|
|
79098
79198
|
if not crateObj then
|
|
79099
|
-
local msg=self
|
|
79199
|
+
local msg=self:_GetEntryForGroup("NO_CRATE_IN_SET",Group)
|
|
79100
79200
|
self:_SendMessage(msg,10,false,Group)
|
|
79101
79201
|
if not self.debug then return self end
|
|
79102
79202
|
return self
|
|
@@ -79111,17 +79211,17 @@ local cname=crateObj:GetName()or"Unknown"
|
|
|
79111
79211
|
local count=#chunk
|
|
79112
79212
|
if needed>1 then
|
|
79113
79213
|
if count==needed then
|
|
79114
|
-
local msg=self
|
|
79115
|
-
msg=string.format(msg,1,cname)
|
|
79214
|
+
local msg=self:_GetEntryForGroup("DROPPED_FULL",Group)
|
|
79215
|
+
msg=string.format(msg,1,self:_GetCargoDisplayNameForGroup(cname,Group))
|
|
79116
79216
|
self:_SendMessage(msg,10,false,Group)
|
|
79117
79217
|
else
|
|
79118
|
-
local msg=self
|
|
79119
|
-
msg=string.format(msg,count,needed,cname)
|
|
79218
|
+
local msg=self:_GetEntryForGroup("DROPPED_PARTIAL",Group)
|
|
79219
|
+
msg=string.format(msg,count,needed,self:_GetCargoDisplayNameForGroup(cname,Group))
|
|
79120
79220
|
self:_SendMessage(msg,15,false,Group)
|
|
79121
79221
|
end
|
|
79122
79222
|
else
|
|
79123
|
-
local msg=self
|
|
79124
|
-
msg=string.format(msg,count,cname)
|
|
79223
|
+
local msg=self:_GetEntryForGroup("DROPPED_SETS",Group)
|
|
79224
|
+
msg=string.format(msg,count,self:_GetCargoDisplayNameForGroup(cname,Group))
|
|
79125
79225
|
self:_SendMessage(msg,10,false,Group)
|
|
79126
79226
|
end
|
|
79127
79227
|
local loadedData=self.Loaded_Cargo[unitName]
|
|
@@ -79155,12 +79255,12 @@ if not topCrates then return end
|
|
|
79155
79255
|
if topCrates.DropCratesMenu then
|
|
79156
79256
|
topCrates.DropCratesMenu:RemoveSubMenus()
|
|
79157
79257
|
else
|
|
79158
|
-
topCrates.DropCratesMenu=MENU_GROUP:New(Group,self
|
|
79258
|
+
topCrates.DropCratesMenu=MENU_GROUP:New(Group,self:_GetEntryForGroup("MENU_DROP_CRATES",Group),topCrates)
|
|
79159
79259
|
end
|
|
79160
79260
|
local dropCratesMenu=topCrates.DropCratesMenu
|
|
79161
79261
|
local loadedData=self.Loaded_Cargo[Unit:GetName()]
|
|
79162
79262
|
if not loadedData or not loadedData.Cargo then
|
|
79163
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
79263
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_NO_CRATES_TO_DROP",Group),dropCratesMenu,function()end)
|
|
79164
79264
|
return
|
|
79165
79265
|
end
|
|
79166
79266
|
local cargoByName={}
|
|
@@ -79177,11 +79277,11 @@ end
|
|
|
79177
79277
|
end
|
|
79178
79278
|
end
|
|
79179
79279
|
if dropableCrates==0 then
|
|
79180
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
79280
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_NO_CRATES_TO_DROP",Group),dropCratesMenu,function()end)
|
|
79181
79281
|
return
|
|
79182
79282
|
end
|
|
79183
79283
|
if not self.onestepmenu then
|
|
79184
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
79284
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_DROP_ALL_CRATES",Group),dropCratesMenu,self._UnloadCrates,self,Group,Unit)
|
|
79185
79285
|
self.CrateGroupList=self.CrateGroupList or{}
|
|
79186
79286
|
self.CrateGroupList[Unit:GetName()]={}
|
|
79187
79287
|
local lineIndex=1
|
|
@@ -79200,7 +79300,7 @@ table.insert(self.CrateGroupList[Unit:GetName()],chunk)
|
|
|
79200
79300
|
i=i+needed
|
|
79201
79301
|
end
|
|
79202
79302
|
if sets==1 then
|
|
79203
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
79303
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_DROP",Group),parentMenu,function(selfArg,GroupArg,UnitArg,cNameArg,neededArg,qty)
|
|
79204
79304
|
local uName=UnitArg:GetName()
|
|
79205
79305
|
for k=1,qty do
|
|
79206
79306
|
local lst=selfArg.CrateGroupList and selfArg.CrateGroupList[uName]
|
|
@@ -79217,8 +79317,8 @@ end
|
|
|
79217
79317
|
end,self,Group,Unit,cName,needed,1)
|
|
79218
79318
|
else
|
|
79219
79319
|
for q=1,sets do
|
|
79220
|
-
local qm=MENU_GROUP:New(Group,string.format(self
|
|
79221
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
79320
|
+
local qm=MENU_GROUP:New(Group,string.format(self:_GetEntryForGroup("MENU_DROP_N_SETS",Group),q,self:_GetMenuPluralSuffix(q,"set",Group)),parentMenu)
|
|
79321
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_DROP",Group),qm,function(selfArg,GroupArg,UnitArg,cNameArg,neededArg,qty)
|
|
79222
79322
|
local uName=UnitArg:GetName()
|
|
79223
79323
|
for k=1,qty do
|
|
79224
79324
|
local lst=selfArg.CrateGroupList and selfArg.CrateGroupList[uName]
|
|
@@ -79249,10 +79349,10 @@ lineIndex=lineIndex+1
|
|
|
79249
79349
|
end
|
|
79250
79350
|
end
|
|
79251
79351
|
else
|
|
79252
|
-
local mAll=MENU_GROUP:New(Group,self
|
|
79253
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
79352
|
+
local mAll=MENU_GROUP:New(Group,self:_GetEntryForGroup("MENU_DROP_ALL_CRATES",Group),dropCratesMenu)
|
|
79353
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_DROP",Group),mAll,self._UnloadCrates,self,Group,Unit)
|
|
79254
79354
|
if not(self:IsUnitInAir(Unit)and self:IsFixedWing(Unit))then
|
|
79255
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
79355
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_DROP_AND_BUILD",Group),mAll,self._DropAndBuild,self,Group,Unit)
|
|
79256
79356
|
end
|
|
79257
79357
|
self.CrateGroupList=self.CrateGroupList or{}
|
|
79258
79358
|
self.CrateGroupList[Unit:GetName()]={}
|
|
@@ -79272,7 +79372,7 @@ table.insert(self.CrateGroupList[Unit:GetName()],chunk)
|
|
|
79272
79372
|
i=i+needed
|
|
79273
79373
|
end
|
|
79274
79374
|
if sets==1 then
|
|
79275
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
79375
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_DROP",Group),parentMenu,function(selfArg,GroupArg,UnitArg,cNameArg,neededArg,qty)
|
|
79276
79376
|
local uName=UnitArg:GetName()
|
|
79277
79377
|
for k=1,qty do
|
|
79278
79378
|
local lst=selfArg.CrateGroupList and selfArg.CrateGroupList[uName]
|
|
@@ -79288,7 +79388,7 @@ selfArg:_UnloadSingleCrateSet(GroupArg,UnitArg,idx)
|
|
|
79288
79388
|
end
|
|
79289
79389
|
end,self,Group,Unit,cName,needed,1)
|
|
79290
79390
|
if not(self:IsUnitInAir(Unit)and self:IsFixedWing(Unit))then
|
|
79291
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
79391
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_DROP_AND_BUILD",Group),parentMenu,function(selfArg,GroupArg,UnitArg,cNameArg,neededArg,qty)
|
|
79292
79392
|
local uName=UnitArg:GetName()
|
|
79293
79393
|
for k=1,qty do
|
|
79294
79394
|
local lst=selfArg.CrateGroupList and selfArg.CrateGroupList[uName]
|
|
@@ -79307,8 +79407,8 @@ end,self,Group,Unit,cName,needed,1)
|
|
|
79307
79407
|
end
|
|
79308
79408
|
else
|
|
79309
79409
|
for q=1,sets do
|
|
79310
|
-
local qm=MENU_GROUP:New(Group,string.format(self
|
|
79311
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
79410
|
+
local qm=MENU_GROUP:New(Group,string.format(self:_GetEntryForGroup("MENU_DROP_N_SETS",Group),q,self:_GetMenuPluralSuffix(q,"set",Group)),parentMenu)
|
|
79411
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_DROP",Group),qm,function(selfArg,GroupArg,UnitArg,cNameArg,neededArg,qty)
|
|
79312
79412
|
local uName=UnitArg:GetName()
|
|
79313
79413
|
for k=1,qty do
|
|
79314
79414
|
local lst=selfArg.CrateGroupList and selfArg.CrateGroupList[uName]
|
|
@@ -79324,7 +79424,7 @@ selfArg:_UnloadSingleCrateSet(GroupArg,UnitArg,idx)
|
|
|
79324
79424
|
end
|
|
79325
79425
|
end,self,Group,Unit,cName,needed,q)
|
|
79326
79426
|
if not(self:IsUnitInAir(Unit)and self:IsFixedWing(Unit))then
|
|
79327
|
-
MENU_GROUP_COMMAND:New(Group,self
|
|
79427
|
+
MENU_GROUP_COMMAND:New(Group,self:_GetEntryForGroup("MENU_DROP_AND_BUILD",Group),qm,function(selfArg,GroupArg,UnitArg,cNameArg,neededArg,qty)
|
|
79328
79428
|
local uName=UnitArg:GetName()
|
|
79329
79429
|
for k=1,qty do
|
|
79330
79430
|
local lst=selfArg.CrateGroupList and selfArg.CrateGroupList[uName]
|
|
@@ -79373,7 +79473,7 @@ if inzone then
|
|
|
79373
79473
|
droppingatbase=self.returntroopstobase
|
|
79374
79474
|
end
|
|
79375
79475
|
if self.pilotmustopendoors and not UTILS.IsLoadingDoorOpen(Unit:GetName())then
|
|
79376
|
-
local msg=self
|
|
79476
|
+
local msg=self:_GetEntryForGroup("OPEN_DOORS_UNLOAD_TROOPS",Group)
|
|
79377
79477
|
self:_SendMessage(msg,10,false,Group)
|
|
79378
79478
|
if not self.debug then return self end
|
|
79379
79479
|
end
|
|
@@ -79392,7 +79492,7 @@ return self
|
|
|
79392
79492
|
end
|
|
79393
79493
|
if not droppingatbase or self.debug then
|
|
79394
79494
|
if not self.TroopsIDToChunk or not self.TroopsIDToChunk[chunkID]then
|
|
79395
|
-
local msg=self
|
|
79495
|
+
local msg=self:_GetEntryForGroup("NO_TROOP_CHUNK",Group)
|
|
79396
79496
|
msg=string.format(msg,chunkID)
|
|
79397
79497
|
self:_SendMessage(msg,10,false,Group)
|
|
79398
79498
|
if not self.debug then return self end
|
|
@@ -79400,7 +79500,7 @@ return self
|
|
|
79400
79500
|
end
|
|
79401
79501
|
local chunk=self.TroopsIDToChunk[chunkID]
|
|
79402
79502
|
if not chunk or#chunk==0 then
|
|
79403
|
-
local msg=self
|
|
79503
|
+
local msg=self:_GetEntryForGroup("TROOP_CHUNK_EMPTY",Group)
|
|
79404
79504
|
msg=string.format(msg,chunkID)
|
|
79405
79505
|
self:_SendMessage(msg,10,false,Group)
|
|
79406
79506
|
if not self.debug then return self end
|
|
@@ -79475,19 +79575,21 @@ break
|
|
|
79475
79575
|
end
|
|
79476
79576
|
end
|
|
79477
79577
|
local parts={}
|
|
79578
|
+
local troopLabel=self:_GetEntryForGroup("TROOPS_LABEL",Group)
|
|
79579
|
+
local engineerLabel=self:_GetEntryForGroup("ENGINEERS_LABEL",Group)
|
|
79478
79580
|
for nName,nCount in pairs(deployedTroopsByName)do
|
|
79479
|
-
parts[#parts+1]=tostring(nCount).."x
|
|
79581
|
+
parts[#parts+1]=tostring(nCount).."x "..troopLabel.." "..nName
|
|
79480
79582
|
end
|
|
79481
79583
|
for nName,nCount in pairs(deployedEngineersByName)do
|
|
79482
|
-
parts[#parts+1]=tostring(nCount).."x
|
|
79584
|
+
parts[#parts+1]=tostring(nCount).."x "..engineerLabel.." "..nName
|
|
79483
79585
|
end
|
|
79484
79586
|
if#parts>0 then
|
|
79485
|
-
local msg=self
|
|
79587
|
+
local msg=self:_GetEntryForGroup("DROPPED_INTO_ACTION",Group)
|
|
79486
79588
|
msg=string.format(msg,table.concat(parts,", "))
|
|
79487
79589
|
self:_SendMessage(msg,10,false,Group)
|
|
79488
79590
|
end
|
|
79489
79591
|
else
|
|
79490
|
-
local msg=self
|
|
79592
|
+
local msg=self:_GetEntryForGroup("TROOPS_RETURNED",Group)
|
|
79491
79593
|
self:_SendMessage(msg,10,false,Group)
|
|
79492
79594
|
self:__TroopsRTB(1,Group,Unit,zonename,zone)
|
|
79493
79595
|
if self.TroopsIDToChunk and self.TroopsIDToChunk[chunkID]then
|
|
@@ -79537,10 +79639,10 @@ self:_RefreshTroopQuantityMenus(Group,Unit,nil)
|
|
|
79537
79639
|
else
|
|
79538
79640
|
local isHerc=self:IsFixedWing(Unit)
|
|
79539
79641
|
if isHerc then
|
|
79540
|
-
local msg=self
|
|
79642
|
+
local msg=self:_GetEntryForGroup("NOTHING_LOADED_AIRDROP",Group)
|
|
79541
79643
|
self:_SendMessage(msg,10,false,Group)
|
|
79542
79644
|
else
|
|
79543
|
-
local msg=self
|
|
79645
|
+
local msg=self:_GetEntryForGroup("NOTHING_LOADED_HOVER",Group)
|
|
79544
79646
|
self:_SendMessage(msg,10,false,Group)
|
|
79545
79647
|
end
|
|
79546
79648
|
end
|
|
@@ -79556,11 +79658,11 @@ local dropTroopsMenu=topTroops.DropTroopsMenu
|
|
|
79556
79658
|
if dropTroopsMenu then
|
|
79557
79659
|
dropTroopsMenu:RemoveSubMenus()
|
|
79558
79660
|
else
|
|
79559
|
-
dropTroopsMenu=MENU_GROUP:New(theGroup,self
|
|
79661
|
+
dropTroopsMenu=MENU_GROUP:New(theGroup,self:_GetEntryForGroup("MENU_DROP_TROOPS",theGroup),topTroops)
|
|
79560
79662
|
topTroops.DropTroopsMenu=dropTroopsMenu
|
|
79561
79663
|
end
|
|
79562
79664
|
if self.maxUnloadTroopsAllowed==-1 then
|
|
79563
|
-
MENU_GROUP_COMMAND:New(theGroup,self
|
|
79665
|
+
MENU_GROUP_COMMAND:New(theGroup,self:_GetEntryForGroup("MENU_DROP_ALL_TROOPS",theGroup),dropTroopsMenu,self._UnloadTroops,self,theGroup,theUnit)
|
|
79564
79666
|
end
|
|
79565
79667
|
local loadedData=self.Loaded_Cargo[theUnit:GetName()]
|
|
79566
79668
|
if not loadedData or not loadedData.Cargo then return end
|
|
@@ -79582,14 +79684,14 @@ local count=#objList
|
|
|
79582
79684
|
if count>0 then
|
|
79583
79685
|
local chunkID=objList[1]:GetID()
|
|
79584
79686
|
self.TroopsIDToChunk[chunkID]=objList
|
|
79585
|
-
local label=string.format(self
|
|
79687
|
+
local label=string.format(self:_GetEntryForGroup("MENU_DROP_N_TROOPS",theGroup),count,tName)
|
|
79586
79688
|
if count==1 then
|
|
79587
79689
|
MENU_GROUP_COMMAND:New(theGroup,label,dropTroopsMenu,self._UnloadSingleTroopByID,self,theGroup,theUnit,chunkID,1)
|
|
79588
79690
|
else
|
|
79589
79691
|
local parentMenu=MENU_GROUP:New(theGroup,label,dropTroopsMenu)
|
|
79590
79692
|
for q=1,count do
|
|
79591
79693
|
if q>self.maxUnloadTroopsAllowed and self.maxUnloadTroopsAllowed>-1 then break end
|
|
79592
|
-
MENU_GROUP_COMMAND:New(theGroup,string.format(self
|
|
79694
|
+
MENU_GROUP_COMMAND:New(theGroup,string.format(self:_GetEntryForGroup("MENU_DROP_N_TROOPS",theGroup),q,tName),parentMenu,self._UnloadSingleTroopByID,self,theGroup,theUnit,chunkID,q)
|
|
79593
79695
|
end
|
|
79594
79696
|
end
|
|
79595
79697
|
end
|
|
@@ -80060,7 +80162,7 @@ local Name=ctldzone.name
|
|
|
80060
80162
|
local FM=FMbeacon.frequency
|
|
80061
80163
|
local VHF=VHFbeacon.frequency*1000
|
|
80062
80164
|
local UHF=UHFbeacon.frequency
|
|
80063
|
-
local text=string.format(self
|
|
80165
|
+
local text=string.format(self:_GetEntryForGroup("DROPPED_BEACON",Unit:GetGroup()),Name,FM,VHF,UHF)
|
|
80064
80166
|
self:_SendMessage(text,15,false,Unit:GetGroup())
|
|
80065
80167
|
return self
|
|
80066
80168
|
end
|
|
@@ -80326,7 +80428,7 @@ zonecoord:Flare(color or FLARECOLOR.White)
|
|
|
80326
80428
|
end
|
|
80327
80429
|
local txt="smoking"
|
|
80328
80430
|
if Flare then txt="flaring"end
|
|
80329
|
-
local msg=self
|
|
80431
|
+
local msg=self:_GetEntryForGroup("ROGER_ZONE",Group)
|
|
80330
80432
|
msg=string.format(msg,txt,zonename)
|
|
80331
80433
|
self:_SendMessage(msg,10,false,Group)
|
|
80332
80434
|
smoked=true
|
|
@@ -80336,7 +80438,7 @@ end
|
|
|
80336
80438
|
end
|
|
80337
80439
|
if not smoked then
|
|
80338
80440
|
local distance=UTILS.MetersToNM(self.smokedistance)
|
|
80339
|
-
local msg=self
|
|
80441
|
+
local msg=self:_GetEntryForGroup("NOT_CLOSE_ENOUGH_ZONE_NM",Group)
|
|
80340
80442
|
msg=string.format(msg,distance)
|
|
80341
80443
|
self:_SendMessage(msg,10,false,Group)
|
|
80342
80444
|
end
|
|
@@ -80432,11 +80534,11 @@ local htxt="true"
|
|
|
80432
80534
|
if not inhover then htxt="false"end
|
|
80433
80535
|
local text=""
|
|
80434
80536
|
if _SETTINGS:IsMetric()then
|
|
80435
|
-
text=string.format(self
|
|
80537
|
+
text=string.format(self:_GetEntryForGroup("HOVER_PARAMS_METRIC",Group),self.minimumHoverHeight,self.maximumHoverHeight,htxt)
|
|
80436
80538
|
else
|
|
80437
80539
|
local minheight=UTILS.MetersToFeet(self.minimumHoverHeight)
|
|
80438
80540
|
local maxheight=UTILS.MetersToFeet(self.maximumHoverHeight)
|
|
80439
|
-
text=string.format(self
|
|
80541
|
+
text=string.format(self:_GetEntryForGroup("HOVER_PARAMS_IMPERIAL",Group),minheight,maxheight,htxt)
|
|
80440
80542
|
end
|
|
80441
80543
|
self:_SendMessage(text,10,false,Group)
|
|
80442
80544
|
return self
|
|
@@ -80449,11 +80551,11 @@ local text=""
|
|
|
80449
80551
|
if _SETTINGS:IsImperial()then
|
|
80450
80552
|
local minheight=UTILS.MetersToFeet(self.FixedMinAngels)
|
|
80451
80553
|
local maxheight=UTILS.MetersToFeet(self.FixedMaxAngels)
|
|
80452
|
-
text=string.format(self
|
|
80554
|
+
text=string.format(self:_GetEntryForGroup("FLIGHT_PARAMS_IMPERIAL",Group),minheight,maxheight,htxt)
|
|
80453
80555
|
else
|
|
80454
80556
|
local minheight=self.FixedMinAngels
|
|
80455
80557
|
local maxheight=self.FixedMaxAngels
|
|
80456
|
-
text=string.format(self
|
|
80558
|
+
text=string.format(self:_GetEntryForGroup("FLIGHT_PARAMS_METRIC",Group),minheight,maxheight,htxt)
|
|
80457
80559
|
end
|
|
80458
80560
|
self:_SendMessage(text,10,false,Group)
|
|
80459
80561
|
return self
|
|
@@ -82187,6 +82289,8 @@ CRATES_DROPPED="%d crates for %s have been dropped!",
|
|
|
82187
82289
|
BOARDED="%s boarded!",
|
|
82188
82290
|
BOARDING="%s boarding!",
|
|
82189
82291
|
TROOPS_RETURNED="Troops have returned to base!",
|
|
82292
|
+
TROOPS_LABEL="Troops",
|
|
82293
|
+
ENGINEERS_LABEL="Engineers",
|
|
82190
82294
|
DEPLOYED_NEAR_YOU="%s have been deployed near you!",
|
|
82191
82295
|
UNITS_REMOVED="%s have been removed",
|
|
82192
82296
|
BUILD_STARTED="Build started, ready in %d seconds!",
|
|
@@ -82319,6 +82423,7 @@ MENU_REMOVE_CRATES="Remove crates",
|
|
|
82319
82423
|
MENU_REMOVE_CRATES_NEARBY="Remove crates nearby",
|
|
82320
82424
|
MENU_LIST_CRATES_NEARBY="List crates nearby",
|
|
82321
82425
|
MENU_CRATES_NEEDED="%d crate%s %s (%dkg)",
|
|
82426
|
+
MENU_CRATE_SINGLE="%s (%dkg)",
|
|
82322
82427
|
MENU_GET_UNITS="Get Units",
|
|
82323
82428
|
MENU_REMOVE_UNITS_NEARBY="Remove units nearby",
|
|
82324
82429
|
MENU_LIST_BOARDED_CARGO="List boarded cargo",
|
|
@@ -82364,6 +82469,8 @@ CRATES_DROPPED="%d Kisten für %s abgeworfen!",
|
|
|
82364
82469
|
BOARDED="%s eingestiegen!",
|
|
82365
82470
|
BOARDING="%s steigt ein!",
|
|
82366
82471
|
TROOPS_RETURNED="Truppen zur Basis zurückgekehrt!",
|
|
82472
|
+
TROOPS_LABEL="Truppen",
|
|
82473
|
+
ENGINEERS_LABEL="Pioniere",
|
|
82367
82474
|
DEPLOYED_NEAR_YOU="%s in Ihrer Nähe eingesetzt!",
|
|
82368
82475
|
UNITS_REMOVED="%s entfernt",
|
|
82369
82476
|
BUILD_STARTED="Bau gestartet, fertig in %d Sekunden!",
|
|
@@ -82496,6 +82603,7 @@ MENU_REMOVE_CRATES="Kisten entfernen",
|
|
|
82496
82603
|
MENU_REMOVE_CRATES_NEARBY="Nahe Kisten entfernen",
|
|
82497
82604
|
MENU_LIST_CRATES_NEARBY="Nahe Kisten auflisten",
|
|
82498
82605
|
MENU_CRATES_NEEDED="%d Kiste%s %s (%dkg)",
|
|
82606
|
+
MENU_CRATE_SINGLE="%s (%dkg)",
|
|
82499
82607
|
MENU_GET_UNITS="Einheiten holen",
|
|
82500
82608
|
MENU_REMOVE_UNITS_NEARBY="Nahe Einheiten entfernen",
|
|
82501
82609
|
MENU_LIST_BOARDED_CARGO="Geladene Fracht anzeigen",
|
|
@@ -82541,6 +82649,8 @@ CRATES_DROPPED="%d caisses pour %s larguées !",
|
|
|
82541
82649
|
BOARDED="%s embarqué(s) !",
|
|
82542
82650
|
BOARDING="%s en cours d'embarquement !",
|
|
82543
82651
|
TROOPS_RETURNED="Les troupes sont retournées à la base !",
|
|
82652
|
+
TROOPS_LABEL="troupes",
|
|
82653
|
+
ENGINEERS_LABEL="sapeurs",
|
|
82544
82654
|
DEPLOYED_NEAR_YOU="%s déployé(s) près de vous !",
|
|
82545
82655
|
UNITS_REMOVED="%s supprimé(s)",
|
|
82546
82656
|
BUILD_STARTED="Construction démarrée, prête dans %d secondes !",
|
|
@@ -82673,6 +82783,7 @@ MENU_REMOVE_CRATES="Retirer caisses",
|
|
|
82673
82783
|
MENU_REMOVE_CRATES_NEARBY="Retirer caisses proches",
|
|
82674
82784
|
MENU_LIST_CRATES_NEARBY="Lister caisses proches",
|
|
82675
82785
|
MENU_CRATES_NEEDED="%d caisse%s %s (%dkg)",
|
|
82786
|
+
MENU_CRATE_SINGLE="%s (%dkg)",
|
|
82676
82787
|
MENU_GET_UNITS="Récupérer unités",
|
|
82677
82788
|
MENU_REMOVE_UNITS_NEARBY="Retirer les unités proches",
|
|
82678
82789
|
MENU_LIST_BOARDED_CARGO="Lister le fret embarqué",
|
|
@@ -82718,6 +82829,8 @@ CRATES_DROPPED="%d contenedores para %s han sido entregados.",
|
|
|
82718
82829
|
BOARDED="¡%s a bordo!",
|
|
82719
82830
|
BOARDING="¡%s entrando!",
|
|
82720
82831
|
TROOPS_RETURNED="¡Las tropas han vuelto a la base!",
|
|
82832
|
+
TROOPS_LABEL="tropas",
|
|
82833
|
+
ENGINEERS_LABEL="ingenieros",
|
|
82721
82834
|
DEPLOYED_NEAR_YOU="%s han sido servidas cerca de tí.",
|
|
82722
82835
|
UNITS_REMOVED="%s ha sido eliminado",
|
|
82723
82836
|
BUILD_STARTED="Construcción comenzada, listo en %d segundos.",
|
|
@@ -82850,6 +82963,7 @@ MENU_REMOVE_CRATES="Eliminar cargas",
|
|
|
82850
82963
|
MENU_REMOVE_CRATES_NEARBY="Eliminar cargas cercanas",
|
|
82851
82964
|
MENU_LIST_CRATES_NEARBY="Listar cargas cercanas",
|
|
82852
82965
|
MENU_CRATES_NEEDED="%d contenedor%s %s (%dkg)",
|
|
82966
|
+
MENU_CRATE_SINGLE="%s (%dkg)",
|
|
82853
82967
|
MENU_GET_UNITS="Obtener unidades",
|
|
82854
82968
|
MENU_REMOVE_UNITS_NEARBY="Eliminar unidades cercanas",
|
|
82855
82969
|
MENU_LIST_BOARDED_CARGO="Lista de cargas a bordo",
|
|
@@ -82873,6 +82987,906 @@ STOCK_UNLIMITED="ilimitado",
|
|
|
82873
82987
|
BUILD_YES="SI",
|
|
82874
82988
|
BUILD_NO="NO",
|
|
82875
82989
|
},
|
|
82990
|
+
["PT-BR"]={
|
|
82991
|
+
CRATE_LOADED_GROUNDCREW="Caixa %s carregada pela equipe de solo!",
|
|
82992
|
+
CRATE_UNLOADED_GROUNDCREW="Caixa %s descarregada pela equipe de solo!",
|
|
82993
|
+
CRATE_LOADED_ID="Caixa ID %d para %s carregada!",
|
|
82994
|
+
LOADED_FULL="%d %s carregado.",
|
|
82995
|
+
LOADED_SETS_LEFTOVER="%d %s carregado(s), com %d caixa(s) sobrando.",
|
|
82996
|
+
LOADED_SETS="%d %s carregado(s).",
|
|
82997
|
+
LOADED_PARTIAL="Carregado apenas %d/%d caixa(s) de %s.",
|
|
82998
|
+
LOADED_PARTIAL_LIMIT="Carregado apenas %d/%d caixa(s) de %s. O limite de carga foi atingido!",
|
|
82999
|
+
LOADED_BATCH="%d %s carregado.",
|
|
83000
|
+
LOADED_BATCH_PARTIAL="Alguns conjuntos não puderam ser carregados completamente.",
|
|
83001
|
+
DROPPED_FULL="%d %s solto.",
|
|
83002
|
+
DROPPED_SETS_LEFTOVER="%d %s solto(s), com %d caixa(s) sobrando.",
|
|
83003
|
+
DROPPED_SETS="%d %s solto(s).",
|
|
83004
|
+
DROPPED_PARTIAL="%d/%d caixa(s) de %s solta(s).",
|
|
83005
|
+
DROPPED_INTO_ACTION="Unidades desembarcadas para a ação: %s!",
|
|
83006
|
+
DROPPED_BEACON="Baliza %s posicionada | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
|
83007
|
+
CRATES_POSITIONED="%d caixas para %s foram posicionadas perto de você!",
|
|
83008
|
+
CRATES_DROPPED="%d caixas para %s foram soltas!",
|
|
83009
|
+
BOARDED="%s embarcou!",
|
|
83010
|
+
BOARDING="%s embarcando!",
|
|
83011
|
+
TROOPS_RETURNED="As tropas retornaram à base!",
|
|
83012
|
+
TROOPS_LABEL="tropas",
|
|
83013
|
+
ENGINEERS_LABEL="engenheiros",
|
|
83014
|
+
DEPLOYED_NEAR_YOU="%s foram posicionados perto de você!",
|
|
83015
|
+
UNITS_REMOVED="%s foram removidos",
|
|
83016
|
+
BUILD_STARTED="Construção iniciada, pronta em %d segundos!",
|
|
83017
|
+
REPAIR_STARTED="Reparo iniciado usando %s, levando %d segundos",
|
|
83018
|
+
NO_UNIT_TO_REPAIR="Nenhuma unidade perto o suficiente para reparar!",
|
|
83019
|
+
CANT_REPAIR_WITH="Não é possível reparar esta unidade com %s",
|
|
83020
|
+
CRATES_MOVE_BEFORE_BUILD="*** As caixas precisam ser movidas antes da construção!",
|
|
83021
|
+
CHOPPER_CANNOT_CARRY="Desculpe, este helicóptero não pode carregar caixas!",
|
|
83022
|
+
TOO_HEAVY="Desculpe, isso é pesado demais para carregar!",
|
|
83023
|
+
FULLY_LOADED="Desculpe, estamos totalmente carregados!",
|
|
83024
|
+
CRAMMED="Desculpe, já estamos lotados!",
|
|
83025
|
+
NO_CAPACITY_NOW="Sem capacidade para carregar mais agora!",
|
|
83026
|
+
NO_MORE_CAPACITY="Não há mais capacidade para carregar caixas!",
|
|
83027
|
+
CANNOT_LOAD_NONE_OR_FULL="Não é possível carregar caixas: nenhuma encontrada ou sem capacidade restante.",
|
|
83028
|
+
NEED_TO_LAND_OR_HOVER_LOAD="Você precisa pousar ou pairar na posição para carregar!",
|
|
83029
|
+
HOVER_OVER_CRATES="Paire sobre as caixas para pegá-las!",
|
|
83030
|
+
LAND_OR_HOVER_OVER_CRATES="Pouse ou paire sobre as caixas para pegá-las!",
|
|
83031
|
+
MUST_LAND_OR_HOVER_CRATES="Você deve pousar ou pairar para carregar caixas!",
|
|
83032
|
+
NEED_TO_LAND_BUILD="Você precisa pousar / parar para construir algo, piloto!",
|
|
83033
|
+
NOT_CLOSE_ENOUGH_LOGISTICS="Você não está perto o suficiente de uma zona logística!",
|
|
83034
|
+
NOT_CLOSE_ENOUGH_DROP="Você não está perto o suficiente de uma zona de lançamento!",
|
|
83035
|
+
NOT_CLOSE_ENOUGH_ZONE_NM="Negativo, precisa estar a menos de %d nm de uma zona!",
|
|
83036
|
+
CANNOT_BUILD_LOADING_AREA="Você não pode construir em uma área de carregamento, piloto!",
|
|
83037
|
+
OPEN_DOORS_LOAD_CARGO="Você precisa abrir a(s) porta(s) para carregar carga!",
|
|
83038
|
+
OPEN_DOORS_LOAD_TROOPS="Você precisa abrir a(s) porta(s) para carregar tropas!",
|
|
83039
|
+
OPEN_DOORS_EXTRACT_TROOPS="Você precisa abrir a(s) porta(s) para extrair tropas!",
|
|
83040
|
+
OPEN_DOORS_UNLOAD_TROOPS="Você precisa abrir a(s) porta(s) para descarregar tropas!",
|
|
83041
|
+
OPEN_DOORS_DROP_CARGO="Você precisa abrir a(s) porta(s) para soltar carga!",
|
|
83042
|
+
ALL_GONE="Desculpe, todos os %s acabaram!",
|
|
83043
|
+
RAN_OUT_OF="Desculpe, ficamos sem %s",
|
|
83044
|
+
CARGO_NOT_AVAILABLE_ZONE="A carga solicitada não está disponível nesta zona!",
|
|
83045
|
+
ENOUGH_CRATES_NEARBY="Já há caixas suficientes por perto! Cuide delas primeiro!",
|
|
83046
|
+
NO_CRATES_WITHIN="Nenhuma caixa carregável em um raio de %d metros!",
|
|
83047
|
+
NO_CRATES_WITHIN_PLAIN="Nenhuma caixa em um raio de %d metros!",
|
|
83048
|
+
NO_CRATES_IN_RANGE="Nenhuma caixa encontrada no alcance!",
|
|
83049
|
+
NO_NAMED_CRATES_IN_RANGE="Nenhuma caixa \"%s\" encontrada no alcance!",
|
|
83050
|
+
NO_LOADABLE_CRATES="Desculpe, nenhuma caixa carregável por perto ou peso máximo de carga atingido!",
|
|
83051
|
+
NO_UNITS_TO_EXTRACT="Nenhuma unidade perto o suficiente para extrair!",
|
|
83052
|
+
NO_UNIT_CONFIG="Nenhuma configuração de unidade encontrada para %s",
|
|
83053
|
+
CANT_ONBOARD="Não é possível embarcar %s",
|
|
83054
|
+
TOO_MANY_UNITS_NEARBY="Você já tem %d unidades por perto!",
|
|
83055
|
+
NO_CRATE_GROUPS="Nenhum grupo de caixas encontrado para esta unidade!",
|
|
83056
|
+
NO_CRATE_SET="Nenhum conjunto de caixas encontrado ou índice inválido!",
|
|
83057
|
+
NO_CRATE_IN_SET="Nenhuma caixa encontrada nesse conjunto!",
|
|
83058
|
+
NO_TROOP_CHUNK="Nenhum bloco de carga de tropas encontrado para ID %d!",
|
|
83059
|
+
TROOP_CHUNK_EMPTY="O bloco de tropas está vazio para ID %d!",
|
|
83060
|
+
NOTHING_LOADED="Nada carregado!\nLimite de tropas: %d | Limite de caixas %d | Limite de peso %d kg",
|
|
83061
|
+
NOTHING_LOADED_AIRDROP="Nada carregado ou fora dos parâmetros de lançamento aéreo!",
|
|
83062
|
+
NOTHING_LOADED_HOVER="Nada carregado ou fora dos parâmetros de pairado!",
|
|
83063
|
+
NOTHING_IN_STOCK="Nada em estoque!",
|
|
83064
|
+
NOTHING_TO_PACK="Nada para empacotar nesta distância, piloto!",
|
|
83065
|
+
NOTHING_TO_REMOVE="Nada para remover nesta distância, piloto!",
|
|
83066
|
+
ROGER_ZONE="Entendido, zona %s %s!",
|
|
83067
|
+
HOVER_PARAMS_METRIC="Parâmetros de pairado (carregamento automático/soltar):\n - Altura mínima %dm \n - Altura máxima %dm \n - Velocidade máxima 2mps \n - Dentro dos parâmetros: %s",
|
|
83068
|
+
HOVER_PARAMS_IMPERIAL="Parâmetros de pairado (carregamento automático/soltar):\n - Altura mínima %dft \n - Altura máxima %dft \n - Velocidade máxima 6ftps \n - Dentro dos parâmetros: %s",
|
|
83069
|
+
FLIGHT_PARAMS_IMPERIAL="Parâmetros de voo (lançamento aéreo):\n - Altura mínima %dft \n - Altura máxima %dft \n - Dentro dos parâmetros: %s",
|
|
83070
|
+
FLIGHT_PARAMS_METRIC="Parâmetros de voo (lançamento aéreo):\n - Altura mínima %dm \n - Altura máxima %dm \n - Dentro dos parâmetros: %s",
|
|
83071
|
+
REPORT_CRATES_FOUND="Caixas encontradas por perto:",
|
|
83072
|
+
REPORT_REMOVING_CRATES="Removendo caixas encontradas por perto:",
|
|
83073
|
+
REPORT_TRANSPORT_CHECKOUT="Ficha de verificação de transporte",
|
|
83074
|
+
REPORT_INVENTORY="Ficha de inventário",
|
|
83075
|
+
REPORT_BUILD_CHECKLIST="Checklist de caixas construíveis",
|
|
83076
|
+
REPORT_REPAIR_CHECKLIST="Checklist de reparos",
|
|
83077
|
+
REPORT_BEACONS="Balizas de zona ativas",
|
|
83078
|
+
REPORT_SECTION_TROOPS=" -- TROPAS --",
|
|
83079
|
+
REPORT_SECTION_CRATES=" -- CAIXAS --",
|
|
83080
|
+
REPORT_SECTION_CRATES_GC=" -- CAIXAS carregadas pela equipe de solo --",
|
|
83081
|
+
REPORT_SECTION_NONE=" N E N H U M",
|
|
83082
|
+
REPORT_SECTION_NONE_ALT=" --- Nada encontrado! ---",
|
|
83083
|
+
REPORT_SECTION_NONE_REPAIR=" --- Nada encontrado ---",
|
|
83084
|
+
REPORT_GC_LOADABLE_HINT="Provavelmente carregável pela equipe de solo (F8)",
|
|
83085
|
+
REPORT_TOTAL_MASS="Massa total: %s kg. Carregável: %s kg.",
|
|
83086
|
+
REPORT_TROOPS_CRATES_COUNT="Tropas: %d(%d), Caixas: %d(%d)",
|
|
83087
|
+
REPORT_TROOPS_CRATETYPES_COUNT="Tropas: %d, Tipos de caixas: %d",
|
|
83088
|
+
REPORT_ROW_TROOP="Tropa: %s tamanho %d",
|
|
83089
|
+
REPORT_ROW_CRATE="Caixa: %s %d/%d",
|
|
83090
|
+
REPORT_ROW_CRATE_SIZE1="Caixa: %s tamanho 1",
|
|
83091
|
+
REPORT_ROW_GC_CRATE="Caixa carregada pela equipe de solo: %s tamanho 1",
|
|
83092
|
+
REPORT_ROW_DROPPED_CRATE="Caixa solta para %s, %dkg",
|
|
83093
|
+
REPORT_ROW_CRATE_KG="Caixa para %s, %dkg",
|
|
83094
|
+
REPORT_ROW_CRATE_REMOVED="Caixa para %s, %dkg removida",
|
|
83095
|
+
REPORT_ROW_UNIT_STOCK="Unidade: %s | Soldados: %d | Estoque: %s",
|
|
83096
|
+
REPORT_ROW_TYPE_CRATE_STOCK="Tipo: %s | Caixas por conjunto: %d | Estoque: %s",
|
|
83097
|
+
REPORT_ROW_TYPE_STOCK="Tipo: %s | Estoque: %s",
|
|
83098
|
+
REPORT_ROW_BUILD_CHECK="Tipo: %s | Necessário %d | Encontrado %d | Pode construir %s",
|
|
83099
|
+
REPORT_ROW_REPAIR_CHECK="Tipo: %s | Necessário %d | Encontrado %d | Pode reparar %s",
|
|
83100
|
+
REPORT_ROW_BEACON=" %s | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
|
83101
|
+
WEIGHT_LIMIT="Limite de peso atingido",
|
|
83102
|
+
CRATE_LIMIT="Limite de caixas atingido",
|
|
83103
|
+
MENU_CTLD="CTLD",
|
|
83104
|
+
MENU_MANAGE_TROOPS="Gerenciar tropas",
|
|
83105
|
+
MENU_MANAGE_CRATES="Gerenciar caixas",
|
|
83106
|
+
MENU_MANAGE_UNITS="Gerenciar unidades",
|
|
83107
|
+
MENU_LOAD_TROOPS="Carregar tropas",
|
|
83108
|
+
MENU_DROP_TROOPS="Desembarcar tropas",
|
|
83109
|
+
MENU_DROP_ALL_TROOPS="Desembarcar TODAS as tropas",
|
|
83110
|
+
MENU_EXTRACT_TROOPS="Extrair tropas",
|
|
83111
|
+
MENU_DROP_N_TROOPS="Desembarcar (%d) %s",
|
|
83112
|
+
MENU_GET_CRATES="Solicitar caixas",
|
|
83113
|
+
MENU_GET="Solicitar",
|
|
83114
|
+
MENU_GET_AND_LOAD="Solicitar e carregar",
|
|
83115
|
+
MENU_GET_ANYWAY="Solicitar mesmo assim",
|
|
83116
|
+
MENU_PARTIALLY_LOAD="Carregar parcialmente",
|
|
83117
|
+
MENU_OUT_OF_STOCK="Sem estoque",
|
|
83118
|
+
MENU_TROOP_LIMIT="Limite de tropas atingido",
|
|
83119
|
+
MENU_LOAD_CRATES="Carregar caixas",
|
|
83120
|
+
MENU_LOAD_ALL="Carregar TUDO",
|
|
83121
|
+
MENU_SHOW_LOADABLE_CRATES="Mostrar caixas carregáveis",
|
|
83122
|
+
MENU_NO_CRATES_FOUND_RESCAN="Nenhuma caixa encontrada! Procurar novamente?",
|
|
83123
|
+
MENU_USE_C130_LOAD="Usar sistema de carga do C-130",
|
|
83124
|
+
MENU_LOAD_SINGLE="Carregar",
|
|
83125
|
+
MENU_DROP_CRATES="Soltar caixas",
|
|
83126
|
+
MENU_DROP_ALL_CRATES="Soltar TODAS as caixas",
|
|
83127
|
+
MENU_DROP="Soltar",
|
|
83128
|
+
MENU_DROP_AND_BUILD="Soltar e construir",
|
|
83129
|
+
MENU_DROP_N_SETS="Soltar %d conjunto%s",
|
|
83130
|
+
MENU_NO_CRATES_TO_DROP="Nenhuma caixa para soltar!",
|
|
83131
|
+
MENU_BUILD_CRATES="Construir caixas",
|
|
83132
|
+
MENU_REPAIR="Reparar",
|
|
83133
|
+
MENU_PACK_CRATES="Empacotar caixas",
|
|
83134
|
+
MENU_PACK="Empacotar",
|
|
83135
|
+
MENU_SCAN_PACKABLE_UNITS="Procurar unidades empacotáveis por perto",
|
|
83136
|
+
MENU_NO_PACKABLE_UNITS_FOUND_RESCAN="Nenhuma unidade empacotável encontrada! Procurar novamente?",
|
|
83137
|
+
MENU_PACK_ALL="Empacotar próximas",
|
|
83138
|
+
MENU_PACK_AND_LOAD="Empacotar e carregar",
|
|
83139
|
+
MENU_PACK_AND_LOAD_ALL="Empacotar e carregar próximas",
|
|
83140
|
+
MENU_PACK_AND_REMOVE="Empacotar e remover",
|
|
83141
|
+
MENU_PACK_AND_REMOVE_ALL="Empacotar e remover próximas",
|
|
83142
|
+
MENU_REMOVE_CRATES="Remover caixas",
|
|
83143
|
+
MENU_REMOVE_CRATES_NEARBY="Remover caixas próximas",
|
|
83144
|
+
MENU_LIST_CRATES_NEARBY="Listar caixas próximas",
|
|
83145
|
+
MENU_CRATES_NEEDED="%d caixa%s %s (%dkg)",
|
|
83146
|
+
MENU_CRATE_SINGLE="%s (%dkg)",
|
|
83147
|
+
MENU_GET_UNITS="Solicitar unidades",
|
|
83148
|
+
MENU_REMOVE_UNITS_NEARBY="Remover unidades próximas",
|
|
83149
|
+
MENU_LIST_BOARDED_CARGO="Listar carga embarcada",
|
|
83150
|
+
MENU_INVENTORY="Inventário",
|
|
83151
|
+
MENU_LIST_ZONE_BEACONS="Listar balizas de zona ativas",
|
|
83152
|
+
MENU_SMOKES_FLARES_BEACONS="Fumaças, sinalizadores, balizas",
|
|
83153
|
+
MENU_SMOKE_ZONES_NEARBY="Fumaça em zonas próximas",
|
|
83154
|
+
MENU_DROP_SMOKE_NOW="Lançar fumaça agora",
|
|
83155
|
+
MENU_RED_SMOKE="Fumaça vermelha",
|
|
83156
|
+
MENU_BLUE_SMOKE="Fumaça azul",
|
|
83157
|
+
MENU_GREEN_SMOKE="Fumaça verde",
|
|
83158
|
+
MENU_ORANGE_SMOKE="Fumaça laranja",
|
|
83159
|
+
MENU_WHITE_SMOKE="Fumaça branca",
|
|
83160
|
+
MENU_FLARE_ZONES_NEARBY="Sinalizadores em zonas próximas",
|
|
83161
|
+
MENU_FIRE_FLARE_NOW="Disparar sinalizador agora",
|
|
83162
|
+
MENU_DROP_BEACON_NOW="Posicionar baliza agora",
|
|
83163
|
+
MENU_SHOW_FLIGHT_PARAMS="Mostrar parâmetros de voo",
|
|
83164
|
+
MENU_SHOW_HOVER_PARAMS="Mostrar parâmetros de pairado",
|
|
83165
|
+
STOCK_NONE="nenhum",
|
|
83166
|
+
STOCK_UNLIMITED="ilimitado",
|
|
83167
|
+
BUILD_YES="SIM",
|
|
83168
|
+
BUILD_NO="NÃO",
|
|
83169
|
+
},
|
|
83170
|
+
TR={
|
|
83171
|
+
CRATE_LOADED_GROUNDCREW="%s sandığı yer ekibi tarafından yüklendi!",
|
|
83172
|
+
CRATE_UNLOADED_GROUNDCREW="%s sandığı yer ekibi tarafından boşaltıldı!",
|
|
83173
|
+
CRATE_LOADED_ID="Sandık ID %d %s için yüklendi!",
|
|
83174
|
+
LOADED_FULL="%d %s yüklendi.",
|
|
83175
|
+
LOADED_SETS_LEFTOVER="%d %s yüklendi, %d sandık kaldı.",
|
|
83176
|
+
LOADED_SETS="%d %s yüklendi.",
|
|
83177
|
+
LOADED_PARTIAL="Yalnızca %d/%d sandık %s için yüklendi.",
|
|
83178
|
+
LOADED_PARTIAL_LIMIT="Yalnızca %d/%d sandık %s için yüklendi. Kargo limiti artık doldu!",
|
|
83179
|
+
LOADED_BATCH="%d %s yüklendi.",
|
|
83180
|
+
LOADED_BATCH_PARTIAL="Bazı setler tamamen yüklenemedi.",
|
|
83181
|
+
DROPPED_FULL="%d %s bırakıldı.",
|
|
83182
|
+
DROPPED_SETS_LEFTOVER="%d %s bırakıldı, %d sandık kaldı.",
|
|
83183
|
+
DROPPED_SETS="%d %s bırakıldı.",
|
|
83184
|
+
DROPPED_PARTIAL="%d/%d sandık %s için bırakıldı.",
|
|
83185
|
+
DROPPED_INTO_ACTION="Çatışma alanına konuşlandırılanlar: %s!",
|
|
83186
|
+
DROPPED_BEACON="Radyo işaretçisi %s bırakıldı | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
|
83187
|
+
CRATES_POSITIONED="%d sandık %s için yakınınıza yerleştirildi!",
|
|
83188
|
+
CRATES_DROPPED="%d sandık %s için bırakıldı!",
|
|
83189
|
+
BOARDED="%s bindirildi!",
|
|
83190
|
+
BOARDING="%s biniyor!",
|
|
83191
|
+
TROOPS_RETURNED="Birlikler üsse döndü!",
|
|
83192
|
+
TROOPS_LABEL="birlik",
|
|
83193
|
+
ENGINEERS_LABEL="mühendis",
|
|
83194
|
+
DEPLOYED_NEAR_YOU="%s yakınınıza konuşlandırıldı!",
|
|
83195
|
+
UNITS_REMOVED="%s kaldırıldı",
|
|
83196
|
+
BUILD_STARTED="İnşa başladı, %d saniye içinde hazır!",
|
|
83197
|
+
REPAIR_STARTED="%s kullanılarak onarım başladı, %d saniye sürecek",
|
|
83198
|
+
NO_UNIT_TO_REPAIR="Onarmak için yeterince yakın bir birim yok!",
|
|
83199
|
+
CANT_REPAIR_WITH="Bu birim %s ile onarılamaz",
|
|
83200
|
+
CRATES_MOVE_BEFORE_BUILD="*** İnşa etmeden önce sandıkların taşınması gerekiyor!",
|
|
83201
|
+
CHOPPER_CANNOT_CARRY="Üzgünüm, bu helikopter sandık taşıyamaz!",
|
|
83202
|
+
TOO_HEAVY="Üzgünüm, bu yük çok ağır!",
|
|
83203
|
+
FULLY_LOADED="Üzgünüm, tamamen doluyuz!",
|
|
83204
|
+
CRAMMED="Üzgünüm, zaten tıka basa doluyuz!",
|
|
83205
|
+
NO_CAPACITY_NOW="Şu anda daha fazla yüklemek için kapasite yok!",
|
|
83206
|
+
NO_MORE_CAPACITY="Sandık yüklemek için daha fazla kapasite yok!",
|
|
83207
|
+
CANNOT_LOAD_NONE_OR_FULL="Sandıklar yüklenemiyor: ya hiç bulunamadı ya da kapasite kalmadı.",
|
|
83208
|
+
NEED_TO_LAND_OR_HOVER_LOAD="Yüklemek için inmen veya pozisyonda asılı kalman gerekiyor!",
|
|
83209
|
+
HOVER_OVER_CRATES="Sandıkları almak için üzerlerinde asılı kal!",
|
|
83210
|
+
LAND_OR_HOVER_OVER_CRATES="Sandıkları almak için in veya üzerlerinde asılı kal!",
|
|
83211
|
+
MUST_LAND_OR_HOVER_CRATES="Sandık yüklemek için inmen veya asılı kalman gerekiyor!",
|
|
83212
|
+
NEED_TO_LAND_BUILD="Bir şey inşa etmek için inmen / durman gerekiyor, pilot!",
|
|
83213
|
+
NOT_CLOSE_ENOUGH_LOGISTICS="Lojistik bölgesine yeterince yakın değilsin!",
|
|
83214
|
+
NOT_CLOSE_ENOUGH_DROP="Bırakma bölgesine yeterince yakın değilsin!",
|
|
83215
|
+
NOT_CLOSE_ENOUGH_ZONE_NM="Negatif, bir bölgeye %d nm'den daha yakın olmalısın!",
|
|
83216
|
+
CANNOT_BUILD_LOADING_AREA="Yükleme alanında inşa yapamazsın, pilot!",
|
|
83217
|
+
OPEN_DOORS_LOAD_CARGO="Kargo yüklemek için kapı(ları) açman gerekiyor!",
|
|
83218
|
+
OPEN_DOORS_LOAD_TROOPS="Birlik yüklemek için kapı(ları) açman gerekiyor!",
|
|
83219
|
+
OPEN_DOORS_EXTRACT_TROOPS="Birlik tahliye etmek için kapı(ları) açman gerekiyor!",
|
|
83220
|
+
OPEN_DOORS_UNLOAD_TROOPS="Birlik boşaltmak için kapı(ları) açman gerekiyor!",
|
|
83221
|
+
OPEN_DOORS_DROP_CARGO="Kargo bırakmak için kapı(ları) açman gerekiyor!",
|
|
83222
|
+
ALL_GONE="Üzgünüm, tüm %s bitti!",
|
|
83223
|
+
RAN_OUT_OF="Üzgünüm, %s tükendi",
|
|
83224
|
+
CARGO_NOT_AVAILABLE_ZONE="İstenen kargo bu bölgede mevcut değil!",
|
|
83225
|
+
ENOUGH_CRATES_NEARBY="Yakında zaten yeterince sandık var! Önce onlarla ilgilen!",
|
|
83226
|
+
NO_CRATES_WITHIN="%d metre içinde yüklenebilir sandık yok!",
|
|
83227
|
+
NO_CRATES_WITHIN_PLAIN="%d metre içinde sandık yok!",
|
|
83228
|
+
NO_CRATES_IN_RANGE="Menzilde sandık bulunamadı!",
|
|
83229
|
+
NO_NAMED_CRATES_IN_RANGE="Menzilde \"%s\" sandığı bulunamadı!",
|
|
83230
|
+
NO_LOADABLE_CRATES="Üzgünüm, yakında yüklenebilir sandık yok veya maksimum kargo ağırlığına ulaşıldı!",
|
|
83231
|
+
NO_UNITS_TO_EXTRACT="Tahliye etmek için yeterince yakın birim yok!",
|
|
83232
|
+
NO_UNIT_CONFIG="%s için birim yapılandırması bulunamadı",
|
|
83233
|
+
CANT_ONBOARD="%s bindirilemiyor",
|
|
83234
|
+
TOO_MANY_UNITS_NEARBY="Yakında zaten %d birimin var!",
|
|
83235
|
+
NO_CRATE_GROUPS="Bu birim için sandık grubu bulunamadı!",
|
|
83236
|
+
NO_CRATE_SET="Sandık seti bulunamadı veya indeks geçersiz!",
|
|
83237
|
+
NO_CRATE_IN_SET="Bu sette sandık bulunamadı!",
|
|
83238
|
+
NO_TROOP_CHUNK="ID %d için birlik kargo parçası bulunamadı!",
|
|
83239
|
+
TROOP_CHUNK_EMPTY="ID %d için birlik parçası boş!",
|
|
83240
|
+
NOTHING_LOADED="Hiçbir şey yüklü değil!\nBirlik limiti: %d | Sandık limiti %d | Ağırlık limiti %d kg",
|
|
83241
|
+
NOTHING_LOADED_AIRDROP="Hiçbir şey yüklü değil veya havadan bırakma parametreleri dahilinde değil!",
|
|
83242
|
+
NOTHING_LOADED_HOVER="Hiçbir şey yüklü değil veya asılı kalma parametreleri dahilinde değil!",
|
|
83243
|
+
NOTHING_IN_STOCK="Stokta hiçbir şey yok!",
|
|
83244
|
+
NOTHING_TO_PACK="Bu mesafede paketlenecek bir şey yok, pilot!",
|
|
83245
|
+
NOTHING_TO_REMOVE="Bu mesafede kaldırılacak bir şey yok, pilot!",
|
|
83246
|
+
ROGER_ZONE="Anlaşıldı, %s bölgesi %s!",
|
|
83247
|
+
HOVER_PARAMS_METRIC="Asılı kalma parametreleri (otomatik yükleme/bırakma):\n - Minimum irtifa %dm \n - Maksimum irtifa %dm \n - Maksimum hız 2mps \n - Parametreler dahilinde: %s",
|
|
83248
|
+
HOVER_PARAMS_IMPERIAL="Asılı kalma parametreleri (otomatik yükleme/bırakma):\n - Minimum irtifa %dft \n - Maksimum irtifa %dft \n - Maksimum hız 6ftps \n - Parametreler dahilinde: %s",
|
|
83249
|
+
FLIGHT_PARAMS_IMPERIAL="Uçuş parametreleri (havadan bırakma):\n - Minimum irtifa %dft \n - Maksimum irtifa %dft \n - Parametreler dahilinde: %s",
|
|
83250
|
+
FLIGHT_PARAMS_METRIC="Uçuş parametreleri (havadan bırakma):\n - Minimum irtifa %dm \n - Maksimum irtifa %dm \n - Parametreler dahilinde: %s",
|
|
83251
|
+
REPORT_CRATES_FOUND="Yakında bulunan sandıklar:",
|
|
83252
|
+
REPORT_REMOVING_CRATES="Yakında bulunan sandıklar kaldırılıyor:",
|
|
83253
|
+
REPORT_TRANSPORT_CHECKOUT="Taşıma kontrol formu",
|
|
83254
|
+
REPORT_INVENTORY="Envanter formu",
|
|
83255
|
+
REPORT_BUILD_CHECKLIST="İnşa edilebilir sandık kontrol listesi",
|
|
83256
|
+
REPORT_REPAIR_CHECKLIST="Onarım kontrol listesi",
|
|
83257
|
+
REPORT_BEACONS="Aktif bölge radyo işaretçileri",
|
|
83258
|
+
REPORT_SECTION_TROOPS=" -- BİRLİKLER --",
|
|
83259
|
+
REPORT_SECTION_CRATES=" -- SANDIKLAR --",
|
|
83260
|
+
REPORT_SECTION_CRATES_GC=" -- Yer ekibiyle yüklenen SANDIKLAR --",
|
|
83261
|
+
REPORT_SECTION_NONE=" Y O K",
|
|
83262
|
+
REPORT_SECTION_NONE_ALT=" --- Hiçbir şey bulunamadı! ---",
|
|
83263
|
+
REPORT_SECTION_NONE_REPAIR=" --- Hiçbir şey bulunamadı ---",
|
|
83264
|
+
REPORT_GC_LOADABLE_HINT="Muhtemelen yer ekibiyle yüklenebilir (F8)",
|
|
83265
|
+
REPORT_TOTAL_MASS="Toplam kütle: %s kg. Yüklenebilir: %s kg.",
|
|
83266
|
+
REPORT_TROOPS_CRATES_COUNT="Birlikler: %d(%d), Sandıklar: %d(%d)",
|
|
83267
|
+
REPORT_TROOPS_CRATETYPES_COUNT="Birlikler: %d, Sandık tipleri: %d",
|
|
83268
|
+
REPORT_ROW_TROOP="Birlik: %s boyut %d",
|
|
83269
|
+
REPORT_ROW_CRATE="Sandık: %s %d/%d",
|
|
83270
|
+
REPORT_ROW_CRATE_SIZE1="Sandık: %s boyut 1",
|
|
83271
|
+
REPORT_ROW_GC_CRATE="Yer ekibiyle yüklenen sandık: %s boyut 1",
|
|
83272
|
+
REPORT_ROW_DROPPED_CRATE="%s için bırakılan sandık, %dkg",
|
|
83273
|
+
REPORT_ROW_CRATE_KG="%s için sandık, %dkg",
|
|
83274
|
+
REPORT_ROW_CRATE_REMOVED="%s için sandık, %dkg kaldırıldı",
|
|
83275
|
+
REPORT_ROW_UNIT_STOCK="Birim: %s | Askerler: %d | Stok: %s",
|
|
83276
|
+
REPORT_ROW_TYPE_CRATE_STOCK="Tip: %s | Set başına sandık: %d | Stok: %s",
|
|
83277
|
+
REPORT_ROW_TYPE_STOCK="Tip: %s | Stok: %s",
|
|
83278
|
+
REPORT_ROW_BUILD_CHECK="Tip: %s | Gerekli %d | Bulunan %d | İnşa edilebilir %s",
|
|
83279
|
+
REPORT_ROW_REPAIR_CHECK="Tip: %s | Gerekli %d | Bulunan %d | Onarılabilir %s",
|
|
83280
|
+
REPORT_ROW_BEACON=" %s | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
|
83281
|
+
WEIGHT_LIMIT="Ağırlık limitine ulaşıldı",
|
|
83282
|
+
CRATE_LIMIT="Sandık limitine ulaşıldı",
|
|
83283
|
+
MENU_CTLD="CTLD",
|
|
83284
|
+
MENU_MANAGE_TROOPS="Birlikleri yönet",
|
|
83285
|
+
MENU_MANAGE_CRATES="Sandıkları yönet",
|
|
83286
|
+
MENU_MANAGE_UNITS="Birimleri yönet",
|
|
83287
|
+
MENU_LOAD_TROOPS="Birlik yükle",
|
|
83288
|
+
MENU_DROP_TROOPS="Birlik indir",
|
|
83289
|
+
MENU_DROP_ALL_TROOPS="TÜM birlikleri indir",
|
|
83290
|
+
MENU_EXTRACT_TROOPS="Birlik tahliye et",
|
|
83291
|
+
MENU_DROP_N_TROOPS="(%d) %s indir",
|
|
83292
|
+
MENU_GET_CRATES="Sandık talep et",
|
|
83293
|
+
MENU_GET="Talep et",
|
|
83294
|
+
MENU_GET_AND_LOAD="Talep et ve yükle",
|
|
83295
|
+
MENU_GET_ANYWAY="Yine de talep et",
|
|
83296
|
+
MENU_PARTIALLY_LOAD="Kısmen yükle",
|
|
83297
|
+
MENU_OUT_OF_STOCK="Stokta yok",
|
|
83298
|
+
MENU_TROOP_LIMIT="Birlik limitine ulaşıldı",
|
|
83299
|
+
MENU_LOAD_CRATES="Sandık yükle",
|
|
83300
|
+
MENU_LOAD_ALL="TÜMÜNÜ yükle",
|
|
83301
|
+
MENU_SHOW_LOADABLE_CRATES="Yüklenebilir sandıkları göster",
|
|
83302
|
+
MENU_NO_CRATES_FOUND_RESCAN="Sandık bulunamadı! Tekrar tara?",
|
|
83303
|
+
MENU_USE_C130_LOAD="C-130 yükleme sistemini kullan",
|
|
83304
|
+
MENU_LOAD_SINGLE="Yükle",
|
|
83305
|
+
MENU_DROP_CRATES="Sandık bırak",
|
|
83306
|
+
MENU_DROP_ALL_CRATES="TÜM sandıkları bırak",
|
|
83307
|
+
MENU_DROP="Bırak",
|
|
83308
|
+
MENU_DROP_AND_BUILD="Bırak ve inşa et",
|
|
83309
|
+
MENU_DROP_N_SETS="%d set%.0s bırak",
|
|
83310
|
+
MENU_NO_CRATES_TO_DROP="Bırakılacak sandık yok!",
|
|
83311
|
+
MENU_BUILD_CRATES="Sandıkları inşa et",
|
|
83312
|
+
MENU_REPAIR="Onar",
|
|
83313
|
+
MENU_PACK_CRATES="Sandıkları paketle",
|
|
83314
|
+
MENU_PACK="Paketle",
|
|
83315
|
+
MENU_SCAN_PACKABLE_UNITS="Yakındaki paketlenebilir birimleri tara",
|
|
83316
|
+
MENU_NO_PACKABLE_UNITS_FOUND_RESCAN="Paketlenebilir birim bulunamadı! Tekrar tara?",
|
|
83317
|
+
MENU_PACK_ALL="Yakındakileri paketle",
|
|
83318
|
+
MENU_PACK_AND_LOAD="Paketle ve yükle",
|
|
83319
|
+
MENU_PACK_AND_LOAD_ALL="Yakındakileri paketle ve yükle",
|
|
83320
|
+
MENU_PACK_AND_REMOVE="Paketle ve kaldır",
|
|
83321
|
+
MENU_PACK_AND_REMOVE_ALL="Yakındakileri paketle ve kaldır",
|
|
83322
|
+
MENU_REMOVE_CRATES="Sandıkları kaldır",
|
|
83323
|
+
MENU_REMOVE_CRATES_NEARBY="Yakındaki sandıkları kaldır",
|
|
83324
|
+
MENU_LIST_CRATES_NEARBY="Yakındaki sandıkları listele",
|
|
83325
|
+
MENU_CRATES_NEEDED="%d sandık%.0s %s (%dkg)",
|
|
83326
|
+
MENU_CRATE_SINGLE="%s (%dkg)",
|
|
83327
|
+
MENU_GET_UNITS="Birim talep et",
|
|
83328
|
+
MENU_REMOVE_UNITS_NEARBY="Yakındaki birimleri kaldır",
|
|
83329
|
+
MENU_LIST_BOARDED_CARGO="Bindirilmiş kargoyu listele",
|
|
83330
|
+
MENU_INVENTORY="Envanter",
|
|
83331
|
+
MENU_LIST_ZONE_BEACONS="Aktif bölge radyo işaretçilerini listele",
|
|
83332
|
+
MENU_SMOKES_FLARES_BEACONS="Dumanlar, işaret fişekleri, radyo işaretçileri",
|
|
83333
|
+
MENU_SMOKE_ZONES_NEARBY="Yakındaki bölgelerde duman",
|
|
83334
|
+
MENU_DROP_SMOKE_NOW="Şimdi duman işareti bırak",
|
|
83335
|
+
MENU_RED_SMOKE="Kırmızı duman",
|
|
83336
|
+
MENU_BLUE_SMOKE="Mavi duman",
|
|
83337
|
+
MENU_GREEN_SMOKE="Yeşil duman",
|
|
83338
|
+
MENU_ORANGE_SMOKE="Turuncu duman",
|
|
83339
|
+
MENU_WHITE_SMOKE="Beyaz duman",
|
|
83340
|
+
MENU_FLARE_ZONES_NEARBY="Yakındaki bölgelerde işaret fişekleri",
|
|
83341
|
+
MENU_FIRE_FLARE_NOW="Şimdi işaret fişeği ateşle",
|
|
83342
|
+
MENU_DROP_BEACON_NOW="Şimdi radyo işaretçisi bırak",
|
|
83343
|
+
MENU_SHOW_FLIGHT_PARAMS="Uçuş parametrelerini göster",
|
|
83344
|
+
MENU_SHOW_HOVER_PARAMS="Asılı kalma parametrelerini göster",
|
|
83345
|
+
STOCK_NONE="yok",
|
|
83346
|
+
STOCK_UNLIMITED="sınırsız",
|
|
83347
|
+
BUILD_YES="EVET",
|
|
83348
|
+
BUILD_NO="HAYIR",
|
|
83349
|
+
},
|
|
83350
|
+
RU={
|
|
83351
|
+
CRATE_LOADED_GROUNDCREW="Ящик %s загружен наземной службой!",
|
|
83352
|
+
CRATE_UNLOADED_GROUNDCREW="Ящик %s выгружен наземной службой!",
|
|
83353
|
+
CRATE_LOADED_ID="Ящик ID %d для %s загружен!",
|
|
83354
|
+
LOADED_FULL="Загружено %d %s.",
|
|
83355
|
+
LOADED_SETS_LEFTOVER="Загружено %d %s, осталось %d ящик(ов).",
|
|
83356
|
+
LOADED_SETS="Загружено %d %s.",
|
|
83357
|
+
LOADED_PARTIAL="Загружено только %d/%d ящик(ов) для %s.",
|
|
83358
|
+
LOADED_PARTIAL_LIMIT="Загружено только %d/%d ящик(ов) для %s. Достигнут лимит груза!",
|
|
83359
|
+
LOADED_BATCH="Загружено %d %s.",
|
|
83360
|
+
LOADED_BATCH_PARTIAL="Некоторые комплекты не удалось загрузить полностью.",
|
|
83361
|
+
DROPPED_FULL="Сброшено %d %s.",
|
|
83362
|
+
DROPPED_SETS_LEFTOVER="Сброшено %d %s, осталось %d ящик(ов).",
|
|
83363
|
+
DROPPED_SETS="Сброшено %d %s.",
|
|
83364
|
+
DROPPED_PARTIAL="Сброшено %d/%d ящик(ов) для %s.",
|
|
83365
|
+
DROPPED_INTO_ACTION="%s сброшено в бой!",
|
|
83366
|
+
DROPPED_BEACON="Сброшен %s | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
|
83367
|
+
CRATES_POSITIONED="%d ящик(ов) для %s размещены рядом с вами!",
|
|
83368
|
+
CRATES_DROPPED="%d ящик(ов) для %s сброшены!",
|
|
83369
|
+
BOARDED="%s на борту!",
|
|
83370
|
+
BOARDING="%s грузится!",
|
|
83371
|
+
TROOPS_RETURNED="Войска вернулись на базу!",
|
|
83372
|
+
TROOPS_LABEL="войска",
|
|
83373
|
+
ENGINEERS_LABEL="инженеры",
|
|
83374
|
+
DEPLOYED_NEAR_YOU="%s развернуты рядом с вами!",
|
|
83375
|
+
UNITS_REMOVED="%s удалены",
|
|
83376
|
+
BUILD_STARTED="Строительство начато, готово через %d секунд!",
|
|
83377
|
+
REPAIR_STARTED="Ремонт начат с использованием %s, займет %d сек",
|
|
83378
|
+
NO_UNIT_TO_REPAIR="Нет достаточно близкого юнита для ремонта!",
|
|
83379
|
+
CANT_REPAIR_WITH="Нельзя отремонтировать этот юнит с помощью %s",
|
|
83380
|
+
CRATES_MOVE_BEFORE_BUILD="*** Ящики нужно переместить перед строительством!",
|
|
83381
|
+
CHOPPER_CANNOT_CARRY="Извините, этот вертолет не может перевозить ящики!",
|
|
83382
|
+
TOO_HEAVY="Извините, это слишком тяжело для загрузки!",
|
|
83383
|
+
FULLY_LOADED="Извините, мы полностью загружены!",
|
|
83384
|
+
CRAMMED="Извините, у нас уже нет места!",
|
|
83385
|
+
NO_CAPACITY_NOW="Сейчас нет места для дополнительной загрузки!",
|
|
83386
|
+
NO_MORE_CAPACITY="Больше нет места для загрузки ящиков!",
|
|
83387
|
+
CANNOT_LOAD_NONE_OR_FULL="Нельзя загрузить ящики: ничего не найдено или нет свободной вместимости.",
|
|
83388
|
+
NEED_TO_LAND_OR_HOVER_LOAD="Нужно приземлиться или зависнуть на месте для загрузки!",
|
|
83389
|
+
HOVER_OVER_CRATES="Зависните над ящиками, чтобы подобрать их!",
|
|
83390
|
+
LAND_OR_HOVER_OVER_CRATES="Приземлитесь или зависните над ящиками, чтобы подобрать их!",
|
|
83391
|
+
MUST_LAND_OR_HOVER_CRATES="Нужно приземлиться или зависнуть, чтобы загрузить ящики!",
|
|
83392
|
+
NEED_TO_LAND_BUILD="Нужно приземлиться / остановиться, чтобы что-то построить, пилот!",
|
|
83393
|
+
NOT_CLOSE_ENOUGH_LOGISTICS="Вы недостаточно близко к логистической зоне!",
|
|
83394
|
+
NOT_CLOSE_ENOUGH_DROP="Вы недостаточно близко к зоне сброса!",
|
|
83395
|
+
NOT_CLOSE_ENOUGH_ZONE_NM="Отказ, нужно быть ближе чем %d nm к зоне!",
|
|
83396
|
+
CANNOT_BUILD_LOADING_AREA="Нельзя строить в зоне погрузки, пилот!",
|
|
83397
|
+
OPEN_DOORS_LOAD_CARGO="Нужно открыть дверь(и), чтобы загрузить груз!",
|
|
83398
|
+
OPEN_DOORS_LOAD_TROOPS="Нужно открыть дверь(и), чтобы загрузить войска!",
|
|
83399
|
+
OPEN_DOORS_EXTRACT_TROOPS="Нужно открыть дверь(и), чтобы эвакуировать войска!",
|
|
83400
|
+
OPEN_DOORS_UNLOAD_TROOPS="Нужно открыть дверь(и), чтобы выгрузить войска!",
|
|
83401
|
+
OPEN_DOORS_DROP_CARGO="Нужно открыть дверь(и), чтобы сбросить груз!",
|
|
83402
|
+
ALL_GONE="Извините, все %s закончились!",
|
|
83403
|
+
RAN_OUT_OF="Извините, у нас закончились %s",
|
|
83404
|
+
CARGO_NOT_AVAILABLE_ZONE="Запрошенный груз недоступен в этой зоне!",
|
|
83405
|
+
ENOUGH_CRATES_NEARBY="Рядом уже достаточно ящиков! Сначала разберитесь с ними!",
|
|
83406
|
+
NO_CRATES_WITHIN="Нет загружаемых ящиков в пределах %d метров!",
|
|
83407
|
+
NO_CRATES_WITHIN_PLAIN="Нет ящиков в пределах %d метров!",
|
|
83408
|
+
NO_CRATES_IN_RANGE="Ящики в радиусе не найдены!",
|
|
83409
|
+
NO_NAMED_CRATES_IN_RANGE="Ящики «%s» в радиусе не найдены!",
|
|
83410
|
+
NO_LOADABLE_CRATES="Извините, рядом нет загружаемых ящиков или достигнут максимальный вес груза!",
|
|
83411
|
+
NO_UNITS_TO_EXTRACT="Нет достаточно близких юнитов для эвакуации!",
|
|
83412
|
+
NO_UNIT_CONFIG="Конфигурация юнита для %s не найдена",
|
|
83413
|
+
CANT_ONBOARD="Нельзя взять на борт %s",
|
|
83414
|
+
TOO_MANY_UNITS_NEARBY="У вас уже есть %d юнитов поблизости!",
|
|
83415
|
+
NO_CRATE_GROUPS="Группы ящиков для этого юнита не найдены!",
|
|
83416
|
+
NO_CRATE_SET="Набор ящиков не найден или индекс недействителен!",
|
|
83417
|
+
NO_CRATE_IN_SET="Ящик в этом наборе не найден!",
|
|
83418
|
+
NO_TROOP_CHUNK="Часть войскового груза с ID %d не найдена!",
|
|
83419
|
+
TROOP_CHUNK_EMPTY="Часть войскового груза с ID %d пуста!",
|
|
83420
|
+
NOTHING_LOADED="Ничего не загружено!\nЛимит войск: %d | Лимит ящиков %d | Лимит веса %d кг",
|
|
83421
|
+
NOTHING_LOADED_AIRDROP="Ничего не загружено или параметры воздушного сброса не соблюдены!",
|
|
83422
|
+
NOTHING_LOADED_HOVER="Ничего не загружено или висение вне допустимых параметров!",
|
|
83423
|
+
NOTHING_IN_STOCK="На складе ничего нет!",
|
|
83424
|
+
NOTHING_TO_PACK="На этой дистанции нечего упаковывать, пилот!",
|
|
83425
|
+
NOTHING_TO_REMOVE="На этой дистанции нечего удалять, пилот!",
|
|
83426
|
+
ROGER_ZONE="Принято, зона %s %s!",
|
|
83427
|
+
HOVER_PARAMS_METRIC="Параметры висения (автозагрузка/сброс):\n - Мин. высота %dм \n - Макс. высота %dм \n - Макс. скорость 2м/с \n - В параметрах: %s",
|
|
83428
|
+
HOVER_PARAMS_IMPERIAL="Параметры висения (автозагрузка/сброс):\n - Мин. высота %dфт \n - Макс. высота %dфт \n - Макс. скорость 6фт/с \n - В параметрах: %s",
|
|
83429
|
+
FLIGHT_PARAMS_IMPERIAL="Параметры полета (воздушный сброс):\n - Мин. высота %dфт \n - Макс. высота %dфт \n - В параметрах: %s",
|
|
83430
|
+
FLIGHT_PARAMS_METRIC="Параметры полета (воздушный сброс):\n - Мин. высота %dм \n - Макс. высота %dм \n - В параметрах: %s",
|
|
83431
|
+
REPORT_CRATES_FOUND="Ящики поблизости:",
|
|
83432
|
+
REPORT_REMOVING_CRATES="Удаление найденных поблизости ящиков:",
|
|
83433
|
+
REPORT_TRANSPORT_CHECKOUT="Транспортная ведомость",
|
|
83434
|
+
REPORT_INVENTORY="Инвентарная ведомость",
|
|
83435
|
+
REPORT_BUILD_CHECKLIST="Чек-лист строящихся ящиков",
|
|
83436
|
+
REPORT_REPAIR_CHECKLIST="Чек-лист ремонта",
|
|
83437
|
+
REPORT_BEACONS="Активные маяки зон",
|
|
83438
|
+
REPORT_SECTION_TROOPS=" -- ВОЙСКА --",
|
|
83439
|
+
REPORT_SECTION_CRATES=" -- ЯЩИКИ --",
|
|
83440
|
+
REPORT_SECTION_CRATES_GC=" -- ЯЩИКИ загружены наземной службой --",
|
|
83441
|
+
REPORT_SECTION_NONE=" Н Е Т",
|
|
83442
|
+
REPORT_SECTION_NONE_ALT=" --- Ничего не найдено! ---",
|
|
83443
|
+
REPORT_SECTION_NONE_REPAIR=" --- Ничего не найдено ---",
|
|
83444
|
+
REPORT_GC_LOADABLE_HINT="Вероятно, можно загрузить наземной службой (F8)",
|
|
83445
|
+
REPORT_TOTAL_MASS="Общая масса: %s кг. Можно загрузить: %s кг.",
|
|
83446
|
+
REPORT_TROOPS_CRATES_COUNT="Войска: %d(%d), Ящики: %d(%d)",
|
|
83447
|
+
REPORT_TROOPS_CRATETYPES_COUNT="Войска: %d, Типы ящиков: %d",
|
|
83448
|
+
REPORT_ROW_TROOP="Войска: %s размер %d",
|
|
83449
|
+
REPORT_ROW_CRATE="Ящик: %s %d/%d",
|
|
83450
|
+
REPORT_ROW_CRATE_SIZE1="Ящик: %s размер 1",
|
|
83451
|
+
REPORT_ROW_GC_CRATE="Ящик загружен НС: %s размер 1",
|
|
83452
|
+
REPORT_ROW_DROPPED_CRATE="Сброшен ящик для %s, %dкг",
|
|
83453
|
+
REPORT_ROW_CRATE_KG="Ящик для %s, %dкг",
|
|
83454
|
+
REPORT_ROW_CRATE_REMOVED="Ящик для %s, %dкг удален",
|
|
83455
|
+
REPORT_ROW_UNIT_STOCK="Юнит: %s | Солдаты: %d | Запас: %s",
|
|
83456
|
+
REPORT_ROW_TYPE_CRATE_STOCK="Тип: %s | Ящиков на комплект: %d | Запас: %s",
|
|
83457
|
+
REPORT_ROW_TYPE_STOCK="Тип: %s | Запас: %s",
|
|
83458
|
+
REPORT_ROW_BUILD_CHECK="Тип: %s | Требуется %d | Найдено %d | Можно строить %s",
|
|
83459
|
+
REPORT_ROW_REPAIR_CHECK="Тип: %s | Требуется %d | Найдено %d | Можно ремонтировать %s",
|
|
83460
|
+
REPORT_ROW_BEACON=" %s | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
|
83461
|
+
WEIGHT_LIMIT="Достигнут лимит веса",
|
|
83462
|
+
CRATE_LIMIT="Достигнут лимит ящиков",
|
|
83463
|
+
MENU_CTLD="CTLD",
|
|
83464
|
+
MENU_MANAGE_TROOPS="Управление войсками",
|
|
83465
|
+
MENU_MANAGE_CRATES="Управление ящиками",
|
|
83466
|
+
MENU_MANAGE_UNITS="Управление юнитами",
|
|
83467
|
+
MENU_LOAD_TROOPS="Загрузить войска",
|
|
83468
|
+
MENU_DROP_TROOPS="Высадить войска",
|
|
83469
|
+
MENU_DROP_ALL_TROOPS="Высадить ВСЕ войска",
|
|
83470
|
+
MENU_EXTRACT_TROOPS="Эвакуировать войска",
|
|
83471
|
+
MENU_DROP_N_TROOPS="Высадить (%d) %s",
|
|
83472
|
+
MENU_GET_CRATES="Получить ящики",
|
|
83473
|
+
MENU_GET="Получить",
|
|
83474
|
+
MENU_GET_AND_LOAD="Получить и загрузить",
|
|
83475
|
+
MENU_GET_ANYWAY="Все равно получить",
|
|
83476
|
+
MENU_PARTIALLY_LOAD="Частично загрузить",
|
|
83477
|
+
MENU_OUT_OF_STOCK="Нет в наличии",
|
|
83478
|
+
MENU_TROOP_LIMIT="Достигнут лимит войск",
|
|
83479
|
+
MENU_LOAD_CRATES="Загрузить ящики",
|
|
83480
|
+
MENU_LOAD_ALL="Загрузить ВСЕ",
|
|
83481
|
+
MENU_SHOW_LOADABLE_CRATES="Показать загружаемые ящики",
|
|
83482
|
+
MENU_NO_CRATES_FOUND_RESCAN="Ящики не найдены! Сканировать снова?",
|
|
83483
|
+
MENU_USE_C130_LOAD="Использовать систему загрузки C-130",
|
|
83484
|
+
MENU_LOAD_SINGLE="Загрузить",
|
|
83485
|
+
MENU_DROP_CRATES="Сбросить ящики",
|
|
83486
|
+
MENU_DROP_ALL_CRATES="Сбросить ВСЕ ящики",
|
|
83487
|
+
MENU_DROP="Сбросить",
|
|
83488
|
+
MENU_DROP_AND_BUILD="Сбросить и построить",
|
|
83489
|
+
MENU_DROP_N_SETS="Сбросить %d комплект%s",
|
|
83490
|
+
MENU_NO_CRATES_TO_DROP="Нет ящиков для сброса!",
|
|
83491
|
+
MENU_BUILD_CRATES="Построить из ящиков",
|
|
83492
|
+
MENU_REPAIR="Ремонт",
|
|
83493
|
+
MENU_PACK_CRATES="Упаковать ящики",
|
|
83494
|
+
MENU_PACK="Упаковать",
|
|
83495
|
+
MENU_SCAN_PACKABLE_UNITS="Сканировать упаковываемые юниты поблизости",
|
|
83496
|
+
MENU_NO_PACKABLE_UNITS_FOUND_RESCAN="Упаковываемые юниты не найдены! Сканировать снова?",
|
|
83497
|
+
MENU_PACK_ALL="Упаковать поблизости",
|
|
83498
|
+
MENU_PACK_AND_LOAD="Упаковать и загрузить",
|
|
83499
|
+
MENU_PACK_AND_LOAD_ALL="Упаковать и загрузить поблизости",
|
|
83500
|
+
MENU_PACK_AND_REMOVE="Упаковать и удалить",
|
|
83501
|
+
MENU_PACK_AND_REMOVE_ALL="Упаковать и удалить поблизости",
|
|
83502
|
+
MENU_REMOVE_CRATES="Удалить ящики",
|
|
83503
|
+
MENU_REMOVE_CRATES_NEARBY="Удалить ящики поблизости",
|
|
83504
|
+
MENU_LIST_CRATES_NEARBY="Список ящиков поблизости",
|
|
83505
|
+
MENU_CRATES_NEEDED="%d ящик%s %s (%dкг)",
|
|
83506
|
+
MENU_CRATE_SINGLE="%s (%dкг)",
|
|
83507
|
+
MENU_GET_UNITS="Получить юниты",
|
|
83508
|
+
MENU_REMOVE_UNITS_NEARBY="Удалить юниты поблизости",
|
|
83509
|
+
MENU_LIST_BOARDED_CARGO="Список груза на борту",
|
|
83510
|
+
MENU_INVENTORY="Инвентарь",
|
|
83511
|
+
MENU_LIST_ZONE_BEACONS="Список активных маяков зон",
|
|
83512
|
+
MENU_SMOKES_FLARES_BEACONS="Дымы, ракеты, маяки",
|
|
83513
|
+
MENU_SMOKE_ZONES_NEARBY="Дым в ближайших зонах",
|
|
83514
|
+
MENU_DROP_SMOKE_NOW="Сбросить дым сейчас",
|
|
83515
|
+
MENU_RED_SMOKE="Красный дым",
|
|
83516
|
+
MENU_BLUE_SMOKE="Синий дым",
|
|
83517
|
+
MENU_GREEN_SMOKE="Зеленый дым",
|
|
83518
|
+
MENU_ORANGE_SMOKE="Оранжевый дым",
|
|
83519
|
+
MENU_WHITE_SMOKE="Белый дым",
|
|
83520
|
+
MENU_FLARE_ZONES_NEARBY="Ракеты в ближайших зонах",
|
|
83521
|
+
MENU_FIRE_FLARE_NOW="Выпустить ракету сейчас",
|
|
83522
|
+
MENU_DROP_BEACON_NOW="Сбросить маяк сейчас",
|
|
83523
|
+
MENU_SHOW_FLIGHT_PARAMS="Показать параметры полета",
|
|
83524
|
+
MENU_SHOW_HOVER_PARAMS="Показать параметры висения",
|
|
83525
|
+
STOCK_NONE="нет",
|
|
83526
|
+
STOCK_UNLIMITED="без ограничений",
|
|
83527
|
+
BUILD_YES="ДА",
|
|
83528
|
+
BUILD_NO="НЕТ",
|
|
83529
|
+
},
|
|
83530
|
+
["zh-TW"]={
|
|
83531
|
+
CRATE_LOADED_GROUNDCREW="地勤已裝載貨箱 %s!",
|
|
83532
|
+
CRATE_UNLOADED_GROUNDCREW="地勤已卸載貨箱 %s!",
|
|
83533
|
+
CRATE_LOADED_ID="貨箱 ID %d(%s)已裝載!",
|
|
83534
|
+
LOADED_FULL="已裝載 %d 個 %s。",
|
|
83535
|
+
LOADED_SETS_LEFTOVER="已裝載 %d 組 %s,剩餘 %d 個貨箱。",
|
|
83536
|
+
LOADED_SETS="已裝載 %d 組 %s。",
|
|
83537
|
+
LOADED_PARTIAL="僅裝載 %d/%d 個 %s 的貨箱。",
|
|
83538
|
+
LOADED_PARTIAL_LIMIT="僅裝載 %d/%d 個 %s 的貨箱,已達載運上限!",
|
|
83539
|
+
LOADED_BATCH="已裝載 %d 個 %s。",
|
|
83540
|
+
LOADED_BATCH_PARTIAL="部分組合無法完全裝載。",
|
|
83541
|
+
DROPPED_FULL="已投放 %d 個 %s。",
|
|
83542
|
+
DROPPED_SETS_LEFTOVER="已投放 %d 組 %s,剩餘 %d 個貨箱。",
|
|
83543
|
+
DROPPED_SETS="已投放 %d 組 %s。",
|
|
83544
|
+
DROPPED_PARTIAL="已投放 %d/%d 個 %s 的貨箱。",
|
|
83545
|
+
DROPPED_INTO_ACTION="已將 %s 投入作戰!",
|
|
83546
|
+
DROPPED_BEACON="已投放 %s | FM %s MHz | VHF %s KHz | UHF %s MHz ",
|
|
83547
|
+
CRATES_POSITIONED="已在你附近部署 %d 個 %s 貨箱!",
|
|
83548
|
+
CRATES_DROPPED="已投放 %d 個 %s 貨箱!",
|
|
83549
|
+
BOARDED="%s 已登機!",
|
|
83550
|
+
BOARDING="%s 正在登機!",
|
|
83551
|
+
TROOPS_RETURNED="部隊已返回基地!",
|
|
83552
|
+
TROOPS_LABEL="部隊",
|
|
83553
|
+
ENGINEERS_LABEL="工程兵",
|
|
83554
|
+
DEPLOYED_NEAR_YOU="%s 已在你附近部署!",
|
|
83555
|
+
UNITS_REMOVED="%s 已移除",
|
|
83556
|
+
BUILD_STARTED="建設開始,將於%d 秒後完成!",
|
|
83557
|
+
REPAIR_STARTED="使用 %s 開始維修,需時 %d 秒",
|
|
83558
|
+
NO_UNIT_TO_REPAIR="附近沒有可維修單位!",
|
|
83559
|
+
CANT_REPAIR_WITH="無法使用 %s 維修此單位",
|
|
83560
|
+
CRATES_MOVE_BEFORE_BUILD="*** 建設前需先移動貨箱!",
|
|
83561
|
+
CHOPPER_CANNOT_CARRY="此直升機無法運載貨箱!",
|
|
83562
|
+
TOO_HEAVY="重量過重,無法裝載!",
|
|
83563
|
+
FULLY_LOADED="已達滿載!",
|
|
83564
|
+
CRAMMED="空間已滿!",
|
|
83565
|
+
NO_CAPACITY_NOW="目前無法再裝載!",
|
|
83566
|
+
NO_MORE_CAPACITY="已無空間裝載貨箱!",
|
|
83567
|
+
CANNOT_LOAD_NONE_OR_FULL="無法裝載貨箱:未找到或已無容量。",
|
|
83568
|
+
NEED_TO_LAND_OR_HOVER_LOAD="需降落或穩定懸停才能裝載!",
|
|
83569
|
+
HOVER_OVER_CRATES="請懸停於貨箱上方進行拾取!",
|
|
83570
|
+
LAND_OR_HOVER_OVER_CRATES="請降落或懸停於貨箱上方進行拾取!",
|
|
83571
|
+
MUST_LAND_OR_HOVER_CRATES="必須降落或懸停才能裝載貨箱!",
|
|
83572
|
+
NEED_TO_LAND_BUILD="飛行員,需降落或停止才能建設!",
|
|
83573
|
+
NOT_CLOSE_ENOUGH_LOGISTICS="距離後勤區域過遠!",
|
|
83574
|
+
NOT_CLOSE_ENOUGH_DROP="距離投放區域過遠!",
|
|
83575
|
+
NOT_CLOSE_ENOUGH_ZONE_NM="距離區域需小於 %d 海浬!",
|
|
83576
|
+
CANNOT_BUILD_LOADING_AREA="無法在裝載區域進行建設!",
|
|
83577
|
+
OPEN_DOORS_LOAD_CARGO="需開啟艙門才能裝載貨物!",
|
|
83578
|
+
OPEN_DOORS_LOAD_TROOPS="需開啟艙門才能裝載部隊!",
|
|
83579
|
+
OPEN_DOORS_EXTRACT_TROOPS="需開啟艙門才能撤離部隊!",
|
|
83580
|
+
OPEN_DOORS_UNLOAD_TROOPS="需開啟艙門才能卸載部隊!",
|
|
83581
|
+
OPEN_DOORS_DROP_CARGO="需開啟艙門才能投放貨物!",
|
|
83582
|
+
ALL_GONE="%s 已全部耗盡!",
|
|
83583
|
+
RAN_OUT_OF="%s 已用盡",
|
|
83584
|
+
CARGO_NOT_AVAILABLE_ZONE="此區域無法取得該貨物!",
|
|
83585
|
+
ENOUGH_CRATES_NEARBY="附近已有足夠貨箱,請先處理現有貨箱!",
|
|
83586
|
+
NO_CRATES_WITHIN="%d 公尺內沒有可裝載貨箱!",
|
|
83587
|
+
NO_CRATES_WITHIN_PLAIN="%d 公尺內沒有貨箱!",
|
|
83588
|
+
NO_CRATES_IN_RANGE="範圍內未發現貨箱!",
|
|
83589
|
+
NO_NAMED_CRATES_IN_RANGE="範圍內未發現「%s」貨箱!",
|
|
83590
|
+
NO_LOADABLE_CRATES="附近沒有可裝載貨箱或已達重量上限!",
|
|
83591
|
+
NO_UNITS_TO_EXTRACT="附近沒有可撤離單位!",
|
|
83592
|
+
NO_UNIT_CONFIG="未找到 %s 的單位設定",
|
|
83593
|
+
CANT_ONBOARD="無法登載 %s",
|
|
83594
|
+
TOO_MANY_UNITS_NEARBY="附近已有 %d 個單位!",
|
|
83595
|
+
NO_CRATE_GROUPS="未找到此單位的貨箱群組!",
|
|
83596
|
+
NO_CRATE_SET="未找到貨箱組或索引無效!",
|
|
83597
|
+
NO_CRATE_IN_SET="該組中沒有貨箱!",
|
|
83598
|
+
NO_TROOP_CHUNK="未找到 ID %d 的部隊資料!",
|
|
83599
|
+
TROOP_CHUNK_EMPTY="ID %d 的部隊資料為空!",
|
|
83600
|
+
NOTHING_LOADED="未裝載任何內容!\n部隊上限:%d | 貨箱上限 %d | 重量上限 %d 公斤",
|
|
83601
|
+
NOTHING_LOADED_AIRDROP="未裝載或不符合空投條件!",
|
|
83602
|
+
NOTHING_LOADED_HOVER="未裝載或未達懸停條件!",
|
|
83603
|
+
NOTHING_IN_STOCK="庫存為空!",
|
|
83604
|
+
NOTHING_TO_PACK="此距離內無可打包目標!",
|
|
83605
|
+
NOTHING_TO_REMOVE="此距離內無可移除目標!",
|
|
83606
|
+
ROGER_ZONE="收到,%s 區域 %s!",
|
|
83607
|
+
HOVER_PARAMS_METRIC="懸停參數(自動裝載/投放):\n - 最低高度 %d 公尺 \n - 最高高度 %d 公尺 \n - 最大速度 2 公尺/秒 \n - 是否符合:%s",
|
|
83608
|
+
HOVER_PARAMS_IMPERIAL="懸停參數(自動裝載/投放):\n - 最低高度 %d 英尺 \n - 最高高度 %d 英尺 \n - 最大速度 6 英尺/秒 \n - 是否符合:%s",
|
|
83609
|
+
FLIGHT_PARAMS_IMPERIAL="飛行參數(空投):\n - 最低高度 %d 英尺 \n - 最高高度 %d 英尺 \n - 是否符合:%s",
|
|
83610
|
+
FLIGHT_PARAMS_METRIC="飛行參數(空投):\n - 最低高度 %d 公尺 \n - 最高高度 %d 公尺 \n - 是否符合:%s",
|
|
83611
|
+
REPORT_CRATES_FOUND="附近發現貨箱:",
|
|
83612
|
+
REPORT_REMOVING_CRATES="移除附近貨箱:",
|
|
83613
|
+
REPORT_TRANSPORT_CHECKOUT="運輸檢查表",
|
|
83614
|
+
REPORT_INVENTORY="庫存報表",
|
|
83615
|
+
REPORT_BUILD_CHECKLIST="建設檢查清單",
|
|
83616
|
+
REPORT_REPAIR_CHECKLIST="維修檢查清單",
|
|
83617
|
+
REPORT_BEACONS="區域信標狀態",
|
|
83618
|
+
REPORT_SECTION_TROOPS=" -- 部隊 --",
|
|
83619
|
+
REPORT_SECTION_CRATES=" -- 貨箱 --",
|
|
83620
|
+
REPORT_SECTION_CRATES_GC=" -- 地勤裝載貨箱 --",
|
|
83621
|
+
REPORT_SECTION_NONE=" 無",
|
|
83622
|
+
REPORT_SECTION_NONE_ALT=" --- 未發現 ---",
|
|
83623
|
+
REPORT_SECTION_NONE_REPAIR=" --- 未發現 ---",
|
|
83624
|
+
REPORT_GC_LOADABLE_HINT="可能可由地勤裝載(F8)",
|
|
83625
|
+
REPORT_TOTAL_MASS="總重量:%s 公斤,可裝載:%s 公斤",
|
|
83626
|
+
REPORT_TROOPS_CRATES_COUNT="部隊:%d(%d),貨箱:%d(%d)",
|
|
83627
|
+
REPORT_TROOPS_CRATETYPES_COUNT="部隊:%d,貨箱種類:%d",
|
|
83628
|
+
REPORT_ROW_TROOP="部隊:%s 人數 %d",
|
|
83629
|
+
REPORT_ROW_CRATE="貨箱:%s %d/%d",
|
|
83630
|
+
REPORT_ROW_CRATE_SIZE1="貨箱:%s 尺寸 1",
|
|
83631
|
+
REPORT_ROW_GC_CRATE="地勤裝載貨箱:%s 尺寸 1",
|
|
83632
|
+
REPORT_ROW_DROPPED_CRATE="已投放 %s 貨箱,%d 公斤",
|
|
83633
|
+
REPORT_ROW_CRATE_KG="%s 貨箱,%d 公斤",
|
|
83634
|
+
REPORT_ROW_CRATE_REMOVED="%s 貨箱,%d 公斤 已移除",
|
|
83635
|
+
REPORT_ROW_UNIT_STOCK="單位:%s | 士兵:%d | 庫存:%s",
|
|
83636
|
+
REPORT_ROW_TYPE_CRATE_STOCK="類型:%s | 每組貨箱:%d | 庫存:%s",
|
|
83637
|
+
REPORT_ROW_TYPE_STOCK="類型:%s | 庫存:%s",
|
|
83638
|
+
REPORT_ROW_BUILD_CHECK="類型:%s | 需求 %d | 已有 %d | 可建設 %s",
|
|
83639
|
+
REPORT_ROW_REPAIR_CHECK="類型:%s | 需求 %d | 已有 %d | 可維修 %s",
|
|
83640
|
+
REPORT_ROW_BEACON=" %s | FM %s MHz | VHF %s KHz | UHF %s MHz ",
|
|
83641
|
+
WEIGHT_LIMIT="已達重量上限",
|
|
83642
|
+
CRATE_LIMIT="已達貨箱上限",
|
|
83643
|
+
MENU_CTLD="後勤管理(CTLD)",
|
|
83644
|
+
MENU_MANAGE_TROOPS="部隊管理",
|
|
83645
|
+
MENU_MANAGE_CRATES="貨箱管理",
|
|
83646
|
+
MENU_MANAGE_UNITS="單位管理",
|
|
83647
|
+
MENU_LOAD_TROOPS="裝載部隊",
|
|
83648
|
+
MENU_DROP_TROOPS="投放部隊",
|
|
83649
|
+
MENU_DROP_ALL_TROOPS="投放全部部隊",
|
|
83650
|
+
MENU_EXTRACT_TROOPS="撤離部隊",
|
|
83651
|
+
MENU_DROP_N_TROOPS="投放 (%d) %s",
|
|
83652
|
+
MENU_GET_CRATES="取得貨箱",
|
|
83653
|
+
MENU_GET="取得",
|
|
83654
|
+
MENU_GET_AND_LOAD="取得並裝載",
|
|
83655
|
+
MENU_GET_ANYWAY="強制取得",
|
|
83656
|
+
MENU_PARTIALLY_LOAD="部分裝載",
|
|
83657
|
+
MENU_OUT_OF_STOCK="無庫存",
|
|
83658
|
+
MENU_TROOP_LIMIT="已達部隊上限",
|
|
83659
|
+
MENU_LOAD_CRATES="裝載貨箱",
|
|
83660
|
+
MENU_LOAD_ALL="全部裝載",
|
|
83661
|
+
MENU_SHOW_LOADABLE_CRATES="顯示可裝載貨箱",
|
|
83662
|
+
MENU_NO_CRATES_FOUND_RESCAN="未發現貨箱,重新掃描?",
|
|
83663
|
+
MENU_USE_C130_LOAD="使用 C-130 裝載系統",
|
|
83664
|
+
MENU_LOAD_SINGLE="裝載",
|
|
83665
|
+
MENU_DROP_CRATES="投放貨箱",
|
|
83666
|
+
MENU_DROP_ALL_CRATES="投放全部貨箱",
|
|
83667
|
+
MENU_DROP="投放",
|
|
83668
|
+
MENU_DROP_AND_BUILD="投放並建設",
|
|
83669
|
+
MENU_DROP_N_SETS="投放 %d 組%s",
|
|
83670
|
+
MENU_NO_CRATES_TO_DROP="沒有可投放貨箱",
|
|
83671
|
+
MENU_BUILD_CRATES="建設貨箱",
|
|
83672
|
+
MENU_REPAIR="維修",
|
|
83673
|
+
MENU_PACK_CRATES="打包貨箱",
|
|
83674
|
+
MENU_PACK="打包",
|
|
83675
|
+
MENU_SCAN_PACKABLE_UNITS="掃描可打包單位",
|
|
83676
|
+
MENU_NO_PACKABLE_UNITS_FOUND_RESCAN="未發現可打包單位,重新掃描?",
|
|
83677
|
+
MENU_PACK_ALL="打包附近",
|
|
83678
|
+
MENU_PACK_AND_LOAD="打包並裝載",
|
|
83679
|
+
MENU_PACK_AND_LOAD_ALL="打包並裝載附近",
|
|
83680
|
+
MENU_PACK_AND_REMOVE="打包並移除",
|
|
83681
|
+
MENU_PACK_AND_REMOVE_ALL="打包並移除附近",
|
|
83682
|
+
MENU_REMOVE_CRATES="移除貨箱",
|
|
83683
|
+
MENU_REMOVE_CRATES_NEARBY="移除附近貨箱",
|
|
83684
|
+
MENU_LIST_CRATES_NEARBY="列出附近貨箱",
|
|
83685
|
+
MENU_CRATES_NEEDED="%d 個貨箱%s %s(%d 公斤)",
|
|
83686
|
+
MENU_CRATE_SINGLE="%s(%d 公斤)",
|
|
83687
|
+
MENU_GET_UNITS="取得單位",
|
|
83688
|
+
MENU_REMOVE_UNITS_NEARBY="移除附近單位",
|
|
83689
|
+
MENU_LIST_BOARDED_CARGO="查看已裝載貨物",
|
|
83690
|
+
MENU_INVENTORY="庫存",
|
|
83691
|
+
MENU_LIST_ZONE_BEACONS="列出區域信標",
|
|
83692
|
+
MENU_SMOKES_FLARES_BEACONS="煙霧、照明彈、信標",
|
|
83693
|
+
MENU_SMOKE_ZONES_NEARBY="標記附近區域",
|
|
83694
|
+
MENU_DROP_SMOKE_NOW="立即投放煙霧",
|
|
83695
|
+
MENU_RED_SMOKE="紅色煙霧",
|
|
83696
|
+
MENU_BLUE_SMOKE="藍色煙霧",
|
|
83697
|
+
MENU_GREEN_SMOKE="綠色煙霧",
|
|
83698
|
+
MENU_ORANGE_SMOKE="橙色煙霧",
|
|
83699
|
+
MENU_WHITE_SMOKE="白色煙霧",
|
|
83700
|
+
MENU_FLARE_ZONES_NEARBY="標記附近區域(照明彈)",
|
|
83701
|
+
MENU_FIRE_FLARE_NOW="立即發射照明彈",
|
|
83702
|
+
MENU_DROP_BEACON_NOW="立即投放信標",
|
|
83703
|
+
MENU_SHOW_FLIGHT_PARAMS="顯示飛行參數",
|
|
83704
|
+
MENU_SHOW_HOVER_PARAMS="顯示懸停參數",
|
|
83705
|
+
STOCK_NONE="無",
|
|
83706
|
+
STOCK_UNLIMITED="無限制",
|
|
83707
|
+
BUILD_YES="是",
|
|
83708
|
+
BUILD_NO="否",
|
|
83709
|
+
},
|
|
83710
|
+
["zh-CN"]={
|
|
83711
|
+
CRATE_LOADED_GROUNDCREW="地勤已装载货箱 %s!",
|
|
83712
|
+
CRATE_UNLOADED_GROUNDCREW="地勤已卸载货箱 %s!",
|
|
83713
|
+
CRATE_LOADED_ID="货箱 ID %d(%s)已装载!",
|
|
83714
|
+
LOADED_FULL="已装载 %d 个 %s。",
|
|
83715
|
+
LOADED_SETS_LEFTOVER="已装载 %d 组 %s,剩余 %d 个货箱。",
|
|
83716
|
+
LOADED_SETS="已装载 %d 组 %s。",
|
|
83717
|
+
LOADED_PARTIAL="仅装载 %d/%d 个 %s 的货箱。",
|
|
83718
|
+
LOADED_PARTIAL_LIMIT="仅装载 %d/%d 个 %s 的货箱,已达到载重上限!",
|
|
83719
|
+
LOADED_BATCH="已装载 %d 个 %s。",
|
|
83720
|
+
LOADED_BATCH_PARTIAL="部分组合未能完整装载。",
|
|
83721
|
+
DROPPED_FULL="已投放 %d 个 %s。",
|
|
83722
|
+
DROPPED_SETS_LEFTOVER="已投放 %d 组 %s,剩余 %d 个货箱。",
|
|
83723
|
+
DROPPED_SETS="已投放 %d 组 %s。",
|
|
83724
|
+
DROPPED_PARTIAL="已投放 %d/%d 个 %s 的货箱。",
|
|
83725
|
+
DROPPED_INTO_ACTION="已将 %s 投入作战!",
|
|
83726
|
+
DROPPED_BEACON="已投放 %s | FM %s MHz | VHF %s KHz | UHF %s MHz ",
|
|
83727
|
+
CRATES_POSITIONED="已在你附近部署 %d 个 %s 货箱!",
|
|
83728
|
+
CRATES_DROPPED="已投放 %d 个 %s 货箱!",
|
|
83729
|
+
BOARDED="%s 已登机!",
|
|
83730
|
+
BOARDING="%s 正在登机!",
|
|
83731
|
+
TROOPS_RETURNED="部队已返回基地!",
|
|
83732
|
+
TROOPS_LABEL="部队",
|
|
83733
|
+
ENGINEERS_LABEL="工兵",
|
|
83734
|
+
DEPLOYED_NEAR_YOU="%s 已在你附近部署!",
|
|
83735
|
+
UNITS_REMOVED="%s 已移除",
|
|
83736
|
+
BUILD_STARTED="开始建造,%d 秒后完成!",
|
|
83737
|
+
REPAIR_STARTED="使用 %s 开始维修,耗时 %d 秒",
|
|
83738
|
+
NO_UNIT_TO_REPAIR="附近没有可维修单位!",
|
|
83739
|
+
CANT_REPAIR_WITH="无法使用 %s 修复该单位",
|
|
83740
|
+
CRATES_MOVE_BEFORE_BUILD="*** 建造前请先移动货箱!",
|
|
83741
|
+
CHOPPER_CANNOT_CARRY="该直升机无法运输货箱!",
|
|
83742
|
+
TOO_HEAVY="重量超限,无法装载!",
|
|
83743
|
+
FULLY_LOADED="已满载!",
|
|
83744
|
+
CRAMMED="空间已满!",
|
|
83745
|
+
NO_CAPACITY_NOW="当前无法继续装载!",
|
|
83746
|
+
NO_MORE_CAPACITY="没有剩余空间可装载货箱!",
|
|
83747
|
+
CANNOT_LOAD_NONE_OR_FULL="无法装载货箱:未找到或已满载。",
|
|
83748
|
+
NEED_TO_LAND_OR_HOVER_LOAD="需要降落或稳定悬停才能装载!",
|
|
83749
|
+
HOVER_OVER_CRATES="请在货箱上方悬停进行拾取!",
|
|
83750
|
+
LAND_OR_HOVER_OVER_CRATES="请降落或在货箱上方悬停进行拾取!",
|
|
83751
|
+
MUST_LAND_OR_HOVER_CRATES="必须降落或悬停才能装载货箱!",
|
|
83752
|
+
NEED_TO_LAND_BUILD="飞行员,请降落或停止后再建造!",
|
|
83753
|
+
NOT_CLOSE_ENOUGH_LOGISTICS="距离后勤区域过远!",
|
|
83754
|
+
NOT_CLOSE_ENOUGH_DROP="距离投放区域过远!",
|
|
83755
|
+
NOT_CLOSE_ENOUGH_ZONE_NM="距离区域必须小于 %d 海里!",
|
|
83756
|
+
CANNOT_BUILD_LOADING_AREA="无法在装载区域建造!",
|
|
83757
|
+
OPEN_DOORS_LOAD_CARGO="需要打开舱门才能装载货物!",
|
|
83758
|
+
OPEN_DOORS_LOAD_TROOPS="需要打开舱门才能装载部队!",
|
|
83759
|
+
OPEN_DOORS_EXTRACT_TROOPS="需要打开舱门才能撤离部队!",
|
|
83760
|
+
OPEN_DOORS_UNLOAD_TROOPS="需要打开舱门才能卸载部队!",
|
|
83761
|
+
OPEN_DOORS_DROP_CARGO="需要打开舱门才能投放货物!",
|
|
83762
|
+
ALL_GONE="%s 已全部耗尽!",
|
|
83763
|
+
RAN_OUT_OF="%s 已用完",
|
|
83764
|
+
CARGO_NOT_AVAILABLE_ZONE="该区域无法获取此类货物!",
|
|
83765
|
+
ENOUGH_CRATES_NEARBY="附近已有足够货箱,请先处理现有货箱!",
|
|
83766
|
+
NO_CRATES_WITHIN="%d 米内没有可装载货箱!",
|
|
83767
|
+
NO_CRATES_WITHIN_PLAIN="%d 米内没有货箱!",
|
|
83768
|
+
NO_CRATES_IN_RANGE="范围内未发现货箱!",
|
|
83769
|
+
NO_NAMED_CRATES_IN_RANGE="范围内未发现“%s”货箱!",
|
|
83770
|
+
NO_LOADABLE_CRATES="附近没有可装载货箱或已超重!",
|
|
83771
|
+
NO_UNITS_TO_EXTRACT="附近没有可撤离单位!",
|
|
83772
|
+
NO_UNIT_CONFIG="未找到 %s 的单位配置",
|
|
83773
|
+
CANT_ONBOARD="无法装载 %s",
|
|
83774
|
+
TOO_MANY_UNITS_NEARBY="附近已有 %d 个单位!",
|
|
83775
|
+
NO_CRATE_GROUPS="未找到该单位对应的货箱组!",
|
|
83776
|
+
NO_CRATE_SET="未找到货箱组或索引无效!",
|
|
83777
|
+
NO_CRATE_IN_SET="该组中没有货箱!",
|
|
83778
|
+
NO_TROOP_CHUNK="未找到 ID %d 的部队数据!",
|
|
83779
|
+
TROOP_CHUNK_EMPTY="ID %d 的部队数据为空!",
|
|
83780
|
+
NOTHING_LOADED="未装载任何内容!\n部队上限:%d | 货箱上限 %d | 重量上限 %d 公斤",
|
|
83781
|
+
NOTHING_LOADED_AIRDROP="未装载或不满足空投条件!",
|
|
83782
|
+
NOTHING_LOADED_HOVER="未装载或未满足悬停条件!",
|
|
83783
|
+
NOTHING_IN_STOCK="库存为空!",
|
|
83784
|
+
NOTHING_TO_PACK="该范围内没有可打包目标!",
|
|
83785
|
+
NOTHING_TO_REMOVE="该范围内没有可移除目标!",
|
|
83786
|
+
ROGER_ZONE="收到,%s 区域 %s!",
|
|
83787
|
+
HOVER_PARAMS_METRIC="悬停参数(自动装载/投放):\n - 最低高度 %d 米 \n - 最高高度 %d 米 \n - 最大速度 2 米/秒 \n - 是否符合条件:%s",
|
|
83788
|
+
HOVER_PARAMS_IMPERIAL="悬停参数(自动装载/投放):\n - 最低高度 %d 英尺 \n - 最高高度 %d 英尺 \n - 最大速度 6 英尺/秒 \n - 是否符合条件:%s",
|
|
83789
|
+
FLIGHT_PARAMS_IMPERIAL="飞行参数(空投):\n - 最低高度 %d 英尺 \n - 最高高度 %d 英尺 \n - 是否符合条件:%s",
|
|
83790
|
+
FLIGHT_PARAMS_METRIC="飞行参数(空投):\n - 最低高度 %d 米 \n - 最高高度 %d 米 \n - 是否符合条件:%s",
|
|
83791
|
+
REPORT_CRATES_FOUND="附近发现货箱:",
|
|
83792
|
+
REPORT_REMOVING_CRATES="删除附近货箱:",
|
|
83793
|
+
REPORT_TRANSPORT_CHECKOUT="运输检查表",
|
|
83794
|
+
REPORT_INVENTORY="库存报表",
|
|
83795
|
+
REPORT_BUILD_CHECKLIST="建造检查清单",
|
|
83796
|
+
REPORT_REPAIR_CHECKLIST="维修检查清单",
|
|
83797
|
+
REPORT_BEACONS="区域信标状态",
|
|
83798
|
+
REPORT_SECTION_TROOPS=" -- 部队 --",
|
|
83799
|
+
REPORT_SECTION_CRATES=" -- 货箱 --",
|
|
83800
|
+
REPORT_SECTION_CRATES_GC=" -- 地勤装载货箱 --",
|
|
83801
|
+
REPORT_SECTION_NONE=" 无",
|
|
83802
|
+
REPORT_SECTION_NONE_ALT=" --- 未发现 ---",
|
|
83803
|
+
REPORT_SECTION_NONE_REPAIR=" --- 未发现 ---",
|
|
83804
|
+
REPORT_GC_LOADABLE_HINT="可能可由地勤装载(F8)",
|
|
83805
|
+
REPORT_TOTAL_MASS="总重量:%s 公斤,可装载:%s 公斤",
|
|
83806
|
+
REPORT_TROOPS_CRATES_COUNT="部队:%d(%d),货箱:%d(%d)",
|
|
83807
|
+
REPORT_TROOPS_CRATETYPES_COUNT="部队:%d,货箱种类:%d",
|
|
83808
|
+
REPORT_ROW_TROOP="部队:%s 人数 %d",
|
|
83809
|
+
REPORT_ROW_CRATE="货箱:%s %d/%d",
|
|
83810
|
+
REPORT_ROW_CRATE_SIZE1="货箱:%s 尺寸 1",
|
|
83811
|
+
REPORT_ROW_GC_CRATE="地勤装载货箱:%s 尺寸 1",
|
|
83812
|
+
REPORT_ROW_DROPPED_CRATE="已投放 %s 货箱,%d 公斤",
|
|
83813
|
+
REPORT_ROW_CRATE_KG="%s 货箱,%d 公斤",
|
|
83814
|
+
REPORT_ROW_CRATE_REMOVED="%s 货箱,%d 公斤 已移除",
|
|
83815
|
+
REPORT_ROW_UNIT_STOCK="单位:%s | 士兵:%d | 库存:%s",
|
|
83816
|
+
REPORT_ROW_TYPE_CRATE_STOCK="类型:%s | 每组货箱:%d | 库存:%s",
|
|
83817
|
+
REPORT_ROW_TYPE_STOCK="类型:%s | 库存:%s",
|
|
83818
|
+
REPORT_ROW_BUILD_CHECK="类型:%s | 需求 %d | 已有 %d | 可建造 %s",
|
|
83819
|
+
REPORT_ROW_REPAIR_CHECK="类型:%s | 需求 %d | 已有 %d | 可维修 %s",
|
|
83820
|
+
REPORT_ROW_BEACON=" %s | FM %s MHz | VHF %s KHz | UHF %s MHz ",
|
|
83821
|
+
WEIGHT_LIMIT="已达重量上限",
|
|
83822
|
+
CRATE_LIMIT="已达货箱上限",
|
|
83823
|
+
MENU_CTLD="后勤系统(CTLD)",
|
|
83824
|
+
MENU_MANAGE_TROOPS="部队管理",
|
|
83825
|
+
MENU_MANAGE_CRATES="货箱管理",
|
|
83826
|
+
MENU_MANAGE_UNITS="单位管理",
|
|
83827
|
+
MENU_LOAD_TROOPS="装载部队",
|
|
83828
|
+
MENU_DROP_TROOPS="投放部队",
|
|
83829
|
+
MENU_DROP_ALL_TROOPS="投放全部部队",
|
|
83830
|
+
MENU_EXTRACT_TROOPS="撤离部队",
|
|
83831
|
+
MENU_DROP_N_TROOPS="投放 (%d) %s",
|
|
83832
|
+
MENU_GET_CRATES="获取货箱",
|
|
83833
|
+
MENU_GET="获取",
|
|
83834
|
+
MENU_GET_AND_LOAD="获取并装载",
|
|
83835
|
+
MENU_GET_ANYWAY="强制获取",
|
|
83836
|
+
MENU_PARTIALLY_LOAD="部分装载",
|
|
83837
|
+
MENU_OUT_OF_STOCK="无库存",
|
|
83838
|
+
MENU_TROOP_LIMIT="已达部队上限",
|
|
83839
|
+
MENU_LOAD_CRATES="装载货箱",
|
|
83840
|
+
MENU_LOAD_ALL="全部装载",
|
|
83841
|
+
MENU_SHOW_LOADABLE_CRATES="显示可装载货箱",
|
|
83842
|
+
MENU_NO_CRATES_FOUND_RESCAN="未检测到货箱,是否重新扫描?",
|
|
83843
|
+
MENU_USE_C130_LOAD="使用 C-130 装载系统",
|
|
83844
|
+
MENU_LOAD_SINGLE="装载",
|
|
83845
|
+
MENU_DROP_CRATES="投放货箱",
|
|
83846
|
+
MENU_DROP_ALL_CRATES="投放全部货箱",
|
|
83847
|
+
MENU_DROP="投放",
|
|
83848
|
+
MENU_DROP_AND_BUILD="投放并建造",
|
|
83849
|
+
MENU_DROP_N_SETS="投放 %d 组%s",
|
|
83850
|
+
MENU_NO_CRATES_TO_DROP="无可投放货箱",
|
|
83851
|
+
MENU_BUILD_CRATES="建造货箱",
|
|
83852
|
+
MENU_REPAIR="维修",
|
|
83853
|
+
MENU_PACK_CRATES="打包货箱",
|
|
83854
|
+
MENU_PACK="打包",
|
|
83855
|
+
MENU_SCAN_PACKABLE_UNITS="扫描可打包单位",
|
|
83856
|
+
MENU_NO_PACKABLE_UNITS_FOUND_RESCAN="未发现可打包单位,重新扫描?",
|
|
83857
|
+
MENU_PACK_ALL="打包附近单位",
|
|
83858
|
+
MENU_PACK_AND_LOAD="打包并装载",
|
|
83859
|
+
MENU_PACK_AND_LOAD_ALL="打包并装载附近",
|
|
83860
|
+
MENU_PACK_AND_REMOVE="打包并移除",
|
|
83861
|
+
MENU_PACK_AND_REMOVE_ALL="打包并移除附近",
|
|
83862
|
+
MENU_REMOVE_CRATES="移除货箱",
|
|
83863
|
+
MENU_REMOVE_CRATES_NEARBY="删除附近货箱",
|
|
83864
|
+
MENU_LIST_CRATES_NEARBY="显示附近货箱",
|
|
83865
|
+
MENU_CRATES_NEEDED="%d 个货箱%s %s(%d 公斤)",
|
|
83866
|
+
MENU_CRATE_SINGLE="%s(%d 公斤)",
|
|
83867
|
+
MENU_GET_UNITS="获取单位",
|
|
83868
|
+
MENU_REMOVE_UNITS_NEARBY="移除附近单位",
|
|
83869
|
+
MENU_LIST_BOARDED_CARGO="查看已装载货物",
|
|
83870
|
+
MENU_INVENTORY="库存",
|
|
83871
|
+
MENU_LIST_ZONE_BEACONS="显示区域信标",
|
|
83872
|
+
MENU_SMOKES_FLARES_BEACONS="烟雾、照明弹、信标",
|
|
83873
|
+
MENU_SMOKE_ZONES_NEARBY="标记附近区域",
|
|
83874
|
+
MENU_DROP_SMOKE_NOW="立即释放烟雾",
|
|
83875
|
+
MENU_RED_SMOKE="红色烟雾",
|
|
83876
|
+
MENU_BLUE_SMOKE="蓝色烟雾",
|
|
83877
|
+
MENU_GREEN_SMOKE="绿色烟雾",
|
|
83878
|
+
MENU_ORANGE_SMOKE="橙色烟雾",
|
|
83879
|
+
MENU_WHITE_SMOKE="白色烟雾",
|
|
83880
|
+
MENU_FLARE_ZONES_NEARBY="标记附近区域(照明弹)",
|
|
83881
|
+
MENU_FIRE_FLARE_NOW="立即发射照明弹",
|
|
83882
|
+
MENU_DROP_BEACON_NOW="立即投放信标",
|
|
83883
|
+
MENU_SHOW_FLIGHT_PARAMS="显示飞行参数",
|
|
83884
|
+
MENU_SHOW_HOVER_PARAMS="显示悬停参数",
|
|
83885
|
+
STOCK_NONE="无",
|
|
83886
|
+
STOCK_UNLIMITED="无限制",
|
|
83887
|
+
BUILD_YES="是",
|
|
83888
|
+
BUILD_NO="否",
|
|
83889
|
+
},
|
|
82876
83890
|
}
|
|
82877
83891
|
do
|
|
82878
83892
|
CTLD_HERCULES={
|
|
@@ -83474,6 +84488,9 @@ CSAR.AircraftType["OH58D"]=2
|
|
|
83474
84488
|
CSAR.AircraftType["CH-47Fbl1"]=31
|
|
83475
84489
|
CSAR.AircraftType["AH-6J"]=2
|
|
83476
84490
|
CSAR.AircraftType["MH-6J"]=2
|
|
84491
|
+
CSAR.AircraftType["Ka-50_3"]=0
|
|
84492
|
+
CSAR.AircraftType["Ka-50"]=0
|
|
84493
|
+
CSAR.AircraftType["AV8BNA"]=0
|
|
83477
84494
|
CSAR.version="1.1.39"
|
|
83478
84495
|
function CSAR:New(Coalition,Template,Alias)
|
|
83479
84496
|
local self=BASE:Inherit(self,FSM:New())
|
|
@@ -84828,11 +85845,14 @@ for _key,_group in pairs(_allHeliGroups)do
|
|
|
84828
85845
|
local _unit=_group:GetFirstUnitAlive()
|
|
84829
85846
|
if _unit then
|
|
84830
85847
|
if _unit:IsAlive()and _unit:IsPlayer()then
|
|
85848
|
+
local _maxUnits=self.AircraftType[_unit:GetTypeName()]
|
|
85849
|
+
if _maxUnits==nil or _maxUnits>0 then
|
|
84831
85850
|
local unitName=_unit:GetName()
|
|
84832
85851
|
_UnitList[unitName]=unitName
|
|
84833
85852
|
end
|
|
84834
85853
|
end
|
|
84835
85854
|
end
|
|
85855
|
+
end
|
|
84836
85856
|
self.csarUnits=_UnitList
|
|
84837
85857
|
for _,_unitName in pairs(self.csarUnits)do
|
|
84838
85858
|
local _unit=self:_GetSARHeli(_unitName)
|
|
@@ -89995,7 +91015,7 @@ local ScanUnitSet=self.engageZone:GetScannedSetUnit()
|
|
|
89995
91015
|
local SeadUnitSet=SET_UNIT:New()
|
|
89996
91016
|
for _,_unit in pairs(ScanUnitSet.Set)do
|
|
89997
91017
|
local unit=_unit
|
|
89998
|
-
if unit and unit:IsAlive()and unit:HasSEAD()then
|
|
91018
|
+
if unit and unit:IsAlive()and unit.HasSEAD and unit:HasSEAD()then
|
|
89999
91019
|
self:T("Adding UNIT for SEAD: "..unit:GetName())
|
|
90000
91020
|
local task=CONTROLLABLE.TaskAttackUnit(nil,unit,GroupAttack,AI.Task.WeaponExpend.ALL,1,Direction,self.engageAltitude,2956984318)
|
|
90001
91021
|
table.insert(DCStasks,task)
|
|
@@ -123551,7 +124571,7 @@ TARS_SESSION={}
|
|
|
123551
124571
|
TARS_SESSION.debug=false
|
|
123552
124572
|
TARS_SESSION.debugunitsearch=false
|
|
123553
124573
|
TARS={}
|
|
123554
|
-
TARS.version="v2.
|
|
124574
|
+
TARS.version="v2.3.1"
|
|
123555
124575
|
TARS.locale=TARS.locale or"en"
|
|
123556
124576
|
TARS.debug=false
|
|
123557
124577
|
TARS.mooseScoring=true
|
|
@@ -123559,7 +124579,8 @@ TARS.valueScoring=100
|
|
|
123559
124579
|
TARS.landingDelay=30
|
|
123560
124580
|
TARS.debriefDelay=60
|
|
123561
124581
|
TARS.landingDistance=2500
|
|
123562
|
-
TARS.
|
|
124582
|
+
TARS.PilotParameterHelper=false
|
|
124583
|
+
TARS._vAltMin=100
|
|
123563
124584
|
TARS._vRangeMin=TARS._vAltMin*20
|
|
123564
124585
|
TARS._vAltOpti=500
|
|
123565
124586
|
TARS._vRangeOpti=TARS._vAltOpti*5
|
|
@@ -123593,22 +124614,22 @@ TARS.reconTypes={
|
|
|
123593
124614
|
["OH-6A"]=true,
|
|
123594
124615
|
}
|
|
123595
124616
|
TARS.parameters={}
|
|
123596
|
-
TARS.parameters["F-4E-45MC"]={minAlt=100,maxAlt=
|
|
123597
|
-
TARS.parameters["MiG-21Bis"]={minAlt=500,maxAlt=
|
|
123598
|
-
TARS.parameters["AJS37"]={minAlt=15,maxAlt=
|
|
123599
|
-
TARS.parameters["Mirage-F1EE"]={minAlt=1524,maxAlt=
|
|
123600
|
-
TARS.parameters["F-5E-3"]={minAlt=762,maxAlt=
|
|
123601
|
-
TARS.parameters["F-14A-135-GR"]={minAlt=750,maxAlt=
|
|
123602
|
-
TARS.parameters["F-14B"]={minAlt=228,maxAlt=
|
|
123603
|
-
TARS.parameters["TF-51D"]={minAlt=250,maxAlt=
|
|
123604
|
-
TARS.parameters["P-51D"]={minAlt=250,maxAlt=
|
|
123605
|
-
TARS.parameters["P-51D-30-NA"]={minAlt=250,maxAlt=
|
|
123606
|
-
TARS.parameters["SpitfireLFMkIX"]={minAlt=150,maxAlt=
|
|
123607
|
-
TARS.parameters["FW-190A8"]={minAlt=200,maxAlt=
|
|
123608
|
-
TARS.parameters["FW-190D9"]={minAlt=250,maxAlt=
|
|
123609
|
-
TARS.parameters["SA342M"]={minAlt=20,maxAlt=1000,maxRoll=35,maxPitch=25,fov=18,duration=350,offset=math.rad(10),name="SA342M EO/IR LIGHT RECO"}
|
|
123610
|
-
TARS.parameters["SA342L"]={minAlt=20,maxAlt=1000,maxRoll=35,maxPitch=25,fov=18,duration=350,offset=math.rad(10),name="SA342L EO/IR LIGHT RECO"}
|
|
123611
|
-
TARS.parameters["OH58D"]={minAlt=30,maxAlt=1200,maxRoll=35,maxPitch=25,fov=12,duration=350,offset=math.rad(12),name="OH-58D MMS EO/IR RECO"}
|
|
124617
|
+
TARS.parameters["F-4E-45MC"]={minAlt=100,maxAlt=8000,maxRoll=10,maxPitch=15,fov=23,duration=120,offset=math.rad(40),overlap=0.25,min_interval=3,name="RF-4E with KS-87 Forward Oblique Camera"}
|
|
124618
|
+
TARS.parameters["MiG-21Bis"]={minAlt=500,maxAlt=8000,maxRoll=10,maxPitch=15,fov=52,duration=140,offset=math.rad(40),overlap=0.25,min_interval=3,name="MiG-21R with Day recce pod"}
|
|
124619
|
+
TARS.parameters["AJS37"]={minAlt=15,maxAlt=8000,maxRoll=10,maxPitch=15,fov=25,duration=120,offset=math.rad(40),overlap=0.25,min_interval=3,name="SF 37"}
|
|
124620
|
+
TARS.parameters["Mirage-F1EE"]={minAlt=1524,maxAlt=8000,maxRoll=10,maxPitch=15,fov=20,duration=400,offset=math.rad(40),overlap=0.25,min_interval=3,name="Mirage-F1CR with Omera 33"}
|
|
124621
|
+
TARS.parameters["F-5E-3"]={minAlt=762,maxAlt=8000,maxRoll=15,maxPitch=15,fov=70,duration=300,offset=math.rad(40),overlap=0.25,min_interval=3,name="F-5E Tigereye"}
|
|
124622
|
+
TARS.parameters["F-14A-135-GR"]={minAlt=750,maxAlt=8000,maxRoll=10,maxPitch=20,fov=14,duration=400,offset=math.rad(45),overlap=0.25,min_interval=3,name="F-14A TARPS KS-87D"}
|
|
124623
|
+
TARS.parameters["F-14B"]={minAlt=228,maxAlt=8000,maxRoll=10,maxPitch=20,fov=85,duration=400,offset=math.rad(40),overlap=0.25,min_interval=3,name="F-14B TARPS KA-99A"}
|
|
124624
|
+
TARS.parameters["TF-51D"]={minAlt=250,maxAlt=2500,maxRoll=15,maxPitch=15,fov=60,duration=400,offset=math.rad(10),overlap=0.5,min_interval=5,name="TF-51D Mustang RF-51D Photo Recon"}
|
|
124625
|
+
TARS.parameters["P-51D"]={minAlt=250,maxAlt=2500,maxRoll=15,maxPitch=15,fov=60,duration=400,offset=math.rad(10),overlap=0.5,min_interval=5,name="P-51D Mustang F-6D Photo Recon"}
|
|
124626
|
+
TARS.parameters["P-51D-30-NA"]={minAlt=250,maxAlt=2500,maxRoll=15,maxPitch=15,fov=60,duration=400,offset=math.rad(10),overlap=0.5,min_interval=5,name="P-51D-30 Mustang F-6D Photo Recon"}
|
|
124627
|
+
TARS.parameters["SpitfireLFMkIX"]={minAlt=150,maxAlt=2500,maxRoll=15,maxPitch=15,fov=55,duration=350,offset=math.rad(10),overlap=0.5,min_interval=5,name="Spitfire LF Mk IX PR Recon"}
|
|
124628
|
+
TARS.parameters["FW-190A8"]={minAlt=200,maxAlt=2500,maxRoll=15,maxPitch=15,fov=60,duration=350,offset=math.rad(10),overlap=0.5,min_interval=5,name="FW-190 A-8 Tactical Recon"}
|
|
124629
|
+
TARS.parameters["FW-190D9"]={minAlt=250,maxAlt=2500,maxRoll=15,maxPitch=15,fov=60,duration=350,offset=math.rad(10),overlap=0.5,min_interval=5,name="FW-190 D-9 Tactical Recon"}
|
|
124630
|
+
TARS.parameters["SA342M"]={minAlt=20,maxAlt=1000,maxRoll=35,maxPitch=25,fov=18,duration=350,offset=math.rad(10),overlap=0.5,min_interval=5,name="SA342M EO/IR LIGHT RECO"}
|
|
124631
|
+
TARS.parameters["SA342L"]={minAlt=20,maxAlt=1000,maxRoll=35,maxPitch=25,fov=18,duration=350,offset=math.rad(10),overlap=0.5,min_interval=5,name="SA342L EO/IR LIGHT RECO"}
|
|
124632
|
+
TARS.parameters["OH58D"]={minAlt=30,maxAlt=1200,maxRoll=35,maxPitch=25,fov=12,duration=350,offset=math.rad(12),overlap=0.5,min_interval=5,name="OH-58D MMS EO/IR RECO"}
|
|
123612
124633
|
TARS.parameters["UH-1H"]={maxRoll=50,maxPitch=45,duration=900,offset=math.rad(6),name="UH-1H VISUAL/CREW RECO",minAlt=TARS._vAltMin,minRange=TARS._vRangeMin,optimalAlt=TARS._vAltOpti,optimalRange=TARS._vRangeOpti,maxAlt=TARS._vAltMax,maxRange=TARS._vRangeMax}
|
|
123613
124634
|
TARS.parameters["Mi-8MT"]={maxRoll=50,maxPitch=45,duration=900,offset=math.rad(6),name="Mi-8MT VISUAL/CREW RECO",minAlt=TARS._vAltMin,minRange=TARS._vRangeMin,optimalAlt=TARS._vAltOpti,optimalRange=TARS._vRangeOpti,maxAlt=TARS._vAltMax,maxRange=TARS._vRangeMax}
|
|
123614
124635
|
TARS.parameters["MH-6J"]={maxRoll=50,maxPitch=45,duration=900,offset=math.rad(6),name="MH-6J VISUAL CLOSE RECO",minAlt=TARS._vAltMin,minRange=TARS._vRangeMin,optimalAlt=TARS._vAltOpti,optimalRange=TARS._vRangeOpti,maxAlt=TARS._vAltMax,maxRange=TARS._vRangeMax}
|
|
@@ -123632,7 +124653,7 @@ TARS.scoring=nil
|
|
|
123632
124653
|
TARS.locale="en"
|
|
123633
124654
|
TARS.Messages={
|
|
123634
124655
|
en={
|
|
123635
|
-
TARS_FILM_START="[TARS]
|
|
124656
|
+
TARS_FILM_START="[TARS] Capture activated. Expositions remaining: %d",
|
|
123636
124657
|
TARS_FILM_EXHAUSTED="[TARS] Film exhausted. Return to base for debrief.",
|
|
123637
124658
|
TARS_FILM_STOP="[TARS] Session capture ended. Return to base for debrief.",
|
|
123638
124659
|
TARS_FILM_TIME_UP="[TARS] Film time exhausted. Return to base.",
|
|
@@ -123640,12 +124661,12 @@ TARS_FILM_CAP_REACHED="[TARS] Maximum captures reached (%d). Return to base for
|
|
|
123640
124661
|
TARS_FILM_STB_MANUAL="[TARS] <>Manual<> Film manual STB.",
|
|
123641
124662
|
TARS_FILM_RESUME_MANUAL="[TARS] <>Manual<> Film manual resume.",
|
|
123642
124663
|
TARS_FILM_STB_LAND="[TARS] <>Landing<> Film auto STB.",
|
|
123643
|
-
TARS_FILM_RESUME_TO="[TARS] <>TakeOff<> Film auto resume. %d
|
|
124664
|
+
TARS_FILM_RESUME_TO="[TARS] <>TakeOff<> Film auto resume. %d expositions",
|
|
123644
124665
|
TARS_FILM_STB_LOCKED="[TARS] Film is STB — takeoff to resume.",
|
|
123645
124666
|
TARS_FILM_ALREADY_ACTIVE="[TARS] Film already active.",
|
|
123646
124667
|
TARS_FILM_NO_CAPTURE="[TARS] No active film.",
|
|
123647
124668
|
TARS_FILM_NO_CAPTURE_STOP="[TARS] No active film to stop.",
|
|
123648
|
-
TARS_CAPTURE_TICK="
|
|
124669
|
+
TARS_CAPTURE_TICK="EXPOSITIONS REMAINING: %d",
|
|
123649
124670
|
TARS_CAPTURE_HIT="[TARS] +1 Captured target (%d total)",
|
|
123650
124671
|
TARS_CAPTURE_HIT_MAX="[TARS] +1 Captured target (%d total) / %d max",
|
|
123651
124672
|
TARS_SESSION_ENDED="[TARS] Session ended. Return to base for debrief.",
|
|
@@ -123679,7 +124700,7 @@ TARS_MENU_STB="TARS mode : Standby & Resume",
|
|
|
123679
124700
|
TARS_MENU_STOP="TARS mode : Stop filming",
|
|
123680
124701
|
},
|
|
123681
124702
|
de={
|
|
123682
|
-
TARS_FILM_START="[TARS] Aufnahme aktiviert.
|
|
124703
|
+
TARS_FILM_START="[TARS] Aufnahme aktiviert. Verbleibende Aufnahmen: %d.",
|
|
123683
124704
|
TARS_FILM_EXHAUSTED="[TARS] Film aufgebraucht. Kehren Sie zur Basis für das Briefing zurück.",
|
|
123684
124705
|
TARS_FILM_STOP="[TARS] Aufnahmesitzung beendet. Kehren Sie zur Basis zurück.",
|
|
123685
124706
|
TARS_FILM_TIME_UP="[TARS] Filmzeit abgelaufen. Kehren Sie zur Basis zurück.",
|
|
@@ -123687,12 +124708,12 @@ TARS_FILM_CAP_REACHED="[TARS] Maximale Aufnahmen erreicht (%d). Kehren Sie zur B
|
|
|
123687
124708
|
TARS_FILM_STB_MANUAL="[TARS] <>Manuell<> Film manuell auf Standby.",
|
|
123688
124709
|
TARS_FILM_RESUME_MANUAL="[TARS] <>Manuell<> Film manuell fortgesetzt.",
|
|
123689
124710
|
TARS_FILM_STB_LAND="[TARS] <>Landung<> Film automatisch auf Standby.",
|
|
123690
|
-
TARS_FILM_RESUME_TO="[TARS] <>
|
|
124711
|
+
TARS_FILM_RESUME_TO="[TARS] <>Takeoff<> Film fortgesetzt. %d Aufnahmen.",
|
|
123691
124712
|
TARS_FILM_STB_LOCKED="[TARS] Film ist auf Standby — starten Sie, um fortzufahren.",
|
|
123692
124713
|
TARS_FILM_ALREADY_ACTIVE="[TARS] Aufnahme bereits aktiv.",
|
|
123693
124714
|
TARS_FILM_NO_CAPTURE="[TARS] Keine aktive Aufnahme.",
|
|
123694
124715
|
TARS_FILM_NO_CAPTURE_STOP="[TARS] Keine aktive Aufnahme zum Stoppen.",
|
|
123695
|
-
TARS_CAPTURE_TICK="
|
|
124716
|
+
TARS_CAPTURE_TICK="Verbleibende Aufnahmen: %d.",
|
|
123696
124717
|
TARS_CAPTURE_HIT="[TARS] +1 Ziel erfasst (%d gesamt)",
|
|
123697
124718
|
TARS_CAPTURE_HIT_MAX="[TARS] +1 Ziel erfasst (%d gesamt) / %d max",
|
|
123698
124719
|
TARS_SESSION_ENDED="[TARS] Sitzung beendet. Kehren Sie zur Basis für das Briefing zurück.",
|
|
@@ -123726,7 +124747,7 @@ TARS_MENU_STB="TARS Modus : Standby & Fortsetzen",
|
|
|
123726
124747
|
TARS_MENU_STOP="TARS Modus : Aufnahme stoppen",
|
|
123727
124748
|
},
|
|
123728
124749
|
fr={
|
|
123729
|
-
TARS_FILM_START="[TARS]
|
|
124750
|
+
TARS_FILM_START="[TARS] Capture activée. Expositions restantes : %d",
|
|
123730
124751
|
TARS_FILM_EXHAUSTED="[TARS] Film épuisé. Retournez à la base pour le compte-rendu.",
|
|
123731
124752
|
TARS_FILM_STOP="[TARS] Session de capture terminée. Retournez à la base.",
|
|
123732
124753
|
TARS_FILM_TIME_UP="[TARS] Temps de film épuisé. Retournez à la base.",
|
|
@@ -123734,12 +124755,12 @@ TARS_FILM_CAP_REACHED="[TARS] Nombre maximum de captures atteint (%d). Retournez
|
|
|
123734
124755
|
TARS_FILM_STB_MANUAL="[TARS] <>Manuel<> Film en STB manuel.",
|
|
123735
124756
|
TARS_FILM_RESUME_MANUAL="[TARS] <>Manuel<> Reprise manuel du film.",
|
|
123736
124757
|
TARS_FILM_STB_LAND="[TARS] <>Atterrissage<> Film en STB automatique.",
|
|
123737
|
-
TARS_FILM_RESUME_TO="[TARS] <>Décollage<>
|
|
124758
|
+
TARS_FILM_RESUME_TO="[TARS] <>Décollage<> Film repris. %d expositions",
|
|
123738
124759
|
TARS_FILM_STB_LOCKED="[TARS] Film en STB — décollez pour reprendre.",
|
|
123739
124760
|
TARS_FILM_ALREADY_ACTIVE="[TARS] Film déjà activé.",
|
|
123740
124761
|
TARS_FILM_NO_CAPTURE="[TARS] Aucun film activé.",
|
|
123741
124762
|
TARS_FILM_NO_CAPTURE_STOP="[TARS] Aucun film actif à stopper.",
|
|
123742
|
-
TARS_CAPTURE_TICK="
|
|
124763
|
+
TARS_CAPTURE_TICK="[TARS] EXPOSITIONS RESTANTES : %d",
|
|
123743
124764
|
TARS_CAPTURE_HIT="[TARS] +1 Cible capturée (%d au total)",
|
|
123744
124765
|
TARS_CAPTURE_HIT_MAX="[TARS] +1 Cible capturée (%d au total) / %d max",
|
|
123745
124766
|
TARS_SESSION_ENDED="[TARS] Session terminée. Retournez à la base pour le debriefing.",
|
|
@@ -123830,8 +124851,9 @@ function TARS_SESSION:New(unit,Callback)
|
|
|
123830
124851
|
local self=BASE:Inherit(self,BASE:New())
|
|
123831
124852
|
self.lid=string.format("TARS_SESSION %s | ",TARS.version)
|
|
123832
124853
|
self.Callback=Callback
|
|
124854
|
+
self.PilotParameterHelper=Callback.PilotParameterHelper
|
|
123833
124855
|
self:SetObjectParams(unit)
|
|
123834
|
-
self:
|
|
124856
|
+
self:T("TARS_SESSION created — unit="..tostring(self.objectName)
|
|
123835
124857
|
.." type="..tostring(self.type))
|
|
123836
124858
|
return self
|
|
123837
124859
|
end
|
|
@@ -123887,7 +124909,7 @@ end
|
|
|
123887
124909
|
self.capturing=true
|
|
123888
124910
|
self.loop=true
|
|
123889
124911
|
self.standby=false
|
|
123890
|
-
self:
|
|
124912
|
+
self:T("FILM START — film="..self.duration.."s")
|
|
123891
124913
|
self.Callback:_MsgUnit(
|
|
123892
124914
|
self.Callback:_Txt("TARS_FILM_START",self.duration),5,self.playerName)
|
|
123893
124915
|
timer.scheduleFunction(TARS_SESSION.CaptureLoop,self,timer.getTime()+2)
|
|
@@ -123922,37 +124944,51 @@ end
|
|
|
123922
124944
|
snap.playername=self.playerName
|
|
123923
124945
|
return snap
|
|
123924
124946
|
end
|
|
123925
|
-
function TARS_SESSION:_OffsetCalc(unit,params)
|
|
124947
|
+
function TARS_SESSION:_OffsetCalc(unit,params,center_shift)
|
|
124948
|
+
center_shift=center_shift or 0
|
|
123926
124949
|
local pos=unit:GetPosition()
|
|
123927
124950
|
local vec3=unit:GetVec3()
|
|
123928
|
-
local rad=math.atan2(pos.x.z,pos.x.x)+2*math.pi
|
|
123929
124951
|
local MSL=land.getHeight({x=vec3.x,y=vec3.z})
|
|
123930
124952
|
local alt=vec3.y-MSL
|
|
123931
|
-
local
|
|
123932
|
-
|
|
124953
|
+
local rad=math.atan2(pos.x.x,pos.x.z)
|
|
124954
|
+
local dist=(alt/math.tan(params.offset))+center_shift
|
|
124955
|
+
return{
|
|
124956
|
+
x=vec3.x+math.sin(rad)*dist,
|
|
124957
|
+
z=vec3.z+math.cos(rad)*dist,
|
|
124958
|
+
MSL=MSL,
|
|
124959
|
+
alt=alt,
|
|
124960
|
+
rad=rad,
|
|
124961
|
+
}
|
|
123933
124962
|
end
|
|
123934
124963
|
function TARS_SESSION:_ValidateObjectFound(_Object)
|
|
123935
|
-
self:
|
|
124964
|
+
self:T(self.lid.."_ValidateObjectFound "..tostring(_Object:GetName()))
|
|
123936
124965
|
if not(_Object and _Object:IsAlive())then return false end
|
|
123937
124966
|
if _Object:GetCoalition()==self.coa then return false end
|
|
123938
124967
|
if self.Callback.targetNameFilter.enabled then
|
|
123939
124968
|
local keywords=self.Callback.targetNameFilter.keywords[_Object:GetCoalition()]
|
|
123940
124969
|
local targetName=string.lower(_Object:GetName()or"")
|
|
124970
|
+
local targetGroup
|
|
124971
|
+
local targetGroupName
|
|
124972
|
+
if _Object:IsInstanceOf("UNIT")then
|
|
124973
|
+
targetGroup=_Object:GetGroup()
|
|
124974
|
+
if targetGroup then targetGroupName=string.lower(targetGroup:GetName())end
|
|
124975
|
+
end
|
|
123941
124976
|
if type(keywords)=="string"then keywords={keywords}end
|
|
123942
124977
|
local matched=false
|
|
123943
124978
|
for _,kw in pairs(keywords or{})do
|
|
123944
124979
|
if string.find(targetName,string.lower(kw))then matched=true;break end
|
|
124980
|
+
if targetGroupName and string.find(targetName,string.lower(kw))then matched=true;break end
|
|
123945
124981
|
end
|
|
123946
124982
|
if not matched then return false end
|
|
123947
124983
|
end
|
|
123948
124984
|
local typeName=_Object:GetTypeName()
|
|
123949
124985
|
local typeNameLower=string.lower(typeName)
|
|
123950
124986
|
local objCat=_Object:GetCategory()
|
|
123951
|
-
self:
|
|
124987
|
+
self:T(self.lid.."_ValidateObjectFound Name Filter Passed!")
|
|
123952
124988
|
if objCat==Object.Category.UNIT then
|
|
123953
124989
|
local desc=_Object:GetDesc()
|
|
123954
124990
|
local unitCat=desc and desc.category
|
|
123955
|
-
self:
|
|
124991
|
+
self:T(self.lid.."_ValidateObjectFound Name Category Check "..tostring(unitCat))
|
|
123956
124992
|
if unitCat==Unit.Category.AIRPLANE or unitCat==Unit.Category.HELICOPTER then
|
|
123957
124993
|
return self.Callback.units.air
|
|
123958
124994
|
elseif unitCat==Unit.Category.GROUND_UNIT then
|
|
@@ -123981,10 +125017,12 @@ timer.scheduleFunction(TARS_SESSION.CaptureLoop,self,timer.getTime()+10)
|
|
|
123981
125017
|
return
|
|
123982
125018
|
end
|
|
123983
125019
|
if self.capturing and self.duration>0 then
|
|
123984
|
-
self.
|
|
125020
|
+
local params=self.Callback.parameters[self.type]
|
|
125021
|
+
local interval=self:_CalcInterval(self.unit,params)
|
|
125022
|
+
self.duration=self.duration-1
|
|
123985
125023
|
self.Callback:_MsgUnit(
|
|
123986
|
-
self.Callback:_Txt("TARS_CAPTURE_TICK",math.max(0,self.duration)),
|
|
123987
|
-
9,self.playerName)
|
|
125024
|
+
self.Callback:_Txt("TARS_CAPTURE_TICK",math.max(0,math.floor(self.duration))),
|
|
125025
|
+
math.min(interval,9),self.playerName,true)
|
|
123988
125026
|
self:AddToTargetList(self:FindTargets())
|
|
123989
125027
|
if self.Callback.filmLimitEnabled
|
|
123990
125028
|
and self.captureCount>=self.Callback.filmLimitMax then
|
|
@@ -123994,7 +125032,11 @@ self.Callback:_Txt("TARS_FILM_CAP_REACHED",self.Callback.filmLimitMax),
|
|
|
123994
125032
|
self.Callback:StopCapture(self)
|
|
123995
125033
|
return
|
|
123996
125034
|
end
|
|
123997
|
-
|
|
125035
|
+
if self.debugunitsearch then
|
|
125036
|
+
self:T(self.lid..string.format(
|
|
125037
|
+
"CaptureLoop interval=%.1fs duration=%.0fs",interval,self.duration))
|
|
125038
|
+
end
|
|
125039
|
+
timer.scheduleFunction(TARS_SESSION.CaptureLoop,self,timer.getTime()+interval)
|
|
123998
125040
|
end
|
|
123999
125041
|
if self.duration<=0 and self.loop then
|
|
124000
125042
|
self.loop=false
|
|
@@ -124016,61 +125058,134 @@ else
|
|
|
124016
125058
|
return params.maxRange
|
|
124017
125059
|
end
|
|
124018
125060
|
end
|
|
125061
|
+
function TARS_SESSION:_CalcInterval(unit,params)
|
|
125062
|
+
local vec3=unit:GetVec3()
|
|
125063
|
+
local alt=vec3.y-land.getHeight({x=vec3.x,y=vec3.z})
|
|
125064
|
+
alt=math.max(alt,1)
|
|
125065
|
+
local elev=params.offset
|
|
125066
|
+
local half_fov=math.rad(params.fov/2)
|
|
125067
|
+
local d_ground=alt/math.tan(elev)
|
|
125068
|
+
local b=d_ground*math.tan(half_fov)
|
|
125069
|
+
local diameter=2*b
|
|
125070
|
+
local vel=unit:GetVelocityVec3()
|
|
125071
|
+
local speed=math.sqrt(vel.x*vel.x+vel.y*vel.y+vel.z*vel.z)
|
|
125072
|
+
speed=math.max(speed,10)
|
|
125073
|
+
local overlap=params.overlap or 0.5
|
|
125074
|
+
local interval=(diameter*(1-overlap))/speed
|
|
125075
|
+
local min_interval=params.min_interval or 2
|
|
125076
|
+
return math.max(min_interval,math.min(120,interval))
|
|
125077
|
+
end
|
|
125078
|
+
function TARS_SESSION.isInEllipse(ox,oz,cx,cz,a,b,heading_rad)
|
|
125079
|
+
local dx=ox-cx
|
|
125080
|
+
local dz=oz-cz
|
|
125081
|
+
local cos_h=math.cos(heading_rad)
|
|
125082
|
+
local sin_h=math.sin(heading_rad)
|
|
125083
|
+
local lx=dx*sin_h+dz*cos_h
|
|
125084
|
+
local ly=-dx*cos_h+dz*sin_h
|
|
125085
|
+
return(lx/a)^2+(ly/b)^2<=1
|
|
125086
|
+
end
|
|
124019
125087
|
function TARS_SESSION:FindTargets()
|
|
124020
125088
|
local unit=self.unit
|
|
124021
|
-
local vec3=unit:GetVec3()
|
|
124022
|
-
local alt=unit:GetAltitude(true)
|
|
124023
125089
|
local params=self.Callback.parameters[self.type]
|
|
124024
125090
|
local roll=math.abs(TARS.getRoll(unit))
|
|
124025
125091
|
local pitch=math.abs(TARS.getPitch(unit))
|
|
124026
125092
|
local isFlat=roll<params.maxRoll and pitch<params.maxPitch
|
|
124027
|
-
local
|
|
124028
|
-
|
|
124029
|
-
|
|
124030
|
-
local
|
|
124031
|
-
local
|
|
124032
|
-
|
|
125093
|
+
local elev=params.offset
|
|
125094
|
+
local half_fov=math.rad(params.fov/2)
|
|
125095
|
+
local center_shift=0
|
|
125096
|
+
local a,b
|
|
125097
|
+
local offset_data=self:_OffsetCalc(unit,params,0)
|
|
125098
|
+
local alt=offset_data.alt
|
|
125099
|
+
local MSL=offset_data.MSL
|
|
125100
|
+
local d_ground=alt/math.tan(elev)
|
|
125101
|
+
b=d_ground*math.tan(half_fov)
|
|
125102
|
+
if(elev-half_fov)>math.rad(2)then
|
|
125103
|
+
local d_near=alt/math.tan(elev+half_fov)
|
|
125104
|
+
local d_far=alt/math.tan(elev-half_fov)
|
|
125105
|
+
a=(d_far-d_near)/2
|
|
125106
|
+
center_shift=(d_far+d_near)/2-d_ground
|
|
125107
|
+
else
|
|
125108
|
+
a=b
|
|
125109
|
+
center_shift=0
|
|
125110
|
+
self:T(self.lid.."FindTargets: elev-fov margin too small, fallback to circle")
|
|
125111
|
+
end
|
|
125112
|
+
local offset=self:_OffsetCalc(unit,params,center_shift)
|
|
125113
|
+
local unit_pos=unit:GetVec3()
|
|
125114
|
+
local hdg=unit:GetHeading()
|
|
125115
|
+
local expected_x=unit_pos.x+math.sin(math.rad(hdg))*(d_ground+center_shift)
|
|
125116
|
+
local expected_z=unit_pos.z+math.cos(math.rad(hdg))*(d_ground+center_shift)
|
|
125117
|
+
self:T(string.format(
|
|
125118
|
+
"OFFSET DRIFT: _OffsetCalc=(%.0f,%.0f) expected=(%.0f,%.0f) drift=(Δx=%.0f,Δz=%.0f)",
|
|
125119
|
+
offset.x,offset.z,
|
|
125120
|
+
expected_x,expected_z,
|
|
125121
|
+
offset.x-expected_x,
|
|
125122
|
+
offset.z-expected_z))
|
|
125123
|
+
local coordinate=self.coordinate
|
|
125124
|
+
or COORDINATE:New(offset.x,offset.MSL,offset.z)
|
|
125125
|
+
coordinate=coordinate:UpdateFromVec3({x=offset.x,y=offset.MSL,z=offset.z})
|
|
124033
125126
|
self.coordinate=coordinate
|
|
125127
|
+
local scan_radius=math.max(a,b)
|
|
125128
|
+
local heading=unit:GetHeading()
|
|
124034
125129
|
if self.debugunitsearch then
|
|
124035
|
-
local searchzone=self.searchzone
|
|
124036
|
-
|
|
124037
|
-
searchzone:UndrawZone()
|
|
124038
|
-
searchzone:UpdateFromVec2(coordinate:GetVec2(),
|
|
124039
|
-
self.searchzone=searchzone
|
|
125130
|
+
local searchzone=self.searchzone
|
|
125131
|
+
or ZONE_RADIUS:New("TARS Debug",coordinate:GetVec2(),scan_radius)
|
|
125132
|
+
if searchzone.DrawID then searchzone:UndrawZone()end
|
|
125133
|
+
searchzone:UpdateFromVec2(coordinate:GetVec2(),scan_radius)
|
|
124040
125134
|
searchzone:DrawZone(-1,{0,0,1},1,{0,1,0},.2,2,true)
|
|
125135
|
+
self.searchzone=searchzone
|
|
125136
|
+
self:ScheduleOnce(30,ZONE_BASE.UndrawZone,searchzone)
|
|
124041
125137
|
end
|
|
124042
|
-
if
|
|
124043
|
-
self:
|
|
125138
|
+
if self.PilotParameterHelper==true then
|
|
125139
|
+
self:T({Roll=roll,Pitch=pitch,AGL=alt,a=a,b=b,shift=center_shift})
|
|
124044
125140
|
if roll>params.maxRoll then
|
|
124045
|
-
MESSAGE:New(string.format("Roll - NOK out of parameters (%d°)!",roll
|
|
125141
|
+
MESSAGE:New(string.format("Roll - NOK out of parameters (%d°)!",roll),9,"PARAM"):ToUnit(unit)
|
|
124046
125142
|
elseif pitch>params.maxPitch then
|
|
124047
|
-
MESSAGE:New(string.format("Pitch - NOK out of parameters (%d°)!",pitch
|
|
125143
|
+
MESSAGE:New(string.format("Pitch - NOK out of parameters (%d°)!",pitch),9,"PARAM"):ToUnit(unit)
|
|
124048
125144
|
elseif alt<params.minAlt or alt>params.maxAlt then
|
|
124049
|
-
MESSAGE:New(string.format("AGL - NOK too high or too low (%dm)!",alt
|
|
125145
|
+
MESSAGE:New(string.format("AGL - NOK too high or too low (%dm)!",alt),9,"PARAM"):ToUnit(unit)
|
|
124050
125146
|
else
|
|
124051
|
-
MESSAGE:New("Params
|
|
125147
|
+
MESSAGE:New(string.format("Params OK | a=%.0fm b=%.0fm shift=%.0fm",a,b,center_shift),9,"PARAM"):ToUnit(unit)
|
|
124052
125148
|
end
|
|
124053
125149
|
end
|
|
124054
|
-
|
|
124055
|
-
local
|
|
124056
|
-
if self.debug==true then
|
|
124057
|
-
self:I(self.lid.."FindTargets Debug SET_UNIT created")
|
|
124058
|
-
debugunitset=SET_UNIT:New():FilterCategories("ground"):FilterCoalitions("red"):FilterOnce()
|
|
124059
|
-
end
|
|
124060
|
-
local ScannedUnits=self.Callback.detectUnits and coordinate:ScanUnits(radius)or nil
|
|
124061
|
-
local ScannedStatics=self.Callback.detectStatics and coordinate:ScanStatics(radius)or nil
|
|
125150
|
+
local ScannedUnits=self.Callback.detectUnits and coordinate:ScanUnits(scan_radius)or nil
|
|
125151
|
+
local ScannedStatics=self.Callback.detectStatics and coordinate:ScanStatics(scan_radius)or nil
|
|
124062
125152
|
local targetList={}
|
|
124063
125153
|
if alt>params.minAlt and alt<params.maxAlt and isFlat then
|
|
124064
125154
|
for _,u in pairs(ScannedUnits and ScannedUnits.Set or{})do
|
|
124065
|
-
if self:_ValidateObjectFound(u)then
|
|
125155
|
+
if self:_ValidateObjectFound(u)then
|
|
125156
|
+
local uv=u:GetVec3()
|
|
125157
|
+
local dx=uv.x-offset.x
|
|
125158
|
+
local dz=uv.z-offset.z
|
|
125159
|
+
local cos_h=math.cos(offset.rad)
|
|
125160
|
+
local sin_h=math.sin(offset.rad)
|
|
125161
|
+
local lx=dx*sin_h+dz*cos_h
|
|
125162
|
+
local ly=-dx*cos_h+dz*sin_h
|
|
125163
|
+
local ellipse_val=(lx/a)^2+(ly/b)^2
|
|
125164
|
+
self:T(string.format(
|
|
125165
|
+
"ELLIPSE CHECK '%s': dx=%.0f dz=%.0f lx=%.0f ly=%.0f val=%.2f %s",
|
|
125166
|
+
u:GetName(),dx,dz,lx,ly,ellipse_val,
|
|
125167
|
+
ellipse_val<=1 and"HIT ✓"or"MISS (außerhalb)"))
|
|
125168
|
+
if ellipse_val<=1 then
|
|
125169
|
+
targetList[u:GetName()]=u
|
|
125170
|
+
end
|
|
125171
|
+
end
|
|
124066
125172
|
end
|
|
124067
125173
|
for _,s in pairs(ScannedStatics and ScannedStatics.Set or{})do
|
|
124068
|
-
if self:_ValidateObjectFound(s)then
|
|
125174
|
+
if self:_ValidateObjectFound(s)then
|
|
125175
|
+
local sv=s:GetVec3()
|
|
125176
|
+
if TARS_SESSION.isInEllipse(sv.x,sv.z,offset.x,offset.z,a,b,offset.rad)then
|
|
125177
|
+
targetList[s:GetName()]=s
|
|
124069
125178
|
end
|
|
124070
125179
|
end
|
|
124071
|
-
|
|
125180
|
+
end
|
|
125181
|
+
end
|
|
125182
|
+
if self.debug==true then
|
|
125183
|
+
self:T(self.lid.."FindTargets Debug SET_UNIT created")
|
|
125184
|
+
local debugunitset=SET_UNIT:New():FilterCategories("ground"):FilterCoalitions("red"):FilterOnce()
|
|
124072
125185
|
for _,u in pairs(debugunitset and debugunitset.Set or{})do
|
|
124073
|
-
if self:_ValidateObjectFound(u)then
|
|
125186
|
+
if self:_ValidateObjectFound(u)then
|
|
125187
|
+
targetList[u:GetName()]=u
|
|
125188
|
+
end
|
|
124074
125189
|
end
|
|
124075
125190
|
end
|
|
124076
125191
|
return targetList
|
|
@@ -124100,6 +125215,9 @@ local unit=CLIENT:FindByPlayerName(playerName)
|
|
|
124100
125215
|
if unit then
|
|
124101
125216
|
MESSAGE:New(text,seconds,"TARS"):ToUnit(unit)
|
|
124102
125217
|
end
|
|
125218
|
+
if self.debug==true then
|
|
125219
|
+
MESSAGE:New(text,seconds,"TARS"):ToAll()
|
|
125220
|
+
end
|
|
124103
125221
|
if unit and self.SRS and(not Silent)then
|
|
124104
125222
|
local srsText=string.gsub(text,"^%[TARS%] ?",playerName..", ")
|
|
124105
125223
|
srsText=string.gsub(srsText,"[<>]","")
|
|
@@ -124212,7 +125330,7 @@ TARS.groundMenus[playerName]=TARS.groundMenus[playerName]or{}
|
|
|
124212
125330
|
TARS.groundMenus[playerName].approved=reconOk
|
|
124213
125331
|
TARS.groundMenus[playerName].playerName=playerName
|
|
124214
125332
|
if reconOk then
|
|
124215
|
-
self:
|
|
125333
|
+
self:T("VALIDATE OK — "..unit:GetName().." / "..tostring(playerName))
|
|
124216
125334
|
self:_MenuRemoveValidation(playerName)
|
|
124217
125335
|
local msg=self:_Txt("TARS_VALID_OK_HDR")
|
|
124218
125336
|
self:_MsgUnit(msg,15,playerName)
|
|
@@ -124223,7 +125341,7 @@ local msg=""
|
|
|
124223
125341
|
..self:_Txt("TARS_PLATFORM_FILM").." : "..params.duration.." expositions"
|
|
124224
125342
|
self:_MsgUnit(msg,15,playerName,true)
|
|
124225
125343
|
else
|
|
124226
|
-
self:
|
|
125344
|
+
self:T("VALIDATE REFUSED — "..unit:GetName().." ammo="..tostring(refusedWeapon))
|
|
124227
125345
|
local msg=self:_Txt("TARS_VALID_REFUSED_WPN")
|
|
124228
125346
|
if refusedWeapon then
|
|
124229
125347
|
msg=msg.."\n"..self:_Txt("TARS_VALID_REFUSED_AMMO",refusedWeapon)
|
|
@@ -124410,7 +125528,7 @@ if d.menuHandle then d.menuHandle:RefreshAndOrderByTag()end
|
|
|
124410
125528
|
self:T(self.lid.."MENU -film controls — "..tostring(playerName))
|
|
124411
125529
|
end
|
|
124412
125530
|
function TARS:AddBaseMenu(unit,playerName)
|
|
124413
|
-
self:
|
|
125531
|
+
self:T(self.lid.."AddBaseMenu — "..unit:GetName()
|
|
124414
125532
|
.." / "..tostring(playerName))
|
|
124415
125533
|
local typeName=unit:GetTypeName()
|
|
124416
125534
|
if not TARS.reconTypes[typeName]then return end
|
|
@@ -124461,7 +125579,7 @@ playerName=displayName,
|
|
|
124461
125579
|
group=grp,
|
|
124462
125580
|
}
|
|
124463
125581
|
self:_MenuAddValidation(playerName)
|
|
124464
|
-
self:
|
|
125582
|
+
self:T(self.lid.."MENU created — "..tostring(playerName)
|
|
124465
125583
|
.." group="..grp:GetName())
|
|
124466
125584
|
end
|
|
124467
125585
|
function TARS:RemoveGroundMenu(playerName)
|
|
@@ -126576,7 +127694,7 @@ ConfigLoaded=false,
|
|
|
126576
127694
|
poptions={},
|
|
126577
127695
|
UsePowerShell=false,
|
|
126578
127696
|
}
|
|
126579
|
-
MSRS.version="0.3.
|
|
127697
|
+
MSRS.version="0.3.7"
|
|
126580
127698
|
MSRS.Voices={
|
|
126581
127699
|
Amazon={
|
|
126582
127700
|
Generative={
|
|
@@ -127612,14 +128730,14 @@ end
|
|
|
127612
128730
|
)
|
|
127613
128731
|
return
|
|
127614
128732
|
end
|
|
127615
|
-
Frequencies=UTILS.EnsureTable(Frequencies)
|
|
127616
|
-
Modulations=UTILS.EnsureTable(Modulations)
|
|
128733
|
+
Frequencies=UTILS.EnsureTable(Frequencies or self.frequencies)
|
|
128734
|
+
Modulations=UTILS.EnsureTable(Modulations or self.modulations)
|
|
127617
128735
|
local ffs={}
|
|
127618
|
-
for _,_f in pairs(Frequencies
|
|
128736
|
+
for _,_f in pairs(Frequencies)do
|
|
127619
128737
|
table.insert(ffs,string.format("%.1f",_f))
|
|
127620
128738
|
end
|
|
127621
128739
|
local freqs=table.concat(ffs,",")
|
|
127622
|
-
local modus=table.concat(Modulations
|
|
128740
|
+
local modus=table.concat(Modulations,",")
|
|
127623
128741
|
local coal=Coalition or self.coalition
|
|
127624
128742
|
local gender=Gender or self.gender
|
|
127625
128743
|
local voice=Voice or self:GetVoice(self.provider)or self.voice
|
|
@@ -127696,6 +128814,40 @@ if not parameters.language then parameters.language="de"end
|
|
|
127696
128814
|
HoundTTS.Translate(text,parameters,callback)
|
|
127697
128815
|
return
|
|
127698
128816
|
end
|
|
128817
|
+
function MSRS:RadioJammerOn(Frequencies,Modulations,Coalition,Noisetype,Volume,Seconds,Label,Vec3,Encrypt,EncKey)
|
|
128818
|
+
self:T(self.lid.."RadioJammerOn")
|
|
128819
|
+
Frequencies=UTILS.EnsureTable(Frequencies)
|
|
128820
|
+
Modulations=UTILS.EnsureTable(Modulations)
|
|
128821
|
+
local ffs={}
|
|
128822
|
+
for _,_f in pairs(Frequencies or self.frequencies)do
|
|
128823
|
+
table.insert(ffs,string.format("%.1f",_f))
|
|
128824
|
+
end
|
|
128825
|
+
local freqs=table.concat(ffs,",")
|
|
128826
|
+
local modus=table.concat(Modulations or self.modulations,",")
|
|
128827
|
+
modus=modus:gsub("0","AM")
|
|
128828
|
+
modus=modus:gsub("1","FM")
|
|
128829
|
+
local coal=Coalition or self.coalition or coalition.side.RED
|
|
128830
|
+
local secs=Seconds or 30
|
|
128831
|
+
local TransmissionP={}
|
|
128832
|
+
local ProviderP={}
|
|
128833
|
+
TransmissionP.transmitter="srs"
|
|
128834
|
+
TransmissionP.freqs=freqs
|
|
128835
|
+
TransmissionP.modulations=modus
|
|
128836
|
+
TransmissionP.coalition=coal or self.coalition
|
|
128837
|
+
TransmissionP.name=Label or self.Label
|
|
128838
|
+
TransmissionP.point=Vec3
|
|
128839
|
+
TransmissionP.encrypt=Encrypt
|
|
128840
|
+
TransmissionP.encKey=EncKey
|
|
128841
|
+
ProviderP.noiseType=Noisetype or"white"
|
|
128842
|
+
ProviderP.volume=Volume or 1
|
|
128843
|
+
local ID=HoundTTS.TransmitNoise(TransmissionP,ProviderP)
|
|
128844
|
+
self.NoiseID=ID
|
|
128845
|
+
self:ScheduleOnce(secs,MSRS.RadioJammerOff,self,ID)
|
|
128846
|
+
return ID
|
|
128847
|
+
end
|
|
128848
|
+
function MSRS:RadioJammerOff(ID)
|
|
128849
|
+
return HoundTTS.KillSession(ID or self.NoiseID)
|
|
128850
|
+
end
|
|
127699
128851
|
function MSRS:LoadConfigFile(Path,Filename)
|
|
127700
128852
|
if lfs==nil then
|
|
127701
128853
|
env.info("*****Note - lfs and os need to be desanitized for MSRS to work!")
|