C2G_DisCardHandler.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace ET.Server
  5. {
  6. /// <summary>
  7. /// 出牌
  8. /// </summary>
  9. [MessageHandler(SceneType.Game)]
  10. public class C2G_DisCardHandler : AMRpcHandler<C2G_DisCard, G2C_DisCard>
  11. {
  12. protected override async ETTask Run(Session session, C2G_DisCard request, G2C_DisCard response, Action reply)
  13. {
  14. Player player = session.GetComponent<SessionPlayerComponent>().GetMyPlayer();
  15. if (player == null)
  16. {
  17. response.Error = ErrorCode.ERR_OperationError;
  18. response.Message = "玩家不存在或离线...";
  19. reply();
  20. return;
  21. }
  22. // 玩家是否进入房间
  23. if (player.RoomId <= 0)
  24. {
  25. response.Error = ErrorCode.ERR_OperationError;
  26. response.Message = "玩家不在房间,不可操作...";
  27. reply();
  28. return;
  29. }
  30. Scene scene = session.DomainScene();
  31. // 房间是否能找到
  32. Room room = scene.GetComponent<GameRoomComponent>().Get(player.RoomId);
  33. if (room == null)
  34. {
  35. response.Error = ErrorCode.ERR_OperationError;
  36. response.Message = "请求的房间不存在或已解散...";
  37. reply();
  38. return;
  39. }
  40. // todo 玩家房间是否已开始, 后面这个判断要调整
  41. // 房间状态
  42. HGHuangHuangComponent hgHuangHuangComponent = room.GetComponent<HGHuangHuangComponent>();
  43. if (hgHuangHuangComponent != null && hgHuangHuangComponent.State != 2)
  44. {
  45. response.Error = ErrorCode.ERR_OperationError;
  46. response.Message = "房间不在游戏中,不可出牌...";
  47. reply();
  48. return;
  49. }
  50. // 玩家状态
  51. if (player.State != 2)
  52. {
  53. response.Error = ErrorCode.ERR_OperationError;
  54. response.Message = "玩家不在游戏中,不可出牌...";
  55. reply();
  56. return;
  57. }
  58. if (request.Card <= 0 || !HGHuangHuangConst.Values.Contains(request.Card))
  59. {
  60. response.Error = ErrorCode.ERR_OperationError;
  61. response.Message = "出牌错误...";
  62. reply();
  63. return;
  64. }
  65. // 判断玩家是否可出牌
  66. if (hgHuangHuangComponent.CurrentPlayer.Id != player.Id)
  67. {
  68. response.Error = ErrorCode.ERR_OperationError;
  69. response.Message = "不是当前操作玩家,出牌错误...";
  70. reply();
  71. return;
  72. }
  73. // 出牌
  74. hgHuangHuangComponent.DisCard(room, player, request.Card, false);
  75. // 返回
  76. reply();
  77. await ETTask.CompletedTask;
  78. }
  79. }
  80. }