Browse Source

增加玩家点击过逻辑

johnclot69 10 months ago
parent
commit
c3adb8757f
1 changed files with 125 additions and 1 deletions
  1. 125 1
      DotNet/Hotfix/Scenes/Game/Room/HGHuangHuangComponentSystem.cs

+ 125 - 1
DotNet/Hotfix/Scenes/Game/Room/HGHuangHuangComponentSystem.cs

@@ -1080,7 +1080,131 @@ namespace ET.Server
         /// <param name="player"></param>
         public static void Guo(this HGHuangHuangComponent self, Room room, Player player)
         {
-            
+            // 玩家必须在可操作列表里
+            if (!self.OperableList.Contains(player.Id))
+            {
+                return;
+            }
+
+            // 从碰杠集合中移除
+            self.CanPgIds.Remove(player.Id);
+            // 从可操作玩家集合中移除
+            self.OperableList.Remove(player.Id);
+            // 不是摸牌人,改time
+            if (self.DrawCardPlayer.Id != player.Id)
+            {
+                if (self.CanHuIds.Contains(player.Id))
+                {
+                    self.CanHuIds.Remove(player.Id);
+                }
+
+                if (self.GangHuIds.Count > 0)
+                {
+                    self.GangHuIds.Remove(player.Id);
+                    if (self.GangHuIds.Count > 0)
+                    {
+                        // 设置操作动作玩家
+                        if (self.CurrentPlayer.Id == player.Id)
+                        {
+                            self.CurrentPlayer = room.GetPlayer(self.GangHuIds.First());
+                            self.Time = 15;
+                            // 广播过
+                            foreach (Player p in room.GetAllPlayers().Values.Where(p => p != null))
+                            {
+                                RoomInfo info = ProtoHelper.RoomToProto(room, p, player);
+                                info.Time = 15;
+                                MessageHelper.SendToClient(p, new G2C_OperationPush(){info = info});
+                            }
+                        }
+                    }
+                    else
+                    {
+                        if (self.ClickHuIds.Count == 0)
+                        {
+                            self.DrawCardPlayer = self.GangPlayer;
+                            self.Flag = false;
+                        }
+                        else
+                        {
+                            // 没有其他人可以胡,且有人点击胡 结算胡 游戏结束
+                            self.SettlementHu();
+                            self.GameOver(room);
+                        }
+                    }
+                }
+                else
+                {
+                    if (self.OperableList.Count == 0)
+                    {
+                        if (self.ClickHuIds.Count > 0)
+                        {
+                            // 没有其他人有胡 且有人点击胡 结算胡 游戏结束
+                            self.SettlementHu();
+                            self.GameOver(room);
+                        }
+                        else
+                        {
+                            self.DrawCardPlayer = self.GetNextPlayer(self.DisCardPlayer.Pos);
+                            self.Flag = false;
+                        }
+                    }
+                    else
+                    {
+                        if (self.CurrentPlayer.Id == player.Id)
+                        {
+                            long opId = 0;
+                            if (self.CanHuIds.Count > 0)
+                            {
+                                self.CurrentPlayer = self.Players[room.GetPlayer(self.CanHuIds.First()).Pos];
+                                opId = self.CanHuIds.First();
+                            }
+                            else if (self.CanPgIds.Count > 0)
+                            {
+                                self.CurrentPlayer = self.Players[room.GetPlayer(self.CanPgIds.First()).Pos];
+                                opId = self.CanPgIds.First();
+                            }
+                            else
+                            {
+                                self.CurrentPlayer = self.Players[room.GetPlayer(self.OperableList.First()).Pos];
+                                opId = self.OperableList.First();
+                            }
+
+                            self.Time = 15;
+                            // 广播过
+                            foreach (Player p in room.GetAllPlayers().Values.Where(p => p != null))
+                            {
+                                RoomInfo info = ProtoHelper.RoomToProto(room, p, player);
+                                info.Time = 15;
+                                MessageHelper.SendToClient(p, new G2C_OperationPush(){info = info});
+                            }
+                        }
+                    }
+
+                    if (self.CanHuIds.Count == 0)
+                    {
+                        self.GangPlayer = null;
+                    }
+                }
+            }
+            else
+            {
+                if (self.CanHuIds.Contains(player.Id))
+                {
+                    // 从胡牌集合中移除
+                    self.CanHuIds.Remove(player.Id);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 获取下个玩家
+        /// </summary>
+        /// <param name="self"></param>
+        /// <param name="curPos">当前玩家位置</param>
+        /// <returns></returns>
+        private static Player GetNextPlayer(this HGHuangHuangComponent self, int curPos)
+        {
+            return self.Players[(curPos + 1) % self.GetParent<Room>().MaxNum];
         }
 
         /// <summary>