Initial commit: Mobil_Tag project setup
This commit is contained in:
+135
@@ -0,0 +1,135 @@
|
||||
# Mobile Tag - Task Status
|
||||
|
||||
## Aktueller Stand (27.07.2026 ~20:20)
|
||||
|
||||
### Bereits umgesetzt
|
||||
- Deployment auf Ubuntu-Server (194.164.201.75) via PM2 + Apache Reverse-Proxy + HTTPS
|
||||
- Service Worker auf `selfDestroying: true` gesetzt (alte Caches werden gelöscht)
|
||||
- `useSocket` ist Module-Level-Singleton (keine doppelten Verbindungen mehr)
|
||||
- Lobby zeigt sich korrekt an, `playerId` und `isHost` werden gesetzt
|
||||
- Feuer-Button ist immer aktiv (außer während Nachladezeit)
|
||||
- Server-autoritative Schussauswertung:
|
||||
- Client sendet `shooterPos`, `heading`, `bodyPart`, `clientTimestamp`
|
||||
- Server prüft Cooldown, Lebensstatus, Positions-Plausibilität, Reichweite, Blickrichtung
|
||||
- Keine Treffer auf tote Spieler
|
||||
- Reichweite auf **50m** und Winkeltoleranz auf **30°** erhöht
|
||||
- Bei Distanz < 3m wird der Winkel ignoriert (für Tests nebeneinander)
|
||||
- Fallback-Targeting entfernt: Keine fake Körperteile mehr – nur echt erkannte Personen zeigen ein Label
|
||||
|
||||
### Server-Log Analyse (27.07.2026 ~20:25) - ZWEITER ECHTER TEST
|
||||
**Ergebnis:** Zwei echte Spieler (Tobi, Niko) im gleichen laufenden Match.
|
||||
|
||||
**Gefundenes Problem:** Die Spielerpositionen auf dem Server blieben bei `{ lat: 0, lng: 0 }`, obwohl der Schütze seine echte GPS-Position sendete.
|
||||
|
||||
**Ursache:** In `client/src/App.tsx` wurde `player:update` nur gesendet, wenn `orientation.heading !== null`. Wenn der Kompass keine Berechtigung hatte oder nicht funktionierte, wurden die GPS-Positionen **nie** an den Server gesendet.
|
||||
|
||||
**Fix:**
|
||||
- `App.tsx`: Position wird jetzt immer gesendet, auch wenn der Kompass null ist (heading fallback = 0)
|
||||
- `server/src/game.ts`: `isPositionPlausible` von 50m/s auf 500m/s erhöht, damit der erste große Sprung von (0,0) akzeptiert wird
|
||||
- `CameraView.tsx`: Fadenkreuz ist nicht mehr durch Klicken/Tippen verschiebbar
|
||||
|
||||
### Weitere Änderungen (27.07.2026 ~21:10)
|
||||
- **Hybrid-Targeting implementiert:**
|
||||
- Distanz < 10m: Proximity-Hit (kein Kompass nötig)
|
||||
- Distanz 10-50m: Kompass mit ±60° Toleranz
|
||||
- **Bild-Snapshot beim Feuern:** Client erstellt JPEG-Shot und sendet ihn mit dem Schuss an den Server
|
||||
- **Server-seitige KI-Bildauswertung:** TensorFlow.js MoveNet läuft auf dem Server und prüft jeden Schuss
|
||||
- Erkennt Person im Bild?
|
||||
- Ist das gewählte Körperteil (`head`/`chest`/`arm`/`leg`) in der Bildmitte?
|
||||
- Ergebnis steht im `HitEvent` unter `poseValidation`
|
||||
- **Erste GPS-Position wird akzeptiert:** Der Sprung von (0,0) zur echten Position wird nicht mehr als Teleport abgelehnt
|
||||
|
||||
### Noch offen / nächste Schritte
|
||||
1. **Testen mit zwei echten Spielern im gleichen Raum**
|
||||
2. **Server-Logs weiter beobachten** (`pm2 logs mobile-tag-server`)
|
||||
3. **Client-seitiges Feedback verbessern**, wenn kein Gegner in Reichweite
|
||||
4. **Snapshot-Validierung in Gameplay einbinden** – aktuell wird das Ergebnis nur zurückgegeben, hat aber keine Auswirkung auf Schaden
|
||||
|
||||
---
|
||||
|
||||
## Deploy-Handbuch für neue Tasks
|
||||
|
||||
### Server-Zugang
|
||||
- **Server-IP:** 194.164.201.75
|
||||
- **User:** root
|
||||
- **SSH-Key:** `%USERPROFILE%\.ssh\id_ed25519_mobiletag` (Windows) bzw. `~/.ssh/id_ed25519_mobiletag` (Linux/Mac)
|
||||
- **SSH-Befehl (Windows CMD):**
|
||||
```cmd
|
||||
ssh -i "%USERPROFILE%\.ssh\id_ed25519_mobiletag" root@194.164.201.75
|
||||
```
|
||||
|
||||
### Projekt-Pfade
|
||||
- **Lokal:** `c:\Users\thebi\OneDrive\KI Projekte\Mobil_Tag`
|
||||
- **Server:** `/var/www/mobile-tag`
|
||||
|
||||
### Wichtige Dateien
|
||||
| Datei | Zweck |
|
||||
|-------|-------|
|
||||
| `server/src/game.ts` | `handleShot` – Server-Logik mit Debug-Logging |
|
||||
| `server/src/types.ts` | `DEFAULT_SETTINGS` (rangeM: 50, angleTolerance: 30) |
|
||||
| `server/src/index.ts` | Socket.io Event-Handler (`player:shoot`, etc.) |
|
||||
| `server/src/rooms.ts` | Raum-Management (create/join/leave) |
|
||||
| `client/src/components/HUD.tsx` | Feuer-Button + Schuss senden |
|
||||
| `client/src/components/CameraView.tsx` | Kamera + Pose-Erkennung + Fadenkreuz |
|
||||
| `client/src/hooks/useSocket.ts` | Socket.io-Client-Singleton |
|
||||
| `client/src/store/gameStore.ts` | Globaler Zustand |
|
||||
|
||||
### Komplette Deploy-Prozedur
|
||||
1. **Lokale Änderungen vornehmen** (im Ordner `c:\Users\thebi\OneDrive\KI Projekte\Mobil_Tag`)
|
||||
2. **Änderungen auf den Server kopieren** (nur geänderte Dateien, Beispiel):
|
||||
```cmd
|
||||
scp -i "%USERPROFILE%\.ssh\id_ed25519_mobiletag" "c:/Users/thebi/OneDrive/KI Projekte/Mobil_Tag/server/src/game.ts" root@194.164.201.75:/var/www/mobile-tag/server/src/game.ts
|
||||
scp -i "%USERPROFILE%\.ssh\id_ed25519_mobiletag" "c:/Users/thebi/OneDrive/KI Projekte/Mobil_Tag/client/src/components/HUD.tsx" root@194.164.201.75:/var/www/mobile-tag/client/src/components/HUD.tsx
|
||||
```
|
||||
3. **Auf dem Server bauen und neustarten:**
|
||||
```bash
|
||||
cd /var/www/mobile-tag
|
||||
npm run build
|
||||
pm2 restart mobile-tag-server
|
||||
systemctl reload apache2
|
||||
```
|
||||
4. **Logs prüfen:**
|
||||
```bash
|
||||
pm2 logs mobile-tag-server --lines 100
|
||||
```
|
||||
|
||||
### Alles-in-einem Deploy-Befehl (nach Datei-Änderungen)
|
||||
```cmd
|
||||
ssh -i "%USERPROFILE%\.ssh\id_ed25519_mobiletag" root@194.164.201.75 "cd /var/www/mobile-tag && npm run build && pm2 restart mobile-tag-server && systemctl reload apache2"
|
||||
```
|
||||
|
||||
### Rollback
|
||||
Falls etwas schiefgeht:
|
||||
```bash
|
||||
cd /var/www/mobile-tag
|
||||
git checkout -- .
|
||||
# oder manuell die letzte funktionierende Version wiederherstellen
|
||||
npm run build
|
||||
pm2 restart mobile-tag-server
|
||||
systemctl reload apache2
|
||||
```
|
||||
|
||||
### Server-Status prüfen
|
||||
```bash
|
||||
pm2 status
|
||||
pm2 logs mobile-tag-server --lines 50
|
||||
systemctl status apache2
|
||||
```
|
||||
|
||||
### Test-Skript
|
||||
`/tmp/socket-test-shoot.js` auf dem Server simuliert zwei Spieler und einen Treffer:
|
||||
```bash
|
||||
node /tmp/socket-test-shoot.js
|
||||
```
|
||||
|
||||
### Troubleshooting
|
||||
| Problem | Lösung |
|
||||
|---------|--------|
|
||||
| Client lädt alte Version | Hard Refresh (Strg+Shift+R) oder privater Tab |
|
||||
| "Verbindungsfehler" | Prüfen, ob `mobile-tag-server` läuft (`pm2 status`) |
|
||||
| Keine Treffer | Logs prüfen; sicherstellen, dass beide Spieler im gleichen Raum sind |
|
||||
| 502 Bad Gateway | Apache/PM2 neu starten (`systemctl reload apache2`, `pm2 restart mobile-tag-server`) |
|
||||
|
||||
---
|
||||
|
||||
Letzte Aktualisierung: 27.07.2026 ~20:20
|
||||
Reference in New Issue
Block a user