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