README aktualisiert, untitled.md entfernt

- Datenbank-Einrichtung um Docker-Compose mit Auto-Migration ergänzt
- aether-medical, aether-police und das echte aether-admin (WebRTC-Kameras)
  dokumentiert; veraltete "neu zu bauen"- und Prototyp-Abschnitte ersetzt
- leere untitled.md gelöscht

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Jerrit Fritzsche 2026-07-27 19:00:34 +02:00
parent e4b82dd685
commit 190594eff2
2 changed files with 60 additions and 31 deletions

View File

@ -14,10 +14,21 @@ Das Projekt besteht aus zwei Teilen:
**Voraussetzungen:** FiveM-Server-Artifacts, MySQL/MariaDB, ein Lizenzschlüssel von **Voraussetzungen:** FiveM-Server-Artifacts, MySQL/MariaDB, ein Lizenzschlüssel von
[keymaster.fivem.net](https://keymaster.fivem.net). [keymaster.fivem.net](https://keymaster.fivem.net).
1. **Datenbank anlegen** — Schema einspielen: 1. **Datenbank bereitstellen** — entweder per Docker (empfohlen, mit automatischer
Migration aller Schemas):
```bash
cp .env.example .env # Zugangsdaten anpassen
docker compose up -d # MariaDB starten + alle Schemas einspielen
```
…oder manuell einspielen:
```bash ```bash
mysql -u root -p < sql/aether.sql mysql -u root -p < sql/aether.sql
mysql -u root -p aether < sql/aether_medical.sql
mysql -u root -p aether < sql/aether_police.sql
mysql -u root -p aether < sql/aether_admin.sql
``` ```
Details zum Docker-Setup (idempotente Migration, Adminer, neue Migrationen):
[`docker/README.md`](docker/README.md).
2. **oxmysql herunterladen** (nicht in diesem Repo enthalten) von 2. **oxmysql herunterladen** (nicht in diesem Repo enthalten) von
[github.com/overextended/oxmysql](https://github.com/overextended/oxmysql/releases) [github.com/overextended/oxmysql](https://github.com/overextended/oxmysql/releases)
und nach `resources/[standalone]/oxmysql/` entpacken. und nach `resources/[standalone]/oxmysql/` entpacken.
@ -33,9 +44,13 @@ Das Projekt besteht aus zwei Teilen:
| Pfad | Inhalt | | Pfad | Inhalt |
|---|---| |---|---|
| `server.cfg` | Serverkonfiguration, Startreihenfolge der Ressourcen | | `server.cfg` | Serverkonfiguration, Startreihenfolge der Ressourcen |
| `sql/aether.sql` | Datenbankschema (Benutzer, Charaktere, Inventar, Fahrzeuge, Transaktionen) | | `docker-compose.yml`, `docker/` | MariaDB + automatische DB-Migration (`schema_migrations`) |
| `sql/` | Schemas: `aether.sql` (Basis), `aether_medical.sql`, `aether_police.sql`, `aether_admin.sql` |
| `resources/[aether]/aether-core/` | **Fundament**: Spielerverwaltung, Charaktere, Geld, Zustand, NUI-Helfer | | `resources/[aether]/aether-core/` | **Fundament**: Spielerverwaltung, Charaktere, Geld, Zustand, NUI-Helfer |
| `resources/[aether]/aether-loading/` | Ladebildschirm (migriert) | | `resources/[aether]/aether-medical/` | Medizin-/Klinik-Managementsystem (migriert) |
| `resources/[aether]/aether-police/` | Polizei-Managementsystem (migriert) |
| `resources/[aether]/aether-admin/` | Server-Admin-Panel mit WebRTC-Live-Kameras (migriert) |
| *(weitere `resources/[aether]/…`)* | siehe Abschnitt **Systeme** |
### aether-core ### aether-core
@ -432,21 +447,32 @@ paketweise verkauft (z. B. „9mm ×30" liefert 30 Stück).
> beliebige weitere Läden mit wenigen Zeilen anlegbar. Geld liegt in `spieler` > beliebige weitere Läden mit wenigen Zeilen anlegbar. Geld liegt in `spieler`
> (später an Bank/Item-System koppeln). > (später an Bank/Item-System koppeln).
### 🚓 Polizei & Rettungsdienst — *neu zu bauen* ### 🚓 Polizei (`resources/[aether]/aether-police/`) ✅ migriert
Das gemeinsame Fraktions-CAD wurde entfernt. Polizei und Rettungsdienst sollen als Polizei-Managementsystem als **Tablet** (Taste **F5**). Modular aufgebaut wie das
**zwei getrennte Module** entstehen (`aether-police`, `aether-ems`). Klinik-System: ein Kern mit Plugin-Registry und Rechteprüfung, an den sich Fachmodule
selbst anmelden. Personenakten, Fahndungen und Haft setzen auf den CAD-Tabellen
`aether_records`, `aether_wanted`, `aether_jail` auf; dazu Statistik und Administration.
Die Datenbanktabellen aus dem CAD bleiben bestehen und sind weiterverwendbar: ### 🏥 Medizin (`resources/[aether]/aether-medical/`) ✅ migriert
`aether_records` (Personenakten), `aether_wanted` (Fahndungen), `aether_jail` (Haft), Klinik-/Rettungsdienst-Managementsystem als **Klinik-PC** (Taste **F6**). Ein
`aether_treasury` (Staatskasse). Plugin-Kern (`Kern.RegistriereModul`) trägt **15 Fachmodule**: Dashboard, MDT,
Patienten, Leitstelle/Einsätze, Behandlung, Labor, Operation, Medikamente,
**Stationen & Belegung**, **Intensivstation**, **Blutbank**, **Fuhrpark**,
**Nachrichten/Aushänge**, **Berichte** und **Textbausteine**. Eigenes Rollen-/
Rechtesystem (`medical_personal`), ~34 Tabellen (`medical_*`).
Offene Anschlusspunkte, die auf ein solches Modul warten: > Durchgehendes Prinzip: **Das System dokumentiert, es entscheidet nicht.** Jeder
> Vorgang trägt den verantwortlichen Mediziner; das System stellt keine Diagnose,
> verabreicht nichts, entlässt niemanden von selbst und leitet nichts aus Zeitablauf
> ab. Fristen *erinnern* nur.
**Integrations-Anschlusspunkte** (für Polizei/Medizin und andere Module):
- **Notruf-Events** `aether:phone:notruf` (110/112 aus dem Handy) und `aether:death:notruf` - **Notruf-Events** `aether:phone:notruf` (110/112 aus dem Handy) und `aether:death:notruf`
(Verletzt-Screen) werden ausgelöst, aber derzeit von niemandem verarbeitet (Verletzt-Screen) — von der jeweiligen Leitstelle verarbeitbar
- **Waffenschein**: `exports['aether-documents']:StelleAus(charakterId, 'ws', …)` — solange - **Waffenschein**: `exports['aether-documents']:StelleAus(charakterId, 'ws', …)`
niemand ausstellt, bleiben Waffen bei Ammu-Nation gesperrt
- **Kennzeichenabfrage**: `exports['aether-garage']:HoleHalter(kennzeichen)` - **Kennzeichenabfrage**: `exports['aether-garage']:HoleHalter(kennzeichen)`
- **Wiederbelebung**: `exports['aether-death']:Wiederbeleben(quelle, helferQuelle)` - **Wiederbelebung**: `exports['aether-death']:Wiederbeleben(quelle, helferQuelle)`
- **Fuhrpark/Blutbank/Bettenspiegel** je als Export für fremde Ressourcen (reine Auskunft)
### 🧑 Charakterauswahl (`resources/[aether]/aether-character/`) ✅ migriert ### 🧑 Charakterauswahl (`resources/[aether]/aether-character/`) ✅ migriert
Vollständig an den Server angebunden: Die Liste kommt aus der Datenbank, Erstellen und Löschen Vollständig an den Server angebunden: Die Liste kommt aus der Datenbank, Erstellen und Löschen
@ -578,26 +604,29 @@ Zum Ansehen `clothing/index.html` im Browser öffnen.
> `kategorien` (Stile + Preise), `farben`, `getragen` (Besitz) vs. `outfit` (Anprobe). > `kategorien` (Stile + Preise), `farben`, `getragen` (Besitz) vs. `outfit` (Anprobe).
> Der Avatar koppelt konzeptionell an dieselben Komponenten wie der Charakter-Ersteller (`character/`). > Der Avatar koppelt konzeptionell an dieselben Komponenten wie der Charakter-Ersteller (`character/`).
### 🛡️ Admin-Dashboard (`admin/`) ### 🛡️ Admin-Panel (`resources/[aether]/aether-admin/`) ✅ migriert
Web-Prototyp des **zentralen Server-Admin-Dashboards** — reines HTML/CSS/JS. Zentrales Server-Admin-Panel als echtes Resource, im Spiel mit **F9** (`/adminpanel`).
Zum Ansehen `admin/index.html` im Browser öffnen. Aus dem Web-Prototyp `admin/` hervorgegangen und an `aether-core` gekoppelt.
**Bereiche:** - **Rechte** kommen aus `aether_users.admin_group` (`user` < `support` < `admin` < `owner`) —
- **Dashboard** (Live-KPIs, 24h-Chart, Schnellaktionen, Ressourcen-Status, Admin-Log) **jede** der Aktionen wird serverseitig gegen eine Rechte-Matrix geprüft; die Oberfläche
- **Weltkarte** mit Live-Standorten + **Quick-Menü** je Spieler (Verwalten/Kamera/TP/Freeze/Kick) blendet nur aus, was ohnehin abgelehnt würde.
- **Spieler**: Tabelle + gruppiertes Aktions-Panel (Teleport, Zustand, Geben, Moderation: - **Bereiche:** Dashboard, Weltkarte (Live-Positionen), Spieler (Teleport/Zustand/Geben/
Heal/Revive/Freeze/God/Mute, Geld, Item, Fahrzeug, Job, Warn/Kick/Ban) Moderation), Fahrzeuge, Immobilien, Fraktionen (inkl. Payday), Wirtschaft, Staatsprojekte,
- **Fahrzeuge**: Bild-Spawner (Autos/Bikes/Helis/Boote/Flugzeuge) + **Tuning** (Motor/Getriebe/ **Live-Kameras**, Weltsteuerung, Ankündigungen, Bans & Warns, Reports, Ressourcen,
Bremsen/Panzerung/Turbo/Lack), Reparieren/Herholen/Löschen Audit-Log, Admin-Team, Einstellungen.
- **Live-Kameras** (WebRTC-Spectate, Einzel- & Multi-Cam-Views), **Kill-/Deathcams** - **Bans** schreiben in `aether_users` — der Core sperrt darüber bereits beim Connect.
(manuell speicherbar, sonst Auto-Löschung nach 24 h) - Spieler melden aus dem Spiel mit **`/report <Text>`**; jede eingreifende Aktion landet
- **Staatsprojekte** (aktivierbar nach positiver Abstimmung aus der Handy-Staat-App) im Prüfprotokoll (`aether_admin_log`).
- **Immobilien**, **Fraktionen** (Gehalt/h, erstellen/löschen), **Wirtschaft**
- **Weltsteuerung** (Zeit/Wetter/Blackout/Cleanup), **Ankündigungen**
- **Bans & Warns**, **Reports/Support**, **Ressourcen**, **Audit-Log**, **Admin-Team**, **Einstellungen**
> Die „Kamera-Feeds" sind stilisierte Simulationen (in FiveM WebRTC-Stream). Datenmodelle **Live-Kameras (echtes WebRTC):** ein separater **Media-Server (SFU)** unter
> (`players`, `weltFahrzeuge`, `staatsprojekte`, `killcams`, `fraktionen` …) sind vom UI getrennt. `aether-admin/media-server/` routet die Streams; der FiveM-Server prüft nur Rechte, stellt
kurzlebige Token aus und weist Ziel-Clients zum Senden an. Das Bild liefert die
**Bildschirmfreigabe** der Client-NUI (`getDisplayMedia`) — kein OBS nötig, sofern das
FiveM-CEF des Clients die Aufnahme erlaubt.
> Der Web-Prototyp `admin/` (reines HTML/CSS/JS, per `admin/index.html` im Browser ansehbar)
> bleibt als Design-Vorlage erhalten. Einrichtung der Kameras: `aether-admin/media-server/README.md`.
### 🎖️ Fraktions-/Gang-Verwaltung (`factions/`) ### 🎖️ Fraktions-/Gang-Verwaltung (`factions/`)
Web-Prototyp der **Fraktions-/Gang-Verwaltung** aus Führungssicht — reines HTML/CSS/JS. Web-Prototyp der **Fraktions-/Gang-Verwaltung** aus Führungssicht — reines HTML/CSS/JS.

View File