Netzwerk-Tutorial ohne DLL (Game Maker Studio)

    • Studio
      Guten Tag,

      dein Tutorial ist echt super geschrieben und formuliert, dennoch blicke ich da leider nicht ganz durch. Wenn ich jetzt ein Objekt hinzufügen möchte schießt der Immer den Spieler aufm Server durch die gegend...

      Ich habe bis jetzt anfangs versucht 2 neue Buffer hinzuzufügen und auszulesen, da blick ich jedoch nich ganz durch mit deiner SendPos funktion sschießt der wie gesagt den Spieler durch die gegend.... was ja auch klar ist da die SendPos ja nur für den Spieler sind...

      Jetzt weiß ich aber nicht wie ich andere Objekte oder ähnliches Synchronisieren kann...

      Bitte um Hilfe, danke im Vorraus :D

      GearSoft schrieb:

      2 neue Buffer hinzuzufügen

      Du brauchst nur einen Buffer ;)


      GearSoft schrieb:

      Jetzt weiß ich aber nicht wie ich andere Objekte oder ähnliches Synchronisieren kann...

      Du schickst VOR allem was du sendest einen WERT mit.
      Was kommt ganz auf dich an, z.B. eine Zahl und anhand dieser Zahl wählst du im Netzwerk Event, mithilfe einer Switch Tabelle, aus was dort eigentlich angekommen ist.


      Ich werde versuchen die nächsten Tage mal die Zeit zu finden das Tutorial zu erweitern sodass nur noch gesendet wird wenn es nötig ist (Traffic minimieren) und es um Weltverändernde Objekte zu erweitern also z.B. Geschosse oder Kisten die verschoben werden können.
      Aber wie gesagt, leider erst sobald ich Zeit dazu finde ;)
      Hey Ball of Steel,

      erstmal danke für das Ausführliche Tutorial,

      ich habe es getestet und auf mein Projekt übertragen ^^
      mein Problem ist allerdings nun folgendes,...

      Bei einem Lan-Spiel fungiert ein Spieler ja sozusagen als Host,... welcher das Spiel öffnet und andere können ihm beitreten,...

      Mein Problem ist nun das ich es nicht hinbekomme das der Server die Position seiner eigenen Instanz die er selbst besitz an die Clients sendet,...
      dachte eigentlich das ich dazu nur die eigene Instanz in die SpielerListe eintragen brauche,... aber irgendwie bekomme ich das nicht ganz hin.

      Hättest du da vielleicht ne Lösung oder en Tipp wie ich das am besten anstelle?

      EDIT:

      Ich habe es hinbekommen indem ich es geschaft habe beim Host, gleichzeitig einen Server und Client im selbsten Projekt zu erstellen. Zusätzlich erstellt der Server keine Spieler mehr sonder sendet die Daten einfach weiter

      Grüßle Blayde

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

      Ich versuch mich da gerade etwas reinzufuchsen und habe nun ein klitzekleines Problem.
      Ich möchte die Onlinefunktion im Spiel ein und ausschalten können und habe es wie folgt versucht:
      (wenn im Menü eine Bestimmte Option gedrückt wird (auf position Cursor = 6)

      GML-Quellcode

      1. if(cursor = 6){
      2. if(global.onlinemode == false){
      3. global.onlinemode = true
      4. instance_create(x,y,obj_Client)
      5. show_message("Online Mode Activated")
      6. }
      7. else{
      8. global.onlinemode = false
      9. with(obj_Client){
      10. instance_destroy();
      11. }
      12. show_message("Online Mode Deactivated")
      13. }
      14. }


      Ich bin mir nicht sicher, ob der Spieler vom Server disconnected wird, aber im Server bleibt der Spieler bestehen (Spieler ändert sich nicht von 1 auf 0)
      Wo liegt der Fehler? Wie behebe ich das?
      Guten Abend

      Ein schönes tutorial Danke.
      Ich wollte fragen ob man auch eines im RTS bereich als wie z.b bei Warcraft oder CNC machen kann? Also das die Einheiten und gebaude beim client sowie beim server angezeigt werden können ? is das mit GM möglich habe Game maker studio PROF.

      Grüsse
      MAKE MY WORLD WITH GAME MAKER :gmlove:
      Ich wollte fragen ob man auch eines im RTS bereich als wie z.b bei Warcraft oder CNC machen kann? Also das die Einheiten und gebaude beim client sowie beim server angezeigt werden können ? is das mit GM möglich habe Game maker studio PROF.


      Ja es ist möglich.
      Dies muss man allerdings erstmal auf die Beine stellen und am besten den Server extern vom Spiel schreiben und diesen dann auf einen richtigen Server laufen lassen um Laggs zu vermeiden.
      Wäre blöd, wenn auf mal ein Panzer nicht gebaut wird, oder auf einmal verschwindet.
      Nicht unbedingt wenn es eh nur um ein Warcraft/CnC mäßiges Multiplayerspiel geht, da kann ruhig ein Client auch den Server stellen, da reicht die Bandbreite aus für die Übertragung der Daten und der PC ist sicher stark genug um das zu brerechnen.

      Die Einheiten werden also auf nur bei einem Spieler erstellt, der führt auch alle collision und hit checks durch udn beim 2ten oder den anderen Spielern werden die einheiten und objekte die dynamisch sind nur gedrawed. Alles was statisch ist, die Map, UI, etc bleibt beim Client und er schickt einfach nur den Befehl die Einheit die zu ihm gehört udn an der Stelle x,y, auf der Map ist irgendwohin zu bewegen. Es wird also immernur eine Liste zwischen Client udn Server herumegschickt mit den Updates der draw befehle und den bewegungsetc befehlen

      ancient-pixel.com
      youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
      Okay also muss ich zum server nur die x und y daten von den einehtien schicken damit er diese drawt oder macht das GM selber ?
      Ich habe immer gehört das man jede Spieler bewegung per befehl senden muss. Ich meine wenn ich jetzt einen helden einbaue den man mit WASD und maus spielt dann muss ich alles per code zum server senden?

      Aber es gibt kein direktes tutorial das so was in die richtung zeigt? Ihc habe das GM_Mp example tutorial nicht gefunden.
      MAKE MY WORLD WITH GAME MAKER :gmlove:
      wie dein spiel aufgebaut ist hängt doch von dir ab. spieletechnich musst du alles programmieren wie gehabt, das networking ist ja nur ein tool um daten an andere clients zu senden. welche daten du sendest und was du damit machst hängt ganz von dir ab
      132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
      Du könntest zB nur die Tastatureingaben zum Server senden, welcher dann die neuen Koordinaten zurücksendet (Was cheaten erschweren würde, wobei man das denke ich bei GM spielen nicht beachten muss :D ), oder du lässt den Clienten die Position selbst berechnen und schickst nur die Koordinaten an den Server, was aber meiner Meinung nach zu Problemen führen könnte :P

      Würde mir aber auch mal gerne das Multiplayerexample ansehen, wenn ich wüsste wo's ist :D
      Vielleicht noch ein Tipp um erstellte Objekte sicher zu übertragen, habe die Ingamefunktionen nie benutzt aber bei der 39dll mache ich es immer so, dass einmal der Client eine ID zur Identifizierung sendet, dann ein erstelltes Objekt (z.B. ein Panzer) eine einmalige Erkennungsnummer sendet und dann eben noch die normalen Variablen wie X und Y. Das wird dann alles zum Server geschickt und wieder zurück an die Clienten. Nun zum spannenden Teil. Es wird mit einer ds_map geprüft ob schon das Objekt mit der einmaligen Nummer exisitiert, wenn nicht, dann wird es erstellt und die Erkennungsnummer wird zusammen mit der erstellten Objekt ID in der ds_map gespeichert. Danach wird einfach das bestimmte Objekt aus der ds_map ausgelesen und die Variablen übertragen.

      Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
      @Dufner Bei dem Eingebauten Networking ist, wenn das richtige Protokoll gewählt wurde, die Verbindung komplett Verlustfrei, man muss sich also soweit garkeine Sorgen machen ob Daten jetzt schon angekommen sind oder doppelt an einen Client gesendet wurden. Wenn du da noch nicht reingeguckt hast würde ich dir es wirklich empfehlen, im vergleich zur 39DLL sehr einfach mit den Buffern und um etwas an alle Clients zu senden benötigt es eigentlich nur 2 verschachtelte for-Schleifen die dann die SocketListe durchgehen (jeder Client sendet an den Server eine SocketID die dann eindeutig gespeichert werden kann) Die Buffer Größe kann man auch automatisch berechnet mitsenden, das sieht dann so aus dass man die leseposition des Buffers auf ende setzt, dass man eine ID für die Art der nachricht in den Buffer packt und danach alle relevanten informationen reinschreibt, dann rundet man das ganze noch mit einem Buffer_tell ab und alles ist wunderbar. Habe Auch mit der 39DLL angefangen und fand das Networking event von Studio erst etwas verwirrend, aber es bewirkt echt wunder wie einfach man damit Programmieren kann wenn man den Dreh einmal raus hat.
      132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
      Vorteil bei allem rund ums Programmieren ist wenn man der Englischen Sprache mächtig ist. Dann kann man sich unzählige gute Tutorials Auf Youtube angucken. Gute Youtuber sind HeartBeast, RealTutsGML, MishMash, The Snidr, und dann gibts noch Husky! und The Sivart wovon letzte beide allerdings schon länger nicht mehr aktiv waren und meiner meinung auch nicht so guten Content produziert haben (im vergleich zu den ersten vier). Ich habe allerdings nicht von spezifischen commands geredet sondern eher erläutert wie das versenden von Daten mit dem Studio Networking von statten geht, falls Dufner da noch nicht reingeguckt hat.

      EDIT @Balls of Steel habe übrigens einen kleinen Fehler in deinem Tutorial gefunden. max_clients beim network_create_server() begrenzt nicht die maximale Anzahl an Spielern die zusammen auf dem Server sein können, sondern nur die maximale Anzahl an Connections die gleichzeitig eingehen können. Ist also sozusagen eher ein Überlastungsschutz. Um die Maximale Anzahl an Spielern zu begrenzen müsste man dafür selber eine Funktion schreiben welche prüft wieviele Spieler gerade verbunden sind, und falls diese einen gewünschten Wert übersteigt an neu verbindende Clients eine Nachricht schickt damit sich diese wieder disconnecten.

      Da gab es schon einige Kontroversen drüber, und soweit ich weiß wurde es noch nicht abgeändert, die manual ist in diesem Punkt leider unklar.
      132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:

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

      Rhazul schrieb:

      EDIT @Balls of Steel habe übrigens einen kleinen Fehler in deinem Tutorial gefunden. max_clients beim network_create_server() begrenzt nicht die maximale Anzahl an Spielern die zusammen auf dem Server sein können, sondern nur die maximale Anzahl an Connections die gleichzeitig eingehen können.


      @ Rhazul, danke für den Hinweis, hatte es schon in einem anderen Thread max_client 118 rausgefunden.
      Problem ich kann es nicht verbessern, da die maximale Zeichenlänge pro Thread auf 10000 begrenzt wurde und ich deshalb meinen Post nicht mehr editieren kann.


      Balls of Steel schrieb:

      Hab hier noch etwas ergänzend gefunden. Ist nur Google Übersetzer, aber denke das reicht in dem Fall.

      Der Grund, warum Sie mehr als die gewünschte Anzahl von Clients eine Verbindung ist, weil Sie lesen diese ganze Sache falsch. "Max Clients" in dieser Funktion bezieht sich auf die maximale Anzahl gleichzeitiger Verbindungen nicht die maximale Anzahl von Gesamt Verbindungen.
      Zum Beispiel, wenn wir max Clients auf 2 gesetzt und wir haben 3 gleichzeitige Anbindung von Clients: A, B, C dann A und B werden zuerst gleichzeitig zu verbinden, während C muss warten, bis A und B verbunden sind.
      Das Problem ist nicht ein Fehler.
      GM: S Hilfe-Handbuch: "max_client:. Die maximale Anzahl der Clients, die gleichzeitig angeschlossen werden können"

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Balls of Steel“ ()