ZSZC Login-Packet

  • Ich weiß nicht wie das in AutoIt ist, aber normalerweiße blocken die Receive Methoden. Das heißt die Ausführung bleibt bei der Receive Methode sozusagen "stehen" bis etwas received wird oder die Verbindung getrennt wird, was man allerdings als Receive 0 interpretieren kann. Also sollte man überhaupt kein Delay zwischen dem Aufrufen einbauen.
    Pseudo-Code wenn Recv die Anzahl der empfangen bytes zurück gibt:

    Code
    1. int rcv = 1;
    2. while (rcv > 0)
    3. {
    4. rcv = recv(Socket, buffer); //recv ist in diesem Fall die Receive Methode mit der ich ein Byte Array in buffer das von Socket empfangen wird speichern kann
    5. }


    Wie gesagt Pseudo Code, also kommt mir jetzt nicht mit das muss &buffer (c++) heißen oder die WinApi recv Funktion hat mehr Parameter :P

  • Danke dongdong!
    Habe aber nun ein neues Problem beim Einloggen. Ich habe nun folgendes rausgefunden:

    Code
    1. S->C (A102) 0201 = Falsche Logindaten
    2. S->C (A102) 0205 = Server voll


    Nun, da der ZSZC Server eigentlich immer voll ist, kommt beim Einloggen auch 0205, aber nicht immer. Hier mal ein Ausschnitt aus dem Analyzer:


    Das Problem ist nun, dass sowohl 0205 als auch das andere lange abwechselnd kommt. Wenn man eingeloggt ist, dann kommt auch das lange Paket an und deshalb weiß ich nicht, wie ich nun prüfen soll ob ich eingeloggt bin oder nicht..gibt es da irgendwelche anderen Möglichkeiten?

  • Dann sende doch einfach immer 4sekunden abständen ein "enter" an den Client und prüfe alle 4,1sekunden ob das Paket:
    "S->C (A102) 012B01000009003132372E302E302E31A23D" angekommen ist :)

  • Das Problem ist jedoch, dass das Paket nicht jedesmal mit 012B01...anfängt, es ist immer anders. Und ich sende kein Enter, sondern ein Paket, d.h. wenn ich eingeloggt bin, merke ich es nicht (da das Paket wenn man eingeloggt ist immer anders ist) und das Paket mit den Logindaten wird nach 4sec erneut gesendet, dadurch stürtzt der Client dann ab...

  • Ích habe dir mal eine PN geschrieben.
    Wwürde dir gerne helfen, nur immer warten bis hier eine antwort ist finde ich auf dauer plöde.
    Trozdem können wir hier weiter schreiben :)

  • Die ersten 4 bytes sind die sessionid, die du beim gameserver login angeben musst. Wenn du das paket nicht parsen willst, kannst du über die länge der pakete arbeiten, die sind in den verschiedenen fällen (eingeloggt, voll etc) immer gleich lang.

  • Hmm..sry das versteh ich jetzt nicht wirklich..wenn das Paket immer gleich lang ist, wie kann ich dann damit arbeiten? Ich kann mit der Länge ja dann nicht Unterscheiden ob der Server nun voll ist, man eingeloggt ist oder falsche Logindaten eingegeben wurden. Unterscheiden kann ich nur dann, wenn vom Server eben die oben genannten Pakete kommen (0205, 0201), aber diese kommen ja nicht immer..
    Und was bedeutet diese SessionID am Anfang? Die ändert sich bei jedem Loginversuch und erfolgreichem Login?

  • Hmm..sry das versteh ich jetzt nicht wirklich..wenn das Paket immer gleich lang ist, wie kann ich dann damit arbeiten? Ich kann mit der Länge ja dann nicht Unterscheiden ob der Server nun voll ist, man eingeloggt ist oder falsche Logindaten eingegeben wurden. Unterscheiden kann ich nur dann, wenn vom Server eben die oben genannten Pakete kommen (0205, 0201), aber diese kommen ja nicht immer..
    Und was bedeutet diese SessionID am Anfang? Die ändert sich bei jedem Loginversuch und erfolgreichem Login?


    Hab mich etwas missverständlich ausgedrückt.. Ich meine dass das Paket das der server sendet wenn man sihc erfolgreich eingeloggt hat immer z.B. 10 Bytes lang ist, das server-voll-paket ist z.B. 6 bytes lang. So kannste die unterscheiden.
    Die Sessionid wird vom loginserver generiert und dem gameserver "mitgeteilt", wenn du dich dann am gameserver mit login etc anmeldest, prüft dieser ob die sessionid die ist, die der loginserver generiert hat. Das dient dazu dass man sich gehen kann dass der client der sich auf dem gameserver einloggt auch wirklich der client ist der sich am loginserver angemeldet hat.

  • Danke teRRRa, werde mir nachher die Pakete im Analyzer nochmal genauer betrachten.
    @Traumfänger Wie meinst du das mit komplett falsch? Ich empfange alle Pakete in einer Methode und benutze eine Case-Abfrage und jenachdem welches Paket ankommt, wird verschieden darauf reagiert. Oder habe ich dich jetzt falsch verstanden?
    Edit: Gibt es eigentlich einen Grund dafür, wieso 2 verschiedene Pakete vom Server kommen, wenn der Server voll ist?
    Also wie gesagt, manchmal kommt einfach nur (A102) 0205, die nächsten paar Versuche kommt halt das lange Paket mit dieser SessionID, danach wieder 0205..

  • Ich habe es nun geschaft , dass der phConnector mit ZsZc klappt nur der gute Analysator klappt nicht.
    Habe son andeers billiges teil nun wo ich die Packete rauslesen kann, aber nicht direkt umgewandelt zum Text wie beim Analysator.


    Bei mir kommt jetzt schon seid 15minuten packet


    (A102) 0205


    und kein anderes.(6102) fürs einloggen natürlich auch.


    Jemand ne Idee wie ich den Analysator zum laufen bekomme ?
    Fehlermeldung das er nicht zum nuConnector connecten kann.
    Könnte ich die port einstellungen beim phConnector ändern ?

    Code
    1. [phConnector]
    2. IP=72.55.143.209
    3. Port=15779
    4. ListenPort=15778
    5. BotPort=7777
    6. Developer=0

  • Das paket
    (A102) 0205
    bedeutet dass der server voll ist.

  • Da ist mir klar , die antwort mit
    (A102) 0205
    war eigentlich an Fisticuff


    Zitat

    Edit: Gibt es eigentlich einen Grund dafür, wieso 2 verschiedene Pakete vom Server kommen, wenn der Server voll ist?
    Also wie gesagt, manchmal kommt einfach nur (A102) 0205, die nächsten paar Versuche kommt halt das lange Paket mit dieser SessionID, danach wieder 0205..


    Jemand ne Idee wie ich den Analysator zum laufen bekomme ?
    Fehlermeldung das er nicht zum nuConnector connecten kann.
    Könnte ich die port einstellungen beim phConnector ändern ?

    Code
    1. [phConnector]
    2. IP=72.55.143.209
    3. Port=15779
    4. ListenPort=15778
    5. BotPort=7777
    6. Developer=0

  • Sorry dann hab ich dich falsch verstanden..
    Ich bin mir ziemlich sicher dass das botport falsch ist, das ist irgendwas mit 20..., lösch mal beim phconnector die config datei und starte ihn, dann müsste er die datei mit dem richtigen port neu erstellen.

  • Klappt soweit , nur eine Frage noch zu ZSZC woher kann ich die Server ID von Fire,Water rausfinden ?
    Update: Habs rausgefunden.
    Fisticuff : Habe nun das gleiche Problem mit diesem Packet.


    Code
    1. *J->C(A102)01B3010000[[0009]127.0.0.1]A23D
  • Code
    1. *J->C(A102)01B3010000[[0009]127.0.0.1]A23D


    Ja, genau das gleiche Problem habe ich. Manchmal kommt nur (A102)0205 aber manchmal eben auch dieses Paket, auch wenn man es schafft sich im Account einzuloggen..weiß leider bis jetzt immer noch nicht, wie ich das nun machen soll.

  • Ich versuche grade danach noch irgendein paket zu senden.
    Hast du Teamspeak3 ? Dann könnten wir gemeinsam es versuchen.


    Ich gehe mal davon aus, dass das Packet signalisiert das man erfolgreich einloggt ist.

    Code
    1. *J->C(A102)01B3010000[[0009]127.0.0.1]A23D


    Nur ich wüsste nicht was ich hier ändern müsste.

    Code
    1. If $result == 1 Then


    Hier mal der Code: