|
|
|
@ -1,4 +1,6 @@
|
|
|
|
|
-- allows to do jobs in adv. mode.
|
|
|
|
|
|
|
|
|
|
--keybinding, change to your hearts content. Only the key part.
|
|
|
|
|
keybinds={
|
|
|
|
|
nextJob={key="CUSTOM_SHIFT_T",desc="Next job in the list"},
|
|
|
|
|
prevJob={key="CUSTOM_SHIFT_R",desc="Previous job in the list"},
|
|
|
|
@ -10,7 +12,17 @@ up_alt2={key="CURSOR_UP_Z_AUX",desc="Use job up"},
|
|
|
|
|
use_same={key="A_MOVE_SAME_SQUARE",desc="Use job at the tile you are standing"},
|
|
|
|
|
workshop={key="CHANGETAB",desc="Show building menu"},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- building filters
|
|
|
|
|
build_filter={
|
|
|
|
|
forbid_all=true, --this forbits all except the "allow"
|
|
|
|
|
allow={"MetalSmithsForge"}, --ignored if forbit_all=false
|
|
|
|
|
forbid={"Custom"} --ignored if forbit_all==true
|
|
|
|
|
}
|
|
|
|
|
build_filter.HUMANish={
|
|
|
|
|
forbid_all=true,
|
|
|
|
|
allow={"Masons"},
|
|
|
|
|
forbid={}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local gui = require 'gui'
|
|
|
|
|
local wid=require 'gui.widgets'
|
|
|
|
@ -24,8 +36,35 @@ local tile_attrs = df.tiletype.attrs
|
|
|
|
|
|
|
|
|
|
settings={build_by_items=false,check_inv=false,df_assign=true}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function hasValue(tbl,val)
|
|
|
|
|
for k,v in pairs(tbl) do
|
|
|
|
|
if v==val then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
function reverseRaceLookup(id)
|
|
|
|
|
return df.global.world.raws.creatures.all[id].creature_id
|
|
|
|
|
end
|
|
|
|
|
function deon_filter(name,type_id,subtype_id,custom_id, parent)
|
|
|
|
|
print(name)
|
|
|
|
|
local adv=df.global.world.units.active[0]
|
|
|
|
|
local race_filter=build_filter[reverseRaceLookup(adv.race)]
|
|
|
|
|
if race_filter then
|
|
|
|
|
if race_filter.forbid_all then
|
|
|
|
|
return hasValue(race_filter.allow,name)
|
|
|
|
|
else
|
|
|
|
|
return not hasValue(race_filter.forbid,name)
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
if build_filter.forbid_all then
|
|
|
|
|
return hasValue(build_filter.allow,name)
|
|
|
|
|
else
|
|
|
|
|
return not hasValue(build_filter.forbid,name)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
local mode_name
|
|
|
|
|
for k,v in ipairs({...}) do --setting parsing
|
|
|
|
|
if v=="-c" or v=="--cheat" then
|
|
|
|
@ -176,6 +215,14 @@ function SetCreatureRef(args)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function SetWebRef(args)
|
|
|
|
|
local pos=args.pos
|
|
|
|
|
for k,v in pairs(df.global.world.items.other.ANY_WEBS) do
|
|
|
|
|
if v.pos.x==pos.x and v.pos.y==pos.y and v.pos.z==pos.z then
|
|
|
|
|
job.general_refs:insert("#",{new=df.general_ref_item,item_id=v.id})
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
function SetPatientRef(args)
|
|
|
|
|
local job=args.job
|
|
|
|
|
local pos=args.pos
|
|
|
|
@ -785,7 +832,7 @@ function AssignJobToBuild(args)
|
|
|
|
|
if bld~=nil then
|
|
|
|
|
CheckAndFinishBuilding(args,bld)
|
|
|
|
|
else
|
|
|
|
|
bdialog.BuildingDialog{on_select=dfhack.curry(BuildingChosen,args),hide_none=true}:show()
|
|
|
|
|
bdialog.BuildingDialog{on_select=dfhack.curry(BuildingChosen,args),hide_none=true,building_filter=deon_filter}:show()
|
|
|
|
|
end
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
@ -854,6 +901,7 @@ actions={
|
|
|
|
|
{"Build" ,AssignJobToBuild,{NoConstructedBuilding}},
|
|
|
|
|
{"BuildLast" ,BuildLast,{NoConstructedBuilding}},
|
|
|
|
|
{"Clean" ,df.job_type.Clean,{}},
|
|
|
|
|
{"GatherWebs" ,df.job_type.CollectWebs,{--[[HasWeb]]},{SetWebRef}},
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|