Lua Script to "Modernize" S-400
Posted: Fri Jul 08, 2022 8:47 pm
Unfortunately, information sharing between S-400 units and spread out radar and ESM units is not available in the game. So while we wait for something like a Baikal-E command post mount I thought I write a little script to modify existing units to better represent the equipment and capabilities of the system today. I also added the two newer and smaller missiles (9M96 and 9M96D) since the large missiles with very long range are to be rarely used in reality (as far as I know).
Execute the following lua to modify all S-400 units of your site (actually, only the SA-21a/b ones... and only the Russian version
).
The fast reloading for some of the 9M96D missiles is intentional to account for quad loading of containers IRL. The numbers don't add up otherwise. For 9M96 the database only allows fast reloads at the moment.
For additional realism don't forget to place some Pantsirs right next to the battery and at least another S-400 battery within a 20nm radius.
CAUTION: The amount of large missiles with very long range is greatly reduced. They are very expensive. Set WRA for those missiles carefully to only use them effectively against high value targets.
Have fun defending / attacking!
Execute the following lua to modify all S-400 units of your site (actually, only the SA-21a/b ones... and only the Russian version

Code: Select all
function sensormissing(dbidnr)
local sens = 1
for m,n in pairs(unit.sensors) do
if n.sensor_dbid == dbidnr then sens = nil end
end
return sens
end
function countmag(dbidnr)
local mcount = 0
for u,v in pairs(unit.magazines) do
if v.mag_dbid == dbidnr then mcount = mcount + 1 end
end
return mcount
end
for i,l in pairs(VP_GetSides()) do
if ScenEdit_GetSideIsHuman(l.guid) then side = l.name end
end
local side = VP_GetSide({Side = side})
local u = side:unitsBy('Facility', 6000, 5001)
for i,l in pairs(u) do
unit = ScenEdit_GetUnit({guid=l.guid})
if unit.dbid == 1937 then
for c,d in pairs(unit.mounts) do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='remove_mount',dbid=d.mount_dbid})
end
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=1857, arc_mount={'360'}})
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=2362, arc_mount={'360'}})
for i=1,3,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=485, arc_mount={'360'}})
end
for i=1,1,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=2284, arc_mount={'360'}})
end
for i=1,2,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=1856, arc_mount={'360'}})
end
for i=1,5,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=2412, arc_mount={'360'}})
end
for i=1,1,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=2726, arc_mount={'360'}})
end
for i=1,1,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=2649, arc_mount={'360'}})
end
if sensormissing(3819) then ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_sensor', dbid=3819, arc_detect = {'360'}, arc_track ={'360'}}) end
if sensormissing(5975) then ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_sensor', dbid=5975, arc_detect = {'360'}, arc_track ={'360'}}) end
if sensormissing(5568) then ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_sensor', dbid=5568, arc_detect = {'360'}, arc_track ={'360'}}) end
if sensormissing(3822) then ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_sensor', dbid=3822, arc_detect = {'360'}, arc_track ={'360'}}) end
mnts_n = {}
mnts_guid = {}
mntsi = 1
for u,v in pairs(unit.mounts) do
if v.mount_dbid == 2412 then
mnts_guid[mntsi]=v.mount_guid
mnts_n[mntsi]= u
mntsi=mntsi+1
end
end
for i=1,3,1 do
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'remove_weapon', mountid=mnts_guid[i], weaponid=unit.mounts[mnts_n[i]].mount_weapons[1].wpn_guid})
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_weapon', mountid=mnts_guid[i], dbid=6641})
end
for a,b in pairs(unit.magazines) do
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'remove_magazine', dbid=b.mag_dbid})
end
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_magazine', dbid=1371})
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_magazine', dbid=1363})
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_magazine', dbid=1389})
ScenEdit_AddWeaponToUnitMagazine({guid = unit.guid, mag_guid = unit.magazines[1].mag_guid, wpn_dbid = 3220, number = 8, maxcap = 12})
ScenEdit_AddWeaponToUnitMagazine({guid = unit.guid, mag_guid = unit.magazines[1].mag_guid, wpn_dbid = 2695, number = 60, maxcap = 60})
ScenEdit_AddWeaponToUnitMagazine({guid = unit.guid, mag_guid = unit.magazines[2].mag_guid, wpn_dbid = 2103, number = 8})
ScenEdit_AddWeaponToUnitMagazine({guid = unit.guid, mag_guid = unit.magazines[2].mag_guid, wpn_dbid = 2104, number = 28, remove = true})
ScenEdit_AddWeaponToUnitMagazine({guid = unit.guid, mag_guid = unit.magazines[3].mag_guid, wpn_dbid = 3220, number = 16, remove = true})
end
if unit.dbid == 2029 then
for c,d in pairs(unit.mounts) do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='remove_mount',dbid=d.mount_dbid})
end
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=1857, arc_mount={'360'}})
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=2362, arc_mount={'360'}})
for i=1,3,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=485, arc_mount={'360'}})
end
for i=1,1,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=2284, arc_mount={'360'}})
end
for i=1,3,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=1856, arc_mount={'360'}})
end
for i=1,8,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=2412, arc_mount={'360'}})
end
for i=1,1,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=2726, arc_mount={'360'}})
end
for i=1,1,1 do
ScenEdit_UpdateUnit({guid=unit.guid ,mode='add_mount',dbid=2649, arc_mount={'360'}})
end
if sensormissing(3819) then ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_sensor', dbid=3819, arc_detect = {'360'}, arc_track ={'360'}}) end
if sensormissing(5975) then ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_sensor', dbid=5975, arc_detect = {'360'}, arc_track ={'360'}}) end
if sensormissing(5568) then ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_sensor', dbid=5568, arc_detect = {'360'}, arc_track ={'360'}}) end
if sensormissing(3822) then ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_sensor', dbid=3822, arc_detect = {'360'}, arc_track ={'360'}}) end
mnts_n = {}
mnts_guid = {}
mntsi = 1
for u,v in pairs(unit.mounts) do
if v.mount_dbid == 2412 then
mnts_guid[mntsi]=v.mount_guid
mnts_n[mntsi]= u
mntsi=mntsi+1
end
end
for i=1,4,1 do
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'remove_weapon', mountid=mnts_guid[i], weaponid=unit.mounts[mnts_n[i]].mount_weapons[1].wpn_guid})
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_weapon', mountid=mnts_guid[i], dbid=6641})
end
for a,b in pairs(unit.magazines) do
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'remove_magazine', dbid=b.mag_dbid})
end
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_magazine', dbid=1371})
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_magazine', dbid=1363})
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_magazine', dbid=1389})
ScenEdit_UpdateUnit({guid = unit.guid, mode = 'add_magazine', dbid=1389})
ScenEdit_AddWeaponToUnitMagazine({guid = unit.guid, mag_guid = unit.magazines[1].mag_guid, wpn_dbid = 3220, number = 12, maxcap = 12})
ScenEdit_AddWeaponToUnitMagazine({guid = unit.guid, mag_guid = unit.magazines[1].mag_guid, wpn_dbid = 2695, number = 72, maxcap = 72})
ScenEdit_AddWeaponToUnitMagazine({guid = unit.guid, mag_guid = unit.magazines[2].mag_guid, wpn_dbid = 2103, number = 12})
ScenEdit_AddWeaponToUnitMagazine({guid = unit.guid, mag_guid = unit.magazines[2].mag_guid, wpn_dbid = 2104, number = 28, remove = true})
ScenEdit_AddWeaponToUnitMagazine({guid = unit.guid, mag_guid = unit.magazines[4].mag_guid, wpn_dbid = 3220, number = 36, remove = true})
end
end
For additional realism don't forget to place some Pantsirs right next to the battery and at least another S-400 battery within a 20nm radius.
CAUTION: The amount of large missiles with very long range is greatly reduced. They are very expensive. Set WRA for those missiles carefully to only use them effectively against high value targets.
Have fun defending / attacking!
