123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace ET.Server
- {
- /// <summary>
- /// 黄冈晃晃 玩家操作动作吃、碰、杠、胡、过
- /// </summary>
- [MessageHandler(SceneType.Game)]
- public class C2G_HGHHOperationHandler : AMRpcHandler<C2G_HGHHOperation, G2C_HGHHOperation>
- {
- protected override async ETTask Run(Session session, C2G_HGHHOperation request, G2C_HGHHOperation response, Action reply)
- {
- Player player = session.GetComponent<SessionPlayerComponent>().GetMyPlayer();
- if (player == null)
- {
- response.Error = ErrorCode.ERR_OperationError;
- response.Message = "玩家不存在或离线...";
- reply();
- return;
- }
-
- // 玩家是否进入房间
- if (player.RoomId <= 0)
- {
- response.Error = ErrorCode.ERR_OperationError;
- response.Message = "玩家不在房间,不可操作...";
- reply();
- return;
- }
- Scene scene = session.DomainScene();
-
- // 房间是否能找到
- Room room = scene.GetComponent<GameRoomComponent>().Get(player.RoomId);
- if (room == null)
- {
- response.Error = ErrorCode.ERR_OperationError;
- response.Message = "请求的房间不存在或已解散...";
- reply();
- return;
- }
-
- // 玩家房间是否已开始
- HGHHComponent hghhComponent = room.GetComponent<HGHHComponent>();
- if (hghhComponent != null && hghhComponent.State != 2)
- {
- response.Error = ErrorCode.ERR_OperationError;
- response.Message = "房间不在游戏中,不可操作...";
- reply();
- return;
- }
-
- // 玩家状态
- if (player.State != 2)
- {
- response.Error = ErrorCode.ERR_OperationError;
- response.Message = "玩家不在游戏中,不可操作...";
- reply();
- return;
- }
- if (request.OpType is < 0 or > 5)
- {
- response.Error = ErrorCode.ERR_ParameterError;
- response.Message = "参数错误...";
- reply();
- return;
- }
-
- if ((request.OpType == (int)OperationType.CHI || request.OpType == (int)OperationType.GANG)
- && (request.Card <= 0 || !HGHHConst.Values.Contains(request.Card)))
- {
- response.Error = ErrorCode.ERR_OperationError;
- response.Message = "牌值错误...";
- reply();
- return;
- }
-
- // 判断玩家是否可操作
- if (!hghhComponent.OperableList.Contains(player.Id))
- {
- response.Error = ErrorCode.ERR_OperationError;
- response.Message = "不可操作...";
- reply();
- return;
- }
-
- using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.PlayerOperation, player.Id))
- {
- switch (request.OpType)
- {
- case (int)OperationType.CHI:
- hghhComponent.Chi(room, player, request.Card);
- break;
- case (int)OperationType.PENG:
- hghhComponent.Peng(room, player);
- break;
- case (int)OperationType.GANG:
- hghhComponent.Gang(room, player, request.Card);
- break;
- case (int)OperationType.HU:
- hghhComponent.Hu(room, player);
- break;
- case (int)OperationType.GUO:
- hghhComponent.Guo(room, player);
- break;
- }
- }
-
- // 返回
- reply();
- await ETTask.CompletedTask;
- }
- }
- }
|