From 00cea231a5c9a1fa9c4e3ebceecaab5746b7d68e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 12 Apr 2021 20:09:48 +0800 Subject: [PATCH] 1 --- server/gameserver/human.cc | 4 +++- server/gameserver/incubator.cc | 27 ++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 22b83b8..a3bbb49 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3195,7 +3195,9 @@ void Human::OnBuffRemove(const Buff& buff) default: break; } - room->frame_event.RemoveBuff(this, buff.meta->i->buff_id()); + if (!buff.meta->i->only_server()) { + room->frame_event.RemoveBuff(this, buff.meta->i->buff_id()); + } } void Human::OnLand() diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 84ee284..fc20f38 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -1,6 +1,8 @@ #include "precompile.h" #include "incubator.h" +#include "room.h" +#include "human.h" void Incubator::Init() { @@ -14,15 +16,30 @@ void Incubator::UnInit() void Incubator::RecycleAndroid(Human* hum) { - #if 0 - room->TouchPlayerList + Human* nearest_hum = nullptr; + Human* target = hum; + float distance = 10000000; + room->TouchAlivePlayers ( a8::XParams(), - [] (Player* hum, a8::XParams& param) + [&nearest_hum, target, &distance] (Human* hum, a8::XParams& param) -> bool { - + float tmp_distance = hum->GetPos().ManhattanDistance(target->GetPos()); + if (tmp_distance < distance) { + nearest_hum = hum; + distance = tmp_distance; + } + return true; }); - #endif + if (distance < 450) { + hum->RemoveBuffByEffectId(kBET_BeRecycle); + return; + } + if (distance > 1450) { + hum->RemoveBuffByEffectId(kBET_BeRecycle); + AddHoldHuman(nearest_hum); + return; + } } void Incubator::AddHoldHuman(Human* hum)