Inheritance: global::ProtoBuf.IExtensible
 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);
                }
            }));
        }