User* CParty::DistributeItemToRandomMember(User* requester, CCreature* item, int itemCount) {
const float PICKUP_RANGE = 1500.0f;
std::vector<User*> allMembers;
GetAllPartyMembers(allMembers, item);
std::vector<User*> eligibleMembers;
for (User* member : allMembers) {
if (!member || !member->IsAlive() || !member->IsInRange(requester, PICKUP_RANGE)) {
continue;
}
if (member->IsTrading()) {
member->CancelTrade();
}
if (member->CanPerformActions() && member->GetInventory()->CanAddItem(item->GetID(), itemCount)) {
eligibleMembers.push_back(member);
}
}
User* winner = nullptr;
if (!eligibleMembers.empty()) {
int randomIndex = rand() % eligibleMembers.size();
winner = eligibleMembers[randomIndex];
}
FreeMemory(allMembers.data());
FreeMemory(eligibleMembers.data());
return winner;
}