diff --git a/server/masterserver/gsmgr.cc b/server/masterserver/gsmgr.cc index 68fd153..e47b04e 100644 --- a/server/masterserver/gsmgr.cc +++ b/server/masterserver/gsmgr.cc @@ -198,6 +198,17 @@ GSNode* GSMgr::AllocNode(int channel) std::vector* sorted_nodes = GetSortedNodesByChannel(channel); if (sorted_nodes && !sorted_nodes->empty()) { size_t rnd = std::min((size_t)2, sorted_nodes->size()); + if (rnd >= 2) { + GSNode* n1 = sorted_nodes->at(sorted_nodes->size() - 1); + GSNode* n2 = sorted_nodes->at(sorted_nodes->size() - 2); + if (n1->online_num < 100 && n2->online_num < 100) { + if (n1->instance_id < n2->instance_id) { + return n1; + } else { + return n2; + } + } + } int idx = rand() % rnd; while (idx >= 0) { if (sorted_nodes->at(idx)->servicing) {