internal static void Execute(object msg, User user) { Msg_CRC_Create enter_msg = msg as Msg_CRC_Create; if (enter_msg == null) { return; } LogSys.Log(LOG_TYPE.DEBUG, "user {0}({1}) enter.", user.RoleId, user.GetKey()); user.UserControlState = (int)UserControlState.User; user.IsEntered = true; Room room = user.OwnRoom; if (null != room) { Scene scene = room.GetActiveScene(); if (null != scene) { UserInfo userInfo = user.Info; if (null != userInfo) { userInfo.GetXSoulInfo().GetAllXSoulPartData().Clear(); foreach (var pair in user.XSouls.GetAllXSoulPartData()) { userInfo.GetXSoulInfo().SetXSoulPartData(pair.Key, pair.Value); } foreach (var pair in userInfo.GetXSoulInfo().GetAllXSoulPartData()) { XSoulPartInfo part_info = pair.Value; foreach (int impactid in part_info.GetActiveImpacts()) { //LogSys.Log(LOG_TYPE.DEBUG, "---add xsoul impact to self: " + impactid); ImpactSystem.Instance.SendImpactToCharacter(userInfo, impactid, userInfo.GetId(), -1, -1, userInfo.GetMovementStateInfo().GetPosition3D(), userInfo.GetMovementStateInfo().GetFaceDir()); } } if (scene.SceneState == SceneState.Running) { Data_Unit unit = scene.MapData.ExtractData(DataMap_Type.DT_Unit, userInfo.GetUnitId()) as Data_Unit; if (null != unit) { userInfo.GetMovementStateInfo().SetPosition(unit.m_Pos); userInfo.GetMovementStateInfo().SetFaceDir(unit.m_RotAngle); userInfo.RevivePoint = unit.m_Pos; } scene.SyncForNewUser(user); } } } } }