Пример #1
0
        private void CheckAdminRights()
        {
            const string spider = "Space_spider";
            const string wolf   = "SpaceWolf";

            foreach (var item in Players)
            {
                var pLevel   = item.Value.PromoteLevel;
                var playerId = item.Key;
                var player   = item.Value;
                var wasAdmin = Admins.ContainsKey(playerId);

                if (pLevel == MyPromoteLevel.Admin || pLevel == MyPromoteLevel.Owner || pLevel == MyPromoteLevel.SpaceMaster)
                {
                    var character = player.Character;
                    var isAdmin   = false;
                    if (character != null)
                    {
                        if (character.Definition.Id.SubtypeName.Equals(wolf) || character.Definition.Id.SubtypeName.StartsWith(spider))
                        {
                            continue;
                        }

                        if (MySafeZone.CheckAdminIgnoreSafezones(player.SteamUserId))
                        {
                            isAdmin = true;
                        }
                        else
                        {
                            foreach (var gridAi in GridTargetingAIs.Values)
                            {
                                if (gridAi.Targets.ContainsKey((MyEntity)character) && gridAi.Weapons.Count > 0 && ((IMyTerminalBlock)gridAi.Weapons[0].MyCube).HasPlayerAccess(playerId))
                                {
                                    if (MyIDModule.GetRelationPlayerBlock(playerId, gridAi.AiOwner) == MyRelationsBetweenPlayerAndBlock.Enemies)
                                    {
                                        isAdmin = true;
                                        break;
                                    }
                                }
                            }
                        }

                        if (isAdmin)
                        {
                            Admins[playerId]    = character;
                            AdminMap[character] = player;
                            continue;
                        }
                    }
                }

                if (wasAdmin)
                {
                    IMyCharacter removeCharacter;
                    IMyPlayer    removePlayer;
                    Admins.TryRemove(playerId, out removeCharacter);
                    AdminMap.TryRemove(removeCharacter, out removePlayer);
                }
            }
        }