public static PlayerInfo AddFakeEntry(string name, RankChangeType rankChangeType) { if (name == null) { throw new ArgumentNullException("name"); } PlayerInfo info; lock ( AddLocker ) { info = Trie.Get(name); if (info != null) { throw new ArgumentException("A PlayerDB entry already exists for this name."); } var e = new PlayerInfoCreatingEventArgs(name, IPAddress.None, RankManager.DefaultRank, true); Server.RaisePlayerInfoCreatingEvent(e); if (e.Cancel) { throw new OperationCanceledException("Cancelled by a plugin."); } info = new PlayerInfo(name, e.StartingRank, false, rankChangeType); List.Add(info); Trie.Add(info.Name, info); UpdateCache(); } Server.RaisePlayerInfoCreatedEvent(info, false); return(info); }
public static PlayerInfo FindOrCreateInfoForPlayer(string name, IPAddress lastIP) { if (name == null) { throw new ArgumentNullException("name"); } PlayerInfo info; // this flag is used to avoid executing PlayerInfoCreated event in the lock bool raiseCreatedEvent = false; lock ( AddLocker ) { info = Trie.Get(name); if (info == null) { var e = new PlayerInfoCreatingEventArgs(name, lastIP, RankManager.DefaultRank, false); Server.RaisePlayerInfoCreatingEvent(e); if (e.Cancel) { throw new OperationCanceledException("Cancelled by a plugin."); } info = new PlayerInfo(name, lastIP, e.StartingRank); Trie.Add(name, info); List.Add(info); UpdateCache(); raiseCreatedEvent = true; } } if (raiseCreatedEvent) { Server.RaisePlayerInfoCreatedEvent(info, false); } return(info); }