Compare commits

..

6 Commits

Author SHA1 Message Date
Applevangelist
8af3f89c14 Adjustments for Forrestal by Pene 2021-10-24 14:35:55 +02:00
Applevangelist
fe3079caad Added Bell-47 2021-10-22 17:04:23 +02:00
Applevangelist
61ac6b4131 Added Bell-47 2021-10-22 17:04:19 +02:00
Frank
36cb189512 Merge pull request #1612 from FlightControl-Master/FF/MasterDevel
AIRBOSS v1.2.0
2021-10-20 19:55:19 +02:00
Frank
15f9843878 AIRBOSS v1.2.0
- Added Forrestal carrier CV-59
2021-10-16 12:11:34 +02:00
Frank
67f847dd16 Update Group.lua
- Fixed SetInvisible and SetImmortal functions to acknowledge parameter false.
2021-10-12 22:16:18 +02:00
4 changed files with 199 additions and 152 deletions

View File

@@ -27,10 +27,11 @@
-- **Supported Carriers:** -- **Supported Carriers:**
-- --
-- * [USS John C. Stennis](https://en.wikipedia.org/wiki/USS_John_C._Stennis) (CVN-74) -- * [USS John C. Stennis](https://en.wikipedia.org/wiki/USS_John_C._Stennis) (CVN-74)
-- * [USS Theodore Roosevelt](https://en.wikipedia.org/wiki/USS_Theodore_Roosevelt_(CVN-71)) (CVN-71) [Super Carrier Module] -- * [USS Theodore Roosevelt](https://en.wikipedia.org/wiki/USS_Theodore_Roosevelt_(CVN-71)) (CVN-71) [Super Carrier Module]
-- * [USS Abraham Lincoln](https://en.wikipedia.org/wiki/USS_Abraham_Lincoln_(CVN-72)) (CVN-72) [Super Carrier Module] -- * [USS Abraham Lincoln](https://en.wikipedia.org/wiki/USS_Abraham_Lincoln_(CVN-72)) (CVN-72) [Super Carrier Module]
-- * [USS George Washington](https://en.wikipedia.org/wiki/USS_George_Washington_(CVN-73)) (CVN-73) [Super Carrier Module] -- * [USS George Washington](https://en.wikipedia.org/wiki/USS_George_Washington_(CVN-73)) (CVN-73) [Super Carrier Module]
-- * [USS Harry S. Truman](https://en.wikipedia.org/wiki/USS_Harry_S._Truman) (CVN-75) [Super Carrier Module] -- * [USS Harry S. Truman](https://en.wikipedia.org/wiki/USS_Harry_S._Truman) (CVN-75) [Super Carrier Module]
-- * [USS Forrestal](https://en.wikipedia.org/wiki/USS_Forrestal_(CV-59)) (CV-59) [Heatblur Carrier Module]
-- * [USS Tarawa](https://en.wikipedia.org/wiki/USS_Tarawa_(LHA-1)) (LHA-1) [**WIP**] -- * [USS Tarawa](https://en.wikipedia.org/wiki/USS_Tarawa_(LHA-1)) (LHA-1) [**WIP**]
-- * [USS America](https://en.wikipedia.org/wiki/USS_America_(LHA-6)) (LHA-6) [**WIP**] -- * [USS America](https://en.wikipedia.org/wiki/USS_America_(LHA-6)) (LHA-6) [**WIP**]
-- * [Juan Carlos I](https://en.wikipedia.org/wiki/Spanish_amphibious_assault_ship_Juan_Carlos_I) (L61) [**WIP**] -- * [Juan Carlos I](https://en.wikipedia.org/wiki/Spanish_amphibious_assault_ship_Juan_Carlos_I) (L61) [**WIP**]
@@ -1295,6 +1296,7 @@ AIRBOSS.AircraftCarrier={
-- @field #string WASHINGTON USS George Washington (CVN-73) [Super Carrier Module] -- @field #string WASHINGTON USS George Washington (CVN-73) [Super Carrier Module]
-- @field #string STENNIS USS John C. Stennis (CVN-74) -- @field #string STENNIS USS John C. Stennis (CVN-74)
-- @field #string TRUMAN USS Harry S. Truman (CVN-75) [Super Carrier Module] -- @field #string TRUMAN USS Harry S. Truman (CVN-75) [Super Carrier Module]
-- @field #string FORRESTAL USS Forrestal (CV-59) [Heatblur Carrier Module]
-- @field #string VINSON USS Carl Vinson (CVN-70) [Obsolete] -- @field #string VINSON USS Carl Vinson (CVN-70) [Obsolete]
-- @field #string TARAWA USS Tarawa (LHA-1) -- @field #string TARAWA USS Tarawa (LHA-1)
-- @field #string AMERICA USS America (LHA-6) -- @field #string AMERICA USS America (LHA-6)
@@ -1306,6 +1308,7 @@ AIRBOSS.CarrierType={
WASHINGTON="CVN_73", WASHINGTON="CVN_73",
TRUMAN="CVN_75", TRUMAN="CVN_75",
STENNIS="Stennis", STENNIS="Stennis",
FORRESTAL="Forrestal",
VINSON="VINSON", VINSON="VINSON",
TARAWA="LHA_Tarawa", TARAWA="LHA_Tarawa",
AMERICA="USS America LHA-6", AMERICA="USS America LHA-6",
@@ -1723,7 +1726,7 @@ AIRBOSS.MenuF10Root=nil
--- Airboss class version. --- Airboss class version.
-- @field #string version -- @field #string version
AIRBOSS.version="1.1.6" AIRBOSS.version="1.2.0"
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- TODO list -- TODO list
@@ -1974,6 +1977,8 @@ function AIRBOSS:New(carriername, alias)
self:_InitNimitz() self:_InitNimitz()
elseif self.carriertype==AIRBOSS.CarrierType.TRUMAN then elseif self.carriertype==AIRBOSS.CarrierType.TRUMAN then
self:_InitNimitz() self:_InitNimitz()
elseif self.carriertype==AIRBOSS.CarrierType.FORRESTAL then
self:_InitForrestal()
elseif self.carriertype==AIRBOSS.CarrierType.VINSON then elseif self.carriertype==AIRBOSS.CarrierType.VINSON then
-- TODO: Carl Vinson parameters. -- TODO: Carl Vinson parameters.
self:_InitStennis() self:_InitStennis()
@@ -2023,10 +2028,10 @@ function AIRBOSS:New(carriername, alias)
self:_GetZonePlatform(case):SmokeZone(SMOKECOLOR.Blue, 45) self:_GetZonePlatform(case):SmokeZone(SMOKECOLOR.Blue, 45)
self:_GetZoneCorridor(case):SmokeZone(SMOKECOLOR.Green, 45) self:_GetZoneCorridor(case):SmokeZone(SMOKECOLOR.Green, 45)
self:_GetZoneHolding(case, 1):SmokeZone(SMOKECOLOR.White, 45) self:_GetZoneHolding(case, 1):SmokeZone(SMOKECOLOR.White, 45)
self:_GetZoneHolding(case, 2):SmokeZone(SMOKECOLOR.White, 45) self:_GetZoneHolding(case, 2):SmokeZone(SMOKECOLOR.White, 45)
self:_GetZoneInitial(case):SmokeZone(SMOKECOLOR.Orange, 45) self:_GetZoneInitial(case):SmokeZone(SMOKECOLOR.Orange, 45)
self:_GetZoneCommence(case, 1):SmokeZone(SMOKECOLOR.Red, 45) self:_GetZoneCommence(case, 1):SmokeZone(SMOKECOLOR.Red, 45)
self:_GetZoneCommence(case, 2):SmokeZone(SMOKECOLOR.Red, 45) self:_GetZoneCommence(case, 2):SmokeZone(SMOKECOLOR.Red, 45)
self:_GetZoneAbeamLandingSpot():SmokeZone(SMOKECOLOR.Red, 5) self:_GetZoneAbeamLandingSpot():SmokeZone(SMOKECOLOR.Red, 5)
self:_GetZoneLandingSpot():SmokeZone(SMOKECOLOR.Red, 5) self:_GetZoneLandingSpot():SmokeZone(SMOKECOLOR.Red, 5)
end end
@@ -2041,7 +2046,7 @@ function AIRBOSS:New(carriername, alias)
local stern=self:_GetSternCoord() local stern=self:_GetSternCoord()
-- Bow pos. -- Bow pos.
local bow=stern:Translate(self.carrierparam.totlength, hdg) local bow=stern:Translate(self.carrierparam.totlength, hdg, true)
-- End of rwy. -- End of rwy.
local rwy=stern:Translate(self.carrierparam.rwylength, FB, true) local rwy=stern:Translate(self.carrierparam.rwylength, FB, true)
@@ -2059,31 +2064,31 @@ function AIRBOSS:New(carriername, alias)
bow:FlareYellow() bow:FlareYellow()
-- Runway half width = 10 m. -- Runway half width = 10 m.
local r1=stern:Translate(self.carrierparam.rwywidth*0.5, FB+90) local r1=stern:Translate(self.carrierparam.rwywidth*0.5, FB+90, true)
local r2=stern:Translate(self.carrierparam.rwywidth*0.5, FB-90) local r2=stern:Translate(self.carrierparam.rwywidth*0.5, FB-90, true)
r1:FlareWhite() --r1:FlareWhite()
r2:FlareWhite() --r2:FlareWhite()
-- End of runway. -- End of runway.
rwy:FlareRed() rwy:FlareRed()
-- Right 30 meters from stern. -- Right 30 meters from stern.
local cR=stern:Translate(self.carrierparam.totwidthstarboard, hdg+90) local cR=stern:Translate(self.carrierparam.totwidthstarboard, hdg+90, true)
cR:FlareYellow() --cR:FlareYellow()
-- Left 40 meters from stern. -- Left 40 meters from stern.
local cL=stern:Translate(self.carrierparam.totwidthport, hdg-90) local cL=stern:Translate(self.carrierparam.totwidthport, hdg-90, true)
cL:FlareYellow() --cL:FlareYellow()
-- Carrier specific. -- Carrier specific.
if self.carrier:GetTypeName()~=AIRBOSS.CarrierType.TARAWA or self.carrier:GetTypeName()~=AIRBOSS.CarrierType.AMERICA or self.carrier:GetTypeName()~=AIRBOSS.CarrierType.JCARLOS then if self.carrier:GetTypeName()~=AIRBOSS.CarrierType.TARAWA or self.carrier:GetTypeName()~=AIRBOSS.CarrierType.AMERICA or self.carrier:GetTypeName()~=AIRBOSS.CarrierType.JCARLOS then
-- Flare wires. -- Flare wires.
local w1=stern:Translate(self.carrierparam.wire1, FB) local w1=stern:Translate(self.carrierparam.wire1, FB, true)
local w2=stern:Translate(self.carrierparam.wire2, FB) local w2=stern:Translate(self.carrierparam.wire2, FB, true)
local w3=stern:Translate(self.carrierparam.wire3, FB) local w3=stern:Translate(self.carrierparam.wire3, FB, true)
local w4=stern:Translate(self.carrierparam.wire4, FB) local w4=stern:Translate(self.carrierparam.wire4, FB, true)
w1:FlareWhite() w1:FlareWhite()
w2:FlareYellow() w2:FlareYellow()
w3:FlareWhite() w3:FlareWhite()
@@ -4377,6 +4382,35 @@ function AIRBOSS:_InitNimitz()
end end
--- Init parameters for Forrestal class super carriers.
-- @param #AIRBOSS self
function AIRBOSS:_InitForrestal()
-- Init Nimitz as default.
self:_InitNimitz()
-- Carrier Parameters.
self.carrierparam.sterndist =-135.5
self.carrierparam.deckheight = 20 --20.1494 --DCS World OpenBeta\CoreMods\tech\USS_Nimitz\Database\USS_CVN_7X.lua
-- Total size of the carrier (approx as rectangle).
self.carrierparam.totlength=315 -- Wiki says 325 meters overall length.
self.carrierparam.totwidthport=45 -- Wiki says 73 meters overall beam.
self.carrierparam.totwidthstarboard=35
-- Landing runway.
self.carrierparam.rwyangle = -9.1359 --DCS World OpenBeta\CoreMods\tech\USS_Nimitz\scripts\USS_Nimitz_RunwaysAndRoutes.lua
self.carrierparam.rwylength = 212
self.carrierparam.rwywidth = 25
-- Wires.
self.carrierparam.wire1 = 44 -- Distance from stern to first wire. Original from Frank - 42
self.carrierparam.wire2 = 54 --51.5
self.carrierparam.wire3 = 64 --62
self.carrierparam.wire4 = 74 --72.5
end
--- Init parameters for LHA-1 Tarawa carrier. --- Init parameters for LHA-1 Tarawa carrier.
-- @param #AIRBOSS self -- @param #AIRBOSS self
function AIRBOSS:_InitTarawa() function AIRBOSS:_InitTarawa()
@@ -4978,7 +5012,7 @@ function AIRBOSS:_InitVoiceOvers()
duration=2.0, duration=2.0,
subduration=5, subduration=5,
}, },
EXPECTSPOT5={ EXPECTSPOT5={
file="LSO-ExpectSpot5", file="LSO-ExpectSpot5",
suffix="ogg", suffix="ogg",
loud=false, loud=false,
@@ -5817,8 +5851,8 @@ function AIRBOSS:_GetAircraftParameters(playerData, step)
elseif skyhawk then elseif skyhawk then
alt=UTILS.FeetToMeters(600) alt=UTILS.FeetToMeters(600)
speed=UTILS.KnotsToMps(250) speed=UTILS.KnotsToMps(250)
elseif goshawk then elseif goshawk then
alt=UTILS.FeetToMeters(800) alt=UTILS.FeetToMeters(800)
speed=UTILS.KnotsToMps(300) speed=UTILS.KnotsToMps(300)
end end
@@ -5830,8 +5864,8 @@ function AIRBOSS:_GetAircraftParameters(playerData, step)
elseif skyhawk then elseif skyhawk then
alt=UTILS.FeetToMeters(600) alt=UTILS.FeetToMeters(600)
speed=UTILS.KnotsToMps(250) speed=UTILS.KnotsToMps(250)
elseif goshawk then elseif goshawk then
alt=UTILS.FeetToMeters(800) alt=UTILS.FeetToMeters(800)
speed=UTILS.KnotsToMps(300) speed=UTILS.KnotsToMps(300)
end end
@@ -5868,7 +5902,7 @@ function AIRBOSS:_GetAircraftParameters(playerData, step)
dist=UTILS.NMToMeters(1.2) dist=UTILS.NMToMeters(1.2)
end end
if goshawk then if goshawk then
-- 0.9 to 1.1 NM per natops ch.4 page 48 -- 0.9 to 1.1 NM per natops ch.4 page 48
dist=UTILS.NMToMeters(0.9) dist=UTILS.NMToMeters(0.9)
else else
@@ -5879,7 +5913,7 @@ function AIRBOSS:_GetAircraftParameters(playerData, step)
if hornet or tomcat then if hornet or tomcat then
alt=UTILS.FeetToMeters(500) alt=UTILS.FeetToMeters(500)
elseif goshawk then elseif goshawk then
alt=UTILS.FeetToMeters(450) alt=UTILS.FeetToMeters(450)
elseif skyhawk then elseif skyhawk then
alt=UTILS.FeetToMeters(500) alt=UTILS.FeetToMeters(500)
@@ -6381,8 +6415,8 @@ function AIRBOSS:_MarshalPlayer(playerData, stack)
-- Set stack flag. -- Set stack flag.
flight.flag=stack flight.flag=stack
-- Trigger Marshal event. -- Trigger Marshal event.
self:Marshal(flight) self:Marshal(flight)
end end
else else
@@ -9640,7 +9674,7 @@ function AIRBOSS:_Bullseye(playerData)
self:_PlayerHint(playerData) self:_PlayerHint(playerData)
-- LSO expect spot 5 or 7.5 call -- LSO expect spot 5 or 7.5 call
if playerData.actype==AIRBOSS.AircraftCarrier.AV8B and self.carriertype==AIRBOSS.CarrierType.JCARLOS then if playerData.actype==AIRBOSS.AircraftCarrier.AV8B and self.carriertype==AIRBOSS.CarrierType.JCARLOS then
self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT5, nil, nil, nil, true) self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT5, nil, nil, nil, true)
elseif playerData.actype==AIRBOSS.AircraftCarrier.AV8B then elseif playerData.actype==AIRBOSS.AircraftCarrier.AV8B then
self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT75, nil, nil, nil, true) self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT75, nil, nil, nil, true)
@@ -9825,7 +9859,7 @@ function AIRBOSS:_Abeam(playerData)
self:RadioTransmission(self.LSORadio, self.LSOCall.PADDLESCONTACT, nil, nil, nil, true) self:RadioTransmission(self.LSORadio, self.LSOCall.PADDLESCONTACT, nil, nil, nil, true)
-- LSO expect spot 5 or 7.5 call -- LSO expect spot 5 or 7.5 call
if playerData.actype==AIRBOSS.AircraftCarrier.AV8B and self.carriertype==AIRBOSS.CarrierType.JCARLOS then if playerData.actype==AIRBOSS.AircraftCarrier.AV8B and self.carriertype==AIRBOSS.CarrierType.JCARLOS then
self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT5, false, 5, nil, true) self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT5, false, 5, nil, true)
elseif playerData.actype==AIRBOSS.AircraftCarrier.AV8B then elseif playerData.actype==AIRBOSS.AircraftCarrier.AV8B then
self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT75, false, 5, nil, true) self:RadioTransmission(self.LSORadio, self.LSOCall.EXPECTSPOT75, false, 5, nil, true)
@@ -10215,25 +10249,25 @@ function AIRBOSS:_Groove(playerData)
-- Distance in NM. -- Distance in NM.
local d=UTILS.MetersToNM(rho) local d=UTILS.MetersToNM(rho)
-- Drift on lineup. -- Drift on lineup.
if rho>=RAR and rho<=RIM then if rho>=RAR and rho<=RIM then
if gd.LUE>0.22 and lineupError<-0.22 then if gd.LUE>0.22 and lineupError<-0.22 then
env.info" Drift Right across centre ==> DR-" env.info" Drift Right across centre ==> DR-"
gd.Drift=" DR" gd.Drift=" DR"
self:T(self.lid..string.format("Got Drift Right across centre step %s, d=%.3f: Max LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError)) self:T(self.lid..string.format("Got Drift Right across centre step %s, d=%.3f: Max LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
elseif gd.LUE<-0.22 and lineupError>0.22 then elseif gd.LUE<-0.22 and lineupError>0.22 then
env.info" Drift Left ==> DL-" env.info" Drift Left ==> DL-"
gd.Drift=" DL" gd.Drift=" DL"
self:T(self.lid..string.format("Got Drift Left across centre at step %s, d=%.3f: Min LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError)) self:T(self.lid..string.format("Got Drift Left across centre at step %s, d=%.3f: Min LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
elseif gd.LUE>0.13 and lineupError<-0.14 then elseif gd.LUE>0.13 and lineupError<-0.14 then
env.info" Little Drift Right across centre ==> (DR-)" env.info" Little Drift Right across centre ==> (DR-)"
gd.Drift=" (DR)" gd.Drift=" (DR)"
self:T(self.lid..string.format("Got Little Drift Right across centre at step %s, d=%.3f: Max LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError)) self:T(self.lid..string.format("Got Little Drift Right across centre at step %s, d=%.3f: Max LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
elseif gd.LUE<-0.13 and lineupError>0.14 then elseif gd.LUE<-0.13 and lineupError>0.14 then
env.info" Little Drift Left across centre ==> (DL-)" env.info" Little Drift Left across centre ==> (DL-)"
gd.Drift=" (DL)" gd.Drift=" (DL)"
self:E(self.lid..string.format("Got Little Drift Left across centre at step %s, d=%.3f: Min LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError)) self:E(self.lid..string.format("Got Little Drift Left across centre at step %s, d=%.3f: Min LUE=%.3f, lower LUE=%.3f", gs, d, gd.LUE, lineupError))
end end
end end
-- Update max deviation of line up error. -- Update max deviation of line up error.
@@ -10544,6 +10578,9 @@ function AIRBOSS:_GetSternCoord()
elseif self.carriertype==AIRBOSS.CarrierType.STENNIS then elseif self.carriertype==AIRBOSS.CarrierType.STENNIS then
-- Stennis: translate 7 meters starboard wrt Final bearing. -- Stennis: translate 7 meters starboard wrt Final bearing.
self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(7, FB+90, true, true) self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(7, FB+90, true, true)
elseif self.carriertype==AIRBOSS.CarrierType.FORRESTAL then
-- Forrestal
self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(7.5, FB+90, true, true)
else else
-- Nimitz SC: translate 8 meters starboard wrt Final bearing. -- Nimitz SC: translate 8 meters starboard wrt Final bearing.
self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(9.5, FB+90, true, true) self.sterncoord:Translate(self.carrierparam.sterndist, hdg, true, true):Translate(9.5, FB+90, true, true)
@@ -10579,7 +10616,7 @@ function AIRBOSS:_GetWire(Lcoord, dc)
-- Multiplayer wire correction. -- Multiplayer wire correction.
if self.mpWireCorrection then if self.mpWireCorrection then
d=d-self.mpWireCorrection d=d-self.mpWireCorrection
end end
-- Shift wires from stern to their correct position. -- Shift wires from stern to their correct position.
@@ -10672,7 +10709,7 @@ function AIRBOSS:_Trapped(playerData)
elseif playerData.actype==AIRBOSS.AircraftCarrier.A4EC then elseif playerData.actype==AIRBOSS.AircraftCarrier.A4EC then
-- A-4E gets slowed down much faster the the F/A-18C! -- A-4E gets slowed down much faster the the F/A-18C!
dcorr=56 dcorr=56
elseif playerData.actype==AIRBOSS.AircraftCarrier.T45C then elseif playerData.actype==AIRBOSS.AircraftCarrier.T45C then
-- T-45 also gets slowed down much faster the the F/A-18C. -- T-45 also gets slowed down much faster the the F/A-18C.
dcorr=56 dcorr=56
end end
@@ -11303,7 +11340,7 @@ function AIRBOSS:_GetZoneHolding(case, stack)
-- So stay 0-5 NM (+1 NM error margin) port of carrier. -- So stay 0-5 NM (+1 NM error margin) port of carrier.
self.zoneHolding=self.zoneHolding or ZONE_POLYGON_BASE:New("CASE II/III Holding Zone") self.zoneHolding=self.zoneHolding or ZONE_POLYGON_BASE:New("CASE II/III Holding Zone")
self.zoneHolding:UpdateFromVec2(p) self.zoneHolding:UpdateFromVec2(p)
end end
return self.zoneHolding return self.zoneHolding
@@ -11349,12 +11386,12 @@ function AIRBOSS:_GetZoneCommence(case, stack)
-- Create holding zone. -- Create holding zone.
self.zoneCommence=self.zoneCommence or ZONE_RADIUS:New("CASE I Commence Zone") self.zoneCommence=self.zoneCommence or ZONE_RADIUS:New("CASE I Commence Zone")
self.zoneCommence:UpdateFromVec2(Three:GetVec2(), R) self.zoneCommence:UpdateFromVec2(Three:GetVec2(), R)
else else
-- Case II/III -- Case II/III
stack=stack or 1 stack=stack or 1
-- Start point at 21 NM for stack=1. -- Start point at 21 NM for stack=1.
local l=20+stack local l=20+stack
@@ -11382,7 +11419,7 @@ function AIRBOSS:_GetZoneCommence(case, stack)
-- Zone polygon. -- Zone polygon.
self.zoneCommence=self.zoneCommence or ZONE_POLYGON_BASE:New("CASE II/III Commence Zone") self.zoneCommence=self.zoneCommence or ZONE_POLYGON_BASE:New("CASE II/III Commence Zone")
self.zoneCommence:UpdateFromVec2(p) self.zoneCommence:UpdateFromVec2(p)
end end
@@ -11642,7 +11679,7 @@ function AIRBOSS:_GetOptLandingCoordinate()
if self.carriertype==AIRBOSS.CarrierType.TARAWA then if self.carriertype==AIRBOSS.CarrierType.TARAWA then
-- Landing 100 ft abeam, 120 ft alt. -- Landing 100 ft abeam, 120 ft alt.
self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-90, true, true) self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-90, true, true)
--stern=self:_GetLandingSpotCoordinate():Translate(35, FB-90) --stern=self:_GetLandingSpotCoordinate():Translate(35, FB-90)
-- Alitude 120 ft. -- Alitude 120 ft.
@@ -11650,7 +11687,7 @@ function AIRBOSS:_GetOptLandingCoordinate()
elseif self.carriertype==AIRBOSS.CarrierType.AMERICA then elseif self.carriertype==AIRBOSS.CarrierType.AMERICA then
-- Landing 100 ft abeam, 120 ft alt. To allow adjustments to match different deck configurations. -- Landing 100 ft abeam, 120 ft alt. To allow adjustments to match different deck configurations.
self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-90, true, true) self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-90, true, true)
--stern=self:_GetLandingSpotCoordinate():Translate(35, FB-90) --stern=self:_GetLandingSpotCoordinate():Translate(35, FB-90)
-- Alitude 120 ft. -- Alitude 120 ft.
@@ -11659,7 +11696,7 @@ function AIRBOSS:_GetOptLandingCoordinate()
elseif self.carriertype==AIRBOSS.CarrierType.JCARLOS then elseif self.carriertype==AIRBOSS.CarrierType.JCARLOS then
-- Landing 100 ft abeam, 120 ft alt. -- Landing 100 ft abeam, 120 ft alt.
self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-100, true, true) self.landingcoord:UpdateFromCoordinate(self:_GetLandingSpotCoordinate()):Translate(35, FB-100, true, true)
--stern=self:_GetLandingSpotCoordinate():Translate(35, FB-100) --stern=self:_GetLandingSpotCoordinate():Translate(35, FB-100)
-- Alitude 120 ft. -- Alitude 120 ft.
@@ -12295,17 +12332,17 @@ function AIRBOSS:_LSOgrade(playerData)
G="Unicorn" G="Unicorn"
else else
-- Add AV-8B Harrier devation allowances due to lower groundspeed and 3x conventional groove time, this allows to maintain LSO tolerances while respecting the deviations are not unsafe. (WIP requires feedback) -- Add AV-8B Harrier devation allowances due to lower groundspeed and 3x conventional groove time, this allows to maintain LSO tolerances while respecting the deviations are not unsafe. (WIP requires feedback)
-- Large devaitions still result in a No Grade, A Unicorn still requires a clean pass with no deviation. -- Large devaitions still result in a No Grade, A Unicorn still requires a clean pass with no deviation.
if nL>3 and playerData.actype==AIRBOSS.AircraftCarrier.AV8B then if nL>3 and playerData.actype==AIRBOSS.AircraftCarrier.AV8B then
-- Larger deviations ==> "No grade" 2.0 points. -- Larger deviations ==> "No grade" 2.0 points.
grade="--" grade="--"
points=2.0 points=2.0
elseif nN>2 and playerData.actype==AIRBOSS.AircraftCarrier.AV8B then elseif nN>2 and playerData.actype==AIRBOSS.AircraftCarrier.AV8B then
-- Only average deviations ==> "Fair Pass" Pass with average deviations and corrections. -- Only average deviations ==> "Fair Pass" Pass with average deviations and corrections.
grade="(OK)" grade="(OK)"
points=3.0 points=3.0
elseif nL>0 then elseif nL>0 then
-- Larger deviations ==> "No grade" 2.0 points. -- Larger deviations ==> "No grade" 2.0 points.
grade="--" grade="--"
points=2.0 points=2.0
@@ -12433,29 +12470,29 @@ function AIRBOSS:_Flightdata2Text(playerData, groovestep)
--Angled Approach. --Angled Approach.
local P=nil local P=nil
if step==AIRBOSS.PatternStep.GROOVE_XX and ROL<=4.0 and playerData.case<3 then if step==AIRBOSS.PatternStep.GROOVE_XX and ROL<=4.0 and playerData.case<3 then
if LUE>self.lue.RIGHT then if LUE>self.lue.RIGHT then
P=underline("AA") P=underline("AA")
elseif elseif
LUE>self.lue.RightMed then LUE>self.lue.RightMed then
P="AA " P="AA "
elseif elseif
LUE>self.lue.Right then LUE>self.lue.Right then
P=little("AA") P=little("AA")
end end
end end
--Overshoot Start. --Overshoot Start.
local O=nil local O=nil
if step==AIRBOSS.PatternStep.GROOVE_XX then if step==AIRBOSS.PatternStep.GROOVE_XX then
if LUE<self.lue.LEFT then if LUE<self.lue.LEFT then
O=underline("OS") O=underline("OS")
elseif elseif
LUE<self.lue.Left then LUE<self.lue.Left then
O="OS" O="OS"
elseif elseif
LUE<self.lue._min then LUE<self.lue._min then
O=little("OS") O=little("OS")
end end
end end
-- Speed via AoA. Depends on aircraft type. -- Speed via AoA. Depends on aircraft type.
@@ -12499,21 +12536,21 @@ function AIRBOSS:_Flightdata2Text(playerData, groovestep)
elseif LUE>self.lue._max then elseif LUE>self.lue._max then
D=little("LUL") D=little("LUL")
elseif playerData.case<3 then elseif playerData.case<3 then
if LUE<self.lue.LEFT and step~=AIRBOSS.PatternStep.GROOVE_XX then if LUE<self.lue.LEFT and step~=AIRBOSS.PatternStep.GROOVE_XX then
D=underline("LUR") D=underline("LUR")
elseif LUE<self.lue.Left and step~=AIRBOSS.PatternStep.GROOVE_XX then elseif LUE<self.lue.Left and step~=AIRBOSS.PatternStep.GROOVE_XX then
D="LUR" D="LUR"
elseif LUE<self.lue._min and step~=AIRBOSS.PatternStep.GROOVE_XX then elseif LUE<self.lue._min and step~=AIRBOSS.PatternStep.GROOVE_XX then
D=little("LUR") D=little("LUR")
end end
elseif playerData.case==3 then elseif playerData.case==3 then
if LUE<self.lue.LEFT then if LUE<self.lue.LEFT then
D=underline("LUR") D=underline("LUR")
elseif LUE<self.lue.Left then elseif LUE<self.lue.Left then
D="LUR" D="LUR"
elseif LUE<self.lue._min then elseif LUE<self.lue._min then
D=little("LUR") D=little("LUR")
end end
end end
-- Compile. -- Compile.
@@ -12546,7 +12583,7 @@ function AIRBOSS:_Flightdata2Text(playerData, groovestep)
--Drift in Lineup --Drift in Lineup
if fdata.Drift then if fdata.Drift then
G=G..fdata.Drift G=G..fdata.Drift
n=n -- Drift doesn't affect score, advisory only. n=n -- Drift doesn't affect score, advisory only.
end end
-- Overshoot. -- Overshoot.
if O then if O then
@@ -14818,8 +14855,8 @@ end
-- @param #table param Parameters. -- @param #table param Parameters.
-- @param #number time Time. -- @param #number time Time.
function AIRBOSS._CheckRadioQueueT(param, time) function AIRBOSS._CheckRadioQueueT(param, time)
AIRBOSS._CheckRadioQueue(param.airboss, param.radioqueue, param.name) AIRBOSS._CheckRadioQueue(param.airboss, param.radioqueue, param.name)
return time+0.05 return time+0.05
end end
--- Radio queue item. --- Radio queue item.
@@ -14843,15 +14880,15 @@ function AIRBOSS:_CheckRadioQueue(radioqueue, name)
-- Check if queue is empty. -- Check if queue is empty.
if #radioqueue==0 then if #radioqueue==0 then
if name=="LSO" then if name=="LSO" then
self:T(self.lid..string.format("Stopping LSO radio queue.")) self:T(self.lid..string.format("Stopping LSO radio queue."))
self.radiotimer:Stop(self.RQLid) self.radiotimer:Stop(self.RQLid)
self.RQLid=nil self.RQLid=nil
elseif name=="MARSHAL" then elseif name=="MARSHAL" then
self:T(self.lid..string.format("Stopping Marshal radio queue.")) self:T(self.lid..string.format("Stopping Marshal radio queue."))
self.radiotimer:Stop(self.RQMid) self.radiotimer:Stop(self.RQMid)
self.RQMid=nil self.RQMid=nil
end end
return return
end end
@@ -14993,11 +15030,11 @@ function AIRBOSS:RadioTransmission(radio, call, loud, delay, interval, click, pi
caller="LSOCall" caller="LSOCall"
-- Schedule radio queue checks. -- Schedule radio queue checks.
if not self.RQLid then if not self.RQLid then
self:T(self.lid..string.format("Starting LSO radio queue.")) self:T(self.lid..string.format("Starting LSO radio queue."))
self.RQLid=self.radiotimer:Schedule(nil, AIRBOSS._CheckRadioQueue, {self, self.RQLSO, "LSO"}, 0.02, 0.05) self.RQLid=self.radiotimer:Schedule(nil, AIRBOSS._CheckRadioQueue, {self, self.RQLSO, "LSO"}, 0.02, 0.05)
end end
elseif radio.alias=="MARSHAL" then elseif radio.alias=="MARSHAL" then
@@ -15005,10 +15042,10 @@ function AIRBOSS:RadioTransmission(radio, call, loud, delay, interval, click, pi
caller="MarshalCall" caller="MarshalCall"
if not self.RQMid then if not self.RQMid then
self:T(self.lid..string.format("Starting Marhal radio queue.")) self:T(self.lid..string.format("Starting Marhal radio queue."))
self.RQMid=self.radiotimer:Schedule(nil, AIRBOSS._CheckRadioQueue, {self, self.RQMarshal, "MARSHAL"}, 0.02, 0.05) self.RQMid=self.radiotimer:Schedule(nil, AIRBOSS._CheckRadioQueue, {self, self.RQMarshal, "MARSHAL"}, 0.02, 0.05)
end end
end end
@@ -16175,9 +16212,9 @@ function AIRBOSS:_SkipperStartRecovery(_unitName, case)
-- Inform player. -- Inform player.
local text=string.format("affirm, Case %d recovery will start in 5 min for %d min. Wind on deck %d knots. U-turn=%s.", case, self.skipperTime, self.skipperSpeed, tostring(self.skipperUturn)) local text=string.format("affirm, Case %d recovery will start in 5 min for %d min. Wind on deck %d knots. U-turn=%s.", case, self.skipperTime, self.skipperSpeed, tostring(self.skipperUturn))
if case>1 then if case>1 then
text=text..string.format(" Marshal radial %d°.", self.skipperOffset) text=text..string.format(" Marshal radial %d°.", self.skipperOffset)
end end
if self:IsRecovering() then if self:IsRecovering() then
text="negative, carrier is already recovering." text="negative, carrier is already recovering."
self:MessageToPlayer(playerData, text, "AIRBOSS") self:MessageToPlayer(playerData, text, "AIRBOSS")
@@ -18028,12 +18065,12 @@ function AIRBOSS:_SaveTrapSheet(playerData, grade)
for i=1,9999 do for i=1,9999 do
-- Create file name -- Create file name
if self.trapprefix then if self.trapprefix then
filename=string.format("%s_%s-%04d.csv", self.trapprefix, playerData.actype, i) filename=string.format("%s_%s-%04d.csv", self.trapprefix, playerData.actype, i)
else else
local name=UTILS.ReplaceIllegalCharacters(playerData.name, "_") local name=UTILS.ReplaceIllegalCharacters(playerData.name, "_")
filename=string.format("AIRBOSS-%s_Trapsheet-%s_%s-%04d.csv", self.alias, name, playerData.actype, i) filename=string.format("AIRBOSS-%s_Trapsheet-%s_%s-%04d.csv", self.alias, name, playerData.actype, i)
end end
-- Set path. -- Set path.
if path~=nil then if path~=nil then

View File

@@ -238,10 +238,11 @@ CSAR.AircraftType["Mi-8MTV2"] = 12
CSAR.AircraftType["Mi-8MT"] = 12 CSAR.AircraftType["Mi-8MT"] = 12
CSAR.AircraftType["Mi-24P"] = 8 CSAR.AircraftType["Mi-24P"] = 8
CSAR.AircraftType["Mi-24V"] = 8 CSAR.AircraftType["Mi-24V"] = 8
CSAR.AircraftType["Bell-47"] = 2
--- CSAR class version. --- CSAR class version.
-- @field #string version -- @field #string version
CSAR.version="0.1.11r1" CSAR.version="0.1.11r2"
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- ToDo list -- ToDo list

View File

@@ -1613,6 +1613,11 @@ function UTILS.IsLoadingDoorOpen( unit_name )
ret_val = true ret_val = true
end end
if string.find(type_name, "Bell-47") then -- bell aint got no doors so always ready to load injured soldiers
BASE:T(unit_name .. " door is open")
ret_val = true
end
if ret_val == false then if ret_val == false then
BASE:T(unit_name .. " all doors are closed") BASE:T(unit_name .. " all doors are closed")
end end

View File

@@ -2578,8 +2578,10 @@ end
-- @return #GROUP self -- @return #GROUP self
function GROUP:SetCommandInvisible(switch) function GROUP:SetCommandInvisible(switch)
self:F2( self.GroupName ) self:F2( self.GroupName )
local switch = switch or false if switch==nil then
local SetInvisible = {id = 'SetInvisible', params = {value = true}} switch=false
end
local SetInvisible = {id = 'SetInvisible', params = {value = switch}}
self:SetCommand(SetInvisible) self:SetCommand(SetInvisible)
return self return self
end end
@@ -2590,9 +2592,11 @@ end
-- @return #GROUP self -- @return #GROUP self
function GROUP:SetCommandImmortal(switch) function GROUP:SetCommandImmortal(switch)
self:F2( self.GroupName ) self:F2( self.GroupName )
local switch = switch or false if switch==nil then
local SetInvisible = {id = 'SetImmortal', params = {value = true}} switch=false
self:SetCommand(SetInvisible) end
local SetImmortal = {id = 'SetImmortal', params = {value = switch}}
self:SetCommand(SetImmortal)
return self return self
end end