# Character Creator contrib

Commands for managing and initiating an in-game character-creation menu.

Contribution by InspectorCaracal, 2022

## Installation

In your game folder `commands/default_cmdsets.py`, import and add `ContribCmdCharCreate` to your `AccountCmdSet`.

Example:

    from evennia.contrib.rpg.character_creator.character_creator import ContribCmdCharCreate

    class AccountCmdSet(default_cmds.AccountCmdSet):

        def at_cmdset_creation(self):
            super().at_cmdset_creation()
            self.add(ContribCmdCharCreate)

In your game folder `typeclasses/accounts.py`, import and inherit from `ContribChargenAccount` on your Account class.

(Alternatively, you can copy the `at_look` method directly into your own class.)

### Example:

    from evennia.contrib.rpg.character_creator.character_creator import ContribChargenAccount

    class Account(ContribChargenAccount):
        # your Account class code

In your settings file `server/conf/settings.py`, add the following settings:

    AUTO_CREATE_CHARACTER_WITH_ACCOUNT = False
    AUTO_PUPPET_ON_LOGIN = False

(If you want to allow players to create more than one character, you can customize that with the setting `MAX_NR_CHARACTERS`.)

By default, the new `charcreate` command will reference the example menu provided by the contrib, so you can test it out before building your own menu. You can reference the example menu here for ideas on how to build your own.

Once you have your own menu, just add it to your settings to use it. e.g. if your menu is in `mygame/word/chargen_menu.py`, you’d add the following to your settings file:

    CHARGEN_MENU = "world.chargen_menu"

## Usage

### The EvMenu

In order to use the contrib, you will need to create your own chargen EvMenu. The included `example_menu.py` gives a number of useful menu node techniques with basic attribute examples for you to reference. It can be run as-is as a tutorial for yourself/your devs, or used as base for your own menu.

The example menu includes code, tips, and instructions for the following types of decision nodes:

#### Informational Pages

A small set of nodes that let you page through information on different choices before committing to one.

#### Option Categories

A pair of nodes which let you divide an arbitrary number of options into separate categories.

The base node has a list of categories as the options, and the child node displays the actual character choices.

#### Multiple Choice

Allows players to select and deselect options from the list in order to choose more than one.

#### Starting Objects

Allows players to choose from a selection of starting objects, which are then created on chargen completion.

#### Choosing a Name

The contrib assumes the player will choose their name during character creation, so the necessary code for doing so is of course included!

### `charcreate` command

The contrib overrides the character creation command - `charcreate` - to use a character creator menu, as well as supporting exiting/resuming the process. In addition, unlike the core command, it’s designed for the character name to be chosen later on via the menu, so it won’t parse any arguments passed to it.

### Changes to `Account.at_look`

The contrib version works mostly the same as core evennia, but adds an additional check to recognize an in-progress character. If you’ve modified your own `at_look` hook, it’s an easy addition to make: just add this section to the playable character list loop.

        for char in characters:
            # contrib code starts here
            if char.db.chargen_step:
                # currently in-progress character; don't display placeholder names
                result.append("\n - |Yin progress|n (|wcharcreate|n to continue)")
                continue
            # the rest of your code continues here

This document page is generated from `evennia/contrib/rpg/character_creator/README.md`. Changes to this file will be overwritten, so edit that file rather than this one.