Java Gamemode - jLua

  • Hallo mta-sa.org Community,

    ich möchte euch Heute meine Lua <-> Java Schnittstelle "jLua" vorstellen.
    Momentan befindet sich jLua noch in der Pre-Alpha Phase d.h. es sind zwar schon einige MTA-Funktionen zum entwickeln eines Gamemodes benutzbar, aber noch nicht alle.
    Ich empfehle jLua möglichst lokal laufen zu lassen, was für einen ersten Eindruck bestimmt auch ausreicht.
    Die angehängten Datein sind nur unter Windows lauffähig! Generell ist jLua (dank Java) Plattformunabhängig und kann sowoll auf Linux als auch auf Windows ausgeführt werden.
    Es ist auch möglich einen Hybriden-Gamemode zu entwickeln d.h. eine Hälfte in Java die andere Hälfte in Lua, davon würde ich aber beim derzeitigen Stand abraten, da ich sowas selber noch nicht getestet habe aber theoretisch möglich ist, wenn man den Java-Server beim start des MTA-Servers mitlaufen lässt.

    Derzeitiger Funktionsumfang

    • [NEU] Commands über den CommandsManager erstellen
    • [NEU] Stabilere CommandQuery (auslesen und weitergeben der Befehle/Returns an den Java- oder Lua-Code)
    • [NEU] Client Befehle über den Server ausführen (Java-Server <=> MTA-Server <=> MTA-Client)
    • [NEU] Events können zusammengefasst werden z.B. alle standart Playerevents (onPlayerConnect, onPlayerJoin, onPlayerQuit) oder alle Markerevents (onMarkerHit, onMarkerLeave) zu einer Klasse die dann zwei oder drei Methoden bereitstellt.
    • [Entwicklung] Peds / NPC-Plugin
    • [Entwicklung] DX-Funktionen über Server ausführen
    • [Entwicklung] DX-GuiSystem in Java
    • [Entwicklung] Alle Klassen, Events, Elemente ect sind in der Core überschreibbar
    • --------------------------------------------------------------------------------------------------
    • EventListener zum Abfangen von MTA-Events

      • onPlayerConnect
      • onPlayerJoin
      • onPlayerQuit
      • onPlayerWasted
      • onResourceStop
      • onResourceStart
      • onMarkerHit
      • onMarkerLeave
      • onElementClicked
    • Alle Elemente erstellbar und veränderbar
    • Ein einfaches Pluginsystem
    • EventRules zum canceln von MTA-Events (befindet sich noch im Aufbau)
    • Einen Provider zum erstellen von CustomEvents auf dem MTA-Server (Experimental)
    • CallbackListener für Befehle um Aktionen direkt nach dem Ausführen eines Befehles auszuführen
    • Jeder Befehl liefert den Wert zurück der auch die dazugehörige Lua-Funktion zurückliefert
    • ElementRunnableManager zum erstellen von Threads die in einem Player-Element laufen und so z.b. nur Daten für einen Spieler bearbeiten.
    • MySQL-Klasse zum Verbinden einer Datenbank (das jLua-Framework benötigt keine Datenbank)
    • Diverse Util-Klassen wie einen JSON-Reader, Lua-Code-Kompressor und verschiedene ArrayKlassen wie z.b. ein Assoziatives Array, ect.
    • Es ist zudem auch möglich den Funktionsumfang von jLua in seinem Gamemode zu erweitern, da man Zugriff auf die Hauptfunktionen (Schreiben/Lesen des Netzwerkstreams, erstellen eigener Befehle, ect) hat
    • Inoffiziell gibt es 3 Plugins

      • CustomGui => Es erlaubt eine Gui zu erstellen die dann Serverseitig geladen, manipuliert, ausgewertet wird
      • CustomJob => Ein Job-Plugin welches sich noch in der Aufbauphase befindet, es erlaubt Jobs nach einem Typ zu erstellen, das Plugin stellt einige Jobtypen zur Verfügung, es können aber auch eigene Jobtypen entwickelt werden.
      • CustomNPC => Erstellt NPC-Pools und einzelne NPCs die über abstrakte Klassen erweitert werden können.
    • und einiges mehr

    Vorteile von jLua

    • Höherer Funktionsumfang, da man direkt das ganze Java-Framework zur Verfügung hat.
    • Teilweise einfachere Programmierung durch das OOP von Java.
    • Multithreading fähig.
    • ...

    Nachteile von jLua

    • Relativ aufwändig zu starten.
    • Relativ Instabil.
    • ...

    Installation von jLua (Veraltet)

    • Zip-Datei downloaden und entpacken. Nicht mehr Vorhanden, da sie veraltet ist.
    • Im Ordner "Gamemode Files/MTA/" befindet sich ein Ordner namens "javagamemode" diesen komplett in das Resource-Verzeichnis von MTA kopieren (<MTA-Server>/mods/deathmatch/resources/[gameplay]/)
    • Die Module im Ordner "Gamemode Files/MTA/modules" in den MTA-Server einbauen.

      • Dazu die 2 dll Datein "ml_sockets.dll" und "mta_mysql.dll" in den Ordner "<MTA-Server>/mods/deathmatch/modules" kopieren.
      • Die Datei "libmysql.dll" in das Haupt-Verzeichnis von dem MTA-Server kopieren.
      • In die Datei "<MTA-Server>/mods/deathmath/mtaserver.conf" die beiden nachfolgenden Zeilen in den Part wo die Module geladen werden hinzufügen.

        • "<module src="mta_mysql.dll" />"

        • "<module src="ml_sockets" />"

    Starten des Java Gamemodes
    Dabei ist wichtig zu wissen das zuerst der Java-Server laufen muss bevor der MTA-Server die Resource startet, da sonnst keine Socket Verbindung aufgebaut wird.

    • In der Zip-Datei findet Ihr den Ordner "Gamemode Files/jLua" in diesem Ordner befindet sich der Java-Server.

      • "JavaGamemode.jar" => der eigentliche Gamemode
      • "jLua.jar" => beinhaltet das komplette jLua-Framework (Java-Server, Datenaustausch mit dem MTA-Server, ect)
      • "startGamemode.bat" => startet den Gamemode (Java-Server startet automatisch beim erstellen eines Gamemodes) in der Konsole so das man den Output sehen kann
    • Mittels der Datei "startGamemode.bat" startet Ihr den Java-Server, danach startet Ihr den MTA-Server und startet die Resource (Optional kann man die Resource "javagamemode" auch in die "mtaserver.conf" schreiben, dass sie immer beim start geladen wird)

    Entwicklung eines eigenen Gamemodes

    • Ich habe in der Zip-Datei unter dem Ordner "Gamemode Files/JavaGamemode_source/" den Sourcecode zum Java Gamemode hinzugefügt, dort könnt ihr euch angucken wie das Funktioniert. (Der Java Gamemode ist sehr minimal gehalten, mittels einer IDE und der jLua.jar könnt ihr durch die einzelnen Packages gehen)
    • In Zukunft wird es auch ein Wiki geben welches den Funktionsumfang für Entwickler näher beschreibt.
    • Ich persönlich verwende zum Entwickeln die IntelliJ IDEA Community Version von JetBrains.

    Das komplette jLua-Framework und den Java Gamemode habe ich selbst programmiert (bis auf die Module, ein Dank an Gamesnert, x86 & MCvarial (ml_socket) und Albert Alonso (mta_mysql)). Alle Rechte am jLua und JavaGamemode Code liegen bei mir.
    Die jLua-Datein dürfen weder öffentlich gestartet noch verteilt oder verkauft werden. Desweiteren darf die jLua.jar nicht dekompiliert und teile des Codes in eigenen Projekte verwendet werden.

    SourceForge Link: (Momentan ist der SVN leer wegen weitreichende umbauarbeiten an der Core)

    http://sourceforge.net/projects/mtajlua/

    Kann über SVN geladen werden. Wer Zugriff (schreiben) auf das Repository haben möchte kann mich gerne Anschreiben.


    Bei Fragen, Fehlern oder Verbesserungsvorschläge findet Ihr mich im mta-sa.org-TS unter meinem Forum-Username.


    Bei Rechtschreibfehler bitte ich um Entschuldigung.

    3 Mal editiert, zuletzt von misterdick (4. September 2015 um 00:21) aus folgendem Grund: Opensource

  • Dieses Thema enthält 5 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!