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

@@ -17,7 +17,6 @@ export interface SeedItemDefinition {
equipmentSlot: EquipmentSlot | null;
rarity: ItemRarity;
tier: number;
requiredLevel: number;
weaponDamage: number;
bonusHp: number;
bonusAttack: number;
@@ -33,7 +32,12 @@ function item(
type: ItemType,
equipmentSlot: EquipmentSlot | null,
rarity: ItemRarity,
stats: Partial<Pick<SeedItemDefinition, 'weaponDamage' | 'bonusHp' | 'bonusAttack' | 'bonusArmor'>> = {},
stats: Partial<
Pick<
SeedItemDefinition,
'weaponDamage' | 'bonusHp' | 'bonusAttack' | 'bonusArmor'
>
> = {},
): SeedItemDefinition {
return {
id: ITEM_IDS[key],
@@ -44,7 +48,6 @@ function item(
equipmentSlot,
rarity,
tier: 1,
requiredLevel: 1,
weaponDamage: stats.weaponDamage ?? 0,
bonusHp: stats.bonusHp ?? 0,
bonusAttack: stats.bonusAttack ?? 0,
@@ -62,7 +65,7 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
'worn-short-sword',
'Abgenutztes Kurzschwert',
'Die Klinge eines Rekruten, öfter geschliffen als geführt.',
ItemType.WEAPON,
ItemType.EQUIPMENT,
EquipmentSlot.WEAPON,
ItemRarity.COMMON,
{ weaponDamage: 8 },
@@ -71,7 +74,7 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
'bandit-blade',
'Räuberklinge',
'Eine grob gezahnte Klinge, geschmiedet für schnelle Überfälle.',
ItemType.WEAPON,
ItemType.EQUIPMENT,
EquipmentSlot.WEAPON,
ItemRarity.COMMON,
{ weaponDamage: 11, bonusAttack: 1 },
@@ -80,7 +83,7 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
'ash-blade',
'Aschenklinge',
'In der Glut der Aschenfelder gehärtet; die Schneide glimmt noch.',
ItemType.WEAPON,
ItemType.EQUIPMENT,
EquipmentSlot.WEAPON,
ItemRarity.RARE,
{ weaponDamage: 15, bonusAttack: 2 },
@@ -89,7 +92,7 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
'bandit-hood',
'Räuberhaube',
'Vernarbtes Leder, das Gesicht und Absicht des Trägers verbirgt.',
ItemType.ARMOR,
ItemType.EQUIPMENT,
EquipmentSlot.HEAD,
ItemRarity.COMMON,
{ bonusArmor: 3, bonusHp: 5 },
@@ -98,7 +101,7 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
'reinforced-leather-jacket',
'Verstärkte Lederjacke',
'Mit Eisenplatten benähtes Leder, schwer und verlässlich.',
ItemType.ARMOR,
ItemType.EQUIPMENT,
EquipmentSlot.CHEST,
ItemRarity.RARE,
{ bonusArmor: 7, bonusHp: 10 },
@@ -107,7 +110,7 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
'raider-gloves',
'Plündererhandschuhe',
'Beschlagene Handschuhe, abgegriffen von fremdem Gut.',
ItemType.ARMOR,
ItemType.EQUIPMENT,
EquipmentSlot.HANDS,
ItemRarity.COMMON,
{ bonusArmor: 3, bonusAttack: 1 },
@@ -116,7 +119,7 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
'guardsman-legs',
'Wachmannsbeinkleid',
'Beinzeug der Grenzwacht, an den Knien geflickt.',
ItemType.ARMOR,
ItemType.EQUIPMENT,
EquipmentSlot.LEGS,
ItemRarity.RARE,
{ bonusArmor: 5, bonusHp: 5 },
@@ -125,7 +128,7 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
'ash-boots',
'Aschenstiefel',
'Stiefel, die durch glimmende Felder getragen wurden und blieben.',
ItemType.ARMOR,
ItemType.EQUIPMENT,
EquipmentSlot.FEET,
ItemRarity.RARE,
{ bonusArmor: 4, bonusHp: 5 },
@@ -134,7 +137,7 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
'borderwatch-sigil',
'Zeichen der Grenzwacht',
'Das Wappen eines Turms, den es nicht mehr gibt.',
ItemType.ARMOR,
ItemType.EQUIPMENT,
EquipmentSlot.AMULET,
ItemRarity.RARE,
{ bonusAttack: 3, bonusHp: 10 },
@@ -143,7 +146,7 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
'burned-captain-pendant',
'Anhänger des verbrannten Hauptmanns',
'Ein Schädel aus Schlacke, in dem die Glut nie erlosch.',
ItemType.ARMOR,
ItemType.EQUIPMENT,
EquipmentSlot.AMULET,
ItemRarity.EPIC,
{ bonusAttack: 3, bonusHp: 15, bonusArmor: 2 },
@@ -158,11 +161,21 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
null,
ItemRarity.COMMON,
),
// A Trade Good (spec §17): turned in to the Grenzwacht for Silver and
// reputation rather than crafted with.
item(
'ash-pelt',
'Aschenfell',
'Versengtes Fell, zäh wie Leder und grau von Ascheflug.',
ItemType.MATERIAL,
ItemType.TRADE_GOOD,
null,
ItemRarity.COMMON,
),
item(
'bandit-insignia',
'Räuberabzeichen',
'Ein grob geprägtes Zeichen, das einen Straßenräuber als Mitglied seiner Bande auswies.',
ItemType.TROPHY,
null,
ItemRarity.COMMON,
),
@@ -170,7 +183,11 @@ export const ITEM_DEFINITIONS: SeedItemDefinition[] = [
export const LOOT_TABLES = [
{ id: ASH_RAT_LOOT_TABLE_ID, key: 'ash-rat-loot', name: 'Aschenratte Beute' },
{ id: ROAD_BANDIT_LOOT_TABLE_ID, key: 'road-bandit-loot', name: 'Straßenräuber Beute' },
{
id: ROAD_BANDIT_LOOT_TABLE_ID,
key: 'road-bandit-loot',
name: 'Straßenräuber Beute',
},
];
export interface SeedLootTableEntry {
@@ -213,4 +230,5 @@ export const LOOT_TABLE_ENTRIES: SeedLootTableEntry[] = [
entry(ROAD_BANDIT_LOOT_TABLE_ID, 'bandit-blade', 1, '0.1800'),
entry(ROAD_BANDIT_LOOT_TABLE_ID, 'bandit-hood', 2, '0.1200'),
entry(ROAD_BANDIT_LOOT_TABLE_ID, 'raider-gloves', 3, '0.0800'),
entry(ROAD_BANDIT_LOOT_TABLE_ID, 'bandit-insignia', 4, '0.4000'),
];