- Notifications
You must be signed in to change notification settings - Fork201
/
Copy pathanimal-control.lua
135 lines (127 loc) · 6.41 KB
/
animal-control.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
-- helps manage the butchery and gelding of animals
-- Written by Josh Cooper(cppcooper) on 2020-02-18, last modified: 2020-03-01
localutils=require('utils')
localvalidArgs=utils.invert({
'all',
'id',
'race',
'markedfor',
'notmarkedfor',
'gelded',
'notgelded',
'male',
'female',
'showstats',
'markfor',
'unmarkfor',
'help',
})
localargs=utils.processArgs({...},validArgs)
header_format="%-20s %-9s %-9s %-5s %-22s %-8s %-25s"
row_format="%-20s %-9d %-9d %-5s %-22s %-8s %-25s"
stats_header_format="%-20s %-9s %-9s %-5s %-22s %-8s %-25s %-7s %-7s %-7s %-7s %-7s %-7s"
stats_row_format="%-20s %-9d %-9d %-5s %-22s %-8s %-25s %-7d %-7d %-7d %-7d %-7d %-7d"
header=header_format:format(
"animal type","unit id","race id","sex","marked for slaughter",
"gelded","marked for gelding")
stats_header=stats_header_format:format(
"animal type","unit id","race id","sex","marked for slaughter",
"gelded","marked for gelding","str","agi","tgh","endur","recup","disres")
ifargs.raceandnottonumber(args.race)then
args.race=string.upper(args.race)
localraceID
fori,cinipairs(df.global.world.raws.creatures.all)do
ifc.creature_id==args.racethen
raceID=i
break
end
end
ifnotraceIDthen
qerror('Invalid race:'..args.race)
end
args.race=raceID
end
bfilters= (args.idorargs.raceorargs.markedfororargs.notmarkedfororargs.geldedorargs.notgeldedorargs.maleorargs.female)
bcommands= (args.showstatsorargs.markfororargs.unmarkfor)
bvalid= (args.allandnotbfilters)or (notargs.alland (bfiltersorbcommands))
ifargs.helpornotbvalidthen
print(dfhack.script_help())
else
count=0
ifargs.showstatsthen
print(stats_header)
else
print(header)
end
for_,vinipairs(df.global.world.units.active)do
ifv.civ_id==df.global.plotinfo.civ_idandv.flags1.tamethen
ifnot (args.maleorargs.female)orargs.maleandv.sex==1orargs.femaleandv.sex==0then
ifnotargs.raceortonumber(args.race)==v.racethen
ifnotargs.markedforor (args.markedfor=="slaughter"andv.flags2.slaughter)or (args.markedfor=="gelding"andv.flags3.marked_for_gelding)then
ifnotargs.notmarkedforor (args.notmarkedfor=="slaughter"andnotv.flags2.slaughter)or (args.notmarkedfor=="gelding"andnotv.flags3.marked_for_gelding)then
ifnotargs.geldedorv.flags3.geldedthen
ifnotargs.notgeldedornotv.flags3.geldedthen
ifnotargs.idortonumber(args.id)==v.idthen
count=count+1
name=dfhack.units.isAdult(v)anddf.global.world.raws.creatures.all[v.race].name[0]ordfhack.units.getRaceChildName(v)
sex=v.sex==1and"M"or"F"
ifargs.markfororargs.unmarkforthen
ifargs.markforthen
mark=args.markfor
state=true
else
mark=args.unmarkfor
state=false
end
ifmark=="gelding"andsex=="M"then
--print("geld",state)
v.flags3.marked_for_gelding=state
elseifmark=="slaughter"then
--print("slaughter",state)
v.flags2.slaughter=state
end
end
attr=v.body.physical_attrs
ifv.sex==1then
ifargs.showstatsthen
print(string.format(stats_row_format
,name,v.id,v.race,sex
,tostring(v.flags2.slaughter),tostring(v.flags3.gelded),tostring(v.flags3.marked_for_gelding)
,attr.STRENGTH.value,attr.AGILITY.value,attr.TOUGHNESS.value,attr.ENDURANCE.value,attr.RECUPERATION.value,attr.DISEASE_RESISTANCE.value))
else
print(string.format(row_format
,name,v.id,v.race,sex
,tostring(v.flags2.slaughter),tostring(v.flags3.gelded),tostring(v.flags3.marked_for_gelding)))
end
else
ifargs.showstatsthen
print(string.format(stats_row_format
,name,v.id,v.race,sex
,tostring(v.flags2.slaughter),"-","-"
,attr.STRENGTH.value,attr.AGILITY.value,attr.TOUGHNESS.value,attr.ENDURANCE.value,attr.RECUPERATION.value,attr.DISEASE_RESISTANCE.value))
else
print(string.format(row_format
,name,v.id,v.race,sex
,tostring(v.flags2.slaughter),"-","-"))
end
end
end
end
end
end
end
end
end
end
end
ifnotargs.idthen
ifargs.showstatsthen
print(stats_header)
else
print(header)
end
else
print("")
end
print(string.format("total: %d",count))
end