forked from DFHack/dfhack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathskill-change.lua
More file actions
113 lines (95 loc) · 2.35 KB
/
Copy pathskill-change.lua
File metadata and controls
113 lines (95 loc) · 2.35 KB
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
--scripts/modtools/skill-change.lua
--author expwnent
--based on skillChange.lua by Putnam
--TODO: update skill level once experience increases/decreases
--TODO: skill rust?
--[[
BEGIN_DOCS
.. _scripts/modtools/skill-change:
modtools/skill-change
=====================
Sets or modifies a skill of a unit.
END_DOCS
]]
local utils = require 'utils'
validArgs = validArgs or utils.invert({
'help',
'skill',
'mode',
'value',
'granularity',
'unit'
})
mode = mode or utils.invert({
'add',
'set',
})
granularity = granularity or utils.invert({
'experience',
'level',
})
local args = utils.processArgs({...}, validArgs)
if args.help then
print([[scripts/modtools/skill-change.lua
arguments
-help
print this help message
-skill skillName
set the skill that we're talking about
-mode (add/set)
are we adding experience/levels or setting them?
-granularity (experience/level)
direct experience, or experience levels?
-unit id
id of the target unit
-value amount
how much to set/add
]])
return
end
if not args.unit or not tonumber(args.unit) or not df.unit.find(tonumber(args.unit)) then
error 'Invalid unit.'
end
args.unit = df.unit.find(tonumber(args.unit))
args.skill = df.job_skill[args.skill]
args.mode = mode[args.mode or 'set']
args.granularity = granularity[args.granularity or 'level']
args.value = tonumber(args.value)
if not args.skill then
error('invalid skill')
end
if not args.value then
error('invalid value')
end
local skill
for _,skill_c in ipairs(args.unit.status.current_soul.skills) do
if skill_c.id == args.skill then
skill = skill_c
end
end
if not skill then
skill = df.unit_skill:new()
skill.id = args.skill
utils.insert_sorted(args.unit.status.current_soul.skills,skill,'id')
end
print('old: ' .. skill.rating .. ': ' .. skill.experience)
if args.granularity == granularity.experience then
if args.mode == mode.set then
skill.experience = args.value
elseif args.mode == mode.add then
skill.experience = skill.experience + args.value
else
error 'bad mode'
end
elseif args.granularity == granularity.level then
if args.mode == mode.set then
skill.rating = args.value
elseif args.mode == mode.add then
skill.rating = args.value + skill.rating
else
error 'bad mode'
end
else
error 'bad granularity'
end
print('new: ' .. skill.rating .. ': ' .. skill.experience)