Beiträge von 123marvin123

    Man ist nicht gezwungen seinen Gamemode in Pawn zu schreiben. Es gibt mehrere Frameworks die es ermöglichen, seine Ideen in Java oder C++ zu schreiben.
    Für C++ ist es das GDK, für Java ist es das Shoebill Projekt (welches von mir beeinflusst wird) und es gibt noch SampSharp mit dem man in C# seinen Code schreiben kann.
    Da Pawn sehr mühsam und aufwendig ist, macht es mehr Spaß seinen Gamemode z.B. in Java zu schreiben, da man dort außerdem noch alle Libraries von dritt-Anbietern verwenden kann.

    Wie siehts aktuell eigentlich aus? Wenn Shoebill genommen wird, könnte ich ca. 8400 Zeilen Code pushen, von einem Roleplay Gamemode den ich angefangen hab.
    Enthalten sind Login & Register, sowie ein dynamisches Firmen System. (Busfirmen z.B. können eigene Linien erstellen (Ingame-Editor), Lohn einstellen, Mitarbeiter einstellen, Verlust/Gewinn der Mitarbeiter anschauen, Preise anpassen etc.) und ein Haussystem (und wahrscheinlich noch ein paar mehr Dinge).

    Wenn sich die Funktionen der Parametern nicht groß verändern funktioniert alles weiter. Bei neuen Callback und Funktionen die noch nicht von Shoebill implementiert wurden, kannst du auch die Nativen Interfaces von Shoebill benutzen, und jegliche Funktion aufrufen oder ein beliebiges Callback hooken. Das funktioniert übrigens auch mit jedem anderem Plugin auch, du kannst z.B. das Audio Plugin über Shoebill steuern und dessen Funktionen und Callback verwenden. Wenn du ein Beispiel sehen möchtest kannst du folgendes durchlesen -> Project Shoebill 1.1 - Schreibe Gamemodes in Java

    @MiX(eP): Du kannst die erstelle .jar Datei aus deiner Maven-Repo nehmen und auf den Server in den shoebill/gamemodes Ordner kopieren. Dann musst du nurnoch die benötigten Libs manuell in die resources.yml eintragen.


    @BlackAce: Das Shoebill Plugin (also die Binaries für den SAMP Server) erstellt eine Java Virtual Machine (JVM). Genau das selbe passiert, wenn du jedes andere Java Programm startest, wie z.B. Minecraft. Das heißt, du kannst jede Funktion von Java benutzen (Dateisystem verwalten, Emails senden, Daten von einem FTP-Server holen, Shell-Befehle ausführen oder direkt einen Webserver basierend auf Java). Außerdem kannst du jede Java Library verwenden, die existiert, wie z.B. Apache Commons. Dir steht alles offen, du kannst Mysql / MongoDB / Sqlite verwenden oder dein ganz eigenes Dateiformat entwerfen.

    Du musst die build.gradle Datei öffnen und bei dependencies { ... }
    einfach -> "compile 'com.github.nkzawa:socket.io-client:0.3.0'" (ohne ") hinzufügen.
    Wenn dein Projekt kein Gradle Projekt ist, musst du dir die Library manuell runterladen und hinzufügen.


    //Edit: Ich sehe grad das du ein Maven Projekt benutzt. Füg einfach das:


    <dependency>
    <groupId>com.github.nkzawa</groupId>
    <artifactId>socket.io-client</artifactId>
    <version>0.4.1</version>
    </dependency>


    bei den <dependencies> hinzu. (in der pom.xml)

    Dann hast du irgendwelche alten Artefakte. Wahrscheinlich eine alte shoebill-api.


    //Edit:
    Falls euer Server crasht wenn ihr ein Dialog anzeigt, bitte ich euch den mitgelieferten shoebill-updater zu verwenden. (update-shoebill.bat/sh)
    Dieser Bug sollte nun gefixxt sein, und euer Server sollte nicht aufgrund dieses Fehlers crashen.





    - Alle Callbacks die den Rückgabewert behandeln können nun korrekt in Shoebill verwendet werden. (PlayerUpdateEvent unterbrechen, PlayerTextEvent, etc.)
    - Es können nun native Funktionen von anderen Plugins aufgerufen werden. (Stelle dafür sicher das Shoebill in der server.cfg an erster Stelle steht)
    - Der player.spawn() Bug wurde behoben, die Spieler spawnen wie gewohnt


    (Benutzung)



    Callbacks unterbinden:


    PHP
    eventManager.registerHandler(PlayerTextEvent.class, event -> {
                if(event.getPlayer().isSpectating())
                    event.disallow(); //There will be no message in the chat if the player is currently spectating somebody
    });


    Native Funktionen aufrufen (Streamer Beispiel):


    PHP
    AmxCallable createDynamicObject = null;
    for(AmxInstance instance : Shoebill.get().getAmxInstanceManager().getAmxInstances()) {
            createDynamicObject = instance.getNative("CreateDynamicObject");
            if(createDynamicObject != null) {
                    //found CreateDynamicObject native, call it like this:
                    createDynamicObject.call(18421, ....); //normal pawn arguments. Make sure you put a f after a Float value, like this: 13.0f or 0f
                    break;
           }
    }


    Bitte benutzt den beigelegten shoebill-updater, weil sich der Launcher, das Plugin und die Runtime geändert haben. Einfach die update-shoebill.bat/sh Datei im Serverordner starten und die neusten Dateien werden runtergeladen.



    Ich hab mal ein kleines Video gemacht, wie mein ein einfaches Projekt in IntelliJ IDEA 14 aufsetzt:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    https://www.youtube.com/watch?v=g2SOqax3Euw



    Es wurde soeben ein wichtiger Fehler behoben. Ihr könnt mit dem mitgelieferten Updater (update-shoebill.bat/sh) die benötigten Dateien automatisch runterladen lassen.
    Ihr könnt jedoch auch die Dateien aus dem Startpost neu runterladen, und die Dateien ersetzen. Das Update sollte auf jeden Fall durchgeführt werden, wenn ihr die Sicherheit und Stabilität eures Servers nicht vernachlässigen wollt.


    //Edit: Update 4. März




    - Callbacks hooken & native Funktionen aufrufen
    - Eine Amx mit allen Callbacks ist nun nicht mehr nötig, Shoebill findet die Callbacks automatisch


    Wir sind froh, euch das neuste Update präsentieren zu dürfen. Das Update bringt die Möglichkeit Callbacks zu hooken.
    Bitte stellt sicher, dass ihr den shoebill-updater verwenden (update-shoebill.bat/sh im server Ordner), weile viele Dateien geändert wurden (shoebill-runtime, launcher, plugin, api)


    In diesem Beispiel werde ich euch zeigen, wie ihr Callbacks des Plugin FCNPC hooken könnt, und native Funktionen aufzurufen:
    (plugin url: http://forum.sa-mp.com/showthread.php?t=428066)


    Hook hinzufügen (Stellt sicher, dass ihr die Hook wieder löscht wenn der GM / das Plugin wieder entladen wird):


    Der FCNPC_OnCreate Callback sieht wie folgt aus:
    public FCNPC_OnCreate(npcid);


    Wie man sieht, beinhaltet er einen Parameter (Integer). Also müssen wir diesen Parameter am Ende der .hookCallback() Methode registrieren. Es existieren folgende Datentypen:


    i -> Integer
    f -> Float
    s -> String


    Wenn man also einen Callback hat, der so aussieht:
    public OnPlayerChangeName(id, old_name, new_name[]);


    müsste man ihn wie folgt registrieren:


    PHP
    Shoebill.get().getAmxInstanceManager().hookCallback("OnPlayerChangeName", amxCallEvent -> {
    
    
    }, "iss");


    Wenn man nun einen NPC mithilfe von FCNPC erstellen möchte, muss die native Funktion aufgerufen werden (in einem Befehl z.B):
    Die Funktion dafür sieht wie folgt aus:
    native FCNPC_Create(name[]);


    Außerdem wird die ID des erstellten NPCs zurück gegeben:



    - Dieses Update erlaubt es, Werte per Referenz zu übergeben (benötigt z.B. für GetPlayerName & GetPlayerPos)


    Um das neue Feature nutzen zu können, müsst ihr das Plugin und shoebill-api updaten. (update-shoebill.bat/sh in dem Server Ordner)


    So wird es benutzt:



    Der Code ist natürlich nicht besonders nützlich, da man auch einfach player.getName(); verwenden kann, man kann jedoch auch native Funktionen von anderen Plugins aufrufen (z.B. FCNPC_GetPosition).
    Aktuell sind 3 Datentypen verfügbar:


    + ReferenceString
    + ReferenceFloat
    + ReferenceInt


    welche alle im Package net.gtaun.shoebill.amx.types zu finden sind.

    Wenn du in deinem Gamemode irgendwo ein return 1 stehen hast, wird verhindert das der Callback in weiteren Scripts aufgerufen wird.
    Du musst also return 0 am Ende stehen haben, damit der Callback in weiteren Scripts aufgerufen wird:



    public OnDialogResponse(...)
    {
    return 1; //Falsch wenn du willst das der FS den Callback erreicht
    }


    public OnDialogResponse(...)
    {
    return 0; //Damit wird der FS den Callback erreichen.
    }

    Auf der Wiki Seite steht irgendwie das man grade Werte verwenden sollte, um die Kompatibilität zu maximieren.


    Anstatt: 312.134 nimmst du z.B: 312


    Ich weiß aber nicht ob es funktioniert, hab es selber noch nicht getestet.

    Solange unser Buildserver nicht erreichbar ist, könnt ihr auch die Sonatype Repo verwenden. (https://oss.sonatype.org/content/repositories/snapshots/)


    In der pom.xml tragt ihr bei repositories folgendes ein:


    Code
    <repository>
                <id>sonatype-nexus-snapshots</id>
                <name>Sonatype Nexus Snapshots</name>
                <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
                <snapshots>
                    <enabled>true</enabled>
                    <updatePolicy>daily</updatePolicy>
                </snapshots>
            </repository>


    //Update: Shoebill 1.1 wurde soeben released.
    Die neue Version ermöglicht es euch, Pawn Gamemodes und Filterscripts gleichzeitig mit Shoebill Gamemodes zu verwenden.
    Ein genaueres Tutorial folgt noch. Download im Startthread. Wenn ihr updaten möchtet, dann nehmt den updater aus dem neuen Downloadpaket und führt update-shoebill.bat aus.