From ee0d56cf034ad8bb579fd05001622cae9339b4be Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 24 Sep 2021 06:50:05 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0block=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/framedata.cc | 5 +++++ server/gameserver/framemaker.cc | 7 +++++++ server/gameserver/human.cc | 14 +++++++++++--- server/gameserver/metamgr.cc | 7 +++++++ server/gameserver/metamgr.h | 2 ++ 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/server/gameserver/framedata.cc b/server/gameserver/framedata.cc index 35af3d06..384d3df9 100644 --- a/server/gameserver/framedata.cc +++ b/server/gameserver/framedata.cc @@ -9,6 +9,11 @@ void FrameData::ClearFrameData(Human* hum) if (!new_objects.empty()) { new_objects.clear(); } + if (!block_objects.empty()) { + if (hum->IsAndroid() && !hum->HasObserver()) { + block_objects.clear(); + } + } if (!del_objects.empty()) { if (!a8::HasBitFlag(hum->status, CS_Disable)) { for (auto& itr : del_objects) { diff --git a/server/gameserver/framemaker.cc b/server/gameserver/framemaker.cc index 31437ee7..004681c3 100644 --- a/server/gameserver/framemaker.cc +++ b/server/gameserver/framemaker.cc @@ -174,6 +174,13 @@ void FrameMaker::SerializeLootObjects(cs::SMUpdate* msg, Room* room, Human* hum, void FrameMaker::SerializeMapBlockObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata) { + for (auto itr = framedata->block_objects.begin(); itr != framedata->block_objects.end(); ) { + if (framedata->new_objects.size() >= 200) { + break; + } + framedata->new_objects[itr->first] = itr->second; + itr = framedata->block_objects.erase(itr); + } } void FrameMaker::SerializeNewObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index e0f5ccae..637810f2 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -817,7 +817,11 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name, i void Human::AddToNewObjects(Entity* entity) { - framedata_.new_objects[entity->GetUniId()] = entity->GetEntityWeakPtrRef(); + if (entity->IsEntityType(ET_MapBlock) && MetaMgr::Instance()->async_send_mapblock) { + framedata_.block_objects[entity->GetUniId()] = entity->GetEntityWeakPtrRef(); + } else { + framedata_.new_objects[entity->GetUniId()] = entity->GetEntityWeakPtrRef(); + } } void Human::AddToPartObjects(Entity* entity) @@ -899,7 +903,11 @@ void Human::RemoveObjects(Entity* entity) void Human::AddOutObjects(Entity* entity) { - framedata_.out_objects.insert(entity->GetUniId()); + if (entity->IsEntityType(ET_MapBlock) && MetaMgr::Instance()->async_send_mapblock) { + + } else { + framedata_.out_objects.insert(entity->GetUniId()); + } } void Human::RemoveOutObjects(Entity* entity) @@ -1300,7 +1308,7 @@ void Human::RemoveObserver(Human* observer) bool Human::HasObserver() { - return !observers_.empty(); + return observers_.size() > 1; } void Human::SendUpdateMsg() diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 2e920e34..37cbdad3 100644 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -329,7 +329,14 @@ public: MetaMgr::Instance()->newbie_fill_interval = MetaMgr::Instance()->GetSysParamAsInt("newbie_fill_interval", 5000); MetaMgr::Instance()->other_fill_interval = MetaMgr::Instance()->GetSysParamAsInt("other_fill_interval", 2000); MetaMgr::Instance()->map_cell_width = MetaMgr::Instance()->GetSysParamAsInt("map_cell_width", 64 * 8); + #ifdef DEBUG + MetaMgr::Instance()->map_cell_width = 512; + #endif MetaMgr::Instance()->bullet_planck_step_length = std::max(15, MetaMgr::Instance()->GetSysParamAsInt("bullet_planck_step_length", 15)); + MetaMgr::Instance()->async_send_mapblock = MetaMgr::Instance()->GetSysParamAsInt("async_send_mapblock", 0); +#ifdef DEBUG + MetaMgr::Instance()->async_send_mapblock = 1; +#endif { METAMGR_READ(prebattle_box_id_chiji, 0); } diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index ec7184ea..afa68e86 100644 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -174,6 +174,8 @@ class MetaMgr : public a8::Singleton int watchable = 0; int prebattle_combine_team = 1; + int async_send_mapblock = 1; + private: MetaDataLoader* loader_ = nullptr;