- PHP 66%
- Blade 33.2%
- SCSS 0.4%
- Dockerfile 0.3%
- JavaScript 0.1%
| .forgejo | ||
| app | ||
| bootstrap | ||
| config | ||
| data | ||
| database | ||
| docker | ||
| logs | ||
| public | ||
| resources | ||
| routes | ||
| storage | ||
| tests | ||
| .bladeformatterrc.json | ||
| .bladeignore | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| artisan | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| composer.json | ||
| composer.lock | ||
| Dockerfile | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| phpunit.xml | ||
| pint.json | ||
| README.md | ||
| renovate.json | ||
| vite.config.js | ||
FFXIV Tools
A collection of small, light-weight browser utilities related to FFXIV. Currently contains:
- Leveling Calculator
- Takes user input (e.g. current level, highest level class/job, various EXP buffs) and calculates number of dungeon/deep dungeon runs or frontline matches to get to the next level/to the end of a level range (e.g. 1-49, 50-59). Also supports fetching level, EXP, and highest level class/job from The Lodestone provided character ID and class/job.
- Economy Tools
- Crafting
- Uses data from Teamcraft and Universalis (as well as provided user preferences) to calculate profit for a given crafting job's recipes and tries to recommend the most profitable (and likely to sell). Includes "endgame" crafting recipes from 6.x and 7.x.
- Gathering
- Uses data from Teamcraft and Universalis (as well as provided user preferences) to list gatherable items used in "endgame" crafting recipes (6.x and 7.x) and rank them based on price; also tries to recommend the most profitable (and likely to sell).
- Monster Drops
- Uses data from Teamcraft and Universalis (as well as provided user preferences) to list monster drops used in "endgame" crafting recipes (6.x and 7.x) and rank them based on price; also tries to recommend the most profitable (and likely to sell).
- Diadem
- Consults Universalis to see what the current pricest mat on each Diadem node is on a given world, as well as the priciest overall.
- Crafting
For all utilities that use game item, Universalis, etc. data, data is stored locally to reduce strain on external services and maintain availability. Relevant utilities consequently also account for Universalis data recency to the best of their ability (particularly when making recommendations). Additionally, all utilities that support world selection support NA, Europe, JP, and Oceania data centers/worlds.
An instance can be found at https://ffxiv.itinerare.net and is automatically updated from this repo.
Setup
Via Docker Compose
An example docker-compose file is as follows:
services:
# Runs the web application
app:
image: code.itinerare.net/itinerare/ffxiv-tools:latest
restart: always
ports:
- '127.0.0.1:8080:80'
env_file:
- .env
environment:
- CONTAINER_ROLE=app
healthcheck:
test: ["CMD-SHELL", "curl -so /dev/null http://localhost/ || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 5s
# Runs scheduled commands
scheduler:
image: code.itinerare.net/itinerare/ffxiv-tools:latest
restart: always
depends_on:
- app
env_file:
- .env
environment:
- CONTAINER_ROLE=scheduler
healthcheck:
test: ["CMD", "php", "/var/www/artisan", "health:check", "--component=database"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Runs queue workers
queue:
image: code.itinerare.net/itinerare/ffxiv-tools:latest
restart: always
depends_on:
- app
env_file:
- .env
environment:
- CONTAINER_ROLE=queue
- PHP.memory_limit=512M
- LARAVEL_QUEUE=init,universalis-init,universalis,default
healthcheck:
test: ["CMD", "php", "/var/www/artisan", "health:check", "--component=queue"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
For more configuration options, see the base image's readme.
You will need to set up the .env file manually before starting the application. Copy the example .env alongside docker-compose.yml; to generate a key, docker run --rm code.itinerare.net/itinerare/ffxiv-tools:latest php artisan key:generate --show can be used and its final output (base64:etcetc...) copied into the .env file (as APP_KEY).
Once started, the app container will initialize the database and queue Universalis updates.
An example nginx config is as follows:
server {
server_name site.com www.site.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8080;
break;
}
}
From Source
Obtain a copy of the code
$ git clone https://code.itinerare.net/itinerare/ffxiv-tools.git
Configure .env in the directory
$ cp .env.example .env
This only needs the bare minimum (e.g. no database connection info needs to be provided).
Setting up
Install packages with composer:
$ composer install
Generate app key:
$ php artisan key:generate
Create the database and tables:
$ touch database/database.sqlite
$ php artisan migrate
Queue game item record creation and Universalis data updates:
$ php artisan app:update-database
$ php artisan app:update-universalis-cache
You will also need to set the Laravel scheduler to run, e.g. by adding the following to a crontab:
* * * * * cd ~/your_domain/www && php artisan schedule:run >> /dev/null 2>&1
You will also need to set up a queue worker. See the Laravel docs or Aldebaran docs for instructions on how to do this.
Contact
If you have any questions, please contact me via email at [email protected].