Exemplo n.º 1
0
 public static void CreatePendingKick(Player playerToKick)
 {
     if (!PendingKicks.ContainsKey(playerToKick.Name))
     {
         double delay   = 30000.0;
         var    myTimer = new System.Timers.Timer(delay);
         myTimer.Elapsed  += (sender, args) => ConQue.Enqueue(() => ClearPendingKick(playerToKick));
         myTimer.AutoReset = false; // fire only once
         myTimer.Enabled   = true;
         PendingKicks.Add(playerToKick.Name, myTimer);
     }
 }
Exemplo n.º 2
0
 static void ClearPendingKick(Player playerToKick)
 {
     if (playerToKick == null)
     {
         return;
     }
     if (PendingKicks.ContainsKey(playerToKick.Name)) //cancel automatic kick
     {
         Console.WriteLine($"Clearing pending kick for player: {playerToKick.Name}");
         PendingKicks[playerToKick.Name].Stop();
         PendingKicks.Remove(playerToKick.Name);
     }
 }
Exemplo n.º 3
0
        public static void PlayerLogin(Socket conn, string characterName)
        {
            var newPlayer = new Player(conn, characterName);

            // if it's a character that's in some clan, get his id
            if (CharacterIds.ContainsKey(newPlayer.Name))
            {
                newPlayer.Id = CharacterIds[newPlayer.Name];

                // if a clan for this character id is found, assign clan to character
                if (CharacterClans.ContainsKey(newPlayer.Id))
                {
                    newPlayer.ClanId = CharacterClans[newPlayer.Id];
                }

                // set him as clan leader if he's in the list of clan leaders
                if (ClanLeaders.Contains(newPlayer.Id))
                {
                    newPlayer.IsClanLeader = true;
                }
            }

            // if it's a reconnecting character, remove him from list of online characters
            Players.RemoveAll(x => x.Name == newPlayer.Name);
            // add him to list of online characters
            Players.Add(newPlayer);

            // update this player in groups if he was in one before reconnecting
            Groups.ForEach(group => group.UpdateReconnectedPlayer(newPlayer));

            if (PendingKicks.ContainsKey(newPlayer.Name)) //cancel automatic kick
            {
                PendingKicks[newPlayer.Name].Stop();
                PendingKicks.Remove(newPlayer.Name);
            }
        }