39dll.dll ~ lastip() ~ Unbekannte Funktion?

  • 39dll.dll ~ lastip() ~ Unbekannte Funktion?

    See Topic~

    Ich hab zu dem Thema nichts gefunden und würde gerne mal fragen, ob ich der einzige mit diesem Problem bin.

    Ich hab versucht mich an das beigelegte Tut. zu halten um zu lernen wie diese .dll funktioniert, dennoch schreit mich der GameMaker jedes mal an, wenn ich lastip() benutze.

    Die Funktion wird im Tut. benutzt und da kann ich mir eigentlich nicht vorstellen, dass die Funktion nicht existiert.
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Hallo Schattenphoenix

    Ich habe die 39dll zwar gerade nicht zu Hand, jedoch schätze ich, dass das, was du meinst, keine Funktion, sondern ein Skript ist. Schau mal im 39dll-Tutorial nach, ob du dort ein Skript mit entsprechendem Namen findest.
    Ansonsten würde ich dir empfehlen, mal auf der offiziellen GameMaker Community nachzusehen. Da solltest du die Lösung finden.


    MfG flogy
  • Accepting new connections.
    To accept new connections you need to create a step event for the "objWait" object we created. In the step event add this code:

    client = tcpaccept(listen, true);
    if(client <= 0) exit;
    global.udpsock = udpconnect(14805, true);
    global.otherplayer = client;
    global.otherip = lastip();
    global.otherudpport = 14803;
    room_goto(rmGame);

    The first line checks the waiting list to see if someone tried to connect to the listen socket. If no one connected then it returns a number smaller than 1. If someone did connect then it creates a new socket and returns its id. This socket will now be used to
    send and receive data from the person who just connected. The second argument in tcpaccept means the new socket will be non-blocking. In this case when you are trying to receive a message it will not freeze the game if there is no message to be received.
    The second line checks if tcpaccept() returned an error. If it did then it exits the script.
    Every line of code after the second line will only be executed if there was no error. The third line creates a UDP socket which will be used to send messages through the UDP protocol. The next line sets the global variable "global.otherplayer" to the socket id that tcpaccept() returned. The next line then gets the IP address of the player that was last accepted and stores it in the variable “global.otherip”. This will be used when sending a UDP message to the other player. The next line stores the port that the UDP socket is using on the remote computer into the variable “global.otherudpport”. This will be used when sending a UDP message to the other player. The last line goes to the playing room. (You needed to create that room btw).
    Das steht im UDP-Tut. das bei der .dll beiliegt, ich hab sämtliche scripts durchgeschaut und kein lastIP gefunden.

    Die funktion hab ich in allen groß-/klein-schreibungsmöglichkeiten versucht.
    Ich werd mich auf der GMC mal umschauen, jedoch denke ich nicht, dass in dem Tut seit ewigkeiten ein Fehler ist und ich mit Google nix dazu finde.

    Anyways~ ma schaun, vllt hat noch jemand ne Idee.
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Accepting new connections.
    To accept new connections you need to create a step event for the "objWait" object we created. In the step event add this code:

    client = tcpaccept(listen, true);
    if(client <= 0) exit;
    global.udpsock = udpconnect(14805, true);
    global.otherplayer = client;
    global.otherip = lastip();
    global.otherudpport = 14803;
    room_goto(rmGame);

    The first line checks the waiting list to see if someone tried to connect to the listen socket. If no one connected then it returns a number smaller than 1. If someone did connect then it creates a new socket and returns its id. This socket will now be used to
    send and receive data from the person who just connected. The second argument in tcpaccept means the new socket will be non-blocking. In this case when you are trying to receive a message it will not freeze the game if there is no message to be received.
    The second line checks if tcpaccept() returned an error. If it did then it exits the script.
    Every line of code after the second line will only be executed if there was no error. The third line creates a UDP socket which will be used to send messages through the UDP protocol. The next line sets the global variable "global.otherplayer" to the socket id that tcpaccept() returned. The next line then gets the IP address of the player that was last accepted and stores it in the variable “global.otherip”. This will be used when sending a UDP message to the other player. The next line stores the port that the UDP socket is using on the remote computer into the variable “global.otherudpport”. This will be used when sending a UDP message to the other player. The last line goes to the playing room. (You needed to create that room btw).


    Wie hier in der Beschreibung steht, wird mittels lastip() die letzt gewählte IP-Adresse abgerufen, und dann in der globalen Variable "global.otherplayer" gespeichert. Bei welcher Verbindung die IP genau unter lastip() gespeichert wird, kann ich dir nicht sagen. Ich denke, du kannst auch einfach eine get_string-Abfrage machen, wo man dann die gewünschte Ziel-IP eingeben kann.

    Versuch einfach mal statt global.otherip = lastip(); den Code global.otherip = get_string("Ziel-IP?","127.0.0.1");
    Zur Information: 127.0.0.1 stellt eini Verbindung mit deinem eigenen Server her, also wenn du das Spiel selber testen willst.


    MfG flogy
  • ghostrider schrieb:

    Schau doch mal alle GMKs durch, eventuell ist es da dabei!

    Außerdem empfehle ich dir TCP... ;)
    Danke, vielleicht werd ich das machen, ich hatte nur gelesen, dass die UDP und TCP Mischung welche in diesem Fall verwendet wird, weniger Probleme mit dem ganzen Firewall und Router Zeug hat. Danke dennoch, ich werd mir dieses zu gemüte führen.

    flogy schrieb:

    Wie hier in der Beschreibung steht, wird mittels lastip() die letzt gewählte IP-Adresse abgerufen, und dann in der globalen Variable "global.otherplayer" gespeichert. Bei welcher Verbindung die IP genau unter lastip() gespeichert wird, kann ich dir nicht sagen. Ich denke, du kannst auch einfach eine get_string-Abfrage machen, wo man dann die gewünschte Ziel-IP eingeben kann.

    Versuch einfach mal statt global.otherip = lastip(); den Code global.otherip = get_string("Ziel-IP?","127.0.0.1");
    Zur Information: 127.0.0.1 stellt eini Verbindung mit deinem eigenen Server her, also wenn du das Spiel selber testen willst.


    MfG flogy

    So weit war ich auch schon, nur in diesem Code wird nich die IP des Servers abgefragt sondern die IP des zuletzt verbundenen Spielers um dort die UDP Packets hinzuschicken.

    Ich denke die Funktion wird ein Script sein, jedoch habe ich kein Script in der DLL-Scripts-Datenbank gefunden welches in diese Richtung geht vom namen... und ich wollte mir auch nicht alle 1000(+-100?) Scripts komplett durchlesen.
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Ich verwende ja ausschließlich TCP. Das hat Vor- und Nachteile, z.B.:
    - Alles kommt an (nicht wie bei UPD, da geht manches verloren...)
    - Es ist langsamer (frag mich nicht WIE langsam)
    Mit UPD kannst du halt auch von Spieler zu Spieler senden oder so.

    Router & Ports: Bei TCP brauchst du NUR beim SERVER den Port freischalten, das ist alles.
    (Im Gegensatz zu den GM-mplay-Funktionen)

    Um das Problem mit der lastip zu lösen:
    Du kannst mit tcpip() die IP rausfinden, mit der ein TCP-Socket verbunden ist.
    Die kannst du ja speichern und dann wenn gebraucht abfragen ^^
  • Das hilft mir schonmal ein ganzes Stückchen mehr, ich werd dann wohl auf TCP umsteigen, wobei ich immernoch der meinung bin, dass UDP für nicht serverbasierende spiele (aka MMO etc.) besser geeignet sein müsste.
    Bei TCP ist man ja eigentlich immer drauf angewiesen dass der Host alles klärt wodurch seine I-Net Verbindung ja dementsprechend mehr belastet wird...

    Naja die Verbindungen sind derzeit ja eh etwas besser als früher und da wird es bei kleineren Games nich sooo ein großes Problem sein.

    Danke schonmal an alle, hat mir geholfen ich werd schauen was geht.
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Hmm, dann machst du ganz klar was falsch.
    Ich arbeite grade (mal wieder) an einem Online Game, wo ich alle Bewegungsänderungen sende und da läuft alles wirklich flüssig. Man muss sich halt auch helfen können :D Es liegt also nicht an dem Verwenden von TCP - Ich bin bis jetzt an keine Grenze gestoßen. Außerdem reicht das voll und ganz bei 4, nein wegen mir 15 Spielern.
  • Vorrausbrechnen ist wohl das Stichwort, wenn man das benutzt und im Endeffekt die Spiele seperat laufen lässt und nur ab und zu abgleicht dann geht das ja. Jeden Step die Koordinaten abgleichen ist doch eh unnütz, dann brauchst du die Bewegung der Clientobjekte garnicht erst proggen xD
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Benutzer online 1

    1 Besucher