fCraft.PlayerInfo.ProcessBan C# (CSharp) Method

ProcessBan() private method

private ProcessBan ( [ bannedBy, [ bannedByName, [ banReason ) : bool
bannedBy [
bannedByName [
banReason [
return bool
        internal bool ProcessBan( [NotNull] Player bannedBy, [NotNull] string bannedByName, [CanBeNull] string banReason )
        {
            if ( bannedBy == null )
                throw new ArgumentNullException( "bannedBy" );
            if ( bannedByName == null )
                throw new ArgumentNullException( "bannedByName" );
            lock ( actionLock ) {
                if ( IsBanned ) {
                    return false;
                }
                BanStatus = BanStatus.Banned;
                BannedBy = bannedByName;
                BanDate = DateTime.UtcNow;
                BanReason = banReason;
                Interlocked.Increment( ref bannedBy.Info.TimesBannedOthers );
                MutedUntil = DateTime.MinValue;
                MutedBy = null;
                if ( IsFrozen ) {
                    try {
                        Unfreeze( bannedBy, false, true );
                    } catch ( PlayerOpException ex ) {
                        Logger.Log( LogType.Warning,
                                    "PlayerInfo.ProcessBan: {0}", ex.Message );
                    }
                }
                IsHidden = false;
                LastModified = DateTime.UtcNow;
                return true;
            }
        }

Usage Example

Example #1
0
        void DoBan(Player player, Command cmd, bool banIP, bool banAll, bool unban)
        {
            if (!banAll && !banIP && player.Can(Permissions.Ban) ||
                !banAll && player.Can(Permissions.BanIP) ||
                player.Can(Permissions.BanAll))
            {
                string     arg    = cmd.Next();
                string     reason = cmd.NextAll();
                IPAddress  address;
                Player     offender = world.FindPlayer(arg);
                PlayerInfo info     = world.db.FindPlayerInfoExact(arg);

                // ban by IP address
                if (banIP && IPAddress.TryParse(arg, out address))
                {
                    if (banIP)
                    {
                        DoIPBan(player, address, reason, null, banAll, unban);
                    }

                    // ban online players
                }
                else if (!unban && offender != null)
                {
                    address = offender.info.lastIP;
                    if (banIP)
                    {
                        DoIPBan(player, address, reason, offender.name, banAll, unban);
                    }
                    if (unban)
                    {
                        if (offender.info.ProcessUnBan(player.name, reason))
                        {
                            world.log.Log("{0} was unbanned by {1}.", LogType.UserActivity, offender.info.name, player.name);
                            world.SendToAll(PacketWriter.MakeMessage(Color.Red + offender.name + " was unbanned by " + player.name), offender);
                        }
                        else
                        {
                            player.Message(offender.name + " is not currently banned.");
                        }
                    }
                    else
                    {
                        if (offender.info.ProcessBan(player.name, reason))
                        {
                            world.log.Log("{0} was banned by {1}.", LogType.UserActivity, offender.info.name, player.name);
                            world.SendToAll(PacketWriter.MakeMessage(Color.Red + offender.name + " was banned by " + player.name), offender);
                            offender.session.Kick("You were banned by " + player.name + "!");
                        }
                        else
                        {
                            player.Message(offender.name + " is already banned.");
                        }
                    }

                    // ban offline players
                }
                else if (info != null)
                {
                    address = info.lastIP;
                    if (banIP)
                    {
                        DoIPBan(player, address, reason, info.name, banAll, unban);
                    }
                    if (unban)
                    {
                        if (info.ProcessUnBan(player.name, reason))
                        {
                            world.log.Log("{0} (offline) was unbanned by {1}", LogType.UserActivity, info.name, player.name);
                            world.SendToAll(PacketWriter.MakeMessage(Color.Red + info.name + " (offline) was unbanned by " + player.name), null);
                        }
                        else
                        {
                            player.Message(info.name + " (offline) is not currenty banned.");
                        }
                    }
                    else
                    {
                        if (info.ProcessBan(player.name, reason))
                        {
                            world.log.Log("{0} (offline) was banned by {1}.", LogType.UserActivity, info.name, player.name);
                            world.SendToAll(PacketWriter.MakeMessage(Color.Red + info.name + " (offline) was banned by " + player.name), null);
                        }
                        else
                        {
                            player.Message(info.name + " (offline) is already banned.");
                        }
                    }
                }
                else
                {
                    world.NoPlayerMessage(player, arg);
                }
            }
            else
            {
                world.NoAccessMessage(player);
            }
        }