diff --git a/commute-sentence.lua b/commute-sentence.lua deleted file mode 100644 index 8e2a15cb93..0000000000 --- a/commute-sentence.lua +++ /dev/null @@ -1,19 +0,0 @@ -local utils = require('utils') -local argparse = require('argparse') - -local function commute_sentence(unit) - for _,punishment in ipairs(df.global.plotinfo.punishments) do - if punishment.criminal == unit.id then - punishment.prison_counter = 0 - return - end - end - qerror('Unit is not currently serving a sentence!') -end - -unit = dfhack.gui.getSelectedUnit(true) -if not unit then - qerror('No unit selected!') -else - commute_sentence(unit) -end diff --git a/docs/commute-sentence.rst b/docs/commute-sentence.rst deleted file mode 100644 index f2f36bbaa1..0000000000 --- a/docs/commute-sentence.rst +++ /dev/null @@ -1,16 +0,0 @@ -commute-sentence -================ - -.. dfhack-tool:: - :summary: Commute the prison sentences of convicted criminals. - :tags: fort armok units - -If a unit is currently serving out their sentence but you want them released -for whatever reason, this tool can commute their sentence. Just select the unit -and run the command. - -usage ------ - -:: - commute-sentence diff --git a/docs/justice.rst b/docs/justice.rst new file mode 100644 index 0000000000..4334f5057b --- /dev/null +++ b/docs/justice.rst @@ -0,0 +1,25 @@ +justice +======= + +.. dfhack-tool:: + :summary: Commands related to the justice system + :tags: fort armok units + +This tool allows control over aspects of the justice system, such as the +ability to pardon criminals. + +usage +----- + +:: + justice pardon [--unit ] + +Pardon the selected unit or the one specified by unit id if provided. Currently +only applies to prison time and doesn't cancel beatings or hammerings. + + +options +------- + +``-u``, ``--unit `` + Specifies the unit id of the target of the command. diff --git a/justice.lua b/justice.lua new file mode 100644 index 0000000000..f86b4fbed4 --- /dev/null +++ b/justice.lua @@ -0,0 +1,40 @@ + +local argparse = require('argparse') + +local function pardon_unit(unit) + for _,punishment in ipairs(df.global.plotinfo.punishments) do + if punishment.criminal == unit.id then + punishment.prison_counter = 0 + return + end + end + qerror('Unit is not currently serving a sentence!') +end + +local function command_pardon(unit_id) + local unit = nil + if not unit_id then + unit = dfhack.gui.getSelectedUnit() + if not unit then qerror("No unit selected!") end + else + unit = df.unit.find(unit_id) + if not unit then qerror(("No unit with id %i"):format(unit_id)) end + end + if unit then pardon_unit(unit) end +end + +local unit_id = nil + +local args = {...} + +local positionals = argparse.processArgsGetopt(args, + {'u', 'unit', hasArg=true, handler=function(optarg) unit_id = optarg end} +) + +local command = positionals[1] + +if command == "pardon" then + command_pardon(unit_id) +end + +qerror(("Unrecognised command: %s"):format(command))