Added getRejoinTaskTable, wingmen now rejoin after attack

This commit is contained in:
Ambroise Garel
2025-07-26 08:29:54 +02:00
parent 10440b3f01
commit 4f8f7337a1

View File

@@ -23,9 +23,22 @@ do
} }
end end
local function getRejoinTaskTable(formationDistance)
formationDistance = formationDistance or 800
return {
id = "Follow",
params = {
groupId = DCSEx.dcs.getObjectIDAsNumber(world.getPlayer():getGroup()),
lastWptIndexFlag = false,
lastWptIndex = -1,
pos = { x = -formationDistance, y = 0, z = -formationDistance }
}
}
end
function TUM.wingmenTasking.commandEngage(groupCategory, targetAttributes, delayRadioAnswer) function TUM.wingmenTasking.commandEngage(groupCategory, targetAttributes, delayRadioAnswer)
delayRadioAnswer = delayRadioAnswer or false delayRadioAnswer = delayRadioAnswer or false
if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return end -- No wingmen in multiplayer if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return end -- No wingmen in multiplayer
local wingmenCtrl = TUM.wingmen.getController() local wingmenCtrl = TUM.wingmen.getController()
@@ -71,6 +84,7 @@ do
} }
} }
wingmenCtrl:setTask(taskTable) wingmenCtrl:setTask(taskTable)
wingmenCtrl:setTask(getRejoinTaskTable()) -- Makes sure wingmen rejoin with the player after attack
local targetInfo = nil local targetInfo = nil
local messageSuffix = nil local messageSuffix = nil
@@ -91,14 +105,12 @@ do
targetPointMapMarker = DCSEx.world.getNextMarkerID() targetPointMapMarker = DCSEx.world.getNextMarkerID()
trigger.action.markToAll(targetPointMapMarker, "Last wingmen attack point", target:getPoint(), true) trigger.action.markToAll(targetPointMapMarker, "Last wingmen attack point", target:getPoint(), true)
TUM.radio.playForAll("pilotWingmanEngage"..messageSuffix, { TUM.wingmen.getFirstWingmanNumber(), targetInfo }, TUM.wingmen.getFirstWingmanCallsign(), true) TUM.radio.playForAll("pilotWingmanEngage"..messageSuffix, { TUM.wingmen.getFirstWingmanNumber(), targetInfo }, TUM.wingmen.getFirstWingmanCallsign(), true)
end end
function TUM.wingmenTasking.commandGoToMapMarker(markerText, delayRadioAnswer) function TUM.wingmenTasking.commandGoToMapMarker(markerText, delayRadioAnswer)
markerText = markerText or TUM.wingmenTasking.DEFAULT_MARKER_TEXT markerText = markerText or TUM.wingmenTasking.DEFAULT_MARKER_TEXT
delayRadioAnswer = delayRadioAnswer or false delayRadioAnswer = delayRadioAnswer or false
if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return end -- No wingmen in multiplayer if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return end -- No wingmen in multiplayer
local mapMarker = DCSEx.world.getMarkerByText(markerText) local mapMarker = DCSEx.world.getMarkerByText(markerText)
@@ -121,6 +133,7 @@ do
function TUM.wingmenTasking.commandOrbit(delayRadioAnswer) function TUM.wingmenTasking.commandOrbit(delayRadioAnswer)
delayRadioAnswer = delayRadioAnswer or false delayRadioAnswer = delayRadioAnswer or false
if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return end -- No wingmen in multiplayer
if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return end -- No wingmen in multiplayer if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return end -- No wingmen in multiplayer
@@ -132,32 +145,23 @@ do
end end
function TUM.wingmenTasking.commandRejoin(formationDistance, delayRadioAnswer) function TUM.wingmenTasking.commandRejoin(formationDistance, delayRadioAnswer)
formationDistance = formationDistance or 800
delayRadioAnswer = delayRadioAnswer or false delayRadioAnswer = delayRadioAnswer or false
if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return end -- No wingmen in multiplayer if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return end -- No wingmen in multiplayer
local player = world:getPlayer() local player = world:getPlayer()
if not player then return end if not player then return end
local wingmenCtrl = TUM.wingmen.getController() local wingmenCtrl = TUM.wingmen.getController()
if not wingmenCtrl then return end if not wingmenCtrl then return end
local taskTable = { wingmenCtrl:setTask(getRejoinTaskTable(formationDistance))
id = "Follow",
params = {
groupId = DCSEx.dcs.getObjectIDAsNumber(player:getGroup()),
lastWptIndexFlag = false,
lastWptIndex = -1,
pos = { x = -formationDistance, y = 0, z = -formationDistance }
}
}
wingmenCtrl:setTask(taskTable)
TUM.radio.playForAll("pilotWingmanRejoin", { TUM.wingmen.getFirstWingmanNumber() }, TUM.wingmen.getFirstWingmanCallsign(), delayRadioAnswer) TUM.radio.playForAll("pilotWingmanRejoin", { TUM.wingmen.getFirstWingmanNumber() }, TUM.wingmen.getFirstWingmanCallsign(), delayRadioAnswer)
end end
function TUM.wingmenTasking.commandReportContacts(groupCategory, noReportIfNoContacts, delayRadioAnswer) function TUM.wingmenTasking.commandReportContacts(groupCategory, noReportIfNoContacts, delayRadioAnswer)
noReportIfNoContacts = noReportIfNoContacts or false noReportIfNoContacts = noReportIfNoContacts or false
delayRadioAnswer = delayRadioAnswer or false delayRadioAnswer = delayRadioAnswer or false
if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return end -- No wingmen in multiplayer
local reportString = TUM.wingmen.getContactsAsReportString(groupCategory, true) local reportString = TUM.wingmen.getContactsAsReportString(groupCategory, true)
@@ -173,6 +177,7 @@ do
function TUM.wingmenTasking.commandReportStatus(delayRadioAnswer) function TUM.wingmenTasking.commandReportStatus(delayRadioAnswer)
delayRadioAnswer = delayRadioAnswer or false delayRadioAnswer = delayRadioAnswer or false
if TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then return end -- No wingmen in multiplayer
local wingmenGroup = TUM.wingmen.getGroup() local wingmenGroup = TUM.wingmen.getGroup()
if not wingmenGroup then return end if not wingmenGroup then return end