![Styrr](/assets/img/avatar_default.png)
- duplicates were created because the rotation is noisy, we round it to get rid of the noise - add location_id to loose loot which can be used to check after generation if a duplicate was created when there are items with significantly differing rotation on the same location
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
- Install python 3.9 https://www.python.org/downloads/release/python-3910/ to your preferred path
- 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