This is the setup and contribution guide designed to help you setup your very own Garland Tools. The site requires a simple LAMP stack and minimal resources to operate, even at very high visitor counts.
These are one-time steps needed to build the primary data importer and bootstrap your server.
- Garland Tools. This repository. Everything needed to build the garlandtools.org website.
- SaintCoinach. A library for building game data.
- Sapphire. Database is used for mob data.
- xivModdingFramework. Needed for
Garland.Graphics.Exporterto extract 3d models.
- ImageMagick. For image compression.
- ffmpeg. For taking audio samples.
- WinMerge. Or whatever diff program you like. The UI supports opening an external diff viewer for comparing json changes.
- MySQL or MariaDB. Schema found in
Garland.Server/Schema/keystore.sql. - Nginx. Anything works, but there is a sample configuration including rewrite rules and CORS headers for nginx in
Garland.Server/nginx-garlandtools.org. The/filespath must point to thegtfilesrepository. - PHP
- Repositories must be cloned as siblings on the filesystem, e.g.
$HOME/code/gt, $HOME/code/xivModdingFramework. - Open the
Garland.slnsolution in Visual Studio. - Set active solution platform to x64 from Any CPU.
- Acquire a copy of Libra Eorzea's
app_data.sqlite, and place it inSupplemental/app_data.sqlite. - Copy
Config.json.defaulttoConfig.json. Change everything for your setup. - Import
Garland.Server/Schema/keystore.sql. - Import Sapphire's
schema.sqlandinserts.sql. - Build and run
Garland.UI.
Data imports occur every time a new patch is released. This is managed primarily via SaintCoinach and Garland.UI. Data is regenerated in full on every run.
FFXIV data is expressed as a series of tables. Column names are reverse-engineered and guessed by community members. SaintCoinach's ex.json is the primary source of these definitions, along with some primitive structures.
- Run
SaintCoinach.Cmd.exeprior to patch release. An essentialSaintCoinach.History.zipis generated. - Run
SaintCoinach.Cmd.exeand select Y when prompted to update. This compares information from history to predict definition changes. Such changes are very common, so this is absolutely necessary on each patch. Exit SaintCoinach.Cmd when updates are done. - Copy the
ex.jsonin theSaintCoinach.History.ziproot folder overSaintCoinach/ex.json. - Inspect the file manually for erroneous changes. The updater is great but not flawless, so this requires a human touch.
Uses xivModdingFramework to extract 3d assets. Will automatically begin extracting on run.
- In
Garland.UI, clickDatabase -> Convert game client files. This step will not change anything on the server, and is safe to run repeatedly. - There is a command to download high quality icons from Lodestone. This takes a long time to run, especially if it's your first time.
- Conversion in step #1 generates data update packages that can be inspected for changes. Side-by-side json document comparisons are available in the UI.
- Individual data packages can be deployed via context menu.
- Document data packages (i.e. Data01, Data02, etc.) first deploy to a staging test table.
- Search data packages go straight to production, so it's best to run these last.
- Assets are extracted to the configured
gtfileslocation. These must be synchronized with the server before data is deployed to production. - After testing and synchronization, run
Database -> Deploy test data to production. - Delete your data packages from the context menu.
Some data isn't available from the client files and thus supplemental sources are required.
- Sapphire's mysql database has mob name, model and location data.
- Libra Eorzea's sqlite database has mob drops, instance loot, and shop NPC locations.
- Lodestone has 128x128px item icons and patch graphics.
- FFXIV Data Spreadsheet has everything else:
- Nodes: Timed node contents, slots, locations, and times.
- Fates: Fate positions and rewards.
- Fishing: Bait, conditions, tug types, and more.
- Mobs: Mob locations.
- Items: Item sources for desynth, aetherial reduction, treasure maps, ventures, concealed nodes, instances, gardening, and voyages.
- NPCs: Event NPC indicators, used to exclude shops from complexity calculations.
- Individual sheets from the data spreadsheet are exported as TSVs and stored in
Supplemental/because the Google Sheets API sucks and can't retrieve individual sheet data.
There are three main sites and a supporting API in PHP. No resources are compressed or minified. Running the website should be as straightforward as synchronizing the files with the server.
Whenever .js changes are made, run make.bat to combine these into a single gt.js.
The website can operate in a test mode pointing at an external test.garlandtools.org server for the API. Fill an IP for this host in your etc/hosts file and all you will need is some way to serve files to a browser. Test mode is automatically triggered when the site detects localhost.