more fixes, improvements

develop
Warmist 2014-12-08 22:19:22 +02:00
parent f84a5dbce1
commit f47565465e
1 changed files with 34 additions and 14 deletions

@ -1,8 +1,13 @@
-- allows to do jobs in adv. mode. -- allows to do jobs in adv. mode.
--[==[ --[==[
version: 0.002 version: 0.003
changelog: changelog:
*0.003
- fixed farms (i think...)
- added faster time pasing (yay for random deaths from local wildlife)
- still hasn't fixed gather plants. but you can visit local market, buy a few local fruits/vegetables eat them and use seeds
- other stuff
*0.002 *0.002
- kind-of fixed the item problem... now they get teleported (if teleport_items=true which should be default for adventurer) - kind-of fixed the item problem... now they get teleported (if teleport_items=true which should be default for adventurer)
- gather plants still not working... Other jobs seem to work. - gather plants still not working... Other jobs seem to work.
@ -659,6 +664,15 @@ function putItemsInBuilding(building,job_item_refs)
v.is_fetching=0 v.is_fetching=0
end end
end end
function putItemsInHauling(unit,job_item_refs)
for k,v in ipairs(job_item_refs) do
--local pos=dfhack.items.getPosition(v)
if not dfhack.items.moveToInventory(v.item,unit,0,0) then
print("Could not put item:",k,v.item)
end
v.is_fetching=0
end
end
function AssignJobItems(args) function AssignJobItems(args)
if settings.df_assign then --use df default logic and hope that it would work if settings.df_assign then --use df default logic and hope that it would work
@ -688,7 +702,7 @@ function AssignJobItems(args)
job.items[#job.items-1]:delete() job.items[#job.items-1]:delete()
job.items:erase(#job.items-1) job.items:erase(#job.items-1)
end]] end]]
printall(its)
local item_counts={} local item_counts={}
for job_id, trg_job_item in ipairs(job.job_items) do for job_id, trg_job_item in ipairs(job.job_items) do
item_counts[job_id]=trg_job_item.quantity item_counts[job_id]=trg_job_item.quantity
@ -709,7 +723,7 @@ function AssignJobItems(args)
--cur_item.flags.in_job=true --cur_item.flags.in_job=true
job.items:insert("#",{new=true,item=cur_item,role=df.job_item_ref.T_role.Reagent,job_item_idx=job_id}) job.items:insert("#",{new=true,item=cur_item,role=df.job_item_ref.T_role.Reagent,job_item_idx=job_id})
item_counts[job_id]=item_counts[job_id]-cur_item:getTotalDimension() item_counts[job_id]=item_counts[job_id]-cur_item:getTotalDimension()
print(string.format("item added, job_item_id=%d, item %s, quantity left=%d",job_id,tostring(cur_item),item_counts[job_id])) --print(string.format("item added, job_item_id=%d, item %s, quantity left=%d",job_id,tostring(cur_item),item_counts[job_id]))
used_item_id[cur_item.id]=true used_item_id[cur_item.id]=true
end end
end end
@ -719,23 +733,30 @@ function AssignJobItems(args)
if not settings.build_by_items then if not settings.build_by_items then
for job_id, trg_job_item in ipairs(job.job_items) do for job_id, trg_job_item in ipairs(job.job_items) do
if item_counts[job_id]>0 then if item_counts[job_id]>0 then
print("Not enough items for this job")
return false, "Not enough items for this job" return false, "Not enough items for this job"
end end
end end
end end
if settings.teleport_items then local haul_fix=false
if job.job_type==df.job_type.PlantSeeds then
haul_fix=true
end
if settings.teleport_items and not haul_fix then
putItemsInBuilding(args.building,job.items) putItemsInBuilding(args.building,job.items)
end end
local uncollected = getItemsUncollected(job) local uncollected = getItemsUncollected(job)
if #uncollected == 0 then if #uncollected == 0 then
job.flags.working=true job.flags.working=true
if haul_fix then
putItemsInHauling(args.unit,job.items)
end
else else
job.flags.fetching=true job.flags.fetching=true
uncollected[1].is_fetching=1 uncollected[1].is_fetching=1
end end
--todo set working for workshops if items are present, else set fetching (and at least one item to is_fetching=1)
--job.flags.working=true
return true return true
--]=] --]=]
end end
@ -1177,8 +1198,7 @@ function usetool:farmPlot(building)
if not job then if not job then
print(msg) print(msg)
else else
--print(AssignJobItems(args)) --WHY U NO WORK? print(AssignJobItems(args)) --WHY U NO WORK?
end end
end end
MODES={ MODES={
@ -1311,7 +1331,7 @@ function usetool:fieldInput(keys)
self:sendInputToParent("LEAVESCREEN") self:sendInputToParent("LEAVESCREEN")
end end
if ok then if ok then
self:sendInputToParent("A_WAIT") self:sendInputToParent("A_SHORT_WAIT")
else else
dfhack.gui.showAnnouncement(msg,5,1) dfhack.gui.showAnnouncement(msg,5,1)
end end
@ -1347,8 +1367,8 @@ function usetool:onInput(keys)
--ContinueJob(adv) --ContinueJob(adv)
self:sendInputToParent("A_SHORT_WAIT") self:sendInputToParent("A_SHORT_WAIT")
elseif keys[keybinds.continue.key] then elseif keys[keybinds.continue.key] then
ContinueJob(adv) --ContinueJob(adv)
self:sendInputToParent("A_SHORT_WAIT") --self:sendInputToParent("A_SHORT_WAIT")
self.long_wait=true self.long_wait=true
else else
if self.mode~=nil then if self.mode~=nil then
@ -1373,10 +1393,10 @@ end
function usetool:onIdle() function usetool:onIdle()
local adv=df.global.world.units.active[0] local adv=df.global.world.units.active[0]
local job_ptr=adv.job.current_job local job_ptr=adv.job.current_job
local job=findAction(adv,df.unit_action_type.Job) local job_action=findAction(adv,df.unit_action_type.Job)
if job_ptr and self.long_wait and not job then if job_ptr and self.long_wait and not job_action then
if adv.job.current_job.completion_timer==0 or adv.job.current_job.completion_timer==-1 then if adv.job.current_job.completion_timer==-1 then
self.long_wait=false self.long_wait=false
end end
ContinueJob(adv) ContinueJob(adv)