protected override bool ExecCommand(StoryInstance instance, long delta) { Scene scene = instance.Context as Scene; if (null != scene) { int targetSceneId = m_TargetSceneId.Value; Msg_RC_ChangeScene msg = new Msg_RC_ChangeScene(); msg.target_scene_id = targetSceneId; scene.NotifyAllUser(RoomMessageDefine.Msg_RC_ChangeScene, msg); } return false; }
internal void ChangeScene(int scene_type) { m_ActiveScene.Reset(); m_ScenePool.RecycleScene(m_ActiveScene); m_ActiveScene = null; foreach (User us in room_users_) { us.IsEntered = false; } can_close_time_ = 0; m_ActiveScene = m_ScenePool.NewScene(); m_ActiveScene.SetRoom(this); //场景数据加载由加载线程执行(注:场景没有加载完成,场景状态仍然是sleep,Scene.Tick不会有实际的动作) SceneLoadThread.Instance.QueueAction(m_ActiveScene.LoadData, scene_type); Msg_RC_ChangeScene msg = new Msg_RC_ChangeScene(); msg.target_scene_id = scene_type; foreach (User us in room_users_) { us.SendMessage(RoomMessageDefine.Msg_RC_ChangeScene, msg); } LogSys.Log(LOG_TYPE.INFO, "Room.ChangeScene {0} scene {1}", cur_room_id_, scene_type); }
private void PlayerGotoRoom(User user, int roomId, int targetRoomId) { bool isFieldThread; int ix = GetActiveRoomThreadIndex(targetRoomId, out isFieldThread); if (ix < 0) return; RoomThread roomThread; if (isFieldThread) { roomThread = field_roomthread_list_[ix]; } else { roomThread = roomthread_list_[ix]; } roomThread.QueueAction(roomThread.AddUser, user, targetRoomId, (MyAction<bool, int, User>)((bool ret, int sceneId, User successUser) => { if (ret) { Msg_RC_ChangeScene msg = new Msg_RC_ChangeScene(); msg.target_scene_id = sceneId; successUser.SendMessage(RoomMessageDefine.Msg_RC_ChangeScene, msg); Msg_RL_ChangeSceneResult replyBuilder = new Msg_RL_ChangeSceneResult(); EntityInfo info = user.Info; if (null != info) { replyBuilder.HP = info.Hp; replyBuilder.MP = info.Energy; } replyBuilder.UserGuid = user.Guid; replyBuilder.RoomID = roomId; replyBuilder.TargetRoomID = targetRoomId; replyBuilder.Result = (int)SceneOperationResultEnum.Success; connector_.SendMsgToLobby(replyBuilder); } else { Msg_RL_ChangeSceneResult replyBuilder = new Msg_RL_ChangeSceneResult(); replyBuilder.UserGuid = user.Guid; replyBuilder.RoomID = roomId; replyBuilder.TargetRoomID = targetRoomId; replyBuilder.Result = (int)SceneOperationResultEnum.Cant_Find_Room; connector_.SendMsgToLobby(replyBuilder); } })); }