--scripts/modtools/skill-change.lua --author expwnent --based on skillChange.lua by Putnam 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 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 args.unit.status.current_soul.skills:insert('#', skill) 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 = df.skill_rating[args.value] elseif args.mode == mode.add then skill.rating = df.skill_rating[args.value + df.skill_rating[skill.rating]] else error 'bad mode' end else error 'bad granularity' end print('new: ' .. skill.rating .. ': ' .. skill.experience)