diff --git a/src/character/character.service.ts b/src/character/character.service.ts index 3925f58..7446b67 100644 --- a/src/character/character.service.ts +++ b/src/character/character.service.ts @@ -11,6 +11,7 @@ import { LevelThreshold } from './entities/level-threshold.entity'; import { CreateCharacterDto } from './dto/create-character.dto'; import { DistributeStatsDto } from './dto/distribute-stats.dto'; import { User } from '../user/user.entity'; +import { xpRequiredForLevel } from '../combat/combat.engine'; const STAT_POOL = 10; // 5 stats × 1 base + 5 points à distribuer const ENDURANCE_REGEN_MINUTES = 6; // 1 pt d'endurance toutes les 6 min = 10 pts/heure @@ -35,7 +36,7 @@ export class CharacterService { return Math.min(character.enduranceSaved + recharge, character.enduranceMax); } - async create(dto: CreateCharacterDto, user: User): Promise { + async create(dto: CreateCharacterDto, user: User) { const totalStats = dto.force + dto.agilite + dto.intelligence + dto.chance + dto.vitalite; @@ -66,10 +67,14 @@ export class CharacterService { }); const saved = await this.characterRepository.save(character); - return { ...saved, enduranceCurrent: this.calculateEndurance(saved) }; + return { + ...saved, + enduranceCurrent: this.calculateEndurance(saved), + xpToNextLevel: xpRequiredForLevel(saved.level), + }; } - async findByUser(user: User): Promise { + async findByUser(user: User) { const character = await this.characterRepository.findOne({ where: { userId: user.id }, }); @@ -78,7 +83,11 @@ export class CharacterService { throw new NotFoundException('Aucun personnage trouvé pour ce joueur'); } - return { ...character, enduranceCurrent: this.calculateEndurance(character) }; + return { + ...character, + enduranceCurrent: this.calculateEndurance(character), + xpToNextLevel: xpRequiredForLevel(character.level), + }; } async getEndurance( diff --git a/src/combat/combat.engine.ts b/src/combat/combat.engine.ts index 96b8c55..6eb5f09 100644 --- a/src/combat/combat.engine.ts +++ b/src/combat/combat.engine.ts @@ -181,9 +181,10 @@ export function applyXpGain(currentLevel: number, currentXp: number, xpEarned: n let xp = currentXp + xpEarned; let statPointsGained = 0; - // Chaîne de level up + // Chaîne de level up — seuil basé sur le niveau actuel + // Level 1→2 = 100 XP, Level 2→3 = 283 XP, Level 10→11 = 3162 XP while (level < 100) { - const required = xpRequiredForLevel(level + 1); + const required = xpRequiredForLevel(level); if (xp >= required) { xp -= required; level++; diff --git a/src/combat/combat.service.ts b/src/combat/combat.service.ts index 550b806..db8ede2 100644 --- a/src/combat/combat.service.ts +++ b/src/combat/combat.service.ts @@ -14,6 +14,7 @@ import { CommunityService } from '../community/community.service'; import { resolveCombat, applyXpGain, + xpRequiredForLevel, CombatantStats, } from './combat.engine'; @@ -237,6 +238,7 @@ export class CombatService { character: { level: character.level, xp: character.xp, + xpToNextLevel: xpRequiredForLevel(character.level), gold: character.gold, hpCurrent: character.hpCurrent, hpMax: character.hpMax,