# 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.