Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion projects/RPCharacters/docs/character-controls.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,14 @@ single-token slug, or its UUID when the slug cannot be used safely. The `permane
belongs to `injure`. `/class`, `/subclass`, `/players` and `/will` have no argument
suggestions. Wardrobe completion includes usable slot IDs and unambiguous aliases.

A character's first class and first subclass are free. Other picks are priced like the class creation stage: free during its lock-time (5 days), then the `paid-changes` class rule (100, 1000, 3000 denars). `class-selection.change-cost` is used only when there is no class rule. `infinite-points: true` makes every pick free, for the tutorial server. A class picked above a skill-slot level still gets the slots its exp table unlocks.
A character's first class is free, and so is its first subclass after each base-class pick. A move to another class therefore costs one class change, and that class's first subclass is free. A switch between sibling subclasses is a class change. Other picks are priced like the class creation stage: free during its lock-time (5 days), then the `paid-changes` class rule (100, 1000, 3000 denars). `class-selection.change-cost` is used only when there is no class rule. `infinite-points: true` makes every pick free, for the tutorial server. A class picked above a skill-slot level still gets the slots its exp table unlocks.

Paid picks, and paid changes to a locked creation stage, are charged to the character being changed: the whole price comes from its own pouch or bank, tried in the configured `accounts` order. This needs DenarEconomy 0.3.0. RPCharacters saves the payment on the character, with its debit and refund operation IDs, and forces the file and its folder to disk before it posts the debit. If the server stops part way, the next join asks the ledger whether the debit went through. A debit that never applied is dropped without a refund. An applied one is kept when the change stuck and refunded otherwise, always with the stored refund ID, so a retry never pays twice. A paid class pick whose class could not be applied is marked for refund, so reaching that class later never counts as using it. While a payment is held, the character cannot open a stage edit or pick a class until it settles. A payment held from before the character ledger is treated as already taken from the account's money. It is always refunded to the account's legacy heir, whatever the character has changed since, and waits until heirs are known.

Staff with `class-selection.reset-permission` (`rpchar.class.reset`) can run `/rpcharacter admin resetclasses confirm` to give every character a fresh class window: class and subclass changes are free for the lock-time again, paid prices start over and the first subclass is free again. Online characters start now, offline ones when they next join. The reset count is kept in `data/class-resets.yml`.

For one character, the same staff can use `/rpcharacter admin classpicks <player>` on the character an online player is playing. Without an action it shows the class, the free window, whether the next subclass is free and the paid change count with the next price. `reset` does what `resetclasses` does for that character only. `freesubclass` only makes its next subclass pick free. `paid <count>` sets its paid change count, which picks the next price. None of them change the class, and they are refused while a class payment is still being settled.

`/rpcharacter admin carryexp <player> <amount>` gives class EXP carried over from the account's other characters; Codex and ConditionalEvents run it for shared discoveries and duchy titles. MMOCore throws away EXP at a class's level cap, so the class takes what it can hold and the rest waits on the character (`pools.carried-experience` in its progress file). It is added level by level once the character can level further: after a class or subclass pick, or at its next activation after a cap rise. Each level-up still claims its exp-table rewards, such as skill points and skill slots. The player is told once per batch how much is waiting, and how much was added when it is. Amounts are raw EXP, before MMOCore's EXP stat and boosters, like a discovery's own reward. While bodies are off it is plain MMOCore EXP.

With separate bodies disabled, the class level is shared by every character and
Expand Down