C2G_BindPlayerHandler.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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().Trim()))
  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. player.Session = session;
  35. }
  36. else
  37. {
  38. player = scene.GetComponent<GamePlayerComponent>().AddChild<WNPlayer, Session>(session);
  39. }
  40. // 绑定选择的玩家
  41. session.GetComponent<SessionPlayerComponent>().BindPlayerId(request.PlayerId > 0 ? request.PlayerId : player.GetId());
  42. // todo 分配场景
  43. Map map = MapHelper.BindPlayerDispatch(player);
  44. MapConfig mapConfig = map.Prop;
  45. // 登录数据
  46. player.OnLogin();
  47. map.PlayerLogin(player);
  48. response.Player = PlayerHelper.PlayerInfoToProto(player);
  49. response.Player.areaId = mapConfig.TemplateID;
  50. response.Player.instanceId = map.Id;
  51. response.Player.mapId = map.MapId;
  52. reply();
  53. await ETTask.CompletedTask;
  54. }
  55. }
  56. }