# Character Generator This is the source repository for a Halberds & Helmets character generator. The character generator is currently [installed on Campaign Wiki](https://campaignwiki.org/character-sheet-generator/). Take a look at the Help page. It comes with links to examples of what this web application can do. If you want to report bugs, provide feedback, fix typos or collaborate in any other way, feel free to [contact me](https://alexschroeder.ch/wiki/Contact). ## Running it locally Generate an SVG file: ```sh ./character-sheet-generator random > test.svg ``` Run a web service at localhost:3040: ```sh make run ``` ## Face Generator You can run the [Face Generator](https://alexschroeder.ch/cgit/face-generator) and use its faces. Check it out and run it locally. ```sh make run ``` It runs on port 3020. Change the local config file for the Character Sheet Generator and add the Face Generator URL: ```perl { loglevel => 'info', contrib => 'share', face_generator_url => "http://localhost:3020", } ``` Now you can start the Character Sheet Generator and it uses the images generated by the running Face Generator. ```sh make run ``` For production you would of course not use "localhost" for the URL, but the actual URL where Face Generator is available. Note that if you install the character sheet generator on a website using HTTPS, then you have to install the face generator in the same domain, because browsers refuse to download images from a different domain when using HTTPS. ## Posting 20 Characters to Campaign Wiki Example (English & German): ```bash #!/bin/bash for i in $(seq 10); do for lang in de en; do f=$(mktemp /tmp/char.XXXX) echo "Character:" > $f character-sheet-generator random $lang text >> $f echo >> $f name=$(grep name: $f | cut -c 7-) class=$(grep class: $f | cut -c 8-) if curl --head --silent "https://campaignwiki.org/wiki/MontagInZ%c3%bcrich/$name" | grep --silent "^HTTP/1.1 404"; then echo "|[[$name]] | 0| 0|$class 1 |– |no player |" wikiput -u Alex -z frodo -s "New character" "https://campaignwiki.org/wiki/MontagInZ%c3%bcrich/$name" < $f sleep 1 else echo $name already exists fi done done ``` This uses [wikiput](https://oddmuse.org/wiki/wikiput) to do the actual posting instead of `curl` because I've been getting a timeout error when posting to the wiki using `curl`. ## Dependencies The CGI script depends on [Mojolicious](http://mojolicio.us/) and some other Perl modules. You can install everything via `cpan` or `cpanm`, or if you're on a Debian system, try the following: ```sh sudo apt-get install git libmodern-perl-perl \ libmojolicious-perl libi18n-acceptlanguage-perl \ libfile-sharedir-perl libfile-slurper-perl \ libxml-libxml-perl ``` ## Development If you want to tinker with the code, use `morbo` to run the application because that restarts the application every time you make a change. ```sh morbo script/character-sheet-generator ``` ### Production This runs the script as a server on port 8080, writing a pid file: ```sh hypnotoad script/character-sheet-generator ``` Whenever you repeat this `hypnotoad` command, the server will be restarted. There's no need to kill it. You can configure `hypnotoad` to listen on a different port by adding an additional item to the config file, `character-sheet-generator.conf`. Here's an example: ```perl { hypnotoad => {listen => ['http://*:8083'],}, } ``` This is great for production. If you have multiple Mojolicious applications, you can either run them all with their own Hypnotoad, or you can use [Toadfarm](https://metacpan.org/pod/Toadfarm). ## Docker ### Quickstart If you don’t know anything about Docker, this is how you set it up. ```bash # install docker on a Debian system sudo apt install docker.io # add the current user to the docker group sudo adduser $(whoami) docker # if groups doesn’t show docker, you need to log in again su - $(whoami) ``` ### Running the latest Character Sheet Generator There is a Dockerfile in the repository. Check out the repository, change into the working directory, and build a docker image, tagging it `test/character-sheet-generator`: ```bash git clone https://alexschroeder.ch/cgit/character-sheet-generator cd character-sheet-generator docker build --tag test/character-sheet-generator . ``` If you remove the `--notest` argument in the Dockerfile, this is a good way to check for missing dependencies. 😁 To run the application on it: ```bash docker run --publish=3020:3020 --publish=3040:3040 test/character-sheet-generator ``` This runs the web application in the container and has it listen on `http://127.0.0.1:3040` – and you can access it from the host.