mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-31 20:53:34 +00:00
57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
import sys
|
|
import time
|
|
|
|
from avulto import DME, Dmlist
|
|
from avulto.ast import Prefab
|
|
|
|
|
|
def print_prefab(prefab: Prefab) -> str:
|
|
if not prefab.vars:
|
|
return prefab.path
|
|
|
|
prefab_vars = []
|
|
for kv in prefab.vars:
|
|
nameval = list(kv.items())
|
|
prefab_vars.append(f"{nameval[0][0]} = {nameval[0][1]}")
|
|
|
|
return f"{prefab.path}{{{', '.join(prefab_vars)}}}"
|
|
|
|
def check_list_items(dmlist: Dmlist, invalid_items: list) -> list:
|
|
for item in dmlist:
|
|
if isinstance(item, Dmlist):
|
|
return check_list_items(item, invalid_items)
|
|
if isinstance(item, Prefab) and item.vars:
|
|
invalid_items.append(item)
|
|
|
|
return invalid_items
|
|
|
|
if __name__ == "__main__":
|
|
print("check_random_spawner_prefabs started")
|
|
|
|
exit_code = 0
|
|
start = time.time()
|
|
|
|
dme = DME.from_file("paradise.dme")
|
|
prefabs_by_spawner = {}
|
|
|
|
for pth in dme.subtypesof("/obj/effect/spawner/random"):
|
|
invalid_items = []
|
|
td = dme.types[pth]
|
|
loot = td.var_decl("loot").const_val
|
|
if not loot:
|
|
continue
|
|
if result := check_list_items(loot, invalid_items):
|
|
prefabs_by_spawner[pth] = result
|
|
|
|
if prefabs_by_spawner:
|
|
exit_code = 1
|
|
|
|
for pth, items in prefabs_by_spawner.items():
|
|
result_list = "\n".join(sorted([f"- {print_prefab(item)}" for item in items if isinstance(item, Prefab)]))
|
|
print(f"{pth} contains prefabs. Please convert these to subtypes:\n{result_list}")
|
|
|
|
end = time.time()
|
|
print(f"check_random_spawner_prefabs tests completed in {end - start:.2f}s\n")
|
|
|
|
sys.exit(exit_code)
|