diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 8075111d..dad9faf4 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -2615,17 +2615,21 @@ Human* Room::GetOneCanEnableAndroid() void Room::GetCanEnableAndroids(std::vector& humans, size_t num) { - for (auto& pair : human_hash_) { - if (pair.second->IsAndroid() && - !pair.second->real_dead && - a8::HasBitFlag(pair.second->status, CS_Disable) - ) { - if (humans.size() >= num) { - break; - } - humans.push_back(pair.second); - } - } + TraverseHumanList + ( + [&humans, num] (Human* ele_hum) -> bool + { + if (ele_hum->IsAndroid() && + !ele_hum->real_dead && + a8::HasBitFlag(ele_hum->status, CS_Disable) + ) { + if (humans.size() >= num) { + return false; + } + humans.push_back(ele_hum); + } + return true; + }); } Player* Room::GetOneAlivePlayer() @@ -2664,18 +2668,26 @@ void Room::SyncFrameData() long long begin_tick = a8::XGetTickCount(); long long end_tick = a8::XGetTickCount(); #endif - for (auto& pair : human_hash_) { - pair.second->SendUpdateMsg(); + TraverseHumanList + ( #ifdef MYDEBUG - end_tick = a8::XGetTickCount(); - #if 0 - if (a8::XGetTickCount() - begin_tick > 100) { - A8_ABORT(); - } - #endif - begin_tick = a8::XGetTickCount(); + [&begin_tick, &end_tick] (Human* ele_hum) -> bool +#else + [] (Human* ele_hum) -> bool #endif - } + { + ele_hum->SendUpdateMsg(); +#ifdef MYDEBUG + end_tick = a8::XGetTickCount(); +#if 0 + if (a8::XGetTickCount() - begin_tick > 100) { + A8_ABORT(); + } +#endif + begin_tick = a8::XGetTickCount(); +#endif + return true; + }); #ifdef MYDEBUG end_tick = a8::XGetTickCount(); if (a8::XGetTickCount() - begin_tick > 1000) {