public Map AcceptPlayer( [NotNull] Player player, bool announce )
{
if ( player == null )
throw new ArgumentNullException( "player" );
lock ( SyncRoot ) {
if ( IsFull ) {
if ( player.Info.Rank.ReservedSlot ) {
Player idlestPlayer = Players.Where( p => p.Info.Rank.IdleKickTimer != 0 )
.OrderBy( p => p.LastActiveTime )
.FirstOrDefault();
if ( idlestPlayer != null ) {
idlestPlayer.Kick( Player.Console, "Auto-kicked to make room (idle).",
LeaveReason.IdleKick, false, false, false );
Server.Players
.CanSee( player )
.Message( "&SPlayer {0}&S was auto-kicked to make room for {1}",
idlestPlayer.ClassyName, player.ClassyName );
Server.Players
.CantSee( player )
.Message( "{0}&S was kicked for being idle for {1} min",
player.ClassyName, player.Info.Rank.IdleKickTimer );
} else {
return null;
}
} else {
return null;
}
}
if ( playerIndex.ContainsKey( player.Name.ToLower() ) ) {
Logger.Log( LogType.Error,
"This world already contains the player by name ({0}). " +
"Some sort of state corruption must have occured.",
player.Name );
playerIndex.Remove( player.Name.ToLower() );
}
playerIndex.Add( player.Name.ToLower(), player );
// load the map, if it's not yet loaded
IsPendingMapUnload = false;
Map = LoadMap();
if ( ConfigKey.BackupOnJoin.Enabled() && ( Map.HasChangedSinceBackup || !ConfigKey.BackupOnlyWhenChanged.Enabled() ) ) {
string backupFileName = String.Format( JoinBackupFormat,
Name, DateTime.Now, player.Name ); // localized
SaveBackup( MapFileName );
}
UpdatePlayerList();
if ( !IsRealm && announce && ConfigKey.ShowJoinedWorldMessages.Enabled() ) {
Server.Players.CanSee( player )
.Message( "&SPlayer {0}&S joined world {1}",
player.ClassyName, ClassyName );
}
//realm joining announcer
if ( IsRealm && announce && ConfigKey.ShowJoinedWorldMessages.Enabled() ) {
Server.Players.CanSee( player )
.Message( "&SPlayer {0}&S joined realm {1}",
player.ClassyName, ClassyName );
}
if ( IsRealm ) {
Logger.Log( LogType.ChangedWorld,
"Player {0} joined realm {1}.",
player.Name, Name );
}
if ( !IsRealm ) {
Logger.Log( LogType.ChangedWorld,
"Player {0} joined world {1}.",
player.Name, Name );
}
if ( IsLocked ) {
player.Message( "&WThis map is currently locked (read-only)." );
}
if ( player.Info.IsHidden ) {
player.Message( "&8Reminder: You are still hidden." );
}
return Map;
}
}