Add 3 more lua scripts.

develop
Alexander Gavrilov 2012-06-13 10:54:28 +04:00
parent c97e3bca0c
commit 6ca5a03008
3 changed files with 94 additions and 0 deletions

@ -0,0 +1,16 @@
-- Deletes ALL items not held by units, buildings or jobs.
--
-- Intended solely for lag investigation.
local count = 0
for _,v in ipairs(df.global.world.items.all) do
if not (v.flags.in_building or v.flags.construction or v.flags.in_job
or dfhack.items.getGeneralRef(v,df.general_ref_type.UNIT_HOLDER)) then
count = count + 1
v.flags.forbid = true
v.flags.garbage_collect = true
end
end
print('Deletion requested: '..count)

@ -0,0 +1,29 @@
-- Remove uninteresting dead units from the unit list.
local units = df.global.world.units.active
local dwarf_race = df.global.ui.race_id
local dwarf_civ = df.global.ui.civ_id
local count = 0
for i=#units-1,0,-1 do
local unit = units[i]
local flags1 = unit.flags1
local flags2 = unit.flags2
if flags1.dead and unit.race ~= dwarf_race then
local remove = false
if flags2.slaughter then
remove = true
elseif not unit.name.has_name then
remove = true
elseif unit.civ_id ~= dwarf_civ and
not (flags1.merchant or flags1.diplomat) then
remove = true
end
if remove then
count = count + 1
units:erase(i)
end
end
end
print('Units removed from active: '..count)

@ -0,0 +1,49 @@
-- Reset item temperature to the value of their tile.
local count = 0
local types = {}
local function update_temp(item,btemp)
if item.temperature ~= btemp then
count = count + 1
local tid = item:getType()
types[tid] = (types[tid] or 0) + 1
end
item.temperature = btemp
item.temperature_fraction = 0
if item.contaminants then
for _,c in ipairs(item.contaminants) do
c.temperature = btemp
c.temperature_fraction = 0
end
end
for _,sub in ipairs(dfhack.items.getContainedItems(item)) do
update_temp(sub,btemp)
end
item:checkTemperatureDamage()
end
local last_frame = df.global.world.frame_counter-1
for _,item in ipairs(df.global.world.items.all) do
if item.flags.on_ground and df.item_actual:is_instance(item) and
item.temp_updated_frame == last_frame then
local pos = item.pos
local block = dfhack.maps.getTileBlock(pos)
if block then
update_temp(item, block.temperature_1[pos.x%16][pos.y%16])
end
end
end
print('Items updated: '..count)
local tlist = {}
for k,_ in pairs(types) do tlist[#tlist+1] = k end
table.sort(tlist, function(a,b) return types[a] > types[b] end)
for _,k in ipairs(tlist) do
print(' '..df.item_type[k]..':', types[k])
end