C2G_EnterMapHandler.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. if (session.DomainScene().SceneType != SceneType.Game)
  14. {
  15. Log.Debug($"Game 请求的Scene错误...SceneType={session.DomainScene().SceneType}");
  16. session.Dispose();
  17. return;
  18. }
  19. // 移除session自动超时组件
  20. session.RemoveComponent<SessionAcceptTimeoutComponent>();
  21. WNPlayer player = session.GetComponent<SessionPlayerComponent>().GetMyPlayer();
  22. if (player == null)
  23. {
  24. Log.Debug($"操作错误, player is null");
  25. response.Error = ErrorCode.ERR_OperationError;
  26. reply();
  27. return;
  28. }
  29. Log.Info($"玩家请求进入场景: playerId={player.GetId()}, instanceId={request.InstanceId}");
  30. Map map = player.Map;
  31. // 当客户端所要进入的场景不为空且不等于当前场景,忽略掉本次请求
  32. if (request.InstanceId > 0 && map.Id != request.InstanceId)
  33. {
  34. Log.Debug(
  35. $"连续切图吗? playerId={player.GetId()}, name={player.GetName()}, mapId={map.MapId}, map.InstanceId={map.Id}, request.InstanceId={request.InstanceId}");
  36. response.Error = ErrorCode.ERR_OperationToFast;
  37. reply();
  38. return;
  39. }
  40. if (map == null)
  41. {
  42. Log.Debug($"进入场景出错, 场景不存在...playerId={player.GetId()}, instanceId={request.InstanceId}");
  43. response.Error = ErrorCode.ERR_EnterMapError;
  44. reply();
  45. return;
  46. }
  47. map.PlayerEnterRequest(player);
  48. map.OnPlayerEntered(player);
  49. response.MapInstanceId = player.Map.Id;
  50. reply();
  51. // 等待client ready消息
  52. // await session.DomainScene().GetComponent<ObjectWait>().Wait<Wait_PlayerReady>();
  53. // player.OnEndEnterScene();
  54. // 测试添加单位
  55. // Struct.MonsterUnit unit = new Struct.MonsterUnit();
  56. // unit.id = 101;
  57. // unit.force = (int)AreaForce.MONSTER;
  58. // unit.x = 5;
  59. // unit.y = 12;
  60. // unit.autoGuard = true;
  61. // await player.Map.AddUnits(unit, false);
  62. await ETTask.CompletedTask;
  63. }
  64. }
  65. }