Here are what appear to be 3 new server->client updates for spawn position and mana/endurance. Instead of using OP_ManaChange as the only way to update Mana and Endurance, they are not both split into separate packets that update regularly like OP_HPUpdate. It looks like OP_ManaChange is still used as well for reducing mana when a spell is cast.
Code:
struct SpawnPositionUpdate_Struct
{
/*0000*/ int16 spawnId;
/*0002*/ int64 ypos:19, zpos:19, xpos:19, u3:7;
/*0010*/ unsigned heading:12;
signed unused2:4;
/*0012*/
};
struct ManaUpdate_Struct
{
/*0000*/ int32 curMana;
/*0004*/ int32 maxMana;
/*0008*/ uint16 spawnId;
/*0010*/
};
struct EnduranceUpdate_Struct
{
/*0000*/ int32 curEnd;
/*0004*/ int32 maxEnd;
/*0008*/ uint16 spawnId;
/*0010*/
};
I see all 3 of those packets from Live collects of SoD, so they are probably going to be needed to get the correct updates. The position update one may not be required, but it may be useful if we want to cut down server traffic and send minimal info on spawns that are out of range or are not moving.
Here are some examples for those 3 structs (note this char is a rogue, so there is no mana):
Code:
Feb 14 2009 02:43:42:054 [Decoded] [Server->Client] [Size: 12]
[OPCode: 0x4656]
[Name: OP_MobUpdate][Updated: 01/17/08][Type: spawnPositionUpdate (12) ==]
000 | 12 12 27 10 08 00 c0 51 fb 01 cc 02 | ..'....Q....
Feb 14 2009 02:43:42:054 [Decoded] [Server->Client] [Size: 12]
[OPCode: 0x4656]
[Name: OP_MobUpdate][Updated: 01/17/08][Type: spawnPositionUpdate (12) ==]
000 | 5f 2a ba 03 e0 00 40 4f fc 01 02 00 | _*....@O....
Feb 14 2009 02:43:42:054 [Decoded] [Server->Client] [Size: 12]
[OPCode: 0x4656]
[Name: OP_MobUpdate][Updated: 01/17/08][Type: spawnPositionUpdate (12) ==]
000 | c7 29 df 02 c0 01 40 80 fd 01 fc 01 | .)....@.....
Feb 14 2009 02:43:42:124 [Decoded] [Server->Client] [Size: 10]
[OPCode: 0x538f]
[Name: OP_HPUpdate][Updated: 10/21/08][Type: hpNpcUpdateStruct (10) ==]
000 | 47 12 00 00 79 1c 00 00 0c 12 | G...y.....
Feb 14 2009 02:43:42:124 [Decoded] [Server->Client] [Size: 10]
[OPCode: 0x4b61]
[Name: OP_ManaChange][Updated: 01/17/08]
000 | 00 00 00 00 00 00 00 00 0c 12 | ..........
Feb 14 2009 02:43:42:124 [Decoded] [Server->Client] [Size: 10]
[OPCode: 0x02d6]
[Name: OP_Stamina][Updated: 10/21/08]
000 | b3 1b 00 00 b3 1b 00 00 0c 12 | ..........
Here is another struct I see new to SoD from the ShowEQ structs, but I am not sure what it is for at all, if anything, yet:
Code:
struct SpawnUpdate_Struct
{
/*0000*/ uint16 spawnId; // Id of spawn to update
/*0002*/ uint16 subcommand; // some sort of subcommand type
/*0004*/ int16 arg1; // first option
/*0006*/ int16 arg2; // second option
/*0008*/ uint8 arg3; // third option?
/*0009*/ uint8 unknown0009[10];
/*0019*/
};