From 8963e9d9828fde39cd101108a1eed6966cdcb3e0 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 18 Nov 2020 17:09:23 +0800 Subject: [PATCH] 1 --- server/imserver/guild.cc | 19 +++++++++++++++++++ server/imserver/metamgr.cc | 10 ++++++++++ server/imserver/metamgr.h | 2 ++ 3 files changed, 31 insertions(+) diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index 8584e40..b425f42 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -14,6 +14,7 @@ #include "synchelper.h" #include "player.h" #include "gamelog.h" +#include "metamgr.h" #include "framework/cpp/httpclientpool.h" @@ -403,6 +404,24 @@ void Guild::_CMGuildAgree(f8::MsgHdr& hdr, const cs::CMGuildAgree& msg) void Guild::_CMGuildGainExp(f8::MsgHdr& hdr, const cs::CMGuildGainExp& msg) { ss::SS_IM_ForwardGuildCMMsg *forward_msg = (ss::SS_IM_ForwardGuildCMMsg*)hdr.user_data; + + int exp = msg.exp(); + if (exp > 0) { + MetaData::Guild* next_guild_meta = nullptr; + do { + MetaData::Guild* curr_guild_meta = MetaMgr::Instance()->GetGuild(GuildLv()); + next_guild_meta = MetaMgr::Instance()->GetGuild(GuildLv() + 1); + if (!next_guild_meta || !curr_guild_meta) { + break; + } + int add_exp = std::max(curr_guild_meta->i->experience(), 0); + } while (next_guild_meta && exp > 0); + } + + cs::SMGuildGainExp respmsg; + GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, + forward_msg->context(), + respmsg); } void Guild::_CMGuildRefuse(f8::MsgHdr& hdr, const cs::CMGuildRefuse& msg) diff --git a/server/imserver/metamgr.cc b/server/imserver/metamgr.cc index c4922f1..29c36ae 100644 --- a/server/imserver/metamgr.cc +++ b/server/imserver/metamgr.cc @@ -94,3 +94,13 @@ void MetaMgr::Reload() loader_ = new MetaDataLoader(); loader_->Load(); } + +MetaData::Guild* MetaMgr::GetGuild(int guild_lv) +{ + auto itr = loader_->guild_hash.find(guild_lv); + if (itr != loader_->guild_hash.end()) { + return itr->second; + } else { + return nullptr; + } +} diff --git a/server/imserver/metamgr.h b/server/imserver/metamgr.h index faa0fab..6683349 100644 --- a/server/imserver/metamgr.h +++ b/server/imserver/metamgr.h @@ -16,6 +16,8 @@ class MetaMgr : public a8::Singleton void UnInit(); void Reload(); + MetaData::Guild* GetGuild(int guild_lv); + private: MetaDataLoader* loader_ = nullptr;