Simple OOB listing using Lua in 1.11.sr7

All discussions & material related to Command's Lua interface

Moderators: michaelm75au, angster, RoryAndersonCDT, MOD_Command

Post Reply
User avatar
michaelm75au
Posts: 12457
Joined: Sat May 05, 2001 8:00 am
Location: Melbourne, Australia

Simple OOB listing using Lua in 1.11.sr7

Post by michaelm75au »

With the additional Lua in this build, you can create some OOB listings.Change the side's name to the one needed. The results are also in the new Lua history (Logs folder) if too long for the Lua output window.

-- get all units on a side
-- extract the base they are assigned to
-- report by base
local s = VP_GetSide({name='strategic air command'})
local function split(str, pat)
local t = {}
local fpat = "(.-)" .. pat
local last_end = 1
local s, e, cap = str:find(fpat, 1)
while s do
if s ~= 1 or cap ~= "" then
table.insert(t,cap)
end
last_end = e+1
s, e, cap = str:find(fpat, last_end)
end
if last_end <= #str then
cap = str:sub(last_end)
table.insert(t, cap)
end
return t
end
local function sortName(a,b)
return(ScenEdit_GetUnit({guid=a}).name<ScenEdit_GetUnit({guid=b}).name)
end
local function orderedPairs(t,f)
local array = {}
for n in pairs(t) do array[#array +1] = n end
table.sort(array,f)
local index = 0
return function ()
index = index + 1
return array[index],t[array[index]]
end
end
-- main logic
local base = {}
for k,v in pairs(s.units)
do
local unit = ScenEdit_GetUnit({guid=v.guid})
if unit.base ~= nil then
local b = unit.base
if b.group ~= nil then
-- has a parent group; use it rather than the group members
if base[b.group.guid] == nil and b.group.guid ~= v.guid then
base[b.group.guid] = v.guid
elseif b.group.guid ~= v.guid then
base[b.group.guid] = base[b.group.guid] .. ',' .. v.guid
end
elseif base[b.guid] == nil and b.guid ~= v.guid then
base[b.guid] = v.guid
elseif b.guid ~= v.guid then
base[b.guid] = base[b.guid] .. ',' .. v.guid
end
elseif unit.group ~= nil then
local b = unit.group
if base[b.guid] == nil and b.guid ~= v.guid then
base[b.guid] = v.guid
elseif b.guid ~= v.guid then
base[b.guid] = base[b.guid] .. ',' .. v.guid
end
else
-- units not based somewhere
if base['xindependent'] == nil then
base['xindependent'] = v.guid
else
base['xindependent'] = base['xindependent'] .. ',' .. v.guid
end
end
end
local k,v
for k,v in orderedPairs(base)
do
print('\n')
if k == 'xindependent' then
print('Un-based units');
else
print('Base: ' .. ScenEdit_GetUnit({guid=k}).name);
end
local k1,v1
local t = split(v,',')
if t ~= nil then
-- group like names together
table.sort(t, sortName)
for k1,v1 in pairs(t)
do
if v1 == k then next(t) end
local unit = ScenEdit_GetUnit({guid=v1})
if unit.condition ~= nil then
print(string.format(" %s (%s)",unit.name, unit.condition));
else
print(string.format(" %s ",unit.name));
end
end
end
end
Michael
User avatar
michaelm75au
Posts: 12457
Joined: Sat May 05, 2001 8:00 am
Location: Melbourne, Australia

Example

Post by michaelm75au »

Base: RAF Upper Heyford
40th Bombardment Wing #1 (Readying)
40th Bombardment Wing #10 (Readying)
40th Bombardment Wing #11 (Readying)
40th Bombardment Wing #12 (Readying)
40th Bombardment Wing #13 (Readying)
40th Bombardment Wing #14 (Readying)
40th Bombardment Wing #15 (Readying)
40th Bombardment Wing #16 (Readying)
40th Bombardment Wing #17 (Readying)
40th Bombardment Wing #18 (Readying)
40th Bombardment Wing #19 (Readying)
40th Bombardment Wing #2 (Readying)
40th Bombardment Wing #20 (Readying)
40th Bombardment Wing #21 (Airborne)
40th Bombardment Wing #22 (Airborne)
40th Bombardment Wing #23 (Readying)
40th Bombardment Wing #24 (Readying)
40th Bombardment Wing #25 (Readying)
40th Bombardment Wing #26 (Readying)
40th Bombardment Wing #27 (Readying)
40th Bombardment Wing #28 (Readying)
40th Bombardment Wing #29 (Readying)
40th Bombardment Wing #3 (Readying)
40th Bombardment Wing #30 (Readying)
40th Bombardment Wing #31 (Readying)
40th Bombardment Wing #32 (Readying)
40th Bombardment Wing #35 (Airborne)
40th Bombardment Wing #4 (Readying)
40th Bombardment Wing #7 (Readying)
40th Bombardment Wing #9 (Readying)


Base: RAF Fairford
310th Bombardment Wing #1 (Readying)
310th Bombardment Wing #10 (Readying)
310th Bombardment Wing #11 (Readying)
310th Bombardment Wing #12 (Readying)
310th Bombardment Wing #13 (Airborne)
310th Bombardment Wing #14 (Readying)
310th Bombardment Wing #15 (Refuelling)
310th Bombardment Wing #16 (Readying)
310th Bombardment Wing #17 (Readying)
310th Bombardment Wing #18 (Readying)
310th Bombardment Wing #2 (Readying)
310th Bombardment Wing #22 (Readying)
310th Bombardment Wing #23 (Readying)
310th Bombardment Wing #24 (Readying)
310th Bombardment Wing #25 (Airborne)
310th Bombardment Wing #26 (Airborne)
310th Bombardment Wing #27 (Airborne)
310th Bombardment Wing #28 (Airborne)
310th Bombardment Wing #29 (Readying)
310th Bombardment Wing #30 (Refuelling)
310th Bombardment Wing #31 (Readying)
310th Bombardment Wing #32 (Readying)
310th Bombardment Wing #33 (Parked)
310th Bombardment Wing #34 (Airborne)
310th Bombardment Wing #35 (Parked)
310th Bombardment Wing #4 (Refuelling)
310th Bombardment Wing #6 (Airborne)
310th Bombardment Wing #7 (Airborne)
310th Bombardment Wing #8 (Airborne)
310th Bombardment Wing #9 (Readying)


Base: RAF Kinloss
106th Air Refueling Group #1 (Parked)
106th Air Refueling Group #10 (Readying)
106th Air Refueling Group #11 (Parked)
106th Air Refueling Group #12 (Airborne)
106th Air Refueling Group #13 (Airborne)
106th Air Refueling Group #14 (Airborne)
106th Air Refueling Group #15 (Readying)
106th Air Refueling Group #16 (Airborne)
106th Air Refueling Group #17 (Parked)
106th Air Refueling Group #18 (Parked)
106th Air Refueling Group #19 (Parked)
106th Air Refueling Group #2 (Parked)
106th Air Refueling Group #20 (Airborne)
106th Air Refueling Group #21 (Airborne)
106th Air Refueling Group #22 (Airborne)
106th Air Refueling Group #23 (Airborne)
106th Air Refueling Group #24 (Airborne)
106th Air Refueling Group #25 (Parked)
106th Air Refueling Group #26 (Readying)
106th Air Refueling Group #27 (Airborne)
106th Air Refueling Group #28 (Readying)
106th Air Refueling Group #29 (Returning to base)
106th Air Refueling Group #3 (Parked)
106th Air Refueling Group #30 (Offloading fuel)
106th Air Refueling Group #31 (Parked)
106th Air Refueling Group #32 (Readying)
106th Air Refueling Group #33 (Readying)
106th Air Refueling Group #34 (Parked)
106th Air Refueling Group #35 (Airborne)
106th Air Refueling Group #36 (Airborne)
106th Air Refueling Group #37 (Readying)
106th Air Refueling Group #38 (Parked)
106th Air Refueling Group #39 (Parked)
106th Air Refueling Group #4 (Parked)
106th Air Refueling Group #5 (Parked)
106th Air Refueling Group #6 (Parked)
106th Air Refueling Group #7 (Parked)
106th Air Refueling Group #8 (Parked)
106th Air Refueling Group #9 (Parked)


Un-based units
RAF Fairford
RAF Kinloss
RAF Upper Heyford
Michael
Rory Noonan
Posts: 2418
Joined: Thu Dec 18, 2014 1:53 am
Location: Brooklyn, NY

RE: Example

Post by Rory Noonan »

You magnificent bastard.

Thank you! [&o]
Image
User avatar
michaelm75au
Posts: 12457
Joined: Sat May 05, 2001 8:00 am
Location: Melbourne, Australia

RE: Example

Post by michaelm75au »

You could also set this up as a Special Event to be run whenever needed - should just print to the log. But the script console window still needs to open in the background.
Michael
Post Reply

Return to “Lua Legion”