Torpedo snapshot event code

All discussions & material related to Command's Lua interface

Moderators: angster, RoryAndersonCDT, michaelm75au, MOD_Command

Post Reply
User avatar
lumiere
Posts: 267
Joined: Tue Mar 19, 2019 10:38 am

Torpedo snapshot event code

Post by lumiere »

Subsims like Dangerous Waters or Cold Waters have challenging sub AI which counter-shots torpedo at player.
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")
Event works fine except:
-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
Attachments
snapshot (UMT1).zip
(62.05 KiB) Downloaded 4 times
Last edited by lumiere on Fri Apr 28, 2023 6:27 pm, edited 1 time in total.
"How Do You Stay Calm With A 7,000 Ton Nuclear Predator Listening For Your Heartbeat?"
Parel803
Posts: 932
Joined: Thu Oct 10, 2019 3:39 pm
Location: Netherlands

Re: Torpedo snapshot event code

Post by Parel803 »

Good afternoon,
Thx for sharing. Looks interesting.
best regards GJ
Post Reply

Return to “Lua Legion”