4.3 KiB

LootDistributionGenerator

Generates Distribution .json files which are required by the SPT-AKI/Server to spawn loot.

Setup

Creating config file and setting folders

Requires a config.yaml in /config defining dump and target folders as well as a location for 7z.exe

---
tools:
  7z_exe: 'C:/Program Files/7-Zip/7z.exe'
server:
  # SPT-AKI Server location (to store the generated json)
  location: 'C:/GAMES/SPT_AKI_Dev/Server/'
  # The map names in the loot dump do not directly correspond to the server database structure, this is the mapping
  map_directory_mapping_yaml:  map_directory_mapping.yaml

archives:
  # where we put our sequential dump jsons to be sorted archived, preprocessor will put them into archives
  source_folder: 'D:/Games/SPT_Dev/map_dumps/12.12/'
  # here we store the archives with used data
  target_folder: 'D:/Games/SPT_Dev/map_dumps/12.12_used/'
  # archive name for map loot dump data
  loot_filename: loot_dumps.7z
  # archive name for bot dump data
  bot_filename: bot_dumps.7z
  # all dump data is appended into an archive in this folder
  backup_file: 'D:/Games/SPT_Dev/map_dumps/12.12_unused/complete.7z'
config:
  static:
    # we have a separate yaml that defined forced static loot per map
    forced_yaml: forced_static.yaml
  loose:
    # known quest items per map for validation
    forced_yaml: forced_loose.yaml

Installing Python

  1. Install python 3.9 https://www.python.org/downloads/release/python-3910/ to your preferred path
  2. Create a virtual environment and requirements in the LootDistributionGenerator's main folder
PS C:\LootDistributionGenerator> C:\pythonpath\python.exe -m venv .\venv

Your dir should now look like

📦LootDistributionGenerator
 ┣ 📂config
 ┃ ┣ 📜config.yaml
 ┃ ┣ 📜forced_loose.yaml
 ┃ ┣ 📜forced_static.yaml
 ┃ ┗ 📜map_directory_mapping.yaml
 ┣ 📂src
 ┃ ┣ 📜loose_loot.py
 ┃ ┣ 📜static_loot.py
 ┃ ┗ 📜tarkov_items.py
 ┣ 📂venv
 ┃ ┣ 📂Include
 ┃ ┣ 📂Lib
 ┃ ┣ 📂Scripts
 ┃ ┗ 📜pyenv.cfg
 ┣ 📜01_process_dump_data.py
 ┗ 📜02_loot_generator_parallel.py

Activate the python virtual environment and install the requirements

PS C:\GAMES\SPT_AKI_Dev\LootDistributionGenerator> .\venv\Scripts\activate
(venv) PS C:\GAMES\SPT_AKI_Dev\LootDistributionGenerator> pip install -r .\requirements.txt

Now the program should be ready to use.

Use

Always activate the virtual environment when you use the tool. Also, make sure the locations in the config.yaml are set correctly for your system.

Preparing and archiving new dumps

The LootDistribution generator will care for archiving dumps. It creates two 7z archives with the used dumps (currently loot and bot jsons)

  • archives/target_folder/loot_filename
  • archives/target_folder/bot_filename

a third archive is created which will contain all the dumps

  • archives/backup_file

When you receive new dumps you place them in

  • archives/source_folder

and run

(venv) PS C:\GAMES\SPT_AKI_Dev\LootDistributionGenerator> python .\01_process_dump_data.py 

now all the files in source_folder will be appended to their corresponding archives.

Creating the LootDistribution files for the server

When the archives are ready, run

(venv) PS C:\GAMES\SPT_AKI_Dev\LootDistributionGenerator> python .\02_loot_generator_parallel.py

The program will process the dumps to generate the loot files and stores them directly in the correct place in your SPT-AKI server development folder specified in server/location in the config.yaml

Todos:

  • Check for spawnpoints with location duplicates
  • Option 1
    • If that happens only group by xyz-coords, without rotation
    • spawnpoints with different rotations but same position will be combined
    • each item in the distribution will receive a rotation attribute to define how to place it
    • Pro/Con: simpler server code, simpler generation code, larger file size
  • Option 2
    • keep spawnpoints as is (same location but different rotation lead to separate spawnpoints)
    • make a "xyz location id" and after drawing, filter out all with same id from pool
    • Pro/Con: smaller file size, not sure yet how to create such a location id in the current generation code