public void OnKicked(KickReason reason)
        {
            _intentionalDisconnect = true;

            var text = reason switch
            {
                KickReason.QSBVersionNotMatching => "Server refused connection as QSB version does not match.",
                KickReason.GameVersionNotMatching => "Server refused connection as Outer Wilds version does not match.",
                KickReason.DLCNotMatching => "Server refused connection as DLC installation state does not match.",
                KickReason.InEye => "Server refused connection as game has progressed too far.",
                KickReason.None => "Kicked from server. No reason given.",
                _ => $"Kicked from server. KickReason:{reason}",
            };

            PopupOK += () =>
            {
                if (QSBSceneManager.IsInUniverse)
                {
                    LoadManager.LoadScene(OWScene.TitleScreen, LoadManager.FadeType.ToBlack, 2f);
                }
            };

            OpenInfoPopup(text, "OK");

            SetButtonActive(DisconnectButton, false);
            SetButtonActive(ConnectButton, true);
            SetButtonActive(QuitButton, true);
            SetButtonActive(HostButton, true);
            SetButtonActive(ResumeGameButton, PlayerData.LoadLoopCount() > 1);
            SetButtonActive(NewGameButton, true);
        }
예제 #2
0
 private void KickReason_Click(object sender, EventArgs e)
 {
     if (KickReason.Text.EndsWith("(Optional)"))
     {
         KickReason.Clear();
     }
 }
예제 #3
0
    private void DoKickOff(KickProto proto)
    {
        LogUtil.Log("DoKickOff!!!");
        DoKickOff();
        string     tips;
        KickReason reason = (KickReason)proto.reason;

        switch (reason)
        {
        case KickReason.MUTI_LOGIN:
            tips = "你的帐号在其他地方登录,你被迫下线。请关闭游戏后重新登录。";
            break;

        case KickReason.ILLIGAL_ACTION:
            tips = "你的帐号操作异常,已被迫下线。请关闭游戏后重新登录。";
            break;

        case KickReason.ROOM_NOT_EXIST:
            tips = "包间号码输入错误,请重新输入";
            break;

        case KickReason.ROOM_DISMISSED:
            tips = "房主解散了包间! ";
            break;

        case KickReason.LEAVE_ROOM:
            tips = "你离开了包间!";
            break;

        case KickReason.ALREADY_IN_ROOM:
            tips = "你已经加入了一个包间,请退出后重新进入。";
            break;

        case KickReason.ROOM_OVER:
            tips = "房间结束,请退出后重新进入。";
            break;

        case KickReason.ROOM_AHEAD_DISMISSED:
            tips = "房间未打完第一局,提前解散,请退出后重新进入。";
            break;

        case KickReason.ILLEGAL_STEP:
            tips = "非法行棋,请退出后重新进入。";
            break;

        default:
            LogUtil.LogWarning(string.Format("error kick reason {0} at {1}", proto.reason, name));
            return;
        }

        LogUtil.Log("tips = " + tips);
        TipsWindow.instance.Show(tips, () =>
        {
            GameManager.instance.QuitGame();
        });
    }
예제 #4
0
        public ClientKickCommand(IEnumerable <uint> clientIds, KickReason kickreason, string reasonMessage = null) : base("ClientKick")
        {
            foreach (uint clientId in clientIds)
            {
                AddParameter("clid", clientId);
            }

            AddParameter("reasonid", (uint)kickreason);

            if (!reasonMessage.IsNullOrTrimmedEmpty())
            {
                if (reasonMessage?.Length > 40)
                {
                    reasonMessage = reasonMessage.Substring(0, 40);
                }

                AddParameter("reasonmsg", reasonMessage);
            }
        }
예제 #5
0
    //Handles alert from the server telling us we have been kicked from the server
    public static void HandleKickedFromServer(ref NetworkPacket Packet)
    {
        //Get the reason we were kicked from the packet data
        string KickReason = Packet.ReadString();

        //Log a message showing thats happening here
        Log.Chat("Kicked from server: " + KickReason + ", changing scene...", true);

        //Instantiate a new KickReason prefab, make it remain between scene changes
        GameObject KickReasonObject = GameObject.Instantiate(PrefabManager.Instance.KickReasonPrefab, Vector3.zero, Quaternion.identity);

        DontDestroyOnLoad(KickReasonObject);

        //Get the script object on the KickReasonObject and use that to store the KickReason string inside it
        KickReason KickReasonScript = KickReasonObject.GetComponent <KickReason>();

        KickReasonScript.Reason = KickReason;

        //Now change to the scene showing the user they have been kicked from the game
        SceneManager.LoadScene("Kicked");
    }
예제 #6
0
 internal PlayerToKick(string userId, KickReason reason)
 {
     this.userId  = userId;
     this.reason  = reason;
     creationTime = (uint)PlayerEvents.stopwatch.Elapsed.TotalSeconds;
 }
예제 #7
0
                public void Save(string Key)
                {
                    bool   found      = false;
                    string OutputFile = "./Database/Users/" + Name + "/Info.Dat";

                    Utilities.IO.PrepareDirectory("./Database/");
                    Utilities.IO.PrepareDirectory("./Database/Users/");
                    Utilities.IO.PrepareDirectory("./Database/Users/" + Name);
                    Utilities.IO.PrepareFile(OutputFile);
                    string[]      OutputFileContents = Utilities.IO.ReadAllLines(OutputFile);
                    string        OutTime            = Utilities.DateTimeUtilities.ToYearTimeDescending(Utilities.DateTimeUtilities.FormatDateTime(DateTime.Now));
                    List <String> Output             = new List <String>();

                    foreach (string line in OutputFileContents)
                    {
                        #region GetDataCouplets
                        string ThisLine = line;
                        if (!(ThisLine.Contains("\t")))
                        {
                            Output.Add(line);
                            continue;
                        }
                        while (ThisLine.Contains("\t\t"))
                        {
                            ThisLine = ThisLine.Replace("\t\t", "\t");
                        }
                        string Header    = ThisLine.Split('\t')[0];
                        string Data      = ThisLine.Remove(0, ((Header.Length) + 1));
                        var    Converted = Utilities.IO.StringToVariable(Data);
                        //NOTE: These WILL Bypass GUI mode if enabled, as the GUI setting is turned on until it is read.
                        //if (Converted is Boolean) Logger.Console.WriteLine(String.Format("Bool: {0}", Data));
                        //if (Converted is IPAddress) Logger.Console.WriteLine(String.Format("IPAddress: {0}", Data));
                        //if (Converted is Decimal) Logger.Console.WriteLine(String.Format("Decimal: {0}", Data));
                        //if (Converted is Int32) Logger.Console.WriteLine(String.Format("Int32: {0}", Data));
                        //if (Converted is String) Logger.Console.WriteLine(String.Format("String: {0}", Data));
                        #endregion
                        if (Key.ToUpperInvariant() != Header.ToUpperInvariant())
                        {
                            Output.Add(line);
                            continue;
                        }
                        switch (Header.ToUpperInvariant())
                        {
                            #region Switches
                        case Strings.Name:
                            Output.Add(Strings.Name + "\t\t" + Name);
                            found = true;
                            break;

                        case Strings.DisplayedName:
                            Output.Add(Strings.DisplayedName + "\t\t" + DisplayedName.ToString());
                            found = true;
                            break;

                        case Strings.LastIP:
                            Output.Add(Strings.LastIP + "\t\t\t" + LastIP.ToString());
                            found = true;
                            break;

                        case Strings.LoginCount:
                            Output.Add(Strings.LoginCount + "\t\t" + LoginCount.ToString());
                            found = true;
                            break;

                        case Strings.MessagesTyped:
                            Output.Add(Strings.MessagesTyped + "\t\t" + MessagesTyped.ToString());
                            found = true;
                            break;

                        case Strings.DateJoined:
                            Output.Add(Strings.DateJoined + "\t\t" + DateJoined.ToString());
                            found = true;
                            break;

                        case Strings.DateLastVisited:
                            Output.Add(Strings.DateLastVisited + "\t\t" + DateLastVisited.ToString());
                            found = true;
                            break;

                        case Strings.PlayTime:
                            Output.Add(Strings.PlayTime + "\t\t" + PlayTime.ToString());
                            found = true;
                            break;

                        case Strings.Kills:
                            Output.Add(Strings.Kills + "\t\t\t" + Kills.ToString());
                            found = true;
                            break;

                        case Strings.Deaths:
                            Output.Add(Strings.Deaths + "\t\t\t" + Deaths.ToString());
                            found = true;
                            break;

                        case Strings.FlightsFlown:
                            Output.Add(Strings.FlightsFlown + "\t\t" + FlightsFlown.ToString());
                            found = true;
                            break;

                        case Strings.FlightHours:
                            Output.Add(Strings.FlightHours + "\t\t" + FlightHours.ToString());
                            found = true;
                            break;

                        case Strings.Banned:
                            Output.Add(Strings.Banned + "\t\t\t" + Banned.ToString());
                            found = true;
                            break;

                        case Strings.BannedBy:
                            Output.Add(Strings.BannedBy + "\t\t" + BannedBy.ToString());
                            found = true;
                            break;

                        case Strings.DateBanned:
                            Output.Add(Strings.DateBanned + "\t\t" + DateBanned.ToString());
                            found = true;
                            break;

                        case Strings.BanExpires:
                            Output.Add(Strings.BanExpires + "\t\t" + BanExpires.ToString());
                            found = true;
                            break;

                        case Strings.BanReason:
                            Output.Add(Strings.BanReason + "\t\t" + BanReason.ToString());
                            found = true;
                            break;

                        case Strings.TimesBanned:
                            Output.Add(Strings.TimesBanned + "\t\t" + TimesBanned.ToString());
                            found = true;
                            break;

                        case Strings.Frozen:
                            Output.Add(Strings.Frozen + "\t\t\t" + Frozen.ToString());
                            found = true;
                            break;

                        case Strings.FrozenBy:
                            Output.Add(Strings.FrozenBy + "\t\t" + FrozenBy.ToString());
                            found = true;
                            break;

                        case Strings.DateFrozen:
                            Output.Add(Strings.DateFrozen + "\t\t" + DateFrozen.ToString());
                            found = true;
                            break;

                        case Strings.FreezeExpires:
                            Output.Add(Strings.FreezeExpires + "\t\t" + FreezeExpires.ToString());
                            found = true;
                            break;

                        case Strings.FreezeReason:
                            Output.Add(Strings.FreezeReason + "\t\t" + FreezeReason.ToString());
                            found = true;
                            break;

                        case Strings.TimesFrozen:
                            Output.Add(Strings.TimesFrozen + "\t\t" + TimesFrozen.ToString());
                            found = true;
                            break;

                        case Strings.Muted:
                            Output.Add(Strings.Muted + "\t\t\t" + Muted.ToString());
                            found = true;
                            break;

                        case Strings.MutedBy:
                            Output.Add(Strings.MutedBy + "\t\t\t" + MutedBy.ToString());
                            found = true;
                            break;

                        case Strings.DateMuted:
                            Output.Add(Strings.DateMuted + "\t\t" + DateMuted.ToString());
                            found = true;
                            break;

                        case Strings.MuteExpires:
                            Output.Add(Strings.MuteExpires + "\t\t" + MuteExpires.ToString());
                            found = true;
                            break;

                        case Strings.MuteReason:
                            Output.Add(Strings.MuteReason + "\t\t" + MuteReason.ToString());
                            found = true;
                            break;

                        case Strings.TimesMuted:
                            Output.Add(Strings.TimesMuted + "\t\t" + TimesMuted.ToString());
                            found = true;
                            break;

                        case Strings.Kicked:
                            Output.Add(Strings.Kicked + "\t\t\t" + Kicked.ToString());
                            found = true;
                            break;

                        case Strings.KickedBy:
                            Output.Add(Strings.KickedBy + "\t\t" + KickedBy.ToString());
                            found = true;
                            break;

                        case Strings.DateKicked:
                            Output.Add(Strings.DateKicked + "\t\t" + DateKicked.ToString());
                            found = true;
                            break;

                        case Strings.KickReason:
                            Output.Add(Strings.KickReason + "\t\t" + KickReason.ToString());
                            found = true;
                            break;

                        case Strings.TimesKicked:
                            Output.Add(Strings.TimesKicked + "\t\t" + TimesKicked.ToString());
                            found = true;
                            break;

                        case Strings.OthersBanned:
                            Output.Add(Strings.OthersBanned + "\t\t" + OthersBanned.ToString());
                            found = true;
                            break;

                        case Strings.OthersFrozen:
                            Output.Add(Strings.OthersFrozen + "\t\t" + OthersFrozen.ToString());
                            found = true;
                            break;

                        case Strings.OthersMuted:
                            Output.Add(Strings.OthersMuted + "\t\t" + OthersMuted.ToString());
                            found = true;
                            break;

                        case Strings.OthersKicked:
                            Output.Add(Strings.OthersKicked + "\t\t" + OthersKicked.ToString());
                            found = true;
                            break;

                        case Strings.GroupRepresented:
                            Output.Add(Strings.GroupRepresented + "\t" + GroupRepresented.ToString());
                            found = true;
                            break;

                            #endregion
                        default:
                            Logger.Log.SystemMessage(String.Format("Unrecognised Value: {0}", Header));
                            //Unrecognised Value.
                            break;
                        }
                    }
                    if (!found)
                    {
                        switch (Key)
                        {
                            #region Switches
                        case Strings.Name:
                            Output.Add(Strings.Name + "\t\t" + Name);
                            found = true;
                            break;

                        case Strings.DisplayedName:
                            Output.Add(Strings.DisplayedName + "\t\t" + DisplayedName.ToString());
                            found = true;
                            break;

                        case Strings.LastIP:
                            Output.Add(Strings.LastIP + "\t\t\t" + LastIP.ToString());
                            found = true;
                            break;

                        case Strings.LoginCount:
                            Output.Add(Strings.LoginCount + "\t\t" + LoginCount.ToString());
                            found = true;
                            break;

                        case Strings.MessagesTyped:
                            Output.Add(Strings.MessagesTyped + "\t\t" + MessagesTyped.ToString());
                            found = true;
                            break;

                        case Strings.DateJoined:
                            Output.Add(Strings.DateJoined + "\t\t" + DateJoined.ToString());
                            found = true;
                            break;

                        case Strings.DateLastVisited:
                            Output.Add(Strings.DateLastVisited + "\t\t" + DateLastVisited.ToString());
                            found = true;
                            break;

                        case Strings.PlayTime:
                            Output.Add(Strings.PlayTime + "\t\t" + PlayTime.ToString());
                            found = true;
                            break;

                        case Strings.Kills:
                            Output.Add(Strings.Kills + "\t\t\t" + Kills.ToString());
                            found = true;
                            break;

                        case Strings.Deaths:
                            Output.Add(Strings.Deaths + "\t\t\t" + Deaths.ToString());
                            found = true;
                            break;

                        case Strings.FlightsFlown:
                            Output.Add(Strings.FlightsFlown + "\t\t" + FlightsFlown.ToString());
                            found = true;
                            break;

                        case Strings.FlightHours:
                            Output.Add(Strings.FlightHours + "\t\t" + FlightHours.ToString());
                            found = true;
                            break;

                        case Strings.Banned:
                            Output.Add(Strings.Banned + "\t\t\t" + Banned.ToString());
                            found = true;
                            break;

                        case Strings.BannedBy:
                            Output.Add(Strings.BannedBy + "\t\t" + BannedBy.ToString());
                            found = true;
                            break;

                        case Strings.DateBanned:
                            Output.Add(Strings.DateBanned + "\t\t" + DateBanned.ToString());
                            found = true;
                            break;

                        case Strings.BanExpires:
                            Output.Add(Strings.BanExpires + "\t\t" + BanExpires.ToString());
                            found = true;
                            break;

                        case Strings.BanReason:
                            Output.Add(Strings.BanReason + "\t\t" + BanReason.ToString());
                            found = true;
                            break;

                        case Strings.TimesBanned:
                            Output.Add(Strings.TimesBanned + "\t\t" + TimesBanned.ToString());
                            found = true;
                            break;

                        case Strings.Frozen:
                            Output.Add(Strings.Frozen + "\t\t\t" + Frozen.ToString());
                            found = true;
                            break;

                        case Strings.FrozenBy:
                            Output.Add(Strings.FrozenBy + "\t\t" + FrozenBy.ToString());
                            found = true;
                            break;

                        case Strings.DateFrozen:
                            Output.Add(Strings.DateFrozen + "\t\t" + DateFrozen.ToString());
                            found = true;
                            break;

                        case Strings.FreezeExpires:
                            Output.Add(Strings.FreezeExpires + "\t\t" + FreezeExpires.ToString());
                            found = true;
                            break;

                        case Strings.FreezeReason:
                            Output.Add(Strings.FreezeReason + "\t\t" + FreezeReason.ToString());
                            found = true;
                            break;

                        case Strings.TimesFrozen:
                            Output.Add(Strings.TimesFrozen + "\t\t" + TimesFrozen.ToString());
                            found = true;
                            break;

                        case Strings.Muted:
                            Output.Add(Strings.Muted + "\t\t\t" + Muted.ToString());
                            found = true;
                            break;

                        case Strings.MutedBy:
                            Output.Add(Strings.MutedBy + "\t\t\t" + MutedBy.ToString());
                            found = true;
                            break;

                        case Strings.DateMuted:
                            Output.Add(Strings.DateMuted + "\t\t" + DateMuted.ToString());
                            found = true;
                            break;

                        case Strings.MuteExpires:
                            Output.Add(Strings.MuteExpires + "\t\t" + MuteExpires.ToString());
                            found = true;
                            break;

                        case Strings.MuteReason:
                            Output.Add(Strings.MuteReason + "\t\t" + MuteReason.ToString());
                            found = true;
                            break;

                        case Strings.TimesMuted:
                            Output.Add(Strings.TimesMuted + "\t\t" + TimesMuted.ToString());
                            found = true;
                            break;

                        case Strings.Kicked:
                            Output.Add(Strings.Kicked + "\t\t\t" + Kicked.ToString());
                            found = true;
                            break;

                        case Strings.KickedBy:
                            Output.Add(Strings.KickedBy + "\t\t" + KickedBy.ToString());
                            found = true;
                            break;

                        case Strings.DateKicked:
                            Output.Add(Strings.DateKicked + "\t\t" + DateKicked.ToString());
                            found = true;
                            break;

                        case Strings.KickReason:
                            Output.Add(Strings.KickReason + "\t\t" + KickReason.ToString());
                            found = true;
                            break;

                        case Strings.TimesKicked:
                            Output.Add(Strings.TimesKicked + "\t\t" + TimesKicked.ToString());
                            found = true;
                            break;

                        case Strings.OthersBanned:
                            Output.Add(Strings.OthersBanned + "\t\t" + OthersBanned.ToString());
                            found = true;
                            break;

                        case Strings.OthersFrozen:
                            Output.Add(Strings.OthersFrozen + "\t\t" + OthersFrozen.ToString());
                            found = true;
                            break;

                        case Strings.OthersMuted:
                            Output.Add(Strings.OthersMuted + "\t\t" + OthersMuted.ToString());
                            found = true;
                            break;

                        case Strings.OthersKicked:
                            Output.Add(Strings.OthersKicked + "\t\t" + OthersKicked.ToString());
                            found = true;
                            break;

                        case Strings.GroupRepresented:
                            Output.Add(Strings.GroupRepresented + "\t" + GroupRepresented.ToString());
                            found = true;
                            break;

                            #endregion
                        default:
                            Logger.Log.SystemMessage(String.Format("Unrecognised Value: {0}", Key));
                            //Unrecognised Value.
                            break;
                        }
                    }
                    try
                    {
                        File.WriteAllLines(OutputFile, Output.ToList());
                    }
                    catch
                    {
                    }
                }
예제 #8
0
        private void ReadConfigValues()
        {
            if (!File.Exists(PluginSettingsFilePath))
            {
                const string          message = "SaveClanTag.xml not found.";
                FileNotFoundException ex      = new FileNotFoundException(message, PluginSettingsFilePath);
                Logger.FatalToUI("SaveClanTag.xml not found.", ex);
                throw ex;
            }

            Util.WaitUntilReadable(PluginSettingsFilePath, 10000);
            XDocument doc = XDocument.Load(PluginSettingsFilePath);

            if (doc.Root == null || doc.Root.Name != "Settings")
            {
                const string message            = "Could not find settings-root-node in SaveClanTag.xml.";
                ConfigurationErrorsException ex = new ConfigurationErrorsException(message);
                Logger.FatalToUI(message, ex);
                throw ex;
            }

            XAttribute patternAttribute = doc.Root.Attribute("clanTagPattern");

            if (patternAttribute == null)
            {
                const string message            = "Could not find 'clanTagPattern' Attribute in Settings-node.";
                ConfigurationErrorsException ex = new ConfigurationErrorsException(message);
                Logger.FatalToUI(message, ex);
                throw ex;
            }

            Pattern = patternAttribute.Value.Trim();

            if (Pattern.IsNullOrTimmedEmpty())
            {
                const string message            = "Please provide a non empty 'clanTagPattern' Attribute in Settings-node.";
                ConfigurationErrorsException ex = new ConfigurationErrorsException(message);
                Logger.FatalToUI(message, ex);
                throw ex;
            }

            XAttribute reasonAttribute = doc.Root.Attribute("kickReason");

            if (reasonAttribute == null)
            {
                const string message            = "Could not find 'kickReason' Attribute in Settings-node.";
                ConfigurationErrorsException ex = new ConfigurationErrorsException(message);
                Logger.FatalToUI(message, ex);
                throw ex;
            }

            KickReason = reasonAttribute.Value.Trim();

            if (KickReason.IsNullOrTimmedEmpty())
            {
                const string message            = "Please provide a non empty 'kickReason' Attribute in Settings-node.";
                ConfigurationErrorsException ex = new ConfigurationErrorsException(message);
                Logger.FatalToUI(message, ex);
                throw ex;
            }

            XAttribute publicReasonAttribute = doc.Root.Attribute("publicKickReason");

            if (publicReasonAttribute == null)
            {
                const string message            = "Could not find 'publicKickReason' Attribute in Settings-node.";
                ConfigurationErrorsException ex = new ConfigurationErrorsException(message);
                Logger.FatalToUI(message, ex);
                throw ex;
            }

            PublicKickReason = publicReasonAttribute.Value.Trim();

            if (PublicKickReason.IsNullOrTimmedEmpty())
            {
                const string message            = "Please provide a non empty 'publicKickReason' Attribute in Settings-node.";
                ConfigurationErrorsException ex = new ConfigurationErrorsException(message);
                Logger.FatalToUI(message, ex);
                throw ex;
            }

            ClanMembers = new HashSet <string>();
            foreach (XElement loginElement in doc.Root.Descendants("Login"))
            {
                if (loginElement.Value.IsNullOrTimmedEmpty())
                {
                    continue;
                }

                string login = loginElement.Value.Trim();
                if (!ClanMembers.Contains(login))
                {
                    ClanMembers.Add(login.ToLower());
                }
            }
        }
예제 #9
0
        /// <summary>
        /// Kicks one or more clients specified with clid from their currently joined channel or from the server,
        /// depending on reasonid. The reasonmsg parameter specifies a text message sent to the kicked clients. This
        /// parameter is optional and may only have a maximum of 40 characters.
        /// </summary>
        /// <param name="clientIds">the ids of the clients to kick</param>
        /// <param name="kickreason">the reason for kicking</param>
        /// <param name="reasonMessage">the reason for kicking as text</param>
        public SimpleResponse KickClients(IEnumerable<uint> clientIds, KickReason kickreason, string reasonMessage)
        {
            Command command = CommandName.ClientKick.CreateCommand();

            foreach (uint clientId in clientIds)
                command.AddParameter("clid", clientId);

            command.AddParameter("reasonid", (uint) kickreason);

            if (!reasonMessage.IsNullOrTrimmedEmpty())
            {
                if (reasonMessage.Length > 40)
                    reasonMessage = reasonMessage.Substring(0, 40);

                command.AddParameter("reasonmsg", reasonMessage);
            }

            return ResponseBase<SimpleResponse>.Parse(SendCommand(command));
        }
예제 #10
0
 public SimpleResponse KickClients(IEnumerable<uint> clientIds, KickReason kickreason)
 {
     return KickClients(clientIds, kickreason, null);
 }
예제 #11
0
 /// <summary>
 /// Kicks one client specified with clid from his currently joined channel or from the server,
 /// depending on reasonid. The reasonmsg parameter specifies a text message sent to the kicked client. This
 /// parameter is optional and may only have a maximum of 40 characters.
 /// </summary>
 /// <param name="clientId">the id of the client to kick</param>
 /// <param name="kickReason">the reason for kicking</param>
 /// <param name="reasonMessage">the reason for kicking as text</param>
 public SimpleResponse KickClient(uint clientId, KickReason kickReason, string reasonMessage)
 {
     return KickClients(new[] {clientId}, kickReason, reasonMessage);
 }
예제 #12
0
 public SimpleResponse KickClient(uint clientId, KickReason kickReason)
 {
     return KickClient(clientId, kickReason, null);
 }
예제 #13
0
 public ClientKickCommand(uint clientId, KickReason kickReason, string reasonMessage = null) : this(new[] { clientId }, kickReason, reasonMessage)
 {
 }