private bool IsInDispersalList(PlayerModel player, bool ignoreWhitelist)
{
if (player == null) return false;
if (player.Role != ROLE_PLAYER) return false;
player.DispersalGroup = 0;
PerModeSettings perMode = GetPerModeSettings();
if (!perMode.EnableDisperseEvenlyList) return false;
bool isDispersalByList = false;
String extractedTag = ExtractTag(player);
if (String.IsNullOrEmpty(extractedTag)) {
extractedTag = INVALID_NAME_TAG_GUID;
}
String guid = (String.IsNullOrEmpty(player.EAGUID)) ? INVALID_NAME_TAG_GUID : player.EAGUID;
if (fSettingDisperseEvenlyList.Count > 0) {
if (fSettingDisperseEvenlyList.Contains(player.Name)
|| fSettingDisperseEvenlyList.Contains(guid)
|| fSettingDisperseEvenlyList.Contains(extractedTag)) {
// Special case for whitelist options: clan tag on dispersal list, but Whitelist option enabled
if (fSettingDisperseEvenlyList.Contains(extractedTag)
&& !fSettingDisperseEvenlyList.Contains(player.Name)
&& !fSettingDisperseEvenlyList.Contains(guid)
&& OnWhitelist
&& !ignoreWhitelist
&& CheckWhitelist(player, WL_DISPERSE)) {
isDispersalByList = false;
} else {
isDispersalByList = true;
}
}
}
for (int i = 1; i <= 4; ++i) { // Up to 4 groups
if (!isDispersalByList && fDispersalGroups[i].Count > 0) {
fDispersalGroups[i] = new List<String>(fDispersalGroups[i]);
if (fDispersalGroups[i].Contains(player.Name)
|| fDispersalGroups[i].Contains(guid)
|| fDispersalGroups[i].Contains(extractedTag)) {
// Special case for whitelist options: clan tag on dispersal list, but Whitelist option enabled
if (fDispersalGroups[i].Contains(extractedTag)
&& !fDispersalGroups[i].Contains(player.Name)
&& !fDispersalGroups[i].Contains(guid)
&& OnWhitelist
&& !ignoreWhitelist
&& CheckWhitelist(player, WL_DISPERSE)) {
isDispersalByList = false;
} else {
isDispersalByList = true;
player.DispersalGroup = i;
}
break;
}
}
}
return (isDispersalByList);
}