public static bool PlayerModifiersValid(int mod1, int mod2) { bool flag = true; bool[] serverFilters = new bool[8]; RUtility.BitmaskToBoolArray(MPModPrivateData.ModifierFilterMask, ref serverFilters); for (int i = 0; i < 4; i++) { // Only verify modifier 1 if there's an enabled lobby selection in left column if (serverFilters[i]) { flag &= serverFilters[mod1]; break; } } for (int j = 4; j < 8; j++) { // Only verify modifier 2 if there's an enabled lobby selection in right column if (serverFilters[j]) { flag &= serverFilters[mod2 + 4]; break; } } return(flag); }
static void Prefix() { bool[] serverFilters = new bool[8]; RUtility.BitmaskToBoolArray(MPModPrivateData.ModifierFilterMask, ref serverFilters); foreach (KeyValuePair <int, LoadoutDataMessage> keyValuePair in NetworkMatch.m_player_loadout_data.Where(x => x.Key > 0)) { if (!serverFilters.Take(4).Any(x => x)) { keyValuePair.Value.m_mp_modifier1 = -1; } if (!serverFilters.Skip(4).Take(4).Any(x => x)) { keyValuePair.Value.m_mp_modifier2 = -1; } } }
public static string GetDisabledModifiers() { string result = String.Empty; List <int> disabled = new List <int>(); bool[] serverFilters = new bool[8]; RUtility.BitmaskToBoolArray(MPModPrivateData.ModifierFilterMask, ref serverFilters); for (int i = 0; i < 8; i++) { if (!serverFilters[i]) { disabled.Add(i); } } result = String.Join(", ", disabled.Select(x => Player.GetMpModifierName(x < 4 ? x : x - 4, x < 4 ? true : false)).ToArray()); return(result); }
static void Prefix() { if (!Overload.NetworkManager.IsServer()) { return; } bool[] serverFilters = new bool[8]; RUtility.BitmaskToBoolArray(MPModPrivateData.ModifierFilterMask, ref serverFilters); foreach (var player in NetworkMatch.m_player_loadout_data.Where(x => x.Key > 0)) { if (!MPModifiers.PlayerModifiersValid(player.Value.m_mp_modifier1, player.Value.m_mp_modifier2)) { var conn = NetworkServer.connections[player.Key]; if (conn != null) { NetworkServer.SendToClient(conn.connectionId, 86, new StringMessage("This match has disabled modifiers: " + GetDisabledModifiers())); NetworkMatch.RemoveConnectionId(conn.connectionId); GameManager.m_gm.StartCoroutine(DisconnectCoroutine(conn.connectionId)); } } } }