diff --git a/server/gameserver/mobabattle.cc b/server/gameserver/mobabattle.cc index 2ec3c83b..0ffa72e6 100644 --- a/server/gameserver/mobabattle.cc +++ b/server/gameserver/mobabattle.cc @@ -48,3 +48,12 @@ void MobaBattle::TraverseMemberList(std::function func) } } } + +void MobaBattle::TraverseTeam(std::function)> cb) +{ + for (auto& pair : uuid_hash_) { + if (!cb(pair.second)) { + break; + } + } +} diff --git a/server/gameserver/mobabattle.h b/server/gameserver/mobabattle.h index e6e36850..88958720 100644 --- a/server/gameserver/mobabattle.h +++ b/server/gameserver/mobabattle.h @@ -28,6 +28,7 @@ class MobaBattle int GetMemberNum(); int GetTeamNum(); void TraverseMemberList(std::function func); + void TraverseTeam(std::function)> cb); private: bool parse_ok_ = false; diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 10ad954f..a77ce52f 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2244,6 +2244,14 @@ void Room::NotifyKillList(const std::vector& uniid_list) int Room::InitWithMobaBattle(long ip_saddr, int socket_handle, std::shared_ptr msg, std::shared_ptr p) { + std::vector> moba_teams; + p->TraverseTeam + ( + [&moba_teams] (std::shared_ptr team) -> bool + { + moba_teams.push_back(team); + return true; + }); p->TraverseMemberList ( [p, msg, ip_saddr, socket_handle] (MobaMember* m) -> bool