Ez Multiplayer Extension V1.1 (39DLL)

    • GEX

      Ez Multiplayer Extension V1.1 (39DLL)

      Da ich mich schon immer gefragt habe, wie es ausehen würde, wie es möglich ist dynamisch viele Clients zu machen, also für einen Multiplayer, bin ich durch Suche auf ein Youtube Video gestoßen, die hier ihre eigene Extension anbieten, die mit der 39dll arbeitet und einem viel Arbeit erleichtert. Allerdings verstanden habe ich alles trotzdem nicht so ganz. Jedenfalls konnte ich ganz schöne Ergebnisse erzielen.
      Die Videotutorials sind ebenfalls auf deren Downloadseite verlinkt. Viel Spaß! :)

      gmc.yoyogames.com/index.php?showtopic=588770

      Das ist möglicherweise genau das, was andere suchen;)

      Edit: Ich wollte doch noch ein Feedback geben was ich im insgesamten davon halte. In manchen Situationen werden einfach keine Pakete gesendet. Ja es ist schon ein großer Vorteil, dass du komplett auf das empfangen der Pakete nicht mehr eingehen musst, heißt nicht mehr programmieren musst. Das passiert alles automatisch, ob ihrs glaubt oder nicht. Da sich das ganze noch in einer frühen Phase befindet, schlage ich vor, euer Spiel deswegen nicht auf die Extension umzusteigen, solltet ihr bereits die 39dll oder ähnliches verwenden. Dabei könnten viele Fehler entstehen und natürlich muss das ganze Programm dadurch umgeschrieben werden. Noch ein Nachteil ist, dass die Erweiterung nur die wichtigsten Funktionen beinhaltet um eine TCP-Verbindung aufzubauen. Dadurch, dass er nur in ganz bestimmten Situationen Pakete gesendet hat und manchmal nicht, ist mir bis heute ein Rätsel, was bis heute mit der 39dll noch nie so vorkam. Im Ganzen ratte ich doch lieber davon ab, auch wenns einfacher zu verstehen ist. :)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mar96k“ ()

      Ich habe immer einen oder mehrere Fehler nachdem ich Husky!´s Tutorials gefolgt bin und er konnte mir keine Antwort darauf geben:

      In extension function net_client_connect:
      Error in code at line 6:
      global.net_client_tcp = external_call(global._SokA,net_client_ip,net_client_port,1);
      ^
      at position 47: Unknown variable _SokA

      und dass er in einem <unknown> Script Argumente haben will die er nicht findet (an der Stelle 3,4, unf 5)

      Außerdem sagt er wenn ich versuche einen Client zu connecten, dass er die 39dll nicht finden könnte. :S


      Welchen Tutorials bist du gefolgt und hats auf Anhieb geklappt?

      Hättest du eine gmk oder gm81 zum vergleichen?

      ancient-pixel.com
      youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
      Ich habe seine Online Mass Tutorial befolgt. Später irgendwann hat er zwei Fehler behoben und dann gestartet. Hat eigentlich funktioniert. Allerdings sendet er nicht im Create Event und so nen Mist. Ich komm damit nicht klar, egal, ich finde die 39dll garnicht so schwer, wenn du sie verstanden hast. Irgendwie ging manchmal das senden nicht und so ein Kramm. Der Hauptentwickler der Extension hat auf seinem Kanal einen Shooter hochgeladen, welcher jedem zu Verfügung steht. Das ganze habe ich mit GM 8.0 Pro getestet. Hast du die dll richtig inkludiert? also über das Include Files. Nicht über die .gml datei. Ich gehe mal aber nicht davon aus, dass du dazu nicht in der Lage wärst.

      Eigentlich ist die 39dll nicht so schwer, musst dich nur maximal ca. einen Monat beschäftigen um das meiste zu verstehen.
      Client sendet bei Ereignissen an Server, Server verarbeitet und schickt an alle Clients, Der Clients empfängt und prüft ob die Nachricht nicht von ihm stammt (ID) oder eben doch, wie es halt zu gebrauchen ist.

      Ich empfehle dir mit der 39dll zu arbeiten, auch wenn du vielleicht am Anfang nicht damit zurecht kommst. Ging mir genauso. Kann aber jetzt nicht sagen wie weit du dich damit auskennst, deswegen vorhab, dass ich dich nicht werten/einschätzen möchte.

      MFG: mar96k
      Ich hab einiges rumgeschraubt im Sever und Client und jetzt gehts^^

      Aber ich muss immer eine exe erstellen, damit der Client nicht sagt, dass er die dll nicht finden kann. Jede neue Änderung mit einer exe zu testen ist zwar umständlich aber wenigstens funktionierts :)

      Das tolle an EZ ist halt das es all die umständlcihen 39er dll scripts in schöne und verständliche funktionen verpackt. Aber ich sollte mich mitunter trotzdem mit der dll an sich auch beschäftigen. Ich hab mir damals die Scripts durchgelesen und die Beispiel gmks und wurde erschlagen. Mal sehen ob EZ irgendwo gewissen Einschränkungen aufweisen wird.

      ancient-pixel.com
      youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
      Ich ratte dir die 39dll auszuprobieren.

      Angenohmen du hast eine Server/Client-Anwendung. Der Clients sendet ja typischerweise mit

      clearbuffer();
      writebyte(1);
      writebyte(player_id);
      writeshort(x);
      writeshort(y);
      sendmessage(tcp); // tcp entspricht die initialisierte Verbindung zum Server

      Für die Server-Seite solltest du immer ein Player-Objekt erstellen, welches sozugagen den jeweiligen Client entspricht. Im Step Event von diesem Player-Objekt des Servers erhältst du die Pakete und sendest sie an alle Clients zurück.

      //receive-kram

      //send-kram

      with(obj_server_player)
      {
      sendmessage(tcp); // Damit machst du es möglich, das der Server an alle Clients zurück sendet.
      //Wenn du das nicht willst, dann prüfst du ob die obj_server_player.id != other.id ist
      }

      Ich denke ich schicke dir dann noch ein Example an dem ich mal gearbeitet habe, also eins mit der 39dll. Wenn du sie erstmal verstanden hast, ist es garnicht mehr so schwer
      und dir macht das programmieren noch mehr spaß:)