From d6dedd1a2e11287f31fb4c2c266b5dd1af40d76c Mon Sep 17 00:00:00 2001 From: xziino Date: Thu, 21 May 2026 15:26:49 +0200 Subject: [PATCH] Add Cooldown Planner concept and roadmap to CLAUDE.md Documents data model, import flow with merge logic, feature roadmap, job-to-ability mapping, recast times, and technical decisions for the upcoming third tab (Planer). Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 93c5837..f7893d1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,9 +4,10 @@ PHP/HTML/JS-Tool zum Analysieren von FFXIV-Raidlogs via FFLogs OAuth2 PKCE + GraphQL API. Kein Framework, kein Composer, kein npm — Plain PHP für Shared Hosting. -Zwei Tabs: +Drei Tabs: - **Report-Tab**: Report-Code eingeben, Fight auswählen → Fight-JSON-Ausgabe + Event Explorer - **Analyse-Tab**: Spielerübersicht + AoE-Timeline mit Mitigation-Tracking, Pull-Vergleich, Phase-Filter +- **Planer-Tab** *(in Entwicklung)*: Cooldown-Planer für Raid-Mitigation — Log-Import, manuelle Bearbeitung, Job-basierte Spell-Verfügbarkeit, DR-Simulation ## Architektur & Konventionen @@ -213,3 +214,104 @@ Vollständiges Schema: siehe `debug/schema.php` oder `fflogs-schema.json` - `REDIRECT_URI` auf produktive HTTPS-URL anpassen - `debug/` Ordner nicht deployen - `assets/` Ordner deployen (enthält lokale Icons) + +--- + +## Planer-Tab — Konzept & Roadmap + +### Ziel +Raid-Cooldown-Planer: Welche Mitigation-Ability wird für welche Mechanik eingesetzt? Basierend auf Log-Daten oder manuell aufgebaut. Überlebt Browser-Neustarts via localStorage. + +### Datenmodell (Plan) +```json +{ + "id": "uuid", + "name": "M8S – Prog Week 1", + "createdAt": 1234567890, + "updatedAt": 1234567890, + "source": { "reportCode": "abc123", "fightId": 6 }, + "jobComposition": ["PLD", "WAR", "WHM", "SCH", "MNK", "DRG", "BRD", "SMN"], + "mechanics": [ + { + "id": "uuid", + "name": "Fourth-Wall Fusion", + "timestamp": 83000, + "unmitigatedDamage": 280000, + "assignments": [ + { "ability": "Reprisal", "job": "PLD" }, + { "ability": "Shield Samba", "job": "BRD" } + ] + } + ] +} +``` + +Mehrere Pläne gespeichert in `localStorage` unter `ff14-planner-plans` als Array. + +### Import-Flow (erster Meilenstein) +**Ziel:** Einen bestehenden Log als saubere Mechanik-Vorlage laden — ohne vorhandene Mechaniken zu überschreiben. + +1. Benutzer wählt Report-Code + Kampf (gleicher Flow wie im Report-Tab, eigenes Mini-Formular im Planer) +2. `api/analysis.php` wird aufgerufen → liefert `aoe_events` mit Name, Timestamp, `unmitigatedAmount` +3. Jedes AoE-Event wird als Mechanik-Kandidat angezeigt (Name + Timestamp + Rohschaden) +4. Benutzer kann einzelne Events auswählen oder alle übernehmen +5. **Merge-Logik:** Beim Import in einen bestehenden Plan werden nur Mechaniken hinzugefügt die noch nicht vorhanden sind — Matching per `abilityName` + Timestamp-Nähe (± 5s). Bestehende Assignments bleiben erhalten. +6. Neue Mechaniken werden an der richtigen Timestamp-Position eingefügt (Timeline bleibt sortiert) + +**Warum Merge statt Überschreiben:** Progress-Szenario — erster Import enthält Phase 1, späterer Import (weiter im Fight) fügt Phase 2 hinzu ohne Phase-1-Planung zu verlieren. + +### Geplante Features (Übersicht) + +| Prio | Feature | Beschreibung | +|---|---|---| +| 1 | **Import-Flow** | Log → Mechanik-Timeline, Merge bei Teilimporten | +| 2 | **Jobaufstellung** | 8 Slots (2 Tank, 2 Healer, 4 DPS), Auswahl bestimmt verfügbare Spells | +| 3 | **Cooldown-Zuweisung** | Pro Mechanik Abilities zuweisen/entfernen per Klick | +| 4 | **DR-Simulation** | `simuliert = unmitigated × ∏(1 − dr_i)` live berechnet beim Toggle | +| 5 | **Recast-Tracking** | Recast-Datenbank pro Ability; Konflikt-Warnung wenn CD noch läuft | +| 6 | **Coverage-Ansicht** | Gantt-Chart: Mechaniken auf X-Achse, Buff-Dauer als Balken | +| 7 | **Analyse-Overlay** | Planer-Tab: Vergleich geplanter vs. tatsächlich genutzter CDs (Job-basiertes Matching, nicht Spielername) | +| 8 | **Shield-Schätzung** | Empirisch aus Log-Durchschnitt (`absorbed`-Werte), nicht exakt | +| 9 | **JSON-Export/Import** | Plan als Datei teilen mit Raidkollegen | + +### Spell-Verfügbarkeit nach Job +Jobaufstellung → verfügbare Abilities (Subset von `MITIGATION_ABILITIES`): + +| Job | Abilities | +|---|---| +| PLD | Passage of Arms, Divine Veil, Guardian, Reprisal | +| WAR | Shake It Off, Bloodwhetting, Reprisal | +| DRK | Dark Missionary, Reprisal | +| GNB | Heart of Stone *(noch nicht getrackt)*, Reprisal | +| WHM | Temperance, Divine Benison, Divine Caress | +| SCH | Sacred Soil, Expedient, Fey Illumination, Galvanize, Seraphic Veil, Catalyze, Addle | +| AST | Collective Unconscious, Neutral Sect, Intersection, the Spire | +| SGE | Kerachole, Holos, Holosakos, Panhaima, Eukrasian Prognosis, Eukrasian Diagnosis, Haima, Addle | +| BRD | Troubadour | +| MCH | Tactician | +| DNC | Shield Samba, Improvised Finish | +| MNK | Feint | +| DRG | Feint | +| NIN | Feint | +| SAM | Feint | +| RPR | Feint | +| VPR | Feint | +| BLM | Addle | +| SMN | Addle, Radiant Aegis | +| RDM | Addle, Magick Barrier | +| PCT | Addle, Tempera Coat, Tempera Grassa | + +### Recast-Zeiten (geplante Datenbank) +Wird benötigt für Konflikt-Erkennung. Beispiele: +- Reprisal: 60s +- Feint / Addle: 90s +- Troubadour / Tactician / Shield Samba: 120s +- Temperance: 120s +- Dark Missionary / Heart of Light: 90s + +### Technische Entscheidungen +- **Persistenz:** `localStorage` — kein Backend nötig, mehrere Pläne möglich +- **IDs:** `crypto.randomUUID()` für Plan- und Mechanik-IDs +- **Merge-Matching:** Mechaniken gelten als identisch wenn `abilityName` gleich und `|timestamp_a - timestamp_b| < 5000ms` +- **Keine Spielernamen im Planer:** Assignments sind Job-basiert (`{ ability, job }`), damit Pläne übertragbar sind +- **Analyse-Tab Overlay (Prio 7):** Job aus tatsächlichem Pull → lookup welche Ability dieser Job im Plan hatte → Soll/Ist-Vergleich