ich rede vom B021, was man vom Server bekommt
Beiträge von dongdong
-
-
Ich hab gerade nach geschaut, dass Packet ist so aufgebaut:
[DWord]PlayerID
[Byte] StatusFlag 1 = OK
--- falls StatusFlag = 1
[Byte]xSec
[Byte]ySec
[Signed Word]X
[Signed Word]Z
[Signed Word]Y(Signed Word = short bzw. int16, also mit Vorzeichen)
-
Du hast vergessen in der Mitte ein Word zu überspringen.
Zuerst kommt [Word] X, dann [Word] Z!!!! (musst du überspringen) und dann erst [Word] Y -
Die Kunst besteht ja gerade darin herauszufinden, was in dem Packet was bedeuted.
Move Packet:
[DWORD]UniqueID
[Byte] xSec
[Byte] ySec
[Word] X
[Word] Z
[Word] Y
wenn ich das jetzt richtig aus dem Kopf weiß (die Formel wie man dass dann umrechnet findet ihr in nem anderen Thread hiern :))PS: Fehler sind auf die Faasend zurück zuführen
-
X:
(regionX - 135) * 192 + posX / 10)
Y:
(regionY - 92) * 192 + posY / 10)credits to Weeman
-
Natürlich kannst du das machen
Aber noch kurz zur Berichtigung:
Ihr redet über das "Use Item" Packet, dass erste (data) Byte ist der Slot das stimmt schonmal, danach kommt allerdings ein Word was angibt, welchen "Effekt" das Item hat. Das "0xEC" ist also nicht konstant.
Alle Angaben in Network Order, müssten also eig. noch umgedreht werden (aber so im Packet stehen)
0xEC09 = ret Scroll
0xEC08 = hp pot
0xEC10 = mp pot
0x6C31 = universal pillSo und wenn ihr ein Packet versenden wollt, solltet ihr schon wissen wie das aufgebaut sein soll:
Zunächst kommt der Header:
[Word]Length
[Word]Opcode
[Byte]Security Byte
[Byte]Security Byte
Danach kommt der Data Abschnitt, der genau Length Bytes lang ist und den eig. Inhalt des Packets beinhaltet.
Da Ihr mit Nuconnector arbeitet müsst ihr über die Security Bytes die Richtung angeben, ob das Packet zum Client oder zum Server gesendet werden soll und ob es gecryptet sein soll oder nicht
(Auschnitt aus DickerNoobs Analyzer)Code
Gecryptet wird dann durch den Proxy. Wenn ihr die Length setzt, müsst ihr daran denken, dass der Header nicht mitgerechnet wird. Und die Bytes im Packet müssen Network Order sein (ich glaube so nennt man das sicher bin ich mir aber nicht :P), d.h. die Bytes werden so zusagen von hinten nach vorne geschrieben. Also wenn ihr ein Packet mit der Länge 9 habt (Data Abschnitt!) dann ist das als Word ausgeschrieben 00 09 = 9 und im Packet muss dann 09 00 stehen. Bei einem DWORD A2 B5 56 34, dann ist das Network Order 34 56 B5 A2.
Ich hoffe ich konnte euch dadurch etwas klarer machen, wie das mit den Packets funktioniert.So und jetzt nochmal zu Awesome:
1. Wenn dein Charakter gespawned wird bekommst du ein Packet mit den Daten zu deinem Character. Da kommt dann auch der Inventory Inhalt mit. Den musst du parsen und abspeichern. Auch wenn du ingame ein Item kaufst, aufsammelst, verschiebst, usw. bekommst du ein Inventory Update Packet. Da steht dann der Slot usw. drin, dass kannst du dann auch parsen und weißt was du wie zu verschieben hast.2. Du musst alle Packets die du receivest nach dem Opcode untersuchen. Also du holst dir den Opcode und machst dann eine Switch Case Abfrage und kannst das Packet dann weiter analysieren.
-
Dc bekommt man, wenn man ein falsches Packet an den Server sendet. D.h. wenn der Inhalt keine Bedeutung hat oder es diesen Opcode nicht gibt.
Verschlüsseln müsst ihr mit den Keys aus den Handshake Packets, da ihr aber mit SrProxy oder nuConnector oder sowas in der Art arbeitet (wenn ich das richtig nachverfolgt habe) müsst ihr die Packets nicht verschlüsseln das erledigt der Proxy für euch. -
Ich kann aus vertrauenswürdiger Quelle sagen, dass sox mitten in der Vorbereitung steckt :).
Schade dass ich keine PS3 hab, auf dem PC bin ich noch ungeschlagen -
Ich hab gewusst, dass ich den Thread besser nicht geöffnet hätte. War klar dass hier jetzt mit unqualifizierten Aussagen um sich geworfen wird -.-.
Seine Doktorarbeit hat rein gar nichts mit seiner Arbeit als Verteidigungsminister zu tun. Würde er für seine Arbeit einen Doktortitel benötigen, könnte ich einen sofortigen Rücktritt bzw. einen sofortigen Ausschluß verstehen und nachvollziehen, aber unter diesen Umständen habe ich kein Verständnis dafür. Joschka Fischer darf mit Steinen nach Polizeibeamten werfen und keinen kümmerts, aber zu Guttenbergs Fehler wird natürlich hart bestraft.
Von daher kann ich es voll und ganz verstehen, wenn die Bevölkerung hinter zu Guttenberg steht und ihm damit zeigt, dass ordentliche politische Arbeit, wie man sie heute nur noch relativ selten findet, hoch geschätzt wird.Und auf meinen Post hier brauch keiner zu Antworten, weil ich in den Thread hier eh nicht mehr reinschaue.
-
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:
Wie gesagt Pseudo Code, also kommt mir jetzt nicht mit das muss &buffer (c++) heißen oder die WinApi recv Funktion hat mehr Parameter -
Du bekommst die Packete doch vom Server über einen Socket. Der Socket erhält ein byte Array in dem das Packet enthalten ist. Dann holst du dir von dem Packet den Opcode und kannst spezifisch auf das Packet reagieren.
-
warum war der Thread closed? oO
Bitte in diesem Bereich nur Code Ansätze posten, wenn ihr fertige Sources haben wollt, dann fragt bitte im Coding Requests Vereich nach.//edit: Hab gerade per Pm mitgetielt bekommen, dass es sich anscheinend erledigt hat, von daher
~closed~
-
2 Sekunden Sleep ist zu wenig. Normalerweiße kannst du im Client auch nur alle 5 Seks? das Packet senden lassen.
-
Nope, hat nichts mit der Position zu tun, nur der Name ist interessant
-
Das Schlüsselwort ist Hotkey's!
Du musst dir Hotkey's erstellen und kannst in der Form die WndProc Methode schreiben, durch die alle Messages die an das Programm gesendet werden, abgefangen werden.
Dort musst du dann die Parameter auf HOTKEY und deine Taste prüfen. Wenn du damit jetzt nicht viel anfangen kannst, kann ich dir morgen gern noch ein Beispiel geben, jetzt bin ich allerdings zu müde und geh erst mal schlafen -
-
~closed~
-
Du musst das int Array vor der Schleife deklarieren.
also praktisch int[] myNumbers = new int[values.length] zum erstellen
und dann kannst du mit myNumbers[i] auf die einzelnen Elemente zugreifen -
Deshalb hat er es ja auch im Coding Requests Bereich gepostet
-
Weil der 0.te den 0xE8 Opcode beinhaltet