From aff1223181899d083d715ac3c99788f10e0c51c7 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 9 Feb 2021 23:57:31 -0600 Subject: [PATCH] LDON tweaks, working branch, average_level pass --- common/eqemu_logsys.h | 2 ++ common/eqemu_logsys_log_aliases.h | 10 ++++++++++ world/adventure.cpp | 11 +++++++++++ world/adventure.h | 4 ++++ world/adventure_manager.cpp | 10 ++++++++++ zone/client.cpp | 13 ++++++++++--- zone/client.h | 3 ++- zone/client_packet.cpp | 21 ++++++++++++++------- zone/worldserver.cpp | 13 ++++++++++++- 9 files changed, 75 insertions(+), 12 deletions(-) diff --git a/common/eqemu_logsys.h b/common/eqemu_logsys.h index c8f724a17..b05f46ff0 100644 --- a/common/eqemu_logsys.h +++ b/common/eqemu_logsys.h @@ -121,6 +121,7 @@ namespace Logs { Expeditions, DynamicZones, Group, + Adventure, MaxCategoryID /* Don't Remove this */ }; @@ -201,6 +202,7 @@ namespace Logs { "Expeditions", "DynamicZones", "Group", + "Adventure", }; } diff --git a/common/eqemu_logsys_log_aliases.h b/common/eqemu_logsys_log_aliases.h index e32b43b4f..00944b9fa 100644 --- a/common/eqemu_logsys_log_aliases.h +++ b/common/eqemu_logsys_log_aliases.h @@ -636,6 +636,16 @@ OutF(LogSys, Logs::Detail, Logs::DynamicZones, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ } while (0) +#define LogAdventure(message, ...) do {\ + if (LogSys.log_settings[Logs::Adventure].is_category_enabled == 1)\ + OutF(LogSys, Logs::General, Logs::Adventure, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ +} while (0) + +#define LogAdventureDetail(message, ...) do {\ + if (LogSys.log_settings[Logs::Adventure].is_category_enabled == 1)\ + OutF(LogSys, Logs::Detail, Logs::Adventure, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ +} while (0) + #define Log(debug_level, log_category, message, ...) do {\ if (LogSys.log_settings[log_category].is_category_enabled == 1)\ LogSys.Out(debug_level, log_category, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ diff --git a/world/adventure.cpp b/world/adventure.cpp index d2b316b3c..43b208e04 100644 --- a/world/adventure.cpp +++ b/world/adventure.cpp @@ -26,6 +26,7 @@ Adventure::Adventure(AdventureTemplate *t) count = 0; assassination_count = 0; instance_id = 0; + } Adventure::Adventure(AdventureTemplate *t, int count, int assassination_count, AdventureStatus status, uint16 instance_id, uint32 time_left) @@ -425,3 +426,13 @@ void Adventure::MoveCorpsesToGraveyard() } } +int Adventure::GetAverageLevel() const +{ + return average_level; +} + +void Adventure::SetAverageLevel(int average_level) +{ + Adventure::average_level = average_level; +} + diff --git a/world/adventure.h b/world/adventure.h index 23255a5b5..d5e8401d9 100644 --- a/world/adventure.h +++ b/world/adventure.h @@ -87,6 +87,8 @@ public: int GetCount() const { return count; } int GetAssassinationCount() const { return assassination_count; } uint32 GetRemainingTime() const { if(current_timer) { return (current_timer->GetRemainingTime() / 1000); } else { return 0; } } + int GetAverageLevel() const; + void SetAverageLevel(int average_level); protected: int id; int count; @@ -96,6 +98,8 @@ protected: std::list players; Timer *current_timer; int instance_id; + int average_level; + }; #endif diff --git a/world/adventure_manager.cpp b/world/adventure_manager.cpp index 06ea03bb0..c16e6f80d 100644 --- a/world/adventure_manager.cpp +++ b/world/adventure_manager.cpp @@ -337,6 +337,10 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data) sra->theme = sar->template_id; sra->id = (*ea_iter)->id; sra->member_count = sar->member_count; + sra->average_level = avg_level; + + LogAdventure("[AdventureManager::CalculateAdventureRequestReply] Adventure average level [{}]", avg_level); + memcpy((pack->pBuffer + sizeof(ServerAdventureRequestAccept_Struct)), (data + sizeof(ServerAdventureRequest_Struct)), (sar->member_count * 64)); zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack); delete pack; @@ -442,6 +446,8 @@ void AdventureManager::TryAdventureCreate(const char *data) } } + adv->SetAverageLevel(src->average_level); + adventure_list.push_back(adv); } @@ -936,6 +942,10 @@ void AdventureManager::GetZoneData(uint16 instance_id) zd->dest_y = temp->dest_y; zd->dest_z = temp->dest_z; zd->dest_h = temp->dest_h; + zd->average_level = current->GetAverageLevel(); + + LogAdventure("[AdventureManager::GetZoneData] Adventure average level [{}]", zd->average_level); + zoneserver_list.SendPacket(0, instance_id, pack); delete pack; } diff --git a/zone/client.cpp b/zone/client.cpp index fb265dcd0..e1312f796 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -325,6 +325,7 @@ Client::Client(EQStreamInterface* ieqs) adv_requested_theme = 0; adv_requested_id = 0; adv_requested_member_count = 0; + adv_requested_avg_lvl = 0; for(int i = 0; i < XTARGET_HARDCAP; ++i) { @@ -5985,18 +5986,24 @@ void Client::SendAdventureCount(uint32 count, uint32 total) FastQueuePacket(&outapp); } -void Client::NewAdventure(int id, int theme, const char *text, int member_count, const char *members) +void Client::NewAdventure(int id, int theme, const char *text, int member_count, const char *members, uint32 avg_level) { size_t text_size = strlen(text); auto outapp = new EQApplicationPacket(OP_AdventureDetails, text_size + 2); strn0cpy((char*)outapp->pBuffer, text, text_size); FastQueuePacket(&outapp); - adv_requested_id = id; + adv_requested_id = id; adv_requested_theme = theme; + safe_delete_array(adv_requested_data); + adv_requested_member_count = member_count; - adv_requested_data = new char[64 * member_count]; + adv_requested_avg_lvl = avg_level; + adv_requested_data = new char[64 * member_count]; + + LogAdventure("[Client::NewAdventure] Adventure average level [{}]", adv_requested_avg_lvl); + memcpy(adv_requested_data, members, (64 * member_count)); } diff --git a/zone/client.h b/zone/client.h index 17af0c01d..4d65cd467 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1270,7 +1270,7 @@ public: void SendAdventureError(const char *error); void SendAdventureDetails(); void SendAdventureCount(uint32 count, uint32 total); - void NewAdventure(int id, int theme, const char *text, int member_count, const char *members); + void NewAdventure(int id, int theme, const char *text, int member_count, const char *members, uint32 avg_level); bool IsOnAdventure(); void LeaveAdventure(); void AdventureFinish(bool win, int theme, int points); @@ -1613,6 +1613,7 @@ protected: int adv_requested_theme; int adv_requested_id; char *adv_requested_data; + uint32 adv_requested_avg_lvl; int adv_requested_member_count; char *adv_data; diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 8ce8057a5..e281406f9 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -9037,14 +9037,21 @@ void Client::Handle_OP_LDoNButton(const EQApplicationPacket *app) bool* p = (bool*)app->pBuffer; if (*p == true) { - auto pack = - new ServerPacket(ServerOP_AdventureRequestCreate, - sizeof(ServerAdventureRequestCreate_Struct) + (64 * adv_requested_member_count)); - ServerAdventureRequestCreate_Struct *sac = (ServerAdventureRequestCreate_Struct*)pack->pBuffer; + auto pack = new ServerPacket( + ServerOP_AdventureRequestCreate, + sizeof(ServerAdventureRequestCreate_Struct) + + (64 * adv_requested_member_count)); + + ServerAdventureRequestCreate_Struct *sac = (ServerAdventureRequestCreate_Struct *) pack->pBuffer; + strcpy(sac->leader, GetName()); - sac->id = adv_requested_id; - sac->theme = adv_requested_theme; - sac->member_count = adv_requested_member_count; + sac->id = adv_requested_id; + sac->theme = adv_requested_theme; + sac->member_count = adv_requested_member_count; + sac->average_level = adv_requested_avg_lvl; + + LogAdventure("[Client::Handle_OP_LDoNButton] Adventure average level [{}]", sac->average_level); + memcpy((pack->pBuffer + sizeof(ServerAdventureRequestCreate_Struct)), adv_requested_data, (64 * adv_requested_member_count)); worldserver.SendPacket(pack); delete pack; diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index 76b00398e..dde57078e 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -1688,7 +1688,16 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) Client *c = entity_list.GetClientByName(ars->leader); if (c) { - c->NewAdventure(ars->id, ars->theme, ars->text, ars->member_count, (const char*)(pack->pBuffer + sizeof(ServerAdventureRequestAccept_Struct))); + LogInfo("[ServerOP_AdventureRequestAccept] Adventure average level [{}]", ars->average_level); + + c->NewAdventure( + ars->id, + ars->theme, + ars->text, + ars->member_count, + (const char *) (pack->pBuffer + sizeof(ServerAdventureRequestAccept_Struct)), + ars->average_level + ); c->ClearPendingAdventureRequest(); } break; @@ -1811,6 +1820,8 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) zone->adv_data = new char[pack->size]; memcpy(zone->adv_data, pack->pBuffer, pack->size); ServerZoneAdventureDataReply_Struct* ds = (ServerZoneAdventureDataReply_Struct*)zone->adv_data; + + LogAdventure("[ServerOP_AdventureZoneData] Adventure average level [{}]", ds->average_level); } break; }