feat(content): migrate ItemType, seed Räuberabzeichen/Grenzwacht/turn-ins, zero direct monster rewards

This commit is contained in:
Bastian Wagner
2026-08-21 13:49:49 +02:00
parent 413fafd574
commit dce26e00ad
6 changed files with 208 additions and 47 deletions

View File

@@ -16,7 +16,13 @@ import { LocationMonster } from '../../monsters/entities/location-monster.entity
import { MonsterDefinition } from '../../monsters/entities/monster-definition.entity';
import { LocationConnection } from '../../world/entities/location-connection.entity';
import { LocationDefinition } from '../../world/entities/location-definition.entity';
import { ITEM_DEFINITIONS, LOOT_TABLES, LOOT_TABLE_ENTRIES } from './item-content';
import { ReputationFaction } from '../../reputation/entities/reputation-faction.entity';
import { TurnInDefinition } from '../../turn-in/entities/turn-in-definition.entity';
import {
ITEM_DEFINITIONS,
LOOT_TABLES,
LOOT_TABLE_ENTRIES,
} from './item-content';
import {
ASH_RAT_LOOT_TABLE_ID,
ITEM_IDS,
@@ -26,6 +32,8 @@ import {
BURNED_ROAD_LOCAL_CONTENT,
SOUTH_GATE_LOCAL_CONTENT,
} from './local-location.content';
import { REPUTATION_FACTIONS } from './reputation-content';
import { TURN_IN_DEFINITIONS } from './turn-in-content';
import {
ASH_RAT_MONSTER_ID,
BURNED_ROAD_ID,
@@ -46,6 +54,9 @@ export async function seedVisibleVerticalSlice(
const itemRepository = dataSource.getRepository(ItemDefinition);
const lootTableRepository = dataSource.getRepository(LootTable);
const lootEntryRepository = dataSource.getRepository(LootTableEntry);
const reputationFactionRepository =
dataSource.getRepository(ReputationFaction);
const turnInDefinitionRepository = dataSource.getRepository(TurnInDefinition);
const locations = [
{
@@ -125,6 +136,8 @@ export async function seedVisibleVerticalSlice(
'lootTableId',
'itemDefinitionId',
]);
await reputationFactionRepository.upsert(REPUTATION_FACTIONS, ['key']);
await turnInDefinitionRepository.upsert(TURN_IN_DEFINITIONS, ['key']);
const monsters = [
{
@@ -135,9 +148,8 @@ export async function seedVisibleVerticalSlice(
maxHp: 45,
attack: 5,
armor: 0,
experienceReward: 8,
silverMin: 4,
silverMax: 7,
silverMin: 0,
silverMax: 0,
artworkPath: '/images/monsters/ash-rat.png',
iconPath: '/images/combat/icons/ash-rat-128.png',
lootTableId: ASH_RAT_LOOT_TABLE_ID,
@@ -150,9 +162,8 @@ export async function seedVisibleVerticalSlice(
maxHp: 55,
attack: 7,
armor: 0,
experienceReward: 11,
silverMin: 5,
silverMax: 9,
silverMin: 0,
silverMax: 0,
artworkPath: '/images/monsters/wild-road-dog.png',
iconPath: '/images/combat/icons/wild-road-dog-128.png',
// Shares the beast table: both are scorched road animals that leave a
@@ -167,9 +178,8 @@ export async function seedVisibleVerticalSlice(
maxHp: 75,
attack: 9,
armor: 5,
experienceReward: 16,
silverMin: 9,
silverMax: 15,
silverMin: 0,
silverMax: 0,
artworkPath: '/images/monsters/road-bandit.png',
iconPath: '/images/combat/icons/road-bandit-128.png',
lootTableId: ROAD_BANDIT_LOOT_TABLE_ID,
@@ -182,9 +192,8 @@ export async function seedVisibleVerticalSlice(
maxHp: 85,
attack: 11,
armor: 6,
experienceReward: 20,
silverMin: 12,
silverMax: 19,
silverMin: 0,
silverMax: 0,
artworkPath: '/images/monsters/charred-looter.png',
iconPath: '/images/combat/icons/charred-looter-128.png',
// Shares the raider table: same gear, taken from the same caravans.
@@ -237,8 +246,7 @@ export async function seedVisibleVerticalSlice(
await characterRepository.insert({
id: DEMO_CHARACTER_ID,
name: 'Aric Duskwalker',
level: 1,
experience: 0,
renown: 1,
silver: 0,
baseHp: 100,
baseAttack: 6,
@@ -248,7 +256,8 @@ export async function seedVisibleVerticalSlice(
}
const characterItemRepository = dataSource.getRepository(CharacterItem);
const characterEquipmentRepository = dataSource.getRepository(CharacterEquipment);
const characterEquipmentRepository =
dataSource.getRepository(CharacterEquipment);
// Starting loadout is weapon-only -- no starter armor piece exists in
// content yet -- so the demo character's effective armor (sum of equipped