using System;
namespace ET.Server
{
///
/// 加载100%
///
[MessageHandler(SceneType.Game)]
public class C2G_EnterMapHandler: AMRpcHandler
{
protected override async ETTask Run(Session session, C2G_EnterMap request, G2C_EnterMap response, Action reply)
{
if (session.DomainScene().SceneType != SceneType.Game)
{
Log.Debug($"Game 请求的Scene错误...SceneType={session.DomainScene().SceneType}");
session.Dispose();
return;
}
// 移除session自动超时组件
session.RemoveComponent();
WNPlayer player = session.GetComponent().GetMyPlayer();
if (player == null)
{
Log.Debug($"操作错误, player is null");
response.Error = ErrorCode.ERR_OperationError;
reply();
return;
}
Log.Info($"玩家请求进入场景: playerId={player.GetId()}, instanceId={request.InstanceId}");
Map map = player.Map;
// 当客户端所要进入的场景不为空且不等于当前场景,忽略掉本次请求
if (request.InstanceId > 0 && map.Id != request.InstanceId)
{
Log.Debug(
$"连续切图吗? playerId={player.GetId()}, name={player.GetName()}, mapId={map.MapId}, map.InstanceId={map.Id}, request.InstanceId={request.InstanceId}");
response.Error = ErrorCode.ERR_OperationToFast;
reply();
return;
}
if (map == null)
{
Log.Debug($"进入场景出错, 场景不存在...playerId={player.GetId()}, instanceId={request.InstanceId}");
response.Error = ErrorCode.ERR_EnterMapError;
reply();
return;
}
map.PlayerEnterRequest(player);
map.OnPlayerEntered(player);
response.MapInstanceId = player.Map.Id;
reply();
// 等待client ready消息
// await session.DomainScene().GetComponent().Wait();
// player.OnEndEnterScene();
// 测试添加单位
// Struct.MonsterUnit unit = new Struct.MonsterUnit();
// unit.id = 101;
// unit.force = (int)AreaForce.MONSTER;
// unit.x = 5;
// unit.y = 12;
// unit.autoGuard = true;
// await player.Map.AddUnits(unit, false);
await ETTask.CompletedTask;
}
}
}