mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2026-07-16 14:12:47 +00:00
#CTLD Localization
This commit is contained in:
@@ -85,6 +85,9 @@ __Moose.Include( MOOSE_DEVELOPMENT_FOLDER..'/Moose/Ops/RecoveryTanker.lua' )
|
||||
__Moose.Include( MOOSE_DEVELOPMENT_FOLDER..'/Moose/Ops/RescueHelo.lua' )
|
||||
__Moose.Include( MOOSE_DEVELOPMENT_FOLDER..'/Moose/Ops/ATIS.lua' )
|
||||
__Moose.Include( MOOSE_DEVELOPMENT_FOLDER..'/Moose/Ops/CTLD.lua' )
|
||||
__Moose.Include( MOOSE_DEVELOPMENT_FOLDER..'/Moose/Ops/CTLD_CARGO.lua' )
|
||||
__Moose.Include( MOOSE_DEVELOPMENT_FOLDER..'/Moose/Ops/CTLD_Localization.lua' )
|
||||
__Moose.Include( MOOSE_DEVELOPMENT_FOLDER..'/Moose/Ops/CTLD_Hercules.lua' )
|
||||
__Moose.Include( MOOSE_DEVELOPMENT_FOLDER..'/Moose/Ops/CSAR.lua' )
|
||||
__Moose.Include( MOOSE_DEVELOPMENT_FOLDER..'/Moose/Ops/AirWing.lua' )
|
||||
__Moose.Include( MOOSE_DEVELOPMENT_FOLDER..'/Moose/Ops/ArmyGroup.lua' )
|
||||
|
||||
+522
-1590
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,720 @@
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- TODO CTLD_CARGO
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
do
|
||||
|
||||
------------------------------------------------------
|
||||
--- **CTLD_CARGO** class, extends Core.Base#BASE
|
||||
-- @type CTLD_CARGO
|
||||
-- @field #string ClassName Class name.
|
||||
-- @field #number ID ID of this cargo.
|
||||
-- @field #string Name Name for menu.
|
||||
-- @field #string DisplayName Display name for menu/messages.
|
||||
-- @field #table Templates Table of #POSITIONABLE objects.
|
||||
-- @field #string CargoType Enumerator of Type.
|
||||
-- @field #boolean HasBeenMoved Flag for moving.
|
||||
-- @field #boolean LoadDirectly Flag for direct loading.
|
||||
-- @field #number CratesNeeded Crates needed to build.
|
||||
-- @field Wrapper.Positionable#POSITIONABLE Positionable Representation of cargo in the mission.
|
||||
-- @field #boolean HasBeenDropped True if dropped from heli.
|
||||
-- @field #number PerCrateMass Mass in kg.
|
||||
-- @field #number Stock Number of builds available, -1 for unlimited.
|
||||
-- @field #string Subcategory Sub-category name.
|
||||
-- @field #boolean DontShowInMenu Show this item in menu or not.
|
||||
-- @field Core.Zone#ZONE Location Location (if set) where to get this cargo item.
|
||||
-- @field #table ResourceMap Resource Map information table if it has been set for static cargo items.
|
||||
-- @field #string StaticShape Individual shape if set.
|
||||
-- @field #string StaticType Individual type if set.
|
||||
-- @field #string StaticCategory Individual static category if set.
|
||||
-- @field #list<#string> TypeNames Table of unit types able to pick this cargo up.
|
||||
-- @field #number Stock0 Initial stock, if any given.
|
||||
-- @extends Core.Base#BASE
|
||||
|
||||
---
|
||||
-- @field #CTLD_CARGO CTLD_CARGO
|
||||
CTLD_CARGO = {
|
||||
ClassName = "CTLD_CARGO",
|
||||
ID = 0,
|
||||
Name = "none",
|
||||
DisplayName = "none",
|
||||
Templates = {},
|
||||
CargoType = "none",
|
||||
HasBeenMoved = false,
|
||||
LoadDirectly = false,
|
||||
CratesNeeded = 0,
|
||||
Positionable = nil,
|
||||
HasBeenDropped = false,
|
||||
PerCrateMass = 0,
|
||||
Stock = nil,
|
||||
Stock0 = nil,
|
||||
Mark = nil,
|
||||
DontShowInMenu = false,
|
||||
Location = nil,
|
||||
}
|
||||
|
||||
--- Define cargo types.
|
||||
-- @type CTLD_CARGO.Enum
|
||||
-- @field #string VEHICLE
|
||||
-- @field #string TROOPS
|
||||
-- @field #string FOB
|
||||
-- @field #string CRATE
|
||||
-- @field #string REPAIR
|
||||
-- @field #string ENGINEERS
|
||||
-- @field #string STATIC
|
||||
-- @field #string GCLOADABLE
|
||||
CTLD_CARGO.Enum = {
|
||||
VEHICLE = "Vehicle", -- #string vehicles
|
||||
TROOPS = "Troops", -- #string troops
|
||||
FOB = "FOB", -- #string FOB
|
||||
CRATE = "Crate", -- #string crate
|
||||
REPAIR = "Repair", -- #string repair
|
||||
ENGINEERS = "Engineers", -- #string engineers
|
||||
STATIC = "Static", -- #string statics
|
||||
GCLOADABLE = "GC_Loadable", -- #string dynamiccargo
|
||||
}
|
||||
|
||||
--- Function to create new CTLD_CARGO object.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #number ID ID of this #CTLD_CARGO
|
||||
-- @param #string Name Name for menu.
|
||||
-- @param #table Templates Table of #POSITIONABLE objects.
|
||||
-- @param #CTLD_CARGO.Enum Sorte Enumerator of Type.
|
||||
-- @param #boolean HasBeenMoved Flag for moving.
|
||||
-- @param #boolean LoadDirectly Flag for direct loading.
|
||||
-- @param #number CratesNeeded Crates needed to build.
|
||||
-- @param Wrapper.Positionable#POSITIONABLE Positionable Representation of cargo in the mission.
|
||||
-- @param #boolean Dropped Cargo/Troops have been unloaded from a chopper.
|
||||
-- @param #number PerCrateMass Mass in kg
|
||||
-- @param #number Stock Number of builds available, nil for unlimited
|
||||
-- @param #string Subcategory Name of subcategory, handy if using > 10 types to load.
|
||||
-- @param #boolean DontShowInMenu Show this item in menu or not (default: false == show it).
|
||||
-- @param Core.Zone#ZONE Location (optional) Where the cargo is available (one location only).
|
||||
-- @return #CTLD_CARGO self
|
||||
function CTLD_CARGO:New(ID, Name, Templates, Sorte, HasBeenMoved, LoadDirectly, CratesNeeded, Positionable, Dropped, PerCrateMass, Stock, Subcategory, DontShowInMenu, Location)
|
||||
-- Inherit everything from BASE class.
|
||||
local self=BASE:Inherit(self, BASE:New()) -- #CTLD_CARGO
|
||||
self:T({ID, Name, Templates, Sorte, HasBeenMoved, LoadDirectly, CratesNeeded, Positionable, Dropped})
|
||||
self.ID = ID or math.random(100000,1000000)
|
||||
self.Name = Name or "none" -- #string
|
||||
self.DisplayName = Name or "none" -- #string
|
||||
self.Templates = Templates or {} -- #table
|
||||
self.CargoType = Sorte or "type" -- #CTLD_CARGO.Enum
|
||||
self.HasBeenMoved = HasBeenMoved or false -- #boolean
|
||||
self.LoadDirectly = LoadDirectly or false -- #boolean
|
||||
self.CratesNeeded = CratesNeeded or 0 -- #number
|
||||
self.Positionable = Positionable or nil -- Wrapper.Positionable#POSITIONABLE
|
||||
self.HasBeenDropped = Dropped or false --#boolean
|
||||
self.PerCrateMass = PerCrateMass or 0 -- #number
|
||||
self.Stock = Stock or nil --#number
|
||||
self.Stock0 = Stock or nil --#number
|
||||
self.Mark = nil
|
||||
self.Subcategory = Subcategory or "Other"
|
||||
self.DontShowInMenu = DontShowInMenu or false
|
||||
self.ResourceMap = nil
|
||||
self.StaticType = "container_cargo" -- "container_cargo"
|
||||
if self:IsStatic() then
|
||||
self.StaticType = self.Templates
|
||||
end
|
||||
self.StaticShape = nil
|
||||
self.TypeNames = nil
|
||||
self.StaticCategory = "Cargos"
|
||||
if type(Location) == "string" then
|
||||
Location = ZONE:New(Location)
|
||||
end
|
||||
self.Location = Location
|
||||
self.NoMoveToZone = false
|
||||
return self
|
||||
end
|
||||
|
||||
--- Add specific static type and shape to this CARGO.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #string TypeName
|
||||
-- @param #string ShapeName
|
||||
-- @return #CTLD_CARGO self
|
||||
function CTLD_CARGO:SetStaticTypeAndShape(Category,TypeName,ShapeName)
|
||||
self.StaticCategory = Category or "Cargos"
|
||||
self.StaticType = TypeName or "container_cargo"
|
||||
self.StaticShape = ShapeName
|
||||
return self
|
||||
end
|
||||
|
||||
--- Get the specific static type and shape from this CARGO if set.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #string Category
|
||||
-- @return #string TypeName
|
||||
-- @return #string ShapeName
|
||||
function CTLD_CARGO:GetStaticTypeAndShape()
|
||||
return self.StaticCategory, self.StaticType, self.StaticShape
|
||||
end
|
||||
|
||||
--- Add specific unit types to this CARGO (restrict what types can pick this up).
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #string UnitTypes Unit type name, can also be a #list<#string> table of unit type names.
|
||||
-- @return #CTLD_CARGO self
|
||||
function CTLD_CARGO:AddUnitTypeName(UnitTypes)
|
||||
if not self.TypeNames then self.TypeNames = {} end
|
||||
if type(UnitTypes) ~= "table" then UnitTypes = {UnitTypes} end
|
||||
for _,_singletype in pairs(UnitTypes or {}) do
|
||||
self.TypeNames[_singletype]=_singletype
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- Check if a specific unit can carry this CARGO (restrict what types can pick this up).
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param Wrapper.Unit#UNIT Unit
|
||||
-- @return #boolean Outcome
|
||||
function CTLD_CARGO:UnitCanCarry(Unit)
|
||||
if not Unit then return false end
|
||||
if self.TypeNames == nil then return true end
|
||||
local typename = Unit:GetTypeName() or "none"
|
||||
if self.TypeNames[typename] then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
--- Add Resource Map information table
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #table ResourceMap
|
||||
-- @return #CTLD_CARGO self
|
||||
function CTLD_CARGO:SetStaticResourceMap(ResourceMap)
|
||||
self.ResourceMap = ResourceMap
|
||||
return self
|
||||
end
|
||||
|
||||
--- Get Resource Map information table
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #table ResourceMap
|
||||
function CTLD_CARGO:GetStaticResourceMap()
|
||||
return self.ResourceMap
|
||||
end
|
||||
|
||||
--- Query Location.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return Core.Zone#ZONE location or `nil` if not set
|
||||
function CTLD_CARGO:GetLocation()
|
||||
return self.Location
|
||||
end
|
||||
|
||||
--- Query ID.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #number ID
|
||||
function CTLD_CARGO:GetID()
|
||||
return self.ID
|
||||
end
|
||||
|
||||
--- Query Subcategory
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #string SubCategory
|
||||
function CTLD_CARGO:GetSubCat()
|
||||
return self.Subcategory
|
||||
end
|
||||
|
||||
--- Query Mass.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #number Mass in kg
|
||||
function CTLD_CARGO:GetMass()
|
||||
return self.PerCrateMass
|
||||
end
|
||||
|
||||
--- Query Name.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #string Name
|
||||
function CTLD_CARGO:GetName()
|
||||
return self.Name
|
||||
end
|
||||
|
||||
--- Set display name.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #string DisplayName Display label used in menus/messages (optional).
|
||||
-- @return #CTLD_CARGO self
|
||||
function CTLD_CARGO:SetDisplayName(DisplayName)
|
||||
if type(DisplayName) == "string" and DisplayName ~= "" then
|
||||
self.DisplayName = DisplayName
|
||||
else
|
||||
self.DisplayName = self.Name
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- Query display name.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #string Display name, or Name if not set
|
||||
function CTLD_CARGO:GetDisplayName()
|
||||
return self.DisplayName or self.Name
|
||||
end
|
||||
|
||||
--- Query Templates.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #table Templates
|
||||
function CTLD_CARGO:GetTemplates()
|
||||
return self.Templates
|
||||
end
|
||||
|
||||
--- Query has moved.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #boolean Has moved
|
||||
function CTLD_CARGO:HasMoved()
|
||||
return self.HasBeenMoved
|
||||
end
|
||||
|
||||
--- Query was dropped.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #boolean hercOnly If true, only treat Herc drops as 'dropped'.
|
||||
-- @return #boolean Has been dropped.
|
||||
function CTLD_CARGO:WasDropped(hercOnly)
|
||||
if hercOnly then
|
||||
return self.HasBeenDropped and self.IsHercDrop==true
|
||||
end
|
||||
return self.HasBeenDropped
|
||||
end
|
||||
|
||||
--- Query directly loadable.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #boolean loadable
|
||||
function CTLD_CARGO:CanLoadDirectly()
|
||||
return self.LoadDirectly
|
||||
end
|
||||
|
||||
--- Query number of crates or troopsize.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #number Crates or size of troops.
|
||||
function CTLD_CARGO:GetCratesNeeded()
|
||||
return self.CratesNeeded
|
||||
end
|
||||
|
||||
--- Query type.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #CTLD_CARGO.Enum Type
|
||||
function CTLD_CARGO:GetType()
|
||||
return self.CargoType
|
||||
end
|
||||
|
||||
--- Query type.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return Wrapper.Positionable#POSITIONABLE Positionable
|
||||
function CTLD_CARGO:GetPositionable()
|
||||
return self.Positionable
|
||||
end
|
||||
|
||||
--- Set HasMoved.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #boolean moved
|
||||
function CTLD_CARGO:SetHasMoved(moved)
|
||||
self.HasBeenMoved = moved or false
|
||||
end
|
||||
|
||||
--- Query if cargo has been loaded.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #boolean loaded
|
||||
function CTLD_CARGO:Isloaded()
|
||||
if self.HasBeenMoved and not self:WasDropped() then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
--- Set WasDropped.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #boolean dropped
|
||||
-- @param #boolean isHercDrop set when _GetCrates is used by the herc
|
||||
function CTLD_CARGO:SetWasDropped(dropped, isHercDrop)
|
||||
self.HasBeenDropped = dropped or false
|
||||
self.IsHercDrop = isHercDrop or false
|
||||
end
|
||||
|
||||
--- Get Stock.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #number Stock or -1 if unlimited.
|
||||
function CTLD_CARGO:GetStock()
|
||||
if self.Stock then
|
||||
return self.Stock
|
||||
else
|
||||
return -1
|
||||
end
|
||||
end
|
||||
|
||||
--- Get Stock0.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #number Stock0 or -1 if unlimited.
|
||||
function CTLD_CARGO:GetStock0()
|
||||
if self.Stock0 then
|
||||
return self.Stock0
|
||||
else
|
||||
return -1
|
||||
end
|
||||
end
|
||||
|
||||
--- Get relative Stock.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #number Stock Percentage like 75, or -1 if unlimited.
|
||||
function CTLD_CARGO:GetRelativeStock()
|
||||
if self.Stock and self.Stock0 then
|
||||
return math.floor((self.Stock/self.Stock0)*100)
|
||||
else
|
||||
return -1
|
||||
end
|
||||
end
|
||||
|
||||
--- Add Stock.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #number Number to add, none if nil.
|
||||
-- @return #CTLD_CARGO self
|
||||
function CTLD_CARGO:AddStock(Number)
|
||||
if self.Stock then -- Stock nil?
|
||||
local number = Number or 1
|
||||
self.Stock = self.Stock + number
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- Remove Stock.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #number Number to reduce, none if nil.
|
||||
-- @return #CTLD_CARGO self
|
||||
function CTLD_CARGO:RemoveStock(Number)
|
||||
if self.Stock then -- Stock nil?
|
||||
local number = Number or 1
|
||||
self.Stock = self.Stock - number
|
||||
if self.Stock < 0 then self.Stock = 0 end
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- Set Stock.
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #number Number to set, nil means unlimited.
|
||||
-- @return #CTLD_CARGO self
|
||||
function CTLD_CARGO:SetStock(Number)
|
||||
self.Stock = Number
|
||||
return self
|
||||
end
|
||||
|
||||
--- Query crate type for REPAIR
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @param #boolean
|
||||
function CTLD_CARGO:IsRepair()
|
||||
if self.CargoType == "Repair" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
--- Query crate type for STATIC
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #boolean
|
||||
function CTLD_CARGO:IsStatic()
|
||||
if self.CargoType == "Static" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
--- Add mark
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #CTLD_CARGO self
|
||||
function CTLD_CARGO:AddMark(Mark)
|
||||
self.Mark = Mark
|
||||
return self
|
||||
end
|
||||
|
||||
--- Get mark
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #string Mark
|
||||
function CTLD_CARGO:GetMark(Mark)
|
||||
return self.Mark
|
||||
end
|
||||
|
||||
--- Wipe mark
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #CTLD_CARGO self
|
||||
function CTLD_CARGO:WipeMark()
|
||||
self.Mark = nil
|
||||
return self
|
||||
end
|
||||
|
||||
--- Get overall mass of a cargo object, i.e. crates needed x mass per crate
|
||||
-- @param #CTLD_CARGO self
|
||||
-- @return #number mass
|
||||
function CTLD_CARGO:GetNetMass()
|
||||
return self.CratesNeeded * self.PerCrateMass
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- END CTLD_CARGO
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
do
|
||||
|
||||
------------------------------------------------------
|
||||
--- **CTLD_ENGINEERING** class, extends Core.Base#BASE
|
||||
-- @type CTLD_ENGINEERING
|
||||
-- @field #string ClassName
|
||||
-- @field #string lid
|
||||
-- @field #string Name
|
||||
-- @field Wrapper.Group#GROUP Group
|
||||
-- @field Wrapper.Unit#UNIT Unit
|
||||
-- @field Wrapper.Group#GROUP HeliGroup
|
||||
-- @field Wrapper.Unit#UNIT HeliUnit
|
||||
-- @field #string State
|
||||
-- @extends Core.Base#BASE
|
||||
|
||||
---
|
||||
-- @field #CTLD_ENGINEERING CTLD_ENGINEERING
|
||||
CTLD_ENGINEERING = {
|
||||
ClassName = "CTLD_ENGINEERING",
|
||||
lid = "",
|
||||
Name = "none",
|
||||
Group = nil,
|
||||
Unit = nil,
|
||||
--C_Ops = nil,
|
||||
HeliGroup = nil,
|
||||
HeliUnit = nil,
|
||||
State = "",
|
||||
}
|
||||
|
||||
--- CTLD_ENGINEERING class version.
|
||||
-- @field #string version
|
||||
CTLD_ENGINEERING.Version = "0.0.3"
|
||||
|
||||
--- Create a new instance.
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @param #string Name
|
||||
-- @param #string GroupName Name of Engineering #GROUP object
|
||||
-- @param Wrapper.Group#GROUP HeliGroup HeliGroup
|
||||
-- @param Wrapper.Unit#UNIT HeliUnit HeliUnit
|
||||
-- @return #CTLD_ENGINEERING self
|
||||
function CTLD_ENGINEERING:New(Name, GroupName, HeliGroup, HeliUnit)
|
||||
|
||||
-- Inherit everything from BASE class.
|
||||
local self=BASE:Inherit(self, BASE:New()) -- #CTLD_ENGINEERING
|
||||
|
||||
--BASE:I({Name, GroupName})
|
||||
|
||||
self.Name = Name or "Engineer Squad" -- #string
|
||||
self.Group = GROUP:FindByName(GroupName) -- Wrapper.Group#GROUP
|
||||
self.Unit = self.Group:GetUnit(1) -- Wrapper.Unit#UNIT
|
||||
self.HeliGroup = HeliGroup -- Wrapper.Group#GROUP
|
||||
self.HeliUnit = HeliUnit -- Wrapper.Unit#UNIT
|
||||
self.currwpt = nil -- Core.Point#COORDINATE
|
||||
self.lid = string.format("%s (%s) | ",self.Name, self.Version)
|
||||
-- Start State.
|
||||
self.State = "Stopped"
|
||||
self.marktimer = 300 -- wait this many secs before trying a crate again
|
||||
self:Start()
|
||||
local parent = self:GetParent(self)
|
||||
return self
|
||||
end
|
||||
|
||||
--- (Internal) Set the status
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @param #string State
|
||||
-- @return #CTLD_ENGINEERING self
|
||||
function CTLD_ENGINEERING:SetStatus(State)
|
||||
self.State = State
|
||||
return self
|
||||
end
|
||||
|
||||
--- (Internal) Get the status
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @return #string State
|
||||
function CTLD_ENGINEERING:GetStatus()
|
||||
return self.State
|
||||
end
|
||||
|
||||
--- (Internal) Check the status
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @param #string State
|
||||
-- @return #boolean Outcome
|
||||
function CTLD_ENGINEERING:IsStatus(State)
|
||||
return self.State == State
|
||||
end
|
||||
|
||||
--- (Internal) Check the negative status
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @param #string State
|
||||
-- @return #boolean Outcome
|
||||
function CTLD_ENGINEERING:IsNotStatus(State)
|
||||
return self.State ~= State
|
||||
end
|
||||
|
||||
--- (Internal) Set start status.
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @return #CTLD_ENGINEERING self
|
||||
function CTLD_ENGINEERING:Start()
|
||||
self:T(self.lid.."Start")
|
||||
self:SetStatus("Running")
|
||||
return self
|
||||
end
|
||||
|
||||
--- (Internal) Set stop status.
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @return #CTLD_ENGINEERING self
|
||||
function CTLD_ENGINEERING:Stop()
|
||||
self:T(self.lid.."Stop")
|
||||
self:SetStatus("Stopped")
|
||||
return self
|
||||
end
|
||||
|
||||
--- (Internal) Set build status.
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @return #CTLD_ENGINEERING self
|
||||
function CTLD_ENGINEERING:Build()
|
||||
self:T(self.lid.."Build")
|
||||
self:SetStatus("Building")
|
||||
return self
|
||||
end
|
||||
|
||||
--- (Internal) Set done status.
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @return #CTLD_ENGINEERING self
|
||||
function CTLD_ENGINEERING:Done()
|
||||
self:T(self.lid.."Done")
|
||||
local grp = self.Group -- Wrapper.Group#GROUP
|
||||
grp:RelocateGroundRandomInRadius(7,100,false,false,"Diamond")
|
||||
self:SetStatus("Running")
|
||||
return self
|
||||
end
|
||||
|
||||
--- (Internal) Search for crates in reach.
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @param #table crates Table of found crate Ops.CTLD#CTLD_CARGO objects.
|
||||
-- @param #number number Number of crates found.
|
||||
-- @return #CTLD_ENGINEERING self
|
||||
function CTLD_ENGINEERING:Search(crates,number)
|
||||
self:T(self.lid.."Search")
|
||||
self:SetStatus("Searching")
|
||||
-- find crates close by
|
||||
--local COps = self.C_Ops -- Ops.CTLD#CTLD
|
||||
local dist = self.distance -- #number
|
||||
local group = self.Group -- Wrapper.Group#GROUP
|
||||
--local crates,number = COps:_FindCratesNearby(group,nil, dist) -- #table
|
||||
local ctable = {}
|
||||
local ind = 0
|
||||
if number > 0 then
|
||||
-- get set of dropped only
|
||||
for _,_cargo in pairs (crates) do
|
||||
local cgotype = _cargo:GetType()
|
||||
if _cargo:WasDropped() and cgotype ~= CTLD_CARGO.Enum.STATIC then
|
||||
local ok = false
|
||||
local chalk = _cargo:GetMark()
|
||||
if chalk == nil then
|
||||
ok = true
|
||||
else
|
||||
-- have we tried this cargo recently?
|
||||
local tag = chalk.tag or "none"
|
||||
local timestamp = chalk.timestamp or 0
|
||||
-- enough time gone?
|
||||
local gone = timer.getAbsTime() - timestamp
|
||||
if gone >= self.marktimer then
|
||||
ok = true
|
||||
_cargo:WipeMark()
|
||||
end -- end time check
|
||||
end -- end chalk
|
||||
if ok then
|
||||
local chalk = {}
|
||||
chalk.tag = "Engineers"
|
||||
chalk.timestamp = timer.getAbsTime()
|
||||
_cargo:AddMark(chalk)
|
||||
ind = ind + 1
|
||||
table.insert(ctable,ind,_cargo)
|
||||
end
|
||||
end -- end dropped
|
||||
end -- end for
|
||||
end -- end number
|
||||
|
||||
if ind > 0 then
|
||||
local crate = ctable[1] -- Ops.CTLD#CTLD_CARGO
|
||||
local static = crate:GetPositionable() -- Wrapper.Static#STATIC
|
||||
local crate_pos = static:GetCoordinate() -- Core.Point#COORDINATE
|
||||
local gpos = group:GetCoord() -- Core.Point#COORDINATE
|
||||
-- see how far we are from the crate
|
||||
local distance = self:_GetDistance(gpos,crate_pos)
|
||||
self:T(string.format("%s Distance to crate: %d", self.lid, distance))
|
||||
-- move there
|
||||
if distance > 30 and distance ~= -1 and self:IsStatus("Searching") then
|
||||
group:RouteGroundTo(crate_pos,15,"Line abreast",1)
|
||||
self.currwpt = crate_pos -- Core.Point#COORDINATE
|
||||
self:Move()
|
||||
elseif distance <= 30 and distance ~= -1 then
|
||||
-- arrived
|
||||
self:Arrive()
|
||||
end
|
||||
else
|
||||
self:T(self.lid.."No crates in reach!")
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- (Internal) Move towards crates in reach.
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @return #CTLD_ENGINEERING self
|
||||
function CTLD_ENGINEERING:Move()
|
||||
self:T(self.lid.."Move")
|
||||
self:SetStatus("Moving")
|
||||
-- check if we arrived on target
|
||||
--local COps = self.C_Ops -- Ops.CTLD#CTLD
|
||||
local group = self.Group -- Wrapper.Group#GROUP
|
||||
local tgtpos = self.currwpt -- Core.Point#COORDINATE
|
||||
local gpos = group:GetCoord() -- Core.Point#COORDINATE
|
||||
-- see how far we are from the crate
|
||||
local distance = self:_GetDistance(gpos,tgtpos)
|
||||
self:T(string.format("%s Distance remaining: %d", self.lid, distance))
|
||||
if distance <= 30 and distance ~= -1 then
|
||||
-- arrived
|
||||
self:Arrive()
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- (Internal) Arrived at crates in reach. Stop group.
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @return #CTLD_ENGINEERING self
|
||||
function CTLD_ENGINEERING:Arrive()
|
||||
self:T(self.lid.."Arrive")
|
||||
self:SetStatus("Arrived")
|
||||
self.currwpt = nil
|
||||
local Grp = self.Group -- Wrapper.Group#GROUP
|
||||
Grp:RouteStop()
|
||||
return self
|
||||
end
|
||||
|
||||
--- (Internal) Return distance in meters between two coordinates.
|
||||
-- @param #CTLD_ENGINEERING self
|
||||
-- @param Core.Point#COORDINATE _point1 Coordinate one
|
||||
-- @param Core.Point#COORDINATE _point2 Coordinate two
|
||||
-- @return #number Distance in meters or -1
|
||||
function CTLD_ENGINEERING:_GetDistance(_point1, _point2)
|
||||
self:T(self.lid .. " _GetDistance")
|
||||
if _point1 and _point2 then
|
||||
local distance1 = _point1:Get2DDistance(_point2)
|
||||
local distance2 = _point1:DistanceFromPointVec2(_point2)
|
||||
if distance1 and type(distance1) == "number" then
|
||||
return distance1
|
||||
elseif distance2 and type(distance2) == "number" then
|
||||
return distance2
|
||||
else
|
||||
self:E("*****Cannot calculate distance!")
|
||||
self:E({_point1,_point2})
|
||||
return -1
|
||||
end
|
||||
else
|
||||
self:E("******Cannot calculate distance!")
|
||||
self:E({_point1,_point2})
|
||||
return -1
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- END CTLD_ENGINEERING
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
@@ -0,0 +1,669 @@
|
||||
do
|
||||
--- **Hercules Cargo AIR Drop Events** by Anubis Yinepu
|
||||
-- Moose CTLD OO refactoring by Applevangelist
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- TODO CTLD_HERCULES
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- This script will only work for the Herculus mod by Anubis, and only for **Air Dropping** cargo from the Hercules.
|
||||
-- It *DOES NOT* work with the purchaseable Hercules module from ED.
|
||||
-- Use the standard Moose CTLD if you want to unload on the ground.
|
||||
-- Payloads carried by pylons 11, 12 and 13 need to be declared in the Herculus_Loadout.lua file
|
||||
-- Except for Ammo pallets, this script will spawn whatever payload gets launched from pylons 11, 12 and 13
|
||||
-- Pylons 11, 12 and 13 are moveable within the Hercules cargobay area
|
||||
-- Ammo pallets can only be jettisoned from these pylons with no benefit to DCS world
|
||||
-- To benefit DCS world, Ammo pallets need to be off/on loaded using DCS arming and refueling window
|
||||
-- Cargo_Container_Enclosed = true: Cargo enclosed in container with parachute, need to be dropped from 100m (300ft) or more, except when parked on ground
|
||||
-- Cargo_Container_Enclosed = false: Open cargo with no parachute, need to be dropped from 10m (30ft) or less
|
||||
|
||||
------------------------------------------------------
|
||||
--- **CTLD_HERCULES** class, extends Core.Base#BASE
|
||||
-- @type CTLD_HERCULES
|
||||
-- @field #string ClassName
|
||||
-- @field #string lid
|
||||
-- @field #string Name
|
||||
-- @field #string Version
|
||||
-- @extends Core.Base#BASE
|
||||
CTLD_HERCULES = {
|
||||
ClassName = "CTLD_HERCULES",
|
||||
lid = "",
|
||||
Name = "",
|
||||
Version = "0.0.3",
|
||||
}
|
||||
|
||||
--- Define cargo types.
|
||||
-- @type CTLD_HERCULES.Types
|
||||
-- @field #table Type Name of cargo type, container (boolean) in container or not.
|
||||
CTLD_HERCULES.Types = {
|
||||
["ATGM M1045 HMMWV TOW Air [7183lb]"] = {['name'] = "M1045 HMMWV TOW", ['container'] = true},
|
||||
["ATGM M1045 HMMWV TOW Skid [7073lb]"] = {['name'] = "M1045 HMMWV TOW", ['container'] = false},
|
||||
["APC M1043 HMMWV Armament Air [7023lb]"] = {['name'] = "M1043 HMMWV Armament", ['container'] = true},
|
||||
["APC M1043 HMMWV Armament Skid [6912lb]"] = {['name'] = "M1043 HMMWV Armament", ['container'] = false},
|
||||
["SAM Avenger M1097 Air [7200lb]"] = {['name'] = "M1097 Avenger", ['container'] = true},
|
||||
["SAM Avenger M1097 Skid [7090lb]"] = {['name'] = "M1097 Avenger", ['container'] = false},
|
||||
["APC Cobra Air [10912lb]"] = {['name'] = "Cobra", ['container'] = true},
|
||||
["APC Cobra Skid [10802lb]"] = {['name'] = "Cobra", ['container'] = false},
|
||||
["APC M113 Air [21624lb]"] = {['name'] = "M-113", ['container'] = true},
|
||||
["APC M113 Skid [21494lb]"] = {['name'] = "M-113", ['container'] = false},
|
||||
["Tanker M978 HEMTT [34000lb]"] = {['name'] = "M978 HEMTT Tanker", ['container'] = false},
|
||||
["HEMTT TFFT [34400lb]"] = {['name'] = "HEMTT TFFT", ['container'] = false},
|
||||
["SPG M1128 Stryker MGS [33036lb]"] = {['name'] = "M1128 Stryker MGS", ['container'] = false},
|
||||
["AAA Vulcan M163 Air [21666lb]"] = {['name'] = "Vulcan", ['container'] = true},
|
||||
["AAA Vulcan M163 Skid [21577lb]"] = {['name'] = "Vulcan", ['container'] = false},
|
||||
["APC M1126 Stryker ICV [29542lb]"] = {['name'] = "M1126 Stryker ICV", ['container'] = false},
|
||||
["ATGM M1134 Stryker [30337lb]"] = {['name'] = "M1134 Stryker ATGM", ['container'] = false},
|
||||
["APC LAV-25 Air [22520lb]"] = {['name'] = "LAV-25", ['container'] = true},
|
||||
["APC LAV-25 Skid [22514lb]"] = {['name'] = "LAV-25", ['container'] = false},
|
||||
["M1025 HMMWV Air [6160lb]"] = {['name'] = "Hummer", ['container'] = true},
|
||||
["M1025 HMMWV Skid [6050lb]"] = {['name'] = "Hummer", ['container'] = false},
|
||||
["IFV M2A2 Bradley [34720lb]"] = {['name'] = "M-2 Bradley", ['container'] = false},
|
||||
["IFV MCV-80 [34720lb]"] = {['name'] = "MCV-80", ['container'] = false},
|
||||
["IFV BMP-1 [23232lb]"] = {['name'] = "BMP-1", ['container'] = false},
|
||||
["IFV BMP-2 [25168lb]"] = {['name'] = "BMP-2", ['container'] = false},
|
||||
["IFV BMP-3 [32912lb]"] = {['name'] = "BMP-3", ['container'] = false},
|
||||
["ARV BRDM-2 Air [12320lb]"] = {['name'] = "BRDM-2", ['container'] = true},
|
||||
["ARV BRDM-2 Skid [12210lb]"] = {['name'] = "BRDM-2", ['container'] = false},
|
||||
["APC BTR-80 Air [23936lb]"] = {['name'] = "BTR-80", ['container'] = true},
|
||||
["APC BTR-80 Skid [23826lb]"] = {['name'] = "BTR-80", ['container'] = false},
|
||||
["APC BTR-82A Air [24998lb]"] = {['name'] = "BTR-82A", ['container'] = true},
|
||||
["APC BTR-82A Skid [24888lb]"] = {['name'] = "BTR-82A", ['container'] = false},
|
||||
["SAM ROLAND ADS [34720lb]"] = {['name'] = "Roland Radar", ['container'] = false},
|
||||
["SAM ROLAND LN [34720b]"] = {['name'] = "Roland ADS", ['container'] = false},
|
||||
["SAM SA-13 STRELA [21624lb]"] = {['name'] = "Strela-10M3", ['container'] = false},
|
||||
["AAA ZSU-23-4 Shilka [32912lb]"] = {['name'] = "ZSU-23-4 Shilka", ['container'] = false},
|
||||
["SAM SA-19 Tunguska 2S6 [34720lb]"] = {['name'] = "2S6 Tunguska", ['container'] = false},
|
||||
["Transport UAZ-469 Air [3747lb]"] = {['name'] = "UAZ-469", ['container'] = true},
|
||||
["Transport UAZ-469 Skid [3630lb]"] = {['name'] = "UAZ-469", ['container'] = false},
|
||||
["AAA GEPARD [34720lb]"] = {['name'] = "Gepard", ['container'] = false},
|
||||
["SAM CHAPARRAL Air [21624lb]"] = {['name'] = "M48 Chaparral", ['container'] = true},
|
||||
["SAM CHAPARRAL Skid [21516lb]"] = {['name'] = "M48 Chaparral", ['container'] = false},
|
||||
["SAM LINEBACKER [34720lb]"] = {['name'] = "M6 Linebacker", ['container'] = false},
|
||||
["Transport URAL-375 [14815lb]"] = {['name'] = "Ural-375", ['container'] = false},
|
||||
["Transport M818 [16000lb]"] = {['name'] = "M 818", ['container'] = false},
|
||||
["IFV MARDER [34720lb]"] = {['name'] = "Marder", ['container'] = false},
|
||||
["Transport Tigr Air [15900lb]"] = {['name'] = "Tigr_233036", ['container'] = true},
|
||||
["Transport Tigr Skid [15730lb]"] = {['name'] = "Tigr_233036", ['container'] = false},
|
||||
["IFV TPZ FUCH [33440lb]"] = {['name'] = "TPZ", ['container'] = false},
|
||||
["IFV BMD-1 Air [18040lb]"] = {['name'] = "BMD-1", ['container'] = true},
|
||||
["IFV BMD-1 Skid [17930lb]"] = {['name'] = "BMD-1", ['container'] = false},
|
||||
["IFV BTR-D Air [18040lb]"] = {['name'] = "BTR_D", ['container'] = true},
|
||||
["IFV BTR-D Skid [17930lb]"] = {['name'] = "BTR_D", ['container'] = false},
|
||||
["EWR SBORKA Air [21624lb]"] = {['name'] = "Dog Ear radar", ['container'] = true},
|
||||
["EWR SBORKA Skid [21624lb]"] = {['name'] = "Dog Ear radar", ['container'] = false},
|
||||
["ART 2S9 NONA Air [19140lb]"] = {['name'] = "SAU 2-C9", ['container'] = true},
|
||||
["ART 2S9 NONA Skid [19030lb]"] = {['name'] = "SAU 2-C9", ['container'] = false},
|
||||
["ART GVOZDIKA [34720lb]"] = {['name'] = "SAU Gvozdika", ['container'] = false},
|
||||
["APC MTLB Air [26400lb]"] = {['name'] = "MTLB", ['container'] = true},
|
||||
["APC MTLB Skid [26290lb]"] = {['name'] = "MTLB", ['container'] = false},
|
||||
}
|
||||
|
||||
--- Cargo Object
|
||||
-- @type CTLD_HERCULES.CargoObject
|
||||
-- @field #number Cargo_Drop_Direction
|
||||
-- @field #table Cargo_Contents
|
||||
-- @field #string Cargo_Type_name
|
||||
-- @field #boolean Container_Enclosed
|
||||
-- @field #boolean ParatrooperGroupSpawn
|
||||
-- @field #number Cargo_Country
|
||||
-- @field #boolean offload_cargo
|
||||
-- @field #boolean all_cargo_survive_to_the_ground
|
||||
-- @field #boolean all_cargo_gets_destroyed
|
||||
-- @field #boolean destroy_cargo_dropped_without_parachute
|
||||
-- @field Core.Timer#TIMER scheduleFunctionID
|
||||
|
||||
--- [User] Instantiate a new object
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param #string Coalition Coalition side, "red", "blue" or "neutral"
|
||||
-- @param #string Alias Name of this instance
|
||||
-- @param Ops.CTLD#CTLD CtldObject CTLD instance to link into
|
||||
-- @return #CTLD_HERCULES self
|
||||
-- @usage
|
||||
-- Integrate to your CTLD instance like so, where `my_ctld` is a previously created CTLD instance:
|
||||
--
|
||||
-- my_ctld.enableFixedWing = false -- avoid dual loading via CTLD F10 and F8 ground crew
|
||||
-- local herccargo = CTLD_HERCULES:New("blue", "Hercules Test", my_ctld)
|
||||
--
|
||||
-- You also need:
|
||||
-- * A template called "Infantry" for 10 Paratroopers (as set via herccargo.infantrytemplate).
|
||||
-- * Depending on what you are loading with the help of the ground crew, there are 42 more templates for the various vehicles that are loadable.
|
||||
-- There's a **quick check output in the `dcs.log`** which tells you what's there and what not.
|
||||
-- E.g.:
|
||||
-- ...Checking template for APC BTR-82A Air [24998lb] (BTR-82A) ... MISSING)
|
||||
-- ...Checking template for ART 2S9 NONA Skid [19030lb] (SAU 2-C9) ... MISSING)
|
||||
-- ...Checking template for EWR SBORKA Air [21624lb] (Dog Ear radar) ... MISSING)
|
||||
-- ...Checking template for Transport Tigr Air [15900lb] (Tigr_233036) ... OK)
|
||||
--
|
||||
-- Expected template names are the ones in the rounded brackets.
|
||||
--
|
||||
-- ### HINTS
|
||||
--
|
||||
-- The script works on the EVENTS.Shot trigger, which is used by the mod when you **drop cargo from the Hercules while flying**. Unloading on the ground does
|
||||
-- not achieve anything here. If you just want to unload on the ground, use the normal Moose CTLD.
|
||||
-- **Do not use** the **splash damage** script together with this, your cargo will just explode when reaching the ground!
|
||||
--
|
||||
-- ### Airdrops
|
||||
--
|
||||
-- There are two ways of airdropping:
|
||||
-- 1) Very low and very slow (>5m and <10m AGL) - here you can drop stuff which has "Skid" at the end of the cargo name (loaded via F8 Ground Crew menu)
|
||||
-- 2) Higher up and slow (>100m AGL) - here you can drop paratroopers and cargo which has "Air" at the end of the cargo name (loaded via F8 Ground Crew menu)
|
||||
--
|
||||
-- ### General
|
||||
--
|
||||
-- Use either this method to integrate the Hercules **or** the one from the "normal" CTLD. Never both!
|
||||
function CTLD_HERCULES:New(Coalition, Alias, CtldObject)
|
||||
-- Inherit everything from FSM class.
|
||||
local self=BASE:Inherit(self, FSM:New()) -- #CTLD_HERCULES
|
||||
|
||||
--set Coalition
|
||||
if Coalition and type(Coalition)=="string" then
|
||||
if Coalition=="blue" then
|
||||
self.coalition=coalition.side.BLUE
|
||||
self.coalitiontxt = Coalition
|
||||
elseif Coalition=="red" then
|
||||
self.coalition=coalition.side.RED
|
||||
self.coalitiontxt = Coalition
|
||||
elseif Coalition=="neutral" then
|
||||
self.coalition=coalition.side.NEUTRAL
|
||||
self.coalitiontxt = Coalition
|
||||
else
|
||||
self:E("ERROR: Unknown coalition in CTLD!")
|
||||
end
|
||||
else
|
||||
self.coalition = Coalition
|
||||
self.coalitiontxt = string.lower(UTILS.GetCoalitionName(self.coalition))
|
||||
end
|
||||
|
||||
-- Set alias.
|
||||
if Alias then
|
||||
self.alias=tostring(Alias)
|
||||
else
|
||||
self.alias="UNHCR"
|
||||
if self.coalition then
|
||||
if self.coalition==coalition.side.RED then
|
||||
self.alias="Red CTLD Hercules"
|
||||
elseif self.coalition==coalition.side.BLUE then
|
||||
self.alias="Blue CTLD Hercules"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Set some string id for output to DCS.log file.
|
||||
self.lid=string.format("%s (%s) | ", self.alias, self.coalitiontxt)
|
||||
|
||||
self.infantrytemplate = "Infantry" -- template for a group of 10 paratroopers
|
||||
self.CTLD = CtldObject -- Ops.CTLD#CTLD
|
||||
|
||||
self.verbose = true
|
||||
|
||||
self.j = 0
|
||||
self.carrierGroups = {}
|
||||
self.Cargo = {}
|
||||
self.ParatrooperCount = {}
|
||||
|
||||
self.ObjectTracker = {}
|
||||
|
||||
-- Set some string id for output to DCS.log file.
|
||||
self.lid=string.format("%s (%s) | ", self.alias, self.coalition and UTILS.GetCoalitionName(self.coalition) or "unknown")
|
||||
|
||||
self:HandleEvent(EVENTS.Shot, self._HandleShot)
|
||||
|
||||
self:I(self.lid .. "Started")
|
||||
|
||||
self:CheckTemplates()
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
--- [Internal] Function to check availability of templates
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @return #CTLD_HERCULES self
|
||||
function CTLD_HERCULES:CheckTemplates()
|
||||
self:T(self.lid .. 'CheckTemplates')
|
||||
-- inject Paratroopers
|
||||
self.Types["Paratroopers 10"] = {
|
||||
name = self.infantrytemplate,
|
||||
container = false,
|
||||
available = false,
|
||||
}
|
||||
local missing = {}
|
||||
local nomissing = 0
|
||||
local found = {}
|
||||
local nofound = 0
|
||||
|
||||
-- list of groundcrew loadables
|
||||
for _index,_tab in pairs (self.Types) do
|
||||
local outcometxt = "MISSING"
|
||||
if _DATABASE.Templates.Groups[_tab.name] then
|
||||
outcometxt = "OK"
|
||||
self.Types[_index].available= true
|
||||
found[_tab.name] = true
|
||||
else
|
||||
self.Types[_index].available = false
|
||||
missing[_tab.name] = true
|
||||
end
|
||||
if self.verbose then
|
||||
self:I(string.format(self.lid .. "Checking template for %s (%s) ... %s", _index,_tab.name,outcometxt))
|
||||
end
|
||||
end
|
||||
for _,_name in pairs(found) do
|
||||
nofound = nofound + 1
|
||||
end
|
||||
for _,_name in pairs(missing) do
|
||||
nomissing = nomissing + 1
|
||||
end
|
||||
self:I(string.format(self.lid .. "Template Check Summary: Found %d, Missing %d, Total %d",nofound,nomissing,nofound+nomissing))
|
||||
return self
|
||||
end
|
||||
|
||||
--- [Internal] Function to spawn a soldier group of 10 units
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param Wrapper.Group#GROUP Cargo_Drop_initiator
|
||||
-- @param Core.Point#COORDINATE Cargo_Drop_Position
|
||||
-- @param #string Cargo_Type_name
|
||||
-- @param #number CargoHeading
|
||||
-- @param #number Cargo_Country
|
||||
-- @param #number GroupSpacing
|
||||
-- @return #CTLD_HERCULES self
|
||||
function CTLD_HERCULES:Soldier_SpawnGroup(Cargo_Drop_initiator,Cargo_Drop_Position, Cargo_Type_name, CargoHeading, Cargo_Country, GroupSpacing)
|
||||
--- TODO: Rework into Moose Spawns
|
||||
self:T(self.lid .. 'Soldier_SpawnGroup')
|
||||
self:T(Cargo_Drop_Position)
|
||||
-- create a matching #CTLD_CARGO type
|
||||
local InjectTroopsType = CTLD_CARGO:New(nil,self.infantrytemplate,{self.infantrytemplate},CTLD_CARGO.Enum.TROOPS,true,true,10,nil,false,80)
|
||||
-- get a #ZONE object
|
||||
local position = Cargo_Drop_Position:GetVec2()
|
||||
local dropzone = ZONE_RADIUS:New("Infantry " .. math.random(1,10000),position,100)
|
||||
-- and go:
|
||||
self.CTLD:InjectTroops(dropzone,InjectTroopsType)
|
||||
return self
|
||||
end
|
||||
|
||||
--- [Internal] Function to spawn a group
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param Wrapper.Group#GROUP Cargo_Drop_initiator
|
||||
-- @param Core.Point#COORDINATE Cargo_Drop_Position
|
||||
-- @param #string Cargo_Type_name
|
||||
-- @param #number CargoHeading
|
||||
-- @param #number Cargo_Country
|
||||
-- @return #CTLD_HERCULES self
|
||||
function CTLD_HERCULES:Cargo_SpawnGroup(Cargo_Drop_initiator,Cargo_Drop_Position, Cargo_Type_name, CargoHeading, Cargo_Country)
|
||||
--- TODO: Rework into Moose Spawns
|
||||
self:T(self.lid .. "Cargo_SpawnGroup")
|
||||
self:T(Cargo_Type_name)
|
||||
if Cargo_Type_name ~= 'Container red 1' then
|
||||
-- create a matching #CTLD_CARGO type
|
||||
local InjectVehicleType = CTLD_CARGO:New(nil,Cargo_Type_name,{Cargo_Type_name},CTLD_CARGO.Enum.VEHICLE,true,true,1,nil,false,1000)
|
||||
-- get a #ZONE object
|
||||
local position = Cargo_Drop_Position:GetVec2()
|
||||
local dropzone = ZONE_RADIUS:New("Vehicle " .. math.random(1,10000),position,100)
|
||||
-- and go:
|
||||
self.CTLD:InjectVehicles(dropzone,InjectVehicleType)
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- [Internal] Function to spawn static cargo
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param Wrapper.Group#GROUP Cargo_Drop_initiator
|
||||
-- @param Core.Point#COORDINATE Cargo_Drop_Position
|
||||
-- @param #string Cargo_Type_name
|
||||
-- @param #number CargoHeading
|
||||
-- @param #boolean dead
|
||||
-- @param #number Cargo_Country
|
||||
-- @return #CTLD_HERCULES self
|
||||
function CTLD_HERCULES:Cargo_SpawnStatic(Cargo_Drop_initiator,Cargo_Drop_Position, Cargo_Type_name, CargoHeading, dead, Cargo_Country)
|
||||
--- TODO: Rework into Moose Static Spawns
|
||||
self:T(self.lid .. "Cargo_SpawnStatic")
|
||||
self:T("Static " .. Cargo_Type_name .. " Dead " .. tostring(dead))
|
||||
local position = Cargo_Drop_Position:GetVec2()
|
||||
local Zone = ZONE_RADIUS:New("Cargo Static " .. math.random(1,10000),position,100)
|
||||
if not dead then
|
||||
local injectstatic = CTLD_CARGO:New(nil,"Cargo Static Group "..math.random(1,10000),"iso_container",CTLD_CARGO.Enum.STATIC,true,false,1,nil,true,4500,1)
|
||||
self.CTLD:InjectStatics(Zone,injectstatic,true,true)
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- [Internal] Function to spawn cargo by type at position
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param #string Cargo_Type_name
|
||||
-- @param Core.Point#COORDINATE Cargo_Drop_Position
|
||||
-- @return #CTLD_HERCULES self
|
||||
function CTLD_HERCULES:Cargo_SpawnDroppedAsCargo(_name, _pos)
|
||||
local theCargo = self.CTLD:_FindCratesCargoObject(_name) -- #CTLD_CARGO
|
||||
if theCargo then
|
||||
self.CTLD.CrateCounter = self.CTLD.CrateCounter + 1
|
||||
local CCat, CType, CShape = theCargo:GetStaticTypeAndShape()
|
||||
local basetype = CType or self.CTLD.basetype or "container_cargo"
|
||||
CCat = CCat or "Cargos"
|
||||
local theStatic = SPAWNSTATIC:NewFromType(basetype,CCat,self.cratecountry)
|
||||
:InitCargoMass(theCargo.PerCrateMass)
|
||||
:InitCargo(self.CTLD.enableslingload)
|
||||
:InitCoordinate(_pos)
|
||||
if CShape then
|
||||
theStatic:InitShape(CShape)
|
||||
end
|
||||
theStatic:Spawn(270,_name .. "-Container-".. math.random(1,100000))
|
||||
|
||||
self.CTLD.Spawned_Crates[self.CTLD.CrateCounter] = theStatic
|
||||
local newCargo = CTLD_CARGO:New(self.CTLD.CargoCounter, theCargo.Name, theCargo.Templates, theCargo.CargoType, true, false, theCargo.CratesNeeded, self.CTLD.Spawned_Crates[self.CTLD.CrateCounter], true, theCargo.PerCrateMass, nil, theCargo.Subcategory)
|
||||
local map=theCargo:GetStaticResourceMap()
|
||||
newCargo:SetStaticResourceMap(map)
|
||||
table.insert(self.CTLD.Spawned_Cargo, newCargo)
|
||||
|
||||
newCargo:SetWasDropped(true)
|
||||
newCargo:SetHasMoved(true)
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- [Internal] Spawn cargo objects
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param Wrapper.Group#GROUP Cargo_Drop_initiator
|
||||
-- @param #number Cargo_Drop_Direction
|
||||
-- @param Core.Point#COORDINATE Cargo_Content_position
|
||||
-- @param #string Cargo_Type_name
|
||||
-- @param #boolean Cargo_over_water
|
||||
-- @param #boolean Container_Enclosed
|
||||
-- @param #boolean ParatrooperGroupSpawn
|
||||
-- @param #boolean offload_cargo
|
||||
-- @param #boolean all_cargo_survive_to_the_ground
|
||||
-- @param #boolean all_cargo_gets_destroyed
|
||||
-- @param #boolean destroy_cargo_dropped_without_parachute
|
||||
-- @param #number Cargo_Country
|
||||
-- @return #CTLD_HERCULES self
|
||||
function CTLD_HERCULES:Cargo_SpawnObjects(Cargo_Drop_initiator,Cargo_Drop_Direction, Cargo_Content_position, Cargo_Type_name, Cargo_over_water, Container_Enclosed, ParatrooperGroupSpawn, offload_cargo, all_cargo_survive_to_the_ground, all_cargo_gets_destroyed, destroy_cargo_dropped_without_parachute, Cargo_Country)
|
||||
self:T(self.lid .. 'Cargo_SpawnObjects')
|
||||
|
||||
local CargoHeading = self.CargoHeading
|
||||
|
||||
if offload_cargo == true or ParatrooperGroupSpawn == true then
|
||||
if ParatrooperGroupSpawn == true then
|
||||
self:Soldier_SpawnGroup(Cargo_Drop_initiator,Cargo_Content_position, Cargo_Type_name, CargoHeading, Cargo_Country, 10)
|
||||
else
|
||||
self:Cargo_SpawnGroup(Cargo_Drop_initiator,Cargo_Content_position, Cargo_Type_name, CargoHeading, Cargo_Country)
|
||||
end
|
||||
else
|
||||
if all_cargo_gets_destroyed == true or Cargo_over_water == true then
|
||||
|
||||
else
|
||||
if all_cargo_survive_to_the_ground == true then
|
||||
if ParatrooperGroupSpawn == true then
|
||||
self:Cargo_SpawnStatic(Cargo_Drop_initiator,Cargo_Content_position, Cargo_Type_name, CargoHeading, true, Cargo_Country)
|
||||
else
|
||||
self:Cargo_SpawnGroup(Cargo_Drop_initiator,Cargo_Content_position, Cargo_Type_name, CargoHeading, Cargo_Country)
|
||||
end
|
||||
if Container_Enclosed == true then
|
||||
if ParatrooperGroupSpawn == false then
|
||||
self:Cargo_SpawnStatic(Cargo_Drop_initiator,Cargo_Content_position, "Hercules_Container_Parachute_Static", CargoHeading, false, Cargo_Country)
|
||||
end
|
||||
end
|
||||
end
|
||||
if destroy_cargo_dropped_without_parachute == true then
|
||||
if Container_Enclosed == true then
|
||||
if ParatrooperGroupSpawn == true then
|
||||
self:Soldier_SpawnGroup(Cargo_Drop_initiator,Cargo_Content_position, Cargo_Type_name, CargoHeading, Cargo_Country, 0)
|
||||
else
|
||||
if self.CTLD.dropAsCargoCrate then
|
||||
self:Cargo_SpawnDroppedAsCargo(Cargo_Type_name, Cargo_Content_position)
|
||||
else
|
||||
self:Cargo_SpawnGroup(Cargo_Drop_initiator,Cargo_Content_position, Cargo_Type_name, CargoHeading, Cargo_Country)
|
||||
self:Cargo_SpawnStatic(Cargo_Drop_initiator,Cargo_Content_position, "Hercules_Container_Parachute_Static", CargoHeading, false, Cargo_Country)
|
||||
end
|
||||
end
|
||||
else
|
||||
self:Cargo_SpawnStatic(Cargo_Drop_initiator,Cargo_Content_position, Cargo_Type_name, CargoHeading, true, Cargo_Country)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- [Internal] Function to calculate object height
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param Wrapper.Group#GROUP group The group for which to calculate the height
|
||||
-- @return #number height over ground
|
||||
function CTLD_HERCULES:Calculate_Object_Height_AGL(group)
|
||||
self:T(self.lid .. "Calculate_Object_Height_AGL")
|
||||
if group.ClassName and group.ClassName == "GROUP" then
|
||||
local gcoord = group:GetCoordinate()
|
||||
local height = group:GetHeight()
|
||||
local lheight = gcoord:GetLandHeight()
|
||||
self:T(self.lid .. "Height " .. height - lheight)
|
||||
return height - lheight
|
||||
else
|
||||
-- DCS object
|
||||
if group:isExist() then
|
||||
local dcsposition = group:getPosition().p
|
||||
local dcsvec2 = {x = dcsposition.x, y = dcsposition.z} -- Vec2
|
||||
local height = math.floor(group:getPosition().p.y - land.getHeight(dcsvec2))
|
||||
self.ObjectTracker[group.id_] = dcsposition -- Vec3
|
||||
self:T(self.lid .. "Height " .. height)
|
||||
return height
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- [Internal] Function to check surface type
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param Wrapper.Group#GROUP group The group for which to calculate the height
|
||||
-- @return #number height over ground
|
||||
function CTLD_HERCULES:Check_SurfaceType(object)
|
||||
self:T(self.lid .. "Check_SurfaceType")
|
||||
-- LAND,--1 SHALLOW_WATER,--2 WATER,--3 ROAD,--4 RUNWAY--5
|
||||
if object:isExist() then
|
||||
return land.getSurfaceType({x = object:getPosition().p.x, y = object:getPosition().p.z})
|
||||
else
|
||||
return 1
|
||||
end
|
||||
end
|
||||
|
||||
--- [Internal] Function to track cargo objects
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param #CTLD_HERCULES.CargoObject cargo
|
||||
-- @param Wrapper.Group#GROUP initiator
|
||||
-- @return #number height over ground
|
||||
function CTLD_HERCULES:Cargo_Track(cargo, initiator)
|
||||
self:T(self.lid .. "Cargo_Track")
|
||||
local Cargo_Drop_initiator = initiator
|
||||
if cargo.Cargo_Contents ~= nil then
|
||||
if self:Calculate_Object_Height_AGL(cargo.Cargo_Contents) < 10 then --pallet less than 5m above ground before spawning
|
||||
if self:Check_SurfaceType(cargo.Cargo_Contents) == 2 or self:Check_SurfaceType(cargo.Cargo_Contents) == 3 then
|
||||
cargo.Cargo_over_water = true--pallets gets destroyed in water
|
||||
end
|
||||
local dcsvec3 = self.ObjectTracker[cargo.Cargo_Contents.id_] or initiator:GetVec3() -- last known position
|
||||
self:T("SPAWNPOSITION: ")
|
||||
self:T({dcsvec3})
|
||||
local Vec2 = {
|
||||
x=dcsvec3.x,
|
||||
y=dcsvec3.z,
|
||||
}
|
||||
local vec3 = COORDINATE:NewFromVec2(Vec2)
|
||||
self.ObjectTracker[cargo.Cargo_Contents.id_] = nil
|
||||
self:Cargo_SpawnObjects(Cargo_Drop_initiator,cargo.Cargo_Drop_Direction, vec3, cargo.Cargo_Type_name, cargo.Cargo_over_water, cargo.Container_Enclosed, cargo.ParatrooperGroupSpawn, cargo.offload_cargo, cargo.all_cargo_survive_to_the_ground, cargo.all_cargo_gets_destroyed, cargo.destroy_cargo_dropped_without_parachute, cargo.Cargo_Country)
|
||||
if cargo.Cargo_Contents:isExist() then
|
||||
cargo.Cargo_Contents:destroy()--remove pallet+parachute before hitting ground and replace with Cargo_SpawnContents
|
||||
end
|
||||
--timer.removeFunction(cargo.scheduleFunctionID)
|
||||
cargo.scheduleFunctionID:Stop()
|
||||
cargo = {}
|
||||
end
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- [Internal] Function to calc north correction
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param Core.Point#POINT_Vec3 point Position Vec3
|
||||
-- @return #number north correction
|
||||
function CTLD_HERCULES:Calculate_Cargo_Drop_initiator_NorthCorrection(point)
|
||||
self:T(self.lid .. "Calculate_Cargo_Drop_initiator_NorthCorrection")
|
||||
if not point.z then --Vec2; convert to Vec3
|
||||
point.z = point.y
|
||||
point.y = 0
|
||||
end
|
||||
local lat, lon = coord.LOtoLL(point)
|
||||
local north_posit = coord.LLtoLO(lat + 1, lon)
|
||||
return math.atan2(north_posit.z - point.z, north_posit.x - point.x)
|
||||
end
|
||||
|
||||
--- [Internal] Function to calc initiator heading
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param Wrapper.Group#GROUP Cargo_Drop_initiator
|
||||
-- @return #number north corrected heading
|
||||
function CTLD_HERCULES:Calculate_Cargo_Drop_initiator_Heading(Cargo_Drop_initiator)
|
||||
self:T(self.lid .. "Calculate_Cargo_Drop_initiator_Heading")
|
||||
local Heading = Cargo_Drop_initiator:GetHeading()
|
||||
Heading = Heading + self:Calculate_Cargo_Drop_initiator_NorthCorrection(Cargo_Drop_initiator:GetVec3())
|
||||
if Heading < 0 then
|
||||
Heading = Heading + (2 * math.pi)-- put heading in range of 0 to 2*pi
|
||||
end
|
||||
return Heading + 0.06 -- rad
|
||||
end
|
||||
|
||||
--- [Internal] Function to initialize dropped cargo
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param Wrapper.Group#GROUP Initiator
|
||||
-- @param #table Cargo_Contents Table 'weapon' from event data
|
||||
-- @param #string Cargo_Type_name Name of this cargo
|
||||
-- @param #boolean Container_Enclosed Is container?
|
||||
-- @param #boolean SoldierGroup Is soldier group?
|
||||
-- @param #boolean ParatrooperGroupSpawnInit Is paratroopers?
|
||||
-- @return #CTLD_HERCULES self
|
||||
function CTLD_HERCULES:Cargo_Initialize(Initiator, Cargo_Contents, Cargo_Type_name, Container_Enclosed, SoldierGroup, ParatrooperGroupSpawnInit)
|
||||
self:T(self.lid .. "Cargo_Initialize")
|
||||
local Cargo_Drop_initiator = Initiator:GetName()
|
||||
if Cargo_Drop_initiator ~= nil then
|
||||
if ParatrooperGroupSpawnInit == true then
|
||||
self:T("Paratrooper Drop")
|
||||
-- Paratroopers
|
||||
if not self.ParatrooperCount[Cargo_Drop_initiator] then
|
||||
self.ParatrooperCount[Cargo_Drop_initiator] = 1
|
||||
else
|
||||
self.ParatrooperCount[Cargo_Drop_initiator] = self.ParatrooperCount[Cargo_Drop_initiator] + 1
|
||||
end
|
||||
|
||||
local Paratroopers = self.ParatrooperCount[Cargo_Drop_initiator]
|
||||
|
||||
self:T("Paratrooper Drop Number " .. self.ParatrooperCount[Cargo_Drop_initiator])
|
||||
|
||||
local SpawnParas = false
|
||||
|
||||
if math.fmod(Paratroopers,10) == 0 then
|
||||
SpawnParas = true
|
||||
end
|
||||
|
||||
self.j = self.j + 1
|
||||
self.Cargo[self.j] = {}
|
||||
self.Cargo[self.j].Cargo_Drop_Direction = self:Calculate_Cargo_Drop_initiator_Heading(Initiator)
|
||||
self.Cargo[self.j].Cargo_Contents = Cargo_Contents
|
||||
self.Cargo[self.j].Cargo_Type_name = Cargo_Type_name
|
||||
self.Cargo[self.j].Container_Enclosed = Container_Enclosed
|
||||
self.Cargo[self.j].ParatrooperGroupSpawn = SpawnParas
|
||||
self.Cargo[self.j].Cargo_Country = Initiator:GetCountry()
|
||||
|
||||
if self:Calculate_Object_Height_AGL(Initiator) < 5.0 then --aircraft on ground
|
||||
self.Cargo[self.j].offload_cargo = true
|
||||
elseif self:Calculate_Object_Height_AGL(Initiator) < 10.0 then --aircraft less than 10m above ground
|
||||
self.Cargo[self.j].all_cargo_survive_to_the_ground = true
|
||||
elseif self:Calculate_Object_Height_AGL(Initiator) < 100.0 then --aircraft more than 10m but less than 100m above ground
|
||||
self.Cargo[self.j].all_cargo_gets_destroyed = true
|
||||
else
|
||||
self.Cargo[self.j].all_cargo_gets_destroyed = false
|
||||
end
|
||||
|
||||
local timer = TIMER:New(self.Cargo_Track,self,self.Cargo[self.j],Initiator)
|
||||
self.Cargo[self.j].scheduleFunctionID = timer
|
||||
timer:Start(1,1,600)
|
||||
|
||||
else
|
||||
-- no paras
|
||||
self.j = self.j + 1
|
||||
self.Cargo[self.j] = {}
|
||||
self.Cargo[self.j].Cargo_Drop_Direction = self:Calculate_Cargo_Drop_initiator_Heading(Initiator)
|
||||
self.Cargo[self.j].Cargo_Contents = Cargo_Contents
|
||||
self.Cargo[self.j].Cargo_Type_name = Cargo_Type_name
|
||||
self.Cargo[self.j].Container_Enclosed = Container_Enclosed
|
||||
self.Cargo[self.j].ParatrooperGroupSpawn = false
|
||||
self.Cargo[self.j].Cargo_Country = Initiator:GetCountry()
|
||||
|
||||
if self:Calculate_Object_Height_AGL(Initiator) < 5.0 then--aircraft on ground
|
||||
self.Cargo[self.j].offload_cargo = true
|
||||
elseif self:Calculate_Object_Height_AGL(Initiator) < 10.0 then--aircraft less than 10m above ground
|
||||
self.Cargo[self.j].all_cargo_survive_to_the_ground = true
|
||||
elseif self:Calculate_Object_Height_AGL(Initiator) < 100.0 then--aircraft more than 10m but less than 100m above ground
|
||||
self.Cargo[self.j].all_cargo_gets_destroyed = true
|
||||
else
|
||||
self.Cargo[self.j].destroy_cargo_dropped_without_parachute = true --aircraft more than 100m above ground
|
||||
end
|
||||
|
||||
local timer = TIMER:New(self.Cargo_Track,self,self.Cargo[self.j],Initiator)
|
||||
self.Cargo[self.j].scheduleFunctionID = timer
|
||||
timer:Start(1,1,600)
|
||||
end
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- [Internal] Function to change cargotype per group (Wrench)
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param #number key Carrier key id
|
||||
-- @param #string cargoType Type of cargo
|
||||
-- @param #number cargoNum Number of cargo objects
|
||||
-- @return #CTLD_HERCULES self
|
||||
function CTLD_HERCULES:SetType(key,cargoType,cargoNum)
|
||||
self:T(self.lid .. "SetType")
|
||||
self.carrierGroups[key]['cargoType'] = cargoType
|
||||
self.carrierGroups[key]['cargoNum'] = cargoNum
|
||||
return self
|
||||
end
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- EventHandlers
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--- [Internal] Function to capture SHOT event
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param Core.Event#EVENTDATA Cargo_Drop_Event The event data
|
||||
-- @return #CTLD_HERCULES self
|
||||
function CTLD_HERCULES:_HandleShot(Cargo_Drop_Event)
|
||||
self:T(self.lid .. "Shot Event ID:" .. Cargo_Drop_Event.id)
|
||||
if Cargo_Drop_Event.id == EVENTS.Shot then
|
||||
|
||||
local GT_Name = ""
|
||||
local SoldierGroup = false
|
||||
local ParatrooperGroupSpawnInit = false
|
||||
|
||||
local GT_DisplayName = Weapon.getDesc(Cargo_Drop_Event.weapon).typeName:sub(15, -1)--Remove "weapons.bombs." from string
|
||||
self:T(string.format("%sCargo_Drop_Event: %s", self.lid, Weapon.getDesc(Cargo_Drop_Event.weapon).typeName))
|
||||
|
||||
if (GT_DisplayName == "Squad 30 x Soldier [7950lb]") then
|
||||
self:Cargo_Initialize(Cargo_Drop_Event.IniGroup, Cargo_Drop_Event.weapon, "Soldier M4 GRG", false, true, true)
|
||||
end
|
||||
|
||||
if self.Types[GT_DisplayName] then
|
||||
local GT_Name = self.Types[GT_DisplayName]['name']
|
||||
local Cargo_Container_Enclosed = self.Types[GT_DisplayName]['container']
|
||||
self:Cargo_Initialize(Cargo_Drop_Event.IniGroup, Cargo_Drop_Event.weapon, GT_Name, Cargo_Container_Enclosed)
|
||||
end
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- [Internal] Function to capture BIRTH event
|
||||
-- @param #CTLD_HERCULES self
|
||||
-- @param Core.Event#EVENTDATA event The event data
|
||||
-- @return #CTLD_HERCULES self
|
||||
function CTLD_HERCULES:_HandleBirth(event)
|
||||
-- not sure what this is needed for? I think this for setting generic crates "content" setting.
|
||||
self:T(self.lid .. "Birth Event ID:" .. event.id)
|
||||
return self
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
-- End Ops.CTLD.lua
|
||||
-------------------------------------------------------------------
|
||||
@@ -0,0 +1,752 @@
|
||||
---
|
||||
-- @field Messages
|
||||
CTLD.Messages = {
|
||||
EN = {
|
||||
-- ============================================================
|
||||
-- Crate / Cargo Loading
|
||||
-- ============================================================
|
||||
CRATE_LOADED_GROUNDCREW = "Crate %s loaded by ground crew!",
|
||||
CRATE_UNLOADED_GROUNDCREW = "Crate %s unloaded by ground crew!",
|
||||
CRATE_LOADED_ID = "Crate ID %d for %s loaded!",
|
||||
LOADED_FULL = "Loaded %d %s.",
|
||||
LOADED_SETS_LEFTOVER = "Loaded %d %s(s), with %d leftover crate(s).",
|
||||
LOADED_SETS = "Loaded %d %s(s).",
|
||||
LOADED_PARTIAL = "Loaded only %d/%d crate(s) of %s.",
|
||||
LOADED_PARTIAL_LIMIT = "Loaded only %d/%d crate(s) of %s. Cargo limit is now reached!",
|
||||
LOADED_BATCH = "Loaded %d %s.",
|
||||
LOADED_BATCH_PARTIAL = "Some sets could not be fully loaded.",
|
||||
-- ============================================================
|
||||
-- Dropping / Unloading
|
||||
-- ============================================================
|
||||
DROPPED_FULL = "Dropped %d %s.",
|
||||
DROPPED_SETS_LEFTOVER = "Dropped %d %s(s), with %d leftover crate(s).",
|
||||
DROPPED_SETS = "Dropped %d %s(s).",
|
||||
DROPPED_PARTIAL = "Dropped %d/%d crate(s) of %s.",
|
||||
DROPPED_INTO_ACTION = "Dropped %s into action!",
|
||||
DROPPED_BEACON = "Dropped %s | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
||||
CRATES_POSITIONED = "%d crates for %s have been positioned near you!",
|
||||
CRATES_DROPPED = "%d crates for %s have been dropped!",
|
||||
-- ============================================================
|
||||
-- Troops
|
||||
-- ============================================================
|
||||
BOARDED = "%s boarded!",
|
||||
BOARDING = "%s boarding!",
|
||||
TROOPS_RETURNED = "Troops have returned to base!",
|
||||
-- ============================================================
|
||||
-- Deployment
|
||||
-- ============================================================
|
||||
DEPLOYED_NEAR_YOU = "%s have been deployed near you!",
|
||||
UNITS_REMOVED = "%s have been removed",
|
||||
-- ============================================================
|
||||
-- Build / Repair
|
||||
-- ============================================================
|
||||
BUILD_STARTED = "Build started, ready in %d seconds!",
|
||||
REPAIR_STARTED = "Repair started using %s taking %d secs",
|
||||
NO_UNIT_TO_REPAIR = "No unit close enough to repair!",
|
||||
CANT_REPAIR_WITH = "Can't repair this unit with %s",
|
||||
CRATES_MOVE_BEFORE_BUILD = "*** Crates need to be moved before building!",
|
||||
-- ============================================================
|
||||
-- Errors - Chopper / Weight / Capacity
|
||||
-- ============================================================
|
||||
CHOPPER_CANNOT_CARRY = "Sorry this chopper cannot carry crates!",
|
||||
TOO_HEAVY = "Sorry, that's too heavy to load!",
|
||||
FULLY_LOADED = "Sorry, we are fully loaded!",
|
||||
CRAMMED = "Sorry, we're crammed already!",
|
||||
NO_CAPACITY_NOW = "No capacity to load more now!",
|
||||
NO_MORE_CAPACITY = "No more capacity to load crates!",
|
||||
CANNOT_LOAD_NONE_OR_FULL = "Cannot load crates: either none found or no capacity left.",
|
||||
-- ============================================================
|
||||
-- Errors - Position
|
||||
-- ============================================================
|
||||
NEED_TO_LAND_OR_HOVER_LOAD = "You need to land or hover in position to load!",
|
||||
HOVER_OVER_CRATES = "Hover over the crates to pick them up!",
|
||||
LAND_OR_HOVER_OVER_CRATES = "Land or hover over the crates to pick them up!",
|
||||
MUST_LAND_OR_HOVER_CRATES = "You must land or hover to load crates!",
|
||||
NEED_TO_LAND_BUILD = "You need to land / stop to build something, Pilot!",
|
||||
NOT_CLOSE_ENOUGH_LOGISTICS = "You are not close enough to a logistics zone!",
|
||||
NOT_CLOSE_ENOUGH_DROP = "You are not close enough to a drop zone!",
|
||||
NOT_CLOSE_ENOUGH_ZONE_NM = "Negative, need to be closer than %dnm to a zone!",
|
||||
CANNOT_BUILD_LOADING_AREA = "You cannot build in a loading area, Pilot!",
|
||||
-- ============================================================
|
||||
-- Errors - Doors
|
||||
-- ============================================================
|
||||
OPEN_DOORS_LOAD_CARGO = "You need to open the door(s) to load cargo!",
|
||||
OPEN_DOORS_LOAD_TROOPS = "You need to open the door(s) to load troops!",
|
||||
OPEN_DOORS_EXTRACT_TROOPS = "You need to open the door(s) to extract troops!",
|
||||
OPEN_DOORS_UNLOAD_TROOPS = "You need to open the door(s) to unload troops!",
|
||||
OPEN_DOORS_DROP_CARGO = "You need to open the door(s) to drop cargo!",
|
||||
-- ============================================================
|
||||
-- Errors - Stock / Availability
|
||||
-- ============================================================
|
||||
ALL_GONE = "Sorry, all %s are gone!",
|
||||
RAN_OUT_OF = "Sorry, we ran out of %s",
|
||||
CARGO_NOT_AVAILABLE_ZONE = "The requested cargo is not available in this zone!",
|
||||
ENOUGH_CRATES_NEARBY = "There are enough crates nearby already! Take care of those first!",
|
||||
NO_CRATES_WITHIN = "No (loadable) crates within %d meters!",
|
||||
NO_CRATES_WITHIN_PLAIN = "No crates within %d meters!",
|
||||
NO_CRATES_IN_RANGE = "No crates found in range!",
|
||||
NO_NAMED_CRATES_IN_RANGE = "No \"%s\" crates found in range!",
|
||||
NO_LOADABLE_CRATES = "Sorry, no loadable crates nearby or max cargo weight reached!",
|
||||
NO_UNITS_TO_EXTRACT = "No units close enough to extract!",
|
||||
NO_UNIT_CONFIG = "No unit configuration found for %s",
|
||||
CANT_ONBOARD = "Can't onboard %s",
|
||||
TOO_MANY_UNITS_NEARBY = "You already have %d units nearby!",
|
||||
NO_CRATE_GROUPS = "No crate groups found for this unit!",
|
||||
NO_CRATE_SET = "No crate set found or index invalid!",
|
||||
NO_CRATE_IN_SET = "No crate found in that set!",
|
||||
NO_TROOP_CHUNK = "No troop cargo chunk found for ID %d!",
|
||||
TROOP_CHUNK_EMPTY = "Troop chunk is empty for ID %d!",
|
||||
-- ============================================================
|
||||
-- Nothing loaded / in stock
|
||||
-- ============================================================
|
||||
NOTHING_LOADED = "Nothing loaded!\nTroop limit: %d | Crate limit %d | Weight limit %d kgs",
|
||||
NOTHING_LOADED_AIRDROP = "Nothing loaded or not within airdrop parameters!",
|
||||
NOTHING_LOADED_HOVER = "Nothing loaded or not hovering within parameters!",
|
||||
NOTHING_IN_STOCK = "Nothing in stock!",
|
||||
NOTHING_TO_PACK = "Nothing to pack at this distance pilot!",
|
||||
NOTHING_TO_REMOVE = "Nothing to remove at this distance pilot!",
|
||||
-- ============================================================
|
||||
-- Zone / Info
|
||||
-- ============================================================
|
||||
ROGER_ZONE = "Roger, %s zone %s!",
|
||||
-- ============================================================
|
||||
-- Report: Hover / Flight Parameters
|
||||
-- ============================================================
|
||||
HOVER_PARAMS_METRIC = "Hover parameters (autoload/drop):\n - Min height %dm \n - Max height %dm \n - Max speed 2mps \n - In parameter: %s",
|
||||
HOVER_PARAMS_IMPERIAL = "Hover parameters (autoload/drop):\n - Min height %dft \n - Max height %dft \n - Max speed 6ftps \n - In parameter: %s",
|
||||
FLIGHT_PARAMS_IMPERIAL = "Flight parameters (airdrop):\n - Min height %dft \n - Max height %dft \n - In parameter: %s",
|
||||
FLIGHT_PARAMS_METRIC = "Flight parameters (airdrop):\n - Min height %dm \n - Max height %dm \n - In parameter: %s",
|
||||
-- ============================================================
|
||||
-- Report Titles (REPORT:New())
|
||||
-- ============================================================
|
||||
REPORT_CRATES_FOUND = "Crates Found Nearby:",
|
||||
REPORT_REMOVING_CRATES = "Removing Crates Found Nearby:",
|
||||
REPORT_TRANSPORT_CHECKOUT = "Transport Checkout Sheet",
|
||||
REPORT_INVENTORY = "Inventory Sheet",
|
||||
REPORT_BUILD_CHECKLIST = "Checklist Buildable Crates",
|
||||
REPORT_REPAIR_CHECKLIST = "Checklist Repairs",
|
||||
REPORT_BEACONS = "Active Zone Beacons",
|
||||
-- ============================================================
|
||||
-- Report Section Headers (report:Add())
|
||||
-- ============================================================
|
||||
REPORT_SECTION_TROOPS = " -- TROOPS --",
|
||||
REPORT_SECTION_CRATES = " -- CRATES --",
|
||||
REPORT_SECTION_CRATES_GC = " -- CRATES loaded via Ground Crew --",
|
||||
REPORT_SECTION_NONE = " N O N E",
|
||||
REPORT_SECTION_NONE_ALT = " --- None found! ---",
|
||||
REPORT_SECTION_NONE_REPAIR = " --- None Found ---",
|
||||
REPORT_GC_LOADABLE_HINT = "Probably ground crew loadable (F8)",
|
||||
REPORT_TOTAL_MASS = "Total Mass: %s kg. Loadable: %s kg.",
|
||||
REPORT_TROOPS_CRATES_COUNT = "Troops: %d(%d), Crates: %d(%d)",
|
||||
REPORT_TROOPS_CRATETYPES_COUNT = "Troops: %d, Cratetypes: %d",
|
||||
-- ============================================================
|
||||
-- Report Row Templates (per-item lines in reports)
|
||||
-- ============================================================
|
||||
REPORT_ROW_TROOP = "Troop: %s size %d",
|
||||
REPORT_ROW_CRATE = "Crate: %s %d/%d",
|
||||
REPORT_ROW_CRATE_SIZE1 = "Crate: %s size 1",
|
||||
REPORT_ROW_GC_CRATE = "GC loaded Crate: %s size 1",
|
||||
REPORT_ROW_DROPPED_CRATE = "Dropped crate for %s, %dkg",
|
||||
REPORT_ROW_CRATE_KG = "Crate for %s, %dkg",
|
||||
REPORT_ROW_CRATE_REMOVED = "Crate for %s, %dkg removed",
|
||||
REPORT_ROW_UNIT_STOCK = "Unit: %s | Soldiers: %d | Stock: %s",
|
||||
REPORT_ROW_TYPE_CRATE_STOCK = "Type: %s | Crates per Set: %d | Stock: %s",
|
||||
REPORT_ROW_TYPE_STOCK = "Type: %s | Stock: %s",
|
||||
REPORT_ROW_BUILD_CHECK = "Type: %s | Required %d | Found %d | Can Build %s",
|
||||
REPORT_ROW_REPAIR_CHECK = "Type: %s | Required %d | Found %d | Can Repair %s",
|
||||
REPORT_ROW_BEACON = " %s | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
||||
-- ============================================================
|
||||
-- Weight / Crate limit tokens
|
||||
-- ============================================================
|
||||
WEIGHT_LIMIT = "Weight limit reached",
|
||||
CRATE_LIMIT = "Crate limit reached",
|
||||
-- ============================================================
|
||||
-- Menu labels - Top level
|
||||
-- ============================================================
|
||||
MENU_CTLD = "CTLD",
|
||||
MENU_MANAGE_TROOPS = "Manage Troops",
|
||||
MENU_MANAGE_CRATES = "Manage Crates",
|
||||
MENU_MANAGE_UNITS = "Manage Units",
|
||||
-- ============================================================
|
||||
-- Menu labels - Troops
|
||||
-- ============================================================
|
||||
MENU_LOAD_TROOPS = "Load troops",
|
||||
MENU_DROP_TROOPS = "Drop Troops",
|
||||
MENU_DROP_ALL_TROOPS = "Drop ALL troops",
|
||||
MENU_EXTRACT_TROOPS = "Extract troops",
|
||||
MENU_DROP_N_TROOPS = "Drop (%d) %s",
|
||||
-- ============================================================
|
||||
-- Menu labels - Crates: Get
|
||||
-- ============================================================
|
||||
MENU_GET_CRATES = "Get Crates",
|
||||
MENU_GET = "Get",
|
||||
MENU_GET_AND_LOAD = "Get and Load",
|
||||
MENU_GET_ANYWAY = "Get anyway",
|
||||
MENU_PARTIALLY_LOAD = "Partially load",
|
||||
MENU_OUT_OF_STOCK = "Out of stock",
|
||||
MENU_TROOP_LIMIT = "Troop limit reached",
|
||||
-- ============================================================
|
||||
-- Menu labels - Crates: Load
|
||||
-- ============================================================
|
||||
MENU_LOAD_CRATES = "Load Crates",
|
||||
MENU_LOAD_ALL = "Load ALL",
|
||||
MENU_SHOW_LOADABLE_CRATES = "Show loadable crates",
|
||||
MENU_NO_CRATES_FOUND_RESCAN = "No crates found! Rescan?",
|
||||
MENU_USE_C130_LOAD = "Use C-130 Load system",
|
||||
-- ============================================================
|
||||
-- Menu labels - Crates: Drop
|
||||
-- ============================================================
|
||||
MENU_DROP_CRATES = "Drop Crates",
|
||||
MENU_DROP_ALL_CRATES = "Drop ALL crates",
|
||||
MENU_DROP = "Drop",
|
||||
MENU_DROP_AND_BUILD = "Drop and build",
|
||||
MENU_DROP_N_SETS = "Drop %d Set%s",
|
||||
MENU_NO_CRATES_TO_DROP = "No crates to drop!",
|
||||
-- ============================================================
|
||||
-- Menu labels - Crates: Build / Repair / Pack / Remove
|
||||
-- ============================================================
|
||||
MENU_BUILD_CRATES = "Build crates",
|
||||
MENU_REPAIR = "Repair",
|
||||
MENU_PACK_CRATES = "Pack crates",
|
||||
MENU_PACK = "Pack",
|
||||
MENU_PACK_AND_LOAD = "Pack and Load",
|
||||
MENU_PACK_AND_REMOVE = "Pack and Remove",
|
||||
MENU_REMOVE_CRATES = "Remove crates",
|
||||
MENU_REMOVE_CRATES_NEARBY = "Remove crates nearby",
|
||||
MENU_LIST_CRATES_NEARBY = "List crates nearby",
|
||||
MENU_CRATES_NEEDED = "%d crate%s %s (%dkg)",
|
||||
-- ============================================================
|
||||
-- Menu labels - Units (C-130)
|
||||
-- ============================================================
|
||||
MENU_GET_UNITS = "Get Units",
|
||||
MENU_REMOVE_UNITS_NEARBY = "Remove units nearby",
|
||||
-- ============================================================
|
||||
-- Menu labels - Info / Cargo
|
||||
-- ============================================================
|
||||
MENU_LIST_BOARDED_CARGO = "List boarded cargo",
|
||||
MENU_INVENTORY = "Inventory",
|
||||
MENU_LIST_ZONE_BEACONS = "List active zone beacons",
|
||||
-- ============================================================
|
||||
-- Menu labels - Smokes / Flares / Beacons
|
||||
-- ============================================================
|
||||
MENU_SMOKES_FLARES_BEACONS = "Smokes, Flares, Beacons",
|
||||
MENU_SMOKE_ZONES_NEARBY = "Smoke zones nearby",
|
||||
MENU_DROP_SMOKE_NOW = "Drop smoke now",
|
||||
MENU_RED_SMOKE = "Red smoke",
|
||||
MENU_BLUE_SMOKE = "Blue smoke",
|
||||
MENU_GREEN_SMOKE = "Green smoke",
|
||||
MENU_ORANGE_SMOKE = "Orange smoke",
|
||||
MENU_WHITE_SMOKE = "White smoke",
|
||||
MENU_FLARE_ZONES_NEARBY = "Flare zones nearby",
|
||||
MENU_FIRE_FLARE_NOW = "Fire flare now",
|
||||
MENU_DROP_BEACON_NOW = "Drop beacon now",
|
||||
-- ============================================================
|
||||
-- Menu labels - Parameters
|
||||
-- ============================================================
|
||||
MENU_SHOW_FLIGHT_PARAMS = "Show flight parameters",
|
||||
MENU_SHOW_HOVER_PARAMS = "Show hover parameters",
|
||||
STOCK_NONE = "none",
|
||||
STOCK_UNLIMITED = "unlimited",
|
||||
BUILD_YES = "YES",
|
||||
BUILD_NO = "NO",
|
||||
},
|
||||
DE = {
|
||||
-- ============================================================
|
||||
-- Kiste / Fracht laden
|
||||
-- ============================================================
|
||||
CRATE_LOADED_GROUNDCREW = "Kiste %s vom Bodenpersonal geladen!",
|
||||
CRATE_UNLOADED_GROUNDCREW = "Kiste %s vom Bodenpersonal entladen!",
|
||||
CRATE_LOADED_ID = "Kiste ID %d für %s geladen!",
|
||||
LOADED_FULL = "%d %s geladen.",
|
||||
LOADED_SETS_LEFTOVER = "%d %s geladen, %d Kiste(n) übrig.",
|
||||
LOADED_SETS = "%d %s geladen.",
|
||||
LOADED_PARTIAL = "Nur %d/%d Kiste(n) von %s geladen.",
|
||||
LOADED_PARTIAL_LIMIT = "Nur %d/%d Kiste(n) von %s geladen. Frachtlimit erreicht!",
|
||||
LOADED_BATCH = "%d %s geladen.",
|
||||
LOADED_BATCH_PARTIAL = "Einige Sets konnten nicht vollständig geladen werden.",
|
||||
-- ============================================================
|
||||
-- Abwerfen / Entladen
|
||||
-- ============================================================
|
||||
DROPPED_FULL = "%d %s abgeworfen.",
|
||||
DROPPED_SETS_LEFTOVER = "%d %s abgeworfen, %d Kiste(n) übrig.",
|
||||
DROPPED_SETS = "%d %s abgeworfen.",
|
||||
DROPPED_PARTIAL = "%d/%d Kiste(n) von %s abgeworfen.",
|
||||
DROPPED_INTO_ACTION = "%s im Einsatz abgesetzt!",
|
||||
DROPPED_BEACON = "%s abgesetzt | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
||||
CRATES_POSITIONED = "%d Kisten für %s in Ihrer Nähe positioniert!",
|
||||
CRATES_DROPPED = "%d Kisten für %s abgeworfen!",
|
||||
-- ============================================================
|
||||
-- Truppen
|
||||
-- ============================================================
|
||||
BOARDED = "%s eingestiegen!",
|
||||
BOARDING = "%s steigt ein!",
|
||||
TROOPS_RETURNED = "Truppen zur Basis zurückgekehrt!",
|
||||
-- ============================================================
|
||||
-- Einsatz
|
||||
-- ============================================================
|
||||
DEPLOYED_NEAR_YOU = "%s in Ihrer Nähe eingesetzt!",
|
||||
UNITS_REMOVED = "%s entfernt",
|
||||
-- ============================================================
|
||||
-- Bauen / Reparieren
|
||||
-- ============================================================
|
||||
BUILD_STARTED = "Bau gestartet, fertig in %d Sekunden!",
|
||||
REPAIR_STARTED = "Reparatur mit %s gestartet, dauert %d Sek.",
|
||||
NO_UNIT_TO_REPAIR = "Keine Einheit in Reichweite zum Reparieren!",
|
||||
CANT_REPAIR_WITH = "Diese Einheit kann nicht mit %s repariert werden",
|
||||
CRATES_MOVE_BEFORE_BUILD = "*** Kisten müssen vor dem Bau verschoben werden!",
|
||||
-- ============================================================
|
||||
-- Fehler - Hubschrauber / Gewicht / Kapazität
|
||||
-- ============================================================
|
||||
CHOPPER_CANNOT_CARRY = "Dieser Hubschrauber kann keine Kisten transportieren!",
|
||||
TOO_HEAVY = "Entschuldigung, das ist zu schwer zum Laden!",
|
||||
FULLY_LOADED = "Entschuldigung, wir sind voll beladen!",
|
||||
CRAMMED = "Entschuldigung, wir sind bereits voll besetzt!",
|
||||
NO_CAPACITY_NOW = "Aktuell keine Ladekapazität mehr vorhanden!",
|
||||
NO_MORE_CAPACITY = "Keine Kapazität mehr für weitere Kisten!",
|
||||
CANNOT_LOAD_NONE_OR_FULL = "Laden nicht möglich: keine Kisten gefunden oder Kapazität erschöpft.",
|
||||
-- ============================================================
|
||||
-- Fehler - Position
|
||||
-- ============================================================
|
||||
NEED_TO_LAND_OR_HOVER_LOAD = "Bitte landen oder schweben Sie zum Laden!",
|
||||
HOVER_OVER_CRATES = "Schweben Sie über die Kisten, um sie aufzunehmen!",
|
||||
LAND_OR_HOVER_OVER_CRATES = "Landen oder schweben Sie über die Kisten, um sie aufzunehmen!",
|
||||
MUST_LAND_OR_HOVER_CRATES = "Sie müssen landen oder schweben, um Kisten zu laden!",
|
||||
NEED_TO_LAND_BUILD = "Sie müssen landen / anhalten, um etwas zu bauen, Pilot!",
|
||||
NOT_CLOSE_ENOUGH_LOGISTICS = "Sie sind nicht nah genug an einer Logistikzone!",
|
||||
NOT_CLOSE_ENOUGH_DROP = "Sie sind nicht nah genug an einer Abwurfzone!",
|
||||
NOT_CLOSE_ENOUGH_ZONE_NM = "Negativ, Sie müssen näher als %d Seemeilen an einer Zone sein!",
|
||||
CANNOT_BUILD_LOADING_AREA = "In einem Ladebereich kann nicht gebaut werden, Pilot!",
|
||||
-- ============================================================
|
||||
-- Fehler - Türen
|
||||
-- ============================================================
|
||||
OPEN_DOORS_LOAD_CARGO = "Bitte öffnen Sie die Tür(en) zum Laden von Fracht!",
|
||||
OPEN_DOORS_LOAD_TROOPS = "Bitte öffnen Sie die Tür(en) zum Einladen von Truppen!",
|
||||
OPEN_DOORS_EXTRACT_TROOPS = "Bitte öffnen Sie die Tür(en) zum Aussteigen der Truppen!",
|
||||
OPEN_DOORS_UNLOAD_TROOPS = "Bitte öffnen Sie die Tür(en) zum Entladen der Truppen!",
|
||||
OPEN_DOORS_DROP_CARGO = "Bitte öffnen Sie die Tür(en) zum Abwerfen der Fracht!",
|
||||
-- ============================================================
|
||||
-- Fehler - Bestand / Verfügbarkeit
|
||||
-- ============================================================
|
||||
ALL_GONE = "Entschuldigung, alle %s sind vergriffen!",
|
||||
RAN_OUT_OF = "Entschuldigung, %s ist nicht mehr vorrätig",
|
||||
CARGO_NOT_AVAILABLE_ZONE = "Die angeforderte Fracht ist in dieser Zone nicht verfügbar!",
|
||||
ENOUGH_CRATES_NEARBY = "Es sind bereits genügend Kisten in der Nähe! Bitte zuerst um diese kümmern!",
|
||||
NO_CRATES_WITHIN = "Keine (ladbaren) Kisten in %d Metern Umkreis!",
|
||||
NO_CRATES_WITHIN_PLAIN = "Keine Kisten in %d Metern Umkreis!",
|
||||
NO_CRATES_IN_RANGE = "Keine Kisten in Reichweite gefunden!",
|
||||
NO_NAMED_CRATES_IN_RANGE = "Keine \"%s\"-Kisten in Reichweite gefunden!",
|
||||
NO_LOADABLE_CRATES = "Entschuldigung, keine ladbaren Kisten in der Nähe oder maximales Frachtgewicht erreicht!",
|
||||
NO_UNITS_TO_EXTRACT = "Keine Einheiten nah genug zum Aussteigen!",
|
||||
NO_UNIT_CONFIG = "Keine Einheitenkonfiguration für %s gefunden",
|
||||
CANT_ONBOARD = "%s kann nicht eingeladen werden",
|
||||
TOO_MANY_UNITS_NEARBY = "Sie haben bereits %d Einheiten in der Nähe!",
|
||||
NO_CRATE_GROUPS = "Keine Kistengruppen für diese Einheit gefunden!",
|
||||
NO_CRATE_SET = "Kein Kistenset gefunden oder Index ungültig!",
|
||||
NO_CRATE_IN_SET = "Keine Kiste in diesem Set gefunden!",
|
||||
NO_TROOP_CHUNK = "Kein Truppenfracht-Block für ID %d gefunden!",
|
||||
TROOP_CHUNK_EMPTY = "Truppenfracht-Block für ID %d ist leer!",
|
||||
-- ============================================================
|
||||
-- Nichts geladen / kein Bestand
|
||||
-- ============================================================
|
||||
NOTHING_LOADED = "Nichts geladen!\nTruppenlimit: %d | Kistenlimit: %d | Gewichtslimit: %d kg",
|
||||
NOTHING_LOADED_AIRDROP = "Nichts geladen oder nicht innerhalb der Abwurfparameter!",
|
||||
NOTHING_LOADED_HOVER = "Nichts geladen oder Schwebeparameter nicht erfüllt!",
|
||||
NOTHING_IN_STOCK = "Nichts vorrätig!",
|
||||
NOTHING_TO_PACK = "Nichts in dieser Entfernung zum Verpacken, Pilot!",
|
||||
NOTHING_TO_REMOVE = "Nichts in dieser Entfernung zum Entfernen, Pilot!",
|
||||
-- ============================================================
|
||||
-- Zone / Info
|
||||
-- ============================================================
|
||||
ROGER_ZONE = "Verstanden, %s Zone %s!",
|
||||
-- ============================================================
|
||||
-- Report: Schwebe- / Flugparameter
|
||||
-- ============================================================
|
||||
HOVER_PARAMS_METRIC = "Schwebeparameter (Autoladen/Abwurf):\n - Min. Höhe %dm \n - Max. Höhe %dm \n - Max. Geschwindigkeit 2m/s \n - Im Parameter: %s",
|
||||
HOVER_PARAMS_IMPERIAL = "Schwebeparameter (Autoladen/Abwurf):\n - Min. Höhe %dft \n - Max. Höhe %dft \n - Max. Geschwindigkeit 6ft/s \n - Im Parameter: %s",
|
||||
FLIGHT_PARAMS_IMPERIAL = "Flugparameter (Luftabwurf):\n - Min. Höhe %dft \n - Max. Höhe %dft \n - Im Parameter: %s",
|
||||
FLIGHT_PARAMS_METRIC = "Flugparameter (Luftabwurf):\n - Min. Höhe %dm \n - Max. Höhe %dm \n - Im Parameter: %s",
|
||||
-- ============================================================
|
||||
-- Report-Titel
|
||||
-- ============================================================
|
||||
REPORT_CRATES_FOUND = "Kisten in der Nähe:",
|
||||
REPORT_REMOVING_CRATES = "Entferne Kisten in der Nähe:",
|
||||
REPORT_TRANSPORT_CHECKOUT = "Transport-Checkliste",
|
||||
REPORT_INVENTORY = "Inventarliste",
|
||||
REPORT_BUILD_CHECKLIST = "Checkliste baubare Kisten",
|
||||
REPORT_REPAIR_CHECKLIST = "Checkliste Reparaturen",
|
||||
REPORT_BEACONS = "Aktive Zonenfeuer",
|
||||
-- ============================================================
|
||||
-- Report-Sektionskopfzeilen
|
||||
-- ============================================================
|
||||
REPORT_SECTION_TROOPS = " -- TRUPPEN --",
|
||||
REPORT_SECTION_CRATES = " -- KISTEN --",
|
||||
REPORT_SECTION_CRATES_GC = " -- KISTEN via Bodenpersonal geladen --",
|
||||
REPORT_SECTION_NONE = " K E I N E",
|
||||
REPORT_SECTION_NONE_ALT = " --- Keine gefunden! ---",
|
||||
REPORT_SECTION_NONE_REPAIR = " --- Keine gefunden ---",
|
||||
REPORT_GC_LOADABLE_HINT = "Wahrscheinlich durch Bodenpersonal ladbar (F8)",
|
||||
REPORT_TOTAL_MASS = "Gesamtgewicht: %s kg. Ladbar: %s kg.",
|
||||
REPORT_TROOPS_CRATES_COUNT = "Truppen: %d(%d), Kisten: %d(%d)",
|
||||
REPORT_TROOPS_CRATETYPES_COUNT = "Truppen: %d, Kistentypen: %d",
|
||||
-- ============================================================
|
||||
-- Report-Zeilenvorlagen
|
||||
-- ============================================================
|
||||
REPORT_ROW_TROOP = "Truppe: %s Größe %d",
|
||||
REPORT_ROW_CRATE = "Kiste: %s %d/%d",
|
||||
REPORT_ROW_CRATE_SIZE1 = "Kiste: %s Größe 1",
|
||||
REPORT_ROW_GC_CRATE = "Bodenpersonal-Kiste: %s Größe 1",
|
||||
REPORT_ROW_DROPPED_CRATE = "Abgeworfene Kiste für %s, %dkg",
|
||||
REPORT_ROW_CRATE_KG = "Kiste für %s, %dkg",
|
||||
REPORT_ROW_CRATE_REMOVED = "Kiste für %s, %dkg entfernt",
|
||||
REPORT_ROW_UNIT_STOCK = "Einheit: %s | Soldaten: %d | Bestand: %s",
|
||||
REPORT_ROW_TYPE_CRATE_STOCK = "Typ: %s | Kisten pro Set: %d | Bestand: %s",
|
||||
REPORT_ROW_TYPE_STOCK = "Typ: %s | Bestand: %s",
|
||||
REPORT_ROW_BUILD_CHECK = "Typ: %s | Benötigt: %d | Gefunden: %d | Baubar: %s",
|
||||
REPORT_ROW_REPAIR_CHECK = "Typ: %s | Benötigt: %d | Gefunden: %d | Reparierbar: %s",
|
||||
REPORT_ROW_BEACON = " %s | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
||||
-- ============================================================
|
||||
-- Gewichts- / Kistenlimit-Token
|
||||
-- ============================================================
|
||||
WEIGHT_LIMIT = "Gewichtslimit erreicht",
|
||||
CRATE_LIMIT = "Kistenlimit erreicht",
|
||||
-- ============================================================
|
||||
-- Menübezeichnungen - Obere Ebene
|
||||
-- ============================================================
|
||||
MENU_CTLD = "CTLD",
|
||||
MENU_MANAGE_TROOPS = "Truppen verwalten",
|
||||
MENU_MANAGE_CRATES = "Kisten verwalten",
|
||||
MENU_MANAGE_UNITS = "Einheiten verwalten",
|
||||
-- ============================================================
|
||||
-- Menübezeichnungen - Truppen
|
||||
-- ============================================================
|
||||
MENU_LOAD_TROOPS = "Truppen einladen",
|
||||
MENU_DROP_TROOPS = "Truppen absetzen",
|
||||
MENU_DROP_ALL_TROOPS = "ALLE Truppen absetzen",
|
||||
MENU_EXTRACT_TROOPS = "Truppen aufnehmen",
|
||||
MENU_DROP_N_TROOPS = "(%d) %s absetzen",
|
||||
-- ============================================================
|
||||
-- Menübezeichnungen - Kisten: Holen
|
||||
-- ============================================================
|
||||
MENU_GET_CRATES = "Kisten holen",
|
||||
MENU_GET = "Holen",
|
||||
MENU_GET_AND_LOAD = "Holen und laden",
|
||||
MENU_GET_ANYWAY = "Trotzdem holen",
|
||||
MENU_PARTIALLY_LOAD = "Teilweise laden",
|
||||
MENU_OUT_OF_STOCK = "Nicht vorrätig",
|
||||
MENU_TROOP_LIMIT = "Truppenlimit erreicht",
|
||||
-- ============================================================
|
||||
-- Menübezeichnungen - Kisten: Laden
|
||||
-- ============================================================
|
||||
MENU_LOAD_CRATES = "Kisten laden",
|
||||
MENU_LOAD_ALL = "ALLE laden",
|
||||
MENU_SHOW_LOADABLE_CRATES = "Ladbare Kisten anzeigen",
|
||||
MENU_NO_CRATES_FOUND_RESCAN = "Keine Kisten gefunden! Neu scannen?",
|
||||
MENU_USE_C130_LOAD = "C-130-Ladesystem verwenden",
|
||||
-- ============================================================
|
||||
-- Menübezeichnungen - Kisten: Abwerfen
|
||||
-- ============================================================
|
||||
MENU_DROP_CRATES = "Kisten abwerfen",
|
||||
MENU_DROP_ALL_CRATES = "ALLE Kisten abwerfen",
|
||||
MENU_DROP = "Abwerfen",
|
||||
MENU_DROP_AND_BUILD = "Abwerfen und bauen",
|
||||
MENU_DROP_N_SETS = "%d Set%s abwerfen",
|
||||
MENU_NO_CRATES_TO_DROP = "Keine Kisten zum Abwerfen!",
|
||||
-- ============================================================
|
||||
-- Menübezeichnungen - Kisten: Bauen / Reparieren / Packen / Entfernen
|
||||
-- ============================================================
|
||||
MENU_BUILD_CRATES = "Kisten bauen",
|
||||
MENU_REPAIR = "Reparieren",
|
||||
MENU_PACK_CRATES = "Kisten packen",
|
||||
MENU_PACK = "Packen",
|
||||
MENU_PACK_AND_LOAD = "Packen und laden",
|
||||
MENU_PACK_AND_REMOVE = "Packen und entfernen",
|
||||
MENU_REMOVE_CRATES = "Kisten entfernen",
|
||||
MENU_REMOVE_CRATES_NEARBY = "Nahe Kisten entfernen",
|
||||
MENU_LIST_CRATES_NEARBY = "Nahe Kisten auflisten",
|
||||
MENU_CRATES_NEEDED = "%d Kiste%s %s (%dkg)",
|
||||
-- ============================================================
|
||||
-- Menübezeichnungen - Einheiten (C-130)
|
||||
-- ============================================================
|
||||
MENU_GET_UNITS = "Einheiten holen",
|
||||
MENU_REMOVE_UNITS_NEARBY = "Nahe Einheiten entfernen",
|
||||
-- ============================================================
|
||||
-- Menübezeichnungen - Info / Fracht
|
||||
-- ============================================================
|
||||
MENU_LIST_BOARDED_CARGO = "Geladene Fracht anzeigen",
|
||||
MENU_INVENTORY = "Inventar",
|
||||
MENU_LIST_ZONE_BEACONS = "Aktive Zonenfeuer anzeigen",
|
||||
-- ============================================================
|
||||
-- Menübezeichnungen - Rauch / Leuchtfeuer / Baken
|
||||
-- ============================================================
|
||||
MENU_SMOKES_FLARES_BEACONS = "Rauch, Leuchtfeuer, Baken",
|
||||
MENU_SMOKE_ZONES_NEARBY = "Nahe Zonen einrauchen",
|
||||
MENU_DROP_SMOKE_NOW = "Rauch jetzt setzen",
|
||||
MENU_RED_SMOKE = "Roter Rauch",
|
||||
MENU_BLUE_SMOKE = "Blauer Rauch",
|
||||
MENU_GREEN_SMOKE = "Grüner Rauch",
|
||||
MENU_ORANGE_SMOKE = "Oranger Rauch",
|
||||
MENU_WHITE_SMOKE = "Weißer Rauch",
|
||||
MENU_FLARE_ZONES_NEARBY = "Nahe Zonen befeuern",
|
||||
MENU_FIRE_FLARE_NOW = "Leuchtfeuer jetzt abfeuern",
|
||||
MENU_DROP_BEACON_NOW = "Bake jetzt setzen",
|
||||
-- ============================================================
|
||||
-- Menübezeichnungen - Parameter
|
||||
-- ============================================================
|
||||
MENU_SHOW_FLIGHT_PARAMS = "Flugparameter anzeigen",
|
||||
MENU_SHOW_HOVER_PARAMS = "Schwebeparameter anzeigen",
|
||||
STOCK_NONE = "keiner",
|
||||
STOCK_UNLIMITED = "unbegrenzt",
|
||||
BUILD_YES = "JA",
|
||||
BUILD_NO = "NEIN",
|
||||
},
|
||||
FR = {
|
||||
--- ============================================================
|
||||
-- Chargement caisse / fret
|
||||
-- ============================================================
|
||||
CRATE_LOADED_GROUNDCREW = "Caisse(s) %s chargée(s) par l'équipe au sol !",
|
||||
CRATE_UNLOADED_GROUNDCREW = "Caisse(s) %s déchargée(s) par l'équipe au sol !",
|
||||
CRATE_LOADED_ID = "Caisse(s) ID %d pour %s chargée(s) !",
|
||||
LOADED_FULL = "%d %s chargé(s).",
|
||||
LOADED_SETS_LEFTOVER = "%d %s chargé(s), %d caisse(s) restante(s).",
|
||||
LOADED_SETS = "%d %s chargé(s).",
|
||||
LOADED_PARTIAL = "Seulement %d/%d caisse(s) de %s chargée(s).",
|
||||
LOADED_PARTIAL_LIMIT = "Seulement %d/%d caisse(s) de %s chargée(s). Limite de fret atteinte !",
|
||||
LOADED_BATCH = "%d %s chargé(s).",
|
||||
LOADED_BATCH_PARTIAL = "Certains ensembles n'ont pas pu être complètement chargés.",
|
||||
-- ============================================================
|
||||
-- Largage / Déchargement
|
||||
-- ============================================================
|
||||
DROPPED_FULL = "%d %s largué(s).",
|
||||
DROPPED_SETS_LEFTOVER = "%d %s largué(s), %d caisse(s) restante(s).",
|
||||
DROPPED_SETS = "%d %s largué(s).",
|
||||
DROPPED_PARTIAL = "%d/%d caisse(s) de %s larguée(s).",
|
||||
DROPPED_INTO_ACTION = "%s engagé(s) en action !",
|
||||
DROPPED_BEACON = "%s largué | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
||||
CRATES_POSITIONED = "%d caisses pour %s positionnées près de vous !",
|
||||
CRATES_DROPPED = "%d caisses pour %s larguées !",
|
||||
-- ============================================================
|
||||
-- Troupes
|
||||
-- ============================================================
|
||||
BOARDED = "%s embarqué(s) !",
|
||||
BOARDING = "%s en cours d'embarquement !",
|
||||
TROOPS_RETURNED = "Les troupes sont retournées à la base !",
|
||||
-- ============================================================
|
||||
-- Déploiement
|
||||
-- ============================================================
|
||||
DEPLOYED_NEAR_YOU = "%s déployé(s) près de vous !",
|
||||
UNITS_REMOVED = "%s supprimé(s)",
|
||||
-- ============================================================
|
||||
-- Construction / Réparation
|
||||
-- ============================================================
|
||||
BUILD_STARTED = "Construction démarrée, prête dans %d secondes !",
|
||||
REPAIR_STARTED = "Réparation démarrée avec %s, durée %d sec.",
|
||||
NO_UNIT_TO_REPAIR = "Aucune unité(s) assez proche pour être réparée(s) !",
|
||||
CANT_REPAIR_WITH = "Impossible de réparer cette unité avec %s",
|
||||
CRATES_MOVE_BEFORE_BUILD = "*** Les caisses doivent être déplacées avant la construction !",
|
||||
-- ============================================================
|
||||
-- Erreurs - Hélicoptère / Poids / Capacité
|
||||
-- ============================================================
|
||||
CHOPPER_CANNOT_CARRY = "Cet hélicoptère ne peut pas transporter de caisses !",
|
||||
TOO_HEAVY = "Désolé, c'est trop lourd à charger !",
|
||||
FULLY_LOADED = "Désolé, capacité maximale atteinte !",
|
||||
CRAMMED = "Désolé, nous sommes déjà au complet !",
|
||||
NO_CAPACITY_NOW = "Aucune capacité de chargement disponible pour le moment !",
|
||||
NO_MORE_CAPACITY = "Plus de capacité pour charger des caisses !",
|
||||
CANNOT_LOAD_NONE_OR_FULL = "Chargement impossible : aucune caisse trouvée ou capacité épuisée.",
|
||||
-- ============================================================
|
||||
-- Erreurs - Position
|
||||
-- ============================================================
|
||||
NEED_TO_LAND_OR_HOVER_LOAD = "Vous devez atterrir ou rester en vol stationnaire pour charger !",
|
||||
HOVER_OVER_CRATES = "Survolez les caisses en stationnaire pour les récupérer !",
|
||||
LAND_OR_HOVER_OVER_CRATES = "Atterrissez ou survolez les caisses en stationnaire pour les récupérer !",
|
||||
MUST_LAND_OR_HOVER_CRATES = "Vous devez atterrir ou rester en stationnaire pour charger les caisses !",
|
||||
NEED_TO_LAND_BUILD = "Vous devez atterrir / vous arrêter pour construire quelque chose, Pilote !",
|
||||
NOT_CLOSE_ENOUGH_LOGISTICS = "Vous n'êtes pas assez proche d'une zone logistique !",
|
||||
NOT_CLOSE_ENOUGH_DROP = "Vous n'êtes pas assez proche d'une zone de largage !",
|
||||
NOT_CLOSE_ENOUGH_ZONE_NM = "Négatif, vous devez être à moins de %d nm d'une zone !",
|
||||
CANNOT_BUILD_LOADING_AREA = "Vous ne pouvez pas construire dans une zone de chargement, Pilote !",
|
||||
-- ============================================================
|
||||
-- Erreurs - Portes
|
||||
-- ============================================================
|
||||
OPEN_DOORS_LOAD_CARGO = "Vous devez ouvrir la/les porte(s) pour charger du fret !",
|
||||
OPEN_DOORS_LOAD_TROOPS = "Vous devez ouvrir la/les porte(s) pour embarquer des troupes !",
|
||||
OPEN_DOORS_EXTRACT_TROOPS = "Vous devez ouvrir la/les porte(s) pour extraire des troupes !",
|
||||
OPEN_DOORS_UNLOAD_TROOPS = "Vous devez ouvrir la/les porte(s) pour débarquer des troupes !",
|
||||
OPEN_DOORS_DROP_CARGO = "Vous devez ouvrir la/les porte(s) pour larguer du fret !",
|
||||
-- ============================================================
|
||||
-- Erreurs - Stock / Disponibilité
|
||||
-- ============================================================
|
||||
ALL_GONE = "Désolé, tous les %s sont épuisés !",
|
||||
RAN_OUT_OF = "Désolé, nous n'avons plus de %s !",
|
||||
CARGO_NOT_AVAILABLE_ZONE = "Le fret demandé n'est pas disponible dans cette zone !",
|
||||
ENOUGH_CRATES_NEARBY = "Il y a déjà suffisamment de caisses à proximité ! Occupez-vous d'abord de celles-ci !",
|
||||
NO_CRATES_WITHIN = "Aucune caisse (chargeable) dans un rayon de %d mètres !",
|
||||
NO_CRATES_WITHIN_PLAIN = "Aucune caisse dans un rayon de %d mètres !",
|
||||
NO_CRATES_IN_RANGE = "Aucune caisse trouvée à portée !",
|
||||
NO_NAMED_CRATES_IN_RANGE = "Aucune caisse \"%s\" trouvée à portée !",
|
||||
NO_LOADABLE_CRATES = "Désolé, aucune caisse chargeable à proximité ou poids maximum atteint !",
|
||||
NO_UNITS_TO_EXTRACT = "Aucune unité assez proche pour être extraite !",
|
||||
NO_UNIT_CONFIG = "Aucune configuration d'unité trouvée pour %s",
|
||||
CANT_ONBOARD = "Impossible d'embarquer %s",
|
||||
TOO_MANY_UNITS_NEARBY = "Vous avez déjà %d unités à proximité !",
|
||||
NO_CRATE_GROUPS = "Aucun groupe de caisses trouvé pour cette unité !",
|
||||
NO_CRATE_SET = "Aucun ensemble de caisses trouvé ou index invalide !",
|
||||
NO_CRATE_IN_SET = "Aucune caisse trouvée dans cet ensemble !",
|
||||
NO_TROOP_CHUNK = "Aucun bloc de fret de troupes trouvé pour l'ID %d !",
|
||||
TROOP_CHUNK_EMPTY = "Le bloc de fret de troupes pour l'ID %d est vide !",
|
||||
-- ============================================================
|
||||
-- Rien de chargé / en stock
|
||||
-- ============================================================
|
||||
NOTHING_LOADED = "Rien de chargé !\nLimite de troupes : %d | Limite de caisses : %d | Limite en poids : %d kg",
|
||||
NOTHING_LOADED_AIRDROP = "Rien de chargé ou paramètres de largage non respectés !",
|
||||
NOTHING_LOADED_HOVER = "Rien de chargé ou paramètres de vol stationnaire non respectés !",
|
||||
NOTHING_IN_STOCK = "Rien en stock !",
|
||||
NOTHING_TO_PACK = "Rien à charger à cette distance, Pilote !",
|
||||
NOTHING_TO_REMOVE = "Rien à retirer à cette distance, Pilote !",
|
||||
-- ============================================================
|
||||
-- Zone / Info
|
||||
-- ============================================================
|
||||
ROGER_ZONE = "Compris, zone %s %s !",
|
||||
-- ============================================================
|
||||
-- Rapport : Paramètres stationnaire / vol
|
||||
-- ============================================================
|
||||
HOVER_PARAMS_METRIC = "Paramètres stationnaires (autochargement/largage) :\n - Hauteur min. %dm \n - Hauteur max. %dm \n - Vitesse max. 2m/s \n - Dans les paramètres : %s",
|
||||
HOVER_PARAMS_IMPERIAL = "Paramètres stationnaires (autochargement/largage) :\n - Hauteur min. %dft \n - Hauteur max. %dft \n - Vitesse max. 6ft/s \n - Dans les paramètres : %s",
|
||||
FLIGHT_PARAMS_IMPERIAL = "Paramètres de vol (largage aérien) :\n - Hauteur min. %dft \n - Hauteur max. %dft \n - Dans les paramètres : %s",
|
||||
FLIGHT_PARAMS_METRIC = "Paramètres de vol (largage aérien) :\n - Hauteur min. %dm \n - Hauteur max. %dm \n - Dans les paramètres : %s",
|
||||
-- ============================================================
|
||||
-- Titres de rapport
|
||||
-- ============================================================
|
||||
REPORT_CRATES_FOUND = "Caisses trouvées à proximité :",
|
||||
REPORT_REMOVING_CRATES = "Suppression des caisses à proximité :",
|
||||
REPORT_TRANSPORT_CHECKOUT = "Fiche de contrôle transport",
|
||||
REPORT_INVENTORY = "Fiche d'inventaire",
|
||||
REPORT_BUILD_CHECKLIST = "Checklist caisses constructibles",
|
||||
REPORT_REPAIR_CHECKLIST = "Checklist réparations",
|
||||
REPORT_BEACONS = "Balises de zone actives",
|
||||
-- ============================================================
|
||||
-- En-têtes de sections de rapport
|
||||
-- ============================================================
|
||||
REPORT_SECTION_TROOPS = " -- TROUPES --",
|
||||
REPORT_SECTION_CRATES = " -- CAISSES --",
|
||||
REPORT_SECTION_CRATES_GC = " -- CAISSES chargées via équipe au sol --",
|
||||
REPORT_SECTION_NONE = " A U C U N",
|
||||
REPORT_SECTION_NONE_ALT = " --- Aucun trouvé ! ---",
|
||||
REPORT_SECTION_NONE_REPAIR = " --- Aucun trouvé ---",
|
||||
REPORT_GC_LOADABLE_HINT = "Probablement chargeable via l’équipe au sol (F8)",
|
||||
REPORT_TOTAL_MASS = "Masse totale : %s kg. Chargeable : %s kg.",
|
||||
REPORT_TROOPS_CRATES_COUNT = "Troupes : %d(%d), Caisses : %d(%d)",
|
||||
REPORT_TROOPS_CRATETYPES_COUNT = "Troupes : %d, Types de caisses : %d",
|
||||
-- ============================================================
|
||||
-- Modèles de lignes de rapport
|
||||
-- ============================================================
|
||||
REPORT_ROW_TROOP = "Troupe : %s taille %d",
|
||||
REPORT_ROW_CRATE = "Caisse : %s %d/%d",
|
||||
REPORT_ROW_CRATE_SIZE1 = "Caisse : %s taille 1",
|
||||
REPORT_ROW_GC_CRATE = "Caisses chargées par l'équipe au sol : %s taille 1",
|
||||
REPORT_ROW_DROPPED_CRATE = "Caisses larguées pour %s, %dkg",
|
||||
REPORT_ROW_CRATE_KG = "Caisses pour %s, %dkg",
|
||||
REPORT_ROW_CRATE_REMOVED = "Caisses pour %s, %dkg retirées",
|
||||
REPORT_ROW_UNIT_STOCK = "Unités : %s | Soldats : %d | Stock : %s",
|
||||
REPORT_ROW_TYPE_CRATE_STOCK = "Type : %s | Caisses par ensemble : %d | Stock : %s",
|
||||
REPORT_ROW_TYPE_STOCK = "Type : %s | Stock : %s",
|
||||
REPORT_ROW_BUILD_CHECK = "Type : %s | Requis : %d | Trouvé : %d | Constructible : %s",
|
||||
REPORT_ROW_REPAIR_CHECK = "Type : %s | Requis : %d | Trouvé : %d | Réparable : %s",
|
||||
REPORT_ROW_BEACON = " %s | FM %s Mhz | VHF %s KHz | UHF %s Mhz ",
|
||||
-- ============================================================
|
||||
-- Tokens limite poids / caisses
|
||||
-- ============================================================
|
||||
WEIGHT_LIMIT = "Limite de poids atteinte",
|
||||
CRATE_LIMIT = "Limite de caisses atteinte",
|
||||
-- ============================================================
|
||||
-- Libellés de menu - Niveau supérieur
|
||||
-- ============================================================
|
||||
MENU_CTLD = "CTLD",
|
||||
MENU_MANAGE_TROOPS = "Gérer les troupes",
|
||||
MENU_MANAGE_CRATES = "Gérer les caisses",
|
||||
MENU_MANAGE_UNITS = "Gérer les unités",
|
||||
-- ============================================================
|
||||
-- Libellés de menu - Troupes
|
||||
-- ============================================================
|
||||
MENU_LOAD_TROOPS = "Embarquer troupes",
|
||||
MENU_DROP_TROOPS = "Déposer troupes",
|
||||
MENU_DROP_ALL_TROOPS = "Déposer TOUTES les troupes",
|
||||
MENU_EXTRACT_TROOPS = "Extraire troupes",
|
||||
MENU_DROP_N_TROOPS = "Déposer (%d) %s",
|
||||
-- ============================================================
|
||||
-- Libellés de menu - Caisses : Récupérer
|
||||
-- ============================================================
|
||||
MENU_GET_CRATES = "Récupérer caisses",
|
||||
MENU_GET = "Récupérer",
|
||||
MENU_GET_AND_LOAD = "Récupérer et charger",
|
||||
MENU_GET_ANYWAY = "Récupérer quand même",
|
||||
MENU_PARTIALLY_LOAD = "Chargement partiel",
|
||||
MENU_OUT_OF_STOCK = "Rupture de stock",
|
||||
MENU_TROOP_LIMIT = "Limite de troupes atteinte",
|
||||
-- ============================================================
|
||||
-- Libellés de menu - Caisses : Charger
|
||||
-- ============================================================
|
||||
MENU_LOAD_CRATES = "Charger caisses",
|
||||
MENU_LOAD_ALL = "Tout charger",
|
||||
MENU_SHOW_LOADABLE_CRATES = "Afficher caisses chargeables",
|
||||
MENU_NO_CRATES_FOUND_RESCAN = "Aucune caisse trouvée ! Rescanner ?",
|
||||
MENU_USE_C130_LOAD = "Utiliser le système de chargement C-130",
|
||||
-- ============================================================
|
||||
-- Libellés de menu - Caisses : Larguer
|
||||
-- ============================================================
|
||||
MENU_DROP_CRATES = "Larguer caisses",
|
||||
MENU_DROP_ALL_CRATES = "Larguer TOUTES les caisses",
|
||||
MENU_DROP = "Larguer",
|
||||
MENU_DROP_AND_BUILD = "Larguer et construire",
|
||||
MENU_DROP_N_SETS = "Larguer %d ensemble%s",
|
||||
MENU_NO_CRATES_TO_DROP = "Aucune caisse à larguer !",
|
||||
-- ============================================================
|
||||
-- Libellés de menu - Caisses : Construire / Réparer / Emballer / Retirer
|
||||
-- ============================================================
|
||||
MENU_BUILD_CRATES = "Construire caisses",
|
||||
MENU_REPAIR = "Réparer",
|
||||
MENU_PACK_CRATES = "Emballer caisses",
|
||||
MENU_PACK = "Emballer",
|
||||
MENU_PACK_AND_LOAD = "Emballer et charger",
|
||||
MENU_PACK_AND_REMOVE = "Emballer et retirer",
|
||||
MENU_REMOVE_CRATES = "Retirer caisses",
|
||||
MENU_REMOVE_CRATES_NEARBY = "Retirer caisses proches",
|
||||
MENU_LIST_CRATES_NEARBY = "Lister caisses proches",
|
||||
MENU_CRATES_NEEDED = "%d caisse%s %s (%dkg)",
|
||||
-- ============================================================
|
||||
-- Libellés de menu - Unités (C-130)
|
||||
-- ============================================================
|
||||
MENU_GET_UNITS = "Récupérer unités",
|
||||
MENU_REMOVE_UNITS_NEARBY = "Retirer les unités proches",
|
||||
-- ============================================================
|
||||
-- Libellés de menu - Info / Fret
|
||||
-- ============================================================
|
||||
MENU_LIST_BOARDED_CARGO = "Lister le fret embarqué",
|
||||
MENU_INVENTORY = "Inventaire",
|
||||
MENU_LIST_ZONE_BEACONS = "Lister les balises de zones actives",
|
||||
-- ============================================================
|
||||
-- Libellés de menu - Fumigènes / Fusées / Balises
|
||||
-- ============================================================
|
||||
MENU_SMOKES_FLARES_BEACONS = "Fumigènes, Fusées, Balises",
|
||||
MENU_SMOKE_ZONES_NEARBY = "Fumigène sur les zones proches",
|
||||
MENU_DROP_SMOKE_NOW = "Poser fumigène maintenant",
|
||||
MENU_RED_SMOKE = "Fumigène rouge",
|
||||
MENU_BLUE_SMOKE = "Fumigène bleu",
|
||||
MENU_GREEN_SMOKE = "Fumigène vert",
|
||||
MENU_ORANGE_SMOKE = "Fumigène orange",
|
||||
MENU_WHITE_SMOKE = "Fumigène blanc",
|
||||
MENU_FLARE_ZONES_NEARBY = "Baliser zones proches",
|
||||
MENU_FIRE_FLARE_NOW = "Tirer une fusée maintenant",
|
||||
MENU_DROP_BEACON_NOW = "Poser une balise maintenant",
|
||||
-- ============================================================
|
||||
-- Libellés de menu - Paramètres
|
||||
-- ============================================================
|
||||
MENU_SHOW_FLIGHT_PARAMS = "Afficher paramètres de vol",
|
||||
MENU_SHOW_HOVER_PARAMS = "Afficher les paramètres stationnaire",
|
||||
STOCK_NONE = "aucun",
|
||||
STOCK_UNLIMITED = "illimité",
|
||||
BUILD_YES = "OUI",
|
||||
BUILD_NO = "NON",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -98,6 +98,9 @@ Ops/Commander.lua
|
||||
Ops/Chief.lua
|
||||
Ops/CSAR.lua
|
||||
Ops/CTLD.lua
|
||||
Ops/CTLD_CARGO.lua
|
||||
Ops/CTLD_Localization.lua
|
||||
Ops/CTLD_Hercules.lua
|
||||
Ops/Awacs.lua
|
||||
Ops/Operation.lua
|
||||
Ops/FlightControl.lua
|
||||
|
||||
Reference in New Issue
Block a user