feat: Sprint 2 — moteur de combat PvE TetaRdPG
Moteur combat stateless (POST /api/combat/start résout le combat complet). Formules GDD : Mêlée/Distance/Magie × 1.5, critique (5% + Chance×0.2%), esquive (5% + Chance×0.1%). 5 monstres seedés (Têtard Vase → Golem de Boue, level 1–9). Level up : XP → seuil atteint → level++, +5 statPoints. Persiste combat_logs (jsonb rounds). Validé : victoire, défaite, 401, 400, 404.
This commit is contained in:
39
src/monster/monster.entity.ts
Normal file
39
src/monster/monster.entity.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
|
||||
|
||||
export type AttackType = 'melee' | 'ranged' | 'magic';
|
||||
|
||||
@Entity('monsters')
|
||||
export class Monster {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@Column({ length: 100 })
|
||||
name: string;
|
||||
|
||||
@Column({ name: 'min_level' })
|
||||
minLevel: number;
|
||||
|
||||
@Column({ name: 'max_level' })
|
||||
maxLevel: number;
|
||||
|
||||
@Column()
|
||||
hp: number;
|
||||
|
||||
@Column()
|
||||
attack: number;
|
||||
|
||||
@Column({ default: 0 })
|
||||
defense: number;
|
||||
|
||||
@Column({ name: 'attack_type', type: 'varchar', length: 20 })
|
||||
attackType: AttackType;
|
||||
|
||||
@Column({ name: 'xp_reward' })
|
||||
xpReward: number;
|
||||
|
||||
@Column({ name: 'gold_min' })
|
||||
goldMin: number;
|
||||
|
||||
@Column({ name: 'gold_max' })
|
||||
goldMax: number;
|
||||
}
|
||||
Reference in New Issue
Block a user