optimize markdown files
Signed-off-by: Peter Siegmund <mars3142@noreply.mars3142.dev>
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
# Wherigo Completion Log (.gwl)
|
||||
|
||||
## Übersicht
|
||||
## Overview
|
||||
|
||||
Der Wherigo Player kann jetzt **Completion Logs** im `.gwl`-Format (Wherigo Game Log) generieren, die auf **wherigo.com** hochgeladen werden können, um den Abschluss einer Cartridge nachzuweisen.
|
||||
The Wherigo Player can now generate **Completion Logs** in `.gwl` format (Wherigo Game Log), which can be uploaded to **wherigo.com** to prove completion of a cartridge.
|
||||
|
||||
## Format
|
||||
|
||||
Das `.gwl`-Format ist ein XML-Format, das folgende Informationen enthält:
|
||||
The `.gwl` format is an XML format that contains the following information:
|
||||
|
||||
### XML-Struktur
|
||||
### XML Structure
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
@@ -69,130 +69,130 @@ Das `.gwl`-Format ist ein XML-Format, das folgende Informationen enthält:
|
||||
</WherigoGameLog>
|
||||
```
|
||||
|
||||
## Verwendung
|
||||
## Usage
|
||||
|
||||
### Im Spiel
|
||||
### In-Game
|
||||
|
||||
1. Cartridge spielen und abschließen
|
||||
2. **Menü → Completion Log exportieren** (Strg+E)
|
||||
3. Datei speichern (z.B. `TheOmbosIdol_completion.gwl`)
|
||||
4. Auf [wherigo.com](https://www.wherigo.com) hochladen
|
||||
1. Play and complete cartridge
|
||||
2. **Menu → Export Completion Log** (Ctrl+E)
|
||||
3. Save file (e.g., `Cartridge.gwl`)
|
||||
4. Upload to [wherigo.com](https://www.wherigo.com)
|
||||
|
||||
### Im Code
|
||||
### In Code
|
||||
|
||||
```cpp
|
||||
// Completion Log generieren
|
||||
// Generate completion log
|
||||
wxGetApp().generateCompletionLog(""); // Auto-Path
|
||||
|
||||
// Mit eigenem Pfad
|
||||
// With custom path
|
||||
wxGetApp().generateCompletionLog("/path/to/completion.gwl");
|
||||
|
||||
// Pfad abrufen
|
||||
// Get path
|
||||
std::string path = wxGetApp().getCompletionLogPath();
|
||||
```
|
||||
|
||||
## Was wird erfasst?
|
||||
## What is Captured?
|
||||
|
||||
### ✅ Cartridge-Informationen
|
||||
- Name der Cartridge
|
||||
- GUID (eindeutige ID)
|
||||
### ✅ Cartridge Information
|
||||
- Cartridge name
|
||||
- GUID (unique ID)
|
||||
|
||||
### ✅ Spieler-Informationen
|
||||
- Spielername (Standard: "Player")
|
||||
### ✅ Player Information
|
||||
- Player name (default: "Player")
|
||||
|
||||
### ✅ Session-Daten
|
||||
- Startzeit (aktuell: Zeitpunkt der Generierung)
|
||||
- Endzeit (aktuell: Zeitpunkt der Generierung)
|
||||
- Gesamtdauer in Sekunden
|
||||
### ✅ Session Data
|
||||
- Start time (currently: generation timestamp)
|
||||
- End time (currently: generation timestamp)
|
||||
- Total duration in seconds
|
||||
|
||||
### ✅ Completion Status
|
||||
- `Complete` - Alle Tasks abgeschlossen
|
||||
- `Incomplete` - Noch offene Tasks
|
||||
- `Complete` - All tasks completed
|
||||
- `Incomplete` - Tasks still pending
|
||||
|
||||
### ✅ Aufgaben (Tasks)
|
||||
- Name der Aufgabe
|
||||
### ✅ Tasks
|
||||
- Task name
|
||||
- Status (completed: true/false)
|
||||
- Abschlusszeit (falls completed)
|
||||
- Completion time (if completed)
|
||||
|
||||
### ✅ Gesammelte Items
|
||||
- Name des Items
|
||||
- Zeitpunkt des Einsammelns
|
||||
- **Nur Items im Spieler-Inventar**
|
||||
### ✅ Collected Items
|
||||
- Item name
|
||||
- Collection timestamp
|
||||
- **Only items in player inventory**
|
||||
|
||||
### ✅ Besuchte Zonen
|
||||
- Name der Zone
|
||||
- Zeitpunkt des Besuchs
|
||||
- **Nur aktive Zonen**
|
||||
### ✅ Visited Zones
|
||||
- Zone name
|
||||
- Visit timestamp
|
||||
- **Only active zones**
|
||||
|
||||
### ✅ Completion Code
|
||||
- Eindeutiger Hash/Signatur-Code
|
||||
- Basiert auf: Cartridge-GUID + Spielername + Abschlusszeit
|
||||
- Format: 16-stelliger Hex-Code (z.B. `A1B2C3D4E5F67890`)
|
||||
- Unique hash/signature code
|
||||
- Based on: Cartridge GUID + Player name + Completion time
|
||||
- Format: 16-digit hex code (e.g., `A1B2C3D4E5F67890`)
|
||||
|
||||
## Technische Details
|
||||
## Technical Details
|
||||
|
||||
### Dateipfad
|
||||
### File Path
|
||||
|
||||
Standardpfad für Completion Logs:
|
||||
- **Im gleichen Verzeichnis wie die GWC-Datei**
|
||||
- Format: `<GWC-Verzeichnis>/<CartridgeName>.gwl`
|
||||
Default path for completion logs:
|
||||
- **In the same directory as the GWC file**
|
||||
- Format: `<GWC-Directory>/<CartridgeName>.gwl`
|
||||
|
||||
Beispiel:
|
||||
- GWC-Datei: `/Users/name/Downloads/TheOmbosIdol.gwc`
|
||||
- Completion Log: `/Users/name/Downloads/TheOmbosIdol.gwl`
|
||||
Example:
|
||||
- GWC file: `/Users/<name>/Downloads/<CartridgeName>.gwc`
|
||||
- Completion log: `/Users/<name>/Downloads/<CartridgeName>.gwl`
|
||||
|
||||
Dies ermöglicht es, die Completion-Logs zusammen mit den Cartridge-Dateien zu organisieren.
|
||||
This allows organizing completion logs together with cartridge files.
|
||||
|
||||
### XML-Encoding
|
||||
### XML Encoding
|
||||
- UTF-8
|
||||
- Sonderzeichen werden escaped: `&`, `<`, `>`, `"`, `'`
|
||||
- Special characters are escaped: `&`, `<`, `>`, `"`, `'`
|
||||
|
||||
### Zeitformat
|
||||
### Time Format
|
||||
- ISO 8601: `YYYY-MM-DDTHH:MM:SS`
|
||||
- Beispiel: `2026-02-13T16:45:00`
|
||||
- Lokale Zeitzone
|
||||
- Example: `2026-02-13T16:45:00`
|
||||
- Local timezone
|
||||
|
||||
### Completion Code Generierung
|
||||
### Completion Code Generation
|
||||
|
||||
```cpp
|
||||
// Einfacher Hash-Algorithmus (für Produktion: SHA256 verwenden)
|
||||
// Simple hash algorithm (use SHA256 for production)
|
||||
hash = hash_function(cartridgeGUID + playerName + endTime)
|
||||
completionCode = sprintf("%016lX", hash)
|
||||
```
|
||||
|
||||
## Limitierungen
|
||||
## Limitations
|
||||
|
||||
### ⚠️ Session-Zeiten
|
||||
Die aktuellen Start-/Endzeiten sind der **Zeitpunkt der Generierung**, nicht die tatsächliche Spielzeit. Um echte Session-Tracking zu implementieren:
|
||||
### ⚠️ Session Times
|
||||
Current start/end times are the **generation timestamp**, not actual playtime. To implement real session tracking:
|
||||
|
||||
```cpp
|
||||
// In cApp beim Start speichern:
|
||||
// Save in cApp at start:
|
||||
m_sessionStartTime = time(nullptr);
|
||||
|
||||
// Bei Completion verwenden:
|
||||
// Use at completion:
|
||||
data.startTime = m_sessionStartTime;
|
||||
data.endTime = time(nullptr);
|
||||
data.duration = data.endTime - data.startTime;
|
||||
```
|
||||
|
||||
### ⚠️ Completion Code
|
||||
Der aktuelle Hash-Algorithmus ist simpel. Für echte Verifikation sollte **SHA256** oder ein ähnlicher kryptografischer Hash verwendet werden.
|
||||
The current hash algorithm is simple. For real verification, **SHA256** or similar cryptographic hash should be used.
|
||||
|
||||
### ⚠️ Wherigo.com Upload
|
||||
Das generierte Format entspricht dem Wherigo-Standard, aber die tatsächliche Akzeptanz auf wherigo.com hängt von deren Server-seitiger Validierung ab.
|
||||
The generated format follows the Wherigo standard, but actual acceptance on wherigo.com depends on their server-side validation.
|
||||
|
||||
## Erweiterungen
|
||||
## Extensions
|
||||
|
||||
### Spielername anpassen
|
||||
### Customize Player Name
|
||||
```cpp
|
||||
// In cApp/cGame speichern:
|
||||
// Store in cApp/cGameScreen:
|
||||
std::string m_playerName = "Player";
|
||||
|
||||
// Beim Generieren verwenden:
|
||||
// Use when generating:
|
||||
wherigo::WherigoCompletion::generateCompletionLog(L, path, m_playerName);
|
||||
```
|
||||
|
||||
### Session-Tracking
|
||||
### Session Tracking
|
||||
```cpp
|
||||
class cApp {
|
||||
time_t m_sessionStartTime = 0;
|
||||
@@ -204,51 +204,51 @@ class cApp {
|
||||
};
|
||||
```
|
||||
|
||||
### Zusätzliche Statistiken
|
||||
Das `CompletionData`-Struct kann erweitert werden um:
|
||||
- Anzahl der Dialoge
|
||||
- Zurückgelegte Distanz
|
||||
- Verwendete Hints
|
||||
- Fehlversuche
|
||||
### Additional Statistics
|
||||
The `CompletionData` struct can be extended with:
|
||||
- Number of dialogs
|
||||
- Distance traveled
|
||||
- Hints used
|
||||
- Failed attempts
|
||||
|
||||
### Auto-Export bei Abschluss
|
||||
### Auto-Export on Completion
|
||||
```cpp
|
||||
// In cGame::OnTaskCompleted() oder bei Complete-Event
|
||||
// In cGameScreen::OnTaskCompleted() or on Complete event
|
||||
if (allTasksCompleted()) {
|
||||
wxGetApp().generateCompletionLog("");
|
||||
wxMessageBox("Gratulation! Completion Log wurde automatisch erstellt.");
|
||||
wxMessageBox("Congratulations! Completion log automatically created.");
|
||||
}
|
||||
```
|
||||
|
||||
## Beispiel-Workflow
|
||||
## Example Workflow
|
||||
|
||||
1. **Spieler spielt Cartridge**
|
||||
2. **Alle Tasks werden abgeschlossen**
|
||||
3. **Spieler exportiert Log:** Menü → Completion Log exportieren
|
||||
4. **Datei wird gespeichert:** `TheOmbosIdol_completion.gwl`
|
||||
5. **Upload auf wherigo.com:**
|
||||
- Login auf wherigo.com
|
||||
- Zur Cartridge-Seite navigieren
|
||||
- "Log completed cartridge" Button
|
||||
- `.gwl`-Datei hochladen
|
||||
- Completion wird verifiziert und angezeigt
|
||||
1. **Player plays cartridge**
|
||||
2. **All tasks completed**
|
||||
3. **Player exports log:** Menu → Export Completion Log
|
||||
4. **File saved:** `<CartridgeName>.gwl`
|
||||
5. **Upload to wherigo.com:**
|
||||
- Login to wherigo.com
|
||||
- Navigate to cartridge page
|
||||
- Click "Log completed cartridge"
|
||||
- Upload `.gwl` file
|
||||
- Completion verified and displayed
|
||||
|
||||
## Debugging
|
||||
|
||||
Log-Ausgaben aktivieren:
|
||||
Enable log output:
|
||||
```cpp
|
||||
wxLogMessage("Completion log generated: %s", filePath);
|
||||
wxLogDebug("Tasks completed: %d/%d", completedCount, totalCount);
|
||||
```
|
||||
|
||||
## Zukünftige Features
|
||||
## Future Features
|
||||
|
||||
- [ ] Automatisches Tracking der Session-Zeit
|
||||
- [ ] Spielername-Eingabe-Dialog
|
||||
- [ ] Screenshot/Foto-Anhänge
|
||||
- [ ] GPS-Koordinaten für besuchte Zonen
|
||||
- [ ] Statistiken (Distanz, Zeit pro Zone, etc.)
|
||||
- [ ] Automatischer Export bei Completion
|
||||
- [ ] Cloud-Upload direkt aus der App
|
||||
- [ ] Kryptografischer Completion Code (SHA256)
|
||||
- [ ] Automatic session time tracking
|
||||
- [ ] Player name input dialog
|
||||
- [ ] Screenshot/photo attachments
|
||||
- [ ] GPS coordinates for visited zones
|
||||
- [ ] Statistics (distance, time per zone, etc.)
|
||||
- [ ] Automatic export on completion
|
||||
- [ ] Cloud upload directly from app
|
||||
- [ ] Cryptographic completion code (SHA256)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user