C2G_EnterMapHandler.cs 1.2 KB

12345678910111213141516171819202122232425262728293031
  1. using System;
  2. namespace ET.Server
  3. {
  4. [MessageHandler(SceneType.Gate)]
  5. public class C2G_EnterMapHandler : AMRpcHandler<C2G_EnterMap, G2C_EnterMap>
  6. {
  7. protected override async ETTask Run(Session session, C2G_EnterMap request, G2C_EnterMap response, Action reply)
  8. {
  9. Player player = session.GetComponent<SessionPlayerComponent>().GetMyPlayer();
  10. // 在Gate上动态创建一个Map Scene,把Unit从DB中加载放进来,然后传送到真正的Map中,这样登陆跟传送的逻辑就完全一样了
  11. GateMapComponent gateMapComponent = player.AddComponent<GateMapComponent>();
  12. gateMapComponent.Scene = await SceneFactory.Create(gateMapComponent, "GateMap", SceneType.Map);
  13. Scene scene = gateMapComponent.Scene;
  14. // 这里可以从DB中加载Unit
  15. Unit unit = Server.UnitFactory.Create(scene, player.Id, UnitType.Player);
  16. unit.AddComponent<UnitGateComponent, long>(session.InstanceId);
  17. StartSceneConfig startSceneConfig = StartSceneConfigCategory.Instance.GetBySceneName(session.DomainZone(), "Map1");
  18. response.MyId = player.Id;
  19. reply();
  20. // 开始传送
  21. await TransferHelper.Transfer(unit, startSceneConfig.InstanceId, startSceneConfig.Name);
  22. }
  23. }
  24. }