diff --git a/server/bin/exported/android_pvp.xml b/server/bin/exported/android_pvp.xml index d92a585b..af3800be 100644 --- a/server/bin/exported/android_pvp.xml +++ b/server/bin/exported/android_pvp.xml @@ -69,11 +69,11 @@ - + - + diff --git a/server/gameserver/gridservice.cc b/server/gameserver/gridservice.cc index 43bf1319..55a81f1d 100644 --- a/server/gameserver/gridservice.cc +++ b/server/gameserver/gridservice.cc @@ -436,6 +436,18 @@ void GridService::TraverseObstacles(int room_idx, void GridService::DeatchHuman(Human* target) { + #if 1 + target->room->TraverseHumanList + ( + [target] (Human* hum) + { + hum->AddOutObjects(target); + return true; + }); + for (auto& cell : target->GetGridList()) { + cell->RemoveCreature(target); + } + #else for (auto& cell : target->GetGridList()) { bool stop = false; cell->TraverseHumanList @@ -448,6 +460,7 @@ void GridService::DeatchHuman(Human* target) stop); cell->RemoveCreature(target); } + #endif target->SetGridId(0); target->GetGridList().clear(); } diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 114e88df..ad1528ac 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -70,6 +70,9 @@ void Incubator::AllocAndroid(Human* target, int num, std::vector* androi if (!room->xtimer.IsRunning()) { A8_ABORT(); } + if (target->room->IsGameOver()) { + return; + } int try_count = 0; glm::vec3 dir = GlmHelper::UP; while (num > 0 && try_count < 8 && !hold_humans_.empty()) { diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 8c1b2285..5ee2591a 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -438,6 +438,7 @@ Human* Room::FindEnemy(Human* hum, float range) [&target, myself, range, &last_distance] (Human* hum) { if (!hum->dead && + !a8::HasBitFlag(hum->status, CS_Disable) && hum->team_id != myself->team_id) { float distance = hum->GetPos().Distance2D2(myself->GetPos()); if (distance <= range) { @@ -462,6 +463,7 @@ Creature* Room::FindEnemy(Creature* c, float range) [&target, myself, range, &last_distance] (Human* hum) { if (!hum->dead && + !a8::HasBitFlag(hum->status, CS_Disable) && hum->team_id != myself->team_id) { float distance = hum->GetPos().Distance2D2(myself->GetPos()); if (distance <= range) {