using System;
namespace ET.Server
{
///
/// 向场景增加玩家
///
[MessageHandler(SceneType.Game)]
public class C2G_AddUnitsToMapHandler: AMRpcHandler
{
protected override async ETTask Run(Session session, C2G_AddUnitsToMap request, G2C_AddUnitsToMap 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;
}
// 参数判断
if (request.UnitId <= 0 || request.Force < 0 || request.Force > (int)AreaForce.FORCEB )
{
Log.Debug($"参数错误...unitId={request.UnitId}, force={request.Force}");
response.Error = ErrorCode.ERR_ParameterError;
reply();
return;
}
// Struct.MonsterUnit unit = new Struct.MonsterUnit();
// unit.id = request.UnitId;
// unit.force = request.Force;
// if (!string.IsNullOrEmpty(request.Flag))
// {
// unit.flag = request.Flag;
// }
// else
// {
// unit.x = request.X;
// unit.y = request.Y;
// }
// unit.autoGuard = true;
//
// await player.Map.AddUnits(unit, false);
// 预先创建数据
Scene scene = session.DomainScene();
long _id = IdGenerater.Instance.GenerateUnitId(scene.DomainZone());
PlayerInfo playerInfo = new PlayerInfo();
playerInfo.Id = _id;
playerInfo.UserId = session.GetComponent().UserId;
playerInfo.PlayerType = 1;
playerInfo.Name = "玩家-" + _id;
playerInfo.Sex = 0;
playerInfo.Pro = (int)PlayerProType.CANG_LANG;
playerInfo.Level = 1;
playerInfo.Exp = 0;
WNPlayer unitPlayer = await PlayerFactory.CreatPlayer(session, playerInfo);
if (unitPlayer == null)
{
Log.Debug($"创建单位玩家有误...unitPlayerId={_id}, force={request.Force}");
response.Error = ErrorCode.ERR_CreateUnitPlayerError;
reply();
return;
}
// 进入主播场景
player.Map.PlayerEnterRequest(unitPlayer);
reply();
}
}
}