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 12-31-2008, 07:07 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

After being stumped on this a while, I finally decided to take a step that would hopefully help me alot. I paid for my old EQ account so it could play on EQLive again. Then, I got the current version of ShowEQ working and put a hub in my network so I can sniff the packets to/from EQ. This is letting me watch the logs directly from EQLive that show pretty much everything I would need to get EQEmu working with EQLive. I am hoping that EQLive runs pretty close to how SoF did, and it should since there haven't been nearly as many changes to Live since SoF as there was from Titanium to SoF.

Already, I have found that the order of packets when logging in is pretty different from Titanium. I think I found the place that is stopping me from logging in all of the way. I just need to work on it some more to get it past that point. From what I can tell so far, it looks like this will be more helpful than anything I have tried. I am hoping to make more progress tonight now that I have this new information.

Here is an example of the logs of zoning in. I cut out a bunch of the actual data and stuff. I also made notes next to some of the packets.

Code:
Dec 31 2008 05:43:05:342 [Raw] [Client->Server] [Size: 12]
[OPCode: 0x0100]
000 | 00 00 00 02 6b 0b ee 8f 00 00 02 00              | ....k....... 

Dec 31 2008 05:43:05:442 [Raw] [Server->Client] [Size: 19]
[OPCode: 0x0200]
000 | 6b 0b ee 8f 45 d7 b5 02 02 01 00 00 00 02 00 00  | k...E........... 

Dec 31 2008 05:43:05:450 [Raw] [Client->Server] [Size: 38]
[OPCode: 0x0700]
000 | f0 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................ 

Dec 31 2008 05:43:05:562 [Raw] [Server->Client] [Size: 38]
[OPCode: 0x0800]
000 | f0 82 aa d9 db 45 00 00 00 00 00 00 00 02 00 00  | .....E.......... 

Dec 31 2008 05:43:05:722 [Raw] [Client->Server] [Size: 86]
[OPCode: 0x0300]
000 | 0a 00 09 00 00 94 35 00 00 00 00 4a 00 09 00 01  | ......5....J.... 

Dec 31 2008 05:43:05:722 [Decoded] [Client->Server] [Size: 4] - Probably OP_AckPacket
[OPCode: 0x3594]
000 | 00 00 00 00                                      | .... 

Dec 31 2008 05:43:05:722 [Decoded] [Client->Server] [Size: 68] - OP_ZoneEntry
[OPCode: 0x5a6b]
[Name: OP_ZoneEntry][Updated: 10/07/08][Type: ClientZoneEntryStruct (68) ==]

Dec 31 2008 05:43:05:882 [Raw] [Server->Client] [Size: 5]
[OPCode: 0x1500]
000 | a5 00 01 4a 4f                                   | ...JO 

Dec 31 2008 05:43:05:882 [Raw] [Server->Client] [Size: 406] - Varies in size
[OPCode: 0x0900]
000 | 00 00 00 19 0e f0 1a c1 88 00 00 00 00 00 00 64  | ...............d 

Dec 31 2008 05:43:05:882 [Decoded] [Server->Client] [Size: 12]
[OPCode: 0x1af0]
000 | c1 88 00 00 00 00 00 00 64 00 00 00              | ........d... 

Dec 31 2008 05:43:05:883 [Decoded] [Server->Client] [Size: 0]
[OPCode: 0x3bef]

Dec 31 2008 05:43:05:883 [Decoded] [Server->Client] [Size: 120] - OP_SendAATable
[OPCode: 0x322f]
000 | 02 00 00 00 01 ff ff ff ff ff ff ff ff 02 00 00  | ................ 

Dec 31 2008 05:43:06:603 [Raw] [Client->Server] [Size: 5]
[OPCode: 0x1500]
000 | a5 00 23 0b ab                                   | ..#.. 

Dec 31 2008 05:43:06:696 [Raw] [Server->Client] [Size: 507] - I think these are compressed, combined or encoded packets, or maybe combinations of each
[OPCode: 0x0d00]
000 | 00 26 00 00 5b c2 22 60 fd 19 df 72 00 00 00 00  | .&..[."`...r.... 

Dec 31 2008 05:43:06:973 [Decoded] [Server->Client] [Size: 23488] - OP_PlayerProfile
[OPCode: 0x6022]
[Name: OP_PlayerProfile][Updated: 01/17/08][Type: charProfileStruct (23488) ==]

Dec 31 2008 05:43:07:150 [Decoded] [Server->Client] [Size: 334] - OP_ZoneEntry
[OPCode: 0x5a6b]
[Name: OP_ZoneEntry][Updated: 10/07/08][Type: uint8_t (1) nc]

Dec 31 2008 05:43:07:163 [Decoded] [Server->Client] [Size: 8] - OP_TimeOfDay
[OPCode: 0x6015]
[Name: OP_TimeOfDay][Updated: 01/17/08][Type: timeOfDayStruct (8) ==]
000 | 16 2b 02 01 69 0c 00 00                          | .+..i... 

Dec 31 2008 05:43:07:163 [Decoded] [Server->Client] [Size: 48] - Maybe OP_TributeUpdate
[OPCode: 0x399b]
000 | 00 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff  | ................ 

Dec 31 2008 05:43:07:179 [Decoded] [Client->Server] [Size: 4]
[OPCode: 0x4036]
000 | a9 04 00 00                                      | .... 

Dec 31 2008 05:43:07:179 [Decoded] [Client->Server] [Size: 4] - Probably OP_AckPacket
[OPCode: 0x3594]
000 | 00 00 00 00                                      | .... 

Dec 31 2008 05:43:07:680 [Decoded] [Server->Client] [Size: 205802] - Character Inventory
[OPCode: 0x709d]
000 | 30 00 00 00 01 00 00 00 00 00 00 00 1e 00 00 00  | 0............... 

Dec 31 2008 05:43:08:028 [Decoded] [Server->Client] [Size: 4]
[OPCode: 0x5412]
000 | 00 00 00 00                                      | .... 

Dec 31 2008 05:43:08:029 [Decoded] [Server->Client] [Size: 12] - Looks like OP_Weather
[OPCode: 0x2641]
000 | ff 00 00 00 00 00 00 00 01 00 00 00              | ............ 

Dec 31 2008 05:43:08:029 [Decoded] [Server->Client] [Size: 4] - OP_DeleteSpawn
[OPCode: 0x4292]
[Name: OP_DeleteSpawn][Updated: 10/07/08][Type: deleteSpawnStruct (4) ==]
000 | 4f 48 00 00                                      | OH.. 

Dec 31 2008 05:43:08:029 [Decoded] [Server->Client] [Size: 4]
[OPCode: 0x6c26]
000 | 00 00 00 00                                      | .... 

Dec 31 2008 05:43:08:029 [Decoded] [Server->Client] [Size: 24]
[OPCode: 0x2c4c]
000 | 92 cb ce 02 08 08 00 00 0b e0 d9 aa 00 00 00 00  | ................ 
016 | 10 00 00 00 00 00 00 00                          | ........ 

Dec 31 2008 05:43:08:431 [Decoded] [Client->Server] [Size: 1]
[OPCode: 0x0924]
000 | 30                                               | 0 

Dec 31 2008 05:43:08:431 [Decoded] [Client->Server] [Size: 0]
[OPCode: 0x43ac]

Dec 31 2008 05:43:08:431 [Decoded] [Client->Server] [Size: 0] - Maybe OP_ReqNewZone
[OPCode: 0x466c]

Dec 31 2008 05:43:08:611 [Decoded] [Server->Client] [Size: 20]
[OPCode: 0x116d]
000 | 00 00 00 00 a0 bb 0d 00 20 bf 02 00 05 00 00 00  | ........ ....... 
016 | 00 00 00 00                                      | .... 

Dec 31 2008 05:43:08:612 [Decoded] [Server->Client] [Size: 932] - OP_NewZone
[OPCode: 0x5ca5]
[Name: OP_NewZone][Updated: 01/17/08][Type: newZoneStruct (932) ==]

Dec 31 2008 05:43:08:676 [Decoded] [Server->Client] [Size: 921] - Custom Titles
[OPCode: 0x1b26]
000 | 22 00 00 00 3c 00 00 00 64 00 00 00 41 70 70 72  | "...<...d...Appr 

Dec 31 2008 05:43:12:766 [Decoded] [Client->Server] [Size: 4] - OP_TargetMouse?
[OPCode: 0x7bbb]
[Name: OP_TargetMouse][Updated: 01/17/08][Type: clientTargetStruct (4) ==]
000 | 00 00 00 00                                      | .... 

Dec 31 2008 05:43:14:898 [Decoded] [Client->Server] [Size: 4] - Probably OP_AckPacket
[OPCode: 0x3594]
000 | 00 00 00 00                                      | .... 

Dec 31 2008 05:43:14:898 [Decoded] [Client->Server] [Size: 0] - Request Client Spawn
[OPCode: 0x1436]

Dec 31 2008 05:43:15:015 [Decoded] [Server->Client] [Size: 184] - Spawn Doors
[OPCode: 0x102f]
000 | 41 43 44 4f 4f 52 53 33 31 30 00 00 ff ff 00 00  | ACDOORS310...... 

Dec 31 2008 05:43:15:027 [Decoded] [Server->Client] [Size: 484]
[OPCode: 0x5821]
000 | 13 00 00 00 00 00 00 00 00 00 87 43 00 00 d9 44  | ...........C...D 

Dec 31 2008 05:43:15:028 [Decoded] [Server->Client] [Size: 0] - New World Objects Sent (Replaced sendexpzonein)
[OPCode: 0x69cd]

Dec 31 2008 05:43:15:167 [Decoded] [Client->Server] [Size: 88]
[OPCode: 0x0baa]
000 | ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  | ................ 

Dec 31 2008 05:43:15:168 [Decoded] [Client->Server] [Size: 0] - Send Exp Zone In
[OPCode: 0x7b73]

Dec 31 2008 05:43:15:339 [Decoded] [Server->Client] [Size: 8] - OP_SpawnAppearance
[OPCode: 0x10b7]
[Name: OP_SpawnAppearance][Updated: 01/17/08][Type: spawnAppearanceStruct (8) ==]
000 | 00 00 10 00 53 48 00 00                          | ....SH.. 

Dec 31 2008 05:43:15:339 [Decoded] [Server->Client] [Size: 12] - OP_AAExpUpdate
[OPCode: 0x3088]
[Name: OP_AAExpUpdate][Updated: 01/17/08][Type: altExpUpdateStruct (12) ==]
000 | 06 00 00 00 00 00 00 00 00 00 00 00              | ............ 

Dec 31 2008 05:43:15:340 [Decoded] [Server->Client] [Size: 8] - OP_ExpUpdate
[OPCode: 0x0e98]
[Name: OP_ExpUpdate][Updated: 01/17/08][Type: expUpdateStruct (8) ==]
000 | 43 00 00 00 00 00 00 00                          | C....... 

Dec 31 2008 05:43:15:340 [Decoded] [Server->Client] [Size: 12]
[OPCode: 0x50d0]
000 | 00 00 00 00 00 00 00 00 25 59 5b 49              | ........%Y[I 

Dec 31 2008 05:43:15:355 [Decoded] [Server->Client] [Size: 0]
[OPCode: 0x7b73]

Dec 31 2008 05:43:15:506 [Decoded] [Client->Server] [Size: 128]
[OPCode: 0x7312]
000 | 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00  | ................ 

Dec 31 2008 05:43:15:621 [Decoded] [Server->Client] [Size: 4704] - List of Rewards available from /claim
[OPCode: 0x4e4e]
000 | cc 0b 00 00 01 00 00 00 01 00 00 00 bc 9f 00 00  | ................ 

Dec 31 2008 05:43:15:625 [Decoded] [Server->Client] [Size: 12] - OP_SimpleMessage
[OPCode: 0x5448]
[Name: OP_SimpleMessage][Updated: 01/17/08][Type: simpleMessageStruct (12) ==]
000 | 0e 0e 00 00 0f 00 00 00 00 00 00 00              | ............ 

Dec 31 2008 05:43:15:625 [Decoded] [Server->Client] [Size: 4]
[OPCode: 0x435b]
000 | 00 00 00 00                                      | .... 

Dec 31 2008 05:43:15:625 [Decoded] [Server->Client] [Size: 4]
[OPCode: 0x0296]
000 | 00 00 00 00                                      | .... 

Dec 31 2008 05:43:15:626 [Decoded] [Server->Client] [Size: 326] - OP_ZoneEntry (this time from server to client)
[OPCode: 0x5a6b]
[Name: OP_ZoneEntry][Updated: 10/07/08][Type: uint8_t (1) nc]

Dec 31 2008 05:43:15:626 [Decoded] [Server->Client] [Size: 5] - OP_RemoveSpawn
[OPCode: 0x3164]
[Name: OP_RemoveSpawn][Updated: 04/17/08][Type: removeSpawnStruct (5) nc]
000 | 4f 48 00 00 01                                   | OH... 

Dec 31 2008 05:43:15:626 [Decoded] [Server->Client] [Size: 12]
[OPCode: 0x5ebc]
000 | 00 00 00 00 62 70 cb 32 00 00 00 00              | ....bp.2.... 

Dec 31 2008 05:43:15:659 [Decoded] [Client->Server] [Size: 8]
[OPCode: 0x2d17]
000 | 62 70 cb 32 4a 17 19 da                          | bp.2J... 

Dec 31 2008 05:43:15:660 [Decoded] [Client->Server] [Size: 0]
[OPCode: 0x6759]

Dec 31 2008 05:43:15:660 [Decoded] [Client->Server] [Size: 8]
[OPCode: 0x7b6e]
000 | 53 48 00 00 40 00 00 00                          | SH..@... 

Dec 31 2008 05:43:15:660 [Decoded] [Client->Server] [Size: 19] - OP_WearChange
[OPCode: 0x231f]
[Name: OP_WearChange][Updated: 01/17/08][Type: SpawnUpdateStruct (19) ==]
000 | 53 48 50 00 00 00 00 00 00 00 00 00 00 00 00 00  | SHP............. 
016 | 00 00 09                                         | ... 

Dec 31 2008 05:43:15:661 [Decoded] [Client->Server] [Size: 20] - OP_BazaarSearch
[OPCode: 0x4675]
[Name: OP_BazaarSearch][Updated: 01/17/08][Type: bazaarSearchQueryStruct (100) nc]
000 | 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................ 
016 | 00 00 00 00                                      | .... 

Dec 31 2008 05:43:15:661 [Decoded] [Client->Server] [Size: 0]
[OPCode: 0x19d2]

Dec 31 2008 05:43:15:661 [Decoded] [Client->Server] [Size: 4]
[OPCode: 0x4b49]
000 | 17 00 00 00                                      | .... 

Dec 31 2008 05:43:15:662 [Decoded] [Client->Server] [Size: 12]
[OPCode: 0x7eac]
000 | 26 02 00 00 fa 02 00 00 00 f7 44 04              | &.........D. 

Dec 31 2008 05:43:15:662 [Decoded] [Client->Server] [Size: 4]
[OPCode: 0x365d]
000 | 01 01 01 01                                      | .... 

Dec 31 2008 05:43:15:662 [Decoded] [Client->Server] [Size: 4]
[OPCode: 0x266e]
000 | 01 01 01 01                                      | .... 

Dec 31 2008 05:43:15:662 [Decoded] [Client->Server] [Size: 0]
[OPCode: 0x7eeb]

Dec 31 2008 05:43:15:662 [Decoded] [Client->Server] [Size: 8]
[OPCode: 0x27bf]
000 | 00 00 00 00 ff ff ff ff                          | ........ 

Dec 31 2008 05:43:15:663 [Decoded] [Client->Server] [Size: 4]
[OPCode: 0x7e31]
000 | 01 01 01 01                                      | .... 

Dec 31 2008 05:43:15:663 [Decoded] [Client->Server] [Size: 4]
[OPCode: 0x2d37]
000 | 01 01 01 01                                      | .... 

Dec 31 2008 05:43:15:738 [Decoded] [Server->Client] [Size: 140] - Probably OP_GuildMemberList
[OPCode: 0x32c6]
000 | 0a 00 00 00 54 72 65 76 69 75 73 00 00 00 00 00  | ....XXXXXXX..... (name removed)

Dec 31 2008 05:43:15:902 [Decoded] [Server->Client] [Size: 648] - OP_GuildMOTD
[OPCode: 0xd677]
[Name: OP_GuildMOTD][Updated: 01/17/08][Type: guildMOTDStruct (136) nc]

Dec 31 2008 05:43:15:902 [Decoded] [Server->Client] [Size: 8]
[OPCode: 0x35d3]
000 | 92 f4 00 00 00 00 00 00                          | ........ 

Dec 31 2008 05:43:15:903 [Decoded] [Server->Client] [Size: 8]
[OPCode: 0x7b6e]
000 | 53 48 00 00 40 00 00 00                          | SH..@... 

Dec 31 2008 05:43:15:959 [Decoded] [Client->Server] [Size: 40] - OP_ClientUpdate
[OPCode: 0x7062]
[Name: OP_ClientUpdate][Updated: 01/17/08][Type: playerSelfPosStruct (40) ==]

Dec 31 2008 05:43:16:339 [Decoded] [Server->Client] [Size: 62] - Looks like the EQPlayers update
[OPCode: 0x7eeb]
000 | 68 74 74 70 73 3a 2f 2f 77 77 77 2e 65 71 70 2e  | https://www.eqp. 

Dec 31 2008 05:43:16:339 [Decoded] [Server->Client] [Size: 10]
[OPCode: 0x538f]
000 | 58 12 00 00 16 1d 00 00 53 48                    | X.......SH 

Dec 31 2008 05:43:16:340 [Decoded] [Server->Client] [Size: 10]
[OPCode: 0x4b61]
000 | 00 00 00 00 00 00 00 00 53 48                    | ........SH 

Dec 31 2008 05:43:16:340 [Decoded] [Server->Client] [Size: 10]
[OPCode: 0x02d6]
000 | d9 1b 00 00 d9 1b 00 00 53 48                    | ........SH
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!

Last edited by trevius; 01-05-2009 at 06:42 AM..
Reply With Quote
  #2  
Old 12-31-2008, 08:27 PM
KLS
Administrator
 
Join Date: Sep 2006
Posts: 1,348
Default

SEQ isn't converting network to host byte order on the raw soe opcodes but here:

Code:
Dec 31 2008 05:43:05:342 [Raw] [Client->Server] [Size: 12]
[OPCode: 0x0100]
000 | 00 00 00 02 6b 0b ee 8f 00 00 02 00              | ....k.......
Connect Request
int crc length 0x00000002 = 2
int session id 0x6b0bee8f
max packet size 0x00000200 = 512

Code:
Dec 31 2008 05:43:05:442 [Raw] [Server->Client] [Size: 19]
[OPCode: 0x0200]
000 | 6b 0b ee 8f 45 d7 b5 02 02 01 00 00 00 02 00 00  | k...E...........
Connect Accept Reply
int session id 0x6b0bee8f
int encode key 0x45d7b502
char crc length 0x02
crypt options bitfield 0x0201
max packet size 0x00000200

Code:
Dec 31 2008 05:43:05:450 [Raw] [Client->Server] [Size: 38]
[OPCode: 0x0700]
000 | f0 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................
Network Status Update - not really important.

[code]Dec 31 2008 05:43:05:722 [Raw] [Client->Server] [Size: 86]
[OPCode: 0x0300]
000 | 0a 00 09 00 00 94 35 00 00 00 00 4a 00 09 00 01 | ......5....J.... [code]
Combined packet

contains:
Code:
Dec 31 2008 05:43:05:722 [Decoded] [Client->Server] [Size: 4] - 
[OPCode: 0x3594]
000 | 00 00 00 00                                      | .... 

Dec 31 2008 05:43:05:722 [Decoded] [Client->Server] [Size: 68] - OP_ZoneEntry
[OPCode: 0x5a6b]
[Name: OP_ZoneEntry][Updated: 10/07/08][Type: ClientZoneEntryStruct (68) ==]
The first packet isn't a soe ack you can tell by the opcode and the fact that it doesn't include a sequence number. Likely some kind of I am ready for this info packet.

Code:
Dec 31 2008 05:43:05:882 [Raw] [Server->Client] [Size: 5]
[OPCode: 0x1500]
000 | a5 00 01 4a 4f                                   | ...JO
This is an ack packet, tho it looks wrong, they're usually 4 bytes total including the opcode 2 without this one is 7 byte with the opcode 5 without. The opcode is SOE_ACK tho.

Code:
Dec 31 2008 05:43:05:882 [Raw] [Server->Client] [Size: 406] - Varies in size
[OPCode: 0x0900]
000 | 00 00 00 19 0e f0 1a c1 88 00 00 00 00 00 00 64  | ...............d
These are standalone packets, encoded and compressed with a 2 byte sequence on the top probably 0x0000 since this is the first and a crc on the end. It's also possible to combine packets within an 0x0009 packet but you can't combine a raw packet and an eq packet inside the 0x0009 they both have to be EQ packets.

Code:
Dec 31 2008 05:43:06:696 [Raw] [Server->Client] [Size: 507] - 
[OPCode: 0x0d00]
000 | 00 26 00 00 5b c2 22 60 fd 19 df 72 00 00 00 00  | .&..[."`...r....
This is a fragmented packet like 0x0009 they are encoded and compressed they have a sequence number for recombining and a length byte. These are used when the data chunk being sent is larger than the max frame size sent on init: 512.

I know this doesn't help at all for figuring out what you need for the SoF stuff but maybe if you understand how the raw protocol works you'll understand it a bit better.
Reply With Quote
  #3  
Old 01-01-2009, 07:46 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Ya, at least that clears a few things up that I wasn't quite sure about. I was ignoring the 0300 and 0900 because I figured they were doing something like that. I think 0d00 is also something like that, I am guessing raw packets that need to be encrypted? Either way, I ignore those as well :P

Just familiarizing myself with the packet logs, I started breaking down the structure for player profile to see if I could verify what it should look like currently for EQLive. So far I am almost done with it and will post the finished version when it is completed. I think it will help to have an accurate player profile with SoF once it is working at all.

Right now, I think I am really close, but I am doing the same thing live does and the client just stops at that first main loop every time. Maybe I have something messed up earlier on and it isn't figuring that out until that point. Or, maybe I have to have the AA stats opcode for it to continue, and I don't. I have almost all of the ones I need, but that one is really elusive to me lol. I can run Titanium fine without it, so I think it should be ok to run SoF without it, but no way to know for sure.

Basically, this is the order things happen on Titanium in the emu for the part I am having a problem with:

Code:
OP_ReqClientSpawn From Client to request the following:
OP_SpawnDoor
OP_GroundSpawn
OP_SendAAStats
OP_SendExpZonein To client to tell them that we are done sending it all.
OP_SendExpZonein From the Client to ask the server for more stuff
And this the order I am seeing from live for that same part:
Code:
OP_ReqClientSpawn
OP_SpawnDoor
OP_NotSure (not sure which one this is yet)
OP_SendWorldObjectMSG - New from EQLive.  Server sends this to client
OP_SendExpZonein - Client sees the Object MSG and sends this asking for more stuff
So, I think SoF is supposed to be set the way Live is now. But for some reason, it still isn't working yet for me. I have tried both ways and more and the client never responds with the SendExpZonein as it should, or anything else for that matter. It is like it is either waiting for something that hasn't come yet, or something came but was messed up in format.

Well, I will keep plugging away at it. I learn more each day and it will help alot once I actually get to the point where I can start cleaning stuff up so people can actually use SoF to play.

Here is the example right from the logs from Live:

Code:
Dec 31 2008 05:43:14:898 [Decoded] [Client->Server] [Size: 0] - Request Client Spawn
[OPCode: 0x1436]

Dec 31 2008 05:43:15:015 [Decoded] [Server->Client] [Size: 184] - Spawn Doors
[OPCode: 0x102f]
000 | 41 43 44 4f 4f 52 53 33 31 30 00 00 ff ff 00 00  | ACDOORS310...... 

Dec 31 2008 05:43:15:027 [Decoded] [Server->Client] [Size: 484] - Unsure what this is atm.  Probably zone points
[OPCode: 0x5821]
000 | 13 00 00 00 00 00 00 00 00 00 87 43 00 00 d9 44  | ...........C...D 

Dec 31 2008 05:43:15:028 [Decoded] [Server->Client] [Size: 0] - Send Exp Zone In
[OPCode: 0x69cd]

Here is the full 0x5821 that I am gonna check and see if I can find what it is:
Code:
Dec 31 2008 23:44:35:954 [Decoded] [Server->Client] [Size: 172]
[OPCode: 0x5821]
000 | 06 00 00 00 01 00 00 00 00 00 d1 43 00 00 80 41  | ...........C...A 
016 | 00 00 e8 c1 00 80 bf 43 98 00 00 00 02 00 00 00  | .......C........ 
032 | 00 40 18 c4 00 80 cf c3 00 00 80 c0 00 00 22 43  | .@............"C 
048 | a1 00 00 00 03 00 00 00 00 00 16 44 00 60 e5 c4  | ...........D.`.. 
064 | 00 00 a8 c1 00 00 fc 42 a8 00 00 00 04 00 00 00  | .......B........ 
080 | 00 80 ec 43 00 c0 e5 c4 00 00 a8 c1 00 00 fe 42  | ...C...........B 
096 | a8 00 00 00 05 00 00 00 00 a0 01 45 00 00 e2 c2  | ...........E.... 
112 | 00 00 ae 42 00 00 be 43 ae 00 00 00 06 00 00 00  | ...B...C........ 
128 | 00 00 02 45 00 00 75 c3 00 00 ae 42 00 00 e4 42  | ...E..u....B...B 
144 | ae 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  | ................ 
160 | 00 00 00 00 00 00 00 00 00 00 00 00              | ............
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!

Last edited by trevius; 01-01-2009 at 03:53 PM..
Reply With Quote
  #4  
Old 01-05-2009, 01:35 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

I guess I am going to break down EQLive and see what each Opcode is so I can get an accurate order for what packets should be going when. Using SEQ, it shouldn't be too tough to get that all sorted out. Once I know the specific details, I am hoping to try them on SoF and see if it works.

Here is what I have so far:

Code:
[OPCode: 0x0100] [Raw] [Client->Server] [Size: 12] - Connect Request
[OPCode: 0x0200] [Raw] [Server->Client] [Size: 19] - Connect Accept Reply
[OPCode: 0x0700] [Raw] [Client->Server] [Size: 38] - Network Status Update
[OPCode: 0x0800] [Raw] [Server->Client] [Size: 38] - Network Status Update Reply?
[OPCode: 0x0300] [Raw] [Client->Server] [Size: 86] - Combined Packet

[OPCode: 0x3594] [Decoded] [Client->Server] [Size: 4] - Probably OP_AckPacket
[OPCode: 0x5a6b] [Decoded] [Client->Server] [Size: 68] - OP_ZoneEntry
[OPCode: 0x1500] [Raw] [Server->Client] [Size: 5] - Some Kind of Ack Packet
[OPCode: 0x0900] [Raw] [Server->Client] [Size: 406] - Stand-Alone Encoded and Compressed Packet
[OPCode: 0x1af0] [Decoded] [Server->Client] [Size: 12]
[OPCode: 0x3bef] [Decoded] [Server->Client] [Size: 0]
[OPCode: 0x322f] [Decoded] [Server->Client] [Size: 120] - OP_SendAATable

[OPCode: 0x1500] [Raw] [Client->Server] [Size: 5] - Some Kind of Ack Packet
[OPCode: 0x0d00] [Raw] [Server->Client] [Size: 507] - Fragmented Packet With Sequence
[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] - Maybe OP_TributeUpdate

[OPCode: 0x4036] [Decoded] [Client->Server] [Size: 4] - Maybe OP_TributeTimer
[OPCode: 0x3594] [Decoded] [Client->Server] [Size: 4] - Probably OP_AckPacket
[OPCode: 0x709d] [Decoded] [Server->Client] [Size: 205802] - Character Inventory
[OPCode: 0x5412] [Decoded] [Server->Client] [Size: 4] - Maybe OP_TaskDescription
[OPCode: 0x2641] [Decoded] [Server->Client] [Size: 12] - Maybe OP_TaskActivity or OP_Weather
[OPCode: 0x4292] [Decoded] [Server->Client] [Size: 4] - OP_DeleteSpawn
[OPCode: 0x6c26] [Decoded] [Server->Client] [Size: 4] - Maybe OP_CompletedTasks
[OPCode: 0x2c4c] [Decoded] [Server->Client] [Size: 24] - Maybe OP_Weather

[OPCode: 0x0924] [Decoded] [Client->Server] [Size: 1] - OP_ReqNewZone
[OPCode: 0x43ac] [Decoded] [Client->Server] [Size: 0] - Maybe OP_SendTributes
[OPCode: 0x466c] [Decoded] [Client->Server] [Size: 0] - Maybe OP_TributeInfo
[OPCode: 0x116d] [Decoded] [Server->Client] [Size: 20] - Maybe OP_SendGuildTributes
[OPCode: 0x5ca5] [Decoded] [Server->Client] [Size: 932] - OP_NewZone
[OPCode: 0x1b26] [Decoded] [Server->Client] [Size: 921] - Custom Titles

[OPCode: 0x7bbb] [Decoded] [Client->Server] [Size: 4] - OP_TargetMouse?
[OPCode: 0x3594] [Decoded] [Client->Server] [Size: 4] - Probably OP_AckPacket
[OPCode: 0x1436] [Decoded] [Client->Server] [Size: 0] - OP_ReqClientSpawn
[OPCode: 0x102f] [Decoded] [Server->Client] [Size: 184] - Spawn Doors
[OPCode: 0x5821] [Decoded] [Server->Client] [Size: 484] - Probably GroundSpawns or Zone Points
[OPCode: 0x69cd] [Decoded] [Server->Client] [Size: 0] - New OP_WorldObjectsSent (Replaced OP_SendExpZonein here)

[OPCode: 0x0baa] [Decoded] [Client->Server] [Size: 88] - NEW OP_BlockedSpells
[OPCode: 0x7b73] [Decoded] [Client->Server] [Size: 0] - OP_SendExpZonein
[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]
[OPCode: 0x7b73] [Decoded] [Server->Client] [Size: 0]

[OPCode: 0x7312] [Decoded] [Client->Server] [Size: 128]
[OPCode: 0x4e4e] [Decoded] [Server->Client] [Size: 4704] - List of Rewards available from /claim
[OPCode: 0x5448] [Decoded] [Server->Client] [Size: 12] - OP_SimpleMessage
[OPCode: 0x435b] [Decoded] [Server->Client] [Size: 4]
[OPCode: 0x0296] [Decoded] [Server->Client] [Size: 4]
[OPCode: 0x5a6b] [Decoded] [Server->Client] [Size: 326] - OP_ZoneEntry (this time from server to client)
[OPCode: 0x3164] [Decoded] [Server->Client] [Size: 5] - OP_RemoveSpawn
[OPCode: 0x5ebc] [Decoded] [Server->Client] [Size: 12]

[OPCode: 0x2d17] [Decoded] [Client->Server] [Size: 8]
[OPCode: 0x6759] [Decoded] [Client->Server] [Size: 0]
[OPCode: 0x7b6e] [Decoded] [Client->Server] [Size: 8]
[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]
[OPCode: 0x4b49] [Decoded] [Client->Server] [Size: 4]
[OPCode: 0x7eac] [Decoded] [Client->Server] [Size: 12]
[OPCode: 0x365d] [Decoded] [Client->Server] [Size: 4]
[OPCode: 0x266e] [Decoded] [Client->Server] [Size: 4]
[OPCode: 0x7eeb] [Decoded] [Client->Server] [Size: 0]
[OPCode: 0x27bf] [Decoded] [Client->Server] [Size: 8]
[OPCode: 0x7e31] [Decoded] [Client->Server] [Size: 4]
[OPCode: 0x2d37] [Decoded] [Client->Server] [Size: 4]
[OPCode: 0x32c6] [Decoded] [Server->Client] [Size: 140] - Probably OP_GuildMemberList
[OPCode: 0xd677] [Decoded] [Server->Client] [Size: 648] - OP_GuildMOTD
[OPCode: 0x35d3] [Decoded] [Server->Client] [Size: 8]
[OPCode: 0x7b6e] [Decoded] [Server->Client] [Size: 8]

[OPCode: 0x7062] [Decoded] [Client->Server] [Size: 40] - OP_ClientUpdate
[OPCode: 0x7eeb] [Decoded] [Server->Client] [Size: 62] - Looks like the EQPlayers update
[OPCode: 0x538f] [Decoded] [Server->Client] [Size: 10] - Probably OP_HPUpdate
[OPCode: 0x4b61] [Decoded] [Server->Client] [Size: 10] - Maybe new Mana Update
[OPCode: 0x02d6] [Decoded] [Server->Client] [Size: 10] - Maybe new Endurance Update
I will edit this list as I can make more confirmations. It shouldn't take me long to figure out most of this list. I can tell for sure that some of the orders have changed, so I think if I can get that sorted out, it may work almost flawlessly for SoF.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!

Last edited by trevius; 01-06-2009 at 02:59 AM..
Reply With Quote
  #5  
Old 01-05-2009, 06:15 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

I stumbled on a new struct last night. It doesn't really help this effort much, but it is probably worth noting for use later when we might be able to actually put it to use. There is a feature on Live that was in SoF as well, but not in Titanium. The new feature let's the client set certain spells to be blocked from hitting the client. This is for keeping buffs from overriding each other if you don't want them to.

The EQLive opcode for this is 0x0baa and I found the SoF opcode for it too. I built a struct for it with placeholders just to have something in place for it even though I don't know the values for it yet.

I also confirmed that EQLive now has 60 pages in the spell book as apposed to 50 in Titanium. This means that the MAX_PP_SPELLBOOK is now 480 in EQLive and probably in SoF as well. They had to add it when they upped player levels to 75, so I am sure it was in SoF, otherwise druids and maybe other classes could have overflowing spell books.

I am sure that most of my struct for SoF are correct or very close to it. I think I am just missing something minor that is keeping me from getting past this point I have been stuck at for the past couple of weeks. If I can just get pass that point, I feel that the rest will be much quicker and easier. My current guess is that I may not have all of the right opcodes being encoded on the way out that need to be for SoF. The client is expecting a 0 size opcode 0x1FA1, which is new since Titanium. Basically, it seems to be the same as SendExpZonein, accept instead of server sending that and getting it back from the client, it now sends this new opcode and waits for the SendExpZonein back from the client.

From looking at the EQLive logs, it looks like almost all packets are encoded now, at least while entering a zone. Maybe I have to set them all to be encoded for the client to get all of the info it needs for logging in. That is going to be a bit of a pain, because as far as I can tell, I have to create the handling stuff for each opcode that needs to be encoded. If there was a way for me to just set an opcode to be encoded in the Anniversary_ops.h and then only have to tell the Anniversary.cpp to use the structure for encoding, that would be pretty easy. But, it looks like I need to do something more like this for each one:

Code:
ENCODE(OP_ManaChange) {
	ENCODE_LENGTH_EXACT(ManaChange_Struct);
	SETUP_DIRECT_ENCODE(ManaChange_Struct, structs::ManaChange_Struct);
	OUT(new_mana);
	OUT(stamina);
	OUT(spell_id);
	FINISH_ENCODE();
}
I'm not exactly sure what the OUT stuff means, but I am guessing that all of the stuff set to go OUT is the stuff that gets encoded. If so, then I wonder what happens to stuff in the structure that isn't set to go OUT in the ENCODE. Does that stuff just get ignored?
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #6  
Old 01-07-2009, 04:11 PM
greldor
Fire Beetle
 
Join Date: Oct 2004
Posts: 7
Default

Long time lurker, 1st time caller. . .


This work you've been doing is very exciting. With the last ever boxed edition of EQ1 possibly being SoF, this is a big step. I have been looking through the wikis and the forums, and trying to find some up to dat info on if there is anything someone with an active eqlive account can do to collect information for the Devs.

Let me know if there is something that can be done with no experience besides setting up a mini login server in the basement.

Thanks,

Greldor
The Grand Creation
Reply With Quote
  #7  
Old 01-07-2009, 04:18 PM
unknownhost
Sarnak
 
Join Date: Dec 2006
Posts: 89
Default my god man...

i didnt believe in intelligent machines until i read this thread.

Trevius isnt human i tell you! he is the real life Bender!!!!


you're awesome man, good things are comming peoples!


on a nearly equally pointless side note. every time i type/read Trevius' name i think of Golan Trevise from the Foundation series. any relation by chance?
Reply With Quote
  #8  
Old 01-07-2009, 04:55 PM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default

Quote:
Originally Posted by trevius View Post
I'm not exactly sure what the OUT stuff means, but I am guessing that all of the stuff set to go OUT is the stuff that gets encoded. If so, then I wonder what happens to stuff in the structure that isn't set to go OUT in the ENCODE. Does that stuff just get ignored?
The ENCODE/DECODE is used when the struct is different between Client versions.

ENCODE 'encodes' packets on the way out, from the server to the client, and DECODE does the reverse.

The ENCODE is a translation from the struct in common/eq_packet_structs.h to the struct in the client specific struct in patches/<Client version>_structs.h.

To take your example for OP_ManaChange. The 'EMU' struct for this, in common/eq_packet_structs.h is:

Code:
struct ManaChange_Struct
{
        int32   new_mana;                  // New Mana AMount
        int32   stamina;
        int32   spell_id;
        int32   unknown12;
};
while the Anniversary struct is:

Code:
struct ManaChange_Struct
{
        int32   new_mana;                  // New Mana AMount
        int32   stamina;
        int32   spell_id;
        int32   unknown12;
        int32   unknown16;
};
As you can see, Anniversary has an extra field at the end of the struct.

Essentially, the ENCODE section in Anniversary.cpp is copying the fields from the Emulator version of the struct to the version that Anniversary edition needs. I think the outgoing packet is filled with zeroes before the ENCODE takes place, so unknown12 and unknown16 would be zero.

For each struct that has changed in SoF, you would need to map out the fields in the new structure and add it to Anniversary_structs.h, add the Opcode to Anniversary_ops.h and do an ENCODE in Anniversary.cpp.

You would also need to do the same for Client to Server opcodes where the struct has changed, but this time do a DECODE from the SoF client structure to the Emu struct.
Reply With Quote
  #9  
Old 01-07-2009, 06:37 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

@ greldor - Thanks. I wound up paying to get my old EQLive account active again. I am currently using ShowEQ to watch all opcodes from Client to Server on Live where I need to be looking. Right now, I am still working on just logging in. Once I can get past that point, I think it won't be too hard for me to break down each individual structure that has changed and get them updated as well as start filling in missing opcodes. I have switched directions for now and am going to see if I can get the emu working with EQLive. It should be much easier to get it working with Live, because I can see exactly what the client wants and is expecting from looking at the SEQ logs. Then, even if I don't know what a certain packet is, I should be able to just duplicate what I saw the Live server sending from the SEQ logs and trick the client to log all of the way in until I can fill in the missing information. There isn't really much other people can help with right now until I can get logged in all of the way. Once I do that, I will update the SVN so others can assist in filling in and updating opcodes and packet structures and making any other needed tweaks to finalize it. I am not planning to try to chase Live by making the emu work with it, I am only trying to get in on an EQLive version because it should be easier than SoF. Once I get in game with the EQLive version, I will try to work backwards and get SoF working with it. I think that will be much easier than trying to work from Titanium to SoF, since Live seems much closer to SoF than Titanium is.

@ unknownhost - No, no relation to the name. My avatar name is named after my nephew Trever, but with a fantasy twist to it :P I am definitely no machine, I am just persistent enough to keep going even when I am failing miserably. There are certainly a few people on this project who have much more experience than me and probably would have had this working by now already. Unfortunately, none of them have SoF, and more importantly, I don't think they have the time needed to do it. I am more than willing to do all of the grunt work in getting this stuff to work, but I admit it would be nice if one of the more experienced people were able to help figure out some of the more problematic issues (like currently being stuck at the first main loop). The big time involvement here is getting each of the needed opcodes and verifying they are accurate, and also getting each of the packet structures and verifying they are as accurate as possible. To the point I am currently failing at, I think I have all of the required opcodes and most of the packet structures should be good enough to be working for it. I haven't worked much past that point yet, because there isn't a point to until I get to the point where I need them. I didn't know anything about coding 8 months ago and have only learned by examples from reading the emulator source code and working on it. I have learned alot and learn new things every day, but I am sure the more experienced people would probably be able to help alot if they had the time. I will keep working away at it and will get it eventually, hopefully. All of the time I am working on this has really forced me to learn things I wouldn't have otherwise, so that is actually a good thing, but VERY time involved. It has officially been more than a month that I have been working on this so far, and I have worked on it for hours every single night. I made alot of progress in the first week or so, but since I got stuck on this main loop, I haven't been able to get past it. At this point, I still don't know what is causing it to hang up at that point. It could be anything from a wrong opcode, packet structure, something else missing, or whatever. Without logs directly from a packet collect (preferrably from SEQ) from when the SoF eqgame.exe was being used (patched Sep 7th 2007), it is hard to know exactly what might be missing. That is why I am hoping getting it working for EQLive will help me work back to getting SoF working.

@ Derision - Thanks for the info So, any opcode that isn't added to the patch_ops.h will use the eq_packet_structs.h for their structure? I have tried adding a few new opcodes to the anniversary_ops.h and it requires me to put structs into the eq_packet_structs.h for it to compile. If it is supposed to be using the anniversary_structs.h, then why does it require to have a struct in eq_packet_structs.h as well?

The main thing I am trying to figure out is how to know which packets are encoded/decoded. Is it only the ones that are put in the patch_ops.h and set to be encoded/decoded, or are all packets automatically encoded/decoded by default? The only raw packets I see from live are the acks and some of the sessions and network status stuff, everything else is encoded and some is also combined.

I am also trying to understand why anniversary.cpp seems to be telling the server how to handle the opcode packets, but we also have client_packet.cpp, which has handling instructions for each opcode as well. It seems that anything I add to anniversary_ops.h and anniversary.cpp also has to be added to client_packet.cpp. I am not really too clear on what is going on with that just yet. It seems like there is redundancy in some of this stuff and it makes it more complex for me, heh.

I verified most of the opcodes I need to get logged into the emu with an EQLive client last night. I just have to fill in a couple more and then adjust a couple of structures slightly and I should be able to at least get to the same point I am at trying to get in with SoF. I was able to get almost all of the player profile for EQLive mapped out just by looking at the SEQ hex output. I still have a bit more to do to finish that struct 100%, but it should be pretty accurate when I am done with it, at least for Live. But, Live and SoF have very similar structs. They are much closer than Titanium and SoF are.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
Reply


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 06:02 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