diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index c267a444..c6cc59b8 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -539,3 +539,16 @@ void Incubator::ShowHand() &room->xtimer_attacher_); hold_humans_.clear(); } + +void Incubator::Clear(int save_num) +{ + while (hold_humans_.size() > save_num) { + Human* hum = hold_humans_.at(0); + hum->BeKill(VP_Gas, + TEXT("battle_server_killer_gas", "毒圈"), + VW_Gas, + VP_Gas, + TEXT("battle_server_killer_gas", "毒圈")); + hold_humans_.erase(hold_humans_.begin()); + } +} diff --git a/server/gameserver/incubator.h b/server/gameserver/incubator.h index df57cdde..dce12013 100644 --- a/server/gameserver/incubator.h +++ b/server/gameserver/incubator.h @@ -19,6 +19,7 @@ class Incubator int GetPveLeftTime(); void NextWave(); void ShowHand(); + void Clear(int save_num); private: bool CanSee(Human* hum, Human* exclude_hum); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index f21c31b7..4839ddca 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -3381,11 +3381,11 @@ void Room::GMFastForward() ( [this] (Player* hum) { - glm::vec3 point = glm::vec3(GetGasData().new_area_meta->GetLastArea()->x1(), + glm::vec3 src_point = glm::vec3(GetGasData().new_area_meta->GetLastArea()->x1(), 6.0f, GetGasData().new_area_meta->GetLastArea()->y1()); { - glm::vec3 center = hum->GetPos().ToGlmVec3(); + glm::vec3 center = src_point; map_instance->Scale(center); glm::vec3 point; bool ok = false; @@ -3402,6 +3402,18 @@ void Room::GMFastForward() } } }); + GetIncubator()->Clear(6); + for (auto& pair : human_hash_) { + if (pair.second->IsAndroid() && + !a8::HasBitFlag(pair.second->status, CS_Disable)) { + Human* hum = pair.second; + hum->BeKill(VP_Gas, + TEXT("battle_server_killer_gas", "毒圈"), + VW_Gas, + VP_Gas, + TEXT("battle_server_killer_gas", "毒圈")); + } + } xtimer.SetTimeoutEx ( 1,