Files
Mobil_Tag/TASK_STATUS.md
T

5.8 KiB
Raw Blame History

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):
    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):
    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:
    cd /var/www/mobile-tag
    npm run build
    pm2 restart mobile-tag-server
    systemctl reload apache2
    
  4. Logs prüfen:
    pm2 logs mobile-tag-server --lines 100
    

Alles-in-einem Deploy-Befehl (nach Datei-Änderungen)

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:

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

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:

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