From 7b6de450fb247cdea6bb05ccf591f2945859b729 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 28 Sep 2021 14:58:24 +0800 Subject: [PATCH] 1 --- server/gameserver/room.cc | 22 +++++++++++++++++----- server/gameserver/room.h | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index fa68194..7dc4933 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -231,7 +231,7 @@ Player* Room::NewPlayer() return hum; } -void Room::AddPlayer(Player* hum) +void Room::AddPlayer(Player* hum, BornPoint* init_born_point, bool no_matchteam) { if (gas_data_.gas_mode != GasInactive) { abort(); @@ -239,7 +239,11 @@ void Room::AddPlayer(Player* hum) while (human_hash_.size() >= GetRoomMaxPlayerNum()) { RandRemoveAndroid(); } - hum->born_point = AllocBornPoint(hum); + if (init_born_point) { + hum->born_point = init_born_point; + } else { + hum->born_point = AllocBornPoint(hum); + } if (!hum->born_point) { hum->SetPos(GetDefaultBornPoint()); } else { @@ -259,7 +263,9 @@ void Room::AddPlayer(Player* hum) AddToAccountHash(hum); AddToHumanHash(hum); AddToAliveHumanHash(hum); - MatchTeam(hum); + if (!no_matchteam) { + MatchTeam(hum); + } hum->PushJoinRoomMsg(); ++alive_count_; alive_count_chged_frameno_ = GetFrameNo(); @@ -1805,7 +1811,7 @@ void Room::RandRemoveAndroid() } if (!hum) { for (auto& pair : human_hash_) { - if (pair.second->IsAndroid()) { + if (pair.second->IsAndroid() && pair.second->team_uuid.empty()) { hum = pair.second; break; } @@ -3877,6 +3883,7 @@ void Room::AddTeam(class MatchTeam* team) if (team->GetCurrMembers().size() != MAX_TEAM_NUM) { return; } + BornPoint* init_born_point = nullptr; for (auto& member : team->GetCurrMembers()) { cs::CMJoin& msg = member->msg; if (member->is_robot) { @@ -3885,7 +3892,10 @@ void Room::AddTeam(class MatchTeam* team) hum->name = robot_meta->i->name(); hum->meta = MetaMgr::Instance()->GetPlayer(robot_meta->i->hero_id()); hum->robot_meta = robot_meta; - hum->born_point = AllocBornPoint(hum); + if (!init_born_point) { + init_born_point = AllocBornPoint(hum); + } + hum->born_point = init_born_point; if (!hum->born_point) { hum->SetPos(GetDefaultBornPoint()); } else { @@ -3900,7 +3910,9 @@ void Room::AddTeam(class MatchTeam* team) hum->Initialize(); AddToEntityHash(hum); AddToHumanHash(hum); + #if 0 MatchTeam(hum); + #endif ++alive_count_; alive_count_chged_frameno_ = GetFrameNo(); ++PerfMonitor::Instance()->alive_count; diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 46a45bf..c29b88b 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -125,7 +125,7 @@ public: int GetRealPlayerNum() { return accountid_hash_.size();} Player* NewPlayer(); - void AddPlayer(Player* hum); + void AddPlayer(Player* hum, BornPoint* init_born_point = nullptr, bool no_matchteam = false); Human* FindEnemy(Human* hum); void AddTeam(class MatchTeam* team);