Files
devx-rp/docs/ARCHITECTURE.md
T
2026-08-05 01:29:39 +02:00

61 lines
2.2 KiB
Markdown

# Architektur
## Ressourcen
### devx_core
Serverautoritative Spieler-Sessions, Identifier, Geld, Callbacks und
Positionsspeicherung. Andere DevX-Ressourcen greifen ausschließlich über
Exports und validierte Serverevents auf Sitzungsdaten zu.
### devx_characters
Charakterliste, Erstellung, Auswahl und manueller Spawn. Der Spieler wird
nicht vom Basic-Gamemode automatisch gespawnt.
### devx_banking
Konten, Kontonummern, Überweisungen und Transaktionshistorie. Geldoperationen
werden serialisiert, damit zwei gleichzeitige Buchungen ein Konto nicht
überziehen.
### devx_housing
Kaufbare Objekte. Mehrere Wohnungen können denselben GTA-Innenraum benutzen,
weil jeder Eigentümer beim Betreten in einen eigenen OneSync-Routing-Bucket
verschoben wird.
### devx_hud
Eigene kleine NUI für Charaktername, Bargeld und Kontostand. Die Minimap wird
nach dem Spawn dauerhaft eingeblendet.
### devx_phone
Eigene, originale NUI. In v0.1 zeigt sie Charakter- und Bankdaten. Kontakte,
Nachrichten und Anrufe sind für spätere Versionen vorbereitet.
## Vertrauensgrenzen
- Der Client darf niemals Kontostände, Eigentum oder Charakterbesitz festlegen.
- Jeder Charakterzugriff wird gegen die FiveM-`license:` des Spielers geprüft.
- Beträge werden auf Ganzzahlen, Positivität und Obergrenzen geprüft.
- Wohnungskäufe und Bankbuchungen besitzen serverseitige Sperren.
- NUI ist nur Darstellung; alle fachlichen Entscheidungen trifft der Server.
## Erweiterungsprinzip
Neue Systeme erhalten eine eigene Ressource und verwenden Core-Exports.
Beispiele:
```lua
local player = exports.devx_core:GetPlayer(source)
local ok = exports.devx_core:RemoveCash(source, 100, 'Kauf')
```
Für Datenbankzugriffe stets Platzhalter verwenden; niemals SQL-Strings mit
ungeprüften Clientwerten zusammensetzen.
## Charaktervorschau und Begrüßungssequenz
`devx_characters` erzeugt für die Auswahl einen lokalen, nicht synchronisierten
Vorschau-Ped und eine Skriptkamera. Der echte Spieler bleibt währenddessen
unsichtbar und eingefroren. Neue Charaktere starten einmalig am Flughafen.
Fahrer, Fahrzeug, Dialoge und Fahrt laufen clientseitig; der erfolgreiche
Abschluss wird serverseitig im Charakterfeld `metadata` gespeichert.