39 DLL "Dynamische" Multiplayer Engine - Problem

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 39 DLL "Dynamische" Multiplayer Engine - Problem

    Hallo Leute!

    Ich arbeite seit geraumer Zeit an einer "dynamischen" Multiplayer Engine. (Weiss nicht wie ich es sonst nennen soll.)
    Also folgendes: Ich habe ir hier einige Tutorials über die 39 DLL angeschaut. in denen wurde aber immer eine festegelegte Anzahl an Spielern benötigt um das game zu starten. (Host kommt in warteraum udn wartet auf 2 Spieler.)
    Mein Ziel war es dass man, wie in Kommerziellen Games, jederzeit Joinen und sich ausloggen kann.

    Also habe ich mich rangesetzt und versucht die engine zu Programmieren.
    Bis dato schaut der Code ganz gut aus. Es basiert auf dem Verfahren, dass der Host ein riesiges 2 Dimensinales Array verwaltet.
    In dieses Array werden die einzelnen Clients eingetragen. Der Host, versendet dann das komplette Array (samt allen Daten aller Spieler) an jeden einzelnen Client.

    Das Problem ist nur,(zumindest glaub ich dass) das die ECHTZEITABFRAGE der eingehenden Verbindungen nicht so funktioniert wie sie es sollte.

    Ich versuche mit tcplisten und tcpaccept jeden STEP eine Verbindung zu suchen und zu aktzeptieren.
    Dann wird geschaut ob die maximale Spieleranzahl erreicht ist, und dem Client wird ein Platz im Array reserviert.
    Jedoch funktioniert dies nicht wirklich.

    Ist es überhaupt möglich tcpListen und tcpaccept in echtzeit abzufragen?

    Hier mal ein wirklich kleiner teil meines Codes wo alles gesteuert wird:

    Spoiler anzeigen

    GML-Quellcode

    1. if(object_exists(obj_pl_main)){
    2. global.own_data[1] = obj_pl_main.x;
    3. global.own_data[2] = obj_pl_main.y;
    4. }
    5. if (global.master = true){
    6. listen = tcplisten(14804, 2, true);
    7. var player;
    8. new_client = tcpaccept(listen, true);
    9. if not (new_client <= 0){
    10. for(i=1;i<3;i+=+1){
    11. if(global.client[i]==-1){
    12. player = i;
    13. emptyplace = 1;
    14. break;
    15. }
    16. }
    17. if(emptyPlace = 1){
    18. global.client[player] = new_client;//hier ID senden
    19. clearbuffer() //hier wird ID versendet damit man sie später zuordnen kann
    20. writestring("newEntry")
    21. writeshort(player)
    22. sendmessage(client)
    23. }else{
    24. closesocket(client);
    25. //sende rückmeldung das kein Platz frei ist.
    26. //Verbindung wird unterbrochen.
    27. }
    28. }
    29. scr_send_datas_host();
    30. scr_empf_datas_host();
    31. scr_client_unreachable();
    32. scr_stear_with_other_players();
    33. }else{
    34. if (newEntryPossible != 0){
    35. var ne;
    36. ne = readstring();
    37. if (ne == "newEntry"){
    38. global.PlayerNumberFromHost = readshort();
    39. newEntryPossible = 0;
    40. }
    41. }
    42. scr_host_unreachable();
    43. scr_empf_datas_client();
    44. scr_send_datas_client(); //hier werden die daten gesendet (wie sprites und deren drehricvhtung)
    45. scr_stear_with_other_players();
    46. }
    Alles anzeigen


    Ich wäre auch dankbar wenn mir jemand der damit erfahrung hat, die ganze Engine mal "anguckt" um diesen Bug zu beheben...

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von LEWA ()

  • Hallo,
    also ein Beispiel gibt es hier:
    39dll: Verbindung und Kommunikation
    Daraus habe ich das auch gelernt. Wenn man das so macht kann man das auch mit Client->Host(Client auch) machen, ich hab mal ein kleines Projekt gemacht das auch so ist, vll lad ich es auch hoch. (Kleiner Multiplayer Modus)
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Aus diesem Tutorial habe ich ja auch mein Wissen geholt, und ebenso darauf basiert ja meine Engine.
    DAs Problem ist ja dass diese tcplisten und tcpaccept anscheinend nicht jedes Step event abgefragt werden.
    Wieso das so ist weiss ich nicht... Wie gesagt. Ich wäre froh wenn mir jemand helfen könnte die Engine zum laufen zu bringen.
  • Hey LEWA,

    hab ich ziemlich schnell gefunden als ich das bei Google eingegeben hatte:
    Beispiel von User "scorpion91"
    GML Knowledge Base

    Den Aufbau der Datei im Anhang, hab ich für meine Server-Client-Spiele benutzt, weiß aber nicht mehr wo ich das her habe
    Dateien
    • Server-Client.rar

      (24,38 kB, 180 mal heruntergeladen, zuletzt: )