multiplayer, nur wie

  • GM 8
  • multiplayer, nur wie

    moin,

    nachdem ich mein problem mit dem "pfad checken lassen" lösen konnte und ne brauchbare ai "zusammengestellt" habe hänge ich am nächsten schritt...wie geht multiplayer. hab schon paar tutorials gemacht, und mit der ez multiplayer extension rumgespielt.
    nun zu meinem problem, wirklich jedes tutorial was ich im netz fand und verstehen konnte (eingeschränktes verständnis bei genuscheltem englisch xD) basiert auf plattformern.

    ich möchte aber keine plattformer bauen, sondern ne art tower defence. kennt jemand nen tutorial welches sich damit beschäftigt?
    als beispiel möchte ich ne wall von beiden playern auf dem spielgfeld bauen lassen, player 1 ne blaue, player 2 ne rote, jeweils mit nem linken mausklick.

    kann mir da jemand bitte helfen, ich hab nämlich so garkeine ahnung wie ich an das prob rantreten soll.


    mfg
  • Welchen Funktion möchtest Du denn benutzen? Die 39DLL (Bisschen Fortgeschrittener, jedoch besser/mehrere Funktionen...) oder Die Interne Funktion von GameMaker (nicht Studio) MPlay- Multiplayer Play.

    Ich kenne zwar nicht Tower Defense, habe aber nachgooglelt und könnte dir diesen Beispiel als MPlay besonders empfehlen: Diesen*


    Ansonsten wenn Du direkt mit der 39DLL anfangen möchtest, währen diese Tutorials im Youtube oder Diese nützlich:



    :)



    MFG,
    DefZombie
  • huhu,

    ich habe dieses tut durchgenommen, arbeitet wohl auch mit 39dll. mein spiel soll nur mit 2 playern funzen daher habe ich dies für mich ausgesucht.
    die sache ist halt dass ich kein spiel machen möchte in dem man eine figur "direkt" steuert, sondern dass ich ähnlich den strategie und tower defence spielen auf einem grid "türme" und "walls" setzen möchte an denen meine kleinen bots vorbeilatschen sollen - bzw die von meinem gegner. jetzt beschäftigen sich aber alle tuts die ich fand damit wie man eine figur "direkt" steuert ( auch deine =) ), was ja nicht in meinem interesse liegt. daher meine frage nach tuts oder ideen wie ich sowas umsetzen kann.

    mfg
  • Prinzipiell funktioniert dass so wie es in den Tutorials gesehen hast (eine etwas gewagte Aussage, da ich nciht weiss welche Tutorials du gesehen hast^^).

    Wenn der Client eine Mauer bauen möchte, wählt er clientseitig in seinem Menü die Mauer aus, klickt dann an die Stelle wo die Mauer aufgebaut werden soll und legt zB dabei die Rotation fest, wenn er dann die Maustaste losgelassen hat, wird statt, dass die Mauer gebaut wird, wein Script aufgerufen, dass eine von die definierte Konstante an den Server schickt:

    GML-Quellcode

    1. send_bau(BAU_MAUER,team, x, y, rotation);

    Dieses Script, schreibt die Daten in den buffer in dem du normalerweise auch die Bewegungen oder den typischen ping verschicken würdest.

    Der Server ließt sich den buffer durch und merkt, dass da ein BAU_MAUER angekommen ist und erstellt bei sich ein obj_mauer an position x,y, mit der Rotation und dem image_index/sprite_index team.

    Wenn der Server im nächsten Step durch alle Instancen geht die übers Netzwerk übertragen werden sollen, sieht er das ein obj_mauer existiert und überträgt dessen Position, rotation und teamfarbe.
    Oder besser noch; der Server sendet durch den buffer indem normalerweise dann die Spielerpositionen übertragen werden, eine/mehrere variablen, die dem Client mitteilen, das an position xy mit rotation soundso zugehörig zu jendem team eine Mauer entstehen soll.

    Der Client ließt den buffer vom Server, merkt dass es für die variable bau eine änderung gab (zB 0001) als eindeutige "id" für Mauer, bekommt die position, rotation und teamfarbe mit, und erstellt dort die jeweilige instanz.

    Nächsten Step und sofern der Client keine weitere bau-order sendet, stellt der Server die variable bau auf 0000 und der client baut keine weitere Mauer an dieselbe stelle.



    Deine AI wird nur am Server ausgeführt, der sendet die Positionen, rotationen etc, der Einheiten an den Spieler und der drawed dort nur die Einheiten an der richtigen Stelle.


    Der Serverbuffer könnte also so aufgebaut sein:
    Spoiler anzeigen

    GML-Quellcode

    1. //Anzahl der Spieler
    2. //Anzahl der zu übertragenden Objekte
    3. //bau
    4. //bauposx
    5. //bauposy
    6. //baurot
    7. //bauteam
    8. with (obj_spieler)
    9. {
    10. //spielername
    11. //pseudospielerpositionx
    12. //pseudospielerpositiony
    13. //pseudospielerrotation
    14. //teamseite
    15. //chatnachricht
    16. //statusnachricht
    17. }
    18. with (obj_einheit)
    19. {
    20. //einheitenname
    21. //posx
    22. //posy
    23. //rot
    24. //team
    25. //leererstring
    26. //leererstring oder statusbericht
    27. }
    28. //etc
    Alles anzeigen




    der client ließt das aus:
    Spoiler anzeigen

    GML-Quellcode

    1. //zuerst alle bufferdaten ohne with statement
    2. count_player = buffer read ... //zB 2
    3. count_animated_objects = ... //zB 16
    4. bau = ... //zB 0000
    5. bauposx = ... //zB 0
    6. //dann in einer forschleife (anzahl der zu übertragenden objekte)
    7. for (i = 0 ; i < count_animated_objects ; ++i)
    8. {
    9. name = ...
    10. posx = ...
    11. .
    12. .
    13. .
    14. }
    15. //und im draw event wird das dann gedrawed
    Alles anzeigen


    out now: KNOSSOS auf itch.io
    ancient-pixel.com <<< ich freue mich über einen Besuch! ^^