59 lines
1.6 KiB
Lua
59 lines
1.6 KiB
Lua
-- Clone a uniform template in the military screen
|
|
--[[=begin
|
|
|
|
gui/clone-uniform
|
|
=================
|
|
Bind to a key (the example config uses :kbd:`Ctrl`:kbd:`C`), and activate in the Uniforms
|
|
page of the military screen with the cursor in the leftmost list.
|
|
|
|
When invoked, the script duplicates the currently selected uniform template,
|
|
and selects the newly created copy.
|
|
|
|
=end]]
|
|
local utils = require 'utils'
|
|
local gui = require 'gui'
|
|
|
|
local entity = df.global.ui.main.fortress_entity
|
|
|
|
local args = {...}
|
|
local vs = dfhack.gui.getCurViewscreen()
|
|
local vstype = df.viewscreen_layer_militaryst
|
|
if not vstype:is_instance(vs) then
|
|
qerror('Call this from the military screen')
|
|
end
|
|
|
|
local slist = vs.layer_objects[0]
|
|
|
|
if vs.page == vstype.T_page.Uniforms
|
|
and slist.active and slist.num_entries > 0
|
|
and not vs.equip.in_name_uniform
|
|
then
|
|
local idx = slist.num_entries
|
|
|
|
if #vs.equip.uniforms ~= idx or #entity.uniforms ~= idx then
|
|
error('Uniform vector length mismatch')
|
|
end
|
|
|
|
local uniform = vs.equip.uniforms[slist:getListCursor()]
|
|
|
|
local ucopy = uniform:new()
|
|
ucopy.id = entity.next_uniform_id
|
|
ucopy.name = ucopy.name..'(Copy)'
|
|
|
|
for k,v in ipairs(ucopy.uniform_item_info) do
|
|
for k2,v2 in ipairs(v) do
|
|
v[k2] = v2:new()
|
|
end
|
|
end
|
|
|
|
entity.next_uniform_id = entity.next_uniform_id + 1
|
|
entity.uniforms:insert('#',ucopy)
|
|
vs.equip.uniforms:insert('#',ucopy)
|
|
|
|
slist.num_entries = idx+1
|
|
slist.cursor = idx-1
|
|
gui.simulateInput(vs, 'STANDARDSCROLL_DOWN')
|
|
else
|
|
qerror('Call this with a uniform selected on the Uniforms page of military screen')
|
|
end
|