diff --git a/CardSharp/GameComponents/Desk.cs b/CardSharp/GameComponents/Desk.cs index fc4e46a..768d1a2 100644 --- a/CardSharp/GameComponents/Desk.cs +++ b/CardSharp/GameComponents/Desk.cs @@ -16,6 +16,7 @@ public class Desk : MessageSenderBase, IDesk, IEquatable #region Static Members private static readonly Dictionary Desks = new Dictionary(); + internal static readonly List ShutedGroups = new List(); #endregion @@ -136,7 +137,9 @@ public void ParseCommand(string playerid, string command) try { var player = GetPlayer(playerid); - _currentParser.Parse(this, player, command); + if (ShutedGroups.All(g => g != DeskId)) { + _currentParser.Parse(this, player, command); + } _standardParser.Parse(this, player, command); } catch (Exception e) diff --git a/CardSharp/GameComponents/FakePlayer.cs b/CardSharp/GameComponents/FakePlayer.cs index ddba465..a4e74f9 100644 --- a/CardSharp/GameComponents/FakePlayer.cs +++ b/CardSharp/GameComponents/FakePlayer.cs @@ -29,5 +29,10 @@ public override string ToAtCode() { return $"{PlayerId}"; } + + public override string ToAtCodeWithRole() + { + return $"{RoleToString()}-{PlayerId}"; + } } } diff --git a/CardSharp/GameComponents/Player.cs b/CardSharp/GameComponents/Player.cs index d29a91f..e66981e 100644 --- a/CardSharp/GameComponents/Player.cs +++ b/CardSharp/GameComponents/Player.cs @@ -54,12 +54,12 @@ public virtual string ToAtCode() #endif } - public string ToAtCodeWithRole() + public virtual string ToAtCodeWithRole() { return $"{RoleToString()}[CQ:at,qq={PlayerId}]"; } - private string RoleToString() + protected string RoleToString() { switch (Type) { diff --git a/CardSharp/GameSteps/StandardParser.cs b/CardSharp/GameSteps/StandardParser.cs index 865e9a6..69c871a 100644 --- a/CardSharp/GameSteps/StandardParser.cs +++ b/CardSharp/GameSteps/StandardParser.cs @@ -8,8 +8,29 @@ namespace CardSharp.GameSteps { public class StandardParser : ICommandParser { + private static readonly Random Random = new Random(); + private static readonly string RandomBotId = Random.Next(1000000).ToString(); + private static bool _checkedConflict = false; + public void Parse(Desk desk, Player player, string command) { + if (command.Contains("当前玩家有: ") && !_checkedConflict) + { + _checkedConflict = true; + desk.AddMessage($"我们目前检测到了一些小小的\"机器人冲突\". 输入[关闭机器人{RandomBotId}]来降低这个机器人在此群的地位."); + } + + if (command == $"关闭机器人{RandomBotId}") + { + Desk.ShutedGroups.Add(desk.DeskId); + desk.AddMessage($"已经关闭斗地主. 重新恢复为[恢复机器人{RandomBotId}]"); + } + else if (command == $"关闭机器人{RandomBotId}") + { + Desk.ShutedGroups.RemoveAll(d => d == desk.DeskId); + desk.AddMessage("已经重启斗地主."); + } + var pconfig = PlayerConfig.GetConfig(player); switch (command) {