diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index b6ddaf2..2703b3c 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2825,6 +2825,9 @@ void Creature::OnBattleStart(Room* room) bool Creature::CanFollow(Creature* follower) { + #ifdef DEBUG + return false; + #endif if (follower->GetUniId() == GetUniId()) { return false; } diff --git a/server/gameserver/matchmgr.cc b/server/gameserver/matchmgr.cc index 7e460b9..b27890b 100644 --- a/server/gameserver/matchmgr.cc +++ b/server/gameserver/matchmgr.cc @@ -1,5 +1,7 @@ #include "precompile.h" +#include + #include "cs_proto.pb.h" #include "matchmgr.h" #include "GGListener.h" @@ -7,7 +9,19 @@ void MatchMgr::Init() { - + a8::Timer::Instance()->AddRepeatTimerAndAttach + (1000, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + MatchMgr::Instance()->Output(); + }, + &timer_attacher.timer_list_, + [] (const a8::XParams& param) + { + } + ); } void MatchMgr::UnInit() @@ -30,12 +44,15 @@ void MatchMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) GGListener::Instance()->SendToClient(hdr.socket_handle, 0, notifymsg); } { - MatchTeam* team = GetTeam(msg.account_id()); + MatchTeam* team = GetTeam(msg.team_uuid()); if (!team) { team = new MatchTeam(); team->Init(hdr, msg); team_hash_[msg.team_uuid()] = team; team->TryCombineTeam(); + #ifdef DEBUG + a8::XPrintf("newteam %s\n", {msg.team_uuid()}); + #endif } else { if (team->IsRawMember(msg.account_id())) { return; @@ -139,3 +156,14 @@ void MatchMgr::RemoveSocket(int socket_handle) socket_hash_.erase(itr); } } + +void MatchMgr::Output() +{ +#ifdef DEBUG + a8::XPrintf(">>>>>>>>>>>>>>>>>>>>>>>>>>\n", {}); + for (auto& pair : team_hash_) { + a8::XPrintf("team:%s \n", {pair.first}); + } + a8::XPrintf("<<<<<<<<<<<<<<<<<<<<<<<<<<\n", {}); +#endif +} diff --git a/server/gameserver/matchmgr.h b/server/gameserver/matchmgr.h index 29e2403..0450425 100644 --- a/server/gameserver/matchmgr.h +++ b/server/gameserver/matchmgr.h @@ -21,6 +21,8 @@ class MatchMgr : public a8::Singleton friend class a8::Singleton; public: + a8::TimerAttacher timer_attacher; + void Init(); void UnInit(); @@ -36,6 +38,7 @@ public: std::tuple* GetMatchInfo(int socket_handle); void RemoveTeam(const std::string& team_uuid); void RemoveSocket(int socket_handle); + void Output(); private: std::map team_hash_; diff --git a/server/gameserver/matchteam.cc b/server/gameserver/matchteam.cc index 70910b3..aee079c 100644 --- a/server/gameserver/matchteam.cc +++ b/server/gameserver/matchteam.cc @@ -152,6 +152,19 @@ void MatchTeam::AddRawMember(f8::MsgHdr& hdr, const cs::CMJoin& msg) if (!first_member_) { first_member_ = member; } + if (master_team_ != this) { + master_team_->curr_member_hash_.push_back(member); + } + #ifdef DEBUG + a8::XPrintf("AddRawMember %s %s %d %d %d\n", + { + GetTeamUUid(), + msg.account_id(), + curr_member_hash_.size(), + master_team_->curr_member_hash_.size(), + master_team_ == this ? 1 : 0 + }); + #endif } bool MatchTeam::IsRawMember(const std::string &account_id) @@ -351,38 +364,77 @@ bool MatchTeam::HasSameCurrMember(MatchTeam* b) bool MatchTeam::CanCombine(MatchTeam* b) { if (this == b) { +#ifdef DEBUG + a8::XPrintf("CanCombine 1\n", {}); +#endif return false; } //已合并 if (master_team_ != this){ +#ifdef DEBUG + a8::XPrintf("CanCombine 2\n", {}); +#endif return false; } //已合并 if (b->master_team_ != b) { +#ifdef DEBUG + a8::XPrintf("CanCombine 3\n", {}); +#endif return false; } if (phase_ != kMatchCombining) { +#ifdef DEBUG + a8::XPrintf("CanCombine 4\n", {}); +#endif return false; } if (b->phase_ != kMatchCombining) { +#ifdef DEBUG + a8::XPrintf("CanCombine 5\n", {}); +#endif return false; } if (IsShuaRobotTime()) { +#ifdef DEBUG + a8::XPrintf("CanCombine 6\n", {}); +#endif return false; } if (b->IsShuaRobotTime()) { +#ifdef DEBUG + a8::XPrintf("CanCombine 7\n", {}); +#endif return false; } if (!b->combined_team_hash_.empty()) { +#ifdef DEBUG + a8::XPrintf("CanCombine 8\n", {}); +#endif return false; } if (GetPredictMemberNum() + b->GetPredictMemberNum() > MAX_TEAM_NUM) { +#ifdef DEBUG + a8::XPrintf("CanCombine 9\n", {}); +#endif return false; } if (combined_team_hash_.find(b->GetTeamUUid()) != combined_team_hash_.end()) { +#ifdef DEBUG + a8::XPrintf("CanCombine 10\n", {}); +#endif + return false; + } + if (b->combined_team_hash_.find(GetTeamUUid()) != b->combined_team_hash_.end()) { +#ifdef DEBUG + a8::XPrintf("CanCombine 10\n", {}); +#endif return false; } if (HasSameCurrMember(b)) { +#ifdef DEBUG + a8::XPrintf("CanCombine 11\n", {}); +#endif return false; } return true; @@ -390,6 +442,15 @@ bool MatchTeam::CanCombine(MatchTeam* b) void MatchTeam::Combine(MatchTeam* b) { +#ifdef DEBUG + a8::XPrintf("Combine %s->%s %d:%d", + { + b->GetTeamUUid(), + GetTeamUUid(), + b->curr_member_hash_.size(), + curr_member_hash_.size() + }); +#endif combined_team_hash_[b->GetTeamUUid()] = b; b->master_team_ = this; for (auto& member : b->curr_member_hash_) {