DCSOlympus/scripts/python/addRanges.py
2025-08-16 17:09:32 +02:00

65 lines
2.3 KiB
Python

import sys
import json
import inspect
import difflib
from slpp import slpp as lua
SEARCH_FOLDER = sys.argv[2]
from dcs.vehicles import *
from dcs.ships import *
from dcs.planes import *
from dcs.helicopters import *
# The database file on which to operate is the first standard argument of the call
if len(sys.argv) > 1:
if (sys.argv[1] == "aircraft"):
filename = '..\\..\\databases\\units\\aircraftdatabase.json'
elif (sys.argv[1] == "helicopter"):
filename = '..\\..\\databases\\units\\helicopterdatabase.json'
elif (sys.argv[1] == "groundunit"):
filename = '..\\..\\databases\\units\\groundunitdatabase.json'
elif (sys.argv[1] == "navyunit"):
filename = '..\\..\\databases\\units\\navyunitdatabase.json'
# Loads the database
with open(filename) as f:
database = json.load(f)
# Loop on all the units in the database
for unit_name in database:
try:
# Get the pydcs Python class for the unit
if (sys.argv[1] == "aircraft"):
unitmap = plane_map
elif (sys.argv[1] == "helicopter"):
unitmap = helicopter_map
elif (sys.argv[1] == "groundunit"):
unitmap = vehicle_map
elif (sys.argv[1] == "navyunit"):
unitmap = ship_map
lowercase_keys = [key.lower() for key in unitmap.keys()]
res = difflib.get_close_matches(unit_name.lower(), lowercase_keys)
if len(res) > 0:
found_name = list(unitmap.keys())[lowercase_keys.index(res[0])]
cls = unitmap[found_name]
else:
print(f"Warning, could not find {unit_name} in classes list. Skipping...")
continue
if not "acquisitionRange" in database[unit_name]:
database[unit_name]["acquisitionRange"] = unitmap[found_name].detection_range
if not "engagementRange" in database[unit_name]:
database[unit_name]["engagementRange"] = unitmap[found_name].threat_range
except Exception as e:
print(f"Could not find data for unitof type {unit_name}: {e}, skipping...")
# Dump everything in the database
with open(filename, "w", encoding='utf8') as f:
json.dump(database, f, indent='\t', ensure_ascii=False)
# Done!
print("Done!")