mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Merge remote-tracking branch 'origin/master' into develop
This commit is contained in:
commit
d06a618582
@ -56,6 +56,7 @@ do
|
|||||||
-- @field #string StaticType Individual type if set.
|
-- @field #string StaticType Individual type if set.
|
||||||
-- @field #string StaticCategory Individual static category 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 #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
|
-- @extends Core.Base#BASE
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -73,6 +74,7 @@ CTLD_CARGO = {
|
|||||||
HasBeenDropped = false,
|
HasBeenDropped = false,
|
||||||
PerCrateMass = 0,
|
PerCrateMass = 0,
|
||||||
Stock = nil,
|
Stock = nil,
|
||||||
|
Stock0 = nil,
|
||||||
Mark = nil,
|
Mark = nil,
|
||||||
DontShowInMenu = false,
|
DontShowInMenu = false,
|
||||||
Location = nil,
|
Location = nil,
|
||||||
@ -131,6 +133,7 @@ CTLD_CARGO = {
|
|||||||
self.HasBeenDropped = Dropped or false --#boolean
|
self.HasBeenDropped = Dropped or false --#boolean
|
||||||
self.PerCrateMass = PerCrateMass or 0 -- #number
|
self.PerCrateMass = PerCrateMass or 0 -- #number
|
||||||
self.Stock = Stock or nil --#number
|
self.Stock = Stock or nil --#number
|
||||||
|
self.Stock0 = Stock or nil --#number
|
||||||
self.Mark = nil
|
self.Mark = nil
|
||||||
self.Subcategory = Subcategory or "Other"
|
self.Subcategory = Subcategory or "Other"
|
||||||
self.DontShowInMenu = DontShowInMenu or false
|
self.DontShowInMenu = DontShowInMenu or false
|
||||||
@ -321,7 +324,7 @@ CTLD_CARGO = {
|
|||||||
|
|
||||||
--- Get Stock.
|
--- Get Stock.
|
||||||
-- @param #CTLD_CARGO self
|
-- @param #CTLD_CARGO self
|
||||||
-- @return #number Stock
|
-- @return #number Stock or -1 if unlimited.
|
||||||
function CTLD_CARGO:GetStock()
|
function CTLD_CARGO:GetStock()
|
||||||
if self.Stock then
|
if self.Stock then
|
||||||
return self.Stock
|
return self.Stock
|
||||||
@ -330,6 +333,28 @@ CTLD_CARGO = {
|
|||||||
end
|
end
|
||||||
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.
|
--- Add Stock.
|
||||||
-- @param #CTLD_CARGO self
|
-- @param #CTLD_CARGO self
|
||||||
-- @param #number Number to add, none if nil.
|
-- @param #number Number to add, none if nil.
|
||||||
@ -987,6 +1012,14 @@ do
|
|||||||
-- ... your code here ...
|
-- ... your code here ...
|
||||||
-- end
|
-- end
|
||||||
--
|
--
|
||||||
|
--- ## 3.6 OnAfterHelicopterLost
|
||||||
|
--
|
||||||
|
-- This function is called when a player has deployed left a unit or crashed/died:
|
||||||
|
--
|
||||||
|
-- function my_ctld:OnAfterHelicopterLost(From, Event, To, Unitname, Cargotable)
|
||||||
|
-- ... your code here ...
|
||||||
|
-- end
|
||||||
|
--
|
||||||
-- ## 3.6 OnAfterCratesBuild, OnAfterCratesRepaired
|
-- ## 3.6 OnAfterCratesBuild, OnAfterCratesRepaired
|
||||||
--
|
--
|
||||||
-- This function is called when a player has build a vehicle or FOB:
|
-- This function is called when a player has build a vehicle or FOB:
|
||||||
@ -1355,7 +1388,7 @@ CTLD.UnitTypeCapabilities = {
|
|||||||
|
|
||||||
--- CTLD class version.
|
--- CTLD class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
CTLD.version="1.1.28"
|
CTLD.version="1.1.29"
|
||||||
|
|
||||||
--- Instantiate a new CTLD.
|
--- Instantiate a new CTLD.
|
||||||
-- @param #CTLD self
|
-- @param #CTLD self
|
||||||
@ -5314,6 +5347,119 @@ end
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- User - Count both the stock and groups in the field for available cargo types. Counts only limited cargo items and only troops and vehicle/FOB crates!
|
||||||
|
-- @param #CTLD self
|
||||||
|
-- @return #table Table A table of contents with numbers.
|
||||||
|
-- @usage
|
||||||
|
-- The index is the unique cargo name.
|
||||||
|
-- Each entry in the returned table contains a table with the following entries:
|
||||||
|
--
|
||||||
|
-- {
|
||||||
|
-- Stock0 -- number of original stock when the cargo entry was created.
|
||||||
|
-- Stock -- number of currently available stock.
|
||||||
|
-- StockR -- relative number of available stock, e.g. 75 (percent).
|
||||||
|
-- Infield -- number of groups alive in the field of this kind.
|
||||||
|
-- Inhelo -- number of troops/crates in any helo alive. Can be with decimals < 1 if e.g. you have cargo that need 4 crates, but you have 2 loaded.
|
||||||
|
-- Sum -- sum is stock + infield + inhelo.
|
||||||
|
-- }
|
||||||
|
function CTLD:_CountStockPlusInHeloPlusAliveGroups()
|
||||||
|
local Troopstable = {}
|
||||||
|
-- generics
|
||||||
|
for _id,_cargo in pairs(self.Cargo_Crates) do
|
||||||
|
local generic = _cargo -- #CTLD_CARGO
|
||||||
|
local genname = generic:GetName()
|
||||||
|
if generic and generic:GetStock0() > 0 and not Troopstable[genname] then
|
||||||
|
Troopstable[genname] = {
|
||||||
|
Stock0 = generic:GetStock0(),
|
||||||
|
Stock = generic:GetStock(),
|
||||||
|
StockR = generic:GetRelativeStock(),
|
||||||
|
Infield = 0,
|
||||||
|
Inhelo = 0,
|
||||||
|
Sum = generic:GetStock(),
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
---
|
||||||
|
for _id,_cargo in pairs(self.Cargo_Troops) do
|
||||||
|
local generic = _cargo -- #CTLD_CARGO
|
||||||
|
local genname = generic:GetName()
|
||||||
|
if generic and generic:GetStock0() > 0 and not Troopstable[genname] then
|
||||||
|
Troopstable[genname] = {
|
||||||
|
Stock0 = generic:GetStock0(),
|
||||||
|
Stock = generic:GetStock(),
|
||||||
|
StockR = generic:GetRelativeStock(),
|
||||||
|
Infield = 0,
|
||||||
|
Inhelo = 0,
|
||||||
|
Sum = generic:GetStock(),
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- Troops & Built Crates
|
||||||
|
for _index, _group in pairs (self.DroppedTroops) do
|
||||||
|
if _group and _group:IsAlive() then
|
||||||
|
self:T("Looking at ".._group:GetName() .. " in the field")
|
||||||
|
local generic = self:GetGenericCargoObjectFromGroupName(_group:GetName()) -- #CTLD_CARGO
|
||||||
|
if generic then
|
||||||
|
local genname = generic:GetName()
|
||||||
|
self:T("Found Generic "..genname .. " in the field. Adding.")
|
||||||
|
if generic:GetStock0() > 0 then -- don't count unlimited stock
|
||||||
|
if not Troopstable[genname] then
|
||||||
|
Troopstable[genname] = {
|
||||||
|
Stock0 = generic:GetStock0(),
|
||||||
|
Stock = generic:GetStock(),
|
||||||
|
StockR = generic:GetRelativeStock(),
|
||||||
|
Infield = 1,
|
||||||
|
Inhelo = 0,
|
||||||
|
Sum = generic:GetStock()+1,
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Troopstable[genname].Infield = Troopstable[genname].Infield + 1
|
||||||
|
Troopstable[genname].Sum = Troopstable[genname].Infield + Troopstable[genname].Stock + Troopstable[genname].Inhelo
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
self:E(self.lid.."Group without Cargo Generic: ".._group:GetName())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- Helos
|
||||||
|
for _unitname,_loaded in pairs(self.Loaded_Cargo) do
|
||||||
|
local _unit = UNIT:FindByName(_unitname)
|
||||||
|
if _unit and _unit:IsAlive() then
|
||||||
|
local unitname = _unit:GetName()
|
||||||
|
local loadedcargo = self.Loaded_Cargo[unitname].Cargo or {}
|
||||||
|
for _,_cgo in pairs (loadedcargo) do
|
||||||
|
local cargo = _cgo -- #CTLD_CARGO
|
||||||
|
local type = cargo.CargoType
|
||||||
|
local gname = cargo.Name
|
||||||
|
local gcargo = self:_FindCratesCargoObject(gname) or self:_FindTroopsCargoObject(gname)
|
||||||
|
self:T("Looking at ".. gname .. " in the helo - type = "..type)
|
||||||
|
if (type == CTLD_CARGO.Enum.TROOPS or type == CTLD_CARGO.Enum.ENGINEERS or type == CTLD_CARGO.Enum.VEHICLE or type == CTLD_CARGO.Enum.FOB) then
|
||||||
|
-- valid troops/engineers
|
||||||
|
if gcargo and gcargo:GetStock0() > 0 then -- don't count unlimited stock
|
||||||
|
self:T("Adding ".. gname .. " in the helo - type = "..type)
|
||||||
|
if (type == CTLD_CARGO.Enum.TROOPS or type == CTLD_CARGO.Enum.ENGINEERS) then
|
||||||
|
Troopstable[gname].Inhelo = Troopstable[gname].Inhelo + 1
|
||||||
|
end
|
||||||
|
if (type == CTLD_CARGO.Enum.VEHICLE or type == CTLD_CARGO.Enum.FOB) then
|
||||||
|
-- maybe multiple crates of the same type
|
||||||
|
local counting = gcargo.CratesNeeded
|
||||||
|
local added = 1
|
||||||
|
if counting > 1 then
|
||||||
|
added = added/counting
|
||||||
|
end
|
||||||
|
Troopstable[gname].Inhelo = Troopstable[gname].Inhelo + added
|
||||||
|
end
|
||||||
|
Troopstable[gname].Sum = Troopstable[gname].Infield + Troopstable[gname].Stock + Troopstable[gname].Inhelo
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return Troopstable
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--- User - function to add stock of a certain troops type
|
--- User - function to add stock of a certain troops type
|
||||||
-- @param #CTLD self
|
-- @param #CTLD self
|
||||||
-- @param #string Name Name as defined in the generic cargo.
|
-- @param #string Name Name as defined in the generic cargo.
|
||||||
@ -5542,19 +5688,24 @@ end
|
|||||||
-- @return #CTLD_CARGO The cargo object or nil if not found
|
-- @return #CTLD_CARGO The cargo object or nil if not found
|
||||||
function CTLD:GetGenericCargoObjectFromGroupName(GroupName)
|
function CTLD:GetGenericCargoObjectFromGroupName(GroupName)
|
||||||
local Cargotype = nil
|
local Cargotype = nil
|
||||||
|
local template = GroupName
|
||||||
|
if string.find(template,"#") then
|
||||||
|
template = string.gsub(GroupName,"#(%d+)$","")
|
||||||
|
end
|
||||||
|
template = string.gsub(template,"-(%d+)$","")
|
||||||
for k,v in pairs(self.Cargo_Troops) do
|
for k,v in pairs(self.Cargo_Troops) do
|
||||||
local comparison = ""
|
local comparison = ""
|
||||||
if type(v.Templates) == "string" then comparison = v.Templates else comparison = v.Templates[1] end
|
if type(v.Templates) == "string" then comparison = v.Templates else comparison = v.Templates[1] end
|
||||||
if comparison == GroupName then
|
if comparison == template then
|
||||||
Cargotype = v
|
Cargotype = v
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not Cargotype then
|
if not Cargotype then
|
||||||
for k,v in pairs(self.Cargo_Crates) do
|
for k,v in pairs(self.Cargo_Crates) do -- #number, #CTLD_CARGO
|
||||||
local comparison = ""
|
local comparison = ""
|
||||||
if type(v.Templates) == "string" then comparison = v.Templates else comparison = v.Templates[1] end
|
if type(v.Templates) == "string" then comparison = v.Templates else comparison = v.Templates[1] end
|
||||||
if comparison == GroupName then
|
if comparison == template and v.CargoType ~= CTLD_CARGO.Enum.REPAIR then
|
||||||
Cargotype = v
|
Cargotype = v
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
@ -5679,7 +5830,7 @@ end
|
|||||||
if not match then
|
if not match then
|
||||||
self.CargoCounter = self.CargoCounter + 1
|
self.CargoCounter = self.CargoCounter + 1
|
||||||
cargo.ID = self.CargoCounter
|
cargo.ID = self.CargoCounter
|
||||||
cargo.Stock = 1
|
--cargo.Stock = 1
|
||||||
table.insert(self.Cargo_Troops,cargo)
|
table.insert(self.Cargo_Troops,cargo)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -5829,7 +5980,7 @@ end
|
|||||||
if not match then
|
if not match then
|
||||||
self.CargoCounter = self.CargoCounter + 1
|
self.CargoCounter = self.CargoCounter + 1
|
||||||
cargo.ID = self.CargoCounter
|
cargo.ID = self.CargoCounter
|
||||||
cargo.Stock = 1
|
--cargo.Stock = 1
|
||||||
table.insert(self.Cargo_Crates,cargo)
|
table.insert(self.Cargo_Crates,cargo)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user