Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Development

Development::Development Forum for development topics and for those interested in EQEMu development. (Not a support forum)

Reply
 
Thread Tools Display Modes
  #1  
Old 03-28-2010, 09:53 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Here is a list of packets seen from a collect around Feb 2009 to show the order of packets between the client and the server when logging in. Adding this here for reference in case we want to investigate any of the unknowns.

Code:
[OPCode: 0x3594] [Decoded] [Client->Server] [Size: 4] - OP_AckPacket
[OPCode: 0x5a6b] [Decoded] [Client->Server] [Size: 68] - OP_ZoneEntry
[OPCode: 0x1af0] [Decoded] [Server->Client] [Size: 12] - Unknown/New???
[OPCode: 0x3bef] [Decoded] [Server->Client] [Size: 0] -  OP_RespondAA
[OPCode: 0x322f] [Decoded] [Server->Client] [Size: 120] - OP_SendAATable

[OPCode: 0x6022] [Decoded] [Server->Client] [Size: 23488] - OP_PlayerProfile
[OPCode: 0x5a6b] [Decoded] [Server->Client] [Size: 334] - OP_ZoneEntry
[OPCode: 0x6015] [Decoded] [Server->Client] [Size: 8] - OP_TimeOfDay
[OPCode: 0x399b] [Decoded] [Server->Client] [Size: 48] -  OP_TributeUpdate

[OPCode: 0x4036] [Decoded] [Client->Server] [Size: 4] - Unknown/New???
[OPCode: 0x3594] [Decoded] [Client->Server] [Size: 4] - OP_AckPacket
[OPCode: 0x709d] [Decoded] [Server->Client] [Size: 205802] - OP_CharInventory
[OPCode: 0x5412] [Decoded] [Server->Client] [Size: 4] - OP_CompletedTasks
[OPCode: 0x2641] [Decoded] [Server->Client] [Size: 12] - OP_Weather
[OPCode: 0x4292] [Decoded] [Server->Client] [Size: 4] - OP_DeleteSpawn or Unknown/New???
[OPCode: 0x6c26] [Decoded] [Server->Client] [Size: 4] - Unknown/New???
[OPCode: 0x2c4c] [Decoded] [Server->Client] [Size: 24] - OP_WorldUnknown001

[OPCode: 0x0924] [Decoded] [Client->Server] [Size: 1] - Unknown/New???
[OPCode: 0x43ac] [Decoded] [Client->Server] [Size: 0] - OP_ReqNewZone
[OPCode: 0x466c] [Decoded] [Client->Server] [Size: 0] - OP_UpdateAA
[OPCode: 0x116d] [Decoded] [Server->Client] [Size: 20] - Unknown/New???
[OPCode: 0x5ca5] [Decoded] [Server->Client] [Size: 932] - OP_NewZone
[OPCode: 0x1b26] [Decoded] [Server->Client] [Size: 921] - OP_CustomTitles

[OPCode: 0x7bbb] [Decoded] [Client->Server] [Size: 4] - OP_TargetMouse
[OPCode: 0x3594] [Decoded] [Client->Server] [Size: 4] - OP_AckPacket
[OPCode: 0x1436] [Decoded] [Client->Server] [Size: 0] - OP_ReqClientSpawn
[OPCode: 0x102f] [Decoded] [Server->Client] [Size: 184] - OP_SpawnDoor
[OPCode: 0x5821] [Decoded] [Server->Client] [Size: 484] - OP_SendZonePoints
[OPCode: 0x69cd] [Decoded] [Server->Client] [Size: 0] - New OP_WorldObjectsSent (Replaced OP_SendExpZonein here)

[OPCode: 0x0baa] [Decoded] [Client->Server] [Size: 88] - OP_BlockedSpells
[OPCode: 0x7b73] [Decoded] [Client->Server] [Size: 0] - OP_WorldObjectSent
[OPCode: 0x10b7] [Decoded] [Server->Client] [Size: 8] - OP_SpawnAppearance
[OPCode: 0x3088] [Decoded] [Server->Client] [Size: 12] - OP_AAExpUpdate
[OPCode: 0x0e98] [Decoded] [Server->Client] [Size: 8] - OP_ExpUpdate
[OPCode: 0x50d0] [Decoded] [Server->Client] [Size: 12] - OP_AAAction
[OPCode: 0x7b73] [Decoded] [Server->Client] [Size: 0] - OP_WorldObjectSent

[OPCode: 0x7312] [Decoded] [Client->Server] [Size: 128] - OP_SetServerFilter
[OPCode: 0x4e4e] [Decoded] [Server->Client] [Size: 4704] - OP_VetRewardsAvailable
[OPCode: 0x5448] [Decoded] [Server->Client] [Size: 12] - OP_SimpleMessage
[OPCode: 0x435b] [Decoded] [Server->Client] [Size: 4] - Unknown/New???
[OPCode: 0x0296] [Decoded] [Server->Client] [Size: 4] - Unknown/New???
[OPCode: 0x5a6b] [Decoded] [Server->Client] [Size: 326] - OP_ZoneEntry
[OPCode: 0x3164] [Decoded] [Server->Client] [Size: 5] - OP_DeleteSpawn
[OPCode: 0x5ebc] [Decoded] [Server->Client] [Size: 12] - Unknown/New???

[OPCode: 0x2d17] [Decoded] [Client->Server] [Size: 8] - Unknown/New???
[OPCode: 0x6759] [Decoded] [Client->Server] [Size: 0] -  OP_ClientReady
[OPCode: 0x7b6e] [Decoded] [Client->Server] [Size: 8] - OP_WeaponEquip2
[OPCode: 0x231f] [Decoded] [Client->Server] [Size: 19] - OP_WearChange
[OPCode: 0x4675] [Decoded] [Client->Server] [Size: 20] - OP_BazaarSearch
[OPCode: 0x19d2] [Decoded] [Client->Server] [Size: 0] - Unknown/New???
[OPCode: 0x4b49] [Decoded] [Client->Server] [Size: 4] - OP_Barter??? 0x6b0e?
[OPCode: 0x7eac] [Decoded] [Client->Server] [Size: 12] - Unknown/New???
[OPCode: 0x365d] [Decoded] [Client->Server] [Size: 4] - Unknown/New???
[OPCode: 0x266e] [Decoded] [Client->Server] [Size: 4] - Unknown/New???
[OPCode: 0x7eeb] [Decoded] [Client->Server] [Size: 0] - Unknown/New???
[OPCode: 0x27bf] [Decoded] [Client->Server] [Size: 8] - Unknown/New???
[OPCode: 0x7e31] [Decoded] [Client->Server] [Size: 4] - Unknown/New???
[OPCode: 0x2d37] [Decoded] [Client->Server] [Size: 4] - Unknown/New???
[OPCode: 0x32c6] [Decoded] [Server->Client] [Size: 140] - OP_RaidUpdate
[OPCode: 0xd677] [Decoded] [Server->Client] [Size: 648] - OP_GuildMOTD
[OPCode: 0x35d3] [Decoded] [Server->Client] [Size: 8] - Unknown/New???
[OPCode: 0x7b6e] [Decoded] [Server->Client] [Size: 8] - OP_WeaponEquip2

[OPCode: 0x7062] [Decoded] [Client->Server] [Size: 40] - OP_ClientUpdate
[OPCode: 0x7eeb] [Decoded] [Server->Client] [Size: 62] - Unknown/New??? - Looks like the EQPlayers update
[OPCode: 0x538f] [Decoded] [Server->Client] [Size: 10] - OP_HPUpdate
[OPCode: 0x4b61] [Decoded] [Server->Client] [Size: 10] - Unknown/New??? - Maybe new Mana Update
[OPCode: 0x02d6] [Decoded] [Server->Client] [Size: 10] - Unknown/New??? - Maybe new Endurance Update
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #2  
Old 03-29-2010, 12:01 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

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*/
};
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #3  
Old 03-29-2010, 04:25 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Well, I think I know why NPC HPs aren't updating in the target window for SoD. It seems they added new HP/Mana/Endurance packets that give the spawn ID and a percentage value to keep the client current with it's target's health and such.

So, we will need to add in new code to support these new packets. The main priority is the health update, but the others can go in as well.

Code:
Feb 18 2009 01:00:21:741 [Decoded] [Server->Client] [Size: 3] - OP_MobHealth
[OPCode: 0x47ea]
000 | da 0f 64                                         | ..d 

Feb 18 2009 01:00:21:742 [Decoded] [Server->Client] [Size: 3] - OP_MobMana?
[OPCode: 0x2ac1]
000 | da 0f 00                                         | ... 

Feb 18 2009 01:00:21:742 [Decoded] [Server->Client] [Size: 3] - OP_MobEndurance?
[OPCode: 0x6c5f]
000 | da 0f 00                                         | ...

These structures should work for the above packets. We will just need to add in handling for them and set places in the code to know when to send them out. Why they didn't combine these 3 into a single 5 byte packet, I don't know (LOL), but this is how it looks now. At least it is still less than what we previously sent I think.

Code:
struct MobHealth_Struct
{
/* 00 */	int16	SpawnID;
/* 02 */	int8	HpPercent;
/* 03 */
};

struct MobMana_Struct
{
/* 00 */	int16	SpawnID;
/* 02 */	int8	ManaPercent;
/* 03 */
};

struct MobEndurance_Struct
{
/* 00 */	int16	SpawnID;
/* 02 */	int8	EndurancePercent;
/* 03 */
};
Other than the addition of these for the target HP/Mana/End updates, there will still need to be some more targeting work done. I am still trying to figure out what else has been changed with targeting.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 09:05 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3