C2G_EnterMapHandler.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using BattleIce;
  3. namespace ET.Server
  4. {
  5. /// <summary>
  6. /// 加载100%
  7. /// </summary>
  8. [MessageHandler(SceneType.Game)]
  9. public class C2G_EnterMapHandler: AMRpcHandler<C2G_EnterMap, G2C_EnterMap>
  10. {
  11. protected override async ETTask Run(Session session, C2G_EnterMap request, G2C_EnterMap response, Action reply)
  12. {
  13. WNPlayer player = session.GetComponent<SessionPlayerComponent>().GetMyPlayer();
  14. if (player == null)
  15. {
  16. Log.Debug($"操作错误, player is null");
  17. response.Error = ErrorCode.ERR_OperationError;
  18. reply();
  19. return;
  20. }
  21. Log.Info($"玩家请求进入场景: playerId={player.GetId()}, instanceId={request.InstanceId}");
  22. Map map = player.Map;
  23. // 当客户端所要进入的场景不为空且不等于当前场景,忽略掉本次请求
  24. if (request.InstanceId > 0 && map.Id != request.InstanceId)
  25. {
  26. Log.Debug(
  27. $"连续切图吗? playerId={player.GetId()}, name={player.GetName()}, mapId={map.MapId}, map.InstanceId={map.Id}, request.InstanceId={request.InstanceId}");
  28. response.Error = ErrorCode.ERR_OperationToFast;
  29. reply();
  30. return;
  31. }
  32. if (map == null)
  33. {
  34. Log.Debug($"进入场景出错, 场景不存在...playerId={player.GetId()}, instanceId={request.InstanceId}");
  35. response.Error = ErrorCode.ERR_EnterMapError;
  36. reply();
  37. return;
  38. }
  39. map.PlayerEnterRequest(player);
  40. map.OnPlayerEntered(player);
  41. response.MapInstanceId = player.Map.Id;
  42. reply();
  43. //等待client ready消息
  44. await session.DomainScene().GetComponent<ObjectWait>().Wait<Wait_PlayerReady>();
  45. player.OnEndEnterScene();
  46. await ETTask.CompletedTask;
  47. }
  48. }
  49. }