[alt:V] Einführung in das Thema Ressourcen

  • Moin,

    in Anschluss an mein vorheriges Tutorial ([alt:V] Grundlagen für die Entwicklung) gibt es nun auch schon das nächste Tutorial.

    Ich empfehle deswegen auch, bevor man diesem Tutorial folgt, das erste Tutorial durchzulesen, da einem sonst eventuell wichtiges Vorwissen fehlen könnte. Ich werde mich in diesem Tutorial auch auf das Wissen des vorherigen Tutorials beziehen.


    Die Grundlagen über Ressourcen

    Was ist überhaupt eine Ressource in alt:V?

    In alt:V reden wir nicht von Gamemodes oder Scripts, sondern von Ressourcen. Jede Ressource hat ihren eigenen Unterordner im resources Ordner, aber genaueres dazu später.

    Jede Ressource ist entweder ein einzelnes System, ein Zusammenspiel von mehreren Systemen oder sogar ein "DLC" oder ein "Asset Pack", was diese Begriffe aber bedeuten, wird gleich noch einmal erläutert.

    Wenn man mehrere Ressourcen auf einem Server gleichzeitig laufen lässt, können diese zwar miteinander kommunizieren (zum Beispiel über Events), sind aber auch voneinander getrennt.

    Jede Ressource hat quasi ihren eigenen "Thread" in der sie ihre Aufgaben ausführt, und ist dort unabhängig von anderen Ressourcen.


    Wichtig ist aber eben durch die Einschränkungen der Kommunikation zwischen mehreren Ressourcen: Falls man einen eigenen Server schreibt, sollte man alle seine Systeme in einer Ressource lassen. Die Aufteilung in mehrere Ressourcen hat einige Nachteile. Das nutzen von mehreren Ressourcen hat aber auch einen einzigen Vorteil; Hot Reloading. In alt:V ist es möglich im laufenden Betrieb eine einzelne Ressource neu zu starten, bei mehreren Ressourcen kann man dann eben ein einzelnes System im Betrieb updaten/neustarten. Das ist aber NICHT zu empfehlen! Das ist vielleicht für die Empfehlung hilfreich, aber bei einem Live Server, ist das absolut Bad Practice, und sollte nicht gemacht werden.


    Wichtig ist auch, dass Ressourcen nicht automatisch gestartet werden, wir müssen jede einzelne Ressource in unserer server.cfg eintragen, hier haben wir ein Feld namens resources und in dieses tragen wir alle Ressourcen ein, die automatisch beim Serverstart geladen werden sollen. Das Format von diesem Feld ist das eines normalen Arrays, also außen eckige Klammern und dann innen die einzelnen Ressourcen die geladen werden sollen, entweder separiert man diese mit einem Komma, oder man packt jede Ressource in eine einzelne Zeile, was auch immer man schöner findet. (Beides geht natürlich auch) Der Name der Ressource ist dort dann der Ordername der Ressource im resources Ordner in unserem Serververzeichnis. Das Feld sollte dann ungefähr so aussehen:

    Code
    1. resources: [
    2. main
    3. ]

    Und dann wird die Ressource mit dem Ordnernamen main bei jedem Serverstart geladen.


    Welche Arten von Ressourcen gibt es?

    Wir haben in alt:V 4 verschieden Arten von Ressourcen, wobei 2 davon aber sehr ähnlich sind.


    js ODER csharp - Diese beiden Typen sind eine Standardressource, also eine Ressource in der unser Code läuft. Diese Ressource ist die, die am meisten verwendet wird, da dieser Typ von Ressource für jeden Server benötigt wird. Der einzige Unterschied zwischen dem Typ js und csharp ist, dass wir bei dem Typ js Serverside sowohl Clientside JavaScript benutzen (bzw. Clientside JavaScript und Serverside NodeJS) und bei dem Typ csharp benutzt man C# Serverside und JavaScript Clientside. (Clientside C# Support ist für die Zukunft geplant, aber momentan noch nicht verfügbar)


    dlc - Dieser Typ ist eine Ressource für spielseitige Änderungen oder Additionen, wie zum Beispiel neue Fahrzeuge, neue Klamotten und ähnliches. Dieser Typ unterscheidet sich stark von der normalen Ressource (also js oder

    csharp) weil diese keinen Code ausführt, sondern nur Dateien für den Client bereitstellt die eben Sachen wie Fahrzeuge ändern oder hinzufügen.


    asset-pack - Wie der Name dieses Typs schon verrät, ist dies eine Ressource die "Assets" bereitstellt. Mit Assets sind Sachen gemeint wie Bilder, Videos, HTML Dateien oder JSON Dateien. Diese Dateien können dann von jeder Ressource verwendet werden. Falls man nur eine einzelne Ressource verwendet, ist dieser Typ von Ressource aber ziemlich nutzlos. (Außer man möchte es umbedingt getrennt haben)


    Diese verschiedenen Typen sind alle offensichtlich für verschiedene Anwendungsgebiete wichtig. Für dieses Tutorial sind aber nur die Typen js und csharp wichtig, da wir unseren eigenen Code schreiben wollen, und keine neuen Klamotten z.B. hinzufügen wollen.


    Die erste eigene Ressource

    Was benötige ich um meine eigene Ressource zu schreiben?

    Bevor wir unsere erste eigene Ressource schreiben können, müssen wir erstmal einige Voraussetzungen erfüllen. Folgendes muss erfüllt sein, bevor wir beginnen können: (Voraussetzungen die mit einem [X] gekennzeichnet sind, sind nur für dieses Tutorial notwendig, da wir JS/NodeJS verwenden)

    • Ein installierter Code Editor (Visual Studio Code, Visual Studio, oder auch nur Notepad++ ist ausreichend)
    • Eine aktuelle NodeJS Installation
    • [X] Grundlegende Kenntnisse in JS und NodeJS
    • [X] Grundlegende Kenntnisse im ES6 Syntax für JavaScript (import, export etc.)
    • Grundlegende Kenntnisse im Umgang mit Terminals (z.B. Command Prompt oder PowerShell)
    • Motivation selber Probleme zu lösen und sonst auch mal Google zu verwenden

    Als weitere Voraussetzungen für dieses Tutorial stelle ich, dass man den Anweisungen des vorherigen Tutorials ([alt:V] Grundlagen für die Entwicklung) gefolgt ist, und somit bereits einen funktionierenden alt:V Server aufgesetzt hat.

    Wenn man nun alle Voraussetzungen erfüllt hat, super! Dann können wir nun auch beginnen unsere erste eigene Ressource zu schreiben.


    Die erste eigene Ressource erstellen

    Nun können wir auch beginnen.

    Als erstes begeben wir uns nun in das Hauptverzeichnis von unserem alt:V Server. Hier haben wir eine package.json, falls nicht, öffnen wir hier ein Terminal und geben npm init ein, dann sollte diese Datei erstellt worden sein.

    Diese package.json öffnen wir nun und fügen diese Zeile hinzu: type: module Diese Zeile sagt NodeJS, das unsere Dateien den ES6 Syntax verwenden, sonst würden wir einen Syntaxfehler beim starten kriegen.

    Von dort begeben wir uns dann in das dort befindliche Verzeichnis resources. In diesem Ordner landen dann auch alle unsere Ressourcen.

    Hier erstellen wir uns nun einen neuen Ordner, der Name dieses Ordners ist dann der Name unserer Ressource, welchen Namen man hier nimmt ist relativ egal, sollte aber aussagekräftig sein, falls man mehrere Ressourcen hat.

    Wir begeben uns nun in unseren neu erstellten Ordner und erstellen hier eine neue Datei mit dem Namen resource.cfg, dies ist die Konfigurationsdatei für die Ressource, und ohne diese Datei wird die Ressource auch nicht erkannt.
    Ganz wichtig ist hier auch dass die Dateiendung wirklich .cfg ist, stell also sicher dass die Dateiendungen im Explorer aktiviert sind, und die Datei die richtige Dateiendung hat. Dazu sollte die Enkodierung der Datei UTF-8 sein. (Nicht UTF-8 BOM!)

    Dazu erstellen wir hier auch schon einmal zwei Ordner, den ersten nennen wir client und den anderen nennen wir server.

    Nun bearbeiten wir unsere erstellte resource.cfg und tragen hier alle Daten ein, die wir benötigen. Wir kopieren also folgendes in die resource.cfg:

    Code
    1. type: js
    2. main: server/server.js
    3. client-main: client/client.js
    4. client-files: [
    5. client/*
    6. ]

    Zur Erklärung der einzelnen Felder:

    type - Hier müssen wir eines der 4 verfügbaren Ressourcentypen angeben, wir wählen hier js weil wir in NodeJS und JS coden wollen

    main - Diese Datei ist der Pfad zur Hauptdatei des Servers, diese Datei ist die Datei die auf dem Server automatisch gestartet wird, wenn die Ressource gestartet wird (Der Pfad unterstützt auch Ordner)

    client-main - Diese Datei ist der Pfad zur Hauptdatei des Clients, diese Datei ist die Datei die auf dem Client automatisch gestartet wird, wenn man sich mit dem Server verbindet (Der Pfad unterstützt hier auch Ordner)

    client-files - Dies ist wieder ein Array in welchem wir alle Dateien eintragen, die an den Client geschickt werden sollen, denn der Client soll ja nicht unseren Serverside Code erhalten. Hier werden auch Wildcards unterstützt, also wird wie in diesem Beispiel gezeigt dann jede Datei und jeder Ordner mit seinem Inhalt in dem Ordner client an den Client gesendet, und ist somit für den Client verfügbar

    Die resource.cfg hat auch weitere Felder, alle weiteren Felder kann man sich hier angucken: alt:V Wiki


    Als nächstes erstellen wir nun unsere main und client-main Dateien. Also erstellen wir nun im Ordner client eine leere client.js und im Ordner server eine leere server.js.

    Nun ist unsere Ressource einsatzbereit! Der Code fehlt natürlich noch, aber hier geht es erstmal darum, dass wir eine funktionierende Ressource erstellen.


    Die Ressource testen

    Nun ist unsere Ressource erfolgreich erstellt, also können wir nun testen ob wir alles richtig gemacht haben. Wenn wir nun also den Server starten, sollte im Serverfenster folgendes zu sehen sein:

    (Ganz wichtig ist bevor wir den Server starten, dass wir unsere Ressource in die server.cfg in unserem Hauptverzeichnis des Servers eintragen, wie das geht ist weiter oben im Tutorial beschrieben)

    Code
    1. [23:31:02] Loading resource RESSOURCENNAME
    2. [23:31:02] Loaded resource RESSOURCENNAME

    Falls wir hier einen Fehler erhalten, ist irgendetwas schief gelaufen. Folgende Dinge könnten die Ursache sein:

    • Das js-module wurde nicht korrekt als Modul installiert
    • Unser Server ist sehr veraltet
    • Irgendeine Datei wurde falsch benannt, oder die Pfade sind nicht korrekt (Achte darauf es so zu machen wie im Tutorial beschrieben!)

    Wenn auch das nicht hilft, dann schildere das Problem bitte unter diesem Thread.


    Wenn wir nun den oben gezeigten Text im Serverfenster sehen und es keine Fehler gibt; Super! Die Ressource ist erfolgreich erstellt und wird geladen. Wir können nun beginnen unseren Code zu schreiben. Das ist aber ein Thema für das nächste Tutorial.


    Schlusswort

    Ich hoffe mal wieder dass euch dieses Tutorial gefallen hat und für konstruktive Kritik bin ich natürlich auch offen. Bei Fragen der ähnlichem können diese hier auch gerne gestellt werden.

    Wir sehen uns dann beim nächsten Tutorial.


    *drops mic*

    Qxg8sCD.png

    bf8de5adb6.png

    webdev - js, nodejs

    :S:S:S


    Kontakt

    Konversation: Konversation starten

    Oder eine der Kontaktmöglichkeiten auf leonmrbonnie.de

  • Sehr gut erklärt, viele Dank dafür.


    Sieht mir aber recht ähnlich aus wie FiveM auf dem ersten Blick.

    Auf den ersten Blick, sind die Multiplayer Mods natürlich alle ähnlich. Aber FiveM ist wirklich sehr anders als alt:V oder auch RageMP. Die Aufteilung der Ressourcen ist aber natürlich ähnlich, da es ein einfaches Prinzip ist um mehrere "Scripts" gleichzeitig zu laden, und man muss das Rad ja auch nicht immer neu erfinden.

    Qxg8sCD.png

    bf8de5adb6.png

    webdev - js, nodejs

    :S:S:S


    Kontakt

    Konversation: Konversation starten

    Oder eine der Kontaktmöglichkeiten auf leonmrbonnie.de

  • Als erstes begeben wir uns nun in das Hauptverzeichnis von unserem alt:V Server. Hier haben wir eine package.json, falls nicht, öffnen wir hier ein Terminal und geben npm init ein, dann sollte diese Datei erstellt worden sein.


    Diesen Schritt kann ich nicht machen, weil wenn ich in einem Terminal npm init eingebe dann passiert dort nichts.

  • Kannst du denn node -v eingeben und ausführen?

    Qxg8sCD.png

    „Nicht das, was du nicht weißt, bringt dich in Schwierigkeiten, sondern dass, was du sicher zu wissen glaubst, obwohl es gar nicht wahr ist.“
    Mark Twain

    ---
    ICH BIN NUR HIER UM LEUTE ANZUSCHREIEN