Skip to content

AwardXP

Referee: apply an XP award to one character, outside the adventure award.

Full documentation: AwardXP. Wire type: award_xp.

Legal session modes: battle, encounter, exploring, game_over, town, victory

JSON Schema

{
  "description": "Referee: apply an XP award to one character, outside the adventure award.\n\nReferee commands are legal in every mode, terminal modes included, so an\nadventure's rewards land after the session has concluded. The award applies\nthe prime-requisite modifier and can trigger level gains.\n\nModes:\n    `town`, `exploring`, `encounter`, `battle`, `game_over`, `victory`\n\nRejections:\n    - `session.command.unknown_member` - `character_id` names no party member.\n\nEvents:\n    `XpAwardedEvent` with the award, the\n    modified award, and the level after. When the award crosses a level\n    threshold, a\n    `CharacterLeveledUpEvent`\n    follows with the levels, the hit points gained, and the new title.",
  "properties": {
    "command_type": {
      "const": "award_xp",
      "default": "award_xp",
      "title": "Command Type",
      "type": "string",
      "description": "The wire discriminator. Each subclass fixes it to its own snake_case literal, like\n`\"move_party\"` or `\"open_door\"`, so you never set it yourself: constructing the subclass\ndoes. It's what `parse_command` and the\n`AnyCommand` union read to rebuild the right class\nfrom a serialized mapping, and it stays the same across releases."
    },
    "source": {
      "anyOf": [
        {
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Source",
      "description": "An annotation naming the authored object (a trigger or quest id) or the game\nsystem on whose behalf the command was issued. Execution never reads it: a stamped\ncommand does exactly what the same command unstamped does. It is logged and replayed\nwith the command, so the log alone answers \"why did this happen\". Absent is `None`,\nand the empty string is not a value."
    },
    "character_id": {
      "title": "Character Id",
      "type": "string",
      "description": "In an authored consequence or reward, this field takes the party selectors\n(`\"@party\"`, `\"@first\"`), expanded to literal member ids by the interpreter\nbefore issue. Issued directly, it must be a literal member id or the command\nrejects."
    },
    "amount": {
      "minimum": 0,
      "title": "Amount",
      "type": "integer",
      "description": "The raw award, before the class's prime-requisite percentage applies to it. B/X grants at\nmost one level per award, so XP that would carry the character two levels up is held one\npoint below the second threshold and the character gains a single level. Award again to\ncarry them further."
    }
  },
  "required": [
    "character_id",
    "amount"
  ],
  "title": "AwardXP",
  "type": "object"
}