61 lines
2.2 KiB
Markdown
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.
|