TurnManager stateless avec sessions en mémoire (TTL 10min). SpellSystem : 15 sorts (5 par voie du Dao), mana, cooldowns, buffs/debuffs. CompanionAI : Mira (heal/support) et Vell (tank/dps) — IA contextuelle. Monster AI : 3 profils (agressif, défensif, chaotique). Nouvelles entités : Spell, PlayerSpell, PlayerDaoPath. Character +mana. Monster +aiProfile +isBoss. Migration : 1743004800000-TurnCombatSystem. Frontend : TurnCombatPage (select/combat/result), sélecteur compagnon, barres HP/MP, log scrollable, sous-menu sorts avec cooldowns. Endpoints : 8 routes sous /combat/turn/ (start, action, session, spells, unlocked, unlock, dao, dao/choose). Combat simple (POST /combat/start) et grind ×5/×10 inchangés.
36 lines
732 B
TypeScript
36 lines
732 B
TypeScript
import {
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
Column,
|
|
ManyToOne,
|
|
JoinColumn,
|
|
CreateDateColumn,
|
|
Unique,
|
|
} from 'typeorm';
|
|
import { Character } from '../../character/entities/character.entity';
|
|
import { Spell } from './spell.entity';
|
|
|
|
@Entity('player_spells')
|
|
@Unique(['characterId', 'spellId'])
|
|
export class PlayerSpell {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@Column({ name: 'character_id' })
|
|
characterId: string;
|
|
|
|
@ManyToOne(() => Character)
|
|
@JoinColumn({ name: 'character_id' })
|
|
character: Character;
|
|
|
|
@Column({ name: 'spell_id' })
|
|
spellId: string;
|
|
|
|
@ManyToOne(() => Spell)
|
|
@JoinColumn({ name: 'spell_id' })
|
|
spell: Spell;
|
|
|
|
@CreateDateColumn({ name: 'unlocked_at' })
|
|
unlockedAt: Date;
|
|
}
|