From ba41d6421d49a81f717213d93b2660dfe222ccd0 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 25 Jun 2024 09:38:29 +0200 Subject: [PATCH] FLIGHTGROUP - Added nil checks if client template does not exist --- Moose Development/Moose/Ops/FlightGroup.lua | 54 +++++++++++---------- Moose Development/Moose/Ops/OpsGroup.lua | 46 +++++++++++------- 2 files changed, 58 insertions(+), 42 deletions(-) diff --git a/Moose Development/Moose/Ops/FlightGroup.lua b/Moose Development/Moose/Ops/FlightGroup.lua index dc1de53b4..9f756b029 100644 --- a/Moose Development/Moose/Ops/FlightGroup.lua +++ b/Moose Development/Moose/Ops/FlightGroup.lua @@ -3815,18 +3815,9 @@ function FLIGHTGROUP:_InitGroup(Template) -- Group object. local group=self.group --Wrapper.Group#GROUP - -- Get template of group. - local template=Template or self:_GetTemplate() - -- Helo group. self.isHelo=group:IsHelicopter() - -- Is (template) group uncontrolled. - self.isUncontrolled=template.uncontrolled - - -- Is (template) group late activated. - self.isLateActivated=template.lateActivation - -- Max speed in km/h. self.speedMax=group:GetSpeedMax() @@ -3846,25 +3837,38 @@ function FLIGHTGROUP:_InitGroup(Template) -- Group ammo. self.ammo=self:GetAmmoTot() + + -- Get template of group. + local template=Template or self:_GetTemplate() - -- Radio parameters from template. Default is set on spawn if not modified by user. - self.radio.Freq=tonumber(template.frequency) - self.radio.Modu=tonumber(template.modulation) - self.radio.On=template.communication + -- Is (template) group uncontrolled. + self.isUncontrolled=template~=nil and template.uncontrolled or false - -- Set callsign. Default is set on spawn if not modified by user. - local callsign=template.units[1].callsign - --self:I({callsign=callsign}) - if type(callsign)=="number" then -- Sometimes callsign is just "101". - local cs=tostring(callsign) - callsign={} - callsign[1]=cs:sub(1,1) - callsign[2]=cs:sub(2,2) - callsign[3]=cs:sub(3,3) + -- Is (template) group late activated. + self.isLateActivated=template~=nil and template.lateActivation or false + + if template then + + -- Radio parameters from template. Default is set on spawn if not modified by user. + self.radio.Freq=tonumber(template.frequency) + self.radio.Modu=tonumber(template.modulation) + self.radio.On=template.communication + + -- Set callsign. Default is set on spawn if not modified by user. + local callsign=template.units[1].callsign + --self:I({callsign=callsign}) + if type(callsign)=="number" then -- Sometimes callsign is just "101". + local cs=tostring(callsign) + callsign={} + callsign[1]=cs:sub(1,1) + callsign[2]=cs:sub(2,2) + callsign[3]=cs:sub(3,3) + end + self.callsign.NumberSquad=tonumber(callsign[1]) + self.callsign.NumberGroup=tonumber(callsign[2]) + self.callsign.NameSquad=UTILS.GetCallsignName(self.callsign.NumberSquad) + end - self.callsign.NumberSquad=tonumber(callsign[1]) - self.callsign.NumberGroup=tonumber(callsign[2]) - self.callsign.NameSquad=UTILS.GetCallsignName(self.callsign.NumberSquad) -- Set default formation. if self.isHelo then diff --git a/Moose Development/Moose/Ops/OpsGroup.lua b/Moose Development/Moose/Ops/OpsGroup.lua index 45d2288d9..8ae8c06c9 100644 --- a/Moose Development/Moose/Ops/OpsGroup.lua +++ b/Moose Development/Moose/Ops/OpsGroup.lua @@ -11372,11 +11372,19 @@ end -- @return #OPSGROUP self function OPSGROUP:_InitWaypoints(WpIndexMin, WpIndexMax) - -- Template waypoints. - self.waypoints0=UTILS.DeepCopy(_DATABASE:GetGroupTemplate(self.groupname).route.points) --self.group:GetTemplateRoutePoints() - -- Waypoints empty! self.waypoints={} + self.waypoints0={} + + -- Get group template + local template=_DATABASE:GetGroupTemplate(self.groupname) + + if template==nil then + return self + end + + -- Template waypoints. + self.waypoints0=UTILS.DeepCopy(template.route.points) --self.group:GetTemplateRoutePoints() WpIndexMin=WpIndexMin or 1 WpIndexMax=WpIndexMax or #self.waypoints0 @@ -13631,11 +13639,7 @@ function OPSGROUP:_AddElementByName(unitname) local unit=UNIT:FindByName(unitname) if unit then - - -- Get unit template. - local unittemplate=unit:GetTemplate() - --local unittemplate=_DATABASE:GetUnitTemplateFromUnitName(unitname) - + -- Element table. local element=self:GetElementByName(unitname) @@ -13662,8 +13666,18 @@ function OPSGROUP:_AddElementByName(unitname) element.Nhit=0 element.opsgroup=self + -- Get unit template. + local unittemplate=unit:GetTemplate() + + if unittemplate==nil then + if element.DCSunit:getPlayerName() then + element.skill="Client" + end + else + element.skill=unittemplate~=nil and unittemplate.skill or "Unknown" + end + -- Skill etc. - element.skill=unittemplate.skill or "Unknown" if element.skill=="Client" or element.skill=="Player" then element.ai=false element.client=CLIENT:FindByName(unitname) @@ -13722,24 +13736,22 @@ function OPSGROUP:_AddElementByName(unitname) element.weightCargo=0 end element.weight=element.weightEmpty+element.weightCargo - + -- FLIGHTGROUP specific. - if self.isFlightgroup then - element.callsign=element.unit:GetCallsign() + element.callsign=element.unit:GetCallsign() + element.fuelmass=element.fuelmass0 or 99999 + element.fuelrel=element.unit:GetFuel() or 1 + + if self.isFlightgroup and unittemplate then element.modex=unittemplate.onboard_num element.payload=unittemplate.payload element.pylons=unittemplate.payload and unittemplate.payload.pylons or nil element.fuelmass0=unittemplate.payload and unittemplate.payload.fuel or 0 - element.fuelmass=element.fuelmass0 - element.fuelrel=element.unit:GetFuel() else element.callsign="Peter-1-1" element.modex="000" element.payload={} element.pylons={} - element.fuelmass0=99999 - element.fuelmass =99999 - element.fuelrel=1 end -- Debug text.