This repository was archived by the owner on Jul 17, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
SMSG_UPDATE_OBJECT
Sergio edited this page Feb 21, 2020
·
20 revisions
This is world packet which can be used for spawning new or changing existing objects.
In general, it has next structure:

Each batch in turn has next structure:
update_type here may take next values:
VALUES = 0
MOVEMENT = 1
CREATE_OBJECT = 2 # for entities without position: item, bag etc
CREATE_OBJECT2 = 3 # for entities with position in space: gameobjects, corpses, creatures, players etc
OUT_OF_RANGE_OBJECTS = 4
NEAR_OBJECTS = 5
guid contains of mask and guid. When you send unpacked guid you also send 0xff mask (already implemented). Otherwise, packed guid already includes needed mask.
object_type may take next values:
OBJECT = 0 # 0x01 (object)
ITEM = 1 # 0x03 (object, item)
CONTAINER = 2 # 0x07 (object, item, container)
UNIT = 3 # 0x09 (object, unit)
PLAYER = 4 # 0x19 (object, unit, player)
GAME_OBJECT = 5 # 0x21 (object, game_object)
DYNAMIC_OBJECT = 6 # 0x41 (object, dynamic_object)
CORPSE = 7 # 0x81 (object, corpse)
Movement data contains of next parts:
UPDATEFLAG_NONE = 0x0000
UPDATEFLAG_SELF = 0x0001
UPDATEFLAG_TRANSPORT = 0x0002
UPDATEFLAG_HAS_ATTACKING_TARGET = 0x0004
UPDATEFLAG_LOWGUID = 0x0008
UPDATEFLAG_HIGHGUID = 0x0010
UPDATEFLAG_LIVING = 0x0020
UPDATEFLAG_HAS_POSITION = 0x0040
Movement flags contains of next values:
NONE = 0x00000000
FORWARD = 0x00000001
BACKWARD = 0x00000002
STRAFE_LEFT = 0x00000004
STRAFE_RIGHT = 0x00000008
TURN_LEFT = 0x00000010
TURN_RIGHT = 0x00000020
PITCH_UP = 0x00000040
PITCH_DOWN = 0x00000080
WALK_MODE = 0x00000100 # Walking
ONTRANSPORT = 0x00000200 # Used for flying on some creatures
LEVITATING = 0x00000400
ROOT = 0x00000800
FALLING = 0x00001000
FALLINGFAR = 0x00004000
SWIMMING = 0x00200000 # appears with fly flag also
ASCENDING = 0x00400000 # swim up also
CAN_FLY = 0x00800000
FLYING = 0x01000000
FLYING2 = 0x02000000 # Actual flying mode
SPLINE_ELEVATION = 0x04000000 # used for flight paths
SPLINE_ENABLED = 0x08000000 # used for flight paths
WATERWALKING = 0x10000000 # prevent unit from falling through water
SAFE_FALL = 0x20000000 # active rogue safe fall spell (passive)
HOVER = 0x40000000
Builder data contains of number of mask blocks, mask blocks and update data. UpdateBlocksBuilder builds this part depend on update object fields list.
- You want to spawn player. You need:
- player spawn fields. Currently in project uses next fields:
# Object fields
ObjectField.GUID,
ObjectField.TYPE,
ObjectField.SCALE_X,
# Unit fields
UnitField.HEALTH,
UnitField.MAXHEALTH,
UnitField.LEVEL,
UnitField.FACTIONTEMPLATE,
UnitField.BYTES_0,
UnitField.FLAGS,
UnitField.BOUNDINGRADIUS,
UnitField.COMBATREACH,
UnitField.DISPLAYID,
UnitField.NATIVEDISPLAYID,
UnitField.STAT0,
UnitField.STAT1,
UnitField.STAT2,
UnitField.STAT3,
UnitField.STAT4,
UnitField.RESISTANCE_NORMAL,
UnitField.BASE_HEALTH,
# Player fields
PlayerField.FLAGS,
PlayerField.BYTES_1,
PlayerField.BYTES_2,
PlayerField.VISIBLE_ITEM_1_0,
PlayerField.VISIBLE_ITEM_2_0,
PlayerField.VISIBLE_ITEM_3_0,
PlayerField.VISIBLE_ITEM_4_0,
PlayerField.VISIBLE_ITEM_5_0,
PlayerField.VISIBLE_ITEM_6_0,
PlayerField.VISIBLE_ITEM_7_0,
PlayerField.VISIBLE_ITEM_8_0,
PlayerField.VISIBLE_ITEM_9_0,
PlayerField.VISIBLE_ITEM_10_0,
PlayerField.VISIBLE_ITEM_11_0,
PlayerField.VISIBLE_ITEM_12_0,
PlayerField.VISIBLE_ITEM_13_0,
PlayerField.VISIBLE_ITEM_14_0,
PlayerField.VISIBLE_ITEM_15_0,
PlayerField.VISIBLE_ITEM_16_0,
PlayerField.VISIBLE_ITEM_17_0,
PlayerField.INV_SLOT_HEAD,
PlayerField.INV_SLOT_NECK,
PlayerField.INV_SLOT_SHOULDERS,
PlayerField.INV_SLOT_BODY,
PlayerField.INV_SLOT_CHEST,
PlayerField.INV_SLOT_WAIST,
PlayerField.INV_SLOT_LEGS,
PlayerField.INV_SLOT_FEET,
PlayerField.INV_SLOT_WRISTS,
PlayerField.INV_SLOT_HANDS,
PlayerField.INV_SLOT_FINGER1,
PlayerField.INV_SLOT_FINGER2,
PlayerField.INV_SLOT_TRINKET1,
PlayerField.INV_SLOT_TRINKET2,
PlayerField.INV_SLOT_BACK,
PlayerField.INV_SLOT_MAINHAND,
PlayerField.INV_SLOT_OFFHAND,
PlayerField.INV_SLOT_RANGED,
PlayerField.INV_SLOT_TABARD,
PlayerField.XP,
PlayerField.NEXT_LEVEL_XP,
PlayerField.CHARACTER_POINTS1,
PlayerField.CHARACTER_POINTS2,
PlayerField.SHIELD_BLOCK,
PlayerField.EXPLORED_ZONES_1,
PlayerField.MOD_DAMAGE_NORMAL_DONE_PCT,
PlayerField.BYTES,
PlayerField.WATCHED_FACTION_INDEX,
PlayerField.MAX_LEVEL,
PlayerField.COINAGE
- player's data (loaded from db)
- as
guidwe use player'sidfield. - as
update_typewe use CREATE_OBJECT2 - as
update_flagsfor movement we use
(
UpdateObjectFlags.UPDATEFLAG_LIVING.value |
UpdateObjectFlags.UPDATEFLAG_HAS_POSITION.value |
UpdateObjectFlags.UPDATEFLAG_HIGHGUID.value |
UpdateObjectFlags.UPDATEFLAG_SELF.value
)
Data for player spawn fields is builded by special managers (ObjectManager, UnitManager and PlayerManager)