diff --git a/zone/client.cpp b/zone/client.cpp index ded5bdc5f..99dec6427 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -322,6 +322,7 @@ Client::Client(EQStreamInterface* ieqs) LoadAccountFlags(); initial_respawn_selection = 0; + alternate_currency_loaded = false; } Client::~Client() { @@ -6741,6 +6742,11 @@ void Client::AddAlternateCurrencyValue(uint32 currency_id, int32 amount) return; } + if(!alternate_currency_loaded) { + alternate_currency_queued_operations.push(std::make_pair(currency_id, amount)); + return; + } + int new_value = 0; std::map::iterator iter = alternate_currency.find(currency_id); if(iter == alternate_currency.end()) { @@ -6793,6 +6799,16 @@ uint32 Client::GetAlternateCurrencyValue(uint32 currency_id) const } } +void Client::ProcessAlternateCurrencyQueue() { + while(!alternate_currency_queued_operations.empty()) { + std::pair op = alternate_currency_queued_operations.front(); + + AddAlternateCurrencyValue(op.first, op.second); + + alternate_currency_queued_operations.pop(); + } +} + void Client::OpenLFGuildWindow() { EQApplicationPacket *outapp = new EQApplicationPacket(OP_LFGuild, 8); diff --git a/zone/client.h b/zone/client.h index edb9c94cc..ad201ec76 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1087,6 +1087,7 @@ public: void SendAlternateCurrencyValues(); void SendAlternateCurrencyValue(uint32 currency_id, bool send_if_null = true); uint32 GetAlternateCurrencyValue(uint32 currency_id) const; + void ProcessAlternateCurrencyQueue(); void OpenLFGuildWindow(); void HandleLFGuildResponse(ServerPacket *pack); void SendLFGuildStatus(); @@ -1448,7 +1449,9 @@ private: bool m_KnockBackExemption; bool m_PortExemption; bool m_SenseExemption; + bool alternate_currency_loaded; std::map alternate_currency; + std::queue> alternate_currency_queued_operations; //Connecting debug code. enum { //connecting states, used for debugging only diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 25b638b52..3c1669ca3 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -9571,6 +9571,9 @@ void Client::CompleteConnect() SendAltCurrencies(); database.LoadAltCurrencyValues(CharacterID(), alternate_currency); SendAlternateCurrencyValues(); + alternate_currency_loaded = true; + ProcessAlternateCurrencyQueue(); + CalcItemScale(); DoItemEnterZone();