Skip to content

Commit

Permalink
script for debugging items being assigned to multiple squads
Browse files Browse the repository at this point in the history
  • Loading branch information
chdoc committed Nov 22, 2023
1 parent 02ef6cd commit fbeea05
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 0 deletions.
69 changes: 69 additions & 0 deletions devel/equipment-conflicts.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
--[[
This script analyzes uniforms of squad members and reports items that are
claimed by more than one squad member.
--]]

local assignments = {}

-- TODO: gather the item assignments we would like to remove.
-- TOTHINK: just removing them from the uniform and pick-up tables is insufficient.
-- conflicting items just get added back.
-- local release = {}

local function addToNestedTable(outer_table, outer_key, value)
if outer_table[outer_key] then
table.insert(outer_table[outer_key],value)
else
outer_table[outer_key] = { value }
end
end

-- analyze uniforms of squad members
for _, unit in pairs(dfhack.units.getCitizens(true)) do
local squad_id = unit.military.squad_id
if 0 <= squad_id then
for _, item_id in ipairs(unit.military.uniforms[unit.military.cur_uniform]) do
addToNestedTable(assignments,item_id,unit.id)
end
end
end

-- check for and report conflicts
for item_id,unit_ids in pairs(assignments) do
if #unit_ids > 1 then
local item = df.item.find(item_id)
if item then
local holder = dfhack.items.getHolderUnit(item)
local found = false
print(dfhack.items.getDescription(item, 0, true),'(',item_id,') claimed by:')
for _,unit_id in pairs(unit_ids) do
local unit = df.unit.find(unit_id)
if unit then
dfhack.print(
' ', dfhack.TranslateName(unit.name),'in',
dfhack.military.getSquadName(unit.military.squad_id)
)
if holder and unit.id == holder.id then
found = true
print (' (equipped)')
else
print()
-- addToNestedTable(release,unit.id,item_id)
end
end
end
if not found then
if holder then
print(' carried by', dfhack.TranslateName(holder.name))
else
print(' no current holder')
end
end
print()
else
error('assigned item does not exist')
end
end
end
17 changes: 17 additions & 0 deletions docs/devel/equipment-conflicts.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
devel/equipment-conflicts
=========================

.. dfhack-tool::
:summary: Tool for debugging equipment conflicts
:tags: dev

This script analyzes uniforms of squad members and reports items that are
claimed by more than one squad member as well as the current holder of the item
(if any).

Usage
-----

::

devel/equipment-conflicts

0 comments on commit fbeea05

Please sign in to comment.