Hi,
kurze Frage: kennt vllt jemand die Formel um die Position des Chars zu ermitteln? Die x/y-Section und x/y habe ich bereits aus dem Paket rausbekommen, nur fehlt mir halt die Berechnung der x/y-Koordinaten.
Silkroad Koordinaten-Formel
-
- [Sonstige]
- Fisticuff
-
-
-
X:
(regionX - 135) * 192 + posX / 10)
Y:
(regionY - 92) * 192 + posY / 10)credits to Weeman
-
Danke!
Habe das nun so gemacht, sieht das richtig aus?
[cs]
'Packet: (7021) 01875C0F00F300B502
'87 - xRegion
'5C - yRegion
'0F00 - xPos
'F300 - zPos
'B502 - yPosDim xRegion As Integer = &H87
Dim yRegion As Integer = &H5C
Dim xPos As Integer = &H0F00
Dim yPos As Integer = &HB502
Dim x As Integer = (xRegion - 135) * 192 + xPos / 10
Dim y As Integer = (yRegion - 92) * 192 + yPos / 10MsgBox(String.Format("X:{0} Y:{1}", x, y))
[/cs]
Kann leider nicht prüfen ob die richtigen Koordinaten ausgegeben werden, da man keine Chance hat reinzukommen -.- -
-
wieso keine chance zum reinkommen teste es doch bsw auf ares.
-
Sry, hab vergessen zu erwähnen, dass es sich um den Privatserver ZSZC handelt...
-
Der letzte Beitrag ist zwar schon etwas her, jedoch habe ich noch eine Frage, die sich auf die Koordinaten bezieht und wollte deshalb kein neues Thema eröffnen. Also ich hatte noch ein altes VB6 Projekt und habe von dort die Funktionen & Formel benutzt und die Koordinaten werden auch richtig angezeigt, jedoch nicht diese, wann man sich bewegt, sondern wenn man irgendwo hinklickt. Das liegt denke ich daran dass ich das C->S 7021 Paket benutze. Habe nun auch schon rausgefunden, dass vom Server beim Laufen das Paket B021 ankommt und das kommt während ich laufe die ganze Zeit an, also müsste es schon das richtige sein^^ Naja, jedoch ist das nicht nur für meinen Char sondern auch für Mobs und andere Spieler, deswegen steht ja am Anfang auch die ID von dem der sich bewegt oder? Aber wie bekomme ich denn nun meine ID raus? Ist sie gleich in dem Paket enthalten wenn man mit dem Char in die Welt reinkommt (ein sehr langes Paket) und wenn ja, an welcher Stelle?
-
-
Jop ist in dem Spawn Packet von deinem Spieler und sie kommt auch nochmal extra in (rsro opcode) 3020
-
Gut, werde es mir nachher wenn ich eingeloggt bin anschauen..bis jetzt waren alle Pakete in ZSZC die gleichen wie in RSRO, mal schauen ob da auch das 3020 ankommt..
-
Also, ich habe mir die Pakete jetzt noch mal angeschaut. Das 3020 Paket kommt an und zeigt mir die PlayerID an, die auch am Anfang im B021-Movepaket enthalten ist. Jedoch ist es genau das gleiche wie das C->S 7021 Paket: das Paket kommt nicht die ganze Zeit an während ich laufe, sondern nur wenn ich mit der Maus auf eine Stelle klicke wo mein Char dann hinlaufen soll, und diese X/Y Position wird mir dann angezeigt..ist es also doch nicht das richtige Paket? Weil mir bringt die Position wo ich mit der Maus hinklicke eigentlich nichts, ich würde gerne eher die anzeigen, an der der Char ist bzw läuft..
-
-
Dann sende doch alle X sekunden den Laufbefehl also 7021 mit keinen Daten drin, da müsste der Server dir doch wiedergeben wo du grade bist mit B021.
Sonst wüsste ich auch nix, aber die ganzen Scripts vom mBot und iBot sind doch auch so.Es wird nur da aufgenommen wo hingeklickt worden ist.Hier mal mein Code vll hilft es dir:
Code- Case "B021"
- BeginParse($packetData, Dec($packetSize))
- $playerId = Dec(ParseDword())
- $result = Dec(ParseByte())
- If $result == 1 Then
- $areax = Dec(ParseByte())
- $areay = Dec(ParseByte())
- $x = Dec(ParseWord())
- $z = Dec(ParseWord())
- $y = Dec(ParseWord())
- $region135x = Round(($areax - 135) * 192 + $x / 10)
- $region135y = Round(($areay - 92) * 192 + $y / 10)
- $recvtitle = "Moved: "
- AppendStatusText(@CRLF & $recvtitle & "x: " & $region135x & " y: " & $region135y)
- Else
- AppendStatusText("Fehler beim Laufen")
- EndIf
-
Also ich meinte es so, dass wenn man z.B. nun von X:50 nach X:100 läuft, dann soll eben 50, 51, 52, 53, 54..angezeigt werden z.B. in einem Label, bei mir ist es jedoch so, dass sofort 100 angezeigt wird..mit Scripts meinst du beim Loop wo der Char dann hinlaufen soll oder?
Und, bekomm ich kein DC wenn ich 7021 ohne Inhalt sende? -
Das mit dem 50,51,52 weiß ich nicht ob das überhaupt klappt.
Du könntest es aber dann so machen,
stehst X:50 und läufst nach X:100, einfach einen Timer machen der hochzählt.Mit dem DC weiß ich nicht, habe ich selber noch nicht ausprobiert.
-
-
Natürlich funkt dir der Serevr nicht jede Millisekunde deine genaue Pos zu.
Mit dem 0xB021 Packet signalisiert dir der Serevr dass jemand/bzw. du losgelaufen ist.
Durch die SpanPackets hast du ja beriets die Laufgeschwindigkeit des Objekts.
Schau dir am Besten mal die cMovement Klasse aus dem kBot an !
Durch den Aufruf der Funktion currentPos() (oder so?) bekommst du die aktuelle Position des Objekt heraus.MfG