mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 01:11:29 +00:00
Update opcodes and packet structs for expeditions
Add and rename some opcodes Add packet translations for expeditions Fix OP_DzExpeditionEndsWarning opcode for RoF2 Add RoF2 OP_KickPlayers
This commit is contained in:
parent
51a74c23ef
commit
a77f8b582e
@ -136,20 +136,22 @@ N(OP_Dye),
|
|||||||
N(OP_DynamicWall),
|
N(OP_DynamicWall),
|
||||||
N(OP_DzAddPlayer),
|
N(OP_DzAddPlayer),
|
||||||
N(OP_DzChooseZone),
|
N(OP_DzChooseZone),
|
||||||
|
N(OP_DzChooseZoneReply),
|
||||||
N(OP_DzCompass),
|
N(OP_DzCompass),
|
||||||
N(OP_DzExpeditionEndsWarning),
|
N(OP_DzExpeditionEndsWarning),
|
||||||
N(OP_DzExpeditionInfo),
|
N(OP_DzExpeditionInfo),
|
||||||
N(OP_DzExpeditionList),
|
N(OP_DzExpeditionInvite),
|
||||||
N(OP_DzJoinExpeditionConfirm),
|
N(OP_DzExpeditionInviteResponse),
|
||||||
N(OP_DzJoinExpeditionReply),
|
N(OP_DzExpeditionLockoutTimers),
|
||||||
N(OP_DzLeaderStatus),
|
|
||||||
N(OP_DzListTimers),
|
N(OP_DzListTimers),
|
||||||
N(OP_DzMakeLeader),
|
N(OP_DzMakeLeader),
|
||||||
N(OP_DzMemberList),
|
N(OP_DzMemberList),
|
||||||
N(OP_DzMemberStatus),
|
N(OP_DzMemberListName),
|
||||||
|
N(OP_DzMemberListStatus),
|
||||||
N(OP_DzPlayerList),
|
N(OP_DzPlayerList),
|
||||||
N(OP_DzQuit),
|
N(OP_DzQuit),
|
||||||
N(OP_DzRemovePlayer),
|
N(OP_DzRemovePlayer),
|
||||||
|
N(OP_DzSetLeaderName),
|
||||||
N(OP_DzSwapPlayer),
|
N(OP_DzSwapPlayer),
|
||||||
N(OP_Emote),
|
N(OP_Emote),
|
||||||
N(OP_EndLootRequest),
|
N(OP_EndLootRequest),
|
||||||
@ -271,6 +273,7 @@ N(OP_ItemVerifyRequest),
|
|||||||
N(OP_ItemViewUnknown),
|
N(OP_ItemViewUnknown),
|
||||||
N(OP_Jump),
|
N(OP_Jump),
|
||||||
N(OP_KeyRing),
|
N(OP_KeyRing),
|
||||||
|
N(OP_KickPlayers),
|
||||||
N(OP_KnowledgeBase),
|
N(OP_KnowledgeBase),
|
||||||
N(OP_LDoNButton),
|
N(OP_LDoNButton),
|
||||||
N(OP_LDoNDisarmTraps),
|
N(OP_LDoNDisarmTraps),
|
||||||
|
|||||||
@ -4835,17 +4835,98 @@ struct BuffIcon_Struct
|
|||||||
BuffIconEntry_Struct entries[0];
|
BuffIconEntry_Struct entries[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct ExpeditionInvite_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 max_players;
|
/*000*/ uint32 client_id; // unique character id
|
||||||
/*004*/ char expedition_name[128];
|
/*004*/ uint32 unknown004; // added after titanium
|
||||||
/*132*/ char leader_name[64];
|
/*008*/ char inviter_name[64];
|
||||||
|
/*072*/ char expedition_name[128];
|
||||||
|
/*200*/ uint8 swapping; // 0: adding 1: swapping
|
||||||
|
/*201*/ char swap_name[64]; // if swapping, swap name being removed
|
||||||
|
/*265*/ uint8 padding[3];
|
||||||
|
/*268*/ uint16 dz_zone_id; // dz_id zone/instance pair, sent back in reply
|
||||||
|
/*270*/ uint16 dz_instance_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionJoinPrompt_Struct
|
struct ExpeditionInviteResponse_Struct
|
||||||
{
|
{
|
||||||
/*000*/ char player_name[64];
|
/*000*/ uint32 unknown000;
|
||||||
/*064*/ char expedition_name[64];
|
/*004*/ uint32 unknown004; // added after titanium
|
||||||
|
/*008*/ uint16 dz_zone_id; // dz_id pair sent in invite
|
||||||
|
/*010*/ uint16 dz_instance_id;
|
||||||
|
/*012*/ uint8 accepted; // 0: declined 1: accepted
|
||||||
|
/*013*/ uint8 swapping; // 0: adding 1: swapping (sent in invite)
|
||||||
|
/*014*/ char swap_name[64]; // swap name sent in invite
|
||||||
|
/*078*/ uint8 unknown078; // padding garbage?
|
||||||
|
/*079*/ uint8 unknown079; // padding garbage?
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionInfo_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004; // added after titanium
|
||||||
|
/*008*/ uint32 assigned; // padded bool, 0: not in expedition (clear data), 1: in expedition
|
||||||
|
/*012*/ uint32 max_players;
|
||||||
|
/*016*/ char expedition_name[128];
|
||||||
|
/*144*/ char leader_name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ char name[64]; // variable length, null terminated, max 0x40 (64)
|
||||||
|
/*064*/ uint8 status; // 0: unknown, 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberList_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberListName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||||
|
/*012*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimerEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ char expedition_name[128]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ uint32 seconds_remaining;
|
||||||
|
/*000*/ uint32 event_type; // seen -1 (0xffffffff) for replay timers and 1 for event timers
|
||||||
|
/*000*/ char event_name[256]; // variable length, null terminated, max 0x100 (256)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimers_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionSetLeaderName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char leader_name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommand_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommandSwap_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char add_player_name[64]; // swap to (player must confirm)
|
||||||
|
/*072*/ char rem_player_name[64]; // swap from
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionExpireWarning
|
struct ExpeditionExpireWarning
|
||||||
@ -4853,48 +4934,67 @@ struct ExpeditionExpireWarning
|
|||||||
/*008*/ uint32 minutes_remaining;
|
/*008*/ uint32 minutes_remaining;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompassEntry_Struct
|
struct DynamicZoneCompassEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 enabled; //guess
|
/*000*/ uint16 dz_zone_id; // target dz id pair
|
||||||
/*004*/ float y;
|
/*002*/ uint16 dz_instance_id;
|
||||||
/*008*/ float x;
|
/*004*/ uint32 dz_type; // 1: Expedition, 2: Tutorial (purple), 3: Task, 4: Mission, 5: Quest (green)
|
||||||
/*012*/ float z;
|
/*008*/ uint32 unknown008;
|
||||||
|
/*012*/ float y;
|
||||||
|
/*016*/ float x;
|
||||||
|
/*020*/ float z;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompass_Struct
|
struct DynamicZoneCompass_Struct
|
||||||
{
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
/*000*/ uint32 count;
|
/*000*/ uint32 count;
|
||||||
/*004*/ ExpeditionCompassEntry_Struct entries[0];
|
/*004*/ DynamicZoneCompassEntry_Struct entries[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberEntry_Struct
|
struct DynamicZoneChooseZoneEntry_Struct
|
||||||
{
|
{
|
||||||
char name[64];
|
/*000*/ uint16 dz_zone_id; // dz_id pair
|
||||||
char status;
|
/*002*/ uint16 dz_instance_id;
|
||||||
|
/*004*/ uint32 unknown_id1; // seen 28 00 00 00 (40), sent back in reply
|
||||||
|
/*008*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest -- sent back in reply
|
||||||
|
/*012*/ uint32 unknown_id2; // possibly an id based on dz type, for expeditions this was same as dz_id (zone|instance) but task dz was different
|
||||||
|
/*016*/ char description[128]; // variable length, null terminated
|
||||||
|
/*144*/ char leader_name[64]; // variable length, null terminated
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberList_Struct
|
struct DynamicZoneChooseZone_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 count;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ ExpeditionMemberEntry_Struct entries[0];
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ DynamicZoneChooseZoneEntry_Struct choices[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionLockoutEntry_Struct
|
struct DynamicZoneChooseZoneReply_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 time_left;
|
/*000*/ uint32 unknown000; // ff ff ff ff
|
||||||
/*004*/ char expedition[128];
|
/*004*/ uint32 unknown004; // seen 69 00 00 00
|
||||||
/*132*/ char expedition_event[128];
|
/*008*/ uint32 unknown008; // ff ff ff ff
|
||||||
|
/*012*/ uint32 unknown_id1; // from choose zone entry message
|
||||||
|
/*016*/ uint16 dz_zone_id; // dz_id pair
|
||||||
|
/*018*/ uint16 dz_instance_id;
|
||||||
|
/*020*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest
|
||||||
|
/*024*/ uint32 unknown_id2; // from choose zone entry message
|
||||||
|
/*028*/ uint32 unknown028; // 00 00 00 00
|
||||||
|
/*032*/ uint32 unknown032; // always same as unknown044
|
||||||
|
/*036*/ uint32 unknown036;
|
||||||
|
/*040*/ uint32 unknown040;
|
||||||
|
/*044*/ uint32 unknown044; // always same as unknown032
|
||||||
|
/*048*/ uint32 unknown048; // seen 01 00 00 00 and 02 00 00 00
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionLockoutList_Struct
|
struct KickPlayers_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 count;
|
/*000*/ char char_name[64];
|
||||||
/*004*/ ExpeditionLockoutEntry_Struct entries[0];
|
/*064*/ uint32 unknown064; // always 0
|
||||||
};
|
/*068*/ uint8 kick_expedition; // true if /kickplayers exp
|
||||||
|
/*069*/ uint8 kick_task; // true if /kickplayers task
|
||||||
struct ExpeditionLeaderSet_Struct
|
/*070*/ uint8 padding[2];
|
||||||
{
|
|
||||||
/*000*/ char leader_name[64];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CorpseDrag_Struct
|
struct CorpseDrag_Struct
|
||||||
|
|||||||
@ -710,15 +710,48 @@ namespace RoF
|
|||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzChooseZone)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(DynamicZoneChooseZone_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
|
|
||||||
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
|
{
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_zone_id);
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_instance_id);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id1);
|
||||||
|
buf.WriteUInt32(emu->choices[i].dz_type);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id2);
|
||||||
|
buf.WriteString(emu->choices[i].description);
|
||||||
|
buf.WriteString(emu->choices[i].leader_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
__packet->size = buf.size();
|
||||||
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzCompass)
|
ENCODE(OP_DzCompass)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionCompass_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneCompass_Struct);
|
||||||
ALLOC_VAR_ENCODE(structs::ExpeditionCompass_Struct, sizeof(structs::ExpeditionInfo_Struct) + sizeof(structs::ExpeditionCompassEntry_Struct) * emu->count);
|
ALLOC_VAR_ENCODE(structs::DynamicZoneCompass_Struct,
|
||||||
|
sizeof(structs::DynamicZoneCompass_Struct) +
|
||||||
|
sizeof(structs::DynamicZoneCompassEntry_Struct) * emu->count
|
||||||
|
);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
OUT(count);
|
OUT(count);
|
||||||
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
|
OUT(entries[i].dz_zone_id);
|
||||||
|
OUT(entries[i].dz_instance_id);
|
||||||
|
OUT(entries[i].dz_type);
|
||||||
OUT(entries[i].x);
|
OUT(entries[i].x);
|
||||||
OUT(entries[i].y);
|
OUT(entries[i].y);
|
||||||
OUT(entries[i].z);
|
OUT(entries[i].z);
|
||||||
@ -742,81 +775,60 @@ namespace RoF
|
|||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
eq->unknown004 = 785316192;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
eq->unknown008 = 435601;
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
strncpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
|
||||||
strncpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzExpeditionList)
|
ENCODE(OP_DzExpeditionInvite)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionLockoutList_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInvite_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionInvite_Struct, structs::ExpeditionInvite_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
OUT(client_id);
|
||||||
uint32 client_id = 0;
|
strn0cpy(eq->inviter_name, emu->inviter_name, sizeof(eq->inviter_name));
|
||||||
uint8 null_term = 0;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
OUT(swapping);
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
strn0cpy(eq->swap_name, emu->swap_name, sizeof(eq->swap_name));
|
||||||
|
OUT(dz_zone_id);
|
||||||
|
OUT(dz_instance_id);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzExpeditionLockoutTimers)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(ExpeditionLockoutTimers_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].expedition, strlen(emu->entries[i].expedition));
|
buf.WriteString(emu->timers[i].expedition_name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt32(emu->timers[i].seconds_remaining);
|
||||||
ss.write((const char*)&emu->entries[i].time_left, sizeof(uint32));
|
buf.WriteUInt32(emu->timers[i].event_type);
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
buf.WriteString(emu->timers[i].event_name);
|
||||||
ss.write(emu->entries[i].expedition_event, strlen(emu->entries[i].expedition_event));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzJoinExpeditionConfirm)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionJoinPrompt_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionJoinPrompt_Struct, structs::ExpeditionJoinPrompt_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
||||||
|
|
||||||
strncpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
OUT(client_id);
|
||||||
strncpy(eq->player_name, emu->player_name, sizeof(eq->player_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
|
||||||
}
|
|
||||||
|
|
||||||
ENCODE(OP_DzLeaderStatus)
|
|
||||||
{
|
|
||||||
SETUP_VAR_ENCODE(ExpeditionLeaderSet_Struct);
|
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
|
||||||
uint32 client_id = 0;
|
|
||||||
uint8 null_term = 0;
|
|
||||||
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write(emu->leader_name, strlen(emu->leader_name));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//0xffffffff
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//1
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
@ -825,26 +837,43 @@ namespace RoF
|
|||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
uint32 client_id = 0;
|
buf.WriteUInt32(emu->count);
|
||||||
uint8 null_term = 0;
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].name, strlen(emu->entries[i].name));
|
buf.WriteString(emu->members[i].name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt8(emu->members[i].status);
|
||||||
ss.write((const char*)&emu->entries[i].status, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListName)
|
||||||
|
{
|
||||||
|
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(add_name);
|
||||||
|
strn0cpy(eq->name, emu->name, sizeof(eq->name));
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListStatus)
|
||||||
|
{
|
||||||
|
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
||||||
|
if (emu->count == 1)
|
||||||
|
{
|
||||||
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ENCODE(OP_Emote)
|
ENCODE(OP_Emote)
|
||||||
{
|
{
|
||||||
EQApplicationPacket *in = *p;
|
EQApplicationPacket *in = *p;
|
||||||
@ -4388,6 +4417,84 @@ namespace RoF
|
|||||||
FINISH_DIRECT_DECODE();
|
FINISH_DIRECT_DECODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzAddPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzChooseZoneReply)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(DynamicZoneChooseZoneReply_Struct, structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
|
||||||
|
IN(unknown000);
|
||||||
|
IN(unknown004);
|
||||||
|
IN(unknown008);
|
||||||
|
IN(unknown_id1);
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(dz_type);
|
||||||
|
IN(unknown_id2);
|
||||||
|
IN(unknown028);
|
||||||
|
IN(unknown032);
|
||||||
|
IN(unknown036);
|
||||||
|
IN(unknown040);
|
||||||
|
IN(unknown044);
|
||||||
|
IN(unknown048);
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzExpeditionInviteResponse)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionInviteResponse_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionInviteResponse_Struct, structs::ExpeditionInviteResponse_Struct);
|
||||||
|
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(accepted);
|
||||||
|
IN(swapping);
|
||||||
|
strn0cpy(emu->swap_name, eq->swap_name, sizeof(emu->swap_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzMakeLeader)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzRemovePlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzSwapPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommandSwap_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommandSwap_Struct, structs::ExpeditionCommandSwap_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->add_player_name, eq->add_player_name, sizeof(emu->add_player_name));
|
||||||
|
strn0cpy(emu->rem_player_name, eq->rem_player_name, sizeof(emu->rem_player_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
DECODE(OP_Emote)
|
DECODE(OP_Emote)
|
||||||
{
|
{
|
||||||
unsigned char *__eq_buffer = __packet->pBuffer;
|
unsigned char *__eq_buffer = __packet->pBuffer;
|
||||||
|
|||||||
@ -759,15 +759,48 @@ namespace RoF2
|
|||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzChooseZone)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(DynamicZoneChooseZone_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
|
|
||||||
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
|
{
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_zone_id);
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_instance_id);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id1);
|
||||||
|
buf.WriteUInt32(emu->choices[i].dz_type);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id2);
|
||||||
|
buf.WriteString(emu->choices[i].description);
|
||||||
|
buf.WriteString(emu->choices[i].leader_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
__packet->size = buf.size();
|
||||||
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzCompass)
|
ENCODE(OP_DzCompass)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionCompass_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneCompass_Struct);
|
||||||
ALLOC_VAR_ENCODE(structs::ExpeditionCompass_Struct, sizeof(structs::ExpeditionInfo_Struct) + sizeof(structs::ExpeditionCompassEntry_Struct) * emu->count);
|
ALLOC_VAR_ENCODE(structs::DynamicZoneCompass_Struct,
|
||||||
|
sizeof(structs::DynamicZoneCompass_Struct) +
|
||||||
|
sizeof(structs::DynamicZoneCompassEntry_Struct) * emu->count
|
||||||
|
);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
OUT(count);
|
OUT(count);
|
||||||
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
|
OUT(entries[i].dz_zone_id);
|
||||||
|
OUT(entries[i].dz_instance_id);
|
||||||
|
OUT(entries[i].dz_type);
|
||||||
OUT(entries[i].x);
|
OUT(entries[i].x);
|
||||||
OUT(entries[i].y);
|
OUT(entries[i].y);
|
||||||
OUT(entries[i].z);
|
OUT(entries[i].z);
|
||||||
@ -791,81 +824,60 @@ namespace RoF2
|
|||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
eq->unknown004 = 785316192;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
eq->unknown008 = 435601;
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
strncpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
|
||||||
strncpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzExpeditionList)
|
ENCODE(OP_DzExpeditionInvite)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionLockoutList_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInvite_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionInvite_Struct, structs::ExpeditionInvite_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
OUT(client_id);
|
||||||
uint32 client_id = 0;
|
strn0cpy(eq->inviter_name, emu->inviter_name, sizeof(eq->inviter_name));
|
||||||
uint8 null_term = 0;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
OUT(swapping);
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
strn0cpy(eq->swap_name, emu->swap_name, sizeof(eq->swap_name));
|
||||||
|
OUT(dz_zone_id);
|
||||||
|
OUT(dz_instance_id);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzExpeditionLockoutTimers)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(ExpeditionLockoutTimers_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].expedition, strlen(emu->entries[i].expedition));
|
buf.WriteString(emu->timers[i].expedition_name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt32(emu->timers[i].seconds_remaining);
|
||||||
ss.write((const char*)&emu->entries[i].time_left, sizeof(uint32));
|
buf.WriteUInt32(emu->timers[i].event_type);
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
buf.WriteString(emu->timers[i].event_name);
|
||||||
ss.write(emu->entries[i].expedition_event, strlen(emu->entries[i].expedition_event));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzJoinExpeditionConfirm)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionJoinPrompt_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionJoinPrompt_Struct, structs::ExpeditionJoinPrompt_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
||||||
|
|
||||||
strncpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
OUT(client_id);
|
||||||
strncpy(eq->player_name, emu->player_name, sizeof(eq->player_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
|
||||||
}
|
|
||||||
|
|
||||||
ENCODE(OP_DzLeaderStatus)
|
|
||||||
{
|
|
||||||
SETUP_VAR_ENCODE(ExpeditionLeaderSet_Struct);
|
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
|
||||||
uint32 client_id = 0;
|
|
||||||
uint8 null_term = 0;
|
|
||||||
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write(emu->leader_name, strlen(emu->leader_name));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//0xffffffff
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//1
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
@ -874,26 +886,43 @@ namespace RoF2
|
|||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
uint32 client_id = 0;
|
buf.WriteUInt32(emu->count);
|
||||||
uint8 null_term = 0;
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].name, strlen(emu->entries[i].name));
|
buf.WriteString(emu->members[i].name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt8(emu->members[i].status);
|
||||||
ss.write((const char*)&emu->entries[i].status, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListName)
|
||||||
|
{
|
||||||
|
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(add_name);
|
||||||
|
strn0cpy(eq->name, emu->name, sizeof(eq->name));
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListStatus)
|
||||||
|
{
|
||||||
|
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
||||||
|
if (emu->count == 1)
|
||||||
|
{
|
||||||
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ENCODE(OP_Emote)
|
ENCODE(OP_Emote)
|
||||||
{
|
{
|
||||||
EQApplicationPacket *in = *p;
|
EQApplicationPacket *in = *p;
|
||||||
@ -4585,6 +4614,84 @@ namespace RoF2
|
|||||||
FINISH_DIRECT_DECODE();
|
FINISH_DIRECT_DECODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzAddPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzChooseZoneReply)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(DynamicZoneChooseZoneReply_Struct, structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
|
||||||
|
IN(unknown000);
|
||||||
|
IN(unknown004);
|
||||||
|
IN(unknown008);
|
||||||
|
IN(unknown_id1);
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(dz_type);
|
||||||
|
IN(unknown_id2);
|
||||||
|
IN(unknown028);
|
||||||
|
IN(unknown032);
|
||||||
|
IN(unknown036);
|
||||||
|
IN(unknown040);
|
||||||
|
IN(unknown044);
|
||||||
|
IN(unknown048);
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzExpeditionInviteResponse)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionInviteResponse_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionInviteResponse_Struct, structs::ExpeditionInviteResponse_Struct);
|
||||||
|
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(accepted);
|
||||||
|
IN(swapping);
|
||||||
|
strn0cpy(emu->swap_name, eq->swap_name, sizeof(emu->swap_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzMakeLeader)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzRemovePlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzSwapPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommandSwap_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommandSwap_Struct, structs::ExpeditionCommandSwap_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->add_player_name, eq->add_player_name, sizeof(emu->add_player_name));
|
||||||
|
strn0cpy(emu->rem_player_name, eq->rem_player_name, sizeof(emu->rem_player_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
DECODE(OP_Emote)
|
DECODE(OP_Emote)
|
||||||
{
|
{
|
||||||
unsigned char *__eq_buffer = __packet->pBuffer;
|
unsigned char *__eq_buffer = __packet->pBuffer;
|
||||||
|
|||||||
@ -58,13 +58,16 @@ E(OP_DeleteCharge)
|
|||||||
E(OP_DeleteItem)
|
E(OP_DeleteItem)
|
||||||
E(OP_DeleteSpawn)
|
E(OP_DeleteSpawn)
|
||||||
E(OP_DisciplineUpdate)
|
E(OP_DisciplineUpdate)
|
||||||
|
E(OP_DzChooseZone)
|
||||||
E(OP_DzCompass)
|
E(OP_DzCompass)
|
||||||
E(OP_DzExpeditionEndsWarning)
|
E(OP_DzExpeditionEndsWarning)
|
||||||
E(OP_DzExpeditionInfo)
|
E(OP_DzExpeditionInfo)
|
||||||
E(OP_DzExpeditionList)
|
E(OP_DzExpeditionInvite)
|
||||||
E(OP_DzJoinExpeditionConfirm)
|
E(OP_DzExpeditionLockoutTimers)
|
||||||
E(OP_DzLeaderStatus)
|
|
||||||
E(OP_DzMemberList)
|
E(OP_DzMemberList)
|
||||||
|
E(OP_DzMemberListName)
|
||||||
|
E(OP_DzMemberListStatus)
|
||||||
|
E(OP_DzSetLeaderName)
|
||||||
E(OP_Emote)
|
E(OP_Emote)
|
||||||
E(OP_ExpansionInfo)
|
E(OP_ExpansionInfo)
|
||||||
E(OP_FormattedMessage)
|
E(OP_FormattedMessage)
|
||||||
@ -159,6 +162,12 @@ D(OP_ConsiderCorpse)
|
|||||||
D(OP_Consume)
|
D(OP_Consume)
|
||||||
D(OP_Damage)
|
D(OP_Damage)
|
||||||
D(OP_DeleteItem)
|
D(OP_DeleteItem)
|
||||||
|
D(OP_DzAddPlayer)
|
||||||
|
D(OP_DzChooseZoneReply)
|
||||||
|
D(OP_DzExpeditionInviteResponse)
|
||||||
|
D(OP_DzMakeLeader)
|
||||||
|
D(OP_DzRemovePlayer)
|
||||||
|
D(OP_DzSwapPlayer)
|
||||||
D(OP_Emote)
|
D(OP_Emote)
|
||||||
D(OP_EnvDamage)
|
D(OP_EnvDamage)
|
||||||
D(OP_FaceChange)
|
D(OP_FaceChange)
|
||||||
|
|||||||
@ -4882,52 +4882,169 @@ struct VeteranClaim
|
|||||||
/*076*/ uint32 action;
|
/*076*/ uint32 action;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionEntryHeader_Struct
|
struct ExpeditionInvite_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id; // unique character id
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char inviter_name[64];
|
||||||
|
/*072*/ char expedition_name[128];
|
||||||
|
/*200*/ uint8 swapping; // 0: adding 1: swapping
|
||||||
|
/*201*/ char swap_name[64]; // if swapping, swap name being removed
|
||||||
|
/*265*/ uint8 padding[3];
|
||||||
|
/*268*/ uint16 dz_zone_id; // dz_id zone/instance pair, sent back in reply
|
||||||
|
/*270*/ uint16 dz_instance_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionInviteResponse_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 unknown000;
|
/*000*/ uint32 unknown000;
|
||||||
/*000*/ uint32 number_of_entries;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ExpeditionJoinPrompt_Struct
|
|
||||||
{
|
|
||||||
/*000*/ uint32 clientid;
|
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ char player_name[64];
|
/*008*/ uint16 dz_zone_id; // dz_id pair sent in invite
|
||||||
/*072*/ char expedition_name[64];
|
/*010*/ uint16 dz_instance_id;
|
||||||
};
|
/*012*/ uint8 accepted; // 0: declined 1: accepted
|
||||||
|
/*013*/ uint8 swapping; // 0: adding 1: swapping (sent in invite)
|
||||||
struct ExpeditionExpireWarning
|
/*014*/ char swap_name[64]; // swap name sent in invite
|
||||||
{
|
/*078*/ uint8 unknown078; // padding garbage?
|
||||||
/*000*/ uint32 clientid;
|
/*079*/ uint8 unknown079; // padding garbage?
|
||||||
/*004*/ uint32 unknown004;
|
|
||||||
/*008*/ uint32 minutes_remaining;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct ExpeditionInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ uint32 unknown008;
|
/*008*/ uint32 assigned; // padded bool, 0: not in expedition (clear data), 1: in expedition
|
||||||
/*012*/ uint32 max_players;
|
/*012*/ uint32 max_players;
|
||||||
/*016*/ char expedition_name[128];
|
/*016*/ char expedition_name[128];
|
||||||
/*142*/ char leader_name[64];
|
/*144*/ char leader_name[64];
|
||||||
|
//*208*/ uint32 unknown208; // live sends 01 00 00 00 here but client doesn't read it
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompassEntry_Struct
|
struct ExpeditionMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ float unknown000; //seen *((uint32*)) = 1584791871
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*004*/ uint32 enabled; //guess
|
/*000*/ uint8 status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
/*008*/ uint32 unknown008; //seen 1019
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberList_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count; // number of players in window
|
||||||
|
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberListName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||||
|
/*012*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimerEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ char expedition_name[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ uint32 seconds_remaining;
|
||||||
|
/*000*/ uint32 event_type; // seen -1 (0xffffffff) for replay timers and 1 for event timers
|
||||||
|
/*000*/ char event_name[1]; // variable length, null terminated, max 0x100 (256)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimers_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionSetLeaderName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char leader_name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommand_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommandSwap_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char add_player_name[64]; // swap to (player must confirm)
|
||||||
|
/*072*/ char rem_player_name[64]; // swap from
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionExpireWarning
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ uint32 minutes_remaining;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneCompassEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint16 dz_zone_id; // target dz id pair
|
||||||
|
/*002*/ uint16 dz_instance_id;
|
||||||
|
/*004*/ uint32 dz_type; // 1: Expedition, 2: Tutorial (purple), 3: Task, 4: Mission, 5: Quest (green)
|
||||||
|
/*008*/ uint32 unknown008;
|
||||||
/*012*/ float y;
|
/*012*/ float y;
|
||||||
/*016*/ float x;
|
/*016*/ float x;
|
||||||
/*020*/ float z;
|
/*020*/ float z;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompass_Struct
|
struct DynamicZoneCompass_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 count;
|
/*004*/ uint32 count;
|
||||||
/*008*/ ExpeditionCompassEntry_Struct entries[0];
|
/*008*/ DynamicZoneCompassEntry_Struct entries[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZoneEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint16 dz_zone_id; // dz_id pair
|
||||||
|
/*002*/ uint16 dz_instance_id;
|
||||||
|
/*004*/ uint32 unknown_id1; // seen 28 00 00 00 (40), sent back in reply
|
||||||
|
/*008*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest -- sent back in reply
|
||||||
|
/*012*/ uint32 unknown_id2; // possibly an id based on dz type, for expeditions this was same as dz_id (zone|instance) but task dz was different
|
||||||
|
/*016*/ char description[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ char leader_name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZone_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ DynamicZoneChooseZoneEntry_Struct choices[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZoneReply_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000; // ff ff ff ff
|
||||||
|
/*004*/ uint32 unknown004; // seen 69 00 00 00
|
||||||
|
/*008*/ uint32 unknown008; // ff ff ff ff
|
||||||
|
/*012*/ uint32 unknown_id1; // from choose zone entry message
|
||||||
|
/*016*/ uint16 dz_zone_id; // dz_id pair
|
||||||
|
/*018*/ uint16 dz_instance_id;
|
||||||
|
/*020*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest
|
||||||
|
/*024*/ uint32 unknown_id2; // from choose zone entry message
|
||||||
|
/*028*/ uint32 unknown028; // 00 00 00 00
|
||||||
|
/*032*/ uint32 unknown032; // always same as unknown044
|
||||||
|
/*036*/ uint32 unknown036;
|
||||||
|
/*040*/ uint32 unknown040;
|
||||||
|
/*044*/ uint32 unknown044; // always same as unknown032
|
||||||
|
/*048*/ uint32 unknown048; // seen 01 00 00 00 and 02 00 00 00
|
||||||
|
};
|
||||||
|
|
||||||
|
struct KickPlayers_Struct
|
||||||
|
{
|
||||||
|
/*000*/ char char_name[64];
|
||||||
|
/*064*/ uint32 unknown064; // always 0
|
||||||
|
/*068*/ uint8 kick_expedition; // true if /kickplayers exp
|
||||||
|
/*069*/ uint8 kick_task; // true if /kickplayers task
|
||||||
|
/*070*/ uint8 padding[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MaxCharacters_Struct
|
struct MaxCharacters_Struct
|
||||||
|
|||||||
@ -44,13 +44,16 @@ E(OP_DeleteCharge)
|
|||||||
E(OP_DeleteItem)
|
E(OP_DeleteItem)
|
||||||
E(OP_DeleteSpawn)
|
E(OP_DeleteSpawn)
|
||||||
E(OP_DisciplineUpdate)
|
E(OP_DisciplineUpdate)
|
||||||
|
E(OP_DzChooseZone)
|
||||||
E(OP_DzCompass)
|
E(OP_DzCompass)
|
||||||
E(OP_DzExpeditionEndsWarning)
|
E(OP_DzExpeditionEndsWarning)
|
||||||
E(OP_DzExpeditionInfo)
|
E(OP_DzExpeditionInfo)
|
||||||
E(OP_DzExpeditionList)
|
E(OP_DzExpeditionInvite)
|
||||||
E(OP_DzJoinExpeditionConfirm)
|
E(OP_DzExpeditionLockoutTimers)
|
||||||
E(OP_DzLeaderStatus)
|
|
||||||
E(OP_DzMemberList)
|
E(OP_DzMemberList)
|
||||||
|
E(OP_DzMemberListName)
|
||||||
|
E(OP_DzMemberListStatus)
|
||||||
|
E(OP_DzSetLeaderName)
|
||||||
E(OP_Emote)
|
E(OP_Emote)
|
||||||
E(OP_ExpansionInfo)
|
E(OP_ExpansionInfo)
|
||||||
E(OP_FormattedMessage)
|
E(OP_FormattedMessage)
|
||||||
@ -145,6 +148,12 @@ D(OP_ConsiderCorpse)
|
|||||||
D(OP_Consume)
|
D(OP_Consume)
|
||||||
D(OP_Damage)
|
D(OP_Damage)
|
||||||
D(OP_DeleteItem)
|
D(OP_DeleteItem)
|
||||||
|
D(OP_DzAddPlayer)
|
||||||
|
D(OP_DzChooseZoneReply)
|
||||||
|
D(OP_DzExpeditionInviteResponse)
|
||||||
|
D(OP_DzMakeLeader)
|
||||||
|
D(OP_DzRemovePlayer)
|
||||||
|
D(OP_DzSwapPlayer)
|
||||||
D(OP_Emote)
|
D(OP_Emote)
|
||||||
D(OP_EnvDamage)
|
D(OP_EnvDamage)
|
||||||
D(OP_FaceChange)
|
D(OP_FaceChange)
|
||||||
|
|||||||
@ -4815,52 +4815,159 @@ struct VeteranClaim
|
|||||||
/*076*/ uint32 action;
|
/*076*/ uint32 action;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionEntryHeader_Struct
|
struct ExpeditionInvite_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id; // unique character id
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char inviter_name[64];
|
||||||
|
/*072*/ char expedition_name[128];
|
||||||
|
/*200*/ uint8 swapping; // 0: adding 1: swapping
|
||||||
|
/*201*/ char swap_name[64]; // if swapping, swap name being removed
|
||||||
|
/*265*/ uint8 padding[3];
|
||||||
|
/*268*/ uint16 dz_zone_id; // dz_id zone/instance pair, sent back in reply
|
||||||
|
/*270*/ uint16 dz_instance_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionInviteResponse_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 unknown000;
|
/*000*/ uint32 unknown000;
|
||||||
/*000*/ uint32 number_of_entries;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ExpeditionJoinPrompt_Struct
|
|
||||||
{
|
|
||||||
/*000*/ uint32 clientid;
|
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ char player_name[64];
|
/*008*/ uint16 dz_zone_id; // dz_id pair sent in invite
|
||||||
/*072*/ char expedition_name[64];
|
/*010*/ uint16 dz_instance_id;
|
||||||
};
|
/*012*/ uint8 accepted; // 0: declined 1: accepted
|
||||||
|
/*013*/ uint8 swapping; // 0: adding 1: swapping (sent in invite)
|
||||||
struct ExpeditionExpireWarning
|
/*014*/ char swap_name[64]; // swap name sent in invite
|
||||||
{
|
/*078*/ uint8 unknown078; // padding garbage?
|
||||||
/*000*/ uint32 clientid;
|
/*079*/ uint8 unknown079; // padding garbage?
|
||||||
/*004*/ uint32 unknown004;
|
|
||||||
/*008*/ uint32 minutes_remaining;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct ExpeditionInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ uint32 unknown008;
|
/*008*/ uint32 assigned; // padded bool
|
||||||
/*012*/ uint32 max_players;
|
/*012*/ uint32 max_players;
|
||||||
/*016*/ char expedition_name[128];
|
/*016*/ char expedition_name[128];
|
||||||
/*142*/ char leader_name[64];
|
/*144*/ char leader_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompassEntry_Struct
|
struct ExpeditionMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ float unknown000; //seen *((uint32*)) = 1584791871
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*004*/ uint32 enabled; //guess
|
/*000*/ uint8 status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
/*008*/ uint32 unknown008; //seen 1019
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberList_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count; // number of players in window
|
||||||
|
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberListName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||||
|
/*012*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimerEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ char expedition_name[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ uint32 seconds_remaining;
|
||||||
|
/*000*/ uint32 event_type; // seen -1 (0xffffffff) for replay timers and 1 for event timers
|
||||||
|
/*000*/ char event_name[1]; // variable length, null terminated, max 0x100 (256)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimers_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionSetLeaderName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char leader_name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommand_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommandSwap_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char add_player_name[64]; // swap to (player must confirm)
|
||||||
|
/*072*/ char rem_player_name[64]; // swap from
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionExpireWarning
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ uint32 minutes_remaining;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneCompassEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint16 dz_zone_id; // target dz id pair
|
||||||
|
/*002*/ uint16 dz_instance_id;
|
||||||
|
/*004*/ uint32 dz_type; // 1: Expedition, 2: Tutorial (purple), 3: Task, 4: Mission, 5: Quest (green)
|
||||||
|
/*008*/ uint32 unknown008;
|
||||||
/*012*/ float y;
|
/*012*/ float y;
|
||||||
/*016*/ float x;
|
/*016*/ float x;
|
||||||
/*020*/ float z;
|
/*020*/ float z;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompass_Struct
|
struct DynamicZoneCompass_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 count;
|
/*004*/ uint32 count;
|
||||||
/*008*/ ExpeditionCompassEntry_Struct entries[0];
|
/*008*/ DynamicZoneCompassEntry_Struct entries[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZoneEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint16 dz_zone_id; // dz_id pair
|
||||||
|
/*002*/ uint16 dz_instance_id;
|
||||||
|
/*004*/ uint32 unknown_id1; // sent back in reply
|
||||||
|
/*008*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest -- sent back in reply
|
||||||
|
/*012*/ uint32 unknown_id2; // possibly an id based on dz type, for expeditions this was same as dz_id (zone|instance) but task dz was different
|
||||||
|
/*016*/ char description[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ char leader_name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZone_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ DynamicZoneChooseZoneEntry_Struct choices[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZoneReply_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000; // ff ff ff ff
|
||||||
|
/*004*/ uint32 unknown004; // seen 69 00 00 00
|
||||||
|
/*008*/ uint32 unknown008; // ff ff ff ff
|
||||||
|
/*012*/ uint32 unknown_id1; // from choose zone entry message
|
||||||
|
/*016*/ uint16 dz_zone_id; // dz_id pair
|
||||||
|
/*018*/ uint16 dz_instance_id;
|
||||||
|
/*020*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest
|
||||||
|
/*024*/ uint32 unknown_id2; // from choose zone entry message
|
||||||
|
/*028*/ uint32 unknown028; // 00 00 00 00
|
||||||
|
/*032*/ uint32 unknown032; // always same as unknown044
|
||||||
|
/*036*/ uint32 unknown036;
|
||||||
|
/*040*/ uint32 unknown040;
|
||||||
|
/*044*/ uint32 unknown044; // always same as unknown032
|
||||||
|
/*048*/ uint32 unknown048; // seen 01 00 00 00 and 02 00 00 00
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MaxCharacters_Struct
|
struct MaxCharacters_Struct
|
||||||
|
|||||||
@ -483,15 +483,48 @@ namespace SoD
|
|||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzChooseZone)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(DynamicZoneChooseZone_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
|
|
||||||
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
|
{
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_zone_id);
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_instance_id);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id1);
|
||||||
|
buf.WriteUInt32(emu->choices[i].dz_type);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id2);
|
||||||
|
buf.WriteString(emu->choices[i].description);
|
||||||
|
buf.WriteString(emu->choices[i].leader_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
__packet->size = buf.size();
|
||||||
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzCompass)
|
ENCODE(OP_DzCompass)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionCompass_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneCompass_Struct);
|
||||||
ALLOC_VAR_ENCODE(structs::ExpeditionCompass_Struct, sizeof(structs::ExpeditionInfo_Struct) + sizeof(structs::ExpeditionCompassEntry_Struct) * emu->count);
|
ALLOC_VAR_ENCODE(structs::DynamicZoneCompass_Struct,
|
||||||
|
sizeof(structs::DynamicZoneCompass_Struct) +
|
||||||
|
sizeof(structs::DynamicZoneCompassEntry_Struct) * emu->count
|
||||||
|
);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
OUT(count);
|
OUT(count);
|
||||||
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
|
OUT(entries[i].dz_zone_id);
|
||||||
|
OUT(entries[i].dz_instance_id);
|
||||||
|
OUT(entries[i].dz_type);
|
||||||
OUT(entries[i].x);
|
OUT(entries[i].x);
|
||||||
OUT(entries[i].y);
|
OUT(entries[i].y);
|
||||||
OUT(entries[i].z);
|
OUT(entries[i].z);
|
||||||
@ -515,81 +548,60 @@ namespace SoD
|
|||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
eq->unknown004 = 785316192;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
eq->unknown008 = 435601;
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
strcpy(eq->expedition_name, emu->expedition_name);
|
|
||||||
strcpy(eq->leader_name, emu->leader_name);
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzExpeditionList)
|
ENCODE(OP_DzExpeditionInvite)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionLockoutList_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInvite_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionInvite_Struct, structs::ExpeditionInvite_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
OUT(client_id);
|
||||||
uint32 client_id = 0;
|
strn0cpy(eq->inviter_name, emu->inviter_name, sizeof(eq->inviter_name));
|
||||||
uint8 null_term = 0;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
OUT(swapping);
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
strn0cpy(eq->swap_name, emu->swap_name, sizeof(eq->swap_name));
|
||||||
|
OUT(dz_zone_id);
|
||||||
|
OUT(dz_instance_id);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzExpeditionLockoutTimers)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(ExpeditionLockoutTimers_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].expedition, strlen(emu->entries[i].expedition));
|
buf.WriteString(emu->timers[i].expedition_name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt32(emu->timers[i].seconds_remaining);
|
||||||
ss.write((const char*)&emu->entries[i].time_left, sizeof(uint32));
|
buf.WriteUInt32(emu->timers[i].event_type);
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
buf.WriteString(emu->timers[i].event_name);
|
||||||
ss.write(emu->entries[i].expedition_event, strlen(emu->entries[i].expedition_event));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzJoinExpeditionConfirm)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionJoinPrompt_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionJoinPrompt_Struct, structs::ExpeditionJoinPrompt_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
||||||
|
|
||||||
strcpy(eq->expedition_name, emu->expedition_name);
|
OUT(client_id);
|
||||||
strcpy(eq->player_name, emu->player_name);
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
|
||||||
}
|
|
||||||
|
|
||||||
ENCODE(OP_DzLeaderStatus)
|
|
||||||
{
|
|
||||||
SETUP_VAR_ENCODE(ExpeditionLeaderSet_Struct);
|
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
|
||||||
uint32 client_id = 0;
|
|
||||||
uint8 null_term = 0;
|
|
||||||
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write(emu->leader_name, strlen(emu->leader_name));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//0xffffffff
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//1
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
@ -598,26 +610,44 @@ namespace SoD
|
|||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
uint32 client_id = 0;
|
buf.WriteUInt32(emu->count);
|
||||||
uint8 null_term = 0;
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].name, strlen(emu->entries[i].name));
|
buf.WriteString(emu->members[i].name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt8(emu->members[i].status);
|
||||||
ss.write((const char*)&emu->entries[i].status, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListName)
|
||||||
|
{
|
||||||
|
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(add_name);
|
||||||
|
strn0cpy(eq->name, emu->name, sizeof(eq->name));
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListStatus)
|
||||||
|
{
|
||||||
|
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
||||||
|
if (emu->count == 1)
|
||||||
|
{
|
||||||
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ENCODE(OP_Emote)
|
ENCODE(OP_Emote)
|
||||||
{
|
{
|
||||||
EQApplicationPacket *in = *p;
|
EQApplicationPacket *in = *p;
|
||||||
@ -2974,6 +3004,84 @@ namespace SoD
|
|||||||
FINISH_DIRECT_DECODE();
|
FINISH_DIRECT_DECODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzAddPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzChooseZoneReply)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(DynamicZoneChooseZoneReply_Struct, structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
|
||||||
|
IN(unknown000);
|
||||||
|
IN(unknown004);
|
||||||
|
IN(unknown008);
|
||||||
|
IN(unknown_id1);
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(dz_type);
|
||||||
|
IN(unknown_id2);
|
||||||
|
IN(unknown028);
|
||||||
|
IN(unknown032);
|
||||||
|
IN(unknown036);
|
||||||
|
IN(unknown040);
|
||||||
|
IN(unknown044);
|
||||||
|
IN(unknown048);
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzExpeditionInviteResponse)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionInviteResponse_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionInviteResponse_Struct, structs::ExpeditionInviteResponse_Struct);
|
||||||
|
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(accepted);
|
||||||
|
IN(swapping);
|
||||||
|
strn0cpy(emu->swap_name, eq->swap_name, sizeof(emu->swap_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzMakeLeader)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzRemovePlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzSwapPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommandSwap_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommandSwap_Struct, structs::ExpeditionCommandSwap_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->add_player_name, eq->add_player_name, sizeof(emu->add_player_name));
|
||||||
|
strn0cpy(emu->rem_player_name, eq->rem_player_name, sizeof(emu->rem_player_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
DECODE(OP_Emote)
|
DECODE(OP_Emote)
|
||||||
{
|
{
|
||||||
unsigned char *__eq_buffer = __packet->pBuffer;
|
unsigned char *__eq_buffer = __packet->pBuffer;
|
||||||
|
|||||||
@ -35,13 +35,16 @@ E(OP_Consider)
|
|||||||
E(OP_Damage)
|
E(OP_Damage)
|
||||||
E(OP_DeleteCharge)
|
E(OP_DeleteCharge)
|
||||||
E(OP_DeleteItem)
|
E(OP_DeleteItem)
|
||||||
|
E(OP_DzChooseZone)
|
||||||
E(OP_DzCompass)
|
E(OP_DzCompass)
|
||||||
E(OP_DzExpeditionEndsWarning)
|
E(OP_DzExpeditionEndsWarning)
|
||||||
E(OP_DzExpeditionInfo)
|
E(OP_DzExpeditionInfo)
|
||||||
E(OP_DzExpeditionList)
|
E(OP_DzExpeditionInvite)
|
||||||
E(OP_DzJoinExpeditionConfirm)
|
E(OP_DzExpeditionLockoutTimers)
|
||||||
E(OP_DzLeaderStatus)
|
|
||||||
E(OP_DzMemberList)
|
E(OP_DzMemberList)
|
||||||
|
E(OP_DzMemberListName)
|
||||||
|
E(OP_DzMemberListStatus)
|
||||||
|
E(OP_DzSetLeaderName)
|
||||||
E(OP_Emote)
|
E(OP_Emote)
|
||||||
E(OP_ExpansionInfo)
|
E(OP_ExpansionInfo)
|
||||||
E(OP_FormattedMessage)
|
E(OP_FormattedMessage)
|
||||||
@ -111,6 +114,12 @@ D(OP_Consider)
|
|||||||
D(OP_ConsiderCorpse)
|
D(OP_ConsiderCorpse)
|
||||||
D(OP_Consume)
|
D(OP_Consume)
|
||||||
D(OP_DeleteItem)
|
D(OP_DeleteItem)
|
||||||
|
D(OP_DzAddPlayer)
|
||||||
|
D(OP_DzChooseZoneReply)
|
||||||
|
D(OP_DzExpeditionInviteResponse)
|
||||||
|
D(OP_DzMakeLeader)
|
||||||
|
D(OP_DzRemovePlayer)
|
||||||
|
D(OP_DzSwapPlayer)
|
||||||
D(OP_Emote)
|
D(OP_Emote)
|
||||||
D(OP_FaceChange)
|
D(OP_FaceChange)
|
||||||
D(OP_FindPersonRequest)
|
D(OP_FindPersonRequest)
|
||||||
|
|||||||
@ -4169,52 +4169,160 @@ struct VeteranReward
|
|||||||
/*012*/ VeteranRewardItem items[8];
|
/*012*/ VeteranRewardItem items[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionEntryHeader_Struct
|
|
||||||
|
struct ExpeditionInvite_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id; // unique character id
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char inviter_name[64];
|
||||||
|
/*072*/ char expedition_name[128];
|
||||||
|
/*200*/ uint8 swapping; // 0: adding 1: swapping
|
||||||
|
/*201*/ char swap_name[64]; // if swapping, swap name being removed
|
||||||
|
/*265*/ uint8 padding[3];
|
||||||
|
/*268*/ uint16 dz_zone_id; // dz_id zone/instance pair, sent back in reply
|
||||||
|
/*270*/ uint16 dz_instance_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionInviteResponse_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 unknown000;
|
/*000*/ uint32 unknown000;
|
||||||
/*000*/ uint32 number_of_entries;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ExpeditionJoinPrompt_Struct
|
|
||||||
{
|
|
||||||
/*000*/ uint32 clientid;
|
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ char player_name[64];
|
/*008*/ uint16 dz_zone_id; // dz_id pair sent in invite
|
||||||
/*072*/ char expedition_name[64];
|
/*010*/ uint16 dz_instance_id;
|
||||||
};
|
/*012*/ uint8 accepted; // 0: declined 1: accepted
|
||||||
|
/*013*/ uint8 swapping; // 0: adding 1: swapping (sent in invite)
|
||||||
struct ExpeditionExpireWarning
|
/*014*/ char swap_name[64]; // swap name sent in invite
|
||||||
{
|
/*078*/ uint8 unknown078; // padding garbage?
|
||||||
/*000*/ uint32 clientid;
|
/*079*/ uint8 unknown079; // padding garbage?
|
||||||
/*004*/ uint32 unknown004;
|
|
||||||
/*008*/ uint32 minutes_remaining;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct ExpeditionInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ uint32 unknown008;
|
/*008*/ uint32 assigned; // padded bool
|
||||||
/*012*/ uint32 max_players;
|
/*012*/ uint32 max_players;
|
||||||
/*016*/ char expedition_name[128];
|
/*016*/ char expedition_name[128];
|
||||||
/*142*/ char leader_name[64];
|
/*144*/ char leader_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompassEntry_Struct
|
struct ExpeditionMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ float unknown000; //seen *((uint32*)) = 1584791871
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*004*/ uint32 enabled; //guess
|
/*000*/ uint8 status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
/*008*/ uint32 unknown008; //seen 1019
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberList_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count; // number of players in window
|
||||||
|
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberListName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||||
|
/*012*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimerEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ char expedition_name[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ uint32 seconds_remaining;
|
||||||
|
/*000*/ uint32 event_type; // seen -1 (0xffffffff) for replay timers and 1 for event timers
|
||||||
|
/*000*/ char event_name[1]; // variable length, null terminated, max 0x100 (256)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimers_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionSetLeaderName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char leader_name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommand_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommandSwap_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char add_player_name[64]; // swap to (player must confirm)
|
||||||
|
/*072*/ char rem_player_name[64]; // swap from
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionExpireWarning
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ uint32 minutes_remaining;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneCompassEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint16 dz_zone_id; // target dz id pair
|
||||||
|
/*002*/ uint16 dz_instance_id;
|
||||||
|
/*004*/ uint32 dz_type; // 1: Expedition, 2: Tutorial (purple), 3: Task, 4: Mission, 5: Quest (green)
|
||||||
|
/*008*/ uint32 unknown008;
|
||||||
/*012*/ float y;
|
/*012*/ float y;
|
||||||
/*016*/ float x;
|
/*016*/ float x;
|
||||||
/*020*/ float z;
|
/*020*/ float z;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompass_Struct
|
struct DynamicZoneCompass_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 count;
|
/*004*/ uint32 count;
|
||||||
/*008*/ ExpeditionCompassEntry_Struct entries[0];
|
/*008*/ DynamicZoneCompassEntry_Struct entries[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZoneEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint16 dz_zone_id; // dz_id pair
|
||||||
|
/*002*/ uint16 dz_instance_id;
|
||||||
|
/*004*/ uint32 unknown_id1; // sent back in reply
|
||||||
|
/*008*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest -- sent back in reply
|
||||||
|
/*012*/ uint32 unknown_id2; // possibly an id based on dz type, for expeditions this was same as dz_id (zone|instance) but task dz was different
|
||||||
|
/*016*/ char description[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ char leader_name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZone_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ DynamicZoneChooseZoneEntry_Struct choices[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZoneReply_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000; // ff ff ff ff
|
||||||
|
/*004*/ uint32 unknown004; // seen 69 00 00 00
|
||||||
|
/*008*/ uint32 unknown008; // ff ff ff ff
|
||||||
|
/*012*/ uint32 unknown_id1; // from choose zone entry message
|
||||||
|
/*016*/ uint16 dz_zone_id; // dz_id pair
|
||||||
|
/*018*/ uint16 dz_instance_id;
|
||||||
|
/*020*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest
|
||||||
|
/*024*/ uint32 unknown_id2; // from choose zone entry message
|
||||||
|
/*028*/ uint32 unknown028; // 00 00 00 00
|
||||||
|
/*032*/ uint32 unknown032; // always same as unknown044
|
||||||
|
/*036*/ uint32 unknown036;
|
||||||
|
/*040*/ uint32 unknown040;
|
||||||
|
/*044*/ uint32 unknown044; // always same as unknown032
|
||||||
|
/*048*/ uint32 unknown048; // seen 01 00 00 00 and 02 00 00 00
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AltCurrencySelectItem_Struct {
|
struct AltCurrencySelectItem_Struct {
|
||||||
|
|||||||
@ -471,14 +471,48 @@ namespace SoF
|
|||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzChooseZone)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(DynamicZoneChooseZone_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
|
|
||||||
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
|
{
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_zone_id);
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_instance_id);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id1);
|
||||||
|
buf.WriteUInt32(emu->choices[i].dz_type);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id2);
|
||||||
|
buf.WriteString(emu->choices[i].description);
|
||||||
|
buf.WriteString(emu->choices[i].leader_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
__packet->size = buf.size();
|
||||||
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzCompass)
|
ENCODE(OP_DzCompass)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionCompass_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneCompass_Struct);
|
||||||
ALLOC_VAR_ENCODE(structs::ExpeditionCompass_Struct, sizeof(structs::ExpeditionInfo_Struct) + sizeof(structs::ExpeditionCompassEntry_Struct) * emu->count);
|
ALLOC_VAR_ENCODE(structs::DynamicZoneCompass_Struct,
|
||||||
|
sizeof(structs::DynamicZoneCompass_Struct) +
|
||||||
|
sizeof(structs::DynamicZoneCompassEntry_Struct) * emu->count
|
||||||
|
);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
OUT(count);
|
OUT(count);
|
||||||
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
|
OUT(entries[i].dz_zone_id);
|
||||||
|
OUT(entries[i].dz_instance_id);
|
||||||
|
OUT(entries[i].dz_type);
|
||||||
OUT(entries[i].x);
|
OUT(entries[i].x);
|
||||||
OUT(entries[i].y);
|
OUT(entries[i].y);
|
||||||
OUT(entries[i].z);
|
OUT(entries[i].z);
|
||||||
@ -502,80 +536,60 @@ namespace SoF
|
|||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
eq->enabled_max = 1;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
strcpy(eq->expedition_name, emu->expedition_name);
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
strcpy(eq->leader_name, emu->leader_name);
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzExpeditionList)
|
ENCODE(OP_DzExpeditionInvite)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionLockoutList_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInvite_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionInvite_Struct, structs::ExpeditionInvite_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
OUT(client_id);
|
||||||
uint32 client_id = 0;
|
strn0cpy(eq->inviter_name, emu->inviter_name, sizeof(eq->inviter_name));
|
||||||
uint8 null_term = 0;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
OUT(swapping);
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
strn0cpy(eq->swap_name, emu->swap_name, sizeof(eq->swap_name));
|
||||||
for (int i = 0; i < emu->count; ++i)
|
OUT(dz_zone_id);
|
||||||
|
OUT(dz_instance_id);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzExpeditionLockoutTimers)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(ExpeditionLockoutTimers_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].expedition, strlen(emu->entries[i].expedition));
|
buf.WriteString(emu->timers[i].expedition_name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt32(emu->timers[i].seconds_remaining);
|
||||||
ss.write((const char*)&emu->entries[i].time_left, sizeof(uint32));
|
buf.WriteUInt32(emu->timers[i].event_type);
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
buf.WriteString(emu->timers[i].event_name);
|
||||||
ss.write(emu->entries[i].expedition_event, strlen(emu->entries[i].expedition_event));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzJoinExpeditionConfirm)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionJoinPrompt_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionJoinPrompt_Struct, structs::ExpeditionJoinPrompt_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
||||||
|
|
||||||
strcpy(eq->expedition_name, emu->expedition_name);
|
OUT(client_id);
|
||||||
strcpy(eq->player_name, emu->player_name);
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
|
||||||
}
|
|
||||||
|
|
||||||
ENCODE(OP_DzLeaderStatus)
|
|
||||||
{
|
|
||||||
SETUP_VAR_ENCODE(ExpeditionLeaderSet_Struct);
|
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
|
||||||
uint32 client_id = 0;
|
|
||||||
uint8 null_term = 0;
|
|
||||||
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
//ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write(emu->leader_name, strlen(emu->leader_name));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//0xffffffff
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//1
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
@ -584,26 +598,43 @@ namespace SoF
|
|||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
uint32 client_id = 0;
|
buf.WriteUInt32(emu->count);
|
||||||
uint8 null_term = 0;
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].name, strlen(emu->entries[i].name));
|
buf.WriteString(emu->members[i].name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt8(emu->members[i].status);
|
||||||
ss.write((const char*)&emu->entries[i].status, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListName)
|
||||||
|
{
|
||||||
|
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(add_name);
|
||||||
|
strn0cpy(eq->name, emu->name, sizeof(eq->name));
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListStatus)
|
||||||
|
{
|
||||||
|
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
||||||
|
if (emu->count == 1)
|
||||||
|
{
|
||||||
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ENCODE(OP_Emote)
|
ENCODE(OP_Emote)
|
||||||
{
|
{
|
||||||
EQApplicationPacket *in = *p;
|
EQApplicationPacket *in = *p;
|
||||||
@ -2435,6 +2466,83 @@ namespace SoF
|
|||||||
FINISH_DIRECT_DECODE();
|
FINISH_DIRECT_DECODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzAddPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzChooseZoneReply)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(DynamicZoneChooseZoneReply_Struct, structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
|
||||||
|
emu->unknown000 = eq->unknown000;
|
||||||
|
emu->unknown008 = eq->unknown004;
|
||||||
|
IN(unknown_id1);
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(dz_type);
|
||||||
|
IN(unknown_id2);
|
||||||
|
emu->unknown028 = eq->unknown024;
|
||||||
|
emu->unknown032 = eq->unknown028;
|
||||||
|
emu->unknown036 = eq->unknown032;
|
||||||
|
emu->unknown040 = eq->unknown036;
|
||||||
|
emu->unknown044 = eq->unknown040;
|
||||||
|
emu->unknown048 = eq->unknown044;
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzExpeditionInviteResponse)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionInviteResponse_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionInviteResponse_Struct, structs::ExpeditionInviteResponse_Struct);
|
||||||
|
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(accepted);
|
||||||
|
IN(swapping);
|
||||||
|
strn0cpy(emu->swap_name, eq->swap_name, sizeof(emu->swap_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzMakeLeader)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzRemovePlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzSwapPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommandSwap_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommandSwap_Struct, structs::ExpeditionCommandSwap_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->add_player_name, eq->add_player_name, sizeof(emu->add_player_name));
|
||||||
|
strn0cpy(emu->rem_player_name, eq->rem_player_name, sizeof(emu->rem_player_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
DECODE(OP_Emote)
|
DECODE(OP_Emote)
|
||||||
{
|
{
|
||||||
unsigned char *__eq_buffer = __packet->pBuffer;
|
unsigned char *__eq_buffer = __packet->pBuffer;
|
||||||
|
|||||||
@ -36,13 +36,16 @@ E(OP_Damage)
|
|||||||
E(OP_DeleteCharge)
|
E(OP_DeleteCharge)
|
||||||
E(OP_DeleteItem)
|
E(OP_DeleteItem)
|
||||||
E(OP_DeleteSpawn)
|
E(OP_DeleteSpawn)
|
||||||
|
E(OP_DzChooseZone)
|
||||||
E(OP_DzCompass)
|
E(OP_DzCompass)
|
||||||
E(OP_DzExpeditionEndsWarning)
|
E(OP_DzExpeditionEndsWarning)
|
||||||
E(OP_DzExpeditionInfo)
|
E(OP_DzExpeditionInfo)
|
||||||
E(OP_DzExpeditionList)
|
E(OP_DzExpeditionInvite)
|
||||||
E(OP_DzJoinExpeditionConfirm)
|
E(OP_DzExpeditionLockoutTimers)
|
||||||
E(OP_DzLeaderStatus)
|
|
||||||
E(OP_DzMemberList)
|
E(OP_DzMemberList)
|
||||||
|
E(OP_DzMemberListName)
|
||||||
|
E(OP_DzMemberListStatus)
|
||||||
|
E(OP_DzSetLeaderName)
|
||||||
E(OP_Emote)
|
E(OP_Emote)
|
||||||
E(OP_ExpansionInfo)
|
E(OP_ExpansionInfo)
|
||||||
E(OP_FormattedMessage)
|
E(OP_FormattedMessage)
|
||||||
@ -103,6 +106,12 @@ D(OP_Consider)
|
|||||||
D(OP_ConsiderCorpse)
|
D(OP_ConsiderCorpse)
|
||||||
D(OP_Consume)
|
D(OP_Consume)
|
||||||
D(OP_DeleteItem)
|
D(OP_DeleteItem)
|
||||||
|
D(OP_DzAddPlayer)
|
||||||
|
D(OP_DzChooseZoneReply)
|
||||||
|
D(OP_DzExpeditionInviteResponse)
|
||||||
|
D(OP_DzMakeLeader)
|
||||||
|
D(OP_DzRemovePlayer)
|
||||||
|
D(OP_DzSwapPlayer)
|
||||||
D(OP_Emote)
|
D(OP_Emote)
|
||||||
D(OP_FaceChange)
|
D(OP_FaceChange)
|
||||||
D(OP_FindPersonRequest)
|
D(OP_FindPersonRequest)
|
||||||
|
|||||||
@ -4088,43 +4088,150 @@ struct VeteranReward
|
|||||||
/*012*/ VeteranRewardItem items[8];
|
/*012*/ VeteranRewardItem items[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionExpireWarning
|
struct ExpeditionInvite_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ char inviter_name[64];
|
||||||
|
/*068*/ char expedition_name[128];
|
||||||
|
/*196*/ uint8 swapping; // 0: adding 1: swapping
|
||||||
|
/*197*/ char swap_name[64]; // if swapping, swap name being removed
|
||||||
|
/*261*/ uint8 padding[3];
|
||||||
|
/*264*/ uint16 dz_zone_id; // dz_id zone/instance pair, sent back in reply
|
||||||
|
/*268*/ uint16 dz_instance_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionInviteResponse_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 unknown000;
|
/*000*/ uint32 unknown000;
|
||||||
/*004*/ uint32 minutes_remaining;
|
/*004*/ uint16 dz_zone_id; // dz_id pair sent in invite
|
||||||
|
/*006*/ uint16 dz_instance_id;
|
||||||
|
/*008*/ uint8 accepted; // 0: declined 1: accepted
|
||||||
|
/*009*/ uint8 swapping; // 0: adding 1: swapping (sent in invite)
|
||||||
|
/*010*/ char swap_name[64]; // swap name sent in invite
|
||||||
|
/*074*/ uint8 unknown078; // padding/garbage?
|
||||||
|
/*075*/ uint8 unknown079; // padding/garbage?
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct ExpeditionInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 enabled_max;
|
/*004*/ uint32 assigned; // padded bool
|
||||||
/*008*/ uint32 max_players;
|
/*008*/ uint32 max_players;
|
||||||
/*012*/ char expedition_name[128];
|
/*012*/ char expedition_name[128];
|
||||||
/*142*/ char leader_name[64];
|
/*140*/ char leader_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompassEntry_Struct
|
struct ExpeditionMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ float unknown000; //seen *((uint32*)) = 1584791871
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*004*/ uint32 enabled; //guess
|
/*000*/ uint8 status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
/*008*/ uint32 unknown008; //seen 1019
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberList_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberListName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||||
|
/*008*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimerEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ char expedition_name[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ uint32 seconds_remaining;
|
||||||
|
/*000*/ uint32 event_type; // seen -1 (0xffffffff) for replay timers and 1 for event timers
|
||||||
|
/*000*/ char event_name[1]; // variable length, null terminated, max 0x100 (256)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimers_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionSetLeaderName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ char leader_name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommand_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommandSwap_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ char add_player_name[64]; // swap to (player must confirm)
|
||||||
|
/*068*/ char rem_player_name[64]; // swap from
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionExpireWarning
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 minutes_remaining;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneCompassEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint16 dz_zone_id; // target dz id pair
|
||||||
|
/*002*/ uint16 dz_instance_id;
|
||||||
|
/*004*/ uint32 dz_type; // 1: Expedition, 2: Tutorial (purple), 3: Task, 4: Mission, 5: Quest (green)
|
||||||
|
/*008*/ uint32 unknown008;
|
||||||
/*012*/ float y;
|
/*012*/ float y;
|
||||||
/*016*/ float x;
|
/*016*/ float x;
|
||||||
/*020*/ float z;
|
/*020*/ float z;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompass_Struct
|
struct DynamicZoneCompass_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 count;
|
/*004*/ uint32 count;
|
||||||
/*008*/ ExpeditionCompassEntry_Struct entries[0];
|
/*008*/ DynamicZoneCompassEntry_Struct entries[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionJoinPrompt_Struct
|
struct DynamicZoneChooseZoneEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint16 dz_zone_id; // dz_id pair
|
||||||
/*004*/ char player_name[64];
|
/*002*/ uint16 dz_instance_id;
|
||||||
/*068*/ char expedition_name[64];
|
/*004*/ uint32 unknown_id1; // sent back in reply
|
||||||
|
/*008*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest -- sent back in reply
|
||||||
|
/*012*/ uint32 unknown_id2; // possibly an id based on dz type, for expeditions this was same as dz_id (zone|instance) but task dz was different
|
||||||
|
/*016*/ char description[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ char leader_name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZone_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ DynamicZoneChooseZoneEntry_Struct choices[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZoneReply_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ uint32 unknown_id1;
|
||||||
|
/*012*/ uint16 dz_zone_id;
|
||||||
|
/*014*/ uint16 dz_instance_id;
|
||||||
|
/*016*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest
|
||||||
|
/*020*/ uint32 unknown_id2;
|
||||||
|
/*024*/ uint32 unknown024;
|
||||||
|
/*028*/ uint32 unknown028; // always same as unknown040
|
||||||
|
/*032*/ uint32 unknown032;
|
||||||
|
/*036*/ uint32 unknown036;
|
||||||
|
/*040*/ uint32 unknown040; // always same as unknown028
|
||||||
|
/*044*/ uint32 unknown044;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AltCurrencySelectItem_Struct {
|
struct AltCurrencySelectItem_Struct {
|
||||||
|
|||||||
@ -414,15 +414,48 @@ namespace Titanium
|
|||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzChooseZone)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(DynamicZoneChooseZone_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
|
|
||||||
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
|
{
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_zone_id);
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_instance_id);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id1);
|
||||||
|
buf.WriteUInt32(emu->choices[i].dz_type);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id2);
|
||||||
|
buf.WriteString(emu->choices[i].description);
|
||||||
|
buf.WriteString(emu->choices[i].leader_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
__packet->size = buf.size();
|
||||||
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzCompass)
|
ENCODE(OP_DzCompass)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionCompass_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneCompass_Struct);
|
||||||
ALLOC_VAR_ENCODE(structs::ExpeditionCompass_Struct, sizeof(structs::ExpeditionInfo_Struct) + sizeof(structs::ExpeditionCompassEntry_Struct) * emu->count);
|
ALLOC_VAR_ENCODE(structs::DynamicZoneCompass_Struct,
|
||||||
|
sizeof(structs::DynamicZoneCompass_Struct) +
|
||||||
|
sizeof(structs::DynamicZoneCompassEntry_Struct) * emu->count
|
||||||
|
);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
OUT(count);
|
OUT(count);
|
||||||
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
|
OUT(entries[i].dz_zone_id);
|
||||||
|
OUT(entries[i].dz_instance_id);
|
||||||
|
OUT(entries[i].dz_type);
|
||||||
OUT(entries[i].x);
|
OUT(entries[i].x);
|
||||||
OUT(entries[i].y);
|
OUT(entries[i].y);
|
||||||
OUT(entries[i].z);
|
OUT(entries[i].z);
|
||||||
@ -446,80 +479,60 @@ namespace Titanium
|
|||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
eq->enabled_max = 1;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
strcpy(eq->expedition_name, emu->expedition_name);
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
strcpy(eq->leader_name, emu->leader_name);
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzExpeditionList)
|
ENCODE(OP_DzExpeditionInvite)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionLockoutList_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInvite_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionInvite_Struct, structs::ExpeditionInvite_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
OUT(client_id);
|
||||||
uint32 client_id = 0;
|
strn0cpy(eq->inviter_name, emu->inviter_name, sizeof(eq->inviter_name));
|
||||||
uint8 null_term = 0;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
OUT(swapping);
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
strn0cpy(eq->swap_name, emu->swap_name, sizeof(eq->swap_name));
|
||||||
|
OUT(dz_zone_id);
|
||||||
|
OUT(dz_instance_id);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzExpeditionLockoutTimers)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(ExpeditionLockoutTimers_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].expedition, strlen(emu->entries[i].expedition));
|
buf.WriteString(emu->timers[i].expedition_name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt32(emu->timers[i].seconds_remaining);
|
||||||
ss.write((const char*)&emu->entries[i].time_left, sizeof(uint32));
|
buf.WriteUInt32(emu->timers[i].event_type);
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
buf.WriteString(emu->timers[i].event_name);
|
||||||
ss.write(emu->entries[i].expedition_event, strlen(emu->entries[i].expedition_event));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzJoinExpeditionConfirm)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionJoinPrompt_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionJoinPrompt_Struct, structs::ExpeditionJoinPrompt_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
||||||
|
|
||||||
strcpy(eq->expedition_name, emu->expedition_name);
|
OUT(client_id);
|
||||||
strcpy(eq->player_name, emu->player_name);
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
|
||||||
}
|
|
||||||
|
|
||||||
ENCODE(OP_DzLeaderStatus)
|
|
||||||
{
|
|
||||||
SETUP_VAR_ENCODE(ExpeditionLeaderSet_Struct);
|
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
|
||||||
uint32 client_id = 0;
|
|
||||||
uint8 null_term = 0;
|
|
||||||
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
//ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write(emu->leader_name, strlen(emu->leader_name));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//0xffffffff
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//1
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
@ -528,26 +541,43 @@ namespace Titanium
|
|||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
uint32 client_id = 0;
|
buf.WriteUInt32(emu->count);
|
||||||
uint8 null_term = 0;
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].name, strlen(emu->entries[i].name));
|
buf.WriteString(emu->members[i].name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt8(emu->members[i].status);
|
||||||
ss.write((const char*)&emu->entries[i].status, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListName)
|
||||||
|
{
|
||||||
|
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(add_name);
|
||||||
|
strn0cpy(eq->name, emu->name, sizeof(eq->name));
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListStatus)
|
||||||
|
{
|
||||||
|
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
||||||
|
if (emu->count == 1)
|
||||||
|
{
|
||||||
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ENCODE(OP_Emote)
|
ENCODE(OP_Emote)
|
||||||
{
|
{
|
||||||
EQApplicationPacket *in = *p;
|
EQApplicationPacket *in = *p;
|
||||||
@ -1943,6 +1973,83 @@ namespace Titanium
|
|||||||
FINISH_DIRECT_DECODE();
|
FINISH_DIRECT_DECODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzAddPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzChooseZoneReply)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(DynamicZoneChooseZoneReply_Struct, structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
|
||||||
|
emu->unknown000 = eq->unknown000;
|
||||||
|
emu->unknown008 = eq->unknown004;
|
||||||
|
IN(unknown_id1);
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(dz_type);
|
||||||
|
IN(unknown_id2);
|
||||||
|
emu->unknown028 = eq->unknown024;
|
||||||
|
emu->unknown032 = eq->unknown028;
|
||||||
|
emu->unknown036 = eq->unknown032;
|
||||||
|
emu->unknown040 = eq->unknown036;
|
||||||
|
emu->unknown044 = eq->unknown040;
|
||||||
|
emu->unknown048 = eq->unknown044;
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzExpeditionInviteResponse)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionInviteResponse_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionInviteResponse_Struct, structs::ExpeditionInviteResponse_Struct);
|
||||||
|
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(accepted);
|
||||||
|
IN(swapping);
|
||||||
|
strn0cpy(emu->swap_name, eq->swap_name, sizeof(emu->swap_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzMakeLeader)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzRemovePlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzSwapPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommandSwap_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommandSwap_Struct, structs::ExpeditionCommandSwap_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->add_player_name, eq->add_player_name, sizeof(emu->add_player_name));
|
||||||
|
strn0cpy(emu->rem_player_name, eq->rem_player_name, sizeof(emu->rem_player_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
DECODE(OP_Emote)
|
DECODE(OP_Emote)
|
||||||
{
|
{
|
||||||
unsigned char *__eq_buffer = __packet->pBuffer;
|
unsigned char *__eq_buffer = __packet->pBuffer;
|
||||||
|
|||||||
@ -32,13 +32,16 @@ E(OP_Damage)
|
|||||||
E(OP_DeleteCharge)
|
E(OP_DeleteCharge)
|
||||||
E(OP_DeleteItem)
|
E(OP_DeleteItem)
|
||||||
E(OP_DeleteSpawn)
|
E(OP_DeleteSpawn)
|
||||||
|
E(OP_DzChooseZone)
|
||||||
E(OP_DzCompass)
|
E(OP_DzCompass)
|
||||||
E(OP_DzExpeditionEndsWarning)
|
E(OP_DzExpeditionEndsWarning)
|
||||||
E(OP_DzExpeditionInfo)
|
E(OP_DzExpeditionInfo)
|
||||||
E(OP_DzExpeditionList)
|
E(OP_DzExpeditionInvite)
|
||||||
E(OP_DzJoinExpeditionConfirm)
|
E(OP_DzExpeditionLockoutTimers)
|
||||||
E(OP_DzLeaderStatus)
|
|
||||||
E(OP_DzMemberList)
|
E(OP_DzMemberList)
|
||||||
|
E(OP_DzMemberListName)
|
||||||
|
E(OP_DzMemberListStatus)
|
||||||
|
E(OP_DzSetLeaderName)
|
||||||
E(OP_Emote)
|
E(OP_Emote)
|
||||||
E(OP_FormattedMessage)
|
E(OP_FormattedMessage)
|
||||||
E(OP_GroundSpawn)
|
E(OP_GroundSpawn)
|
||||||
@ -86,6 +89,12 @@ D(OP_CharacterCreate)
|
|||||||
D(OP_ClientUpdate)
|
D(OP_ClientUpdate)
|
||||||
D(OP_Consume)
|
D(OP_Consume)
|
||||||
D(OP_DeleteItem)
|
D(OP_DeleteItem)
|
||||||
|
D(OP_DzAddPlayer)
|
||||||
|
D(OP_DzChooseZoneReply)
|
||||||
|
D(OP_DzExpeditionInviteResponse)
|
||||||
|
D(OP_DzMakeLeader)
|
||||||
|
D(OP_DzRemovePlayer)
|
||||||
|
D(OP_DzSwapPlayer)
|
||||||
D(OP_Emote)
|
D(OP_Emote)
|
||||||
D(OP_FaceChange)
|
D(OP_FaceChange)
|
||||||
D(OP_InspectAnswer)
|
D(OP_InspectAnswer)
|
||||||
|
|||||||
@ -3299,43 +3299,150 @@ struct VeteranReward
|
|||||||
/*004*/ VeteranRewardItem item;
|
/*004*/ VeteranRewardItem item;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionExpireWarning
|
struct ExpeditionInvite_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ char inviter_name[64];
|
||||||
|
/*068*/ char expedition_name[128];
|
||||||
|
/*196*/ uint8 swapping; // 0: adding 1: swapping
|
||||||
|
/*197*/ char swap_name[64]; // if swapping, swap name being removed
|
||||||
|
/*261*/ uint8 padding[3];
|
||||||
|
/*264*/ uint16 dz_zone_id; // dz_id zone/instance pair, sent back in reply
|
||||||
|
/*268*/ uint16 dz_instance_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionInviteResponse_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 unknown000;
|
/*000*/ uint32 unknown000;
|
||||||
/*004*/ uint32 minutes_remaining;
|
/*004*/ uint16 dz_zone_id; // dz_id pair sent in invite
|
||||||
|
/*006*/ uint16 dz_instance_id;
|
||||||
|
/*008*/ uint8 accepted; // 0: declined 1: accepted
|
||||||
|
/*009*/ uint8 swapping; // 0: adding 1: swapping (sent in invite)
|
||||||
|
/*010*/ char swap_name[64]; // swap name sent in invite
|
||||||
|
/*074*/ uint8 unknown078; // padding/garbage?
|
||||||
|
/*075*/ uint8 unknown079; // padding/garbage?
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct ExpeditionInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 enabled_max;
|
/*004*/ uint32 assigned; // padded bool
|
||||||
/*008*/ uint32 max_players;
|
/*008*/ uint32 max_players;
|
||||||
/*012*/ char expedition_name[128];
|
/*012*/ char expedition_name[128];
|
||||||
/*142*/ char leader_name[64];
|
/*140*/ char leader_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompassEntry_Struct
|
struct ExpeditionMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ float unknown000; //seen *((uint32*)) = 1584791871
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*004*/ uint32 enabled; //guess
|
/*000*/ uint8 status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
/*008*/ uint32 unknown008; //seen 1019
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberList_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberListName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||||
|
/*008*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimerEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ char expedition_name[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ uint32 seconds_remaining;
|
||||||
|
/*000*/ uint32 event_type; // seen -1 (0xffffffff) for replay timers and 1 for event timers
|
||||||
|
/*000*/ char event_name[1]; // variable length, null terminated, max 0x100 (256)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimers_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionSetLeaderName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ char leader_name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommand_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommandSwap_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ char add_player_name[64]; // swap to (player must confirm)
|
||||||
|
/*068*/ char rem_player_name[64]; // swap from
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionExpireWarning
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 minutes_remaining;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneCompassEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint16 dz_zone_id; // target dz id pair
|
||||||
|
/*002*/ uint16 dz_instance_id;
|
||||||
|
/*004*/ uint32 dz_type; // 1: Expedition, 2: Tutorial (purple), 3: Task, 4: Mission, 5: Quest (green)
|
||||||
|
/*008*/ uint32 unknown008;
|
||||||
/*012*/ float y;
|
/*012*/ float y;
|
||||||
/*016*/ float x;
|
/*016*/ float x;
|
||||||
/*020*/ float z;
|
/*020*/ float z;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompass_Struct
|
struct DynamicZoneCompass_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 count;
|
/*004*/ uint32 count;
|
||||||
/*008*/ ExpeditionCompassEntry_Struct entries[0];
|
/*008*/ DynamicZoneCompassEntry_Struct entries[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionJoinPrompt_Struct
|
struct DynamicZoneChooseZoneEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint16 dz_zone_id; // dz_id pair
|
||||||
/*004*/ char player_name[64];
|
/*002*/ uint16 dz_instance_id;
|
||||||
/*068*/ char expedition_name[64];
|
/*004*/ uint32 unknown_id1; // sent back in reply
|
||||||
|
/*008*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest -- sent back in reply
|
||||||
|
/*012*/ uint32 unknown_id2; // possibly an id based on dz type, for expeditions this was same as dz_id (zone|instance) but task dz was different
|
||||||
|
/*016*/ char description[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ char leader_name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZone_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ DynamicZoneChooseZoneEntry_Struct choices[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZoneReply_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ uint32 unknown_id1;
|
||||||
|
/*012*/ uint16 dz_zone_id;
|
||||||
|
/*014*/ uint16 dz_instance_id;
|
||||||
|
/*016*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest
|
||||||
|
/*020*/ uint32 unknown_id2;
|
||||||
|
/*024*/ uint32 unknown024;
|
||||||
|
/*028*/ uint32 unknown028; // always same as unknown040
|
||||||
|
/*032*/ uint32 unknown032;
|
||||||
|
/*036*/ uint32 unknown036;
|
||||||
|
/*040*/ uint32 unknown040; // always same as unknown028
|
||||||
|
/*044*/ uint32 unknown044;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct LFGuild_SearchPlayer_Struct
|
struct LFGuild_SearchPlayer_Struct
|
||||||
|
|||||||
@ -613,14 +613,48 @@ namespace UF
|
|||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzChooseZone)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(DynamicZoneChooseZone_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
|
|
||||||
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
|
{
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_zone_id);
|
||||||
|
buf.WriteUInt16(emu->choices[i].dz_instance_id);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id1);
|
||||||
|
buf.WriteUInt32(emu->choices[i].dz_type);
|
||||||
|
buf.WriteUInt32(emu->choices[i].unknown_id2);
|
||||||
|
buf.WriteString(emu->choices[i].description);
|
||||||
|
buf.WriteString(emu->choices[i].leader_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
__packet->size = buf.size();
|
||||||
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzCompass)
|
ENCODE(OP_DzCompass)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionCompass_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneCompass_Struct);
|
||||||
ALLOC_VAR_ENCODE(structs::ExpeditionCompass_Struct, sizeof(structs::ExpeditionInfo_Struct) + sizeof(structs::ExpeditionCompassEntry_Struct) * emu->count);
|
ALLOC_VAR_ENCODE(structs::DynamicZoneCompass_Struct,
|
||||||
|
sizeof(structs::DynamicZoneCompass_Struct) +
|
||||||
|
sizeof(structs::DynamicZoneCompassEntry_Struct) * emu->count
|
||||||
|
);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
OUT(count);
|
OUT(count);
|
||||||
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
|
OUT(entries[i].dz_zone_id);
|
||||||
|
OUT(entries[i].dz_instance_id);
|
||||||
|
OUT(entries[i].dz_type);
|
||||||
OUT(entries[i].x);
|
OUT(entries[i].x);
|
||||||
OUT(entries[i].y);
|
OUT(entries[i].y);
|
||||||
OUT(entries[i].z);
|
OUT(entries[i].z);
|
||||||
@ -644,81 +678,60 @@ namespace UF
|
|||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
eq->unknown004 = 785316192;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
eq->unknown008 = 435601;
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
strcpy(eq->expedition_name, emu->expedition_name);
|
|
||||||
strcpy(eq->leader_name, emu->leader_name);
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzExpeditionList)
|
ENCODE(OP_DzExpeditionInvite)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionLockoutList_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionInvite_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionInvite_Struct, structs::ExpeditionInvite_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
OUT(client_id);
|
||||||
uint32 client_id = 0;
|
strn0cpy(eq->inviter_name, emu->inviter_name, sizeof(eq->inviter_name));
|
||||||
uint8 null_term = 0;
|
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
OUT(swapping);
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
strn0cpy(eq->swap_name, emu->swap_name, sizeof(eq->swap_name));
|
||||||
|
OUT(dz_zone_id);
|
||||||
|
OUT(dz_instance_id);
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzExpeditionLockoutTimers)
|
||||||
|
{
|
||||||
|
SETUP_VAR_ENCODE(ExpeditionLockoutTimers_Struct);
|
||||||
|
|
||||||
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
|
buf.WriteUInt32(emu->count);
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].expedition, strlen(emu->entries[i].expedition));
|
buf.WriteString(emu->timers[i].expedition_name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt32(emu->timers[i].seconds_remaining);
|
||||||
ss.write((const char*)&emu->entries[i].time_left, sizeof(uint32));
|
buf.WriteUInt32(emu->timers[i].event_type);
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
buf.WriteString(emu->timers[i].event_name);
|
||||||
ss.write(emu->entries[i].expedition_event, strlen(emu->entries[i].expedition_event));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DzJoinExpeditionConfirm)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionJoinPrompt_Struct);
|
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionJoinPrompt_Struct, structs::ExpeditionJoinPrompt_Struct);
|
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
||||||
|
|
||||||
strcpy(eq->expedition_name, emu->expedition_name);
|
OUT(client_id);
|
||||||
strcpy(eq->player_name, emu->player_name);
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
|
||||||
}
|
|
||||||
|
|
||||||
ENCODE(OP_DzLeaderStatus)
|
|
||||||
{
|
|
||||||
SETUP_VAR_ENCODE(ExpeditionLeaderSet_Struct);
|
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
|
||||||
uint32 client_id = 0;
|
|
||||||
uint8 null_term = 0;
|
|
||||||
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write(emu->leader_name, strlen(emu->leader_name));
|
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//0xffffffff
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));//1
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
@ -727,26 +740,43 @@ namespace UF
|
|||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
||||||
|
|
||||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
SerializeBuffer buf;
|
||||||
|
buf.WriteUInt32(emu->client_id);
|
||||||
uint32 client_id = 0;
|
buf.WriteUInt32(emu->count);
|
||||||
uint8 null_term = 0;
|
|
||||||
ss.write((const char*)&client_id, sizeof(uint32));
|
|
||||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
|
||||||
for (uint32 i = 0; i < emu->count; ++i)
|
for (uint32 i = 0; i < emu->count; ++i)
|
||||||
{
|
{
|
||||||
ss.write(emu->entries[i].name, strlen(emu->entries[i].name));
|
buf.WriteString(emu->members[i].name);
|
||||||
ss.write((const char*)&null_term, sizeof(char));
|
buf.WriteUInt8(emu->members[i].status);
|
||||||
ss.write((const char*)&emu->entries[i].status, sizeof(char));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = ss.str().length();
|
__packet->size = buf.size();
|
||||||
__packet->pBuffer = new unsigned char[__packet->size];
|
__packet->pBuffer = new unsigned char[__packet->size];
|
||||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListName)
|
||||||
|
{
|
||||||
|
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
||||||
|
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
||||||
|
|
||||||
|
OUT(client_id);
|
||||||
|
OUT(add_name);
|
||||||
|
strn0cpy(eq->name, emu->name, sizeof(eq->name));
|
||||||
|
|
||||||
|
FINISH_ENCODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
ENCODE(OP_DzMemberListStatus)
|
||||||
|
{
|
||||||
|
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
||||||
|
if (emu->count == 1)
|
||||||
|
{
|
||||||
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ENCODE(OP_Emote)
|
ENCODE(OP_Emote)
|
||||||
{
|
{
|
||||||
EQApplicationPacket *in = *p;
|
EQApplicationPacket *in = *p;
|
||||||
@ -3315,6 +3345,84 @@ namespace UF
|
|||||||
FINISH_DIRECT_DECODE();
|
FINISH_DIRECT_DECODE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzAddPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzChooseZoneReply)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(DynamicZoneChooseZoneReply_Struct, structs::DynamicZoneChooseZoneReply_Struct);
|
||||||
|
|
||||||
|
IN(unknown000);
|
||||||
|
IN(unknown004);
|
||||||
|
IN(unknown008);
|
||||||
|
IN(unknown_id1);
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(dz_type);
|
||||||
|
IN(unknown_id2);
|
||||||
|
IN(unknown028);
|
||||||
|
IN(unknown032);
|
||||||
|
IN(unknown036);
|
||||||
|
IN(unknown040);
|
||||||
|
IN(unknown044);
|
||||||
|
IN(unknown048);
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzExpeditionInviteResponse)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionInviteResponse_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionInviteResponse_Struct, structs::ExpeditionInviteResponse_Struct);
|
||||||
|
|
||||||
|
IN(dz_zone_id);
|
||||||
|
IN(dz_instance_id);
|
||||||
|
IN(accepted);
|
||||||
|
IN(swapping);
|
||||||
|
strn0cpy(emu->swap_name, eq->swap_name, sizeof(emu->swap_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzMakeLeader)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzRemovePlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE(OP_DzSwapPlayer)
|
||||||
|
{
|
||||||
|
DECODE_LENGTH_EXACT(structs::ExpeditionCommandSwap_Struct);
|
||||||
|
SETUP_DIRECT_DECODE(ExpeditionCommandSwap_Struct, structs::ExpeditionCommandSwap_Struct);
|
||||||
|
|
||||||
|
strn0cpy(emu->add_player_name, eq->add_player_name, sizeof(emu->add_player_name));
|
||||||
|
strn0cpy(emu->rem_player_name, eq->rem_player_name, sizeof(emu->rem_player_name));
|
||||||
|
|
||||||
|
FINISH_DIRECT_DECODE();
|
||||||
|
}
|
||||||
|
|
||||||
DECODE(OP_Emote)
|
DECODE(OP_Emote)
|
||||||
{
|
{
|
||||||
unsigned char *__eq_buffer = __packet->pBuffer;
|
unsigned char *__eq_buffer = __packet->pBuffer;
|
||||||
|
|||||||
@ -38,13 +38,16 @@ E(OP_Damage)
|
|||||||
E(OP_DeleteCharge)
|
E(OP_DeleteCharge)
|
||||||
E(OP_DeleteItem)
|
E(OP_DeleteItem)
|
||||||
E(OP_DisciplineUpdate)
|
E(OP_DisciplineUpdate)
|
||||||
|
E(OP_DzChooseZone)
|
||||||
E(OP_DzCompass)
|
E(OP_DzCompass)
|
||||||
E(OP_DzExpeditionEndsWarning)
|
E(OP_DzExpeditionEndsWarning)
|
||||||
E(OP_DzExpeditionInfo)
|
E(OP_DzExpeditionInfo)
|
||||||
E(OP_DzExpeditionList)
|
E(OP_DzExpeditionInvite)
|
||||||
E(OP_DzJoinExpeditionConfirm)
|
E(OP_DzExpeditionLockoutTimers)
|
||||||
E(OP_DzLeaderStatus)
|
|
||||||
E(OP_DzMemberList)
|
E(OP_DzMemberList)
|
||||||
|
E(OP_DzMemberListName)
|
||||||
|
E(OP_DzMemberListStatus)
|
||||||
|
E(OP_DzSetLeaderName)
|
||||||
E(OP_Emote)
|
E(OP_Emote)
|
||||||
E(OP_ExpansionInfo)
|
E(OP_ExpansionInfo)
|
||||||
E(OP_FormattedMessage)
|
E(OP_FormattedMessage)
|
||||||
@ -120,6 +123,12 @@ D(OP_ConsiderCorpse)
|
|||||||
D(OP_Consume)
|
D(OP_Consume)
|
||||||
D(OP_Damage)
|
D(OP_Damage)
|
||||||
D(OP_DeleteItem)
|
D(OP_DeleteItem)
|
||||||
|
D(OP_DzAddPlayer)
|
||||||
|
D(OP_DzChooseZoneReply)
|
||||||
|
D(OP_DzExpeditionInviteResponse)
|
||||||
|
D(OP_DzMakeLeader)
|
||||||
|
D(OP_DzRemovePlayer)
|
||||||
|
D(OP_DzSwapPlayer)
|
||||||
D(OP_Emote)
|
D(OP_Emote)
|
||||||
D(OP_EnvDamage)
|
D(OP_EnvDamage)
|
||||||
D(OP_FaceChange)
|
D(OP_FaceChange)
|
||||||
|
|||||||
@ -4250,52 +4250,160 @@ struct VeteranReward
|
|||||||
/*012*/ VeteranRewardItem items[8];
|
/*012*/ VeteranRewardItem items[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionEntryHeader_Struct
|
|
||||||
|
struct ExpeditionInvite_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id; // unique character id
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char inviter_name[64];
|
||||||
|
/*072*/ char expedition_name[128];
|
||||||
|
/*200*/ uint8 swapping; // 0: adding 1: swapping
|
||||||
|
/*201*/ char swap_name[64]; // if swapping, swap name being removed
|
||||||
|
/*265*/ uint8 padding[3];
|
||||||
|
/*268*/ uint16 dz_zone_id; // dz_id zone/instance pair, sent back in reply
|
||||||
|
/*270*/ uint16 dz_instance_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionInviteResponse_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 unknown000;
|
/*000*/ uint32 unknown000;
|
||||||
/*000*/ uint32 number_of_entries;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ExpeditionJoinPrompt_Struct
|
|
||||||
{
|
|
||||||
/*000*/ uint32 clientid;
|
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ char player_name[64];
|
/*008*/ uint16 dz_zone_id; // dz_id pair sent in invite
|
||||||
/*072*/ char expedition_name[64];
|
/*010*/ uint16 dz_instance_id;
|
||||||
};
|
/*012*/ uint8 accepted; // 0: declined 1: accepted
|
||||||
|
/*013*/ uint8 swapping; // 0: adding 1: swapping (sent in invite)
|
||||||
struct ExpeditionExpireWarning
|
/*014*/ char swap_name[64]; // swap name sent in invite
|
||||||
{
|
/*078*/ uint8 unknown078; // padding garbage?
|
||||||
/*000*/ uint32 clientid;
|
/*079*/ uint8 unknown079; // padding garbage?
|
||||||
/*004*/ uint32 unknown004;
|
|
||||||
/*008*/ uint32 minutes_remaining;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct ExpeditionInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ uint32 unknown008;
|
/*008*/ uint32 assigned; // padded bool
|
||||||
/*012*/ uint32 max_players;
|
/*012*/ uint32 max_players;
|
||||||
/*016*/ char expedition_name[128];
|
/*016*/ char expedition_name[128];
|
||||||
/*142*/ char leader_name[64];
|
/*144*/ char leader_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompassEntry_Struct
|
struct ExpeditionMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ float unknown000; //seen *((uint32*)) = 1584791871
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*004*/ uint32 enabled; //guess
|
/*000*/ uint8 status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
/*008*/ uint32 unknown008; //seen 1019
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberList_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count; // number of players in window
|
||||||
|
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionMemberListName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||||
|
/*012*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimerEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ char expedition_name[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ uint32 seconds_remaining;
|
||||||
|
/*000*/ uint32 event_type; // seen -1 (0xffffffff) for replay timers and 1 for event timers
|
||||||
|
/*000*/ char event_name[1]; // variable length, null terminated, max 0x100 (256)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionLockoutTimers_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionSetLeaderName_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char leader_name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommand_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char name[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionCommandSwap_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ char add_player_name[64]; // swap to (player must confirm)
|
||||||
|
/*072*/ char rem_player_name[64]; // swap from
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ExpeditionExpireWarning
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 unknown004;
|
||||||
|
/*008*/ uint32 minutes_remaining;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneCompassEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint16 dz_zone_id; // target dz id pair
|
||||||
|
/*002*/ uint16 dz_instance_id;
|
||||||
|
/*004*/ uint32 dz_type; // 1: Expedition, 2: Tutorial (purple), 3: Task, 4: Mission, 5: Quest (green)
|
||||||
|
/*008*/ uint32 unknown008;
|
||||||
/*012*/ float y;
|
/*012*/ float y;
|
||||||
/*016*/ float x;
|
/*016*/ float x;
|
||||||
/*020*/ float z;
|
/*020*/ float z;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionCompass_Struct
|
struct DynamicZoneCompass_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 clientid;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 count;
|
/*004*/ uint32 count;
|
||||||
/*008*/ ExpeditionCompassEntry_Struct entries[0];
|
/*008*/ DynamicZoneCompassEntry_Struct entries[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZoneEntry_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint16 dz_zone_id; // dz_id pair
|
||||||
|
/*002*/ uint16 dz_instance_id;
|
||||||
|
/*004*/ uint32 unknown_id1; // sent back in reply
|
||||||
|
/*008*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest -- sent back in reply
|
||||||
|
/*012*/ uint32 unknown_id2; // possibly an id based on dz type, for expeditions this was same as dz_id (zone|instance) but task dz was different
|
||||||
|
/*016*/ char description[1]; // variable length, null terminated, max 0x80 (128)
|
||||||
|
/*000*/ char leader_name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZone_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 client_id;
|
||||||
|
/*004*/ uint32 count;
|
||||||
|
/*008*/ DynamicZoneChooseZoneEntry_Struct choices[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DynamicZoneChooseZoneReply_Struct
|
||||||
|
{
|
||||||
|
/*000*/ uint32 unknown000; // ff ff ff ff
|
||||||
|
/*004*/ uint32 unknown004; // seen 69 00 00 00
|
||||||
|
/*008*/ uint32 unknown008; // ff ff ff ff
|
||||||
|
/*012*/ uint32 unknown_id1; // from choose zone entry message
|
||||||
|
/*016*/ uint16 dz_zone_id; // dz_id pair
|
||||||
|
/*018*/ uint16 dz_instance_id;
|
||||||
|
/*020*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest
|
||||||
|
/*024*/ uint32 unknown_id2; // from choose zone entry message
|
||||||
|
/*028*/ uint32 unknown028; // 00 00 00 00
|
||||||
|
/*032*/ uint32 unknown032; // always same as unknown044
|
||||||
|
/*036*/ uint32 unknown036;
|
||||||
|
/*040*/ uint32 unknown040;
|
||||||
|
/*044*/ uint32 unknown044; // always same as unknown032
|
||||||
|
/*048*/ uint32 unknown048; // seen 01 00 00 00 and 02 00 00 00
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AltCurrencySelectItem_Struct {
|
struct AltCurrencySelectItem_Struct {
|
||||||
|
|||||||
@ -375,16 +375,18 @@ OP_DzRemovePlayer=0x0dc1
|
|||||||
OP_DzSwapPlayer=0x4995
|
OP_DzSwapPlayer=0x4995
|
||||||
OP_DzMakeLeader=0x17b2
|
OP_DzMakeLeader=0x17b2
|
||||||
OP_DzPlayerList=0x1aff
|
OP_DzPlayerList=0x1aff
|
||||||
OP_DzJoinExpeditionConfirm=0x30df
|
OP_DzExpeditionInvite=0x30df
|
||||||
OP_DzJoinExpeditionReply=0x15d4
|
OP_DzExpeditionInviteResponse=0x15d4
|
||||||
OP_DzExpeditionInfo=0x3861
|
OP_DzExpeditionInfo=0x3861
|
||||||
OP_DzExpeditionList=0x0b3b
|
OP_DzExpeditionLockoutTimers=0x0b3b
|
||||||
OP_DzMemberStatus=0x26c2
|
|
||||||
OP_DzLeaderStatus=0x4021
|
|
||||||
OP_DzExpeditionEndsWarning=0x32eb
|
|
||||||
OP_DzMemberList=0x348f
|
OP_DzMemberList=0x348f
|
||||||
|
OP_DzMemberListName=0x26c2
|
||||||
|
OP_DzMemberListStatus=0x0000
|
||||||
|
OP_DzSetLeaderName=0x4021
|
||||||
|
OP_DzExpeditionEndsWarning=0x32eb
|
||||||
OP_DzCompass=0x0e01 # Was 0x4f09
|
OP_DzCompass=0x0e01 # Was 0x4f09
|
||||||
OP_DzChooseZone=0x6e5e # Maybe 0x29d6
|
OP_DzChooseZone=0x6e5e # Maybe 0x29d6
|
||||||
|
OP_DzChooseZoneReply=0x0000
|
||||||
|
|
||||||
# New Opcodes
|
# New Opcodes
|
||||||
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
||||||
|
|||||||
@ -368,25 +368,28 @@ OP_AggroMeterLockTarget=0x1643
|
|||||||
OP_AggroMeterTargetInfo=0x16bc
|
OP_AggroMeterTargetInfo=0x16bc
|
||||||
OP_AggroMeterUpdate=0x1781
|
OP_AggroMeterUpdate=0x1781
|
||||||
OP_UnderWorld=0x2eb3 # clients sends up when they detect an underworld issue, might be useful for cheat detection
|
OP_UnderWorld=0x2eb3 # clients sends up when they detect an underworld issue, might be useful for cheat detection
|
||||||
|
OP_KickPlayers=0x6770
|
||||||
|
|
||||||
# Expeditions
|
# Expeditions
|
||||||
|
OP_DzQuit=0xb2e3
|
||||||
|
OP_DzListTimers=0x7b68
|
||||||
OP_DzAddPlayer=0x4701
|
OP_DzAddPlayer=0x4701
|
||||||
OP_DzRemovePlayer=0x1abc
|
OP_DzRemovePlayer=0x1abc
|
||||||
OP_DzSwapPlayer=0x405b
|
OP_DzSwapPlayer=0x405b
|
||||||
OP_DzMakeLeader=0x543d
|
OP_DzMakeLeader=0x543d
|
||||||
OP_DzPlayerList=0x14c6
|
OP_DzPlayerList=0x14c6
|
||||||
OP_DzJoinExpeditionConfirm=0x7f4b
|
OP_DzExpeditionInvite=0x7f4b
|
||||||
OP_DzJoinExpeditionReply=0x1950
|
OP_DzExpeditionInviteResponse=0x1950
|
||||||
OP_DzListTimers=0x7b68
|
|
||||||
OP_DzExpeditionInfo=0x9119
|
OP_DzExpeditionInfo=0x9119
|
||||||
OP_DzExpeditionList=0x205f
|
OP_DzExpeditionLockoutTimers=0x205f
|
||||||
OP_DzQuit=0xb2e3
|
|
||||||
OP_DzMemberStatus=0x32f0
|
|
||||||
OP_DzLeaderStatus=0x3de9
|
|
||||||
OP_DzMemberList=0x5ae4
|
OP_DzMemberList=0x5ae4
|
||||||
OP_DzExpeditionEndsWarning=0x383c
|
OP_DzMemberListName=0x32f0
|
||||||
|
OP_DzMemberListStatus=0x12F5
|
||||||
|
OP_DzSetLeaderName=0x3de9
|
||||||
|
OP_DzExpeditionEndsWarning=0x5189
|
||||||
OP_DzCompass=0x3e0e
|
OP_DzCompass=0x3e0e
|
||||||
OP_DzChooseZone=0x0b7d
|
OP_DzChooseZone=0x0b7d
|
||||||
|
OP_DzChooseZoneReply=0x4de1
|
||||||
|
|
||||||
# New Opcodes
|
# New Opcodes
|
||||||
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
||||||
|
|||||||
@ -367,17 +367,18 @@ OP_DzRemovePlayer=0xa682
|
|||||||
OP_DzSwapPlayer=0x0d8d
|
OP_DzSwapPlayer=0x0d8d
|
||||||
OP_DzMakeLeader=0x1caa
|
OP_DzMakeLeader=0x1caa
|
||||||
OP_DzPlayerList=0x74ca
|
OP_DzPlayerList=0x74ca
|
||||||
OP_DzJoinExpeditionConfirm=0x1772
|
OP_DzExpeditionInvite=0x1772
|
||||||
OP_DzJoinExpeditionReply=0x3c13
|
OP_DzExpeditionInviteResponse=0x3c13
|
||||||
OP_DzExpeditionInfo=0x128e
|
OP_DzExpeditionInfo=0x128e
|
||||||
OP_DzMemberStatus=0x4661
|
OP_DzExpeditionLockoutTimers=0x3657
|
||||||
OP_DzLeaderStatus=0x226f
|
|
||||||
OP_DzExpeditionEndsWarning=0x1879
|
|
||||||
OP_DzExpeditionList=0x3657
|
|
||||||
OP_DzMemberList=0x74e4
|
OP_DzMemberList=0x74e4
|
||||||
|
OP_DzMemberListName=0x4661
|
||||||
|
OP_DzMemberListStatus=0x1d99
|
||||||
|
OP_DzSetLeaderName=0x226f
|
||||||
|
OP_DzExpeditionEndsWarning=0x1879
|
||||||
OP_DzCompass=0x35d3
|
OP_DzCompass=0x35d3
|
||||||
OP_DzChooseZone=0x0d8a
|
OP_DzChooseZone=0x0d8a
|
||||||
#0x1d99 was grouped with these too but I don't really know it's purpose.
|
OP_DzChooseZoneReply=0x5a67
|
||||||
|
|
||||||
# New Opcodes
|
# New Opcodes
|
||||||
OP_SpawnPositionUpdate=0x4656 #
|
OP_SpawnPositionUpdate=0x4656 #
|
||||||
|
|||||||
@ -348,16 +348,18 @@ OP_DzRemovePlayer=0x2ce8
|
|||||||
OP_DzSwapPlayer=0x2c3e
|
OP_DzSwapPlayer=0x2c3e
|
||||||
OP_DzMakeLeader=0x1a75
|
OP_DzMakeLeader=0x1a75
|
||||||
OP_DzPlayerList=0x5116
|
OP_DzPlayerList=0x5116
|
||||||
OP_DzJoinExpeditionConfirm=0x1793
|
OP_DzExpeditionInvite=0x1793
|
||||||
OP_DzJoinExpeditionReply=0x7a6f
|
OP_DzExpeditionInviteResponse=0x7a6f
|
||||||
OP_DzExpeditionInfo=0x60a6
|
OP_DzExpeditionInfo=0x60a6
|
||||||
OP_DzMemberStatus=0x0516
|
OP_DzExpeditionLockoutTimers=0x02ac
|
||||||
OP_DzLeaderStatus=0x79d3
|
|
||||||
OP_DzExpeditionEndsWarning=0x5153
|
|
||||||
OP_DzExpeditionList=0x02ac
|
|
||||||
OP_DzMemberList=0x5e14
|
OP_DzMemberList=0x5e14
|
||||||
|
OP_DzMemberListName=0x0516
|
||||||
|
OP_DzMemberListStatus=0x0000
|
||||||
|
OP_DzSetLeaderName=0x79d3
|
||||||
|
OP_DzExpeditionEndsWarning=0x5153
|
||||||
OP_DzCompass=0x531d
|
OP_DzCompass=0x531d
|
||||||
OP_DzChooseZone=0x3c5b
|
OP_DzChooseZone=0x3c5b
|
||||||
|
OP_DzChooseZoneReply=0x0000
|
||||||
|
|
||||||
#Looting
|
#Looting
|
||||||
OP_LootRequest=0x36E3 #Trevius 02/16/09
|
OP_LootRequest=0x36E3 #Trevius 02/16/09
|
||||||
|
|||||||
@ -297,17 +297,18 @@ OP_DzRemovePlayer=0x540b
|
|||||||
OP_DzSwapPlayer=0x794a
|
OP_DzSwapPlayer=0x794a
|
||||||
OP_DzMakeLeader=0x0ce9
|
OP_DzMakeLeader=0x0ce9
|
||||||
OP_DzPlayerList=0xada0
|
OP_DzPlayerList=0xada0
|
||||||
OP_DzJoinExpeditionConfirm=0x3817
|
OP_DzExpeditionInvite=0x3817
|
||||||
OP_DzJoinExpeditionReply=0x5da9
|
OP_DzExpeditionInviteResponse=0x5da9
|
||||||
OP_DzExpeditionInfo=0x98e
|
OP_DzExpeditionInfo=0x98e
|
||||||
OP_DzMemberStatus=0x1826
|
OP_DzExpeditionLockoutTimers=0x7c12
|
||||||
OP_DzLeaderStatus=0x7abc
|
|
||||||
OP_DzExpeditionEndsWarning=0x1c3f
|
|
||||||
OP_DzExpeditionList=0x7c12
|
|
||||||
OP_DzMemberList=0x9b6
|
OP_DzMemberList=0x9b6
|
||||||
|
OP_DzMemberListName=0x1826
|
||||||
|
OP_DzMemberListStatus=0x330d
|
||||||
|
OP_DzSetLeaderName=0x7abc
|
||||||
|
OP_DzExpeditionEndsWarning=0x1c3f
|
||||||
OP_DzCompass=0x28aa
|
OP_DzCompass=0x28aa
|
||||||
OP_DzChooseZone=0x1022
|
OP_DzChooseZone=0x1022
|
||||||
#0x330d is something but I'm not sure what yet.
|
OP_DzChooseZoneReply=0x20e7
|
||||||
|
|
||||||
#bazaar trader stuff stuff:
|
#bazaar trader stuff stuff:
|
||||||
#become and buy from
|
#become and buy from
|
||||||
|
|||||||
@ -377,16 +377,18 @@ OP_DzRemovePlayer=0x054e
|
|||||||
OP_DzSwapPlayer=0x4661
|
OP_DzSwapPlayer=0x4661
|
||||||
OP_DzMakeLeader=0x226f
|
OP_DzMakeLeader=0x226f
|
||||||
OP_DzPlayerList=0x74e4
|
OP_DzPlayerList=0x74e4
|
||||||
OP_DzJoinExpeditionConfirm=0x3c5e
|
OP_DzExpeditionInvite=0x3c5e
|
||||||
OP_DzJoinExpeditionReply=0x1154
|
OP_DzExpeditionInviteResponse=0x1154
|
||||||
OP_DzExpeditionInfo=0x1150
|
OP_DzExpeditionInfo=0x1150
|
||||||
OP_DzMemberStatus=0x2d17
|
OP_DzExpeditionLockoutTimers=0x70d8
|
||||||
OP_DzLeaderStatus=0x2caf
|
|
||||||
OP_DzExpeditionEndsWarning=0x6ac2
|
|
||||||
OP_DzExpeditionList=0x70d8
|
|
||||||
OP_DzMemberList=0x15c4
|
OP_DzMemberList=0x15c4
|
||||||
|
OP_DzMemberListName=0x2d17
|
||||||
|
OP_DzMemberListStatus=0x0d98
|
||||||
|
OP_DzSetLeaderName=0x2caf
|
||||||
|
OP_DzExpeditionEndsWarning=0x6ac2
|
||||||
OP_DzCompass=0x01cb
|
OP_DzCompass=0x01cb
|
||||||
OP_DzChooseZone=0x65e1
|
OP_DzChooseZone=0x65e1
|
||||||
|
OP_DzChooseZoneReply=0xa682
|
||||||
|
|
||||||
#shroud
|
#shroud
|
||||||
OP_ShroudSelectionWindow=0x72ad
|
OP_ShroudSelectionWindow=0x72ad
|
||||||
|
|||||||
@ -6126,8 +6126,8 @@ void Client::MarkSingleCompassLoc(float in_x, float in_y, float in_z, uint8 coun
|
|||||||
{
|
{
|
||||||
|
|
||||||
auto outapp = new EQApplicationPacket(OP_DzCompass, sizeof(ExpeditionInfo_Struct) +
|
auto outapp = new EQApplicationPacket(OP_DzCompass, sizeof(ExpeditionInfo_Struct) +
|
||||||
sizeof(ExpeditionCompassEntry_Struct) * count);
|
sizeof(DynamicZoneCompassEntry_Struct) * count);
|
||||||
ExpeditionCompass_Struct *ecs = (ExpeditionCompass_Struct*)outapp->pBuffer;
|
DynamicZoneCompass_Struct *ecs = (DynamicZoneCompass_Struct*)outapp->pBuffer;
|
||||||
//ecs->clientid = GetID();
|
//ecs->clientid = GetID();
|
||||||
ecs->count = count;
|
ecs->count = count;
|
||||||
|
|
||||||
|
|||||||
@ -788,16 +788,18 @@ luabind::scope lua_register_packet_opcodes() {
|
|||||||
luabind::value("DzRemovePlayer", static_cast<int>(OP_DzRemovePlayer)),
|
luabind::value("DzRemovePlayer", static_cast<int>(OP_DzRemovePlayer)),
|
||||||
luabind::value("DzSwapPlayer", static_cast<int>(OP_DzSwapPlayer)),
|
luabind::value("DzSwapPlayer", static_cast<int>(OP_DzSwapPlayer)),
|
||||||
luabind::value("DzMakeLeader", static_cast<int>(OP_DzMakeLeader)),
|
luabind::value("DzMakeLeader", static_cast<int>(OP_DzMakeLeader)),
|
||||||
luabind::value("DzJoinExpeditionConfirm", static_cast<int>(OP_DzJoinExpeditionConfirm)),
|
luabind::value("DzExpeditionInvite", static_cast<int>(OP_DzExpeditionInvite)),
|
||||||
luabind::value("DzJoinExpeditionReply", static_cast<int>(OP_DzJoinExpeditionReply)),
|
luabind::value("DzExpeditionInviteResponse", static_cast<int>(OP_DzExpeditionInviteResponse)),
|
||||||
luabind::value("DzExpeditionInfo", static_cast<int>(OP_DzExpeditionInfo)),
|
luabind::value("DzExpeditionInfo", static_cast<int>(OP_DzExpeditionInfo)),
|
||||||
luabind::value("DzMemberStatus", static_cast<int>(OP_DzMemberStatus)),
|
luabind::value("DzMemberListName", static_cast<int>(OP_DzMemberListName)),
|
||||||
luabind::value("DzLeaderStatus", static_cast<int>(OP_DzLeaderStatus)),
|
luabind::value("DzMemberListStatus", static_cast<int>(OP_DzMemberListStatus)),
|
||||||
|
luabind::value("DzSetLeaderName", static_cast<int>(OP_DzSetLeaderName)),
|
||||||
luabind::value("DzExpeditionEndsWarning", static_cast<int>(OP_DzExpeditionEndsWarning)),
|
luabind::value("DzExpeditionEndsWarning", static_cast<int>(OP_DzExpeditionEndsWarning)),
|
||||||
luabind::value("DzExpeditionList", static_cast<int>(OP_DzExpeditionList)),
|
luabind::value("DzExpeditionLockoutTimers", static_cast<int>(OP_DzExpeditionLockoutTimers)),
|
||||||
luabind::value("DzMemberList", static_cast<int>(OP_DzMemberList)),
|
luabind::value("DzMemberList", static_cast<int>(OP_DzMemberList)),
|
||||||
luabind::value("DzCompass", static_cast<int>(OP_DzCompass)),
|
luabind::value("DzCompass", static_cast<int>(OP_DzCompass)),
|
||||||
luabind::value("DzChooseZone", static_cast<int>(OP_DzChooseZone)),
|
luabind::value("DzChooseZone", static_cast<int>(OP_DzChooseZone)),
|
||||||
|
luabind::value("DzChooseZoneReply", static_cast<int>(OP_DzChooseZoneReply)),
|
||||||
luabind::value("BuffCreate", static_cast<int>(OP_BuffCreate)),
|
luabind::value("BuffCreate", static_cast<int>(OP_BuffCreate)),
|
||||||
luabind::value("GuildStatus", static_cast<int>(OP_GuildStatus)),
|
luabind::value("GuildStatus", static_cast<int>(OP_GuildStatus)),
|
||||||
luabind::value("BuffRemoveRequest", static_cast<int>(OP_BuffRemoveRequest)),
|
luabind::value("BuffRemoveRequest", static_cast<int>(OP_BuffRemoveRequest)),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user