SMSG_UPDATE_OBJECT documentation? menu

User Tag List

Results 1 to 5 of 5
  1. #1
    marijnz's Avatar Member
    Reputation
    4
    Join Date
    Mar 2007
    Posts
    14
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    SMSG_UPDATE_OBJECT documentation?

    I've kind of been messing around with an own "emulator" which can be found here: https://www.assembla.com/code/portfo...unnyEmu?rev=12

    I'm having issues with the SMSG_UPDATE_OBJECT packet. I can't find a lot about it , if any it's mostly cataclysm packet parsers having info about it but I'm currently working on 3.3.5a..
    As far I can see the the common structure in the C++ cores is pretty hard to get a lead on, but so far my only option. Currently I'm sending the compressed version of the packet in WorldSession.java, a premade bytearray from jMangos.

    Does anyone have any documentation, info about this packet or just support in general? Chances I'm doing it correct without any reference other than the common C++ emulators is pretty small in my eyes.

    Anyhow, thanks in advance!

    SMSG_UPDATE_OBJECT documentation?
  2. #2
    Glusk's Avatar Contributor
    Reputation
    105
    Join Date
    Apr 2015
    Posts
    33
    Thanks G/R
    7/32
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Basic "Enter World" SMSG_UPDATE_OBJECT packet (v 12340, 3.3.5a)

    So I was searching through the OwnedCore forums for the same piece of information. Unfortunately, all I've found was more questions instead of some simple and concrete answers. In the end I had to resort to google and existing emulators. I've come up with a basic SMSG_UPDATE_OBJECT packet structure that I will describe in this post along with an example of such a packet that logs in a level 1 Human Warrior to the Northshire Abbey starting area.

    SMSG_UPDATE_OBJECT is a complicated packet to reverse engineer. It's typically really big (so big that often times it's compressed and sent as a SMSG_COMPRESSED_UPDATE_OBJECT). Among other things, it's required by the client in order to get past the loading screen when a player enters world. Here is what little information I have managed to gather about its structure Pastebin link. I take no credit in reverse engineering any of it and at the same time wish to thank all those who did the hard work.

    Now for the promissed example:
    Level 1, Human Warrior, x = -8949.95, y = -132.493, z = 83.5312, o = 0, GUID = 00:00:00:00:00:03:02:01

    Code:
    char SMSG_UPDATE_OBJECT[] {
        0x01, 0x00, 0x00, 0x00, //Block Count
        
        //-----------------------------------------------------------
        // Update Block #1
        //-----------------------------------------------------------
        0x03,                   // Update Type -> create new object
        0x07, 0x01, 0x02, 0x03, // Packed GUID
        0x04,                   // Object Type -> player
    
            //-----------------------------------------------------------
            // Movement Update Block
            //-----------------------------------------------------------
            0x21, 0x00,             // Update Flags -> Living | Self
            0x00, 0x00, 0x00, 0x00, // Movement Flags
            0x00, 0x00,             // Extra Movement Flags
            0x00, 0x00, 0x00, 0x00, // Fake Time Stamp
            0xcd, 0xd7, 0x0b, 0xc6, // x
            0x35, 0x7e, 0x04, 0xc3, // y
            0xf9, 0x0f, 0xa7, 0x42, // z
            0x00, 0x00, 0x00, 0x00, // o
            0x00, 0x00, 0x00, 0x00, // Fall Time
    
            0x00, 0x00, 0x80, 0x3f, // Walk Speed (1.0f)
            0x00, 0x00, 0x8c, 0x42, // Run Speed (70.0f -> really fast ^^)
            0x00, 0x00, 0x90, 0x40, // Run Back Speed (4.5f)
            0x00, 0x00, 0x00, 0x00, // Swim Speed (swimming isn't enabled so we set this speed to 0)
            0x00, 0x00, 0x00, 0x00, // Swim Back Speed (see Swim Speed)
            0x00, 0x00, 0x00, 0x00, // Fly Speed (flying isn't enabled so we set this speed to 0)
            0x00, 0x00, 0x00, 0x00, // Fly Back Speed (see Fly Speed)
            0x00, 0x0f, 0x49, 0x40, // Turn Speed - how fast a character can turn around z axis (3.1415405f)
            0c00, 0x00, 0x00, 0x00, // Pitch Rate (flying is disabled, so this is set to 0)
    
            //-----------------------------------------------------------
            // Values Update Block
            //-----------------------------------------------------------
            0x2a, // Mask Size ((1326 + 31) / 32 = 42)
            // Values Update Mask
            0b00010111, 0x00, 0x80, 0x01,  0x01, 0x00, 0b11000000, 0x00,  0x18, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
            
            0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
    
            // Update Values:
            0x01, 0x02, 0x03, 0x00,  // OBJECT_FIELD_GUID Low GUID [Required]
            0x00, 0x00, 0x00, 0x00,  // OBJECT_FIELD_GUID High GUID [Required]
    	0x19, 0x00, 0x00, 0x00,  // OBJECT_FIELD_TYPE -> unit | player | object
    	0x00, 0x00, 0x80, 0x3f,  // OBJECT_FIELD_SCALE_X 
    	0x01, 0x01, 0x01, 0x01,  // UNIT_FIELD_BYTES_0 Race(Human), Class(Warrior), Gender(Female), PowerType(Rage)
    	0x3c, 0x00, 0x00, 0x00,  // UNIT_FIELD_HEALTH 
    	0x3c, 0x00, 0x00, 0x00,  // UNIT_FIELD_MAXHEALTH
            0x01, 0x00, 0x00, 0x00,  // UNIT_FIELD_LEVEL
    	0x01, 0x00, 0x00, 0x00,  // UNIT_FIELD_FACTIONTEMPLATE [Required]
    	0x0c, 0x4d, 0x00, 0x00,  // UNIT_FIELD_DISPLAYID (Human Female = 19724) [Required]
            0x0c, 0x4d, 0x00, 0x00   // UNIT_FIELD_NATIVEDISPLAYID (Human Female = 19724) [Required]
    } // size = 291 bytes + 4 bytes (header)
    Let me know if you would add anything to this example and I'll happily edit it in!




    Additional information sources:
    • If you want to debug 3.3.5a login, there's a nice and simple Python sandbox that I have found here: https://github.com/fotcorn/pywowd
    • This link contains similar packet documentation, but for an older version of the game: Blizzhackers link (archived on Wayback Machine)
    • Anyone who is trying to develop an emulator from scratch should take a look at this project: Shadow Moses emulator. Unfortunately it isn't in a working state, but I think it started off pretty well and can be a great reference because the source code is pretty well documented.
    Last edited by Glusk; 01-03-2020 at 07:09 AM. Reason: Typo fixes

  3. Thanks stoneharry, culino2, /dev/not/null (3 members gave Thanks to Glusk for this useful post)
  4. #3
    /dev/not/null's Avatar Member
    Reputation
    12
    Join Date
    Oct 2018
    Posts
    31
    Thanks G/R
    9/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Does this packet structure same for 2.4.3 ? Or maybe you know what the difference ?

  5. #4
    Glusk's Avatar Contributor
    Reputation
    105
    Join Date
    Apr 2015
    Posts
    33
    Thanks G/R
    7/32
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by /dev/not/null View Post
    Does this packet structure same for 2.4.3 ? Or maybe you know what the difference ?
    You can check out the archived Blizzhackers forum post

  6. Thanks stoneharry (1 members gave Thanks to Glusk for this useful post)
  7. #5
    andy012345's Avatar Active Member
    Reputation
    59
    Join Date
    Oct 2007
    Posts
    124
    Thanks G/R
    0/7
    Trade Feedback
    1 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    2.4.3 to 3.3.5 was the extra movement flags and the pitching, that was pretty much the only change (this was for the wintergrasp vehicle combat)

  8. Thanks stoneharry (1 members gave Thanks to andy012345 for this useful post)

Similar Threads

  1. Hiding Documents in Pictures
    By Nosferattu in forum Community Chat
    Replies: 2
    Last Post: 08-03-2008, 07:24 PM
  2. Replies: 5
    Last Post: 06-22-2008, 03:16 PM
  3. C++ Ascent Script Documentation
    By latruwski in forum World of Warcraft Emulator Servers
    Replies: 1
    Last Post: 11-26-2007, 02:38 PM
  4. Lua Ascent Script Documentation
    By latruwski in forum World of Warcraft Emulator Servers
    Replies: 0
    Last Post: 11-26-2007, 12:42 PM
All times are GMT -5. The time now is 07:29 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search