@@ -56,25 +56,27 @@ function desert(u,method,civ)
5656end
5757
5858function canLeave (unit )
59+ if not unit .status .current_soul then
60+ return false
61+ end
62+
5963 for _ , skill in pairs (unit .status .current_soul .skills ) do
6064 if skill .rating > 14 then return false end
6165 end
62- if unit .flags1 .caged
63- or unit .race ~= df .global .ui .race_id
64- or unit .civ_id ~= df .global .ui .civ_id
65- or dfhack .units .isDead (unit )
66- or dfhack .units .isOpposedToLife (unit )
67- or unit .flags1 .merchant
68- or unit .flags1 .diplomat
69- or unit .flags1 .chained
70- or dfhack .units .getNoblePositions (unit ) ~= nil
71- or unit .military .squad_id ~= - 1
72- or dfhack .units .isCitizen (unit )
73- or dfhack .units .isSane (unit )
74- or unit .profession ~= 103
75- or not dfhack .units .isDead (unit )
76- then return false end
77- return true
66+
67+ return dfhack .units .isOwnRace (unit ) and -- Doubtful check. naturalized citizens
68+ dfhack .units .isOwnCiv (unit ) and -- might also want to leave.
69+ not dfhack .units .isActive (unit ) and
70+ not dfhack .units .isOpposedToLife (unit ) and
71+ not unit .flags1 .merchant and
72+ not unit .flags1 .diplomat and
73+ not unit .flags1 .chained and
74+ dfhack .units .getNoblePositions (unit ) == nil and
75+ unit .military .squad_id == - 1 and
76+ dfhack .units .isCitizen (unit ) and
77+ dfhack .units .isSane (unit ) and
78+ not dfhack .units .isBaby (unit ) and
79+ not dfhack .units .isChild (unit )
7880end
7981
8082function checkForDeserters (method ,civ_id )
@@ -94,7 +96,7 @@ function checkmigrationnow()
9496 for i = 0 , # allUnits - 1 do
9597 local unit = allUnits [i ]
9698 if dfhack .units .isSane (unit )
97- and not dfhack .units .isDead (unit )
99+ and dfhack .units .isActive (unit )
98100 and not dfhack .units .isOpposedToLife (unit )
99101 and not unit .flags1 .tame
100102 then
0 commit comments