diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index ea90168c..f8a67f22 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -9,6 +9,7 @@ #include "glmhelper.h" #include "mapinstance.h" #include "bornpoint.h" +#include "killmgr.h" #include "mt/Param.h" #include "mt/Map.h" @@ -209,8 +210,9 @@ void Incubator::AutoAllocAndroid() case GasMoving: { if (!hold_humans_.empty()){ + KillMgr::Instance()->SetAutoDie(); Human* hum = hold_humans_[0]; - if (room->GetGasData().GetGasMode() == GasWaiting && + if (room->GetGasData().GetGasMode() == GasMoving && hold_humans_.size() > 1 && ((rand() % 100) > 40)) { Human* killer = nullptr; @@ -231,8 +233,10 @@ void Incubator::AutoAllocAndroid() VP_Gas, TEXT("battle_server_killer_gas", "毒圈")); } else { + KillMgr::Instance()->UnSetAutoDie(); return; } + KillMgr::Instance()->UnSetAutoDie(); hold_humans_.erase(hold_humans_.begin()); room->xtimer.ModifyTime(alloc_timer_, SERVER_FRAME_RATE * (3 + rand() % 5)); } diff --git a/server/gameserver/killmgr.h b/server/gameserver/killmgr.h index 9f9fbfbd..b8503daf 100644 --- a/server/gameserver/killmgr.h +++ b/server/gameserver/killmgr.h @@ -41,6 +41,8 @@ class KillMgr : public a8::Singleton void Init(); void UnInit(); void OnHumanDead(Human* dead_hum, KillInfo* info); + void SetAutoDie() { is_auto_die_ = true; }; + void UnSetAutoDie() { is_auto_die_ = false; }; private: void FillHintInfo(Human* dead_hum, KillInfo* info, RollMsgHintInfo& hint_info); @@ -56,5 +58,8 @@ private: std::shared_ptr pb_msg); +private: + bool is_auto_die_ = false; + friend class PBUtils; };