From aff0fdb0c831d8b0125c987482fc8aeecfff4b25 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 7 Jul 2020 20:25:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=81=E9=87=8F=E4=BC=98=E5=8C=96=20alive=5F?= =?UTF-8?q?count?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/framemaker.cc | 5 ++++- server/gameserver/room.cc | 4 ++++ server/gameserver/room.h | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/server/gameserver/framemaker.cc b/server/gameserver/framemaker.cc index 5c21a82..ae95fb7 100644 --- a/server/gameserver/framemaker.cc +++ b/server/gameserver/framemaker.cc @@ -154,7 +154,10 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(const Human* hum) msg->set_gas_progress(room->gas_data.gas_progress); TypeConvert::ToPb(room->gas_data.pos_old, msg->mutable_gas_pos_old()); } - msg->set_alive_count(room->AliveCount()); + if (room->GetFrameNo() - room->AliveCountChgFrameNo() <= 4 || + room->GetFrameNo() - hum->join_frameno <= 2) { + msg->set_alive_count(room->AliveCount()); + } } return msg; } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 151d848..5567e50 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -190,6 +190,7 @@ void Room::AddPlayer(Player* hum) accountid_hash_[hum->account_id] = hum; human_hash_[hum->entity_uniid] = hum; ++alive_count_; + alive_count_chged_frameno_ = GetFrameNo(); ++App::Instance()->perf.alive_count; grid_service.AddHuman(hum); hum->FindLocation(); @@ -300,6 +301,7 @@ void Room::CreateAndroid(int robot_num) moveable_hash_[hum->entity_uniid] = hum; human_hash_[hum->entity_uniid] = hum; ++alive_count_; + alive_count_chged_frameno_ = GetFrameNo(); ++App::Instance()->perf.alive_count; grid_service.AddHuman(hum); hum->FindLocation(); @@ -661,6 +663,7 @@ void Room::OnHumanDie(Human* hum) frame_event.AddExplosionEx(hum, 0, hum->pos, 1); } --alive_count_; + alive_count_chged_frameno_ = GetFrameNo(); --App::Instance()->perf.alive_count; NotifyUiUpdate(); } @@ -1406,6 +1409,7 @@ void Room::RandRemoveAndroid() human_hash_.erase(hum->entity_uniid); removed_robot_hash_[hum->entity_uniid] = hum; --alive_count_; + alive_count_chged_frameno_ = GetFrameNo(); --App::Instance()->perf.alive_count; for (auto& pair : human_hash_) { pair.second->RemovePartObjects(hum); diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 7897a19..d52bb20 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -56,6 +56,7 @@ public: void Update(int delta_time); int GetPlayerNum(); int AliveCount(); + long long AliveCountChgFrameNo() { return alive_count_chged_frameno_; } Player* GetPlayerByAccountId(const std::string& accountid); Player* GetPlayerByUniId(int uniid); Entity* GetEntityByUniId(int uniid); @@ -135,6 +136,7 @@ private: private: int elapsed_time_ = 0; int alive_count_ = 0; + long long alive_count_chged_frameno_ = 0; MetaData::AirLine* airline_ = nullptr; a8::XTimerAttacher xtimer_attacher; xtimer_list* auto_jump_timer_ = nullptr;