SessionPlayerComponentSystem.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. namespace ET.Server
  4. {
  5. [FriendOf(typeof (SessionPlayerComponent))]
  6. public static class SessionPlayerComponentSystem
  7. {
  8. public class SessionPlayerComponentAwakeSystem: AwakeSystem<SessionPlayerComponent, PlayerInfo>
  9. {
  10. protected override void Awake(SessionPlayerComponent self, PlayerInfo playerInfo)
  11. {
  12. Log.Info($"创建session玩家绑定组件...");
  13. self.PlayerInfo = playerInfo;
  14. self.PlayerId = playerInfo.Id;
  15. }
  16. }
  17. public class SessionPlayerComponentDestroySystem: DestroySystem<SessionPlayerComponent>
  18. {
  19. protected override void Destroy(SessionPlayerComponent self)
  20. {
  21. WNPlayer player = self.GetMyPlayer();
  22. if (player == null)
  23. {
  24. return;
  25. }
  26. Log.Info($"玩家断线了, playerId={self.PlayerId}, name={player.GetName()}");
  27. Map map = player.Map;
  28. if (map != null)
  29. {
  30. // 玩家离开
  31. player.GetComponent<PlayerTempDataComponent>().MapData.ready = false;
  32. // 记录玩家历史
  33. map.SyncPlayerHistoryData(player);
  34. // 战斗服场景玩家离开
  35. map.PlayerLeaveRequest(player, false);
  36. // 本地场景移除玩家
  37. map.RemovePlayer(player, false);
  38. // 移除本地玩家数据
  39. self.DomainScene().GetComponent<GamePlayerComponent>().Remove(player.GetId());
  40. // 战斗服结束场景
  41. map.DestroyZoneRequest();
  42. // 移除本地场景数据
  43. map.DomainScene().GetComponent<GameMapComponent>().Remove(map.Id, map.RoomId);
  44. }
  45. player.Dispose();
  46. map.Dispose();
  47. }
  48. }
  49. /// <summary>
  50. /// 绑定玩家id
  51. /// </summary>
  52. /// <param name="self"></param>
  53. /// <param name="playerId"></param>
  54. public static void BindPlayerId(this SessionPlayerComponent self, long playerId)
  55. {
  56. Log.Debug($"session玩家绑定组件 绑定玩家id={playerId}");
  57. self.PlayerId = playerId;
  58. }
  59. /// <summary>
  60. /// 获取当前玩家实体
  61. /// </summary>
  62. /// <param name="self"></param>
  63. /// <returns></returns>
  64. public static WNPlayer GetMyPlayer(this SessionPlayerComponent self)
  65. {
  66. return self.DomainScene().GetComponent<GamePlayerComponent>().Get(self.PlayerId);
  67. }
  68. }
  69. }