public void Close(string reason, bool clientDisconnect = false) { PlayerQuitEventArgs playerQuitEvent = new PlayerQuitEventArgs(this, $"§e{this.Name} が世界を去りました", reason); PlayerEvents.OnPlayerQuit(playerQuitEvent); reason = playerQuitEvent.Reason; if (!string.IsNullOrEmpty(reason)) { DisconnectPacket pk = new DisconnectPacket(); pk.Message = reason; this.SendPacket(pk, true); } if (!string.IsNullOrEmpty(playerQuitEvent.QuitMessage)) { Server.Instance.BroadcastMessage(playerQuitEvent.QuitMessage); } Logger.Info($"§e{this.Name} left the game"); this.Save(); if (this.World != null) { this.World.UnLoadChunks(this); } this.Closed = true; this.World?.RemovePlayer(this); Server.Instance.RemovePlayer(this.EntityID); if (!clientDisconnect) { Server.Instance.NetworkManager.PlayerClose(this.EndPoint, reason); } this.PlayerListEntry = null; }
public void Close(string reason) { PlayerQuitEventArgs playerQuitEvent = new PlayerQuitEventArgs(this, $"§e{this.Name} が世界を去りました", reason); Server.Instance.Event.Player.OnPlayerQuit(this, playerQuitEvent); reason = playerQuitEvent.Reason; if (!string.IsNullOrEmpty(reason)) { DisconnectPacket pk = new DisconnectPacket(); pk.Message = reason; this.SendPacket(pk, flag: RakNetProtocol.FlagImmediate); } if (!string.IsNullOrEmpty(playerQuitEvent.QuitMessage)) { Server.Instance.BroadcastMessage(playerQuitEvent.QuitMessage); } Logger.Info($"§e{this.Name} left the game"); this.Close(); Server.Instance.Network.GetSession(this.EndPoint)?.Disconnect(reason); }
public static void OnPlayerQuit(PlayerQuitEventArgs args) { PlayerQuit?.Invoke(args); }