Beiträge von misterdick

    Es gibt in der Auflistung so manchen Punkt bei dem ich die Augenbraue hochzog, weil so manches weder neu und teilweise auch bereits umgesetzt wurde (wenn auch meist erfolglos).

    Ja da hast du Recht. Ich könnte hier noch weiter ins Detail gehen und noch mehr Punkte auflisten. Das würde aber den Rahmen dieser Suche sprengen. Ich bezweifel das viele der Punkte so detailliert ausgearbeitet sind wie wir es tun.

    Server die in LS spielen und zusätzlich die umliegenden Dörfer integrieren (soviele sinds ja nicht) meine ich auch schon mehrfach gesehen zu haben.

    Unsere Wahl fiel deshalb auf LS, weil LS alle Dinge besitzt die man für den Anfang braucht. Diese Dinge sollte man erstmal alle bei einer Stadt ausschöpfen, bevor man auf andere übergeht.

    Das mit dem Bürgermeister ist dahingehend auch nicht unbedingt neu. Bei manchem heißt der Bürgermeister, beim nächsten Präsident.

    Selbst bei dieser Funktion bezweifel ich das jemand einem "Bürgermeister" administrative Macht gibt. Da ich möglichst versuchen möchte den Server von den Spielern verwalten zu lassen. Der "Bürgermeister" macht die Regeln für die jeweilige Stadt und das Finanzielle/ hält die Wirtschaft am laufen.
    Er ist somit die Legislative, während die staatlichen Fraktionen wie Polizei oder Militär die Exekutive ist. Außer automatische Banns vom System.

    Trotzdem: Wenn das was du da machst irgendwann mal fertig ist und wofür du hoffentlich Hilfe findest, nur nicht von mir, weil ich nicht mal ein Tor auf und zu kriege, dann schaue ich mir das gerne an. Klingt nämlich gut, auch wenn mittlerweile nicht mehr alles so neu ist wie es bei der anfänglichen Entwicklung eventuell mal war.

    Danke das freut mich zu hören. Aber das Dinge altern und nicht mehr so neu sind ist verständlich bei einer derzeitigen Entwicklungszeit von knapp 3 Jahren. Siehe CGUI, welches eigentlich überflüssig ist das es mittlerweile CEF Integration gibt.

    Mit freundlichen Grüßen,
    misterdick

    Die Geschichte von PermaPlex:
    Wir schreiben das Jahr 2014.
    Damals habe ich aus Frust über die schlechten Updates des Vio-Servers einen Gamemode geschrieben.
    Diesen habe ich nach ca. ein Jahr Entwicklung eingestellt. Dieser Gamemode war damals schon recht anspruchsvoll.
    Am 5. Mai 2015 fragte mich mein späterer Projektleader ob ich nicht Lust hätte, auf ein Projekt mit ihm.
    Ich antwortete ihm, dass ich gerne diesem Projekt beitreten würde.
    Als wir an die Frage kamen, worauf wir den neuen Gamemode aufbauen wollen, sagte ich ihm, dass ich schon vor ca. einem Jahr einen Gamemode geschrieben hätte
    und wir diesen Gamemode weiterentwickeln könnten. Er akzeptierte und PermaPlex war geboren.
    Am 6. Mai 2015 erstellte ich uns ein Gitlab Repository und fügte den ersten Commit hinzu.
    Ab diesem Zeitpunkt begann die Entwicklung eines einzigartigen Gamemodes.
    Am 30. November 2015 wurde der komplette Gamemode überarbeitet.
    Am 10. Oktober 2016 wurde nochmals der komplette Gamemode überarbeitet und das aktuelle Module-System eingeführt.

    Heute, am 15. Februar 2018 würde ich gerne öffentlich um Hilfe bitten, dieses Projekt weiterhin am Leben zu halten.

    Ich suche lediglich Entwickler.

    Diese sollten:

    • geistige Reife besitzen
    • geübt sein im Umgang mit Lua
    • objektorientiertes Denken aufweisen von Vorteil
    • Querdenker und Visionär sein
    • wissendurstig sein
    • viel Spaß am Produzieren von neuen Algorithmen haben
    • viel Spaß am Erforschen von erweiterten Konzepten der Programmierung haben

    Ein paar weitere, tiefere Informationen zum Projekt:

    • Der Name PermaPlex ist eine Zusammensetzung aus den beiden Wörtern Permanent und Perplex.
    • Wir verwenden ein neuartiges Gui-System welches noch aus der Zeit stammt wo noch kein CEF integriert war. Dieses Gui-System ist inspiriert worden vom Webkit und bietet zwei neue Sprachen:

      • CGDL (Custom Gui Design Language): Diese ist prinzipiell Aufgebaut wie HTML besitzt aber Kontrollstrukturen und existiert um Guis zu beschreiben.
      • CGSL (Custom Gui Style Language): Ist ein direkter Klon von CSS der es dem Entwickler ermöglicht, die von CGDL beschrieben Guis zu designen (Farbgebung oder sonstiges). Durch CGSL ist auch ein Theme-System innerhalb des Gui-Systems möglich, welches dem Spieler erlaubt seine Gui fablich und formlich an seine Wünsche anzupassen. Die Positionen der Controls werden nicht absolut angegeben, sondern werden vom Gui-System berechnet (wie eine Webseite). Durch ein Dirty-Flag werden nur Teilstücke der Gui neuberechnet, falls sich dort etwas geändert hat (um Performance zu sparen).
    • Desweiteren verwenden wir ein Module-System welches angelehnt ist an den Modloader Minecraft Forge. Es ermöglicht den Entwicklern das Erweiteren von bereits existierenden Modulen ohne den Code des zu erweiternden Modules zu ändern. Desweiteren kapselt es den Code der einzelnen Module und bietet für jedes Module Konfigurationsmöglichkeiten. Das Module-System macht unseren Code leicht lesbar (immer selbe Struktur) und leicht wartbar.

    Das Konzept von PermaPlex verwendet möglichst nur Ideen, die wirklich neu sind (oder in ihrem Detailgrad so noch nicht umgesetzt wurden).
    Dazu zählen unter anderem folgende Ideen:

    • Das Spielgeschehen beschränkt sich auf Los Santos und die umliegenden Dörfer.
    • In der Spielewelt existiert eine sehr labile Wirtschaft, die es Spielern ermöglicht eigene Unternehmen zu gründen und so aktiv am Wachstum und Wohlstand teilzunehmen. Die Wirtschaft wird kontrolliert von allen Spielern des Servers. Spieler können auch eigene Banken oder Versicherungen erstellen.
    • Nichts kann aus dem Nichts erschaffen werden. Das gilt sowohl für Geld wie auch für Waren.
    • Es wird alle 3 Monate ein Bürgermeister gewählt. Dieser hat als Aufgabe die Gemeinschaft zusammenzuhalten und agiert quasi als Administrator auf dem Server. Er bestimmt auch das Regelwerk und teilt den Staatsfraktionen ihre finanziellen Mittel zu. Er hat darüber hinaus aber auch weitere weitreichende Möglichkeiten, z.B. verstaatlichung von Unternehmen, austauschen der Währung (bei einer Inflation/Deflation) oder das ändern der Staatsform.
    • Wenn ein Spieler stirbt wird sein Charakter gelöscht. Das Vermögen des Spielers geht dann an die Stadt oder an den Spieler den er in seinem Testament zu seinem Erben ernannt hat. Im späteren Verlauf können reiche Spieler sich auch Klone kaufen die dann aktiv werden sobald der Spieler stirbt.
    • Loggt sich ein Spieler aus wird er als schlafend (auf dem Boden liegend) angezeigt. Tut er das in der Öffentlichkeit kann er ausgeraubt werden.
    • Generell wird es schwer sein an Waffen zu kommen.
    • Es wird auch ein neues Auto-System geben welches die von GTA gebotene Handlingtabelle aushebelt und so ein eigenes Fahrzeughandling zulässt (getestet und funktioniert!). Dies soll dem Server ermöglichen, dass Fahrzeuge aus Einzelteilen bestehen und diese auch kaputt gehen können und so den Wert des Fahrzeuges senken. Ermöglicht zudem auch das Unternehmen Gebrauchtwagenhändler, bei dem man nie weiß was er einem versucht anzudrehen, Mechaniker und Schrottplatz.
    • Jobs werden generiert aus dem Mangel von Waren innerhalb der Spielewelt. Bsp. eine Tankstelle braucht neuen Sprit und schreibt einen Job aus für den Transport von Sprit. Der Spieler kann diesen Job annehmen und den Sprit transportieren, vorrausgesetzt er verfügt über die Qualifikationen. Spieler können sich auch Arten von Jobs vormerken und werden dann automatisch informiert wenn ein neuer Job verfügbar ist. Ermöglicht so auch das Unternehmen Transportunternehmen.
    • Der Spieler besitzt Hunger und Durst und muss diesen Bedürfnissen immer nachkommen, sonst droht er zu sterben.
    • Und vieles mehr ...

    Das aktuelle Team besteht nur noch aus mir. Das eigentliche Team ist über die Jahre auseinander gefallen und somit nicht mehr existent.
    Ich werde weiterhin die Entwicklung leiten und mich selbst an der Entwicklung beteiligen sowie das Anlernen von neuen Entwicklern übernehmen.

    Aktuell sind ca. 30% des Gamemodes umgesetzt. Hauptsächlich die sehr umfangreiche Basis auf der der Gamemode aufbaut.

    Es gibt bei diesem Projekt keine Vergütung. Jeder der hier mitmacht, sollte das aus den oben genannten Dingen tun.
    Das Projekt im Allgemeinen ist zeitlich unbeschränkt.

    Interessenten können sich bei mir per Konversation melden.

    Mit freundlichen Grüßen,
    misterdick

    Jetzt muss ich mal meinen Senf dazugeben :)

    Warum sollte ich Haxe benutzen?

    In der Vergangenheit gab es immer wieder Leute, die Alternativen zu Lua gefordert haben oder gar auf die Idee gekommen sind, MTAs Script-API via Sockets in Java zugänglich zu machen. Abgesehen von der schlechten Performance hat letzteres außerdem den Nachteil, dass es sich clientseitig nicht benutzen lässt.
    Dieses Problem gibt es bei Haxe nicht, da am anderen Ende Lua-Code herauskommt, der ohne zusätzliche Abhängigkeiten ausgeführt werden kann.


    Das Zitat von dir klingt sehr Negativ. Ich möchte hier mal auf ein paar deiner Aussagen näher eingehen.

    Schlechte Performance?
    Da ich selber ein Entwickler einer solchen MTA-Script-API in Java bin habe ich mich sehr Ausführlich mit dem Thema beschäftigt.
    Seitens der Performance gibt es absolut nichts auszusetzen. Sofern der Netzwerkcode optimiert geschrieben ist, ist die Performance sogar teilweise besser als in purem Lua.
    Zudem wenn kompliziertere, rechen aufwändigere Algorithmen benutzt werden ist Java definitiv die bessere Lösung.

    Nicht Clientseitig nutzbar?
    In einer nicht veröffentlichten Version meines Java-Servers für MTA habe ich mich auch mit diesem Thema beschäftigt.
    Selbst dieses Problem lässt sich Lösen. So habe ich ein System geschrieben welches es einem ermöglicht DX-Funktionen über den Server für jeden Client gesondert auszuführen.
    Auf der Basis dieses Systems lässt sich theoretisch alles auch auf dem Client entwickeln.

    Kein Lua-Code?
    Der Java-Server an sich ist eher ein Hybrid. Es wird über ein Framework auf Seiten des Java-Servers Funktionen ausgeführt die auf Seiten des MTA-Servers Funktionen eines Frameworks (in Lua geschrieben) ausführt. Das Ergebnis (der Returnwert) wird dann an den Java-Server zurück übermittelt. Es wird aber nur teilweise 10-20 Zeilen Lua-Code ausgeführt. Der Rest bleibt auf Java Seite. Man kann aber auch den größten Teil seines Gamemodes in Lua schreiben und nur geringe Teile in Java schreiben.

    Sonstiges?
    Der Funktionsumfang von Lua, ganz besonders in MTA, ist relativ beschränkt. Durch den Java-Server hat man die Chance den unbeschränkten Funktionsumfang von Java mitzunutzen.

    Generell ist Haxe auch nicht wirklich Optimal, besonders bei großen Projekten wird das alles doch relativ unübersichtlich. Zumal der Code generiert wird und Generatoren haben auch immer Probleme für die der Entwickler dann Lösungen finden muss.
    Desweiteren ist die Syntax ganz schöner Mist.

    Im großen und ganzen sind auch die MTA-Script-API's in anderen Sprachen gut. Ich würde nicht sagen das ein komplettes Framework / kompletter Server schlechter ist als ein Generator.

    Mfg
    Mr. D.

    Anmerkung:
    Es ist definitiv nicht ratsam einen Gamemode in einer anderen Sprache als Lua zu verfassen. Viel mehr sollte man mehr Zeit investieren um Frameworks zu entwickeln die das Arbeiten mit Lua in Bezug auf MTA vereinfachen.
    Besonders wenn man größere Projekte plant ist es ratsam alles auf einer anderen Basis zu schreiben z.b. durch Teilung des Codes in größere Module oder Systeme die dann mit anderen Modulen/Systemen durch fest vorgeschriebenen Interfaces kommunizieren.

    @MasterM habe das Problem anderster gelöst. Ist irgend eine komische Sache in der dxSetRenderTarget-Funktion. Dort werden anscheinend alle Zeichenbefehle entfernt nachdem man diese dxSetRenderTarget-Funktion aufruft, aber nur wenn man es im "onClientPreRender"-Ausführt.

    Gewollt oder doch eher blöd Programmiert?

    Zum Replizieren dieser Eigenart hier mal eine Code-Datei http://hastebin.com/unolasufik.lisp . Dort wird ein schwarzer Kasten gezeichnet in dem "Test Text 2!!!" steht. Darüber sollte eigentlich auch der Text "Test Text!!!" gezeichnet werden wird es aber nicht. Verschiebt man Zeile 2 unter Zeile 8 wird "Test Text!!!" gezeichnet. Führt man die Funktion im "onClientRender"-Event aus geht alles.

    mfg
    misterdick

    Hallo,

    ich habe ein Problem mit meinem Script:

    Lua: Radar.lua
    -- ... Problem gelöst

    Wenn ich Zeile 135 nicht auskommentiere, sehe ich die Karte in meiner Minimap (Zeile 81) nicht.
    Es wird auch der Text "Scale: <scale>" der in Zeile 128 gezeichnet wird nicht mehr gezeichnet.
    Die Lebensanzeige in Zeile 188 wird aber gezeichnet genauso wie der Rand.

    Die dxSetRenderTarget-Funktion liefert true zurück und dxCreateRenderTarget liefert mir ein gültiges RenderTarget zurück.

    Die Funktion _drawRadar() wird aufgerufen und die Bedingung "self:isCompassVisible()" ist true.

    Habt ihr eine Lösung dafür komme irgend wie echt nicht drauf warum meine Map nicht mehr in der Minimap gezeichnet wird wenn der Kompass eingeblendet wird.

    Edit:
    Hier einmal 2 Bilder die das Problem genauer Erklären sollen.

    Bild 1: Wenn ich die Zeile 135 nicht auskommentiere.

    Externer Inhalt s15.postimg.org
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.


    -- Bild

    Nur der Kompass funktioniert einwandfrei. Die Karte und der Scale-Text fehlen.

    Bild 2: Wenn ich Zeile 135 auskommentiere.

    Externer Inhalt s15.postimg.org
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.


    -- Bild

    Bei Bild 2 wird der Kompass oben links im MTA-Fenster gezeichnet.(Da ich ja nach dem Auskommentieren der Zeile den Kompass auf das Default RenderTarget zeichne) (Die Karte klappt einwandfrei und der Kompass auch)

    Desweiteren habe ich genügend Graphikspeicher MTA zugesichert über dxGetStatus sehe ich 2948 MB.

    Der Code hat einmal einwandfrei funktioniert (1.5.2 und kein OOP). Habe den Code 1:1 übernommen ohne Änderungen zu machen.

    Mfg
    misterdick

    Hallo Kruemmel,

    keine Ahnung ob du schon eine Lösung deines Problemes hast.

    Ein Problem ist ein verschobenes "end" Zeile 36. Das "end" sollte eigentlich zwischen Zeile 28-29 stehen. Du hast ja einen CommandHandler der deinen "/hausaufgabe"-Command erzeugt. Da dir dein "end" verrutscht ist stand der CommandHandler in der Funktion "oeffne_fenster". Diese Funktion wurde natürlich nie aufgerufen und so auch nie der CommandHandler.
    Ein zweites Problem sind die Warnings. Lass dir mal einen Kurs geben im lesen und verstehen von Warning/Error-Meldungen.
    Dein angegebener Warning bedeutet soviel wie: "in Zeile 7 übergibst du ein falsches Argument in der Funktion 'guiSetFont'. Diese Funktion erwartet als 1. Argument ein Gui-Element du übergibst hier aber nil.". Jetzt wo du diesen Warning verstehst kannst du ihn auch beheben. Du schaust dir dann die betroffene Zeile 7 an: "guiSetFont(labedabel, "default-bold-small")" als erstes erkennt man hier sofort das die Variable 'labedabel' nicht existiert. Sollte vermutlich 'infotext' drin stehen.

    Was sagt die Glaskugel zu deiner Zukunft?
    Nach der Eingabe des Commands '/hausaufgabe' wirst du feststellen das deine GUI immer noch nicht kommt. Du wirst nachgucken und wirst feststellen das da zwei Warnings erzeugt werden.

    Kurz und knapp: 'guiGetVisible(Fenster)' (Zeile 25 u. 26) das gleiche wie oben deine Variable 'Fenster' existiert nicht. Vermutlich meinst du 'fensterBG'.

    Behebst du diese Probleme wird dein Fenster angezeigt (aber ernst nach der Eingabe deines Commands '/hausaufgabe').

    Für deine F4-Tasten Funktion ist hier die passende Funktion https://wiki.multitheftauto.com/wiki/BindKey .

    Fazit:
    - Lass dir einen Kurs geben für das Lesen und Verstehen von Warnings/Error-Meldungen.
    - Achte mehr auf deine Variablenbezeichnung. Gibt es in Lua keine Variable mit dem Name dann ist sie nil.
    - Wenn dein Lehrer dann noch die Nerven dazu hat, lass dir noch beibringen wie du Code analysierst, dass wenn du einen Fehler hast das du den einfach findest und beheben kannst.

    Mit freundlichen Grüßen,
    misterdick

    Meine Schnittstelle war ein separater Server der neben dem MTA-Server lief und über eine Socketverbindung mit dem MTA-Server kommunizierte. Damit ermöglicht es einem absolute alles was man entwickeln will zu entwickeln.

    Wollte eig mal ein reines C++-Module schreiben welches die Netzwerkverbindung zu den unterschiedlichen Schnittstellen-Server bereitstellt und verschiedene Schnittstellen die auf meinem Java-Code basieren erstellen z.b. eine Schnittstelle für C#, Java oder PHP.

    Mein Ziel war es aber die Gamemode-Entwicklung auf viele höhere Programmiersprachen auszulagern und die Funktionen des MTA-Servers zu erweitern.
    Was dein Ziel genau ist weis ich jetzt auch nicht. Kannst du das nochmal genauer erklären?

    Hallo KeksKing,

    ich würde noch deutlich mehr dran ändern:

    1. Du gibst der Funktion "hungerBalken" ja schon den Spieler mit warum beziehst du ihn nochmal danach?
    -> Du kannst den Spieler den du übergibst weitergeben und diesen als Argument in deiner Timer-Funktion benutzen.

    2. Du definiertest eine Variable "gamer" local über dem "setTimer"-Befehl was so nicht korrekt ist, da innerhalb einer Timer-Funktion nur auf Globale Variablen oder übergebene Variablen (als Parameter dem "setTimer"-Befehl übergeben, siehe mta-wiki) zugegriffen werden kann. Daher wäre die Zeile (bei mir 13.) immer false da gamer immer == nil (null) ist.
    -> Siehe Lösung zu Punkt 1.

    3. Du wenn du "h" (Hunger) zuerst manipulierst dann abspeicherst danach prüfst macht die if darunter schon mehr sinn.
    -> die Variable "h" nach dem abrufen direkt Manipulieren danach abspeichern dann überprüfen ob sie < 20 oder <= 0 ist.

    4. Siehe Beitrag von Flatliner_.

    Mit freundlichen Grüßen,
    misterdick

    Hallo,

    ich frage mich ob ihr (die Fehlersuchenden) auch mal Googled.
    Gebe ich z.B. folgenden Text in Google ein "mysql fehler 1062" spuckt mir Google tausende Erklärungen aus wie dieser Fehler entstehen kann.
    Zumal steht im Debugscript das der Fehler in Zeile 118 ensteht. Also guck ich mir mal Zeile 118 an:

    Lua
    if not dbExec ( handler, "INSERT INTO vehicles (UID, Typ, Tuning, Spawnpos_X, Spawnpos_Y, Spawnpos_Z, Spawnrot_X, Spawnrot_Y, Spawnrot_Z, Farbe, Paintjob, Benzin, Slot, Sportmotor, Bremse, Antrieb) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", playerUID[pname], vehid, Tuning, spawnx, spawny, spawnz, rx, ry, rz, color, Paintjob, '100', slot, '0', '0', antrieb )  then

    Jetzt stelle ich fest irgend eine Spalte die ich da "Inserten" will ist ein Primary-Key. In Google findet man auch eine Erklärung was ein Primary-Key genau ist und man findet auch heraus das ein Primary-Key einzigartig sein muss.
    Nun Prüfe ich die Zeile erneut und finde heraus das die Spalte "UID" ein Primary-Key ist.

    FERTIG! Fehler Gefunden und sogar schon eine Lösung Parat.

    Was du jetzt tun müsstest ist zu gucken ob die Spalte "UID" Autoinkrement gesetzt hat.
    Wenn Ja kannst du die Spalte einfach undefiniert lassen. D.h. "UID," raus und "playerUID[pnam]," raus.
    Wenn Nein sollte du für die Spalte "UID" den Autoinkrement Wert setzen.
    Aufgrund der Variable "playerUID" willst du das "Vehicle" einem Spieler zuweisen.
    Dann solltest du eine neue Spalte anlegen mit "owner" oder so und dort dann die Spieler-UID eintragen.
    Dabei solltest du nicht vergessen das jedes Auto eine eindeutige ID zugewiesen bekommen muss, damit du es eindeutig identifizieren kannst.

    Nun sollte das alles funktionieren und schwer war das auch nicht.

    misterdick

    Hallo -Jack001,

    aber jetzt mal ehrlich, dein Code ist katastrophal. Ich entschuldige mich vorne weg das ich nach einer Lösung deines Problemes dennoch etwas hier drunter schreibe, aber das solltest du wissen bevor du weiter machst.

    1. Valides HTML

    Spoiler anzeigen
    HTML
    <head>
    ...
    </head>
    ...
    <script>
    ...
    </script>


    Das so eine Struktur funktioniert liegt vermutlich nur an den heutigen Browsern die dies so annehmen. Ein Älterer oder gar strikterer Browser würde deinen Code mit einer Fehlermeldung zurück geben.
    Du solltest dir angewöhnen ein valides HTML-Dokument zu verwenden. Wie ein valides HTML-Dokument aussieht zeige ich dir hier:

    Spoiler anzeigen
    HTML
    <html>
    <head>
    ...
    </head>
    <body>
    ...
    </body>
    </html>

    2. Überschrift mit dem "head"-Tag?

    Spoiler anzeigen
    HTML
    <head>
    <center>
    Berechnung
    </head>
    </center>


    Ich habe noch nie sowas gesehen. Das "head"-Tag ist normalerweise nur für Javascripts, Stylesheets oder meta-Informationen (meta,title,ect) gedacht.
    Das falsch platzierte "center"-Tag ignorieren wir hier mal. Im validen XML könnte das schon zu Fehlern führen. Sowas sieht man recht schön man den Code ordentlich einrückt.
    Ordentlich und richtig wäre das ganze so:

    Spoiler anzeigen
    HTML
    <head>
       <center>
           Berechnung
       </center>
    </head>


    Was aber sowieso überflüssig ist da eine Überschrift normalerweise nicht in das "head"-Tag gehört. Wohin es dann gehört siehst du weiter unten.

    3. Explizit definierte "Script"-Tags
    Du solltest versuchen deine "script"-Tags explizit zu Definieren d.h. du gibst explizit an für welche Sprache dieses "script"-Tag ist. Was aber nicht so wichtig ist da es ja auch ohne "language"- und "type"-Attribute geht.

    Wie dein kompletter Code vollkommen Korrekt aussieht siehst du hier:

    Spoiler anzeigen

    Es gibt bestimmt noch hunderte Dinge an deinem Code auszusetzen aber ich belasse es einfach mal bei dem wichtigsten.

    Du solltest immer solche Ratschläge ernst nehmen. Deinen Code aus deinem Startbeitrag kann man relativ schlecht lesen und im falle eines größeren HTML-Dokumentes wirst du sehr schnell die Orientierung verlieren.

    Mehr will ich dazu jetzt eigentlich nicht schreiben. Denke mein Beitrag erklärt relativ viel.
    Falls mein Beitrag unangebracht ist entschuldige ich mich ebenfalls dafür.

    Mit freundlichen Grüßen,
    misterdick

    Hallo Phibo,

    dein Problem ist das du die Click-Listener auf eine ID gesetzt hast die ist in der Regel einzigartig.
    Ändere deine Div's von id zu class und im JQuery der Selector von # (id) zu . (class).

    Hier der verbesserte Code:
    https://jsfiddle.net/wdg6xt3k/

    Spoiler anzeigen
    HTML
    <div class="friend_list" value="test">test</div>
    JavaScript
    var main = function(){
      $(".friend_list").click(function(){
        var value = this.getAttribute('value');
        alert(value);
      });
    };
    $(document).ready(main);

    Mit freundlichen Grüßen,
    misterdick

    Hallo,

    Danke erstmal an alle für das Feedback.

    Was ich jedoch etwas schade finde ist, dass das Ganze nicht vollständig Open-Source ist. Was spricht dagegen alles zu veröffentlichen? Wenn ich das richtig sehe, ist es derzeit so ohne weiteres auch nicht möglich neue Funktionen hinzuzufügen.

    Das mit dem Open-Source wird vermutlich noch kommen, ich bin noch am Überlegen ob ich diesen Schritt wagen sollte und das mit dem Hinzufügen von neuen Funktionen ist möglich.
    z.B. in Form eines Plugins welches dann in Java geladen werden kann oder im Gamemodecode als eigene Klasse über diverse Schnittstellen die ich aber noch ein wenig ausarbeiten muss da sie doch noch recht Roh sind.


    Am Rande mehrere Gamemodes in einem Java-Server zu starten ist nicht möglich.


    misterdick


    -------------------------------------------------------------


    Habe mich doch dazu entschieden es Open-Source zu machen.
    Da doch die komplette Community etwas davon haben sollte, auch vom Code.
    Wer Änderungen vornehmen will sollte sich vorher bei mir melden, damit ich sie richtig Integrieren kann ect.

    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.