public static PlayerInfo FindOrCreateInfoForPlayer( [NotNull] string name, [NotNull] IPAddress lastIP ) {
if( name == null ) throw new ArgumentNullException( "name" );
if( lastIP == null ) throw new ArgumentNullException( "lastIP" );
CheckIfLoaded();
using( GetUpgradableReadLock() ) {
PlayerInfo info = provider.FindExact( name );
if( info == null ) {
using( GetWriteLock() ) {
var e = new PlayerInfoBeingCreatedEventArgs( name, lastIP, RankManager.DefaultRank, false );
PlayerInfo.RaiseBeingCreatedEvent( e );
if( e.Cancel ) throw new OperationCanceledException( "Canceled by a plugin." );
info = provider.AddPlayer( name, e.StartingRank, RankChangeType.Default, lastIP );
info.RaisePropertyChangedEvents = true;
List.Add( info );
PlayerInfo.RaiseCreatedEvent( info, false );
}
}
return info;
}
}