feat: Add loot builder backend + static data + DB migration
All checks were successful
Build Companion Agent / build (push) Successful in 26s
Test Asgard Runner / test (push) Successful in 3s

- Migration 013: loot_profiles table (JSONB loot_table + loot_groups, license-scoped)
- TypeORM entity matching migration schema exactly
- NestJS loot module: 10 endpoints (CRUD, duplicate, apply, import, export, containers)
- Multiplier logic recursively scales Min/Max/Scrap across loot tables and groups
- Apply-to-server writes BetterLoot JSON via NATS file manager + RCON reload
- Frontend static data: 191 Rust items, 51 container prefabs
- TypeScript types for BetterLoot data model (PrefabLoot, LootEntry, LootRNG, etc.)
- Fix vue-tsc errors: UngroupedItems uses LootRNG, null safety in store/view

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Vantz Stockwell
2026-02-22 00:30:11 -05:00
parent 9d28fdfb65
commit 759bd0be2e
16 changed files with 971 additions and 3 deletions

View File

@@ -26,7 +26,7 @@ const multipliers = [1, 2, 5, 10]
onMounted(async () => {
await loot.fetchProfiles()
if (loot.profiles.length > 0) {
if (loot.profiles.length > 0 && loot.profiles[0]) {
await loot.loadProfile(loot.profiles[0].id)
}
})
@@ -110,7 +110,7 @@ function handleAddItem(shortname: string) {
ItemSettings: { ItemsMin: 1, ItemsMax: 6, MinScrap: 0, MaxScrap: 0 },
}
}
const container = table[loot.selectedContainer]
const container = table[loot.selectedContainer]!
if (!container.UngroupedItems) container.UngroupedItems = {}
if (!container.UngroupedItems[shortname]) {
container.UngroupedItems[shortname] = {