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.
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|