feat: Combat tour par tour — Phases A-D complètes
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.
This commit is contained in:
35
src/combat/turn/player-spell.entity.ts
Normal file
35
src/combat/turn/player-spell.entity.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user