{"id":193071,"date":"2025-08-17T08:32:20","date_gmt":"2025-08-17T06:32:20","guid":{"rendered":"https:\/\/fivemx.com\/?p=193071"},"modified":"2026-08-04T15:15:00","modified_gmt":"2026-08-04T13:15:00","slug":"fivem-skripte-pflegen","status":"publish","type":"post","link":"https:\/\/rpcrate.com\/de\/maintain-fivem-scripts\/","title":{"rendered":"FiveM-Skripte testen, aktualisieren und warten"},"content":{"rendered":"<p>Warte ein FiveM-Skript, indem du eine reproduzierbare Version beibeh\u00e4ltst, seine tats\u00e4chlichen Gameplay-Abl\u00e4ufe testest und ein funktionierendes Rollback sicherstellst. Eine Ressource, die fehlerfrei startet, ist nur die erste Pr\u00fcfung; Berechtigungen, Persistenz und Fehlerpfade sind genauso wichtig.<\/p>\n<h2 id=\"record-the-working-baseline\">Notiere die funktionierende Basislinie<\/h2>\n<p>Liste die Ressourcenversion oder den Commit, den FXServer-Build, das Framework, das Inventar, den Datenbanktreiber und die Konfigurations\u00e4nderungen auf. Bewahre bearbeitbaren Quellcode in einem privaten Repository und Anmeldeinformationen au\u00dferhalb davon auf. Bewahre das urspr\u00fcngliche lizenzierte Paket und die Update-Anweisungen des Autors auf.<\/p>\n<p>Verwende einen isolierten Testserver mit einer separaten Datenbank und eingeschr\u00e4nktem Zugriff. Deaktiviere echte Zahlungsabwicklungen, Produktions-Webhooks und andere externe Aktionen in der Testumgebung.<\/p>\n<h2 id=\"review-each-update-before-installing\">\u00dcberpr\u00fcfe jedes Update vor der Installation<\/h2>\n<ol>\n<li>Lies die Versionshinweise und vergleiche ge\u00e4nderte Konfigurationen, Abh\u00e4ngigkeiten, Exporte, Ereignisse und SQL. Identifiziere Breaking Changes, bevor du Dateien ersetzt.<\/li>\n<li>Sichere die aktuelle Datenbank und die passenden Ressourcen-\/Konfigurationsdateien. Best\u00e4tige, dass das Backup auf der Testinstanz wiederhergestellt werden kann.<\/li>\n<li>Wende das Update in der vom Autor geforderten Reihenfolge auf die Testinstanz an. F\u00fcge die Konfiguration bewusst zusammen; \u00fcberschreibe die neuen Standardwerte nicht blind mit einer alten Datei.<\/li>\n<li>F\u00fchre normale und Fehlerszenarien aus und vergleiche dann die persistenten Ergebnisse nach Wiederverbindung und Neustart.<\/li>\n<\/ol>\n<h2 id=\"use-a-gameplay-test-record\">Verwende einen Gameplay-Testdatensatz<\/h2>\n<p>Notiere f\u00fcr jede wichtige Aktion den Ausgangszustand, die Schritte, das erwartete Ergebnis und das beobachtete Ergebnis. F\u00fcr einen Shop-Kauf: Der Spieler hat ein bekanntes Guthaben, kauft einen bekannten Gegenstand, erh\u00e4lt genau einen Gegenstand, verliert genau den vom Server definierten Preis und beh\u00e4lt dieses Ergebnis nach der Wiederverbindung.<\/p>\n<p>Wiederhole dies mit unzureichenden Mitteln, vollem Inventar, unbefugtem Zugriff, ung\u00fcltigen Gegenstandsnamen, wiederholten Anfragen und einer Trennung w\u00e4hrend des Vorgangs. Teste f\u00fcr eine Garage den Besitz, die Verhinderung doppelter Spawns und die Lagerung nach einem Neustart. Teste f\u00fcr Jobs Rang- und Dienstbeschr\u00e4nkungen.<\/p>\n<h2 id=\"inspect-security-and-performance-separately\">Sicherheit und Leistung separat pr\u00fcfen<\/h2>\n<p>\u00dcberpr\u00fcfe Netzwerkereignisse auf serverseitige Validierung von Berechtigungen, Besitz, Mengen und Aufgabenerf\u00fcllung. Ein kritischer Autorisierungsfehler blockiert die Ver\u00f6ffentlichung, unabh\u00e4ngig von guter Leistung an anderer Stelle.<\/p>\n<p>Verwende den Client-Ressourcenmonitor f\u00fcr das Timing von Client-Skripten und den FXServer-Profiler f\u00fcr die Serverarbeit. Notiere die Szene, die Spieleranzahl und die Dauer. Vergleiche identische Arbeitslasten; lege kein universelles Millisekunden-Budget f\u00fcr nicht verwandte Ressourcen fest.<\/p>\n<h2 id=\"automate-checks-that-catch-real-mistakes\">Automatisiere Pr\u00fcfungen, die echte Fehler aufdecken<\/h2>\n<p>F\u00fchre Lua-Syntax-\/Lint-Pr\u00fcfungen durch, die f\u00fcr die FiveM-Laufzeit geeignet sind, und gezielte Tests f\u00fcr reine Logik. Mocked Framework-Tests helfen, Argument- und R\u00fcckgabe-Fehlpaarungen zu erkennen, aber sie \u00fcberpr\u00fcfen nicht die tats\u00e4chliche Framework-, Inventar- oder Datenbankintegration. Halte eine Live-Testserver-Checkliste daneben.<\/p>\n<h2 id=\"deploy-a-reversible-change\">Eine umkehrbare \u00c4nderung bereitstellen<\/h2>\n<p>W\u00e4hle ein Wartungsfenster, k\u00fcndige die erwartete Unterbrechung an und halte die vorherige Version bereit. Aktualisiere nur das \u00fcberpr\u00fcfte Paket und die erforderlichen Abh\u00e4ngigkeiten. Starte in der dokumentierten Reihenfolge neu, \u00fcberpr\u00fcfe die Protokolle und wiederhole das wichtige Gameplay-Szenario.<\/p>\n<p>Wenn die \u00dcberpr\u00fcfung fehlschl\u00e4gt, stoppe neue Schreibvorg\u00e4nge vor der Wiederherstellung. Stelle den passenden Code und alle notwendigen Daten wieder her, unter Ber\u00fccksichtigung der nach dem Backup vorgenommenen \u00c4nderungen. L\u00f6sche nicht stillschweigend den Spielerfortschritt, um einen Test zu bestehen.<\/p>\n<h2 id=\"keep-an-issue-useful\">Einen hilfreichen Fehlerbericht f\u00fchren<\/h2>\n<p>Notiere den ersten relevanten Fehler, die betroffene Ressource\/Version, die Reproduktionsschritte und das erwartete Verhalten. Schw\u00e4rze Anmeldeinformationen und pers\u00f6nliche Identifikatoren aus den Protokollen. Verfolge die L\u00f6sung in der \u00c4nderungsverlauf der Ressource, damit das n\u00e4chste Update dieselbe Regressionspr\u00fcfung wiederholen kann.<\/p>\n<h2 id=\"reference-documentation\">Referenzdokumentation<\/h2>\n<p><a href=\"https:\/\/docs.fivem.net\/docs\/developers\/server-security\/\">Cfx.re \u2014 Serversicherheit<\/a> \u00b7 <a href=\"https:\/\/docs.fivem.net\/docs\/scripting-manual\/debugging\/using-profiler\/\">Cfx.re \u2013 Profiler verwenden<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Warte ein FiveM-Skript, indem du eine reproduzierbare Version beibeh\u00e4ltst, seine tats\u00e4chlichen Gameplay-Abl\u00e4ufe testest und ein funktionierendes Rollback sicherstellst. Eine Ressource, die fehlerfrei startet, ist nur die erste Pr\u00fcfung; Berechtigungen, Persistenz und Fehlerpfade sind genauso wichtig.<\/p>","protected":false},"author":1,"featured_media":193073,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2883],"tags":[3001,2884],"class_list":["post-193071","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-buying-testing-maintaining-fivem-scripts","tag-fivem-script","tag-maintain-fivem-scripts"],"_links":{"self":[{"href":"https:\/\/rpcrate.com\/de\/wp-json\/wp\/v2\/posts\/193071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rpcrate.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rpcrate.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/de\/wp-json\/wp\/v2\/comments?post=193071"}],"version-history":[{"count":4,"href":"https:\/\/rpcrate.com\/de\/wp-json\/wp\/v2\/posts\/193071\/revisions"}],"predecessor-version":[{"id":215554,"href":"https:\/\/rpcrate.com\/de\/wp-json\/wp\/v2\/posts\/193071\/revisions\/215554"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rpcrate.com\/de\/wp-json\/wp\/v2\/media\/193073"}],"wp:attachment":[{"href":"https:\/\/rpcrate.com\/de\/wp-json\/wp\/v2\/media?parent=193071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rpcrate.com\/de\/wp-json\/wp\/v2\/categories?post=193071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rpcrate.com\/de\/wp-json\/wp\/v2\/tags?post=193071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}