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
Alles anzeigen
Ich wäre auch dankbar wenn mir jemand der damit erfahrung hat, die ganze Engine mal "anguckt" um diesen Bug zu beheben...
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:
GML-Quellcode
- if(object_exists(obj_pl_main)){
- global.own_data[1] = obj_pl_main.x;
- global.own_data[2] = obj_pl_main.y;
- }
- if (global.master = true){
- listen = tcplisten(14804, 2, true);
- var player;
- new_client = tcpaccept(listen, true);
- if not (new_client <= 0){
- for(i=1;i<3;i+=+1){
- if(global.client[i]==-1){
- player = i;
- emptyplace = 1;
- break;
- }
- }
- if(emptyPlace = 1){
- global.client[player] = new_client;//hier ID senden
- clearbuffer() //hier wird ID versendet damit man sie später zuordnen kann
- writestring("newEntry")
- writeshort(player)
- sendmessage(client)
- }else{
- closesocket(client);
- //sende rückmeldung das kein Platz frei ist.
- //Verbindung wird unterbrochen.
- }
- }
- scr_send_datas_host();
- scr_empf_datas_host();
- scr_client_unreachable();
- scr_stear_with_other_players();
- }else{
- if (newEntryPossible != 0){
- var ne;
- ne = readstring();
- if (ne == "newEntry"){
- global.PlayerNumberFromHost = readshort();
- newEntryPossible = 0;
- }
- }
- scr_host_unreachable();
- scr_empf_datas_client();
- scr_send_datas_client(); //hier werden die daten gesendet (wie sprites und deren drehricvhtung)
- scr_stear_with_other_players();
- }
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 ()