From f6ca59fbc66b0b0c9ab4af92a16ef703306372e2 Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 3 Jan 2017 22:23:03 -0800 Subject: [PATCH] Working zone and world communication yay --- common/net/servertalk_client_connection.cpp | 22 ++++++++++- common/net/servertalk_client_connection.h | 2 + .../servertalk_legacy_client_connection.cpp | 18 ++++++++- .../net/servertalk_legacy_client_connection.h | 2 + common/net/servertalk_server_connection.cpp | 24 +++++++++++- common/net/servertalk_server_connection.h | 2 + common/servertalk.h | 37 ------------------- queryserv/worldserver.cpp | 11 +----- world/adventure.cpp | 5 +-- world/adventure_manager.cpp | 29 --------------- world/cliententry.cpp | 1 - world/clientlist.cpp | 3 -- world/lfplist.cpp | 1 - world/zonelist.cpp | 3 +- world/zoneserver.cpp | 5 +-- zone/client.cpp | 2 - zone/client_packet.cpp | 8 ---- zone/inventory.cpp | 2 - zone/npc.cpp | 2 +- zone/worldserver.cpp | 9 +---- 20 files changed, 74 insertions(+), 114 deletions(-) diff --git a/common/net/servertalk_client_connection.cpp b/common/net/servertalk_client_connection.cpp index 79a8b8234..cbc70c877 100644 --- a/common/net/servertalk_client_connection.cpp +++ b/common/net/servertalk_client_connection.cpp @@ -52,7 +52,10 @@ void EQ::Net::ServertalkClient::Send(uint16_t opcode, EQ::Net::Packet &p) void EQ::Net::ServertalkClient::SendPacket(ServerPacket *p) { - EQ::Net::StaticPacket pout(p->pBuffer, p->size); + EQ::Net::DynamicPacket pout; + if (p->pBuffer) { + pout.PutData(0, p->pBuffer, p->size); + } Send(p->opcode, pout); } @@ -61,6 +64,11 @@ void EQ::Net::ServertalkClient::OnMessage(uint16_t opcode, std::function cb) +{ + m_message_callback = cb; +} + void EQ::Net::ServertalkClient::Connect() { if (m_addr.length() == 0 || m_port == 0 || m_connection || m_connecting) { @@ -280,6 +288,10 @@ void EQ::Net::ServertalkClient::ProcessMessage(EQ::Net::Packet &p) if (cb != m_message_callbacks.end()) { cb->second(opcode, decrypted_packet); } + + if (m_message_callback) { + m_message_callback(opcode, decrypted_packet); + } } else { size_t message_len = length; @@ -289,6 +301,10 @@ void EQ::Net::ServertalkClient::ProcessMessage(EQ::Net::Packet &p) if (cb != m_message_callbacks.end()) { cb->second(opcode, packet); } + + if (m_message_callback) { + m_message_callback(opcode, packet); + } } #else @@ -299,6 +315,10 @@ void EQ::Net::ServertalkClient::ProcessMessage(EQ::Net::Packet &p) if (cb != m_message_callbacks.end()) { m_message_callback_any(opcode, packet); } + + if (m_message_callback) { + m_message_callback(opcode, packet); + } #endif } } diff --git a/common/net/servertalk_client_connection.h b/common/net/servertalk_client_connection.h index 929c4dc98..ad5c24d65 100644 --- a/common/net/servertalk_client_connection.h +++ b/common/net/servertalk_client_connection.h @@ -22,6 +22,7 @@ namespace EQ void SendPacket(ServerPacket *p); void OnConnect(std::function cb) { m_on_connect_cb = cb; } void OnMessage(uint16_t opcode, std::function cb); + void OnMessage(std::function cb); bool Connected() const { return m_connecting != true; } std::shared_ptr Handle() { return m_connection; } @@ -48,6 +49,7 @@ namespace EQ std::shared_ptr m_connection; std::vector m_buffer; std::unordered_map> m_message_callbacks; + std::function m_message_callback; std::function m_on_connect_cb; #ifdef ENABLE_SECURITY diff --git a/common/net/servertalk_legacy_client_connection.cpp b/common/net/servertalk_legacy_client_connection.cpp index 67d000f64..fad5a27b4 100644 --- a/common/net/servertalk_legacy_client_connection.cpp +++ b/common/net/servertalk_legacy_client_connection.cpp @@ -32,7 +32,10 @@ void EQ::Net::ServertalkLegacyClient::Send(uint16_t opcode, EQ::Net::Packet &p) void EQ::Net::ServertalkLegacyClient::SendPacket(ServerPacket *p) { - EQ::Net::StaticPacket pout(p->pBuffer, p->size); + EQ::Net::DynamicPacket pout; + if (p->pBuffer) { + pout.PutData(0, p->pBuffer, p->size); + } Send(p->opcode, pout); } @@ -41,6 +44,11 @@ void EQ::Net::ServertalkLegacyClient::OnMessage(uint16_t opcode, std::function cb) +{ + m_message_callback = cb; +} + void EQ::Net::ServertalkLegacyClient::Connect() { if (m_addr.length() == 0 || m_port == 0 || m_connection || m_connecting) { @@ -116,6 +124,10 @@ void EQ::Net::ServertalkLegacyClient::ProcessReadBuffer() if (cb != m_message_callbacks.end()) { cb->second(opcode, p); } + + if (m_message_callback) { + m_message_callback(opcode, p); + } } else { EQ::Net::StaticPacket p(&m_buffer[current + 4], length); @@ -124,6 +136,10 @@ void EQ::Net::ServertalkLegacyClient::ProcessReadBuffer() if (cb != m_message_callbacks.end()) { cb->second(opcode, p); } + + if (m_message_callback) { + m_message_callback(opcode, p); + } } current += length + 4; diff --git a/common/net/servertalk_legacy_client_connection.h b/common/net/servertalk_legacy_client_connection.h index 4548ad16c..f773de12b 100644 --- a/common/net/servertalk_legacy_client_connection.h +++ b/common/net/servertalk_legacy_client_connection.h @@ -19,6 +19,7 @@ namespace EQ void SendPacket(ServerPacket *p); void OnConnect(std::function cb) { m_on_connect_cb = cb; } void OnMessage(uint16_t opcode, std::function cb); + void OnMessage(std::function cb); bool Connected() const { return m_connecting != true; } std::shared_ptr Handle() { return m_connection; } @@ -36,6 +37,7 @@ namespace EQ std::shared_ptr m_connection; std::vector m_buffer; std::unordered_map> m_message_callbacks; + std::function m_message_callback; std::function m_on_connect_cb; }; } diff --git a/common/net/servertalk_server_connection.cpp b/common/net/servertalk_server_connection.cpp index 90393abe1..eb3e17247 100644 --- a/common/net/servertalk_server_connection.cpp +++ b/common/net/servertalk_server_connection.cpp @@ -50,9 +50,12 @@ void EQ::Net::ServertalkServerConnection::Send(uint16_t opcode, EQ::Net::Packet InternalSend(ServertalkMessage, out); } -void EQ::Net::ServertalkServerConnection::SendPacket(ServerPacket * p) +void EQ::Net::ServertalkServerConnection::SendPacket(ServerPacket *p) { - EQ::Net::StaticPacket pout(p->pBuffer, p->size); + EQ::Net::DynamicPacket pout; + if (p->pBuffer) { + pout.PutData(0, p->pBuffer, p->size); + } Send(p->opcode, pout); } @@ -61,6 +64,11 @@ void EQ::Net::ServertalkServerConnection::OnMessage(uint16_t opcode, std::functi m_message_callbacks.insert(std::make_pair(opcode, cb)); } +void EQ::Net::ServertalkServerConnection::OnMessage(std::function cb) +{ + m_message_callback = cb; +} + void EQ::Net::ServertalkServerConnection::OnRead(TCPConnection *c, const unsigned char *data, size_t sz) { m_buffer.insert(m_buffer.end(), (const char*)data, (const char*)data + sz); @@ -300,6 +308,10 @@ void EQ::Net::ServertalkServerConnection::ProcessMessage(EQ::Net::Packet &p) if (cb != m_message_callbacks.end()) { cb->second(opcode, decrypted_packet); } + + if (m_message_callback) { + m_message_callback(opcode, decrypted_packet); + } } else { size_t message_len = length; @@ -309,6 +321,10 @@ void EQ::Net::ServertalkServerConnection::ProcessMessage(EQ::Net::Packet &p) if (cb != m_message_callbacks.end()) { cb->second(opcode, packet); } + + if (m_message_callback) { + m_message_callback(opcode, packet); + } } #else @@ -319,6 +335,10 @@ void EQ::Net::ServertalkServerConnection::ProcessMessage(EQ::Net::Packet &p) if (cb != m_message_callbacks.end()) { cb->second(opcode, packet); } + + if (m_message_callback) { + m_message_callback(opcode, packet); + } #endif } } diff --git a/common/net/servertalk_server_connection.h b/common/net/servertalk_server_connection.h index 0557fd1a9..112a8f2a6 100644 --- a/common/net/servertalk_server_connection.h +++ b/common/net/servertalk_server_connection.h @@ -22,6 +22,7 @@ namespace EQ void Send(uint16_t opcode, EQ::Net::Packet &p); void SendPacket(ServerPacket *p); void OnMessage(uint16_t opcode, std::function cb); + void OnMessage(std::function cb); std::string GetIdentifier() const { return m_identifier; } std::shared_ptr Handle() { return m_connection; } @@ -41,6 +42,7 @@ namespace EQ std::vector m_buffer; std::unordered_map> m_message_callbacks; + std::function m_message_callback; std::string m_identifier; std::string m_uuid; diff --git a/common/servertalk.h b/common/servertalk.h index 78f46c684..ea4ba0d4c 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -251,43 +251,6 @@ public: ret->InflatedSize = this->InflatedSize; return ret; } - bool Deflate() { - if (compressed) - return false; - if ((!this->pBuffer) || (!this->size)) - return false; - uchar* tmp = new uchar[this->size + 128]; - uint32 tmpsize = DeflatePacket(this->pBuffer, this->size, tmp, this->size + 128); - if (!tmpsize) { - safe_delete_array(tmp); - return false; - } - this->compressed = true; - this->InflatedSize = this->size; - this->size = tmpsize; - uchar* tmpdel = this->pBuffer; - this->pBuffer = tmp; - safe_delete_array(tmpdel); - return true; - } - bool Inflate() { - if (!compressed) - return false; - if ((!this->pBuffer) || (!this->size)) - return false; - uchar* tmp = new uchar[InflatedSize]; - uint32 tmpsize = InflatePacket(this->pBuffer, this->size, tmp, InflatedSize); - if (!tmpsize) { - safe_delete_array(tmp); - return false; - } - compressed = false; - this->size = tmpsize; - uchar* tmpdel = this->pBuffer; - this->pBuffer = tmp; - safe_delete_array(tmpdel); - return true; - } void WriteUInt8(uint8 value) { *(uint8 *)(pBuffer + _wpos) = value; _wpos += sizeof(uint8); } void WriteUInt32(uint32 value) { *(uint32 *)(pBuffer + _wpos) = value; _wpos += sizeof(uint32); } diff --git a/queryserv/worldserver.cpp b/queryserv/worldserver.cpp index 314c61fee..a63685d20 100644 --- a/queryserv/worldserver.cpp +++ b/queryserv/worldserver.cpp @@ -53,16 +53,7 @@ WorldServer::~WorldServer() void WorldServer::Connect() { m_connection.reset(new EQ::Net::ServertalkClient(Config->WorldIP, Config->WorldTCPPort, false, "QueryServ", Config->SharedKey)); - - m_connection->OnMessage(ServerOP_Speech, std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); - m_connection->OnMessage(ServerOP_QSPlayerLogTrades, std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); - m_connection->OnMessage(ServerOP_QSPlayerLogHandins, std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); - m_connection->OnMessage(ServerOP_QSPlayerLogNPCKills, std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); - m_connection->OnMessage(ServerOP_QSPlayerLogDeletes, std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); - m_connection->OnMessage(ServerOP_QSPlayerLogMoves, std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); - m_connection->OnMessage(ServerOP_QSPlayerLogMerchantTransactions, std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); - m_connection->OnMessage(ServerOP_QueryServGeneric, std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); - m_connection->OnMessage(ServerOP_QSSendQuery, std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); + m_connection->OnMessage(std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); } bool WorldServer::SendPacket(ServerPacket *pack) diff --git a/world/adventure.cpp b/world/adventure.cpp index 40becd855..cbea9079c 100644 --- a/world/adventure.cpp +++ b/world/adventure.cpp @@ -177,7 +177,6 @@ void Adventure::SetStatus(AdventureStatus new_status) ut->instance_id = instance_id; ut->new_duration = adventure_template->duration + 60; - pack->Deflate(); zoneserver_list.SendPacket(0, instance_id, pack); safe_delete(pack); } @@ -192,7 +191,6 @@ void Adventure::SetStatus(AdventureStatus new_status) ut->instance_id = instance_id; ut->new_duration = 1860; - pack->Deflate(); zoneserver_list.SendPacket(0, instance_id, pack); safe_delete(pack); } @@ -207,7 +205,6 @@ void Adventure::SetStatus(AdventureStatus new_status) ut->instance_id = instance_id; ut->new_duration = 1860; - pack->Deflate(); zoneserver_list.SendPacket(0, instance_id, pack); safe_delete(pack); } @@ -313,7 +310,7 @@ void Adventure::Finished(AdventureWinStatus ws) af->win = false; af->points = 0; } - pack->Deflate(); + zoneserver_list.SendPacket(current->zone(), current->instance(), pack); database.UpdateAdventureStatsEntry(database.GetCharacterID((*iter).c_str()), GetTemplate()->theme, (ws != AWS_Lose) ? true : false); delete pack; diff --git a/world/adventure_manager.cpp b/world/adventure_manager.cpp index c49cf17c4..65e264a19 100644 --- a/world/adventure_manager.cpp +++ b/world/adventure_manager.cpp @@ -83,7 +83,6 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data) ServerAdventureRequestDeny_Struct *deny = (ServerAdventureRequestDeny_Struct*)pack->pBuffer; strcpy(deny->leader, sar->leader); strcpy(deny->reason, "There are currently no adventures set for this theme."); - pack->Deflate(); zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack); delete pack; return; @@ -113,7 +112,6 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data) ss << (data + sizeof(ServerAdventureRequest_Struct) + (64 * i)) << " is already apart of an active adventure."; strcpy(deny->reason, ss.str().c_str()); - pack->Deflate(); zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack); delete pack; return; @@ -245,7 +243,6 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data) ServerAdventureRequestDeny_Struct *deny = (ServerAdventureRequestDeny_Struct*)pack->pBuffer; strcpy(deny->leader, sar->leader); strcpy(deny->reason, "The number of found players for this adventure was zero."); - pack->Deflate(); zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack); delete pack; return; @@ -263,7 +260,6 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data) ss << "The maximum level range for this adventure is " << RuleI(Adventure, MaxLevelRange); ss << " but the level range calculated was " << (max_level - min_level) << "."; strcpy(deny->reason, ss.str().c_str()); - pack->Deflate(); zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack); delete pack; return; @@ -341,7 +337,6 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data) sra->id = (*ea_iter)->id; sra->member_count = sar->member_count; memcpy((pack->pBuffer + sizeof(ServerAdventureRequestAccept_Struct)), (data + sizeof(ServerAdventureRequest_Struct)), (sar->member_count * 64)); - pack->Deflate(); zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack); delete pack; return; @@ -352,7 +347,6 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data) ServerAdventureRequestDeny_Struct *deny = (ServerAdventureRequestDeny_Struct*)pack->pBuffer; strcpy(deny->leader, sar->leader); strcpy(deny->reason, "The number of adventures returned was zero."); - pack->Deflate(); zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack); delete pack; return; @@ -373,7 +367,6 @@ void AdventureManager::TryAdventureCreate(const char *data) { auto pack = new ServerPacket(ServerOP_AdventureCreateDeny, 64); strcpy((char*)pack->pBuffer, src->leader); - pack->Deflate(); zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack); delete pack; return; @@ -384,7 +377,6 @@ void AdventureManager::TryAdventureCreate(const char *data) { auto pack = new ServerPacket(ServerOP_AdventureCreateDeny, 64); strcpy((char*)pack->pBuffer, src->leader); - pack->Deflate(); zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack); delete pack; delete adv; @@ -398,7 +390,6 @@ void AdventureManager::TryAdventureCreate(const char *data) { auto pack = new ServerPacket(ServerOP_AdventureCreateDeny, 64); strcpy((char*)pack->pBuffer, src->leader); - pack->Deflate(); zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack); delete pack; delete adv; @@ -444,7 +435,6 @@ void AdventureManager::TryAdventureCreate(const char *data) sfa->zone_in_object = finished_adventures[f]->GetTemplate()->zone_in_object_id; } - pack->Deflate(); zoneserver_list.SendPacket(player->zone(), player->instance(), pack); safe_delete_array(finished_adventures); delete pack; @@ -506,7 +496,6 @@ void AdventureManager::GetAdventureData(const char *name) delete pack; auto pack = new ServerPacket(ServerOP_AdventureDataClear, 64); strcpy((char*)pack->pBuffer, name); - pack->Deflate(); zoneserver_list.SendPacket(player->zone(), player->instance(), pack); delete pack; @@ -525,7 +514,6 @@ void AdventureManager::GetAdventureData(const char *name) sfa->zone_in_object = finished_adventures[i]->GetTemplate()->zone_in_object_id; } - pack->Deflate(); zoneserver_list.SendPacket(player->zone(), player->instance(), pack); safe_delete_array(finished_adventures); delete pack; @@ -757,7 +745,6 @@ void AdventureManager::PlayerClickedDoor(const char *player, int zone_id, int do (*iter)->SetStatus(AS_WaitingForPrimaryEndTime); } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); safe_delete(pack); } @@ -772,7 +759,6 @@ void AdventureManager::PlayerClickedDoor(const char *player, int zone_id, int do { auto pack = new ServerPacket(ServerOP_AdventureClickDoorError, 64); strcpy((char*)pack->pBuffer, player); - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); safe_delete(pack); } @@ -790,7 +776,6 @@ void AdventureManager::LeaveAdventure(const char *name) { auto pack = new ServerPacket(ServerOP_AdventureLeaveDeny, 64); strcpy((char*)pack->pBuffer, name); - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); safe_delete(pack); } @@ -804,7 +789,6 @@ void AdventureManager::LeaveAdventure(const char *name) current->RemovePlayer(name); auto pack = new ServerPacket(ServerOP_AdventureLeaveReply, 64); strcpy((char*)pack->pBuffer, name); - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); safe_delete(pack); } @@ -813,7 +797,6 @@ void AdventureManager::LeaveAdventure(const char *name) { auto pack = new ServerPacket(ServerOP_AdventureLeaveReply, 64); strcpy((char*)pack->pBuffer, name); - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); safe_delete(pack); } @@ -1300,7 +1283,6 @@ void AdventureManager::DoLeaderboardRequestWins(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } @@ -1367,7 +1349,6 @@ void AdventureManager::DoLeaderboardRequestPercentage(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } @@ -1434,7 +1415,6 @@ void AdventureManager::DoLeaderboardRequestWinsGuk(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } @@ -1501,7 +1481,6 @@ void AdventureManager::DoLeaderboardRequestPercentageGuk(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } @@ -1568,7 +1547,6 @@ void AdventureManager::DoLeaderboardRequestWinsMir(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } @@ -1635,7 +1613,6 @@ void AdventureManager::DoLeaderboardRequestPercentageMir(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } @@ -1702,7 +1679,6 @@ void AdventureManager::DoLeaderboardRequestWinsMmc(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } @@ -1769,7 +1745,6 @@ void AdventureManager::DoLeaderboardRequestPercentageMmc(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } @@ -1836,7 +1811,6 @@ void AdventureManager::DoLeaderboardRequestWinsRuj(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } @@ -1903,7 +1877,6 @@ void AdventureManager::DoLeaderboardRequestPercentageRuj(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } @@ -1970,7 +1943,6 @@ void AdventureManager::DoLeaderboardRequestWinsTak(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } @@ -2037,7 +2009,6 @@ void AdventureManager::DoLeaderboardRequestPercentageTak(const char* player) al->failure = our_failures; } - pack->Deflate(); zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack); delete pack; } diff --git a/world/cliententry.cpp b/world/cliententry.cpp index a67c45c39..68042acd6 100644 --- a/world/cliententry.cpp +++ b/world/cliententry.cpp @@ -311,7 +311,6 @@ void ClientListEntry::ProcessTellQueue() while (it != tell_queue.end()) { pack = new ServerPacket(ServerOP_ChannelMessage, sizeof(ServerChannelMessage_Struct) + strlen((*it)->message) + 1); memcpy(pack->pBuffer, *it, pack->size); - pack->Deflate(); Server()->SendPacket(pack); safe_delete(pack); safe_delete_array(*it); diff --git a/world/clientlist.cpp b/world/clientlist.cpp index b670b5fb9..4f93a5610 100644 --- a/world/clientlist.cpp +++ b/world/clientlist.cpp @@ -742,7 +742,6 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S } iterator.Advance(); } - pack2->Deflate(); //zoneserver_list.SendPacket(pack2); // NO NO NO WHY WOULD YOU SEND IT TO EVERY ZONE SERVER?!? SendPacket(to,pack2); safe_delete(pack2); @@ -888,7 +887,6 @@ void ClientList::SendFriendsWho(ServerFriendsWho_Struct *FriendsWho, WorldTCPCon bufptr += sizeof(WhoAllPlayerPart4); } - pack2->Deflate(); SendPacket(FriendsWho->FromName,pack2); safe_delete(pack2); } @@ -963,7 +961,6 @@ void ClientList::SendLFGMatches(ServerLFGMatchesRequest_Struct *smrs) { } Iterator.Advance(); } - Pack->Deflate(); } SendPacket(smrs->FromName,Pack); safe_delete(Pack); diff --git a/world/lfplist.cpp b/world/lfplist.cpp index 2dccc4a3c..07e8c73ae 100644 --- a/world/lfplist.cpp +++ b/world/lfplist.cpp @@ -261,7 +261,6 @@ void GroupLFPList::SendLFPMatches(ServerLFPMatchesRequest_Struct* smrs) { Buffer++; } } - Pack->Deflate(); } ClientListEntry* CLE = client_list.FindCharacter(smrs->FromName); diff --git a/world/zonelist.cpp b/world/zonelist.cpp index cb2dff73f..c44573f20 100644 --- a/world/zonelist.cpp +++ b/world/zonelist.cpp @@ -429,7 +429,6 @@ void ZSList::SendChannelMessageRaw(const char* from, const char* to, uint8 chan_ scm->chan_num = chan_num; strcpy(&scm->message[0], message); - pack->Deflate(); SendPacket(pack); delete pack; } @@ -473,7 +472,7 @@ void ZSList::SendEmoteMessageRaw(const char* to, uint32 to_guilddbid, int16 to_m char tempto[64]={0}; if(to) strn0cpy(tempto,to,64); - pack->Deflate(); + if (tempto[0] == 0) { SendPacket(pack); } diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index aabb20cdd..da44cdf6a 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -66,9 +66,9 @@ ZoneServer::ZoneServer(std::shared_ptr conn is_static_zone = false; zone_player_count = 0; - tcpc->OnAnyMessage(std::bind(&ZoneServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); + tcpc->OnMessage(std::bind(&ZoneServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); - boot_timer_obj.reset(new EQ::Timer(1000, true, [this](EQ::Timer *obj) { + boot_timer_obj.reset(new EQ::Timer(100, true, [this](EQ::Timer *obj) { if (zone_boot_timer.Check()) { LSBootUpdate(GetZoneID(), true); zone_boot_timer.Disable(); @@ -1329,7 +1329,6 @@ void ZoneServer::SendEmoteMessageRaw(const char* to, uint32 to_guilddbid, int16 sem->type = type; strcpy(&sem->message[0], message); - pack->Deflate(); SendPacket(pack); delete pack; } diff --git a/zone/client.cpp b/zone/client.cpp index ddf10d9d5..799da7484 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -846,7 +846,6 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s if(GetName() != 0) strcpy(sem->from, GetName()); - pack->Deflate(); if(worldserver.Connected()) worldserver.SendPacket(pack); safe_delete(pack); @@ -6009,7 +6008,6 @@ void Client::LeaveAdventure() PendingAdventureLeave(); auto pack = new ServerPacket(ServerOP_AdventureLeave, 64); strcpy((char*)pack->pBuffer, GetName()); - pack->Deflate(); worldserver.SendPacket(pack); delete pack; } diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 56936147d..cc9ec6ce2 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -2361,7 +2361,6 @@ void Client::Handle_OP_AdventureRequest(const EQApplicationPacket *app) } } - packet->Deflate(); worldserver.SendPacket(packet); delete packet; p_timers.Start(pTimerStartAdventureTimer, 5); @@ -8709,7 +8708,6 @@ void Client::Handle_OP_LDoNButton(const EQApplicationPacket *app) sac->theme = adv_requested_theme; sac->member_count = adv_requested_member_count; memcpy((pack->pBuffer + sizeof(ServerAdventureRequestCreate_Struct)), adv_requested_data, (64 * adv_requested_member_count)); - pack->Deflate(); worldserver.SendPacket(pack); delete pack; PendingAdventureCreate(); @@ -12359,7 +12357,6 @@ void Client::Handle_OP_ShopPlayerBuy(const EQApplicationPacket *app) audit_inst = nullptr; - qspack->Deflate(); if (worldserver.Connected()) { worldserver.SendPacket(qspack); } safe_delete(qspack); } @@ -12504,7 +12501,6 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app) qsaudit->items[0].aug_4 = m_inv[mp->itemslot]->GetAugmentItemID(4); qsaudit->items[0].aug_5 = m_inv[mp->itemslot]->GetAugmentItemID(5); - qspack->Deflate(); if (worldserver.Connected()) { worldserver.SendPacket(qspack); } safe_delete(qspack); } @@ -13355,8 +13351,6 @@ void Client::Handle_OP_TradeAcceptClick(const EQApplicationPacket *app) event_details.clear(); - qs_pack->Deflate(); - if (worldserver.Connected()) worldserver.SendPacket(qs_pack); @@ -13412,8 +13406,6 @@ void Client::Handle_OP_TradeAcceptClick(const EQApplicationPacket *app) event_details.clear(); - qs_pack->Deflate(); - if (worldserver.Connected()) worldserver.SendPacket(qs_pack); diff --git a/zone/inventory.cpp b/zone/inventory.cpp index 416a97e28..abc71723b 100644 --- a/zone/inventory.cpp +++ b/zone/inventory.cpp @@ -837,7 +837,6 @@ void Client::DeleteItemInInventory(int16 slot_id, int8 quantity, bool client_upd } } - qspack->Deflate(); if(worldserver.Connected()) { worldserver.SendPacket(qspack); } safe_delete(qspack); } @@ -2068,7 +2067,6 @@ void Client::QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call) { } if(move_count && worldserver.Connected()) { - qspack->Deflate(); worldserver.SendPacket(qspack); } diff --git a/zone/npc.cpp b/zone/npc.cpp index d1255f8aa..25acc351b 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -679,7 +679,7 @@ bool NPC::Process() if(viral_timer.Check()) { viral_timer_counter++; for(int i = 0; i < MAX_SPELL_TRIGGER*2; i+=2) { - if(viral_spells[i]) { + if(viral_spells[i] && spells[viral_spells[i]].viral_timer > 0) { if(viral_timer_counter % spells[viral_spells[i]].viral_timer == 0) { SpreadVirus(viral_spells[i], viral_spells[i+1]); } diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index 409ef2b6f..6d39f58f5 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -82,8 +82,7 @@ void WorldServer::Connect() OnConnected(); }); - //TODO FIX MKAY - //m_connection->OnAnyMessage(std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); + m_connection->OnMessage(std::bind(&WorldServer::HandleMessage, this, std::placeholders::_1, std::placeholders::_2)); } bool WorldServer::SendPacket(ServerPacket *pack) @@ -176,6 +175,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { ServerPacket tpack(opcode, p); ServerPacket *pack = &tpack; + switch(opcode) { case 0: { break; @@ -217,7 +217,6 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) scm->chan_num = 14; memset(scm->deliverto, 0, sizeof(scm->deliverto)); strcpy(scm->deliverto, scm->from); - pack->Deflate(); SendPacket(pack); } } @@ -1949,7 +1948,6 @@ bool WorldServer::SendChannelMessage(Client* from, const char* to, uint8 chan_nu scm->queued = 0; strcpy(scm->message, buffer); - pack->Deflate(); bool ret = SendPacket(pack); safe_delete(pack); return ret; @@ -1988,7 +1986,6 @@ bool WorldServer::SendEmoteMessage(const char* to, uint32 to_guilddbid, int16 to sem->minstatus = to_minstatus; strcpy(sem->message, buffer); - pack->Deflate(); bool ret = SendPacket(pack); safe_delete(pack); return ret; @@ -2026,8 +2023,6 @@ bool WorldServer::SendVoiceMacro(Client* From, uint32 Type, char* Target, uint32 svm->MacroNumber = MacroNumber; - pack->Deflate(); - bool Ret = SendPacket(pack); safe_delete(pack);