PDA

View Full Version : EQ Patch 5-22-08



uRit1u2CBBA=
05-22-2008, 07:37 PM
Looks like some opcodes got moved around. I get zone and GPS, but no spawns.

I wish I had the time to figure out how to do those :)

ieatacid
05-22-2008, 08:56 PM
I think it's mostly the spawn struct (opcodes are unchanged as far as I can tell). It's now variable in length and may take some time to figure out how the client is unpacking it.

Fatal
06-02-2008, 04:28 PM
Any word on the damage?

Razzle
06-02-2008, 07:52 PM
I have started looking at what they changed. Looks like they added a new opcode for the initial send of the zone spawns. Basically splitting up the old spawn info. I might actually start working on writing some code, if my wife doesn't have like 12 more projects for me this weekend. I really hate summer sometimes.

Razzle

ieatacid
06-03-2008, 03:19 PM
I have the spawnStruct mostly done, I just need to figure out a few bit fields. The name strings (name, surname, title, etc) are variable length now (zero-terminated, length of the name) and I'm still not sure how to handle that.

Razzle
06-03-2008, 03:46 PM
I was looking at how to handle variable lenghts. In everquest.h, the struct specialMessageStruct, has what appears to be two sections of message text, that may be variable lengths. I am not sure if that is what it is doing, with them sepearated by a uint32_t.

I was going to play with the structure formating, to see if it already handles it. Looking at NetStream::readText in netstream.h, it looks like it will go through the stream searching for a null terminated text stream, if you set the length to 0, as listed like in the specialMessageStruct.

Razzle

ieatacid
06-03-2008, 05:56 PM
Here it is. The bitfield stuff at the top was a pain.


/*
** Generic Spawn Struct
** Length: Variable.
** Used in:
** dbSpawnStruct
** petStruct
** spawnShroudOther
** spawnShroudSelf
*/

struct spawnStruct
{
/*0000*/ char name[0];
/*0000*/ uint32_t spawnId;
/*0000*/ uint8_t level;
/*0000*/ float unknown1;
/*0000*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse
/*0000*/ signed buyer:1;
signed trader:1;
signed padding1:2;
signed targetcyclable:1;
signed targetable:1;
signed padding2:2;
signed betabuffed:1;
signed linkdead:1;
signed padding3:1;
signed gender:1; // Gender (0=male, 1=female)
signed padding4:1;
signed anon:1; // 0=normal, 1=anon, 2=roleplay
signed gm:1;
signed padding5:11;
signed invis:1;
signed padding6:1;
signed LFG:1;
signed sneak:1;
signed AFK:1;
signed padding7:1;
/*0000*/ uint8_t unknown2;
/*0000*/ uint32_t unknown3;
/*0000*/ uint32_t unknown4;
/*0000*/ uint32_t unknown5;
/*0000*/ uint8_t facestyle;
/*0000*/ float walkspeed;
/*0000*/ float runspeed;
/*0000*/ uint32_t race;
/*0000*/ uint8_t bodytype;
/*0000*/ uint32_t unknown6;
/*0000*/ uint8_t curHp;
/*0000*/ uint8_t haircolor;
/*0000*/ uint8_t facialhaircolor;
/*0000*/ uint8_t eyecolor1;
/*0000*/ uint8_t eyecolor2;
/*0000*/ uint8_t hairstyle;
/*0000*/ uint8_t facialhair;
/*0000*/ uint32_t heritage;
/*0000*/ uint32_t tattoo;
/*0000*/ uint32_t details;
/*0000*/ uint8_t holding;
/*0000*/ uint32_t deity;
/*0000*/ uint32_t guildID;
/*0000*/ uint32_t guildstatus; // 0=member, 1=officer, 2=leader, -1=not guilded
/*0000*/ uint8_t class_;
/*0000*/ uint8_t PVP;
/*0000*/ uint8_t state; // stand state
/*0000*/ uint8_t light;
/*0000*/ uint8_t unknown7;
/*0000*/ uint8_t unknown8;
/*0000*/ uint8_t unknown9;
/*0000*/ uint8_t unknown10;
/*0000*/ uint8_t unknown11;
/*0000*/ char lastName[0];
/*0000*/ uint32_t AARank;
/*0000*/ uint8_t unknown12;
/*0000*/ uint32_t petOwnerId;
/*0000*/ uint8_t unknown13;
/*0000*/ uint32_t unknown14;
/*0000*/ uint32_t unknown15;
/*0000*/ uint32_t unknown16;
/*0000*/ uint32_t unknown17;
/*0000*/ uint32_t unknown18;
/*0000*/ uint32_t unknown19;
/*0000*/ signed padding0000:12; // ***Placeholder
signed deltaX:13; // change in x
signed padding0005:7; // ***Placeholder
/*0000*/ signed deltaHeading:10;// change in heading
signed deltaY:13; // change in y
signed padding0006:9; // ***Placeholder
/*0000*/ signed y:19; // y coord
signed animation:13; // animation
/*0000*/ unsigned heading:12; // heading
signed x:19; // x coord
signed padding0014:1; // ***Placeholder
/*0000*/ signed z:19; // z coord
signed deltaZ:13; // change in z
/*0000*/ union
{
struct
{
/*0000*/ Color_Struct color_helmet; // Color of helmet item
/*0000*/ Color_Struct color_chest; // Color of chest item
/*0000*/ Color_Struct color_arms; // Color of arms item
/*0000*/ Color_Struct color_bracers; // Color of bracers item
/*0000*/ Color_Struct color_hands; // Color of hands item
/*0000*/ Color_Struct color_legs; // Color of legs item
/*0000*/ Color_Struct color_feet; // Color of feet item
/*0000*/ Color_Struct color_primary; // Color of primary item
/*0000*/ Color_Struct color_secondary; // Color of secondary item
} equipment_colors;
/*0000*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above
};
/*0000*/ union
{
struct
{
/*0000*/ EquipStruct equip_helmet; // Equiptment: Helmet visual
/*0000*/ EquipStruct equip_chest; // Equiptment: Chest visual
/*0000*/ EquipStruct equip_arms; // Equiptment: Arms visual
/*0000*/ EquipStruct equip_bracers; // Equiptment: Wrist visual
/*0000*/ EquipStruct equip_hands; // Equiptment: Hands visual
/*0000*/ EquipStruct equip_legs; // Equiptment: Legs visual
/*0000*/ EquipStruct equip_feet; // Equiptment: Boots visual
/*0000*/ EquipStruct equip_primary; // Equiptment: Main visual
/*0000*/ EquipStruct equip_secondary; // Equiptment: Off visual
} equip;
/*0000*/ EquipStruct equipment[9];
};
/*0000*/ char title[0];
/*0000*/ char suffix[0];
/*0000*/ char unknown20[32];
};

uRit1u2CBBA=
06-03-2008, 06:49 PM
Does any new code need to be changed to get it to work?

I replaced the existing structure definition with what you had above, and it didn't change anything.

Thanks :)

ieatacid
06-03-2008, 06:56 PM
Yeah, additional changes will be necessary to handle the variable size of struct.

Adept
06-03-2008, 09:21 PM
Nice work.

purple
06-04-2008, 06:27 AM
Look at how the guild info packet is handled. There are stream classes that are used to pull stuff off the wire when it is variable length. I made it handle bit streams when the new movement packets went in last fall.

ieatacid
06-04-2008, 03:39 PM
Nice, I never even noticed those :)

That should make life easier.