From c572332f5f8cc3e66d3105899ad302d211d58be1 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 14 Jun 2023 19:56:08 +0800 Subject: [PATCH] 1 --- server/gameserver/incubator.cc | 27 ++++++++++++++++++++++++++- server/gameserver/mt/SafeArea.cc | 11 ++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 6c7f91ac..f9c70c52 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -17,6 +17,7 @@ #include "mt/PveGeminiMode.h" #include "mt/PveGeminiContent.h" #include "mt/Text.h" +#include "mt/SafeArea.h" void Incubator::Init() { @@ -151,7 +152,7 @@ void Incubator::AllocAndroid(Human* target, int num, std::vector* androi room->BroadcastDebugMsg(a8::Format("投放机器人 分配失败 %d", {hold_humans_.size()})); } #endif - if (hold_humans_.size() <= 6) { + if (hold_humans_.size() <= 6 && room->GetGasData().new_area_meta->GetSmallRingCount() < 3) { ShowHand(); } } @@ -477,5 +478,29 @@ void Incubator::NextWave() void Incubator::ShowHand() { + for (auto& hum : hold_humans_) { + glm::vec3 point = glm::vec3(room->GetGasData().new_area_meta->GetLastArea()->x1(), + 6.0f, + room->GetGasData().new_area_meta->GetLastArea()->y1()); + Global::Instance()->verify_set_pos = 1; + hum->GetMutablePos().FromGlmVec3(point); + Global::Instance()->verify_set_pos = 0; + a8::SetBitFlag(hum->status, CS_CrazeMode); + a8::SetBitFlag(hum->status, CS_DisableAttackAndroid); + room->xtimer.SetTimeoutEx + ( + SERVER_FRAME_RATE * 20, + [hum] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + a8::UnSetBitFlag(hum->status, CS_DisableAttackAndroid); + } + }, + &hum->xtimer_attacher); + + room->EnableHuman(hum); + hum->MustBeAddBuff(hum, kTraceBuffId); + } + hold_humans_.clear(); } diff --git a/server/gameserver/mt/SafeArea.cc b/server/gameserver/mt/SafeArea.cc index 150f8dbc..e9ad0646 100644 --- a/server/gameserver/mt/SafeArea.cc +++ b/server/gameserver/mt/SafeArea.cc @@ -22,6 +22,7 @@ namespace mt if (itr->second.at(itr->second.size() - 1)->id() + 1 != id()) { abort(); } + itr->second.push_back(this); } } if (!boss().empty()) { @@ -45,7 +46,15 @@ namespace mt void SafeArea::StaticPostInit() { for (auto& pair : type_hash_) { - + if (pair.second.size() < 1) { + abort(); + } + int ring_count = pair.second.size() - 1; + auto last_area = pair.second.at(pair.second.size() - 1); + for (auto& meta : pair.second) { + meta->small_ring_count_ = ring_count--; + meta->last_area_ = last_area; + } } }