-
Notifications
You must be signed in to change notification settings - Fork 227
Expand file tree
/
Copy pathzForceWorkshopJobsNow.lua
More file actions
157 lines (147 loc) · 6.54 KB
/
zForceWorkshopJobsNow.lua
File metadata and controls
157 lines (147 loc) · 6.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
--@ module=true
local overlay = require('plugins.overlay')
local widgets = require('gui.widgets')
local gui = require('gui')
local ForceJobs = {}
function ForceJobs.prioritize_all_jobs()
local count, changed = 0, 0
for _, bld in ipairs(df.global.world.buildings.other.IN_PLAY) do
local t = bld:getType()
if t == df.building_type.Workshop or t == df.building_type.Furnace then
count = count + 1
for _, job in ipairs(bld.jobs or {}) do
if job and not job.flags.do_now then
job.flags.do_now = true
changed = changed + 1
end
end
end
end
dfhack.println(('ForceJobsNow: Buildings scanned: %d | Jobs changed: %d'):format(count, changed))
end
function ForceJobs.disable_all_jobs()
local count, changed = 0, 0
for _, bld in ipairs(df.global.world.buildings.other.IN_PLAY) do
local t = bld:getType()
if t == df.building_type.Workshop or t == df.building_type.Furnace then
count = count + 1
for _, job in ipairs(bld.jobs or {}) do
if job and job.flags.do_now then
job.flags.do_now = false
changed = changed + 1
end
end
end
end
dfhack.println(('ForceJobsNow: Buildings scanned: %d | Jobs disabled: %d'):format(count, changed))
end
local ForceJobsOverlay = defclass(ForceJobsOverlay, overlay.OverlayWidget)
ForceJobsOverlay.ATTRS {
desc = 'Force-start jobs in workshops/furnaces.',
viewscreens = {
'dwarfmode/ViewSheets/BUILDING/Workshop/Masons/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Masons/Items',
'dwarfmode/ViewSheets/BUILDING/Furnace/Smelter/Tasks',
'dwarfmode/ViewSheets/BUILDING/Furnace/Smelter/Items',
'dwarfmode/ViewSheets/BUILDING/Furnace/WoodFurnace/Tasks',
'dwarfmode/ViewSheets/BUILDING/Furnace/WoodFurnace/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Bowyers/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Bowyers/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Craftsdwarfs/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Craftsdwarfs/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Mechanics/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Mechanics/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Jewelers/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Jewelers/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Ashery/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Ashery/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Custom/SOAP_MAKER/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Custom/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Siege/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Siege/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Loom/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Loom/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Clothiers/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Clothiers/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Dyers/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Dyers/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Leatherworks/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Leatherworks/Items',
'dwarfmode/ViewSheets/BUILDING/Furnace/Kiln/Tasks',
'dwarfmode/ViewSheets/BUILDING/Furnace/Kiln/Items',
'dwarfmode/ViewSheets/BUILDING/Furnace/GlassFurnace/Tasks',
'dwarfmode/ViewSheets/BUILDING/Furnace/GlassFurnace/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Carpenters/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Carpenters/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/MetalsmithsForge/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/MetalsmithsForge/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Still/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Still/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Farmers/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Farmers/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Butchers/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Butchers/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Kitchen/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Kitchen/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Fishery/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Fishery/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Tanners/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Tanners/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Custom/SCREW_PRESS/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Custom/Items',
'dwarfmode/ViewSheets/BUILDING/Workshop/Quern/Tasks',
'dwarfmode/ViewSheets/BUILDING/Workshop/Quern/Items',
},
default_enabled = true,
default_pos = {x = -39, y = 9},
frame = {w = 22, h = 3, transparent = true},
}
function ForceJobsOverlay:init()
self.toggle_state = true -- default to ON
self:addviews{
widgets.Panel{
frame = {b = 0, r = 0, w = 40, h = 5},
frame_background = gui.CLEAR_PEN,
subviews = {
widgets.Label{
frame = {l = 0, t = 0},
text = 'Prioritize All:',
},
widgets.HotkeyLabel{
frame = {l = 0, t = 2},
label = 'ON',
key = 'CUSTOM_CTRL_O',
auto_width = true,
on_activate = function()
self.toggle_state = true
ForceJobs.prioritize_all_jobs()
end,
},
widgets.HotkeyLabel{
frame = {l = 11, t = 2},
label = 'OFF',
key = 'CUSTOM_CTRL_I',
auto_width = true,
on_activate = function()
self.toggle_state = false
ForceJobs.disable_all_jobs()
end,
},
},
},
}
end
OVERLAY_WIDGETS = {
force_jobs_overlay = ForceJobsOverlay,
}
-- Run manually from DFHack console
if not dfhack_flags.module then
local cmd = ...
if cmd == nil or cmd:upper() == 'ON' then
ForceJobs.prioritize_all_jobs()
elseif cmd:upper() == 'OFF' then
ForceJobs.disable_all_jobs()
else
qerror("Usage: zForceWorkshopJobsNow [ON|OFF]")
end
end