diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 615b8e01..ec629595 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -510,24 +510,30 @@ void Incubator::ShowHand() hum->GetMutablePos().FromGlmVec3(point); Global::Instance()->verify_set_pos = 0; - room->xtimer.SetTimeoutEx - ( - SERVER_FRAME_RATE * 20, - [hum] (int event, const a8::Args* args) - { - if (a8::TIMER_EXEC_EVENT == event) { - #if 0 - a8::UnSetBitFlag(hum->status, CS_DisableAttackAndroid); - #endif - } - }, - &hum->xtimer_attacher); - room->EnableHuman(hum); hum->MustBeAddBuff(hum, kTraceBuffId); a8::SetBitFlag(hum->status, CS_CrazeMode); a8::SetBitFlag(hum->status, CS_DisableAttackAndroid); } + room->xtimer.SetIntervalEx + ( + SERVER_FRAME_RATE, + [room = room] (int event, const a8::Args* args) mutable + { + if (a8::TIMER_EXEC_EVENT == event) { + if (!room->IsGameOver() && room->GetAlivePlayerCount() <= 0) { + room->TraverseHumanList + ( + [] (Huamn* hum) + { + a8::UnSetBitFlag(hum->status, CS_DisableAttackAndroid); + return true; + }); + room->xtimer.DeleteCurrentTimer(); + } + } + }, + &room->xtimer_attacher_); hold_humans_.clear(); #ifdef DEBUG1 room->TraversePlayerList diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 031e56e5..1e73767b 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -121,6 +121,7 @@ public: int AliveCount(); long long AliveCountChgFrameNo() { return alive_count_chged_frameno_; }; inline int RealAliveCount() { return alive_human_hash_.size(); } + inline int GetAlivePlayerCount() { return alive_player_hash_.size(); } Player* GetPlayerByAccountId(const std::string& accountid); Player* GetPlayerByUniId(int uniid); Entity* GetEntityByUniId(int uniid);