mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-31 04:56:20 +00:00
Filled out a lot of the version stuff for a new client version (oh my lawd this could be easier!)
This commit is contained in:
+583
-57
@@ -126,94 +126,89 @@ namespace Larion
|
||||
|
||||
// ENCODE methods
|
||||
ENCODE(OP_LogServer) {
|
||||
EQApplicationPacket* in = *p;
|
||||
*p = nullptr;
|
||||
LogServer_Struct* emu = (LogServer_Struct*)in->pBuffer;
|
||||
|
||||
auto outapp = new EQApplicationPacket(OP_LogServer, 1840);
|
||||
auto buffer = outapp->pBuffer;
|
||||
SETUP_VAR_ENCODE(LogServer_Struct);
|
||||
ALLOC_LEN_ENCODE(1840);
|
||||
|
||||
//pvp
|
||||
if (emu->enable_pvp) {
|
||||
*(char*)&buffer[0x04] = 1;
|
||||
*(char*)&__packet->pBuffer[0x04] = 1;
|
||||
}
|
||||
|
||||
if (emu->enable_FV) {
|
||||
//FV sets these both to 1
|
||||
//one appears to enable the no drop flag the other just marks the server as special?
|
||||
*(char*)&buffer[0x08] = 1;
|
||||
*(char*)&buffer[0x0a] = 1;
|
||||
*(char*)&__packet->pBuffer[0x08] = 1;
|
||||
*(char*)&__packet->pBuffer[0x0a] = 1;
|
||||
}
|
||||
|
||||
//This has something to do with heirloom and prestige items but im not sure what it does
|
||||
//Seems to sit at 0
|
||||
*(char*)&buffer[0x71d] = 0;
|
||||
*(char*)&__packet->pBuffer[0x71d] = 0;
|
||||
|
||||
//not sure what this does, something to do with server select
|
||||
*(char*)&buffer[0x09] = 0;
|
||||
*(char*)&__packet->pBuffer[0x09] = 0;
|
||||
|
||||
//this appears to have some effect on the tradeskill system; disabling made by tags perhaps?
|
||||
*(char*)&buffer[0x0b] = 0;
|
||||
*(char*)&__packet->pBuffer[0x0b] = 0;
|
||||
|
||||
//not sure, setting it to the value ive seen
|
||||
*(char*)&buffer[0x0c] = 1;
|
||||
*(char*)&__packet->pBuffer[0x0c] = 1;
|
||||
|
||||
//Something to do with languages
|
||||
*(char*)&buffer[0x0d] = 1;
|
||||
*(char*)&__packet->pBuffer[0x0d] = 1;
|
||||
|
||||
//These seem to affect if server has betabuff enabled
|
||||
*(char*)&buffer[0x5c0] = 0;
|
||||
*(char*)&buffer[0x5c1] = 0;
|
||||
*(char*)&__packet->pBuffer[0x5c0] = 0;
|
||||
*(char*)&__packet->pBuffer[0x5c1] = 0;
|
||||
//This is set on test so it's probably indicating this is a test server
|
||||
*(char*)&buffer[0x5c2] = 0;
|
||||
*(char*)&__packet->pBuffer[0x5c2] = 0;
|
||||
|
||||
//not sure, but it's grouped with the beta and test stuff
|
||||
*(char*)&buffer[0x5c3] = 0;
|
||||
*(char*)&__packet->pBuffer[0x5c3] = 0;
|
||||
|
||||
//world short name
|
||||
strncpy((char*)&buffer[0x15], emu->worldshortname, 32);
|
||||
strncpy((char*)&__packet->pBuffer[0x15], emu->worldshortname, 32);
|
||||
|
||||
//not sure, affects some player calculation but didn't care to look more
|
||||
*(char*)&buffer[0x5c2] = 0;
|
||||
*(char*)&__packet->pBuffer[0x5c2] = 0;
|
||||
|
||||
//Looks right
|
||||
if (emu->enablemail) {
|
||||
*(char*)&buffer[0x5b5] = 1;
|
||||
*(char*)&__packet->pBuffer[0x5b5] = 1;
|
||||
}
|
||||
|
||||
//Looks right
|
||||
if (emu->enablevoicemacros) {
|
||||
*(char*)&buffer[0x5b4] = 1;
|
||||
*(char*)&__packet->pBuffer[0x5b4] = 1;
|
||||
}
|
||||
|
||||
//Not sure, sending what we've seen
|
||||
*(char*)&buffer[0x5b6] = 0;
|
||||
*(char*)&__packet->pBuffer[0x5b6] = 0;
|
||||
|
||||
//Not sure sending what we've seen
|
||||
*(char*)&buffer[0x5b8] = 1;
|
||||
*(char*)&__packet->pBuffer[0x5b8] = 1;
|
||||
|
||||
//Not sure sending what we've seen
|
||||
*(int32_t*)&buffer[0x5fc] = -1;
|
||||
*(int32_t*)&__packet->pBuffer[0x5fc] = -1;
|
||||
|
||||
//Test sets this to 1, everyone else seems to set it to 0
|
||||
*(int32_t*)&buffer[0x600] = 0;
|
||||
*(int32_t*)&__packet->pBuffer[0x600] = 0;
|
||||
|
||||
//Disassembly puts it next to code dealing with commands, ive not seen anyone send anything but 0
|
||||
*(char*)&buffer[0x705] = 0;
|
||||
*(char*)&__packet->pBuffer[0x705] = 0;
|
||||
|
||||
//Something about item restrictions, seems to always be set to 1
|
||||
*(char*)&buffer[0x710] = 0;
|
||||
*(char*)&__packet->pBuffer[0x710] = 0;
|
||||
|
||||
//This and 0x724 are often multiplied together in guild favor calcs, live and test send 1.0f
|
||||
*(float*)&buffer[0x720] = 1.0f;
|
||||
*(float*)&buffer[0x724] = 1.0f;
|
||||
*(float*)&__packet->pBuffer[0x720] = 1.0f;
|
||||
*(float*)&__packet->pBuffer[0x724] = 1.0f;
|
||||
|
||||
//This and 0x72c are often multiplied together in non-guild favor calcs, live and test send 1.0f
|
||||
*(float*)&buffer[0x728] = 1.0f;
|
||||
*(float*)&buffer[0x72c] = 1.0f;
|
||||
*(float*)&__packet->pBuffer[0x728] = 1.0f;
|
||||
*(float*)&__packet->pBuffer[0x72c] = 1.0f;
|
||||
|
||||
dest->FastQueuePacket(&outapp);
|
||||
safe_delete(in);
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_SendMembership) {
|
||||
@@ -224,31 +219,31 @@ namespace Larion
|
||||
eq->races = emu->races;
|
||||
eq->classes = emu->classes;
|
||||
eq->entrysize = 33;
|
||||
eq->entries[0] = -1;
|
||||
eq->entries[1] = -1;
|
||||
eq->entries[2] = -1;
|
||||
eq->entries[3] = -1;
|
||||
eq->entries[4] = -1;
|
||||
eq->entries[5] = -1;
|
||||
eq->entries[6] = 1;
|
||||
eq->entries[7] = 1;
|
||||
eq->entries[8] = 1;
|
||||
eq->entries[9] = -1;
|
||||
eq->entries[10] = 1;
|
||||
eq->entries[11] = -1;
|
||||
eq->entries[12] = -1;
|
||||
eq->entries[13] = 1;
|
||||
eq->entries[14] = 1;
|
||||
eq->entries[15] = 1;
|
||||
eq->entries[16] = 1;
|
||||
eq->entries[17] = 1;
|
||||
eq->entries[18] = 1;
|
||||
eq->entries[19] = -1;
|
||||
eq->entries[20] = -1;
|
||||
eq->entries[0] = -1; // Max AA Restriction
|
||||
eq->entries[1] = -1; // Max Level Restriction
|
||||
eq->entries[2] = -1; // Max Char Slots per Account (not used by client?)
|
||||
eq->entries[3] = -1; // 1 for Silver
|
||||
eq->entries[4] = -1; // Main Inventory Size
|
||||
eq->entries[5] = -1; // Max Platinum per level
|
||||
eq->entries[6] = 1; // Send Mail
|
||||
eq->entries[7] = 1; // Use Parcels?
|
||||
eq->entries[8] = 1; // Voice Chat
|
||||
eq->entries[9] = -1; // Merc Tiers
|
||||
eq->entries[10] = 1; // Create Guilds
|
||||
eq->entries[11] = -1; // Shared Bank Slots
|
||||
eq->entries[12] = -1; // Max Journal Quests
|
||||
eq->entries[13] = 1; // Housing Enabled
|
||||
eq->entries[14] = 1; // Prestiege
|
||||
eq->entries[15] = 1; // Broker System
|
||||
eq->entries[16] = 1; // Chat
|
||||
eq->entries[17] = 1; // Progression Server Access
|
||||
eq->entries[18] = 1; // Customer Support
|
||||
eq->entries[19] = -1; // Popup reminders?
|
||||
eq->entries[20] = -1; // Exit Popup?
|
||||
eq->entries[21] = 0;
|
||||
eq->entries[22] = 0;
|
||||
eq->entries[23] = 0;
|
||||
eq->entries[24] = 0;
|
||||
eq->entries[23] = 0; // This is the highest we actually see in detail entries
|
||||
eq->entries[24] = 0;
|
||||
eq->entries[25] = 0;
|
||||
eq->entries[26] = 0;
|
||||
eq->entries[27] = 0;
|
||||
@@ -262,7 +257,538 @@ namespace Larion
|
||||
}
|
||||
|
||||
ENCODE(OP_SendMembershipDetails) {
|
||||
SETUP_VAR_ENCODE(Membership_Details_Struct);
|
||||
|
||||
SerializeBuffer buffer;
|
||||
// Generated via script; we should put this in a better format later
|
||||
// count
|
||||
buffer.WriteUInt32(96);
|
||||
|
||||
// settings
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(0);
|
||||
buffer.WriteInt32(250);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(0);
|
||||
buffer.WriteInt32(1000);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(1);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(1);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(2);
|
||||
buffer.WriteInt32(2);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(0);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(0);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(2);
|
||||
buffer.WriteInt32(4);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(3);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(1);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(1);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(3);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(4);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(2);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(2);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(4);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(5);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(3);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(3);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(5);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(6);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(4);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(4);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(6);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(7);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(5);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(5);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(7);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(8);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(6);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(6);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(8);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(9);
|
||||
buffer.WriteInt32(5);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(7);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(7);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(9);
|
||||
buffer.WriteInt32(5);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(10);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(8);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(8);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(11);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(10);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(9);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(9);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(12);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(11);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(10);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(10);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(13);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(12);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(11);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(11);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(14);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(13);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(12);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(12);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(15);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(14);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(13);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(13);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(16);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(15);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(14);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(14);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(17);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(16);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(15);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(15);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(18);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(17);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(16);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(16);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(19);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(18);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(17);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(17);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(20);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(19);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(18);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(18);
|
||||
buffer.WriteInt32(1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(21);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(20);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(19);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(19);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(22);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(21);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(20);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(20);
|
||||
buffer.WriteInt32(-1);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(21);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(0);
|
||||
buffer.WriteUInt32(23);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(22);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(21);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(22);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(1);
|
||||
buffer.WriteUInt32(23);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(22);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(2);
|
||||
buffer.WriteUInt32(23);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
buffer.WriteUInt8(3);
|
||||
buffer.WriteUInt32(23);
|
||||
buffer.WriteInt32(0);
|
||||
|
||||
// race count
|
||||
buffer.WriteUInt32(17);
|
||||
|
||||
// races
|
||||
buffer.WriteUInt32(1);
|
||||
buffer.WriteUInt32(131071);
|
||||
|
||||
buffer.WriteUInt32(333);
|
||||
buffer.WriteUInt32(131071);
|
||||
|
||||
buffer.WriteUInt32(90287);
|
||||
buffer.WriteUInt32(131071);
|
||||
|
||||
buffer.WriteUInt32(90289);
|
||||
buffer.WriteUInt32(16);
|
||||
|
||||
buffer.WriteUInt32(90290);
|
||||
buffer.WriteUInt32(32);
|
||||
|
||||
buffer.WriteUInt32(90291);
|
||||
buffer.WriteUInt32(64);
|
||||
|
||||
buffer.WriteUInt32(90292);
|
||||
buffer.WriteUInt32(128);
|
||||
|
||||
buffer.WriteUInt32(90293);
|
||||
buffer.WriteUInt32(256);
|
||||
|
||||
buffer.WriteUInt32(90294);
|
||||
buffer.WriteUInt32(512);
|
||||
|
||||
buffer.WriteUInt32(90295);
|
||||
buffer.WriteUInt32(1024);
|
||||
|
||||
buffer.WriteUInt32(90296);
|
||||
buffer.WriteUInt32(2048);
|
||||
|
||||
buffer.WriteUInt32(90297);
|
||||
buffer.WriteUInt32(8192);
|
||||
|
||||
buffer.WriteUInt32(90298);
|
||||
buffer.WriteUInt32(16384);
|
||||
|
||||
buffer.WriteUInt32(90299);
|
||||
buffer.WriteUInt32(32768);
|
||||
|
||||
buffer.WriteUInt32(90300);
|
||||
buffer.WriteUInt32(65536);
|
||||
|
||||
buffer.WriteUInt32(2012271);
|
||||
buffer.WriteUInt32(131071);
|
||||
|
||||
buffer.WriteUInt32(2012277);
|
||||
buffer.WriteUInt32(131071);
|
||||
|
||||
// classes count
|
||||
buffer.WriteUInt32(17);
|
||||
|
||||
// classes
|
||||
buffer.WriteUInt32(1);
|
||||
buffer.WriteUInt32(131071);
|
||||
|
||||
buffer.WriteUInt32(333);
|
||||
buffer.WriteUInt32(131071);
|
||||
|
||||
buffer.WriteUInt32(90287);
|
||||
buffer.WriteUInt32(131071);
|
||||
|
||||
buffer.WriteUInt32(90301);
|
||||
buffer.WriteUInt32(8);
|
||||
|
||||
buffer.WriteUInt32(90302);
|
||||
buffer.WriteUInt32(16);
|
||||
|
||||
buffer.WriteUInt32(90303);
|
||||
buffer.WriteUInt32(32);
|
||||
|
||||
buffer.WriteUInt32(90304);
|
||||
buffer.WriteUInt32(64);
|
||||
|
||||
buffer.WriteUInt32(90305);
|
||||
buffer.WriteUInt32(128);
|
||||
|
||||
buffer.WriteUInt32(90306);
|
||||
buffer.WriteUInt32(256);
|
||||
|
||||
buffer.WriteUInt32(90307);
|
||||
buffer.WriteUInt32(1024);
|
||||
|
||||
buffer.WriteUInt32(90308);
|
||||
buffer.WriteUInt32(2048);
|
||||
|
||||
buffer.WriteUInt32(90309);
|
||||
buffer.WriteUInt32(8192);
|
||||
|
||||
buffer.WriteUInt32(90310);
|
||||
buffer.WriteUInt32(16384);
|
||||
|
||||
buffer.WriteUInt32(90311);
|
||||
buffer.WriteUInt32(32768);
|
||||
|
||||
buffer.WriteUInt32(90312);
|
||||
buffer.WriteUInt32(65536);
|
||||
|
||||
buffer.WriteUInt32(2012271);
|
||||
buffer.WriteUInt32(131071);
|
||||
|
||||
buffer.WriteUInt32(2012277);
|
||||
buffer.WriteUInt32(131071);
|
||||
|
||||
// exit string length
|
||||
buffer.WriteUInt32(0);
|
||||
|
||||
__packet->size = buffer.size();
|
||||
__packet->pBuffer = new unsigned char[__packet->size];
|
||||
memcpy(__packet->pBuffer, buffer.buffer(), __packet->size);
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_SendMaxCharacters) {
|
||||
ENCODE_LENGTH_EXACT(MaxCharacters_Struct);
|
||||
SETUP_DIRECT_ENCODE(MaxCharacters_Struct, structs::MaxCharacters_Struct);
|
||||
|
||||
//OUT(max_chars);
|
||||
eq->max_chars = 8; //needs to be fixed
|
||||
eq->marketplace_chars = 0;
|
||||
eq->unknown008 = -1;
|
||||
eq->unknown00c = 196608;
|
||||
eq->unknown010 = 0;
|
||||
eq->unknown014 = 0;
|
||||
eq->unknown018 = 0;
|
||||
eq->unknown01c = 0;
|
||||
eq->unknown020 = -1;
|
||||
eq->unknown024 = 0;
|
||||
eq->unknown028 = 0;
|
||||
eq->unknown02c = 0;
|
||||
eq->unknown030 = 0;
|
||||
eq->unknown034 = 0;
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
// DECODE methods
|
||||
|
||||
@@ -16,3 +16,269 @@
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "larion_limits.h"
|
||||
|
||||
#include "../strings.h"
|
||||
|
||||
|
||||
int16 Larion::invtype::GetInvTypeSize(int16 inv_type)
|
||||
{
|
||||
switch (inv_type) {
|
||||
case invtype::typePossessions:
|
||||
return invtype::POSSESSIONS_SIZE;
|
||||
case invtype::typeBank:
|
||||
return invtype::BANK_SIZE;
|
||||
case invtype::typeSharedBank:
|
||||
return invtype::SHARED_BANK_SIZE;
|
||||
case invtype::typeTrade:
|
||||
return invtype::TRADE_SIZE;
|
||||
case invtype::typeWorld:
|
||||
return invtype::WORLD_SIZE;
|
||||
case invtype::typeLimbo:
|
||||
return invtype::LIMBO_SIZE;
|
||||
case invtype::typeTribute:
|
||||
return invtype::TRIBUTE_SIZE;
|
||||
case invtype::typeTrophyTribute:
|
||||
return invtype::TROPHY_TRIBUTE_SIZE;
|
||||
case invtype::typeGuildTribute:
|
||||
return invtype::GUILD_TRIBUTE_SIZE;
|
||||
case invtype::typeMerchant:
|
||||
return invtype::MERCHANT_SIZE;
|
||||
case invtype::typeDeleted:
|
||||
return invtype::DELETED_SIZE;
|
||||
case invtype::typeCorpse:
|
||||
return invtype::CORPSE_SIZE;
|
||||
case invtype::typeBazaar:
|
||||
return invtype::BAZAAR_SIZE;
|
||||
case invtype::typeInspect:
|
||||
return invtype::INSPECT_SIZE;
|
||||
case invtype::typeRealEstate:
|
||||
return invtype::REAL_ESTATE_SIZE;
|
||||
case invtype::typeViewMODPC:
|
||||
return invtype::VIEW_MOD_PC_SIZE;
|
||||
case invtype::typeViewMODBank:
|
||||
return invtype::VIEW_MOD_BANK_SIZE;
|
||||
case invtype::typeViewMODSharedBank:
|
||||
return invtype::VIEW_MOD_SHARED_BANK_SIZE;
|
||||
case invtype::typeViewMODLimbo:
|
||||
return invtype::VIEW_MOD_LIMBO_SIZE;
|
||||
case invtype::typeAltStorage:
|
||||
return invtype::ALT_STORAGE_SIZE;
|
||||
case invtype::typeArchived:
|
||||
return invtype::ARCHIVED_SIZE;
|
||||
case invtype::typeMail:
|
||||
return invtype::MAIL_SIZE;
|
||||
case invtype::typeGuildTrophyTribute:
|
||||
return invtype::GUILD_TROPHY_TRIBUTE_SIZE;
|
||||
case invtype::typeKrono:
|
||||
return invtype::KRONO_SIZE;
|
||||
case invtype::typeOther:
|
||||
return invtype::OTHER_SIZE;
|
||||
default:
|
||||
return INULL;
|
||||
}
|
||||
}
|
||||
|
||||
const char* Larion::invtype::GetInvTypeName(int16 inv_type)
|
||||
{
|
||||
switch (inv_type) {
|
||||
case invtype::TYPE_INVALID:
|
||||
return "Invalid Type";
|
||||
case invtype::typePossessions:
|
||||
return "Possessions";
|
||||
case invtype::typeBank:
|
||||
return "Bank";
|
||||
case invtype::typeSharedBank:
|
||||
return "Shared Bank";
|
||||
case invtype::typeTrade:
|
||||
return "Trade";
|
||||
case invtype::typeWorld:
|
||||
return "World";
|
||||
case invtype::typeLimbo:
|
||||
return "Limbo";
|
||||
case invtype::typeTribute:
|
||||
return "Tribute";
|
||||
case invtype::typeTrophyTribute:
|
||||
return "Trophy Tribute";
|
||||
case invtype::typeGuildTribute:
|
||||
return "Guild Tribute";
|
||||
case invtype::typeMerchant:
|
||||
return "Merchant";
|
||||
case invtype::typeDeleted:
|
||||
return "Deleted";
|
||||
case invtype::typeCorpse:
|
||||
return "Corpse";
|
||||
case invtype::typeBazaar:
|
||||
return "Bazaar";
|
||||
case invtype::typeInspect:
|
||||
return "Inspect";
|
||||
case invtype::typeRealEstate:
|
||||
return "Real Estate";
|
||||
case invtype::typeViewMODPC:
|
||||
return "View MOD PC";
|
||||
case invtype::typeViewMODBank:
|
||||
return "View MOD Bank";
|
||||
case invtype::typeViewMODSharedBank:
|
||||
return "View MOD Shared Bank";
|
||||
case invtype::typeViewMODLimbo:
|
||||
return "View MOD Limbo";
|
||||
case invtype::typeAltStorage:
|
||||
return "Alt Storage";
|
||||
case invtype::typeArchived:
|
||||
return "Archived";
|
||||
case invtype::typeMail:
|
||||
return "Mail";
|
||||
case invtype::typeGuildTrophyTribute:
|
||||
return "Guild Trophy Tribute";
|
||||
case invtype::typeKrono:
|
||||
return "Krono";
|
||||
case invtype::typeOther:
|
||||
return "Other";
|
||||
default:
|
||||
return "Unknown Type";
|
||||
}
|
||||
}
|
||||
|
||||
bool Larion::invtype::IsInvTypePersistent(int16 inv_type)
|
||||
{
|
||||
switch (inv_type) {
|
||||
case invtype::typePossessions:
|
||||
case invtype::typeBank:
|
||||
case invtype::typeSharedBank:
|
||||
case invtype::typeTrade:
|
||||
case invtype::typeWorld:
|
||||
case invtype::typeLimbo:
|
||||
case invtype::typeTribute:
|
||||
case invtype::typeTrophyTribute:
|
||||
case invtype::typeGuildTribute:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const char* Larion::invslot::GetInvPossessionsSlotName(int16 inv_slot)
|
||||
{
|
||||
switch (inv_slot) {
|
||||
case invslot::SLOT_INVALID:
|
||||
return "Invalid Slot";
|
||||
case invslot::slotCharm:
|
||||
return "Charm";
|
||||
case invslot::slotEar1:
|
||||
return "Ear 1";
|
||||
case invslot::slotHead:
|
||||
return "Head";
|
||||
case invslot::slotFace:
|
||||
return "Face";
|
||||
case invslot::slotEar2:
|
||||
return "Ear 2";
|
||||
case invslot::slotNeck:
|
||||
return "Neck";
|
||||
case invslot::slotShoulders:
|
||||
return "Shoulders";
|
||||
case invslot::slotArms:
|
||||
return "Arms";
|
||||
case invslot::slotBack:
|
||||
return "Back";
|
||||
case invslot::slotWrist1:
|
||||
return "Wrist 1";
|
||||
case invslot::slotWrist2:
|
||||
return "Wrist 2";
|
||||
case invslot::slotRange:
|
||||
return "Range";
|
||||
case invslot::slotHands:
|
||||
return "Hands";
|
||||
case invslot::slotPrimary:
|
||||
return "Primary";
|
||||
case invslot::slotSecondary:
|
||||
return "Secondary";
|
||||
case invslot::slotFinger1:
|
||||
return "Finger 1";
|
||||
case invslot::slotFinger2:
|
||||
return "Finger 2";
|
||||
case invslot::slotChest:
|
||||
return "Chest";
|
||||
case invslot::slotLegs:
|
||||
return "Legs";
|
||||
case invslot::slotFeet:
|
||||
return "Feet";
|
||||
case invslot::slotWaist:
|
||||
return "Waist";
|
||||
case invslot::slotPowerSource:
|
||||
return "Power Source";
|
||||
case invslot::slotAmmo:
|
||||
return "Ammo";
|
||||
case invslot::slotGeneral1:
|
||||
return "General 1";
|
||||
case invslot::slotGeneral2:
|
||||
return "General 2";
|
||||
case invslot::slotGeneral3:
|
||||
return "General 3";
|
||||
case invslot::slotGeneral4:
|
||||
return "General 4";
|
||||
case invslot::slotGeneral5:
|
||||
return "General 5";
|
||||
case invslot::slotGeneral6:
|
||||
return "General 6";
|
||||
case invslot::slotGeneral7:
|
||||
return "General 7";
|
||||
case invslot::slotGeneral8:
|
||||
return "General 8";
|
||||
case invslot::slotGeneral9:
|
||||
return "General 9";
|
||||
case invslot::slotGeneral10:
|
||||
return "General 10";
|
||||
case invslot::slotCursor:
|
||||
return "Cursor";
|
||||
default:
|
||||
return "Unknown Slot";
|
||||
}
|
||||
}
|
||||
|
||||
const char* Larion::invslot::GetInvSlotName(int16 inv_type, int16 inv_slot)
|
||||
{
|
||||
if (inv_type == invtype::typePossessions)
|
||||
return invslot::GetInvPossessionsSlotName(inv_slot);
|
||||
|
||||
int16 type_size = invtype::GetInvTypeSize(inv_type);
|
||||
|
||||
if (!type_size || inv_slot == invslot::SLOT_INVALID)
|
||||
return "Invalid Slot";
|
||||
|
||||
if ((inv_slot + 1) >= type_size)
|
||||
return "Unknown Slot";
|
||||
|
||||
static std::string ret_str;
|
||||
ret_str = StringFormat("Slot %i", (inv_slot + 1));
|
||||
|
||||
return ret_str.c_str();
|
||||
}
|
||||
|
||||
const char* Larion::invbag::GetInvBagIndexName(int16 bag_index)
|
||||
{
|
||||
if (bag_index == invbag::SLOT_INVALID)
|
||||
return "Invalid Bag";
|
||||
|
||||
if (bag_index >= invbag::SLOT_COUNT)
|
||||
return "Unknown Bag";
|
||||
|
||||
static std::string ret_str;
|
||||
ret_str = StringFormat("Bag %i", (bag_index + 1));
|
||||
|
||||
return ret_str.c_str();
|
||||
}
|
||||
|
||||
const char* Larion::invaug::GetInvAugIndexName(int16 aug_index)
|
||||
{
|
||||
if (aug_index == invaug::SOCKET_INVALID)
|
||||
return "Invalid Augment";
|
||||
|
||||
if (aug_index >= invaug::SOCKET_COUNT)
|
||||
return "Unknown Augment";
|
||||
|
||||
static std::string ret_str;
|
||||
ret_str = StringFormat("Augment %i", (aug_index + 1));
|
||||
|
||||
return ret_str.c_str();
|
||||
}
|
||||
|
||||
@@ -20,11 +20,309 @@
|
||||
#ifndef COMMON_LARION_LIMITS_H
|
||||
#define COMMON_LARION_LIMITS_H
|
||||
|
||||
#include "../types.h"
|
||||
#include "../emu_versions.h"
|
||||
#include "../skills.h"
|
||||
|
||||
namespace Larion
|
||||
{
|
||||
|
||||
// put constants here and #include appropriately
|
||||
const int16 IINVALID = -1;
|
||||
const int16 INULL = 0;
|
||||
|
||||
namespace inventory {
|
||||
inline EQ::versions::ClientVersion GetInventoryRef() { return EQ::versions::ClientVersion::Larion; }
|
||||
|
||||
const bool ConcatenateInvTypeLimbo = false;
|
||||
|
||||
const bool AllowOverLevelEquipment = true;
|
||||
|
||||
const bool AllowEmptyBagInBag = true;
|
||||
const bool AllowClickCastFromBag = true;
|
||||
|
||||
} /*inventory*/
|
||||
|
||||
namespace invtype {
|
||||
inline EQ::versions::ClientVersion GetInvTypeRef() { return EQ::versions::ClientVersion::Larion; }
|
||||
|
||||
namespace enum_ {
|
||||
enum InventoryTypes : int16 {
|
||||
typePossessions = INULL,
|
||||
typeBank,
|
||||
typeSharedBank,
|
||||
typeTrade,
|
||||
typeWorld,
|
||||
typeLimbo,
|
||||
typeTribute,
|
||||
typeTrophyTribute,
|
||||
typeGuildTribute,
|
||||
typeMerchant,
|
||||
typeDeleted,
|
||||
typeCorpse,
|
||||
typeBazaar,
|
||||
typeInspect,
|
||||
typeRealEstate,
|
||||
typeViewMODPC,
|
||||
typeViewMODBank,
|
||||
typeViewMODSharedBank,
|
||||
typeViewMODLimbo,
|
||||
typeAltStorage,
|
||||
typeArchived,
|
||||
typeMail,
|
||||
typeGuildTrophyTribute,
|
||||
typeKrono,
|
||||
typeOther
|
||||
};
|
||||
|
||||
} // namespace enum_
|
||||
using namespace enum_;
|
||||
|
||||
const int16 POSSESSIONS_SIZE = 34;
|
||||
const int16 BANK_SIZE = 24;
|
||||
const int16 SHARED_BANK_SIZE = 2;
|
||||
const int16 TRADE_SIZE = 8;
|
||||
const int16 WORLD_SIZE = 10;
|
||||
const int16 LIMBO_SIZE = 36;
|
||||
const int16 TRIBUTE_SIZE = 5;
|
||||
const int16 TROPHY_TRIBUTE_SIZE = 0;//unknown
|
||||
const int16 GUILD_TRIBUTE_SIZE = 2;//unverified
|
||||
const int16 MERCHANT_SIZE = 200;
|
||||
const int16 DELETED_SIZE = 0;//unknown - "Recovery Tab"
|
||||
const int16 CORPSE_SIZE = POSSESSIONS_SIZE;
|
||||
const int16 BAZAAR_SIZE = 200;
|
||||
const int16 INSPECT_SIZE = 23;
|
||||
const int16 REAL_ESTATE_SIZE = 0;//unknown
|
||||
const int16 VIEW_MOD_PC_SIZE = POSSESSIONS_SIZE;
|
||||
const int16 VIEW_MOD_BANK_SIZE = BANK_SIZE;
|
||||
const int16 VIEW_MOD_SHARED_BANK_SIZE = SHARED_BANK_SIZE;
|
||||
const int16 VIEW_MOD_LIMBO_SIZE = LIMBO_SIZE;
|
||||
const int16 ALT_STORAGE_SIZE = 0;//unknown - "Shroud Bank"
|
||||
const int16 ARCHIVED_SIZE = 0;//unknown
|
||||
const int16 MAIL_SIZE = 0;//unknown
|
||||
const int16 GUILD_TROPHY_TRIBUTE_SIZE = 0;//unknown
|
||||
const int16 KRONO_SIZE = 0;//unknown
|
||||
const int16 OTHER_SIZE = 0;//unknown
|
||||
|
||||
const int16 TRADE_NPC_SIZE = 4; // defined by implication
|
||||
|
||||
const int16 TYPE_INVALID = IINVALID;
|
||||
const int16 TYPE_BEGIN = typePossessions;
|
||||
const int16 TYPE_END = typeOther;
|
||||
const int16 TYPE_COUNT = (TYPE_END - TYPE_BEGIN) + 1;
|
||||
|
||||
int16 GetInvTypeSize(int16 inv_type);
|
||||
const char* GetInvTypeName(int16 inv_type);
|
||||
|
||||
bool IsInvTypePersistent(int16 inv_type);
|
||||
|
||||
} /*invtype*/
|
||||
|
||||
namespace invslot {
|
||||
inline EQ::versions::ClientVersion GetInvSlotRef() { return EQ::versions::ClientVersion::Larion; }
|
||||
|
||||
namespace enum_ {
|
||||
enum InventorySlots : int16 {
|
||||
slotCharm = INULL,
|
||||
slotEar1,
|
||||
slotHead,
|
||||
slotFace,
|
||||
slotEar2,
|
||||
slotNeck,
|
||||
slotShoulders,
|
||||
slotArms,
|
||||
slotBack,
|
||||
slotWrist1,
|
||||
slotWrist2,
|
||||
slotRange,
|
||||
slotHands,
|
||||
slotPrimary,
|
||||
slotSecondary,
|
||||
slotFinger1,
|
||||
slotFinger2,
|
||||
slotChest,
|
||||
slotLegs,
|
||||
slotFeet,
|
||||
slotWaist,
|
||||
slotPowerSource,
|
||||
slotAmmo,
|
||||
slotGeneral1,
|
||||
slotGeneral2,
|
||||
slotGeneral3,
|
||||
slotGeneral4,
|
||||
slotGeneral5,
|
||||
slotGeneral6,
|
||||
slotGeneral7,
|
||||
slotGeneral8,
|
||||
slotGeneral9,
|
||||
slotGeneral10,
|
||||
slotCursor
|
||||
};
|
||||
|
||||
constexpr int16 format_as(InventorySlots slot) { return static_cast<int16>(slot); }
|
||||
} // namespace enum_
|
||||
using namespace enum_;
|
||||
|
||||
const int16 SLOT_INVALID = IINVALID;
|
||||
const int16 SLOT_BEGIN = INULL;
|
||||
|
||||
const int16 POSSESSIONS_BEGIN = slotCharm;
|
||||
const int16 POSSESSIONS_END = slotCursor;
|
||||
const int16 POSSESSIONS_COUNT = (POSSESSIONS_END - POSSESSIONS_BEGIN) + 1;
|
||||
|
||||
const int16 EQUIPMENT_BEGIN = slotCharm;
|
||||
const int16 EQUIPMENT_END = slotAmmo;
|
||||
const int16 EQUIPMENT_COUNT = (EQUIPMENT_END - EQUIPMENT_BEGIN) + 1;
|
||||
|
||||
const int16 GENERAL_BEGIN = slotGeneral1;
|
||||
const int16 GENERAL_END = slotGeneral10;
|
||||
const int16 GENERAL_COUNT = (GENERAL_END - GENERAL_BEGIN) + 1;
|
||||
|
||||
const int16 BONUS_BEGIN = invslot::slotCharm;
|
||||
const int16 BONUS_STAT_END = invslot::slotPowerSource;
|
||||
const int16 BONUS_SKILL_END = invslot::slotAmmo;
|
||||
|
||||
const int16 CORPSE_BEGIN = invslot::slotGeneral1;
|
||||
const int16 CORPSE_END = invslot::slotGeneral1 + invslot::slotCursor;
|
||||
|
||||
const uint64 EQUIPMENT_BITMASK = 0x00000000007FFFFF;
|
||||
const uint64 GENERAL_BITMASK = 0x00000001FF800000;
|
||||
const uint64 CURSOR_BITMASK = 0x0000000200000000;
|
||||
const uint64 POSSESSIONS_BITMASK = (EQUIPMENT_BITMASK | GENERAL_BITMASK | CURSOR_BITMASK); // based on 34-slot count (RoF+)
|
||||
const uint64 CORPSE_BITMASK = (GENERAL_BITMASK | CURSOR_BITMASK | (EQUIPMENT_BITMASK << 34)); // based on 34-slot count (RoF+)
|
||||
|
||||
|
||||
const char* GetInvPossessionsSlotName(int16 inv_slot);
|
||||
const char* GetInvSlotName(int16 inv_type, int16 inv_slot);
|
||||
|
||||
} /*invslot*/
|
||||
|
||||
namespace invbag {
|
||||
inline EQ::versions::ClientVersion GetInvBagRef() { return EQ::versions::ClientVersion::Larion; }
|
||||
|
||||
const int16 SLOT_INVALID = IINVALID;
|
||||
const int16 SLOT_BEGIN = INULL;
|
||||
const int16 SLOT_END = 9; //254;
|
||||
const int16 SLOT_COUNT = 10; //255; // server Size will be 255..unsure what actual client is (test)
|
||||
|
||||
const char* GetInvBagIndexName(int16 bag_index);
|
||||
|
||||
} /*invbag*/
|
||||
|
||||
namespace invaug {
|
||||
inline EQ::versions::ClientVersion GetInvAugRef() { return EQ::versions::ClientVersion::Larion; }
|
||||
|
||||
const int16 SOCKET_INVALID = IINVALID;
|
||||
const int16 SOCKET_BEGIN = INULL;
|
||||
const int16 SOCKET_END = 5;
|
||||
const int16 SOCKET_COUNT = 6;
|
||||
|
||||
const char* GetInvAugIndexName(int16 aug_index);
|
||||
|
||||
} /*invaug*/
|
||||
|
||||
namespace item {
|
||||
inline EQ::versions::ClientVersion GetItemRef() { return EQ::versions::ClientVersion::Larion; }
|
||||
|
||||
//enum Unknown : int { // looks like item class..but, RoF has it too - nothing in UF-
|
||||
// Unknown1 = 0,
|
||||
// Unknown2 = 1,
|
||||
// Unknown3 = 2,
|
||||
// Unknown4 = 5 // krono?
|
||||
//};
|
||||
|
||||
enum ItemPacketType : int {
|
||||
ItemPacketMerchant = 100,
|
||||
ItemPacketTradeView = 101,
|
||||
ItemPacketLoot = 102,
|
||||
ItemPacketTrade = 103,
|
||||
ItemPacketCharInventory = 105,
|
||||
ItemPacketLimbo = 106,
|
||||
ItemPacketWorldContainer = 107,
|
||||
ItemPacketTributeItem = 108,
|
||||
ItemPacketGuildTribute = 109,
|
||||
ItemPacket10 = 110,
|
||||
ItemPacket11 = 111,
|
||||
ItemPacket12 = 112,
|
||||
ItemPacketRecovery = 113,
|
||||
ItemPacket14 = 115 // Parcel? adds to merchant window too
|
||||
};
|
||||
|
||||
} /*item*/
|
||||
|
||||
namespace profile {
|
||||
inline EQ::versions::ClientVersion GetProfileRef() { return EQ::versions::ClientVersion::Larion; }
|
||||
|
||||
const int16 BANDOLIERS_SIZE = 20; // number of bandolier instances
|
||||
const int16 BANDOLIER_ITEM_COUNT = 4; // number of equipment slots in bandolier instance
|
||||
|
||||
const int16 POTION_BELT_SIZE = 5;
|
||||
|
||||
const int16 SKILL_ARRAY_SIZE = 100;
|
||||
|
||||
} /*profile*/
|
||||
|
||||
namespace constants {
|
||||
inline EQ::versions::ClientVersion GetConstantsRef() { return EQ::versions::ClientVersion::Larion; }
|
||||
|
||||
const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::RoF;
|
||||
const uint32 EXPANSION_BIT = EQ::expansions::bitRoF;
|
||||
const uint32 EXPANSIONS_MASK = EQ::expansions::maskRoF;
|
||||
|
||||
const size_t CHARACTER_CREATION_LIMIT = 12;
|
||||
|
||||
const size_t SAY_LINK_BODY_SIZE = 56;
|
||||
const uint32 MAX_GUILD_ID = 50000;
|
||||
|
||||
} /*constants*/
|
||||
|
||||
namespace behavior {
|
||||
inline EQ::versions::ClientVersion GetBehaviorRef() { return EQ::versions::ClientVersion::Larion; }
|
||||
|
||||
const bool CoinHasWeight = false;
|
||||
|
||||
} /*behavior*/
|
||||
|
||||
namespace skills {
|
||||
inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::Larion; }
|
||||
|
||||
const size_t LastUsableSkill = EQ::skills::Skill2HPiercing;
|
||||
|
||||
} /*skills*/
|
||||
|
||||
namespace spells {
|
||||
inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::Larion; }
|
||||
|
||||
enum class CastingSlot : uint32 {
|
||||
Gem1 = 0,
|
||||
Gem2 = 1,
|
||||
Gem3 = 2,
|
||||
Gem4 = 3,
|
||||
Gem5 = 4,
|
||||
Gem6 = 5,
|
||||
Gem7 = 6,
|
||||
Gem8 = 7,
|
||||
Gem9 = 8,
|
||||
Gem10 = 9,
|
||||
Gem11 = 10,
|
||||
Gem12 = 11,
|
||||
MaxGems = 16, // fallacy..only 12 slot are useable...
|
||||
Item = 12,
|
||||
Discipline = 13,
|
||||
AltAbility = 0xFF
|
||||
};
|
||||
|
||||
const int SPELL_ID_MAX = 45000;
|
||||
const int SPELLBOOK_SIZE = 720;
|
||||
const int SPELL_GEM_COUNT = static_cast<uint32>(CastingSlot::MaxGems);
|
||||
|
||||
const int LONG_BUFFS = 42;
|
||||
const int SHORT_BUFFS = 20;
|
||||
const int DISC_BUFFS = 1;
|
||||
const int TOTAL_BUFFS = LONG_BUFFS + SHORT_BUFFS + DISC_BUFFS;
|
||||
const int NPC_BUFFS = 97;
|
||||
const int PET_BUFFS = NPC_BUFFS;
|
||||
const int MERC_BUFFS = LONG_BUFFS;
|
||||
|
||||
} /*spells*/
|
||||
|
||||
}; /* Larion */
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
E(OP_LogServer)
|
||||
E(OP_SendMembership)
|
||||
E(OP_SendMembershipDetails)
|
||||
E(OP_SendMaxCharacters)
|
||||
|
||||
#undef E
|
||||
#undef D
|
||||
|
||||
@@ -37,9 +37,9 @@ namespace Larion {
|
||||
|
||||
struct Membership_Setting_Struct
|
||||
{
|
||||
/*000*/ uint8 setting_index; // 0, 1, 2 or 3
|
||||
/*001*/ uint32 setting_id; // 0 to 23
|
||||
/*005*/ int32 setting_value; // All can be 0, 1, or -1
|
||||
/*000*/ uint8 setting_index; // 0, 1, 2 or 3: f2p, silver, gold, platinum?
|
||||
/*001*/ uint32 setting_id; // 0 to 23 actually seen but the OP_Membership packet has up to 32
|
||||
/*005*/ int32 setting_value;
|
||||
/*009*/
|
||||
};
|
||||
|
||||
@@ -55,6 +55,24 @@ namespace Larion {
|
||||
/*480*/ //char exit_url[42]; // Upgrade to Silver or Gold Membership URL
|
||||
};
|
||||
|
||||
struct MaxCharacters_Struct {
|
||||
/*000*/ uint32 max_chars;
|
||||
/*004*/ uint32 marketplace_chars;
|
||||
/*008*/ int32 unknown008; //some of these probably deal with heroic characters or something
|
||||
/*00c*/ int32 unknown00c;
|
||||
/*010*/ int32 unknown010;
|
||||
/*014*/ int32 unknown014;
|
||||
/*018*/ int32 unknown018;
|
||||
/*01c*/ int32 unknown01c;
|
||||
/*020*/ int32 unknown020;
|
||||
/*024*/ int32 unknown024;
|
||||
/*028*/ int32 unknown028;
|
||||
/*02c*/ int32 unknown02c;
|
||||
/*030*/ int32 unknown030;
|
||||
/*034*/ int32 unknown034;
|
||||
/*038*/
|
||||
};
|
||||
|
||||
}; //end namespace structs
|
||||
}; //end namespace larion
|
||||
|
||||
|
||||
Reference in New Issue
Block a user