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:
KimLS
2024-10-24 20:35:53 -07:00
parent 0a9a941b6b
commit dbb0288a13
9 changed files with 1379 additions and 70 deletions
+583 -57
View File
@@ -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
+266
View File
@@ -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();
}
+300 -2
View File
@@ -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 */
+1
View File
@@ -5,6 +5,7 @@
E(OP_LogServer)
E(OP_SendMembership)
E(OP_SendMembershipDetails)
E(OP_SendMaxCharacters)
#undef E
#undef D
+21 -3
View File
@@ -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