54 lines
2.3 KiB
GDScript
54 lines
2.3 KiB
GDScript
extends SceneTree
|
|
const Bridge = preload("res://entry/battle_sim_bridge.gd")
|
|
const CR = preload("res://p10_0/content_registry.gd")
|
|
const ContractRun = preload("res://domain/contract_run.gd")
|
|
|
|
func _initialize() -> void:
|
|
call_deferred("_run")
|
|
|
|
func _run() -> void:
|
|
var catalog: Dictionary = CR.snapshot()
|
|
var enemy_ids: Array = []
|
|
for row in Array(catalog.get("enemies", [])):
|
|
if int(Dictionary(row).get("region", 0)) == 8:
|
|
enemy_ids.append(str(Dictionary(row).get("id", "")))
|
|
var meta := {}
|
|
for eid in enemy_ids:
|
|
meta[eid] = {"class": "elite", "level": 23}
|
|
var professions := ["PF-B01", "PF-B02", "PF-B05", "PF-B04", "PF-B03", "PF-B09", "PF-B08", "PF-B07", "PF-B06"]
|
|
var recruits: Array = []
|
|
var pool := {"front": [], "rear": []}
|
|
for row in Array(catalog.get("equipment", [])):
|
|
var entry: Dictionary = Dictionary(row)
|
|
var fit := str(entry.get("fit", "any")).to_lower()
|
|
var key := "front" if fit.contains("front") else ("rear" if fit.contains("rear") else "")
|
|
if key != "" and Array(pool[key]).size() < 3:
|
|
pool[key].append(str(entry.get("id", "")))
|
|
for index in range(professions.size()):
|
|
var fit := "front" if index < 5 else "rear"
|
|
recruits.append({"recruit_id": "R-%d" % (index+1), "profession_id": professions[index], "level": 23, "trait_id": "",
|
|
"might": 31, "finesse": 30, "insight": 29, "vigor": 32, "resolve": 30,
|
|
"equipped_item_id": str(Array(pool[fit])[0])})
|
|
var formation: Array = []
|
|
for recruit in recruits:
|
|
formation.append(str(Dictionary(recruit).get("recruit_id", "")))
|
|
var encounter := ContractRun.ordinary_encounter(8, enemy_ids, 12, 0, 10)
|
|
var ids: Array = []
|
|
for entry in encounter:
|
|
ids.append(str(Dictionary(entry).get("enemy_id", "")))
|
|
print("encounter: ", ", ".join(ids))
|
|
var result: Dictionary = Bridge.run("dbg-late", formation, recruits, ids, 8, meta)
|
|
print("outcome=%s ticks=%s" % [str(result.get("outcome")), str(result.get("ticks"))])
|
|
var seen := {}
|
|
for record in Array(result.get("journal", [])):
|
|
var entry: Dictionary = Dictionary(record)
|
|
var key := "%s:%s:%s" % [str(entry.get("side")), str(entry.get("actor")), str(entry.get("action"))]
|
|
if str(entry.get("kind", "")) == "damage":
|
|
var dmg_key := "DMG " + key + " amount=" + str(entry.get("amount"))
|
|
seen[dmg_key] = int(seen.get(dmg_key, 0)) + 1
|
|
var keys: Array = seen.keys()
|
|
keys.sort()
|
|
for k in keys.slice(0, 25):
|
|
print(k)
|
|
quit(0)
|