You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
1.2 KiB
32 lines
1.2 KiB
3 years ago
|
using System;
|
||
|
|
||
|
|
||
|
namespace ET
|
||
|
{
|
||
|
[FriendClass(typeof(GateMapComponent))]
|
||
|
[MessageHandler]
|
||
|
public class C2G_EnterMapHandler : AMRpcHandler<C2G_EnterMap, G2C_EnterMap>
|
||
|
{
|
||
|
protected override async ETTask Run(Session session, C2G_EnterMap request, G2C_EnterMap response, Action reply)
|
||
|
{
|
||
|
Player player = session.GetComponent<SessionPlayerComponent>().GetMyPlayer();
|
||
|
|
||
|
// 在Gate上动态创建一个Map Scene,把Unit从DB中加载放进来,然后传送到真正的Map中,这样登陆跟传送的逻辑就完全一样了
|
||
|
GateMapComponent gateMapComponent = player.AddComponent<GateMapComponent>();
|
||
|
gateMapComponent.Scene = await SceneFactory.Create(gateMapComponent, "GateMap", SceneType.Map);
|
||
|
|
||
|
Scene scene = gateMapComponent.Scene;
|
||
|
|
||
|
// 这里可以从DB中加载Unit
|
||
|
Unit unit = await UnitFactory.Create(scene, player.Id, UnitType.Player);
|
||
|
unit.AddComponent<UnitGateComponent, long>(session.InstanceId);
|
||
|
|
||
|
StartSceneConfig startSceneConfig = StartSceneConfigCategory.Instance.GetBySceneName(session.DomainZone(), "Map1");
|
||
|
response.MyId = player.Id;
|
||
|
reply();
|
||
|
|
||
|
// 开始传送
|
||
|
await TransferHelper.Transfer(unit, startSceneConfig.InstanceId, startSceneConfig.Name);
|
||
|
}
|
||
|
}
|
||
|
}
|