Page 1 of 1

Simple OOB listing using Lua in 1.11.sr7

Posted: Fri Feb 10, 2017 10:00 pm
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

Example

Posted: Fri Feb 10, 2017 10:01 pm
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

RE: Example

Posted: Fri Feb 10, 2017 10:03 pm
by Rory Noonan
You magnificent bastard.

Thank you! [&o]

RE: Example

Posted: Fri Feb 10, 2017 10:09 pm
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.