So I created an event so that computer surface/sub could launch torpedo/ASW missile at possub contact after detecting incoming enemy torpedo.
Unitdetected trigger against torpedo, and following code as action:
Code: Select all
local unity = ScenEdit_UnitY().unit
ScenEdit_EventX().isActive = false
--snapshot
ScenEdit_SetDoctrine({side=unity.side, mission=unity.mission.guid}, {weapon_control_status_subsurface=0})
ScenEdit_SetDoctrine({side=unity.side, mission=unity.mission.guid}, {engaging_ambiguous_targets=0})
ScenEdit_SetDoctrine({side=unity.side, mission=unity.mission.guid}, {kinematic_range_for_torpedoes=0})
local mission = ScenEdit_GetMission(unity.side, unity.mission.guid)
local sonar = 'Sonar=Active'
ScenEdit_SetEMCON('mission', unity.mission.guid, sonar)
for k, v in ipairs (mission.unitlist) do
ScenEdit_SetEMCON('unit', v, "Inherit")
end
--beaming
local contact = ScenEdit_UnitC().guid
local manualThrottle = 4
local manualAltitude = -1000
local distance = 3.5
local zig = 1
local d2 = math.random(0,1)
if d2 == 0 then
zig = -1
end
local course1 = World_GetPointFromBearing({lat=unity.latitude, lon=unity.longitude,
distance=distance, bearing= Tool_Bearing(unity.guid, contact)+70*zig})
ScenEdit_SetDoctrine({side=unity.side, mission=unity.mission.guid}, {ignore_plotted_course=false})
ScenEdit_SetDoctrine({side=unity.side, mission=unity.mission.guid}, {automatic_evasion=false})
ScenEdit_SetUnit({guid=unity.guid, course= {[1]=course1} })
ScenEdit_SetUnit({guid=unity.guid, manualThrottle=manualThrottle, manualAltitude=manualAltitude})
---set "Disable snapshot" event
local unity = ScenEdit_UnitY().unit
local side = unity.side
local mission = unity.mission.guid
local eventname = "Disable snapshot #" .. mission
local howlong = 0*3600+30*60+0
if ScenEdit_CurrentTime() <0 then
time= ScenEdit_CurrentTime()+4070908800+howlong
time= os.date("!*t", time)
time.year = time.year-129
time = time.year.. "-" ..time.month.. "-" ..time.day.. " " ..time.hour.. ":" ..time.min.. ":" ..time.sec
else
time = os.date("!%Y-%m-%d %X", ScenEdit_CurrentTime()+howlong)
end
ScenEdit_SetTrigger({mode="add", name=eventname, type="Time", Time=time})
local ScriptText =
'local side = "' .. side .. '" \r\n' ..
'local mission = "' .. mission .. '" \r\n' ..
' \r\n' ..
'ScenEdit_SetDoctrine({side=side, mission=mission}, {weapon_control_status_subsurface=1}) \r\n' ..
'ScenEdit_SetDoctrine({side=side, mission=mission}, {engaging_ambiguous_targets=2}) \r\n' ..
'ScenEdit_SetDoctrine({side=side, mission=mission}, {kinematic_range_for_torpedoes=2}) \r\n' ..
' \r\n' ..
'local mission = ScenEdit_GetMission(side, mission) \r\n' ..
'local sonar = "Sonar=Passive" \r\n' ..
'ScenEdit_SetEMCON("mission", mission.guid, sonar) \r\n' ..
'for k, v in ipairs (mission.unitlist) do \r\n' ..
' ScenEdit_SetEMCON("unit", v, "Inherit") \r\n' ..
'end \r\n' ..
' \r\n' ..
'ScenEdit_SetEvent("' .. eventname .. '", {mode ="remove"}) \r\n' ..
'ScenEdit_SetTrigger({mode="remove", name="' .. eventname .. '"}) \r\n' ..
'ScenEdit_SetAction({mode="remove", name="' .. eventname .. '"})'
ScenEdit_SetAction({mode="add", name=eventname, type="LuaScript", ScriptText=ScriptText})
ScenEdit_SetEvent(eventname, {mode="add", IsShown=false})
ScenEdit_SetEventTrigger (eventname, {mode="add", name=eventname})
ScenEdit_SetEventAction (eventname, {mode="add", name=eventname})
--ScenEdit_RunScript ("lumilua/snapshot.lua")
-Only one possub contact is created for the same unit, so unless possub contact is gone second or third attack after a long time could not make snapshot.
-When torpedo range and ASW missile range is overlapped against possub contact, only torpedo is fired (although ASW missile is more effective against slow submarine)
Example scenario (from Uncle Mark's Tutorial) attached.
20230429: Tweaked code so that it work before 1970 scen time+added "beaming" evasion