Merge remote-tracking branch 'PeridexisErrant/warn-starving' into develop
commit
de984b1a60
@ -0,0 +1,62 @@
|
||||
-- Pauses the game with a warning if a creature is starving, dehydrated, or very drowsy.
|
||||
-- By Meneth32, and PeridexisErrant
|
||||
|
||||
starvingUnits = starvingUnits or {}
|
||||
dehydratedUnits = dehydratedUnits or {}
|
||||
sleepyUnits = sleepyUnits or {}
|
||||
|
||||
local units = df.global.world.units.active
|
||||
|
||||
local function findRaceCaste(unit)
|
||||
local rraw = df.creature_raw.find(unit.race)
|
||||
return rraw, safe_index(rraw, 'caste', unit.caste)
|
||||
end
|
||||
|
||||
local function getSexString(sex)
|
||||
local sexStr = ""
|
||||
if sex==0 then sexStr=string.char(12)
|
||||
elseif sex==1 then sexStr=string.char(11)
|
||||
end
|
||||
return string.char(40)..sexStr..string.char(41)
|
||||
end
|
||||
|
||||
local function nameOrSpeciesAndNumber(unit)
|
||||
if unit.name.has_name then
|
||||
return dfhack.TranslateName(dfhack.units.getVisibleName(unit))..' '..getSexString(unit.sex),true
|
||||
else
|
||||
return 'Unit #'..unit.id..' ('..df.creature_raw.find(unit.race).caste[unit.caste].caste_name[0]..' '..getSexString(unit.sex)..')',false
|
||||
end
|
||||
end
|
||||
|
||||
local function checkVariable(var, limit, description, map, unit)
|
||||
local rraw = findRaceCaste(unit)
|
||||
local species = rraw.name[0]
|
||||
local name = nameOrSpeciesAndNumber(unit)
|
||||
if var > limit then
|
||||
if not map[unit.id] then
|
||||
map[unit.id] = true
|
||||
return species.." "..name.." is "..description.."!"
|
||||
end
|
||||
else
|
||||
map[unit.id] = false
|
||||
end
|
||||
end
|
||||
|
||||
local function doCheck()
|
||||
local msg
|
||||
for i=#units-1, 0, -1 do
|
||||
local unit = units[i]
|
||||
local rraw = findRaceCaste(unit)
|
||||
if rraw and not unit.flags1.dead and not dfhack.units.isOpposedToLife(unit) then
|
||||
msg = checkVariable(unit.counters2.hunger_timer, 75000, 'starving', starvingUnits, unit)
|
||||
msg = msg or checkVariable(unit.counters2.thirst_timer, 50000, 'dehydrated', dehydratedUnits, unit)
|
||||
msg = msg or checkVariable(unit.counters2.sleepiness_timer, 150000, 'very drowsy', sleepyUnits, unit)
|
||||
end
|
||||
end
|
||||
if msg then
|
||||
df.global.pause_state = true
|
||||
dfhack.gui.showPopupAnnouncement(msg, 7, true)
|
||||
end
|
||||
end
|
||||
|
||||
doCheck()
|
Loading…
Reference in New Issue