From 1e35d30c8f7ec0854ef62aa70d27556ecca92985 Mon Sep 17 00:00:00 2001 From: KimLS Date: Sat, 30 Nov 2024 19:04:57 -0800 Subject: [PATCH] Now send membership for Laurion in zone right before player profile like live. --- zone/client.cpp | 38 ++++++++++++++++++++++++++++++++++++++ zone/client.h | 1 + zone/client_packet.cpp | 4 +--- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/zone/client.cpp b/zone/client.cpp index d80ae4270..9ab53c593 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -8602,6 +8602,44 @@ void Client::SendHPUpdateMarquee(){ SendMarqueeMessage(Chat::Yellow, 510, 0, 3000, 3000, health_update_notification); } +void Client::SendMembership() { + if (m_ClientVersion >= EQ::versions::ClientVersion::Laurion) { + auto outapp = new EQApplicationPacket(OP_SendMembership, sizeof(Membership_Struct)); + Membership_Struct* mc = (Membership_Struct*)outapp->pBuffer; + + mc->membership = 2; //Hardcode to gold for now. We don't use anything else. + mc->races = 0x1ffff; // Available Races (4110 for silver) + mc->classes = 0x1ffff; // Available Classes (4614 for silver) - Was 0x101ffff + mc->entrysize = 21; // Number of membership setting entries below + mc->entries[0] = 0xffffffff; // Max AA Restriction + mc->entries[1] = 0xffffffff; // Max Level Restriction + mc->entries[2] = 0xffffffff; // Max Char Slots per Account (not used by client?) + mc->entries[3] = 0xffffffff; // 1 for Silver + mc->entries[4] = 0xffffffff; // Main Inventory Size (0xffffffff on Live for Gold, but limiting to 8 until 10 is supported) + mc->entries[5] = 0xffffffff; // Max Platinum per level + mc->entries[6] = 1; // 0 for Silver + mc->entries[7] = 1; // 0 for Silver + mc->entries[8] = 1; // 1 for Silver + mc->entries[9] = 0xffffffff; // Unknown - Maybe Loyalty Points every 12 hours? 60 per week for Silver + mc->entries[10] = 1; // 1 for Silver + mc->entries[11] = 0xffffffff; // Shared Bank Slots + mc->entries[12] = 0xffffffff; // Unknown - Maybe Max Active Tasks? + mc->entries[13] = 1; // 1 for Silver + mc->entries[14] = 1; // 0 for Silver + mc->entries[15] = 1; // 0 for Silver + mc->entries[16] = 1; // 1 for Silver + mc->entries[17] = 1; // 0 for Silver + mc->entries[18] = 1; // 0 for Silver + mc->entries[19] = 0xffffffff; // 0 for Silver + mc->entries[20] = 0xffffffff; // 0 for Silver + mc->exit_url_length = 0; + //mc->exit_url = 0; // Used on Live: "http://www.everquest.com/free-to-play/exit-silver" + + QueuePacket(outapp); + safe_delete(outapp); + } +} + uint32 Client::GetMoney(uint8 type, uint8 subtype) { uint32 value = 0; diff --git a/zone/client.h b/zone/client.h index 5acc388b3..d08eec3a1 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1786,6 +1786,7 @@ public: void ResetHPUpdateTimer() { hpupdate_timer.Start(); } void SendHPUpdateMarquee(); + void SendMembership(); void CheckRegionTypeChanges(); diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index d083e1252..dbd438295 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1650,9 +1650,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) if ((m_pp.RestTimer > RuleI(Character, RestRegenTimeToActivate)) && (m_pp.RestTimer > RuleI(Character, RestRegenRaidTimeToActivate))) m_pp.RestTimer = 0; - /* This checksum should disappear once dynamic structs are in... each struct strategy will do it */ // looks to be in place now - //CRC32::SetEQChecksum((unsigned char*)&m_pp, sizeof(PlayerProfile_Struct) - sizeof(m_pp.m_player_profile_version) - 4); - // m_pp.checksum = 0; // All server out-bound player profile packets are now translated - no need to waste cycles calculating this... + SendMembership(); outapp = new EQApplicationPacket(OP_PlayerProfile, sizeof(PlayerProfile_Struct));