[RageMP/JS] Grundlagen - Kommunikation mit Events

  • Hallo,
    ich werde in diesem Tutorial die Grundlagen fürs Arbeiten mit Events in RageMP mit Javascript erklären.
    Dieses Tutorial ist besonders für Anfänger nützlich, kann aber auch vielleicht dem ein oder anderen Erfahrenen noch helfen.
    Ich setze für dieses Tutorial schon mindestens die Basics in Javascript vorraus, aber um die zu lernen, gibt es genug gute Tutorials im Internet.


    Was sind Events überhaupt?
    Ein Event ist wie der Name schon sagt ein "Ereignis", ein Event wird immer dann ausgeführt, wenn etwas bestimmtes passiert.
    Zum Beispiel das Event playerReady wird immer dann ausgeführt, wenn ein Spieler alle clientseitigen Ressourcen runtergeladen hat und damit bereit ist zu spielen.
    RageMP hat bereits viele Events selber eingebaut, die automatisch ausgeführt werden, eine Liste davon findet man hier: Serverside und Clientside
    Einige Events werden sowohl auf dem Server ausgeführt, sowie bei jedem verbundenen Spieler (Clientside) aber dies ist nicht bei allen Events der Fall, bevor wir also ein Event nutzen wollen, sollte man immer erstmal im Wiki nachgucken, ob es entweder Clientside, Serverside oder Shared ist. Shared bedeutet hier, dass es bei beiden ausgeführt wird.
    Aber bei den Events sind wir auch nicht an die gebunden, welche uns von RageMP bereitgestellt werden, denn wir können auch einfach unsere eigenen Events erstellen. Hierbei kann man die Events nennen wie man will, kann aber keine vorhandenen Events überschreiben. Die eigenen Events können auch so viele Parameter haben, wie man möchte.


    Wie erstelle ich ein Event?
    Bei Events gibt es keine wirkliche Erstellung. Wir müssen einfach das Event ausführen, und es wird dann automatisch an den Server oder den Client gesendet. Falls das Event nicht existiert, passiert dann einfach garnichts.
    Also verwenden wir ein Event so, dass wir auf dem Server einen neuen Handler für das Event hinzufügen, indem wir mp.events.add verwenden. Diese Funktion hat 2 Parameter, der erste ist der Name des Events (WICHTIG!! Groß- und Kleinschreibung muss beachtet werden!!) und der 2. Parameter ist die Handlerfunktion, wobei dort meistens eine anonyme Pfeilfunktion verwendet wird, man kann dort aber eine beliebige Funktion als Handler übergeben.
    Beispielcode:


    JavaScript
    1. mp.events.add("TestEvent", (parameter1, parameter2) =>
    2. {
    3. console.log(`Das Event ist angekommen!`);
    4. console.log(`${parameter1} | ${parameter2}`);
    5. });

    Wenn wir diesen Code also in eine beliebige serverseitige Datei einfügen, haben wir damit unseren Handler für das Event TestEvent erstellt. Also wird diese Funktion jedes mal ausgeführt, wenn TestEvent ausgeführt wird.
    Wir können für Events so viele Handler wie wir wollen hinzufügen, jeder Handler wird beim ausführen des Events auch ausgeführt, also können wir das gleiche Event auch in verschiedenen Dateien/Systemen verwenden.


    Wie führe ich ein Event aus?
    Das ist abhängig davon von wo nach wo wir das Event senden.
    Vom Server zum Server: mp.events.call("EventName", parameter)
    Vom Server zum Client: player.call("EventName", [parameter]) (player ist in diesem Fall das Spielerobjekt) (WICHTIG!! Die Parameter MÜSSEN bei player.call in einem Array sein, sonst funktioniert es nicht!)
    Vom Client zum Server: mp.events.callRemote("EventName", parameter)
    Vom Client zum Client: mp.events.call("EventName", parameter) (WICHTIG!! Wir können nur Events clientside zum eigenen Client versenden! Ein Event an andere Clients kann man nur serverside senden)


    Was ist sonst noch zu beachten?
    Man kann beim übergeben der Parameter an Events KEINE Arrays oder Objekte übergeben, diese müssen vorher mit JSON.stringify zu einem String verwandelt werden, und dann beim Eventhandler mit JSON.parse zu einem Javascript Objekt konvertiert werden.


    Ich hoffe ich konnte vielleicht dem ein oder anderen damit helfen, Events zu verstehen. Für Verbesserungsvorschläge für das Tutorial oder Vorschläge für weitere Tutorials bin ich immer offen.

    LeonMrBonnie.de


    Scripting

    Ich helfe zu allen Fragen bezüglich PAWN Scripting gerne weiter.

    Auch im Bereich JavaScript und dort der RageMP API helfe ich gern.


    Kontakt

    Konversation: Konversation starten

    Oder eine der Kontaktmöglichkeiten auf leonmrbonnie.de

    Einmal editiert, zuletzt von LeonMrBonnie ()

  • Kannst du im Titel bitte {Rage:MP} statt {JS} schreiben? Ist ja kein Javascript Event Tutorial sondern auf RageMP spezialisiert.

    Es geht um Events mit RageMP in Javascript. Das Thema hat doch bereits das Label RageMP.

    LeonMrBonnie.de


    Scripting

    Ich helfe zu allen Fragen bezüglich PAWN Scripting gerne weiter.

    Auch im Bereich JavaScript und dort der RageMP API helfe ich gern.


    Kontakt

    Konversation: Konversation starten

    Oder eine der Kontaktmöglichkeiten auf leonmrbonnie.de

  • Sehr hilfreicher Beitrag. Ich denke damit kann man etwas anfangen, danke dir!

    Liebe Grüße
    FeniX.


    Nemesus-Roleplay.de Projektleiter in Rente...
    -------------------------------------------------------------------------