48 lines
1.5 KiB
Lua
48 lines
1.5 KiB
Lua
-- skillChange.lua
|
|
-- Allows skills to be changed with DFHack.
|
|
-- author Putnam
|
|
-- edited by expwnent
|
|
|
|
--[[
|
|
Args are arranged like this:
|
|
unitID SKILL level ADD/SUBTRACT/SET
|
|
|
|
SKILL being anything such as DETAILSTONE, level being a number that it will be set to (15 is legendary, 0 is dabbling).
|
|
|
|
Add will add skill levels, subtract will subtract, set will place it at exactly the level you put in.
|
|
]]
|
|
|
|
local utils=require('utils')
|
|
local args={...}
|
|
local skills=df.unit.find(args[1]).status.current_soul.skills
|
|
local skill=df.job_skill[tostring(args[2]):upper()]
|
|
local level=tonumber(args[3]) or 0
|
|
|
|
local argfunctions={
|
|
__index=function(t,k)
|
|
qerror(k..' is not a valid setting! Valid settings are SET, ADD and SUBTRACT.')
|
|
end,
|
|
set=function(skills,skill,level)
|
|
utils.insert_or_update(skills, {new=true, id=skill, rating=level}, 'id')
|
|
end,
|
|
add=function(skills,skill,level)
|
|
local skillExists,oldSkill=utils.linear_index(skills,skill,'id')
|
|
if skillExists then
|
|
oldSkill.rating=level+oldSkill.rating
|
|
else
|
|
argfunctions.set(skills,skill,level)
|
|
end
|
|
end,
|
|
subtract=function(skills,skill,level)
|
|
local skillExists,oldSkill=utils.linear_index(skills,skill,'id')
|
|
if skillExists then
|
|
local newRating=oldSkill['rating'] or 0
|
|
oldSkill.rating=oldSkill.rating-level
|
|
if oldSkill.rating<0 or (oldSkill.rating==0 and oldSkill.experience<=0) then skills:erase(skillExists) end
|
|
end
|
|
end
|
|
}
|
|
|
|
setmetatable(argfunctions,argfunctions)
|
|
argfunctions[args[4]:lower()](skills,skill,level)
|