[SRO] Speed-Stat Update

  • Salü zusammen,


    Hier gabs doch irgendwo mal ne Formel um die Laufzeit von Punkt X nach Punkt Y zu bestimmen? Kann mir jemand nochmals den Link oder die Formel geben? - Finde die leider nicht mehr. :)


    Ich frage mich - bzw versuche es gerade herauszufinden - in welchen Silkroad Packeten mir der Server sagt, wie meine neue Lauf-Geschwindigkeit ist, wenn ich bspw den Grass-Walk Buff aktiviere oder ein Pferd spawne.
    Bei 0x3015, dem Spawpacket, erhalte ich 3 Floats, wie ich sie beim Chardata Packet erhalten habe.

    Code
    1. 00 00 34 42 ..4B............
    2. 00 00 F0 42 ...B............
    3. 00 00 C8 42 ...B............


    Nun, wäre aber der Runningspeed (2ter Float) höher als der Zerkspeed - afaik ergibt das keinen Sinn, da ich im Zerk viel schneller bin als einer der mit dem Pferd reitet. ;)
    Oder sehe ich da etwas falsch?


    Das Server_Stat Packet wird so wie ich das gerade sehe wohl vom EdxLoader falsch interpretiert.
    Es kommt in 2 Teilen an.
    Einmal 3 DWORD nacheinander (könnten die Server - Speeds sein) & einmal diverse andere Daten, die wie folgt geparst werden:


    Beim ersten Teil wo die 3 Floats ankommen sieht das so aus:

    Code
    1. [S -> C][30D0]
    2. 95 17 61 0A ..a.............
    3. 9A 99 99 41 ...A............
    4. 00 00 BB 42 ...B............


    Die Werte können nicht stimmen ^_^
    Ich schau mir das Packet gleich nochmals an.





    Oder gibt es sont ein allgemeins Packet das bei allen Speed-Änderungen die Daten aktualisiert?
    - Speed-Buff
    - Pferd
    - Volles Garment Set




    grz

  • Code
    1. [S -> C][30D0]
    2. 95 17 61 0A ..a.............
    3. 9A 99 99 41 ...A............
    4. 00 00 BB 42 ...B............


    Diese Werte können durchaus stimmen.
    Du darfst nicht vergessen, dass es sich bei den Laufgeschwindigkeiten um Dezimalzahlen handelt.
    Und dann können die DWORD's auch schonmal so aussehen.


    Und zu deinem 1. Problem:
    Liegt dran. Wenn du ein Pferd spawnst dann wird dein RunningSpeed höher, aber dein BerserkSpeed ja nicht.
    Das kann man alleine schon daran erkennen, dass wenn du Zerk auf dem Pferd aktivierst, du nicht schneller wirst.


    Kuh :>

  • Du hast die Geh-Geschwindigkeit, die Running-Geschwindigkeit und Zerg-Geschwindigkeit.


    Ich hab das damals so gemacht gehabt um die Zeit auszurechen.


    [cs] public static float GetTime(float xs, float ys, float xd, float yd)
    {
    double x = (xs - xd);
    double y = (ys - yd);
    double distance = Math.Sqrt(x * x + y * y);
    double curX, curY;
    return (float)distance / Character.RunSpeed *10;
    }[/cs]


    Xs : X Start / Xd : X destination...


    EDIT: Ja es gibt ein SpeedUpdate Packet. Der Opcode ist natürlich von der Version abhängig. In den P-Servern war es häufig "0x30D0".
    Das Packet enthält die UniqueID des Objekts und dann die floats für die Speeds.

    Zitat

    Dr. Gregory House: You've gotta get down here. They've got a satellite aimed directly into Cuddy's vagina. I told them that chances of invasion are slim to none but...

    Dieser Beitrag wurde bereits 2 Mal editiert, zuletzt von bloodman ()

  • Das 30D0 Packet stimmt, Aufbau wie folgt; Zerk speed nicht enthalten da der sich auch nicht wechselt.


    [cs]/*[S -> C][30D0]
    E0 D3 A9 00 object id
    9A 99 19 42 speed walking
    01 00 F0 42 speed running
    */
    public static void parse30D0(BinaryReader br)
    {
    uint oid = br.ReadUInt32();
    float sw = br.ReadSingle();
    float sr = br.ReadSingle();[/cs]


    MfG