C2G_BindPlayerHandler.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System;
  2. using System.Collections.Generic;
  3. namespace ET.Server
  4. {
  5. /// <summary>
  6. /// 选角绑定角色
  7. /// </summary>
  8. [MessageHandler(SceneType.Game)]
  9. public class C2G_BindPlayerHandler: AMRpcHandler<C2G_BindPlayer, G2C_BindPlayer>
  10. {
  11. protected override async ETTask Run(Session session, C2G_BindPlayer request, G2C_BindPlayer response, Action reply)
  12. {
  13. // 判断参数
  14. if (string.IsNullOrEmpty(request.PlayerId.ToString()))
  15. {
  16. Log.Debug($"参数错误,角色id为空");
  17. response.Error = ErrorCode.ERR_ParameterError;
  18. reply();
  19. return;
  20. }
  21. PlayerInfo info = session.GetComponent<SessionPlayerComponent>().PlayerInfo;
  22. if (info != null && request.PlayerId != info.Id)
  23. {
  24. Log.Debug($"参数错误,角色id错误");
  25. response.Error = ErrorCode.ERR_ParameterError;
  26. reply();
  27. return;
  28. }
  29. Scene scene = session.DomainScene();
  30. WNPlayer player = scene.GetComponent<GamePlayerComponent>().Get(request.PlayerId);
  31. if (player != null)
  32. {
  33. // 重新登录,赋值session
  34. if (player.Session.InstanceId != session.InstanceId)
  35. {
  36. player.Session = session;
  37. Log.Debug($"重新登录,赋值session...");
  38. }
  39. }
  40. else
  41. {
  42. player = scene.GetComponent<GamePlayerComponent>().AddChild<WNPlayer, Session>(session);
  43. }
  44. // 绑定选择的玩家
  45. session.GetComponent<SessionPlayerComponent>().BindPlayerId(player);
  46. // todo 分配场景
  47. Map map = MapHelper.BindPlayerDispatch(player);
  48. MapConfig mapConfig = map.Prop;
  49. // 登录数据
  50. player.OnLogin();
  51. map.OnPlayerLogin(player);
  52. response.Player = PlayerHelper.PlayerInfoToProto(player);
  53. response.Player.areaId = mapConfig.TemplateID;
  54. response.Player.instanceId = map.Id;
  55. response.Player.mapId = map.MapId;
  56. reply();
  57. await ETTask.CompletedTask;
  58. }
  59. }
  60. }