Ejemplo n.º 1
0
        private void KickLoser(Player player)
        {
            var players = _players.ToList();

            players.Remove(player);
            var updatedPlayers = new Queue <Player>();

            foreach (var p in players)
            {
                updatedPlayers.Enqueue(p);
            }

            if (updatedPlayers.Count == 1)
            {
                GameEnded?.Invoke(this, new GameEndedEvent
                {
                    Winner = updatedPlayers.First()
                });
            }

            _players = updatedPlayers;
            PlayerKicked?.Invoke(this, new PlayerKickedEvent
            {
                Player = player
            });
        }
Ejemplo n.º 2
0
 public override void Process(PlayerDeathEvent packet, Player player)
 {
     if (serverConfig.GameMode == "Hardcore")
     {
         player.IsPermaDeath = true;
         PlayerKicked playerKicked = new PlayerKicked("Permanent death from hardcore mode");
         player.SendPacket(playerKicked);
     }
     playerManager.SendPacketToOtherPlayers(packet, player);
 }
Ejemplo n.º 3
0
        //Kick: "Name<uid><wonid><>" was kicked by "Console" (message "") [52b]
        /// <summary>
        /// Raises the <see cref="PlayerKicked"/> event.
        /// </summary>
        /// <param name="timestamp">Time at which <see cref="PlayerKicked"/> event was fired.</param>
        /// <param name="info">Information about <see cref="PlayerKicked"/> event.</param>
        protected virtual void OnKick(DateTime timestamp, string[] info)
        {
            var eventArgs = new KickEventArgs
            {
                Timestamp = timestamp,
                Player    = GetPlayerInfo(info[1]),
                Kicker    = info[3],
                Message   = info.Length == 7 ? info[5] : string.Empty
            };

            PlayerKicked.Fire(ServerEndPoint, eventArgs);
        }
Ejemplo n.º 4
0
        public override void Process(PlayerDeathEvent packet, Player player)
        {
            if (serverConfig.IsHardcore)
            {
                player.IsPermaDeath = true;
                PlayerKicked playerKicked = new PlayerKicked("Permanent death from hardcore mode");
                player.SendPacket(playerKicked);
            }

            player.LastStoredPosition = packet.DeathPosition;
            playerManager.SendPacketToOtherPlayers(packet, player);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Hooks into EAC checks and exposes events for it;
        /// MUST be called after in GameStartDone or later
        /// </summary>
        public static void Init()
        {
            //if (_isInitialized)
            //    throw new InvalidOperationException(nameof(EacTools) + "." + nameof(Init) + " may only be called once.");

            Log.Debug("Hooking into the EAC response callbacks ...");

            if (EACServer.Instance == null)
            {
                throw new ApplicationException("Cannot activate EAC monitoring because EAC server is not (yet) started.");
            }

            var successDelegate = EACServer.Instance.GetSuccessDelegate();
            var kickDelegate    = EACServer.Instance.GetKickDelegate();

            if (successDelegate == null || kickDelegate == null)
            {
                throw new ApplicationException("Cannot activate EAC monitoring because success and kick delegates are not (yet) set.");
            }

            var kickDelegateNew = new KickPlayerDelegate(delegate(ClientInfo info, GameUtils.KickPlayerData data)
            {
                if (PersistentData.Instance.EacWhitelist.Contains(info.playerId))
                {
                    Log.Out($"EAC check failed but player \"{info.playerName}\" ({info.playerId}) is exempt from EAC kicks.");
                    // Call success delegate instead
                    successDelegate(info);
                }
                else
                {
                    // Let original kick delegate handle it
                    kickDelegate(info, data);
                    PlayerKicked?.Invoke(info, data);
                }
            });

            // Replace original kick delegate with our new modified one
            EACServer.Instance.SetKickDelegate(kickDelegateNew);

            var successDelegateNew = new AuthenticationSuccessfulCallbackDelegate(delegate(ClientInfo info)
            {
                // Let original kick delegate handle it
                successDelegate(info);
                AuthenticationSuccessful?.Invoke(info);
            });

            // Replace original success delegate with our new modified one
            EACServer.Instance.SetSuccessDelegate(successDelegateNew);

            //_isInitialized = true;
            Log.Debug("EAC monitoring activated.");
        }
Ejemplo n.º 6
0
        public override void Process(PlayerDeathEvent packet, Player player)
        {
            if (serverConfig.IsHardcore)
            {
                player.IsPermaDeath = true;
                PlayerKicked playerKicked = new PlayerKicked("Permanent death from hardcore mode");
                player.SendPacket(playerKicked);
            }

            player.LastStoredPosition = packet.DeathPosition;

            if (player.Permissions > Perms.MODERATOR)
            {
                player.SendPacket(new ChatMessage(ChatMessage.SERVER_ID, "You can use /back to go to your death location"));
            }

            playerManager.SendPacketToOtherPlayers(packet, player);
        }
Ejemplo n.º 7
0
 internal void RaiseClientKicked(ulong user)
 {
     PlayerKicked?.Invoke(user);
 }