UNPKG

dungeon-sdk-drikkx

Version:

Shared types and entities for the Dungeon game

107 lines (93 loc) 2.5 kB
import { CharacterInDungeon, ResourcesType } from './character.types'; import { Stats } from './stats.types'; export type ActionType = 'attack' | 'combo' | 'special' | 'item'; export interface CombatContext { turnNumber: number; roomIndex: number; waveIndex: number; dungeonId: string; } export interface Action { type: ActionType; actor: string; // ID de l'entité qui effectue l'action targets: string[]; // IDs des cibles value: number; // Dégâts/Soins/etc effects?: StatusEffect[]; } export interface StatusEffect { type: 'buff' | 'debuff' | 'dot' | 'hot'; stat: keyof Stats; value: number; duration: number; source: string; // ID de la source de l'effet } export interface TurnInfo { round: number; activeEntity: string; availableActions: ActionType[]; timeline: string[]; // Ordre des tours } export interface TargetingCriteria { healthThreshold?: number; preferredTargets?: string[]; excludedTargets?: string[]; targetCount: number; targetCondition?: (target: CharacterInDungeon) => boolean; } export interface ActionConditions { resourceCost?: number; resourceType?: ResourcesType; cooldown?: boolean; customCondition?: (character: CharacterInDungeon) => boolean; } export interface ActionStrategy { type: CombatActionType; conditions: ActionConditions; targeting: TargetingCriteria; priority: number; } export enum CombatActionType { ATTACK = 'attack', HEAL = 'heal', ITEM = 'item', COMBO = 'combo', SPECIAL = 'special', DEATH = 'death', WAVE_COMPLETE = 'wave_complete', ROOM_COMPLETE = 'room_complete', DUNGEON_COMPLETE = 'dungeon_complete', DUNGEON_FAILED = 'dungeon_failed' } export interface CombatResources { health: number; maxHealth: number; mana: number; maxMana: number; } export interface CombatRewards { experience?: number; gold?: number; items?: string[]; } export interface CombatAction { type: CombatActionType; sourceId: string; targetId?: string; damage?: number; isCritical?: boolean; timestamp?: Date; resources?: CombatResources; effects?: string[]; rewards?: CombatRewards; turnNumber: number; roomNumber: number; waveNumber: number; dungeonId: string; } export interface CombatTurn { turnNumber: number; roomNumber: number; waveNumber: number; actions: CombatAction[]; timestamp: Date; }