Example #1
0
        public static PlayerInfo AddFakeEntry([NotNull] string name, RankChangeType rankChangeType)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            CheckIfLoaded();

            PlayerInfo info;

            lock ( AddLocker ) {
                info = Trie.Get(name);
                if (info != null)
                {
                    throw new ArgumentException("A PlayerDB entry already exists for this name.", "name");
                }

                var e = new PlayerInfoCreatingEventArgs(name, IPAddress.None, RankManager.DefaultRank, true);
                PlayerInfo.RaiseCreatingEvent(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();
            }
            PlayerInfo.RaiseCreatedEvent(info, false);
            return(info);
        }
        internal static void RaiseCreatingEvent([NotNull] PlayerInfoCreatingEventArgs e)
        {
            var h = Creating;

            if (h != null)
            {
                h(null, e);
            }
        }
Example #3
0
        internal static void RaisePlayerInfoCreatingEvent(PlayerInfoCreatingEventArgs e)
        {
            var h = PlayerInfoCreating;

            if (h != null)
            {
                h(null, e);
            }
        }
Example #4
0
        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();
            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)
                {
                    if (RankManager.DefaultRank == null)
                    {
                        RankManager.DefaultRank = RankManager.LowestRank;
                    }
                    var e = new PlayerInfoCreatingEventArgs(name, lastIP, RankManager.DefaultRank, false);
                    PlayerInfo.RaiseCreatingEvent(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)
            {
                PlayerInfo.RaiseCreatedEvent(info, false);
            }
            return(info);
        }