From eecab6d76a628ff95f11c70e5a159df3c0969e89 Mon Sep 17 00:00:00 2001 From: xziino Date: Sun, 24 May 2026 08:53:37 +0200 Subject: [PATCH] =?UTF-8?q?Planer:=20Gantt-Zeilenreihenfolge=20auf=20Heale?= =?UTF-8?q?r=20=E2=86=92=20DPS=20=E2=86=92=20Tank=20ge=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Innerhalb DPS: Phys. Range (BRD/MCH/DNC) → Caster (BLM/SMN/RDM/PCT) → Melee (MNK/DRG/NIN/SAM/RPR/VPR). Sortierung unabhängig von der Reihenfolge der Job-Slots im Info-Panel. Co-Authored-By: Claude Sonnet 4.6 --- js/planner.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/js/planner.js b/js/planner.js index b339c6d..c746a4e 100644 --- a/js/planner.js +++ b/js/planner.js @@ -599,11 +599,23 @@ function timelineScale(plan) { return { duration, width: Math.max(720, Math.ceil(duration / 1000 * pxPerSecond)) }; } +// Sortierreihenfolge im Gantt: Healer → Phys.Range → Caster → Melee → Tank +const JOB_GANTT_ORDER = { + 'WHM': 0, 'SCH': 1, 'AST': 2, 'SGE': 3, + 'BRD': 10, 'MCH': 11, 'DNC': 12, + 'BLM': 20, 'SMN': 21, 'RDM': 22, 'PCT': 23, + 'MNK': 30, 'DRG': 31, 'NIN': 32, 'SAM': 33, 'RPR': 34, 'VPR': 35, + 'PLD': 40, 'WAR': 41, 'DRK': 42, 'GNB': 43, +}; + function timelinePlayerRows(plan) { const roster = plan.playerRoster ?? []; const rows = []; - (plan.jobComposition ?? []).forEach((job, idx) => { - if (!job) return; + const jobEntries = (plan.jobComposition ?? []) + .map((job, idx) => ({ job, idx })) + .filter(e => !!e.job) + .sort((a, b) => (JOB_GANTT_ORDER[a.job] ?? 99) - (JOB_GANTT_ORDER[b.job] ?? 99)); + jobEntries.forEach(({ job, idx }) => { const name = roster[idx]?.name ?? ''; const role = JOB_ROLE[job] ?? ''; const abilities = (JOB_ABILITIES[job] ?? [])