mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
#CSAR
* Added use of custom callsigns * Added cargo weight for rescued pilots * Improved o'clock calculation #CTLD * Docu additions
This commit is contained in:
parent
7ec18ebf00
commit
3a6c52ae73
@ -30,7 +30,7 @@
|
|||||||
-- @module Ops.CSAR
|
-- @module Ops.CSAR
|
||||||
-- @image OPS_CSAR.jpg
|
-- @image OPS_CSAR.jpg
|
||||||
|
|
||||||
-- Date: June 2022
|
-- Date: October 2022
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
--- **CSAR** class, extends Core.Base#BASE, Core.Fsm#FSM
|
--- **CSAR** class, extends Core.Base#BASE, Core.Fsm#FSM
|
||||||
@ -270,7 +270,7 @@ CSAR.AircraftType["Bronco-OV-10A"] = 2
|
|||||||
|
|
||||||
--- CSAR class version.
|
--- CSAR class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
CSAR.version="1.0.13"
|
CSAR.version="1.0.15"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- ToDo list
|
-- ToDo list
|
||||||
@ -1210,6 +1210,38 @@ function CSAR:_RemoveNameFromDownedPilots(name,force)
|
|||||||
return found
|
return found
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- [User] Set callsign options for TTS output. See @{Wrapper.Group#GROUP.GetCustomCallSign}() on how to set customized callsigns.
|
||||||
|
-- @param #CSAR self
|
||||||
|
-- @param #boolean ShortCallsign If true, only call out the major flight number
|
||||||
|
-- @param #boolean Keepnumber If true, keep the **customized callsign** in the #GROUP name for players as-is, no amendments or numbers.
|
||||||
|
-- @param #table CallsignTranslations (optional) Table to translate between DCS standard callsigns and bespoke ones. Does not apply if using customized
|
||||||
|
-- callsigns from playername or group name.
|
||||||
|
-- @return #CSAR self
|
||||||
|
function CSAR:SetCallSignOptions(ShortCallsign,Keepnumber,CallsignTranslations)
|
||||||
|
if not ShortCallsign or ShortCallsign == false then
|
||||||
|
self.ShortCallsign = false
|
||||||
|
else
|
||||||
|
self.ShortCallsign = true
|
||||||
|
end
|
||||||
|
self.Keepnumber = Keepnumber or false
|
||||||
|
self.CallsignTranslations = CallsignTranslations
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
--- (Internal) Check if a name is in downed pilot table and remove it.
|
||||||
|
-- @param #CSAR self
|
||||||
|
-- @param #string UnitName
|
||||||
|
-- @return #string CallSign
|
||||||
|
function CSAR:_GetCustomCallSign(UnitName)
|
||||||
|
local callsign = Unitname
|
||||||
|
local unit = UNIT:FindByName(UnitName)
|
||||||
|
if unit and unit:IsAlive() then
|
||||||
|
local group = unit:GetGroup()
|
||||||
|
callsign = group:GetCustomCallSign(self.ShortCallsign,self.Keepnumber,self.CallsignTranslations)
|
||||||
|
end
|
||||||
|
return callsign
|
||||||
|
end
|
||||||
|
|
||||||
--- (Internal) Check state of wounded group.
|
--- (Internal) Check state of wounded group.
|
||||||
-- @param #CSAR self
|
-- @param #CSAR self
|
||||||
-- @param #string heliname heliname
|
-- @param #string heliname heliname
|
||||||
@ -1266,9 +1298,9 @@ function CSAR:_CheckWoundedGroupStatus(heliname,woundedgroupname)
|
|||||||
local dist = UTILS.MetersToNM(self.autosmokedistance)
|
local dist = UTILS.MetersToNM(self.autosmokedistance)
|
||||||
disttext = string.format("%.0fnm",dist)
|
disttext = string.format("%.0fnm",dist)
|
||||||
end
|
end
|
||||||
self:_DisplayMessageToSAR(_heliUnit, string.format("%s: %s. I hear you! Finally, that is music in my ears!\nI'll pop a smoke when you are %s away.\nLand or hover by the smoke.", _heliName, _pilotName, disttext), self.messageTime,false,true)
|
self:_DisplayMessageToSAR(_heliUnit, string.format("%s: %s. I hear you! Finally, that is music in my ears!\nI'll pop a smoke when you are %s away.\nLand or hover by the smoke.", self:_GetCustomCallSign(_heliName), _pilotName, disttext), self.messageTime,false,true)
|
||||||
else
|
else
|
||||||
self:_DisplayMessageToSAR(_heliUnit, string.format("%s: %s. I hear you! Finally, that is music in my ears!\nRequest a flare or smoke if you need.", _heliName, _pilotName), self.messageTime,false,true)
|
self:_DisplayMessageToSAR(_heliUnit, string.format("%s: %s. I hear you! Finally, that is music in my ears!\nRequest a flare or smoke if you need.", self:_GetCustomCallSign(_heliName), _pilotName), self.messageTime,false,true)
|
||||||
end
|
end
|
||||||
--mark as shown for THIS heli and THIS group
|
--mark as shown for THIS heli and THIS group
|
||||||
self.heliVisibleMessage[_lookupKeyHeli] = true
|
self.heliVisibleMessage[_lookupKeyHeli] = true
|
||||||
@ -1332,7 +1364,7 @@ function CSAR:_PickupUnit(_heliUnit, _pilotName, _woundedGroup, _woundedGroupNam
|
|||||||
_maxUnits = self.max_units
|
_maxUnits = self.max_units
|
||||||
end
|
end
|
||||||
if _unitsInHelicopter + 1 > _maxUnits then
|
if _unitsInHelicopter + 1 > _maxUnits then
|
||||||
self:_DisplayMessageToSAR(_heliUnit, string.format("%s, %s. We\'re already crammed with %d guys! Sorry!", _pilotName, _heliName, _unitsInHelicopter, _unitsInHelicopter), self.messageTime,false,false,true)
|
self:_DisplayMessageToSAR(_heliUnit, string.format("%s, %s. We\'re already crammed with %d guys! Sorry!", _pilotName, self:_GetCustomCallSign(_heliName), _unitsInHelicopter, _unitsInHelicopter), self.messageTime,false,false,true)
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1350,13 +1382,29 @@ function CSAR:_PickupUnit(_heliUnit, _pilotName, _woundedGroup, _woundedGroupNam
|
|||||||
_woundedGroup:Destroy(false)
|
_woundedGroup:Destroy(false)
|
||||||
self:_RemoveNameFromDownedPilots(_woundedGroupName,true)
|
self:_RemoveNameFromDownedPilots(_woundedGroupName,true)
|
||||||
|
|
||||||
self:_DisplayMessageToSAR(_heliUnit, string.format("%s: %s I\'m in! Get to the MASH ASAP! ", _heliName, _pilotName), self.messageTime,true,true)
|
self:_DisplayMessageToSAR(_heliUnit, string.format("%s: %s I\'m in! Get to the MASH ASAP! ", self:_GetCustomCallSign(_heliName), _pilotName), self.messageTime,true,true)
|
||||||
|
|
||||||
|
self:_UpdateUnitCargoMass(_heliName)
|
||||||
|
|
||||||
self:__Boarded(5,_heliName,_woundedGroupName,grouptable.desc)
|
self:__Boarded(5,_heliName,_woundedGroupName,grouptable.desc)
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- (Internal) Function to calculate and set Unit internal cargo mass
|
||||||
|
-- @param #CSAR self
|
||||||
|
-- @param #string _heliName Unit name
|
||||||
|
-- @return #CSAR self
|
||||||
|
function CSAR:_UpdateUnitCargoMass(_heliName)
|
||||||
|
self:T(self.lid .. " _UpdateUnitCargoMass")
|
||||||
|
local calculatedMass = self:_PilotsOnboard(_heliName)*80
|
||||||
|
local Unit = UNIT:FindByName(_heliName)
|
||||||
|
if Unit then
|
||||||
|
Unit:SetUnitInternalCargo(calculatedMass)
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
--- (Internal) Move group to destination.
|
--- (Internal) Move group to destination.
|
||||||
-- @param #CSAR self
|
-- @param #CSAR self
|
||||||
-- @param Wrapper.Group#GROUP _leader
|
-- @param Wrapper.Group#GROUP _leader
|
||||||
@ -1371,7 +1419,6 @@ function CSAR:_OrderGroupToMoveToPoint(_leader, _destination)
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--- (internal) Function to check if the heli door(s) are open. Thanks to Shadowze.
|
--- (internal) Function to check if the heli door(s) are open. Thanks to Shadowze.
|
||||||
-- @param #CSAR self
|
-- @param #CSAR self
|
||||||
-- @param #string unit_name Name of unit.
|
-- @param #string unit_name Name of unit.
|
||||||
@ -1405,9 +1452,9 @@ function CSAR:_CheckCloseWoundedGroup(_distance, _heliUnit, _heliName, _woundedG
|
|||||||
|
|
||||||
if self.heliCloseMessage[_lookupKeyHeli] == nil then
|
if self.heliCloseMessage[_lookupKeyHeli] == nil then
|
||||||
if self.autosmoke == true then
|
if self.autosmoke == true then
|
||||||
self:_DisplayMessageToSAR(_heliUnit, string.format("%s: %s. You\'re close now! Land or hover at the smoke.", _heliName, _pilotName), self.messageTime,false,true)
|
self:_DisplayMessageToSAR(_heliUnit, string.format("%s: %s. You\'re close now! Land or hover at the smoke.", self:_GetCustomCallSign(_heliName), _pilotName), self.messageTime,false,true)
|
||||||
else
|
else
|
||||||
self:_DisplayMessageToSAR(_heliUnit, string.format("%s: %s. You\'re close now! Land in a safe place, I will go there ", _heliName, _pilotName), self.messageTime,false,true)
|
self:_DisplayMessageToSAR(_heliUnit, string.format("%s: %s. You\'re close now! Land in a safe place, I will go there ", self:_GetCustomCallSign(_heliName), _pilotName), self.messageTime,false,true)
|
||||||
end
|
end
|
||||||
self.heliCloseMessage[_lookupKeyHeli] = true
|
self.heliCloseMessage[_lookupKeyHeli] = true
|
||||||
end
|
end
|
||||||
@ -1574,9 +1621,12 @@ function CSAR:_RescuePilots(_heliUnit)
|
|||||||
|
|
||||||
self.inTransitGroups[_heliName] = nil
|
self.inTransitGroups[_heliName] = nil
|
||||||
|
|
||||||
local _txt = string.format("%s: The %d pilot(s) have been taken to the\nmedical clinic. Good job!", _heliName, PilotsSaved)
|
local _txt = string.format("%s: The %d pilot(s) have been taken to the\nmedical clinic. Good job!", self:_GetCustomCallSign(_heliName), PilotsSaved)
|
||||||
|
|
||||||
self:_DisplayMessageToSAR(_heliUnit, _txt, self.messageTime)
|
self:_DisplayMessageToSAR(_heliUnit, _txt, self.messageTime)
|
||||||
|
|
||||||
|
self:_UpdateUnitCargoMass(_heliName)
|
||||||
|
|
||||||
-- trigger event
|
-- trigger event
|
||||||
self:__Rescued(-1,_heliUnit,_heliName, PilotsSaved)
|
self:__Rescued(-1,_heliUnit,_heliName, PilotsSaved)
|
||||||
return self
|
return self
|
||||||
@ -1610,7 +1660,7 @@ function CSAR:_DisplayMessageToSAR(_unit, _text, _time, _clear, _speak, _overrid
|
|||||||
local _clear = _clear or nil
|
local _clear = _clear or nil
|
||||||
local _time = _time or self.messageTime
|
local _time = _time or self.messageTime
|
||||||
if _override or not self.suppressmessages then
|
if _override or not self.suppressmessages then
|
||||||
local m = MESSAGE:New(_text,_time,"Info",_clear):ToGroup(group)
|
local m = MESSAGE:New(_text,_time,"CSAR",_clear):ToGroup(group)
|
||||||
end
|
end
|
||||||
-- integrate SRS
|
-- integrate SRS
|
||||||
if _speak and self.useSRS then
|
if _speak and self.useSRS then
|
||||||
@ -1759,7 +1809,7 @@ function CSAR:_SignalFlare(_unitName)
|
|||||||
else
|
else
|
||||||
_distance = string.format("%.1fkm",_closest.distance)
|
_distance = string.format("%.1fkm",_closest.distance)
|
||||||
end
|
end
|
||||||
local _msg = string.format("%s - Popping signal flare at your %s o\'clock. Distance %s", _unitName, _clockDir, _distance)
|
local _msg = string.format("%s - Popping signal flare at your %s o\'clock. Distance %s", self:_GetCustomCallSign(_unitName), _clockDir, _distance)
|
||||||
self:_DisplayMessageToSAR(_heli, _msg, self.messageTime, false, true, true)
|
self:_DisplayMessageToSAR(_heli, _msg, self.messageTime, false, true, true)
|
||||||
|
|
||||||
local _coord = _closest.pilot:GetCoordinate()
|
local _coord = _closest.pilot:GetCoordinate()
|
||||||
@ -1813,7 +1863,7 @@ function CSAR:_Reqsmoke( _unitName )
|
|||||||
else
|
else
|
||||||
_distance = string.format("%.1fkm",_closest.distance/1000)
|
_distance = string.format("%.1fkm",_closest.distance/1000)
|
||||||
end
|
end
|
||||||
local _msg = string.format("%s - Popping smoke at your %s o\'clock. Distance %s", _unitName, _clockDir, _distance)
|
local _msg = string.format("%s - Popping smoke at your %s o\'clock. Distance %s", self:_GetCustomCallSign(_unitName), _clockDir, _distance)
|
||||||
self:_DisplayMessageToSAR(_heli, _msg, self.messageTime, false, true, true)
|
self:_DisplayMessageToSAR(_heli, _msg, self.messageTime, false, true, true)
|
||||||
local _coord = _closest.pilot:GetCoordinate()
|
local _coord = _closest.pilot:GetCoordinate()
|
||||||
local color = self.smokecolor
|
local color = self.smokecolor
|
||||||
@ -2017,13 +2067,17 @@ function CSAR:_GetClockDirection(_heli, _group)
|
|||||||
local DirectionVec3 = _playerPosition:GetDirectionVec3( _targetpostions )
|
local DirectionVec3 = _playerPosition:GetDirectionVec3( _targetpostions )
|
||||||
local Angle = _playerPosition:GetAngleDegrees( DirectionVec3 )
|
local Angle = _playerPosition:GetAngleDegrees( DirectionVec3 )
|
||||||
self:T(self.lid .. " _GetClockDirection"..tostring(Angle).." "..tostring(_heading))
|
self:T(self.lid .. " _GetClockDirection"..tostring(Angle).." "..tostring(_heading))
|
||||||
local clock = 12
|
local hours = 0
|
||||||
if _heading then
|
local clock = 12
|
||||||
local Aspect = Angle - _heading
|
if _heading and Angle then
|
||||||
if Aspect == 0 then Aspect = 360 end
|
clock = 12
|
||||||
clock = math.abs(UTILS.Round((Aspect / 30),0))
|
--if angle == 0 then angle = 360 end
|
||||||
if clock == 0 then clock = 12 end
|
clock = _heading-Angle
|
||||||
end
|
hours = (clock/30)*-1
|
||||||
|
clock = 12+hours
|
||||||
|
clock = UTILS.Round(clock,0)
|
||||||
|
if clock > 12 then clock = clock-12 end
|
||||||
|
end
|
||||||
return clock
|
return clock
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,6 @@
|
|||||||
-- @module Ops.CTLD
|
-- @module Ops.CTLD
|
||||||
-- @image OPS_CTLD.jpg
|
-- @image OPS_CTLD.jpg
|
||||||
|
|
||||||
-- Date: Feb 2022
|
|
||||||
-- Last Update October 2022
|
-- Last Update October 2022
|
||||||
|
|
||||||
do
|
do
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user