示例#1
0
 public static bool IsOwner(MyCubeGrid grid, long id)
 {
     if (grid == null || id == 0)
     {
         return(false);
     }
     return(GridCache.GetOwners(grid).Contains(id) || GridCache.GetBuilders(grid).Contains(id));
 }
示例#2
0
        public static void IncreaseCount(MyCubeBlockDefinition def, long playerId, int amount = 1, long gridId = 0)
        {
            if (!BlockLimiterConfig.Instance.EnableLimits)
            {
                return;
            }

            var faction = MySession.Static.Factions.GetPlayerFaction(playerId);

            foreach (var limit in Limits)
            {
                if (!limit.IsMatch(def))
                {
                    continue;
                }

                var foundGrid = GridCache.TryGetGridById(gridId, out var grid);

                if (foundGrid && !limit.IsGridType(grid))
                {
                    limit.FoundEntities.Remove(gridId);
                    continue;
                }

                if (limit.IgnoreNpcs)
                {
                    if (MySession.Static.Players.IdentityIsNpc(playerId))
                    {
                        continue;
                    }
                    if (foundGrid && MySession.Static.Players.IdentityIsNpc(GridCache.GetBuilders(grid).FirstOrDefault()))
                    {
                        continue;
                    }
                }

                if (limit.LimitPlayers && playerId > 0)
                {
                    limit.FoundEntities.AddOrUpdate(playerId, amount, (l, i) => i + amount);
                }

                if (limit.LimitGrids && gridId > 0)
                {
                    limit.FoundEntities.AddOrUpdate(gridId, amount, (l, i) => i + amount);
                }

                if (limit.LimitFaction && faction != null)
                {
                    limit.FoundEntities.AddOrUpdate(faction.FactionId, amount, (l, i) => i + amount);
                }
            }
        }
示例#3
0
        public static bool IsExcepted(object target)
        {
            if (target == null)
            {
                return(false);
            }

            var allExceptions = new HashSet <string>(BlockLimiterConfig.Instance.GeneralException);

            if (allExceptions.Count == 0)
            {
                return(false);
            }

            MyIdentity     identity      = null;
            MyFaction      faction       = null;
            long           identityId    = 0;
            ulong          playerSteamId = 0;
            string         displayName   = "";
            HashSet <long> gridOwners    = new HashSet <long>();

            switch (target)
            {
            case HashSet <long> owners:
                gridOwners.UnionWith(owners);
                break;

            case ulong steamId:
                if (steamId == 0)
                {
                    return(false);
                }
                playerSteamId = steamId;
                identityId    = GetPlayerIdFromSteamId(steamId);
                identity      = MySession.Static.Players.TryGetIdentity(identityId);
                displayName   = identity.DisplayName;
                faction       = MySession.Static.Factions.GetPlayerFaction(identityId);
                break;

            case string name:
                if (allExceptions.Contains(name))
                {
                    return(true);
                }
                if (TryGetPlayerByNameOrId(name, out identity))
                {
                    identityId    = identity.IdentityId;
                    faction       = MySession.Static.Factions.GetPlayerFaction(identityId);
                    displayName   = identity.DisplayName;
                    playerSteamId = GetSteamIdFromPlayerId(identityId);
                }
                break;

            case long id:
                if (id == 0)
                {
                    return(false);
                }
                identityId = id;
                identity   = MySession.Static.Players.TryGetIdentity(id);
                if (identity != null)
                {
                    faction       = MySession.Static.Factions.GetPlayerFaction(id);
                    displayName   = identity.DisplayName;
                    playerSteamId = GetSteamIdFromPlayerId(id);
                }
                else
                {
                    faction = (MyFaction)MySession.Static.Factions.TryGetFactionById(id);
                }
                if (MyEntities.TryGetEntityById(id, out var entity))
                {
                    if (allExceptions.Contains(entity.DisplayName))
                    {
                        return(true);
                    }
                }

                if (GridCache.TryGetGridById(id, out var foundGrid))
                {
                    gridOwners.UnionWith(GridCache.GetOwners(foundGrid));
                    gridOwners.UnionWith(GridCache.GetBuilders(foundGrid));
                    if (allExceptions.Contains(foundGrid.DisplayName))
                    {
                        return(true);
                    }
                }
                break;

            case MyFaction targetFaction:
                if (allExceptions.Contains(targetFaction.Tag) ||
                    allExceptions.Contains(targetFaction.FactionId.ToString()))
                {
                    return(true);
                }
                break;

            case MyPlayer player:
                if (player.IsBot || player.IsWildlifeAgent)
                {
                    return(true);
                }
                playerSteamId = player.Character.ControlSteamId;
                if (playerSteamId == 0)
                {
                    return(false);
                }
                if (allExceptions.Contains(playerSteamId.ToString()))
                {
                    return(true);
                }
                identityId = GetPlayerIdFromSteamId(playerSteamId);
                if (identityId > 0)
                {
                    if (allExceptions.Contains(identityId.ToString()))
                    {
                        return(true);
                    }
                    identity    = MySession.Static.Players.TryGetIdentity(identityId);
                    displayName = identity.DisplayName;
                }
                break;

            case MyCubeGrid grid:
            {
                if (allExceptions.Contains(grid.DisplayName) || allExceptions.Contains(grid.EntityId.ToString()))
                {
                    return(true);
                }
                var owners = GridCache.GetOwners(grid);
                owners.UnionWith(GridCache.GetBuilders(grid));
                if (owners.Count == 0)
                {
                    break;
                }
                gridOwners.UnionWith(owners);
                break;
            }
            }

            foreach (var owner in gridOwners)
            {
                if (owner == 0)
                {
                    continue;
                }
                if (allExceptions.Contains(owner.ToString()))
                {
                    return(true);
                }
                identity      = MySession.Static.Players.TryGetIdentity(owner);
                playerSteamId = GetSteamIdFromPlayerId(owner);
                if (playerSteamId > 0 && allExceptions.Contains(playerSteamId.ToString()))
                {
                    return(true);
                }
                if (identity != null)
                {
                    if (allExceptions.Contains(identity.DisplayName))
                    {
                        return(true);
                    }
                }
                faction = MySession.Static.Factions.GetPlayerFaction(owner);
                if (faction != null && (allExceptions.Contains(faction.Tag) ||
                                        allExceptions.Contains(faction.FactionId.ToString())))
                {
                    return(true);
                }
            }

            if (playerSteamId > 0 && allExceptions.Contains(playerSteamId.ToString()))
            {
                return(true);
            }
            if (identityId > 0 && allExceptions.Contains(identityId.ToString()))
            {
                return(true);
            }
            if (identity != null && allExceptions.Contains(identity.DisplayName))
            {
                return(true);
            }
            if (faction != null && (allExceptions.Contains(faction.Tag) || allExceptions.Contains(faction.FactionId.ToString())))
            {
                return(true);
            }
            if (!string.IsNullOrEmpty(displayName) && allExceptions.Contains(displayName))
            {
                return(true);
            }
            return(false);
        }
示例#4
0
        public static void DecreaseCount(MyCubeBlockDefinition def, List <long> playerIds, int amount = 1, long gridId = 0)
        {
            if (!BlockLimiterConfig.Instance.EnableLimits)
            {
                return;
            }
            var factions = new List <MyFaction>();

            foreach (var playerId in playerIds)
            {
                var faction = MySession.Static.Factions.GetPlayerFaction(playerId);
                if (faction == null)
                {
                    continue;
                }
                factions.Add(faction);
            }

            foreach (var limit in Limits)
            {
                if (!limit.IsMatch(def))
                {
                    continue;
                }

                var foundGrid = GridCache.TryGetGridById(gridId, out var grid);

                if (foundGrid && !limit.IsGridType(grid))
                {
                    limit.FoundEntities.Remove(gridId);
                    continue;
                }

                if (limit.LimitGrids && gridId > 0)
                {
                    limit.FoundEntities.AddOrUpdate(gridId, 0, (l, i) => Math.Max(0, i - amount));
                }

                foreach (var playerId in playerIds)
                {
                    if (playerId == 0)
                    {
                        continue;
                    }
                    if (limit.IgnoreNpcs)
                    {
                        if (MySession.Static.Players.IdentityIsNpc(playerId))
                        {
                            limit.FoundEntities.Remove(playerId);
                            continue;
                        }
                        if (foundGrid && MySession.Static.Players.IdentityIsNpc(GridCache.GetBuilders(grid).FirstOrDefault()))
                        {
                            continue;
                        }
                    }

                    if (limit.LimitPlayers)
                    {
                        limit.FoundEntities.AddOrUpdate(playerId, 0, (l, i) => Math.Max(0, i - amount));
                    }
                }

                if (limit.LimitFaction && factions.Count > 0)
                {
                    foreach (var faction in factions)
                    {
                        limit.FoundEntities.AddOrUpdate(faction.FactionId, 0, (l, i) => Math.Max(0, i - amount));
                    }
                }
                limit.ClearEmptyEntities();
            }
        }