An application to determine the profitability of a crafted item on a given realms public auction house. Given a set of professions, an item, a region, and a realm the program can determine whether the item can be crafted by the given set of professions and if so, what reagents are required. Reagents are decomposed if they are craftable themselves. At each step the cost of the reagents to purchase is calculated versus crafting them as well. At the end of the calculation a shopping list will be created with base items needed to craft the required item. Optionally, a full inventory list for multiple or single characters can be included and will be used when constructiong the shopping list.
To install the program clone the repository, install dependencies, and acquire a battle.net api token.
git clone https://github.com/hschimke/WorldOfWarcraft_CraftingProfitCalculator
cd WorldOfWarcraft_CraftingProfitCalculator
npm install
cd client
npm install
The battle.net Client ID and Client Secret must be placed in the environment for the application. The two required environment variables are CLIENT_ID
and CLIENT_SECRET
.
An installation script is available in scripts. This requires root access and a SystemD based operating system. Once installed the program will run on port 8080 (by default). CLIENT_ID
and CLIENT_SECRET
are still required in the environment. This does not install a historical auctions scan list, which must be done separately.
The application relies on caching large amounts of information from Blizzard. The initial run of the application will take a long time for this reason. Once installation is complete the cache can be primed with npm run fill-cache
. This fills the cache by performing a very simple run using the basic (and uncraftable) item Simple Wood.
To use the inventory for a character (or set of characters) when computing the shopping list, the option AddOn must be installed and used to generate json data. The AddOn can be found in the wow-addon
folder in the root of the repository. Copy the folder CraftingProfitCalculator_data
in that directory to the AddOns
folder in your World of Warcraft installation.
The AddOn provides three slash commands within World of Warcraft.
/cpcr
: To run the inventory scan in the background. This should be done for each character./cpcc
: Runs an inventory scan and outputs the json data for the currently logged in character./cpca
: RUns an inventory scan and outputs the json data for all scanned characters.
Once the json data is collected, it can be coppied into the web page provided by the server or into an option in the CLI program. JSON data is only refreshed when one of the above commands is written, so if a character has changed the contents of their inventory since the last run it will not be reflected.
The AddOn also collection region, realm, and profession data for all scanned characters. This can be used for running the program without specifying all of the parameters directly, instead infering them from the provided AddOn output.
In order to include the contents of a character's bank and reagent bank the above slash commands must be run while the character's bank is open.
To launch the server version of the program run npm run client-server
. The default port is 3000, so the server can be connected to with http://localhost:3000. The server can be terminted by pressing Ctrl-C
in the terminal window where it is running. In order to use the client you must run npm run build
in the client directory and then mv ./build ../html
to copy the build output to the server directory. This is not required if using the installation script mentioned above, as the step is handled separately.
To get the JSON version of the profit calculation and shopping list, send a post command to http://localhost:3000/json_output
. The post must contain, at a minimum: a payload containg the item name or id as item_id
, the number requested as needed
, a json config json file as addon_data
, and a run type of type
set to json
. Optionally, more detailed custom runs can be performed by setting type
to custom
and including: professions
for a JSON formatted array of professions, server
, and region
. The custom
type corresponds to the CLI default behaviour and ignores the professions and server data set int he AddOn payload.
THe command line program can be run using npm run cli --
followed by the available options. Running the program without any options will search for a Spectral Flask of Power, using all available professions, on the US realm Hyjal.
--item
: Either the name of the item to search for or its item id.--region
: The region in which the server is located. The default is US.--server
: The realm whos auction house will be used for profit calculations.--count
: The number of items to be crafted. The default is 1.--profession
: A single profession to check. This item can be repeated multiple times, each additional inclusion adds a profession. The default is all professions.--json_data
: Output from the WoW AddOn containing inventory and profession data from a character or set of characters.--json
: Use the provided AddOn output to populate all other options. If this is specified then the input from--item
,--region
,--server
and all--profession
entries will be ingored and the values contained in the AddOn output will be used instead.
The CLI output creates three files.
formatted_output
Containes the user friendly version of the profit calculation and shopping list.intermediate_output.json
Contains the JSON version of the profit calculation and shopping list and could be used by other applications.raw_output.json
Contains the raw data generated by the application and is likely not useful to anyone.
All files are overwritten on subsequent runs of the program.
Instead of installing the program directly to a host, the server version can be run from a docker container. Building the container using the provided Dockerfile is left to the user.
The docker image relies on having numerous environment variables set for the container, this can be accomplished with the --env
option to docker run
. The required variables are as follows:
CLIENT_ID
CLIENT_SECRET
For more advanced configuration the following variables can be set:
DATABASE_TYPE
The database type to use. Options arepg
andsqlite3
. The default issqlite3
.PGUSER
Database username, no default.PGHOST
Database host, 'localhost' is default.PGPASSWORD
Database password, no default.PGDATABASE
Database name, no default.STANDALONE_CONTAINER
Control the behaviour of the auction scraper. Options arenormal
,hourly
, andstandalone
. The default isstandalone
.normal
Don't schedule the ingestion, that is handled elsewhere.hourly
Scan the AH and related tasks and exit.standalone
Start the server and schedule an internal job to scrape the auction house.
If running in a production environment then the following additional configuration options should be set:
LOG_LEVEL=info
NODE_ENV=production
The sqlite3 database option looks for database files in a volume mounted at /usr/src/wow_cpc/databases
. While the volume is created for postgresql databases, it is not used.
If using a shared database (postgresql is recomended in this situation), and running multiple copies of the image, it is highly
recomended that only one of the instances be launched with the STANDALONE_CONTAINER=standalone
option. Only one instance should scan the auction house for each database. All other nodes besides the scanning node should be launched with STANDALONE_CONTAINER=normal
.