コード例 #1
0
        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;
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 public static void OnPlayerQuit(PlayerQuitEventArgs args)
 {
     PlayerQuit?.Invoke(args);
 }