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 }); }
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); }
//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); }
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); }
/// <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."); }
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); }
internal void RaiseClientKicked(ulong user) { PlayerKicked?.Invoke(user); }