From 4d82346af414d4750314343a781b4f9b9f3ef100 Mon Sep 17 00:00:00 2001 From: Tetardtek Date: Wed, 25 Mar 2026 01:36:03 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20qu=C3=AAtes=20transition=20Acte=20I?= =?UTF-8?q?=E2=86=92II=20+=20minLevel=20arc=20Ruisseau=2013?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/database/odyssee-quests-seed.ts | 32 +++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/database/odyssee-quests-seed.ts b/src/database/odyssee-quests-seed.ts index f20e1f8..02c04fb 100644 --- a/src/database/odyssee-quests-seed.ts +++ b/src/database/odyssee-quests-seed.ts @@ -34,7 +34,7 @@ export async function seedOdysseeQuests(dataSource: DataSource) { description: 'Gorn en parlait : un ruisseau qui montre ce qu\'on ne veut pas voir. Mira, Vell et toi devez l\'affronter ensemble.', zone: 'ruisseau_miroir', sortOrder: 4, - minLevel: 15, + minLevel: 13, })); } @@ -53,7 +53,7 @@ export async function seedOdysseeQuests(dataSource: DataSource) { arcId: arc4.id, arcOrder: 1, zone: null as string | null, - minLevel: 15, + minLevel: 13, repeatable: false, }, { @@ -70,7 +70,7 @@ export async function seedOdysseeQuests(dataSource: DataSource) { arcId: arc4.id, arcOrder: 2, zone: 'ruisseau_miroir', - minLevel: 15, + minLevel: 13, repeatable: false, }, { @@ -401,11 +401,27 @@ export async function seedOdysseeQuests(dataSource: DataSource) { } } - // Quêtes répétables (grind léger entre les arcs — optionnel, pas obligatoire pour l'histoire) + // Quêtes de transition — découverte des premiers monstres (bridge Acte I → Acte II) + const transitionQuests = [ + { name: 'Au-delà de l\'Étang', description: 'L\'eau change. Des reflets étranges dansent à la surface du Ruisseau. Affrontez votre premier Reflet Sombre.', objectiveType: 'kill_monster', objectiveTargetId: m.get('Reflet Sombre'), objectiveCount: 1, rewardXp: 400, rewardGold: 200, zone: 'ruisseau_miroir', minLevel: 13 }, + { name: 'Les Cristaux du Ruisseau', description: 'Des insectes de cristal patrouillent les rives. Éliminez 3 Gerris de Cristal.', objectiveType: 'kill_monster', objectiveTargetId: m.get('Gerris de Cristal'), objectiveCount: 3, rewardXp: 500, rewardGold: 250, zone: 'ruisseau_miroir', minLevel: 13 }, + { name: 'Explorateur du Miroir', description: 'Le Ruisseau regorge de créatures inconnues. Remportez 5 combats dans cette zone.', objectiveType: 'kill_any', objectiveTargetId: null, objectiveCount: 5, rewardXp: 600, rewardGold: 300, zone: 'ruisseau_miroir', minLevel: 13 }, + { name: 'Éclats de Vérité', description: 'Les créatures du Ruisseau laissent tomber des éclats brillants. Récoltez 3 Éclats de Miroir.', objectiveType: 'gather_material', objectiveTargetId: mat.get('Éclat de Miroir'), objectiveCount: 3, rewardXp: 500, rewardGold: 250, zone: 'ruisseau_miroir', minLevel: 13 }, + ]; + + for (const q of transitionQuests) { + const existing = await questRepo.findOne({ where: { name: q.name } }); + if (!existing) { + await questRepo.save(questRepo.create({ ...q, rewardTitle: null, arcId: null, arcOrder: 0, repeatable: false, acceptText: null, completeText: null })); + questsAdded++; + } + } + + // Quêtes répétables (grind léger entre les arcs — optionnel) const dailyQuests = [ - { name: 'Éclats quotidiens', description: 'Récoltez des Éclats de Miroir dans le Ruisseau.', objectiveType: 'gather_material', objectiveTargetId: mat.get('Éclat de Miroir'), objectiveCount: 3, rewardXp: 300, rewardGold: 150, zone: 'ruisseau_miroir', minLevel: 16 }, - { name: 'Brumes du jour', description: 'Récoltez de la Mousse Murmurante dans le Marais.', objectiveType: 'gather_material', objectiveTargetId: mat.get('Mousse Murmurante'), objectiveCount: 2, rewardXp: 400, rewardGold: 200, zone: 'marais_murmures', minLevel: 19 }, - { name: 'Pierres du Torrent', description: 'Récoltez des Pierres de Torrent.', objectiveType: 'gather_material', objectiveTargetId: mat.get('Pierre de Torrent'), objectiveCount: 2, rewardXp: 500, rewardGold: 250, zone: 'torrent_brise', minLevel: 22 }, + { name: 'Éclats quotidiens', description: 'Récoltez des Éclats de Miroir dans le Ruisseau.', objectiveType: 'gather_material', objectiveTargetId: mat.get('Éclat de Miroir'), objectiveCount: 3, rewardXp: 300, rewardGold: 150, zone: 'ruisseau_miroir', minLevel: 13 }, + { name: 'Brumes du jour', description: 'Récoltez de la Mousse Murmurante dans le Marais.', objectiveType: 'gather_material', objectiveTargetId: mat.get('Mousse Murmurante'), objectiveCount: 2, rewardXp: 400, rewardGold: 200, zone: 'marais_murmures', minLevel: 16 }, + { name: 'Pierres du Torrent', description: 'Récoltez des Pierres de Torrent.', objectiveType: 'gather_material', objectiveTargetId: mat.get('Pierre de Torrent'), objectiveCount: 2, rewardXp: 500, rewardGold: 250, zone: 'torrent_brise', minLevel: 19 }, ]; for (const q of dailyQuests) { @@ -416,5 +432,5 @@ export async function seedOdysseeQuests(dataSource: DataSource) { } } - console.log(`✅ Odyssée: ${questsAdded} quêtes (4 arcs narratifs + ${dailyQuests.length} répétables)`); + console.log(`✅ Odyssée: ${questsAdded} quêtes (4 arcs + ${transitionQuests.length} transition + ${dailyQuests.length} répétables)`); }