private void CMB_Mode_SelectedIndexChanged(object sender, EventArgs e)
        {
            LBL_ModeDesc.Text = _modeDesc[CMB_Mode.SelectedIndex];
            var modeEnum = (ProtectedItem.ProtectionModeEnum)CMB_Mode.SelectedIndex;

            if (!_currentItem.ProtectionSettingsDict.Dictionary.ContainsKey(modeEnum))
            {
                _currentItem.ProtectionSettingsDict.Dictionary.Add(modeEnum, new ProtectedItem.ProtectionSettings());
            }
            _currentSettings = _currentItem.ProtectionSettingsDict[modeEnum];
            LoadCurrentSettings();
        }
        private void LST_Entries_SelectedIndexChanged(object sender, EventArgs e)
        {
            _currentItem           = PluginSettings.Instance.ProtectedItems[LST_Entries.SelectedIndex];
            CMB_Mode.SelectedIndex = 0;
            TXT_EntityId.Text      = _currentItem.EntityId.ToString();
            var modeEnum = (ProtectedItem.ProtectionModeEnum)CMB_Mode.SelectedIndex;

            if (!_currentItem.ProtectionSettingsDict.Dictionary.ContainsKey(modeEnum))
            {
                _currentItem.ProtectionSettingsDict.Dictionary.Add(modeEnum, new ProtectedItem.ProtectionSettings());
            }
            _currentSettings = _currentItem.ProtectionSettingsDict[modeEnum];
            LoadCurrentSettings();
        }
        public override bool Handle(ulong remoteUserId, CallSite site, BitStream stream, object obj)
        {
            if (!PluginSettings.Instance.ProtectedEnabled)
            {
                return(false);
            }

            MyCubeGrid grid = obj as MyCubeGrid;

            if (grid == null)
            {
                Essentials.Log.Debug("Null grid in GridNameHandler");
                return(false);
            }

            foreach (ProtectedItem item in PluginSettings.Instance.ProtectedItems)
            {
                if (!item.Enabled)
                {
                    continue;
                }

                if (item.EntityId != grid.EntityId && item.EntityId != -1)
                {
                    continue;
                }

                if (!item.ProtectionSettingsDict.Dictionary.ContainsKey(ProtectedItem.ProtectionModeEnum.GridRename))
                {
                    continue;
                }

                ProtectedItem.ProtectionSettings settings = item.ProtectionSettingsDict[ProtectedItem.ProtectionModeEnum.GridRename];

                if (Protection.Instance.CheckPlayerExempt(settings, grid, remoteUserId))
                {
                    continue;
                }

                if (item.LogOnly)
                {
                    Essentials.Log.Info($"Recieved grid rename request from user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");
                    continue;
                }

                if (!string.IsNullOrEmpty(settings.PrivateWarningMessage))
                {
                    Communication.Notification(remoteUserId, MyFontEnum.Red, 5000, settings.PrivateWarningMessage);
                }

                if (!string.IsNullOrEmpty(settings.PublicWarningMessage))
                {
                    Communication.SendPublicInformation(settings.PublicWarningMessage.Replace("%player%", PlayerMap.Instance.GetFastPlayerNameFromSteamId(remoteUserId)));
                }

                if (settings.BroadcastGPS)
                {
                    MyPlayer player = MySession.Static.Players.GetPlayerById(new MyPlayer.PlayerId(remoteUserId, 0));
                    Vector3D pos    = player.GetPosition( );
                    MyAPIGateway.Utilities.SendMessage($"GPS:{player.DisplayName}:{pos.X}:{pos.Y}:{pos.Z}:");
                }

                Essentials.Log.Info($"Intercepted grid rename request from user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");

                switch (settings.PunishmentType)
                {
                case ProtectedItem.PunishmentEnum.Kick:
                    _kickTimer.Elapsed += (sender, e) =>
                    {
                        Essentials.Log.Info($"Kicked user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for renaming protected grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");
                        MyMultiplayer.Static.KickClient(remoteUserId);
                    };
                    _kickTimer.AutoReset = false;
                    _kickTimer.Start( );
                    break;

                case ProtectedItem.PunishmentEnum.Ban:
                    _kickTimer.Elapsed += (sender, e) =>
                    {
                        Essentials.Log.Info($"Banned user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for renaming protected grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");
                        MyMultiplayer.Static.BanClient(remoteUserId, true);
                    };
                    _kickTimer.AutoReset = false;
                    _kickTimer.Start( );
                    break;

                case ProtectedItem.PunishmentEnum.Speed:
                    Task.Run(() =>
                    {
                        lock (ProcessSpeed.SpeedPlayers)
                        {
                            long playerId = PlayerMap.Instance.GetFastPlayerIdFromSteamId(remoteUserId);
                            ProcessSpeed.SpeedPlayers[playerId] = new Tuple <float, DateTime>((float)settings.SpeedLimit, DateTime.Now + TimeSpan.FromMinutes(settings.SpeedTime));
                        }
                    });
                    Essentials.Log.Info($"Limited user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )} to {settings.SpeedLimit}m/s for {settings.SpeedTime} minutes");
                    break;
                }

                return(true);
            }

            return(false);
        }
Beispiel #4
0
        public bool CheckPlayerExempt(ProtectedItem.ProtectionSettings settings, MyCubeGrid grid, ulong remoteUserId)
        {
            if (settings.AllExempt)
            {
                return(true);
            }

            if (settings.AdminExempt && PlayerManager.Instance.IsUserAdmin(remoteUserId))
            {
                return(true);
            }

            long playerId = PlayerMap.Instance.GetFastPlayerIdFromSteamId(remoteUserId);

            if (settings.BigOwnerExempt)
            {
                //fast check to see if the player's current live identity is an owner
                if (grid.BigOwners.Contains(playerId))
                {
                    return(true);
                }

                //check old, dead identities. this is much slower
                var playerIds = PlayerMap.Instance.GetPlayerIdsFromSteamId(remoteUserId, false);

                foreach (var owner in grid.BigOwners)
                {
                    if (playerIds.Contains(owner))
                    {
                        return(true);
                    }
                }
            }

            if (settings.SmallOwnerExempt)
            {
                //fast check to see if the player's current live identity is an owner
                if (grid.SmallOwners.Contains(playerId))
                {
                    return(true);
                }

                //check old, dead identities. this is much slower
                var playerIds = PlayerMap.Instance.GetPlayerIdsFromSteamId(remoteUserId, false);

                foreach (var owner in grid.SmallOwners)
                {
                    if (playerIds.Contains(owner))
                    {
                        return(true);
                    }
                }
            }

            if (settings.FactionExempt && grid.BigOwners.Count > 0)
            {
                var fac = MySession.Static.Factions.GetPlayerFaction(grid.BigOwners[0]);
                if (fac != null && fac.IsMember(playerId))
                {
                    return(true);
                }
            }

            if (settings.Factions == null)
            {
                return(false);
            }

            foreach (var facId in settings.Factions)
            {
                var fac = MySession.Static.Factions.TryGetFactionById(facId);
                if (fac != null && fac.IsMember(playerId))
                {
                    return(true);
                }
            }

            //if ( settings.ExemptSteamIds.Contains( remoteUserId.ToString() ) )
            //    return true;

            return(false);
        }
 private void LST_Entries_SelectedIndexChanged(object sender, EventArgs e)
 {
     _currentItem = PluginSettings.Instance.ProtectedItems[LST_Entries.SelectedIndex];
     CMB_Mode.SelectedIndex = 0;
     TXT_EntityId.Text = _currentItem.EntityId.ToString();
     var modeEnum = (ProtectedItem.ProtectionModeEnum)CMB_Mode.SelectedIndex;
     if (!_currentItem.ProtectionSettingsDict.Dictionary.ContainsKey(modeEnum))
         _currentItem.ProtectionSettingsDict.Dictionary.Add(modeEnum, new ProtectedItem.ProtectionSettings());
     _currentSettings = _currentItem.ProtectionSettingsDict[modeEnum];
     LoadCurrentSettings();
 }
 private void CMB_Mode_SelectedIndexChanged(object sender, EventArgs e)
 {
     LBL_ModeDesc.Text = _modeDesc[CMB_Mode.SelectedIndex];
     var modeEnum = (ProtectedItem.ProtectionModeEnum)CMB_Mode.SelectedIndex;
         if ( !_currentItem.ProtectionSettingsDict.Dictionary.ContainsKey( modeEnum ) )
             _currentItem.ProtectionSettingsDict.Dictionary.Add( modeEnum, new ProtectedItem.ProtectionSettings() );
     _currentSettings = _currentItem.ProtectionSettingsDict[modeEnum];
     LoadCurrentSettings();
 }
Beispiel #7
0
        public override bool Handle(ulong remoteUserId, CallSite site, BitStream stream, object obj)
        {
            if (!PluginSettings.Instance.ProtectedEnabled)
            {
                return(false);
            }

            long entityId = 0;

            Serialize(site.MethodInfo, stream, ref entityId);

            if (entityId == 0)
            {
                Essentials.Log.Debug("Error deserializing argument in GridDeleteHandler");
                return(false);
            }

            MyCubeGrid grid;

            if (!MyEntities.TryGetEntityById(entityId, out grid))
            {
                //Essentials.Log.Debug( "Couldn't find grid in GridDeleteHandler." );
                return(false);
            }

            foreach (ProtectedItem item in PluginSettings.Instance.ProtectedItems)
            {
                if (!item.Enabled)
                {
                    continue;
                }

                if (item.EntityId != grid.EntityId && item.EntityId != -1)
                {
                    continue;
                }

                if (!item.ProtectionSettingsDict.Dictionary.ContainsKey(ProtectedItem.ProtectionModeEnum.GridDelete))
                {
                    continue;
                }

                ProtectedItem.ProtectionSettings settings = item.ProtectionSettingsDict[ProtectedItem.ProtectionModeEnum.GridDelete];

                if (Protection.Instance.CheckPlayerExempt(settings, grid, remoteUserId))
                {
                    continue;
                }

                if (item.LogOnly)
                {
                    Essentials.Log.Info($"Recieved grid delete request from user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");
                    continue;
                }

                if (!string.IsNullOrEmpty(settings.PrivateWarningMessage))
                {
                    Communication.Notification(remoteUserId, MyFontEnum.Red, 5000, settings.PrivateWarningMessage);
                }

                if (!string.IsNullOrEmpty(settings.PublicWarningMessage))
                {
                    Communication.SendPublicInformation(settings.PublicWarningMessage.Replace("%player%", PlayerMap.Instance.GetFastPlayerNameFromSteamId(remoteUserId)));
                }

                if (settings.BroadcastGPS)
                {
                    MyPlayer player = MySession.Static.Players.GetPlayerById(new MyPlayer.PlayerId(remoteUserId, 0));
                    Vector3D pos    = player.GetPosition( );
                    MyAPIGateway.Utilities.SendMessage($"GPS:{player.DisplayName}:{pos.X}:{pos.Y}:{pos.Z}:");
                }

                Essentials.Log.Info($"Intercepted grid delete request from user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");

                switch (settings.PunishmentType)
                {
                case ProtectedItem.PunishmentEnum.Kick:
                    _kickTimer.Elapsed += (sender, e) =>
                    {
                        Essentials.Log.Info($"Kicked user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for deleting protected grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");
                        MyMultiplayer.Static.KickClient(remoteUserId);
                    };
                    _kickTimer.AutoReset = false;
                    _kickTimer.Start( );
                    break;

                case ProtectedItem.PunishmentEnum.Ban:
                    _kickTimer.Elapsed += (sender, e) =>
                    {
                        Essentials.Log.Info($"Banned user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for deleting protected grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");
                        MyMultiplayer.Static.BanClient(remoteUserId, true);
                    };
                    _kickTimer.AutoReset = false;
                    _kickTimer.Start( );
                    break;

                case ProtectedItem.PunishmentEnum.Speed:
                    Task.Run(() =>
                    {
                        lock (ProcessSpeed.SpeedPlayers)
                        {
                            long playerId = PlayerMap.Instance.GetFastPlayerIdFromSteamId(remoteUserId);
                            ProcessSpeed.SpeedPlayers[playerId] = new Tuple <float, DateTime>((float)settings.SpeedLimit, DateTime.Now + TimeSpan.FromMinutes(settings.SpeedTime));
                        }
                    });
                    Essentials.Log.Info($"Limited user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )} to {settings.SpeedLimit}m/s for {settings.SpeedTime} minutes");
                    break;
                }

                //send the fail message to make the client play the paste fail sound
                //just because we can
                var inf = typeof(MyCubeBuilder).GetMethod("SpawnGridReply", BindingFlags.NonPublic | BindingFlags.Static);
                ServerNetworkManager.Instance.RaiseStaticEvent(inf, remoteUserId, false);

                return(true);
            }

            return(false);
        }
        public override bool Handle(ulong remoteUserId, CallSite site, BitStream stream, object obj)
        {
            if (!PluginSettings.Instance.ProtectedEnabled)
            {
                return(false);
            }
            HashSet <MyCubeGrid> processGrids = new HashSet <MyCubeGrid>( );

            if (site.MethodInfo.Name == ChangeOwnerName)
            {
                MyCubeGrid grid = obj as MyCubeGrid;
                if (grid == null)
                {
                    Essentials.Log.Debug("Null grid in BlockOwnHandler");
                    return(false);
                }
                processGrids.Add(grid);
            }
            else if (site.MethodInfo.Name == ChangeOwnersName)
            {
                MyOwnershipShareModeEnum shareMode = MyOwnershipShareModeEnum.None;
                List <MyCubeGrid.MySingleOwnershipRequest> requests = new List <MyCubeGrid.MySingleOwnershipRequest>( );
                long requestingPlayer = 0;

                Serialize(site.MethodInfo, stream, ref shareMode, ref requests, ref requestingPlayer);

                foreach (MyCubeGrid.MySingleOwnershipRequest request in requests)
                {
                    MyEntity entity;
                    MyEntities.TryGetEntityById(request.BlockId, out entity);
                    MyCubeBlock block = entity as MyCubeBlock;
                    if (block?.CubeGrid == null)
                    {
                        continue;
                    }

                    processGrids.Add(block.CubeGrid);
                }
            }

            //Parallel.ForEach( processGrids, grid =>
            foreach (var grid in processGrids)
            {
                foreach (ProtectedItem item in PluginSettings.Instance.ProtectedItems)
                {
                    if (!item.Enabled)
                    {
                        continue;
                    }

                    if (item.EntityId != grid.EntityId && item.EntityId != -1)
                    {
                        continue;
                    }

                    if (!item.ProtectionSettingsDict.Dictionary.ContainsKey(ProtectedItem.ProtectionModeEnum.BlockOwn))
                    {
                        continue;
                    }

                    ProtectedItem.ProtectionSettings settings = item.ProtectionSettingsDict[ProtectedItem.ProtectionModeEnum.BlockOwn];

                    if (Protection.Instance.CheckPlayerExempt(settings, grid, remoteUserId))
                    {
                        continue;
                    }

                    if (item.LogOnly)
                    {
                        Essentials.Log.Info($"Recieved block ownership change request from user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");
                        continue;
                    }

                    if (!string.IsNullOrEmpty(settings.PrivateWarningMessage))
                    {
                        Communication.Notification(remoteUserId, MyFontEnum.Red, 5000, settings.PrivateWarningMessage);
                    }

                    if (!string.IsNullOrEmpty(settings.PublicWarningMessage))
                    {
                        Communication.SendPublicInformation(settings.PublicWarningMessage.Replace("%player%", PlayerMap.Instance.GetFastPlayerNameFromSteamId(remoteUserId)));
                    }

                    if (settings.BroadcastGPS)
                    {
                        MyPlayer player = MySession.Static.Players.GetPlayerById(new MyPlayer.PlayerId(remoteUserId, 0));
                        Vector3D pos    = player.GetPosition( );
                        MyAPIGateway.Utilities.SendMessage($"GPS:{player.DisplayName}:{pos.X}:{pos.Y}:{pos.Z}:");
                    }

                    Essentials.Log.Info($"Intercepted block ownership change request from user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");

                    switch (settings.PunishmentType)
                    {
                    case ProtectedItem.PunishmentEnum.Kick:
                        _kickTimer.Elapsed += (sender, e) =>
                        {
                            Essentials.Log.Info($"Kicked user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for changing block ownership on protected grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");
                            MyMultiplayer.Static.KickClient(remoteUserId);
                        };
                        _kickTimer.AutoReset = false;
                        _kickTimer.Start( );
                        break;

                    case ProtectedItem.PunishmentEnum.Ban:
                        _kickTimer.Elapsed += (sender, e) =>
                        {
                            Essentials.Log.Info($"Banned user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )}:{remoteUserId} for changing block ownership on protected grid {grid.DisplayNameText ?? "ID"}:{item.EntityId}");
                            MyMultiplayer.Static.BanClient(remoteUserId, true);
                        };
                        _kickTimer.AutoReset = false;
                        _kickTimer.Start( );
                        break;

                    case ProtectedItem.PunishmentEnum.Speed:
                        Task.Run(() =>
                        {
                            lock (ProcessSpeed.SpeedPlayers)
                            {
                                long playerId = PlayerMap.Instance.GetFastPlayerIdFromSteamId(remoteUserId);
                                ProcessSpeed.SpeedPlayers[playerId] = new Tuple <float, DateTime>((float)settings.SpeedLimit, DateTime.Now + TimeSpan.FromMinutes(settings.SpeedTime));
                            }
                        });
                        Essentials.Log.Info($"Limited user {PlayerMap.Instance.GetFastPlayerNameFromSteamId( remoteUserId )} to {settings.SpeedLimit}m/s for {settings.SpeedTime} minutes");
                        break;
                    }
                    return(true);
                }
            }
            return(false);
        }