Files
Genarrative/src/types/items.ts
kdletters cbc27bad4a
Some checks failed
CI / verify (push) Has been cancelled
init with react+axum+spacetimedb
2026-04-26 18:06:23 +08:00

111 lines
2.8 KiB
TypeScript

import type {AttributeVector, ItemAttributeResonance} from './attributes';
import type {TimedBuildBuff} from './build';
import {
type EquipmentSlotId,
type ItemRarity,
type ItemWorldAffinity,
WorldType,
} from './core';
import type {RuntimeItemMetadata} from './runtimeItem';
export interface InventoryItem {
id: string;
category: string;
name: string;
quantity: number;
rarity: ItemRarity;
tags: string[];
catalogId?: string;
iconSrc?: string;
description?: string;
worldAffinity?: ItemWorldAffinity;
equipmentSlotId?: EquipmentSlotId | null;
worldProfiles?: Partial<Record<WorldType, ItemWorldProfile>>;
statProfile?: ItemStatProfile | null;
useProfile?: ItemUseProfile | null;
buildProfile?: ItemBuildProfile | null;
value?: number;
attributeResonance?: ItemAttributeResonance | null;
runtimeMetadata?: RuntimeItemMetadata | null;
}
export interface MonsterLootEntry {
id: string;
item: InventoryItem;
dropRate: number;
}
export interface ItemCatalogEntry {
id: string;
sourcePath: string;
iconSrc: string;
name: string;
category: string;
rarity: ItemRarity;
tags: string[];
description: string;
worldAffinity: ItemWorldAffinity;
equipmentSlotId?: EquipmentSlotId | null;
worldProfiles?: Partial<Record<WorldType, ItemWorldProfile>>;
statProfile?: ItemStatProfile | null;
useProfile?: ItemUseProfile | null;
buildProfile?: ItemBuildProfile | null;
value?: number;
attributeResonance?: ItemAttributeResonance | null;
runtimeMetadata?: RuntimeItemMetadata | null;
}
export interface ItemCatalogOverride {
name?: string;
category?: string;
rarity?: ItemRarity;
tags?: string[];
description?: string;
worldAffinity?: ItemWorldAffinity;
equipmentSlotId?: EquipmentSlotId | null;
worldProfiles?: Partial<Record<WorldType, ItemWorldProfile>>;
statProfile?: ItemStatProfile | null;
useProfile?: ItemUseProfile | null;
buildProfile?: ItemBuildProfile | null;
value?: number;
attributeResonance?: ItemAttributeResonance | null;
runtimeMetadata?: RuntimeItemMetadata | null;
}
export interface ItemWorldProfile {
name: string;
description: string;
}
export interface ItemStatProfile {
maxHpBonus?: number;
maxManaBonus?: number;
outgoingDamageBonus?: number;
incomingDamageMultiplier?: number;
}
export interface ItemUseProfile {
hpRestore?: number;
manaRestore?: number;
cooldownReduction?: number;
buildBuffs?: TimedBuildBuff[];
}
export interface ItemBuildProfile {
role: string;
tags: string[];
setId?: string;
setName?: string;
pieceName?: string;
synergy?: string[];
craftTags?: string[];
forgeRank?: number;
resonanceVector?: AttributeVector;
}
export interface EquipmentLoadout {
weapon: InventoryItem | null;
armor: InventoryItem | null;
relic: InventoryItem | null;
}