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)
|