r-o-b-o-t-o / azerothcore-armory

A website to view your AzerothCore server's characters
MIT License
49 stars 24 forks source link
armory azerothcore azerothcore-tools node-js nodejs typescript

Build Stargazers Forks Issues MIT License

AzerothCore Armory

A website to view your AzerothCore server's characters
Report a Bug · Suggest a Feature · Ask a Question · Demo

Table of Contents
  1. About
  2. Getting Started
  3. Usage
  4. Features
  5. Contributing
  6. Show your Support
  7. License
  8. Contact

About

AzerothCore-Armory is a website that enables you to view your AzerothCore server's characters and guilds.
At the time I started working on this project (end of 2021), there were virtually no modern and public/open-source armory projects.
I also noticed that such a tool was frequently requested in the AzerothCore Discord server, so I decided to make one. Hope you like it!

View screenshots ![Main page](readme/img/index.png) ![Character page](readme/img/cayla.png) ![Character talents](readme/img/talents.png) ![Character achievements](readme/img/achievements.png) ![Guild page](readme/img/guild.png)

Built With

(back to top)

Getting Started

Prerequisites

Installation

  1. Clone the repository:
    • With HTTPS:
      git clone https://github.com/r-o-b-o-t-o/azerothcore-armory.git

      OR

    • With SSH:
      git clone git@github.com:r-o-b-o-t-o/azerothcore-armory.git
  2. Install the dependencies:
    cd azerothcore-armory/
    npm install
  3. Configure the application: copy config.default.json to config.json or .env.example to .env and edit the resulting file.
    See the Configuration Reference below for a description of all values.
  4. Download the model viewer's data from the Releases page and extract it to the data/ directory.

Configuration Reference

Main configuration | config.json | .env | Type | Default value | Description | |--------------------------------|----------------------------------------------------|-------------------------------|--------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `aowowUrl` | `ACORE_ARMORY_AOWOW_URL` | String | `"https://wowgaming.altervista.org/aowow"` | The URL of the AoWoW database to use for tooltips and links | | `websiteUrl` | `ACORE_ARMORY_WEBSITE_URL` | String | `"https://mywebsite.com"` | Your website's URL. Used to redirect to the homepage on error pages | | `websiteName` | `ACORE_ARMORY_WEBSITE_NAME` | String | `"My Website"` | Your website's name. Displayed in the redirect button on error pages | | `websiteRoot` | `ACORE_ARMORY_WEBSITE_ROOT` | String | `""` | The root of your armory's URL. If your armory is hosted on, for example, `http://mywebsite.com/azerothcore-armory`, the `websiteRoot` value should be `"/azerothcore-armory"` | | `iframeMode` | `ACORE_ARMORY_IFRAME_MODE__`... | Object | | Settings for the iframe mode | | `iframeMode.enabled` | `ACORE_ARMORY_IFRAME_MODE__ENABLED` | Boolean | `false` | Set to `true` if you want to embed the armory in an iframe | | `iframeMode.url` | `ACORE_ARMORY_IFRAME_MODE__URL` | String | `"https://mywebsite.com/armory"` | Set this to the URL of the page that hosts the `iframe` | | `loadDbcs` | `ACORE_ARMORY_LOAD_DBCS` | Boolean | `true` | Loads the DBC data from the `data` directory into memory when starting up. It is highly recommended to set this to `true`. Only use `false` to keep memory usage low, on a test server for example | | `hideGameMasters` | `ACORE_ARMORY_HIDE_GAME_MASTERS` | Boolean | `true` | Hides Game Master characters if set to `true`. They will not be found in the search page, and their character pages will show a 404 error | | `transmogModule` | `ACORE_ARMORY_TRANSMOG_MODULE` | Boolean | `false` | Set this to `true` if your server uses the [transmogrification module](https://github.com/azerothcore/mod-transmog) and you want to display the transmogrified items on the 3D model | | `useZamCdn` | `ACORE_ARMORY_USE_ZAM_CDN` | Boolean | `false` | Set this to `true` to use the ZAM network CDN for the 3D model viewer instead of the assets in your local `data` folder | | `realms` | `ACORE_ARMORY_REALMS__`... | Array of objects | | An array of realm configurations | | `realms[0].name` | `ACORE_ARMORY_REALMS__0__NAME` | String | `"AzerothCore"` | The name of the realm. Will be used in the URLs, shown on the character pages and in the search page if you have multiple realms | | `realms[0].realmId` | `ACORE_ARMORY_REALMS__0__REALM_ID` | Number | `1` | The realm's ID, this must match the `id` column of the `realmlist` table in the auth database | | `realms[0].authDatabase` | `ACORE_ARMORY_REALMS__0__AUTH_DATABASE` | String | `"acore_auth"` | The name of the auth database | | `realms[0].charactersDatabase` | `ACORE_ARMORY_REALMS__0__CHARACTERS_DATABASE__`... | Database configuration object | | Configuration for the characters database. See "Database configuration" below | | `worldDatabase` | `ACORE_ARMORY_WORLD_DATABASE__`... | Database configuration object | | Configuration for the world database. This is shared between all realms at the moment. See "Database configuration" below | | `dbQueryTimeout` | `ACORE_ARMORY_DB_QUERY_TIMEOUT` | Number | `10000` | The maximum duration in milliseconds of a database query before it times out |
Database configuration | config.json | .env | Type | Default value | Description | |-------------|---------------|--------|---------------|------------------------------------------------| | `host` | ...`HOST` | String | `"localhost"` | The hostname or IP address of the MySQL server | | `port` | ...`PORT` | Number | `3306` | The port that the MySQL server runs on | | `user` | ...`USER` | String | `acore` | The MySQL user used to connect to the database | | `password` | ...`PASSWORD` | String | `acore` | The password for the specified MySQL user | | `database` | ...`DATABASE` | String | | The name of the MySQL database |

(back to top)

Usage

Build the application:

npm run build

Start the application:

npm start

Open a web browser and navigate to http://localhost:48733

Other useful npm scripts:

With Docker

You can also use Docker, simply use docker-compose:

cd azerothcore-armory/
docker-compose up -d

Note: the Docker version supports only the .env file for configuration, not config.json

With an iframe

You might want to integrate the application directly into your existing website using an iframe.

  1. Set iframeMode.enabled to true in your configuration.
  2. Set iframeMode.url in your configuration to the URL in your website that the armory will be accessible from (the page hosting the iframe).
  3. Embed the code snippet below into your page.
    Make sure you replace the URL http://localhost:48733 with your Armory's URL (the same URL as iframeMode.url) at the end of the code snippet.
    Click to expand embed code
<style>
    #armory-iframe {
        /*
        * Using min-width to set the width of the iFrame, works around an issue in iOS that can prevent the iFrame from sizing correctly.
        * See: https://github.com/davidjbradshaw/iframe-resizer
        */
        width: 1px;
        min-width: 100%;

        border: none;
    }
</style>

<iframe id="armory-iframe"></iframe>

<script type="application/javascript" src="https://cdn.jsdelivr.net/npm/iframe-resizer@4.3.2/js/iframeResizer.min.js"></script>
<script type="application/javascript">
    let resizeSetup = false;
    window.addEventListener("message", (ev) => {
        if (ev.data.url !== undefined) {
            const url = ev.data.url.trim().replace(/^\//, "");
            window.history.replaceState(null, null, url === "" ? window.location.pathname : ("?" + url));
        } else if (ev.data === "contentLoaded") {
            if (!resizeSetup) {
                iFrameResize({ checkOrigin: false, autoResize: true }, "#armory-iframe");
                resizeSetup = true;
            } else {
                document.getElementById("armory-iframe").iFrameResizer.resize();
            }
        }
    });

    const iframe = document.getElementById("armory-iframe");
    const url = window.location.search.replace(/^\?/, "");
    iframe.src = "http://localhost:48733/" + url;
</script>

Demo

This repository is used in production over at ChromieCraft, check it out there!

(back to top)

Features

See the open issues for a list of suggested features and known issues.

(back to top)

Contributing

Any and all contributions are greatly appreciated.

If you have a suggestion that would make this project better, feel free to fork the repository and create a Pull Request. You can also open a Feature Request.

(back to top)

Show your Support

⭐️ Give the project a star if you like it!

Buy Me a Coffee at ko-fi.com

(back to top)

License

Distributed under the MIT License. See the LICENSE file for more information.

(back to top)

Contact

Feel free to get in touch with me on Discord: roboto_

(back to top)