Beispiel #1
0
 private void FactionsOnFactionCreated(long id)
 {
     if (!BlockLimiterConfig.Instance.EnableLimits)
     {
         return;
     }
     UpdateLimits.FactionLimit(id);
 }
Beispiel #2
0
        private void FactionsOnFactionStateChanged(MyFactionStateChange factionState, long fromFaction, long toFaction, long playerId, long senderId)
        {
            if (factionState == MyFactionStateChange.RemoveFaction)
            {
                foreach (var limit in BlockLimiterConfig.Instance.AllLimits)
                {
                    limit.Exceptions.Remove(fromFaction.ToString());
                    limit.FoundEntities.Remove(fromFaction);
                }

                return;
            }

            UpdateLimits.FactionLimit(fromFaction);
            UpdateLimits.FactionLimit(toFaction);
            UpdateLimits.PlayerLimit(playerId);
        }
Beispiel #3
0
        public static void ResetLimits(bool updateGrids = true, bool updatePlayers = true, bool updateFactions = true)
        {
            if (!BlockLimiterConfig.Instance.EnableLimits)
            {
                foreach (var limit in BlockLimiterConfig.Instance.AllLimits)
                {
                    limit.FoundEntities.Clear();
                }
                return;
            }

            if (updateGrids)
            {
                var grids = new HashSet <MyCubeGrid>();
                GridCache.GetGrids(grids);


                Task.Run(() =>
                {
                    Thread.Sleep(500);
                    foreach (var grid in grids)
                    {
                        if (grid == null)
                        {
                            continue;
                        }
                        Parallel.Invoke(() =>
                        {
                            Thread.Sleep(100);
                            UpdateLimits.GridLimit(grid);
                        });
                    }
                });
            }

            if (updatePlayers)
            {
                Task.Run(() =>
                {
                    Thread.Sleep(300);
                    foreach (var player in MySession.Static.Players.GetAllPlayers())
                    {
                        if (player.SteamId == 0)
                        {
                            continue;
                        }
                        var identity = Utilities.GetPlayerIdFromSteamId(player.SteamId);
                        if (identity == 0)
                        {
                            continue;
                        }
                        Parallel.Invoke(() => UpdateLimits.PlayerLimit(identity));
                    }
                });
            }

            if (updateFactions)
            {
                Task.Run(() =>
                {
                    Thread.Sleep(100);
                    foreach (var(id, faction) in MySession.Static.Factions.Factions)
                    {
                        if (faction.IsEveryoneNpc() || id == 0)
                        {
                            continue;
                        }
                        Parallel.Invoke(() => UpdateLimits.FactionLimit(id));
                    }
                });
            }
        }
Beispiel #4
0
        public static void ResetLimits(bool updateGrids = true, bool updatePlayers = true, bool updateFactions = true)
        {
            if (!BlockLimiterConfig.Instance.EnableLimits)
            {
                foreach (var limit in BlockLimiterConfig.Instance.AllLimits)
                {
                    limit.FoundEntities.Clear();
                }
                return;
            }

            if (updateGrids)
            {
                var grids = new HashSet <MyCubeGrid>();
                GridCache.GetGrids(grids);
                Task.Run(() =>
                {
                    Parallel.ForEach(grids, grid =>
                    {
                        if (grid == null)
                        {
                            return;
                        }

                        UpdateLimits.GridLimit(grid);
                    });
                });
            }

            if (updatePlayers)
            {
                var players = MySession.Static.Players.GetAllPlayers();
                if (players.Count > 0)
                {
                    Task.Run(() =>
                    {
                        Parallel.ForEach(players, player =>
                        {
                            if (player.SteamId == 0)
                            {
                                return;
                            }

                            var identity = Utilities.GetPlayerIdFromSteamId(player.SteamId);

                            if (identity == 0)
                            {
                                return;
                            }

                            UpdateLimits.PlayerLimit(identity);
                        });
                    });
                }
            }

            if (updateFactions)
            {
                Task.Run(() =>
                {
                    Parallel.ForEach(MySession.Static.Factions, factionInfo =>
                    {
                        var(id, faction) = factionInfo;

                        if (faction.IsEveryoneNpc() || id == 0)
                        {
                            return;
                        }

                        UpdateLimits.FactionLimit(id);
                    });
                });
            }
        }